Detailed changes
@@ -188,15 +188,15 @@ tasks:
swag:
desc: Generate OpenAPI spec from swag annotations
cmds:
- - go run github.com/swaggo/swag/cmd/swag@v1.16.6 init --generalInfo main.go --dir . --output docs --parseDependency --parseInternal --parseDepth 5
+ - go run github.com/swaggo/swag/cmd/swag@v1.16.6 init --generalInfo main.go --dir . --output internal/swagger --packageName swagger --parseDependency --parseInternal --parseDepth 5
sources:
- internal/server/*.go
- internal/proto/*.go
- main.go
generates:
- - docs/docs.go
- - docs/swagger.json
- - docs/swagger.yaml
+ - internal/swagger/docs.go
+ - internal/swagger/swagger.json
+ - internal/swagger/swagger.yaml
sqlc:
desc: Generate code using SQLC
@@ -11,7 +11,7 @@ import (
"runtime"
"strings"
- _ "github.com/charmbracelet/crush/docs"
+ _ "github.com/charmbracelet/crush/internal/swagger"
"github.com/charmbracelet/crush/internal/backend"
"github.com/charmbracelet/crush/internal/config"
httpswagger "github.com/swaggo/http-swagger/v2"
@@ -0,0 +1,3589 @@
+// Package swagger Code generated by swaggo/swag. DO NOT EDIT
+package swagger
+
+import "github.com/swaggo/swag"
+
+const docTemplate = `{
+ "schemes": {{ marshal .Schemes }},
+ "swagger": "2.0",
+ "info": {
+ "description": "{{escape .Description}}",
+ "title": "{{.Title}}",
+ "contact": {
+ "name": "Charm",
+ "url": "https://charm.sh"
+ },
+ "license": {
+ "name": "MIT",
+ "url": "https://github.com/charmbracelet/crush/blob/main/LICENSE"
+ },
+ "version": "{{.Version}}"
+ },
+ "host": "{{.Host}}",
+ "basePath": "{{.BasePath}}",
+ "paths": {
+ "/config": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "system"
+ ],
+ "summary": "Get server config",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ },
+ "/control": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "system"
+ ],
+ "summary": "Send server control command",
+ "parameters": [
+ {
+ "description": "Control command (e.g. shutdown)",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.ServerControl"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/health": {
+ "get": {
+ "tags": [
+ "system"
+ ],
+ "summary": "Health check",
+ "responses": {
+ "200": {
+ "description": "OK"
+ }
+ }
+ }
+ },
+ "/version": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "system"
+ ],
+ "summary": "Get server version",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.VersionInfo"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "workspaces"
+ ],
+ "summary": "List workspaces",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/proto.Workspace"
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "workspaces"
+ ],
+ "summary": "Create workspace",
+ "parameters": [
+ {
+ "description": "Workspace creation params",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.Workspace"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.Workspace"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "workspaces"
+ ],
+ "summary": "Get workspace",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.Workspace"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "workspaces"
+ ],
+ "summary": "Delete workspace",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "agent"
+ ],
+ "summary": "Get agent info",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.AgentInfo"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "agent"
+ ],
+ "summary": "Send message to agent",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Agent message",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.AgentMessage"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent/default-small-model": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "agent"
+ ],
+ "summary": "Get default small model",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Provider ID",
+ "name": "provider_id",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent/init": {
+ "post": {
+ "tags": [
+ "agent"
+ ],
+ "summary": "Initialize agent",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent/sessions/{sid}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "agent"
+ ],
+ "summary": "Get agent session",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.AgentSession"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent/sessions/{sid}/cancel": {
+ "post": {
+ "tags": [
+ "agent"
+ ],
+ "summary": "Cancel agent session",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent/sessions/{sid}/prompts/clear": {
+ "post": {
+ "tags": [
+ "agent"
+ ],
+ "summary": "Clear prompt queue",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent/sessions/{sid}/prompts/list": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "agent"
+ ],
+ "summary": "List queued prompts",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent/sessions/{sid}/prompts/queued": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "agent"
+ ],
+ "summary": "Get queued prompt status",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent/sessions/{sid}/summarize": {
+ "post": {
+ "tags": [
+ "agent"
+ ],
+ "summary": "Summarize session",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent/update": {
+ "post": {
+ "tags": [
+ "agent"
+ ],
+ "summary": "Update agent",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/config": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "workspaces"
+ ],
+ "summary": "Get workspace config",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/config/compact": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "config"
+ ],
+ "summary": "Set compact mode",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Config compact request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.ConfigCompactRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/config/import-copilot": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "config"
+ ],
+ "summary": "Import Copilot credentials",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.ImportCopilotResponse"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/config/model": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "config"
+ ],
+ "summary": "Set the preferred model",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Config model request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.ConfigModelRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/config/provider-key": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "config"
+ ],
+ "summary": "Set provider API key",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Config provider key request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.ConfigProviderKeyRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/config/refresh-oauth": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "config"
+ ],
+ "summary": "Refresh OAuth token",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Refresh OAuth request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.ConfigRefreshOAuthRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/config/remove": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "config"
+ ],
+ "summary": "Remove a config field",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Config remove request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.ConfigRemoveRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/config/set": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "config"
+ ],
+ "summary": "Set a config field",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Config set request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.ConfigSetRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/events": {
+ "get": {
+ "produces": [
+ "text/event-stream"
+ ],
+ "tags": [
+ "workspaces"
+ ],
+ "summary": "Stream workspace events (SSE)",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/filetracker/lastread": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "filetracker"
+ ],
+ "summary": "Get last read time for file",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "session_id",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "File path",
+ "name": "path",
+ "in": "query",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/filetracker/read": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "filetracker"
+ ],
+ "summary": "Record file read",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "File tracker read request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.FileTrackerReadRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/lsps": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "lsp"
+ ],
+ "summary": "List LSP clients",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/proto.LSPClientInfo"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/lsps/start": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "lsp"
+ ],
+ "summary": "Start LSP server",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "LSP start request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.LSPStartRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/lsps/stop": {
+ "post": {
+ "tags": [
+ "lsp"
+ ],
+ "summary": "Stop all LSP servers",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/lsps/{lsp}/diagnostics": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "lsp"
+ ],
+ "summary": "Get LSP diagnostics",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "LSP client name",
+ "name": "lsp",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/mcp/get-prompt": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "mcp"
+ ],
+ "summary": "Get MCP prompt",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "MCP get prompt request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.MCPGetPromptRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.MCPGetPromptResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/mcp/read-resource": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "mcp"
+ ],
+ "summary": "Read MCP resource",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "MCP read resource request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.MCPReadResourceRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/mcp/refresh-prompts": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "mcp"
+ ],
+ "summary": "Refresh MCP prompts",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "MCP name request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.MCPNameRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/mcp/refresh-resources": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "mcp"
+ ],
+ "summary": "Refresh MCP resources",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "MCP name request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.MCPNameRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/mcp/refresh-tools": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "mcp"
+ ],
+ "summary": "Refresh MCP tools",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "MCP name request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.MCPNameRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/mcp/states": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "mcp"
+ ],
+ "summary": "Get MCP client states",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/proto.MCPClientInfo"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/messages/user": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "workspaces"
+ ],
+ "summary": "Get all user messages for workspace",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/github_com_charmbracelet_crush_internal_proto.Message"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/permissions/grant": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "permissions"
+ ],
+ "summary": "Grant permission",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Permission grant",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.PermissionGrant"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/permissions/skip": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "permissions"
+ ],
+ "summary": "Get skip permissions status",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.PermissionSkipRequest"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "permissions"
+ ],
+ "summary": "Set skip permissions",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Permission skip request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.PermissionSkipRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/project/init": {
+ "post": {
+ "tags": [
+ "project"
+ ],
+ "summary": "Mark project as initialized",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/project/init-prompt": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "project"
+ ],
+ "summary": "Get project initialization prompt",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.ProjectInitPromptResponse"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/project/needs-init": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "project"
+ ],
+ "summary": "Check if project needs initialization",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.ProjectNeedsInitResponse"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/providers": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "workspaces"
+ ],
+ "summary": "Get workspace providers",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/sessions": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "sessions"
+ ],
+ "summary": "List sessions",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/proto.Session"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "sessions"
+ ],
+ "summary": "Create session",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Session creation params (title)",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.Session"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.Session"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/sessions/{sid}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "sessions"
+ ],
+ "summary": "Get session",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.Session"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ },
+ "put": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "sessions"
+ ],
+ "summary": "Update session",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Updated session",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.Session"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.Session"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "sessions"
+ ],
+ "summary": "Delete session",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/sessions/{sid}/filetracker/files": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "filetracker"
+ ],
+ "summary": "List tracked files for session",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/sessions/{sid}/history": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "sessions"
+ ],
+ "summary": "Get session history",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/proto.File"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/sessions/{sid}/messages": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "sessions"
+ ],
+ "summary": "Get session messages",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/github_com_charmbracelet_crush_internal_proto.Message"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/sessions/{sid}/messages/user": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "sessions"
+ ],
+ "summary": "Get user messages for session",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/github_com_charmbracelet_crush_internal_proto.Message"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ }
+ },
+ "definitions": {
+ "catwalk.Model": {
+ "type": "object",
+ "properties": {
+ "can_reason": {
+ "type": "boolean"
+ },
+ "context_window": {
+ "type": "integer"
+ },
+ "cost_per_1m_in": {
+ "type": "number"
+ },
+ "cost_per_1m_in_cached": {
+ "type": "number"
+ },
+ "cost_per_1m_out": {
+ "type": "number"
+ },
+ "cost_per_1m_out_cached": {
+ "type": "number"
+ },
+ "default_max_tokens": {
+ "type": "integer"
+ },
+ "default_reasoning_effort": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "options": {
+ "$ref": "#/definitions/catwalk.ModelOptions"
+ },
+ "reasoning_levels": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "supports_attachments": {
+ "type": "boolean"
+ }
+ }
+ },
+ "catwalk.ModelOptions": {
+ "type": "object",
+ "properties": {
+ "frequency_penalty": {
+ "type": "number"
+ },
+ "presence_penalty": {
+ "type": "number"
+ },
+ "provider_options": {
+ "type": "object",
+ "additionalProperties": {}
+ },
+ "temperature": {
+ "type": "number"
+ },
+ "top_k": {
+ "type": "integer"
+ },
+ "top_p": {
+ "type": "number"
+ }
+ }
+ },
+ "config.Attribution": {
+ "type": "object",
+ "properties": {
+ "co_authored_by": {
+ "type": "boolean"
+ },
+ "generated_with": {
+ "type": "boolean"
+ },
+ "trailer_style": {
+ "$ref": "#/definitions/config.TrailerStyle"
+ }
+ }
+ },
+ "config.Completions": {
+ "type": "object",
+ "properties": {
+ "max_depth": {
+ "type": "integer"
+ },
+ "max_items": {
+ "type": "integer"
+ }
+ }
+ },
+ "config.LSPConfig": {
+ "type": "object",
+ "properties": {
+ "args": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "command": {
+ "type": "string"
+ },
+ "disabled": {
+ "type": "boolean"
+ },
+ "env": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "filetypes": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "init_options": {
+ "type": "object",
+ "additionalProperties": {}
+ },
+ "options": {
+ "type": "object",
+ "additionalProperties": {}
+ },
+ "root_markers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "timeout": {
+ "type": "integer"
+ }
+ }
+ },
+ "config.LSPs": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/config.LSPConfig"
+ }
+ },
+ "config.MCPConfig": {
+ "type": "object",
+ "properties": {
+ "args": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "command": {
+ "type": "string"
+ },
+ "disabled": {
+ "type": "boolean"
+ },
+ "disabled_tools": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "env": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "headers": {
+ "description": "TODO: maybe make it possible to get the value from the env",
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "timeout": {
+ "type": "integer"
+ },
+ "type": {
+ "$ref": "#/definitions/config.MCPType"
+ },
+ "url": {
+ "type": "string"
+ }
+ }
+ },
+ "config.MCPType": {
+ "type": "string",
+ "enum": [
+ "stdio",
+ "sse",
+ "http"
+ ],
+ "x-enum-varnames": [
+ "MCPStdio",
+ "MCPSSE",
+ "MCPHttp"
+ ]
+ },
+ "config.MCPs": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/config.MCPConfig"
+ }
+ },
+ "config.Permissions": {
+ "type": "object",
+ "properties": {
+ "allowed_tools": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "config.Scope": {
+ "type": "integer",
+ "enum": [
+ 0,
+ 1
+ ],
+ "x-enum-varnames": [
+ "ScopeGlobal",
+ "ScopeWorkspace"
+ ]
+ },
+ "config.SelectedModel": {
+ "type": "object",
+ "properties": {
+ "frequency_penalty": {
+ "type": "number"
+ },
+ "max_tokens": {
+ "description": "Overrides the default model configuration.",
+ "type": "integer"
+ },
+ "model": {
+ "description": "The model id as used by the provider API.\nRequired.",
+ "type": "string"
+ },
+ "presence_penalty": {
+ "type": "number"
+ },
+ "provider": {
+ "description": "The model provider, same as the key/id used in the providers config.\nRequired.",
+ "type": "string"
+ },
+ "provider_options": {
+ "description": "Override provider specific options.",
+ "type": "object",
+ "additionalProperties": {}
+ },
+ "reasoning_effort": {
+ "description": "Only used by models that use the openai provider and need this set.",
+ "type": "string"
+ },
+ "temperature": {
+ "type": "number"
+ },
+ "think": {
+ "description": "Used by anthropic models that can reason to indicate if the model should think.",
+ "type": "boolean"
+ },
+ "top_k": {
+ "type": "integer"
+ },
+ "top_p": {
+ "type": "number"
+ }
+ }
+ },
+ "config.SelectedModelType": {
+ "type": "string",
+ "enum": [
+ "large",
+ "small"
+ ],
+ "x-enum-varnames": [
+ "SelectedModelTypeLarge",
+ "SelectedModelTypeSmall"
+ ]
+ },
+ "config.TUIOptions": {
+ "type": "object",
+ "properties": {
+ "compact_mode": {
+ "type": "boolean"
+ },
+ "completions": {
+ "$ref": "#/definitions/config.Completions"
+ },
+ "diff_mode": {
+ "type": "string"
+ },
+ "transparent": {
+ "type": "boolean"
+ }
+ }
+ },
+ "config.ToolGrep": {
+ "type": "object",
+ "properties": {
+ "timeout": {
+ "$ref": "#/definitions/time.Duration"
+ }
+ }
+ },
+ "config.ToolLs": {
+ "type": "object",
+ "properties": {
+ "max_depth": {
+ "type": "integer"
+ },
+ "max_items": {
+ "type": "integer"
+ }
+ }
+ },
+ "config.Tools": {
+ "type": "object",
+ "properties": {
+ "grep": {
+ "$ref": "#/definitions/config.ToolGrep"
+ },
+ "ls": {
+ "$ref": "#/definitions/config.ToolLs"
+ }
+ }
+ },
+ "config.TrailerStyle": {
+ "type": "string",
+ "enum": [
+ "none",
+ "co-authored-by",
+ "assisted-by"
+ ],
+ "x-enum-varnames": [
+ "TrailerStyleNone",
+ "TrailerStyleCoAuthoredBy",
+ "TrailerStyleAssistedBy"
+ ]
+ },
+ "csync.Map-string-config_ProviderConfig": {
+ "type": "object"
+ },
+ "github_com_charmbracelet_crush_internal_config.Config": {
+ "type": "object",
+ "properties": {
+ "$schema": {
+ "type": "string"
+ },
+ "lsp": {
+ "$ref": "#/definitions/config.LSPs"
+ },
+ "mcp": {
+ "$ref": "#/definitions/config.MCPs"
+ },
+ "models": {
+ "description": "We currently only support large/small as values here.",
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/config.SelectedModel"
+ }
+ },
+ "options": {
+ "$ref": "#/definitions/github_com_charmbracelet_crush_internal_config.Options"
+ },
+ "permissions": {
+ "$ref": "#/definitions/config.Permissions"
+ },
+ "providers": {
+ "description": "The providers that are configured",
+ "allOf": [
+ {
+ "$ref": "#/definitions/csync.Map-string-config_ProviderConfig"
+ }
+ ]
+ },
+ "recent_models": {
+ "description": "Recently used models stored in the data directory config.",
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/config.SelectedModel"
+ }
+ }
+ },
+ "tools": {
+ "$ref": "#/definitions/config.Tools"
+ }
+ }
+ },
+ "github_com_charmbracelet_crush_internal_config.Options": {
+ "type": "object",
+ "properties": {
+ "attribution": {
+ "$ref": "#/definitions/config.Attribution"
+ },
+ "auto_lsp": {
+ "type": "boolean"
+ },
+ "context_paths": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "data_directory": {
+ "description": "Relative to the cwd",
+ "type": "string"
+ },
+ "debug": {
+ "type": "boolean"
+ },
+ "debug_lsp": {
+ "type": "boolean"
+ },
+ "disable_auto_summarize": {
+ "type": "boolean"
+ },
+ "disable_default_providers": {
+ "type": "boolean"
+ },
+ "disable_metrics": {
+ "type": "boolean"
+ },
+ "disable_notifications": {
+ "type": "boolean"
+ },
+ "disable_provider_auto_update": {
+ "type": "boolean"
+ },
+ "disabled_tools": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "initialize_as": {
+ "type": "string"
+ },
+ "progress": {
+ "type": "boolean"
+ },
+ "skills_paths": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "tui": {
+ "$ref": "#/definitions/config.TUIOptions"
+ }
+ }
+ },
+ "github_com_charmbracelet_crush_internal_proto.Message": {
+ "type": "object",
+ "properties": {
+ "created_at": {
+ "type": "integer"
+ },
+ "id": {
+ "type": "string"
+ },
+ "model": {
+ "type": "string"
+ },
+ "parts": {
+ "type": "array",
+ "items": {}
+ },
+ "provider": {
+ "type": "string"
+ },
+ "role": {
+ "$ref": "#/definitions/proto.MessageRole"
+ },
+ "session_id": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "integer"
+ }
+ }
+ },
+ "lsp.ServerState": {
+ "type": "integer",
+ "enum": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ "x-enum-varnames": [
+ "StateUnstarted",
+ "StateStarting",
+ "StateReady",
+ "StateError",
+ "StateStopped",
+ "StateDisabled"
+ ]
+ },
+ "proto.AgentInfo": {
+ "type": "object",
+ "properties": {
+ "is_busy": {
+ "type": "boolean"
+ },
+ "is_ready": {
+ "type": "boolean"
+ },
+ "model": {
+ "$ref": "#/definitions/catwalk.Model"
+ },
+ "model_cfg": {
+ "$ref": "#/definitions/config.SelectedModel"
+ }
+ }
+ },
+ "proto.AgentMessage": {
+ "type": "object",
+ "properties": {
+ "attachments": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/proto.Attachment"
+ }
+ },
+ "prompt": {
+ "type": "string"
+ },
+ "session_id": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.AgentSession": {
+ "type": "object",
+ "properties": {
+ "completion_tokens": {
+ "type": "integer"
+ },
+ "cost": {
+ "type": "number"
+ },
+ "created_at": {
+ "type": "integer"
+ },
+ "id": {
+ "type": "string"
+ },
+ "is_busy": {
+ "type": "boolean"
+ },
+ "message_count": {
+ "type": "integer"
+ },
+ "parent_session_id": {
+ "type": "string"
+ },
+ "prompt_tokens": {
+ "type": "integer"
+ },
+ "summary_message_id": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "integer"
+ }
+ }
+ },
+ "proto.Attachment": {
+ "type": "object",
+ "properties": {
+ "content": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "file_name": {
+ "type": "string"
+ },
+ "file_path": {
+ "type": "string"
+ },
+ "mime_type": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.ConfigCompactRequest": {
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ },
+ "scope": {
+ "$ref": "#/definitions/config.Scope"
+ }
+ }
+ },
+ "proto.ConfigModelRequest": {
+ "type": "object",
+ "properties": {
+ "model": {
+ "$ref": "#/definitions/config.SelectedModel"
+ },
+ "model_type": {
+ "$ref": "#/definitions/config.SelectedModelType"
+ },
+ "scope": {
+ "$ref": "#/definitions/config.Scope"
+ }
+ }
+ },
+ "proto.ConfigProviderKeyRequest": {
+ "type": "object",
+ "properties": {
+ "api_key": {},
+ "provider_id": {
+ "type": "string"
+ },
+ "scope": {
+ "$ref": "#/definitions/config.Scope"
+ }
+ }
+ },
+ "proto.ConfigRefreshOAuthRequest": {
+ "type": "object",
+ "properties": {
+ "provider_id": {
+ "type": "string"
+ },
+ "scope": {
+ "$ref": "#/definitions/config.Scope"
+ }
+ }
+ },
+ "proto.ConfigRemoveRequest": {
+ "type": "object",
+ "properties": {
+ "key": {
+ "type": "string"
+ },
+ "scope": {
+ "$ref": "#/definitions/config.Scope"
+ }
+ }
+ },
+ "proto.ConfigSetRequest": {
+ "type": "object",
+ "properties": {
+ "key": {
+ "type": "string"
+ },
+ "scope": {
+ "$ref": "#/definitions/config.Scope"
+ },
+ "value": {}
+ }
+ },
+ "proto.Error": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.File": {
+ "type": "object",
+ "properties": {
+ "content": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "integer"
+ },
+ "id": {
+ "type": "string"
+ },
+ "path": {
+ "type": "string"
+ },
+ "session_id": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "integer"
+ },
+ "version": {
+ "type": "integer"
+ }
+ }
+ },
+ "proto.FileTrackerReadRequest": {
+ "type": "object",
+ "properties": {
+ "path": {
+ "type": "string"
+ },
+ "session_id": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.ImportCopilotResponse": {
+ "type": "object",
+ "properties": {
+ "success": {
+ "type": "boolean"
+ },
+ "token": {}
+ }
+ },
+ "proto.LSPClientInfo": {
+ "type": "object",
+ "properties": {
+ "connected_at": {
+ "type": "string"
+ },
+ "diagnostic_count": {
+ "type": "integer"
+ },
+ "error": {},
+ "name": {
+ "type": "string"
+ },
+ "state": {
+ "$ref": "#/definitions/lsp.ServerState"
+ }
+ }
+ },
+ "proto.LSPStartRequest": {
+ "type": "object",
+ "properties": {
+ "path": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.MCPClientInfo": {
+ "type": "object",
+ "properties": {
+ "connected_at": {
+ "type": "string"
+ },
+ "error": {},
+ "name": {
+ "type": "string"
+ },
+ "prompt_count": {
+ "type": "integer"
+ },
+ "resource_count": {
+ "type": "integer"
+ },
+ "state": {
+ "$ref": "#/definitions/proto.MCPState"
+ },
+ "tool_count": {
+ "type": "integer"
+ }
+ }
+ },
+ "proto.MCPGetPromptRequest": {
+ "type": "object",
+ "properties": {
+ "args": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "client_id": {
+ "type": "string"
+ },
+ "prompt_id": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.MCPGetPromptResponse": {
+ "type": "object",
+ "properties": {
+ "prompt": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.MCPNameRequest": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.MCPReadResourceRequest": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "uri": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.MCPState": {
+ "type": "integer",
+ "enum": [
+ 0,
+ 1,
+ 2,
+ 3
+ ],
+ "x-enum-varnames": [
+ "MCPStateDisabled",
+ "MCPStateStarting",
+ "MCPStateConnected",
+ "MCPStateError"
+ ]
+ },
+ "proto.MessageRole": {
+ "type": "string",
+ "enum": [
+ "assistant",
+ "user",
+ "system",
+ "tool"
+ ],
+ "x-enum-varnames": [
+ "Assistant",
+ "User",
+ "System",
+ "Tool"
+ ]
+ },
+ "proto.PermissionAction": {
+ "type": "string",
+ "enum": [
+ "allow",
+ "allow_session",
+ "deny"
+ ],
+ "x-enum-varnames": [
+ "PermissionAllow",
+ "PermissionAllowForSession",
+ "PermissionDeny"
+ ]
+ },
+ "proto.PermissionGrant": {
+ "type": "object",
+ "properties": {
+ "action": {
+ "$ref": "#/definitions/proto.PermissionAction"
+ },
+ "permission": {
+ "$ref": "#/definitions/proto.PermissionRequest"
+ }
+ }
+ },
+ "proto.PermissionRequest": {
+ "type": "object",
+ "properties": {
+ "action": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "params": {},
+ "path": {
+ "type": "string"
+ },
+ "session_id": {
+ "type": "string"
+ },
+ "tool_call_id": {
+ "type": "string"
+ },
+ "tool_name": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.PermissionSkipRequest": {
+ "type": "object",
+ "properties": {
+ "skip": {
+ "type": "boolean"
+ }
+ }
+ },
+ "proto.ProjectInitPromptResponse": {
+ "type": "object",
+ "properties": {
+ "prompt": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.ProjectNeedsInitResponse": {
+ "type": "object",
+ "properties": {
+ "needs_init": {
+ "type": "boolean"
+ }
+ }
+ },
+ "proto.ServerControl": {
+ "type": "object",
+ "properties": {
+ "command": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.Session": {
+ "type": "object",
+ "properties": {
+ "completion_tokens": {
+ "type": "integer"
+ },
+ "cost": {
+ "type": "number"
+ },
+ "created_at": {
+ "type": "integer"
+ },
+ "id": {
+ "type": "string"
+ },
+ "message_count": {
+ "type": "integer"
+ },
+ "parent_session_id": {
+ "type": "string"
+ },
+ "prompt_tokens": {
+ "type": "integer"
+ },
+ "summary_message_id": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "integer"
+ }
+ }
+ },
+ "proto.VersionInfo": {
+ "type": "object",
+ "properties": {
+ "commit": {
+ "type": "string"
+ },
+ "go_version": {
+ "type": "string"
+ },
+ "platform": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.Workspace": {
+ "type": "object",
+ "properties": {
+ "config": {
+ "$ref": "#/definitions/github_com_charmbracelet_crush_internal_config.Config"
+ },
+ "data_dir": {
+ "type": "string"
+ },
+ "debug": {
+ "type": "boolean"
+ },
+ "env": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "id": {
+ "type": "string"
+ },
+ "path": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ },
+ "yolo": {
+ "type": "boolean"
+ }
+ }
+ },
+ "time.Duration": {
+ "type": "integer",
+ "format": "int64",
+ "enum": [
+ -9223372036854775808,
+ 9223372036854775807,
+ 1,
+ 1000,
+ 1000000,
+ 1000000000,
+ 60000000000,
+ 3600000000000
+ ],
+ "x-enum-varnames": [
+ "minDuration",
+ "maxDuration",
+ "Nanosecond",
+ "Microsecond",
+ "Millisecond",
+ "Second",
+ "Minute",
+ "Hour"
+ ]
+ }
+ }
+}`
+
+// SwaggerInfo holds exported Swagger Info so clients can modify it
+var SwaggerInfo = &swag.Spec{
+ Version: "1.0",
+ Host: "",
+ BasePath: "/v1",
+ Schemes: []string{},
+ Title: "Crush API",
+ Description: "Crush is a terminal-based AI coding assistant. This API is served over a Unix socket (or Windows named pipe) and provides programmatic access to workspaces, sessions, agents, LSP, MCP, and more.",
+ InfoInstanceName: "swagger",
+ SwaggerTemplate: docTemplate,
+ LeftDelim: "{{",
+ RightDelim: "}}",
+}
+
+func init() {
+ swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo)
+}
@@ -0,0 +1,3564 @@
+{
+ "swagger": "2.0",
+ "info": {
+ "description": "Crush is a terminal-based AI coding assistant. This API is served over a Unix socket (or Windows named pipe) and provides programmatic access to workspaces, sessions, agents, LSP, MCP, and more.",
+ "title": "Crush API",
+ "contact": {
+ "name": "Charm",
+ "url": "https://charm.sh"
+ },
+ "license": {
+ "name": "MIT",
+ "url": "https://github.com/charmbracelet/crush/blob/main/LICENSE"
+ },
+ "version": "1.0"
+ },
+ "basePath": "/v1",
+ "paths": {
+ "/config": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "system"
+ ],
+ "summary": "Get server config",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ },
+ "/control": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "system"
+ ],
+ "summary": "Send server control command",
+ "parameters": [
+ {
+ "description": "Control command (e.g. shutdown)",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.ServerControl"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/health": {
+ "get": {
+ "tags": [
+ "system"
+ ],
+ "summary": "Health check",
+ "responses": {
+ "200": {
+ "description": "OK"
+ }
+ }
+ }
+ },
+ "/version": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "system"
+ ],
+ "summary": "Get server version",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.VersionInfo"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "workspaces"
+ ],
+ "summary": "List workspaces",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/proto.Workspace"
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "workspaces"
+ ],
+ "summary": "Create workspace",
+ "parameters": [
+ {
+ "description": "Workspace creation params",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.Workspace"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.Workspace"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "workspaces"
+ ],
+ "summary": "Get workspace",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.Workspace"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "workspaces"
+ ],
+ "summary": "Delete workspace",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "agent"
+ ],
+ "summary": "Get agent info",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.AgentInfo"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "agent"
+ ],
+ "summary": "Send message to agent",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Agent message",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.AgentMessage"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent/default-small-model": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "agent"
+ ],
+ "summary": "Get default small model",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Provider ID",
+ "name": "provider_id",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent/init": {
+ "post": {
+ "tags": [
+ "agent"
+ ],
+ "summary": "Initialize agent",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent/sessions/{sid}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "agent"
+ ],
+ "summary": "Get agent session",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.AgentSession"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent/sessions/{sid}/cancel": {
+ "post": {
+ "tags": [
+ "agent"
+ ],
+ "summary": "Cancel agent session",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent/sessions/{sid}/prompts/clear": {
+ "post": {
+ "tags": [
+ "agent"
+ ],
+ "summary": "Clear prompt queue",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent/sessions/{sid}/prompts/list": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "agent"
+ ],
+ "summary": "List queued prompts",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent/sessions/{sid}/prompts/queued": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "agent"
+ ],
+ "summary": "Get queued prompt status",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent/sessions/{sid}/summarize": {
+ "post": {
+ "tags": [
+ "agent"
+ ],
+ "summary": "Summarize session",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/agent/update": {
+ "post": {
+ "tags": [
+ "agent"
+ ],
+ "summary": "Update agent",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/config": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "workspaces"
+ ],
+ "summary": "Get workspace config",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/config/compact": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "config"
+ ],
+ "summary": "Set compact mode",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Config compact request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.ConfigCompactRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/config/import-copilot": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "config"
+ ],
+ "summary": "Import Copilot credentials",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.ImportCopilotResponse"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/config/model": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "config"
+ ],
+ "summary": "Set the preferred model",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Config model request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.ConfigModelRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/config/provider-key": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "config"
+ ],
+ "summary": "Set provider API key",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Config provider key request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.ConfigProviderKeyRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/config/refresh-oauth": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "config"
+ ],
+ "summary": "Refresh OAuth token",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Refresh OAuth request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.ConfigRefreshOAuthRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/config/remove": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "config"
+ ],
+ "summary": "Remove a config field",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Config remove request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.ConfigRemoveRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/config/set": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "config"
+ ],
+ "summary": "Set a config field",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Config set request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.ConfigSetRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/events": {
+ "get": {
+ "produces": [
+ "text/event-stream"
+ ],
+ "tags": [
+ "workspaces"
+ ],
+ "summary": "Stream workspace events (SSE)",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/filetracker/lastread": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "filetracker"
+ ],
+ "summary": "Get last read time for file",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "session_id",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "File path",
+ "name": "path",
+ "in": "query",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/filetracker/read": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "filetracker"
+ ],
+ "summary": "Record file read",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "File tracker read request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.FileTrackerReadRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/lsps": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "lsp"
+ ],
+ "summary": "List LSP clients",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/proto.LSPClientInfo"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/lsps/start": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "lsp"
+ ],
+ "summary": "Start LSP server",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "LSP start request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.LSPStartRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/lsps/stop": {
+ "post": {
+ "tags": [
+ "lsp"
+ ],
+ "summary": "Stop all LSP servers",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/lsps/{lsp}/diagnostics": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "lsp"
+ ],
+ "summary": "Get LSP diagnostics",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "LSP client name",
+ "name": "lsp",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/mcp/get-prompt": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "mcp"
+ ],
+ "summary": "Get MCP prompt",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "MCP get prompt request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.MCPGetPromptRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.MCPGetPromptResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/mcp/read-resource": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "mcp"
+ ],
+ "summary": "Read MCP resource",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "MCP read resource request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.MCPReadResourceRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/mcp/refresh-prompts": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "mcp"
+ ],
+ "summary": "Refresh MCP prompts",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "MCP name request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.MCPNameRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/mcp/refresh-resources": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "mcp"
+ ],
+ "summary": "Refresh MCP resources",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "MCP name request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.MCPNameRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/mcp/refresh-tools": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "mcp"
+ ],
+ "summary": "Refresh MCP tools",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "MCP name request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.MCPNameRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/mcp/states": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "mcp"
+ ],
+ "summary": "Get MCP client states",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/proto.MCPClientInfo"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/messages/user": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "workspaces"
+ ],
+ "summary": "Get all user messages for workspace",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/github_com_charmbracelet_crush_internal_proto.Message"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/permissions/grant": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "permissions"
+ ],
+ "summary": "Grant permission",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Permission grant",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.PermissionGrant"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/permissions/skip": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "permissions"
+ ],
+ "summary": "Get skip permissions status",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.PermissionSkipRequest"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "permissions"
+ ],
+ "summary": "Set skip permissions",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Permission skip request",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.PermissionSkipRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/project/init": {
+ "post": {
+ "tags": [
+ "project"
+ ],
+ "summary": "Mark project as initialized",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/project/init-prompt": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "project"
+ ],
+ "summary": "Get project initialization prompt",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.ProjectInitPromptResponse"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/project/needs-init": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "project"
+ ],
+ "summary": "Check if project needs initialization",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.ProjectNeedsInitResponse"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/providers": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "workspaces"
+ ],
+ "summary": "Get workspace providers",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/sessions": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "sessions"
+ ],
+ "summary": "List sessions",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/proto.Session"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "sessions"
+ ],
+ "summary": "Create session",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Session creation params (title)",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.Session"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.Session"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/sessions/{sid}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "sessions"
+ ],
+ "summary": "Get session",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.Session"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ },
+ "put": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "sessions"
+ ],
+ "summary": "Update session",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Updated session",
+ "name": "request",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/proto.Session"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/proto.Session"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "sessions"
+ ],
+ "summary": "Delete session",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/sessions/{sid}/filetracker/files": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "filetracker"
+ ],
+ "summary": "List tracked files for session",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/sessions/{sid}/history": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "sessions"
+ ],
+ "summary": "Get session history",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/proto.File"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/sessions/{sid}/messages": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "sessions"
+ ],
+ "summary": "Get session messages",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/github_com_charmbracelet_crush_internal_proto.Message"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ },
+ "/workspaces/{id}/sessions/{sid}/messages/user": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "sessions"
+ ],
+ "summary": "Get user messages for session",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Workspace ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Session ID",
+ "name": "sid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/github_com_charmbracelet_crush_internal_proto.Message"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/proto.Error"
+ }
+ }
+ }
+ }
+ }
+ },
+ "definitions": {
+ "catwalk.Model": {
+ "type": "object",
+ "properties": {
+ "can_reason": {
+ "type": "boolean"
+ },
+ "context_window": {
+ "type": "integer"
+ },
+ "cost_per_1m_in": {
+ "type": "number"
+ },
+ "cost_per_1m_in_cached": {
+ "type": "number"
+ },
+ "cost_per_1m_out": {
+ "type": "number"
+ },
+ "cost_per_1m_out_cached": {
+ "type": "number"
+ },
+ "default_max_tokens": {
+ "type": "integer"
+ },
+ "default_reasoning_effort": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "options": {
+ "$ref": "#/definitions/catwalk.ModelOptions"
+ },
+ "reasoning_levels": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "supports_attachments": {
+ "type": "boolean"
+ }
+ }
+ },
+ "catwalk.ModelOptions": {
+ "type": "object",
+ "properties": {
+ "frequency_penalty": {
+ "type": "number"
+ },
+ "presence_penalty": {
+ "type": "number"
+ },
+ "provider_options": {
+ "type": "object",
+ "additionalProperties": {}
+ },
+ "temperature": {
+ "type": "number"
+ },
+ "top_k": {
+ "type": "integer"
+ },
+ "top_p": {
+ "type": "number"
+ }
+ }
+ },
+ "config.Attribution": {
+ "type": "object",
+ "properties": {
+ "co_authored_by": {
+ "type": "boolean"
+ },
+ "generated_with": {
+ "type": "boolean"
+ },
+ "trailer_style": {
+ "$ref": "#/definitions/config.TrailerStyle"
+ }
+ }
+ },
+ "config.Completions": {
+ "type": "object",
+ "properties": {
+ "max_depth": {
+ "type": "integer"
+ },
+ "max_items": {
+ "type": "integer"
+ }
+ }
+ },
+ "config.LSPConfig": {
+ "type": "object",
+ "properties": {
+ "args": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "command": {
+ "type": "string"
+ },
+ "disabled": {
+ "type": "boolean"
+ },
+ "env": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "filetypes": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "init_options": {
+ "type": "object",
+ "additionalProperties": {}
+ },
+ "options": {
+ "type": "object",
+ "additionalProperties": {}
+ },
+ "root_markers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "timeout": {
+ "type": "integer"
+ }
+ }
+ },
+ "config.LSPs": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/config.LSPConfig"
+ }
+ },
+ "config.MCPConfig": {
+ "type": "object",
+ "properties": {
+ "args": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "command": {
+ "type": "string"
+ },
+ "disabled": {
+ "type": "boolean"
+ },
+ "disabled_tools": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "env": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "headers": {
+ "description": "TODO: maybe make it possible to get the value from the env",
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "timeout": {
+ "type": "integer"
+ },
+ "type": {
+ "$ref": "#/definitions/config.MCPType"
+ },
+ "url": {
+ "type": "string"
+ }
+ }
+ },
+ "config.MCPType": {
+ "type": "string",
+ "enum": [
+ "stdio",
+ "sse",
+ "http"
+ ],
+ "x-enum-varnames": [
+ "MCPStdio",
+ "MCPSSE",
+ "MCPHttp"
+ ]
+ },
+ "config.MCPs": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/config.MCPConfig"
+ }
+ },
+ "config.Permissions": {
+ "type": "object",
+ "properties": {
+ "allowed_tools": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "config.Scope": {
+ "type": "integer",
+ "enum": [
+ 0,
+ 1
+ ],
+ "x-enum-varnames": [
+ "ScopeGlobal",
+ "ScopeWorkspace"
+ ]
+ },
+ "config.SelectedModel": {
+ "type": "object",
+ "properties": {
+ "frequency_penalty": {
+ "type": "number"
+ },
+ "max_tokens": {
+ "description": "Overrides the default model configuration.",
+ "type": "integer"
+ },
+ "model": {
+ "description": "The model id as used by the provider API.\nRequired.",
+ "type": "string"
+ },
+ "presence_penalty": {
+ "type": "number"
+ },
+ "provider": {
+ "description": "The model provider, same as the key/id used in the providers config.\nRequired.",
+ "type": "string"
+ },
+ "provider_options": {
+ "description": "Override provider specific options.",
+ "type": "object",
+ "additionalProperties": {}
+ },
+ "reasoning_effort": {
+ "description": "Only used by models that use the openai provider and need this set.",
+ "type": "string"
+ },
+ "temperature": {
+ "type": "number"
+ },
+ "think": {
+ "description": "Used by anthropic models that can reason to indicate if the model should think.",
+ "type": "boolean"
+ },
+ "top_k": {
+ "type": "integer"
+ },
+ "top_p": {
+ "type": "number"
+ }
+ }
+ },
+ "config.SelectedModelType": {
+ "type": "string",
+ "enum": [
+ "large",
+ "small"
+ ],
+ "x-enum-varnames": [
+ "SelectedModelTypeLarge",
+ "SelectedModelTypeSmall"
+ ]
+ },
+ "config.TUIOptions": {
+ "type": "object",
+ "properties": {
+ "compact_mode": {
+ "type": "boolean"
+ },
+ "completions": {
+ "$ref": "#/definitions/config.Completions"
+ },
+ "diff_mode": {
+ "type": "string"
+ },
+ "transparent": {
+ "type": "boolean"
+ }
+ }
+ },
+ "config.ToolGrep": {
+ "type": "object",
+ "properties": {
+ "timeout": {
+ "$ref": "#/definitions/time.Duration"
+ }
+ }
+ },
+ "config.ToolLs": {
+ "type": "object",
+ "properties": {
+ "max_depth": {
+ "type": "integer"
+ },
+ "max_items": {
+ "type": "integer"
+ }
+ }
+ },
+ "config.Tools": {
+ "type": "object",
+ "properties": {
+ "grep": {
+ "$ref": "#/definitions/config.ToolGrep"
+ },
+ "ls": {
+ "$ref": "#/definitions/config.ToolLs"
+ }
+ }
+ },
+ "config.TrailerStyle": {
+ "type": "string",
+ "enum": [
+ "none",
+ "co-authored-by",
+ "assisted-by"
+ ],
+ "x-enum-varnames": [
+ "TrailerStyleNone",
+ "TrailerStyleCoAuthoredBy",
+ "TrailerStyleAssistedBy"
+ ]
+ },
+ "csync.Map-string-config_ProviderConfig": {
+ "type": "object"
+ },
+ "github_com_charmbracelet_crush_internal_config.Config": {
+ "type": "object",
+ "properties": {
+ "$schema": {
+ "type": "string"
+ },
+ "lsp": {
+ "$ref": "#/definitions/config.LSPs"
+ },
+ "mcp": {
+ "$ref": "#/definitions/config.MCPs"
+ },
+ "models": {
+ "description": "We currently only support large/small as values here.",
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/config.SelectedModel"
+ }
+ },
+ "options": {
+ "$ref": "#/definitions/github_com_charmbracelet_crush_internal_config.Options"
+ },
+ "permissions": {
+ "$ref": "#/definitions/config.Permissions"
+ },
+ "providers": {
+ "description": "The providers that are configured",
+ "allOf": [
+ {
+ "$ref": "#/definitions/csync.Map-string-config_ProviderConfig"
+ }
+ ]
+ },
+ "recent_models": {
+ "description": "Recently used models stored in the data directory config.",
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/config.SelectedModel"
+ }
+ }
+ },
+ "tools": {
+ "$ref": "#/definitions/config.Tools"
+ }
+ }
+ },
+ "github_com_charmbracelet_crush_internal_config.Options": {
+ "type": "object",
+ "properties": {
+ "attribution": {
+ "$ref": "#/definitions/config.Attribution"
+ },
+ "auto_lsp": {
+ "type": "boolean"
+ },
+ "context_paths": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "data_directory": {
+ "description": "Relative to the cwd",
+ "type": "string"
+ },
+ "debug": {
+ "type": "boolean"
+ },
+ "debug_lsp": {
+ "type": "boolean"
+ },
+ "disable_auto_summarize": {
+ "type": "boolean"
+ },
+ "disable_default_providers": {
+ "type": "boolean"
+ },
+ "disable_metrics": {
+ "type": "boolean"
+ },
+ "disable_notifications": {
+ "type": "boolean"
+ },
+ "disable_provider_auto_update": {
+ "type": "boolean"
+ },
+ "disabled_tools": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "initialize_as": {
+ "type": "string"
+ },
+ "progress": {
+ "type": "boolean"
+ },
+ "skills_paths": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "tui": {
+ "$ref": "#/definitions/config.TUIOptions"
+ }
+ }
+ },
+ "github_com_charmbracelet_crush_internal_proto.Message": {
+ "type": "object",
+ "properties": {
+ "created_at": {
+ "type": "integer"
+ },
+ "id": {
+ "type": "string"
+ },
+ "model": {
+ "type": "string"
+ },
+ "parts": {
+ "type": "array",
+ "items": {}
+ },
+ "provider": {
+ "type": "string"
+ },
+ "role": {
+ "$ref": "#/definitions/proto.MessageRole"
+ },
+ "session_id": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "integer"
+ }
+ }
+ },
+ "lsp.ServerState": {
+ "type": "integer",
+ "enum": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ "x-enum-varnames": [
+ "StateUnstarted",
+ "StateStarting",
+ "StateReady",
+ "StateError",
+ "StateStopped",
+ "StateDisabled"
+ ]
+ },
+ "proto.AgentInfo": {
+ "type": "object",
+ "properties": {
+ "is_busy": {
+ "type": "boolean"
+ },
+ "is_ready": {
+ "type": "boolean"
+ },
+ "model": {
+ "$ref": "#/definitions/catwalk.Model"
+ },
+ "model_cfg": {
+ "$ref": "#/definitions/config.SelectedModel"
+ }
+ }
+ },
+ "proto.AgentMessage": {
+ "type": "object",
+ "properties": {
+ "attachments": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/proto.Attachment"
+ }
+ },
+ "prompt": {
+ "type": "string"
+ },
+ "session_id": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.AgentSession": {
+ "type": "object",
+ "properties": {
+ "completion_tokens": {
+ "type": "integer"
+ },
+ "cost": {
+ "type": "number"
+ },
+ "created_at": {
+ "type": "integer"
+ },
+ "id": {
+ "type": "string"
+ },
+ "is_busy": {
+ "type": "boolean"
+ },
+ "message_count": {
+ "type": "integer"
+ },
+ "parent_session_id": {
+ "type": "string"
+ },
+ "prompt_tokens": {
+ "type": "integer"
+ },
+ "summary_message_id": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "integer"
+ }
+ }
+ },
+ "proto.Attachment": {
+ "type": "object",
+ "properties": {
+ "content": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "file_name": {
+ "type": "string"
+ },
+ "file_path": {
+ "type": "string"
+ },
+ "mime_type": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.ConfigCompactRequest": {
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ },
+ "scope": {
+ "$ref": "#/definitions/config.Scope"
+ }
+ }
+ },
+ "proto.ConfigModelRequest": {
+ "type": "object",
+ "properties": {
+ "model": {
+ "$ref": "#/definitions/config.SelectedModel"
+ },
+ "model_type": {
+ "$ref": "#/definitions/config.SelectedModelType"
+ },
+ "scope": {
+ "$ref": "#/definitions/config.Scope"
+ }
+ }
+ },
+ "proto.ConfigProviderKeyRequest": {
+ "type": "object",
+ "properties": {
+ "api_key": {},
+ "provider_id": {
+ "type": "string"
+ },
+ "scope": {
+ "$ref": "#/definitions/config.Scope"
+ }
+ }
+ },
+ "proto.ConfigRefreshOAuthRequest": {
+ "type": "object",
+ "properties": {
+ "provider_id": {
+ "type": "string"
+ },
+ "scope": {
+ "$ref": "#/definitions/config.Scope"
+ }
+ }
+ },
+ "proto.ConfigRemoveRequest": {
+ "type": "object",
+ "properties": {
+ "key": {
+ "type": "string"
+ },
+ "scope": {
+ "$ref": "#/definitions/config.Scope"
+ }
+ }
+ },
+ "proto.ConfigSetRequest": {
+ "type": "object",
+ "properties": {
+ "key": {
+ "type": "string"
+ },
+ "scope": {
+ "$ref": "#/definitions/config.Scope"
+ },
+ "value": {}
+ }
+ },
+ "proto.Error": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.File": {
+ "type": "object",
+ "properties": {
+ "content": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "integer"
+ },
+ "id": {
+ "type": "string"
+ },
+ "path": {
+ "type": "string"
+ },
+ "session_id": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "integer"
+ },
+ "version": {
+ "type": "integer"
+ }
+ }
+ },
+ "proto.FileTrackerReadRequest": {
+ "type": "object",
+ "properties": {
+ "path": {
+ "type": "string"
+ },
+ "session_id": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.ImportCopilotResponse": {
+ "type": "object",
+ "properties": {
+ "success": {
+ "type": "boolean"
+ },
+ "token": {}
+ }
+ },
+ "proto.LSPClientInfo": {
+ "type": "object",
+ "properties": {
+ "connected_at": {
+ "type": "string"
+ },
+ "diagnostic_count": {
+ "type": "integer"
+ },
+ "error": {},
+ "name": {
+ "type": "string"
+ },
+ "state": {
+ "$ref": "#/definitions/lsp.ServerState"
+ }
+ }
+ },
+ "proto.LSPStartRequest": {
+ "type": "object",
+ "properties": {
+ "path": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.MCPClientInfo": {
+ "type": "object",
+ "properties": {
+ "connected_at": {
+ "type": "string"
+ },
+ "error": {},
+ "name": {
+ "type": "string"
+ },
+ "prompt_count": {
+ "type": "integer"
+ },
+ "resource_count": {
+ "type": "integer"
+ },
+ "state": {
+ "$ref": "#/definitions/proto.MCPState"
+ },
+ "tool_count": {
+ "type": "integer"
+ }
+ }
+ },
+ "proto.MCPGetPromptRequest": {
+ "type": "object",
+ "properties": {
+ "args": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "client_id": {
+ "type": "string"
+ },
+ "prompt_id": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.MCPGetPromptResponse": {
+ "type": "object",
+ "properties": {
+ "prompt": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.MCPNameRequest": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.MCPReadResourceRequest": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "uri": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.MCPState": {
+ "type": "integer",
+ "enum": [
+ 0,
+ 1,
+ 2,
+ 3
+ ],
+ "x-enum-varnames": [
+ "MCPStateDisabled",
+ "MCPStateStarting",
+ "MCPStateConnected",
+ "MCPStateError"
+ ]
+ },
+ "proto.MessageRole": {
+ "type": "string",
+ "enum": [
+ "assistant",
+ "user",
+ "system",
+ "tool"
+ ],
+ "x-enum-varnames": [
+ "Assistant",
+ "User",
+ "System",
+ "Tool"
+ ]
+ },
+ "proto.PermissionAction": {
+ "type": "string",
+ "enum": [
+ "allow",
+ "allow_session",
+ "deny"
+ ],
+ "x-enum-varnames": [
+ "PermissionAllow",
+ "PermissionAllowForSession",
+ "PermissionDeny"
+ ]
+ },
+ "proto.PermissionGrant": {
+ "type": "object",
+ "properties": {
+ "action": {
+ "$ref": "#/definitions/proto.PermissionAction"
+ },
+ "permission": {
+ "$ref": "#/definitions/proto.PermissionRequest"
+ }
+ }
+ },
+ "proto.PermissionRequest": {
+ "type": "object",
+ "properties": {
+ "action": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "params": {},
+ "path": {
+ "type": "string"
+ },
+ "session_id": {
+ "type": "string"
+ },
+ "tool_call_id": {
+ "type": "string"
+ },
+ "tool_name": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.PermissionSkipRequest": {
+ "type": "object",
+ "properties": {
+ "skip": {
+ "type": "boolean"
+ }
+ }
+ },
+ "proto.ProjectInitPromptResponse": {
+ "type": "object",
+ "properties": {
+ "prompt": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.ProjectNeedsInitResponse": {
+ "type": "object",
+ "properties": {
+ "needs_init": {
+ "type": "boolean"
+ }
+ }
+ },
+ "proto.ServerControl": {
+ "type": "object",
+ "properties": {
+ "command": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.Session": {
+ "type": "object",
+ "properties": {
+ "completion_tokens": {
+ "type": "integer"
+ },
+ "cost": {
+ "type": "number"
+ },
+ "created_at": {
+ "type": "integer"
+ },
+ "id": {
+ "type": "string"
+ },
+ "message_count": {
+ "type": "integer"
+ },
+ "parent_session_id": {
+ "type": "string"
+ },
+ "prompt_tokens": {
+ "type": "integer"
+ },
+ "summary_message_id": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "integer"
+ }
+ }
+ },
+ "proto.VersionInfo": {
+ "type": "object",
+ "properties": {
+ "commit": {
+ "type": "string"
+ },
+ "go_version": {
+ "type": "string"
+ },
+ "platform": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ }
+ }
+ },
+ "proto.Workspace": {
+ "type": "object",
+ "properties": {
+ "config": {
+ "$ref": "#/definitions/github_com_charmbracelet_crush_internal_config.Config"
+ },
+ "data_dir": {
+ "type": "string"
+ },
+ "debug": {
+ "type": "boolean"
+ },
+ "env": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "id": {
+ "type": "string"
+ },
+ "path": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ },
+ "yolo": {
+ "type": "boolean"
+ }
+ }
+ },
+ "time.Duration": {
+ "type": "integer",
+ "format": "int64",
+ "enum": [
+ -9223372036854775808,
+ 9223372036854775807,
+ 1,
+ 1000,
+ 1000000,
+ 1000000000,
+ 60000000000,
+ 3600000000000
+ ],
+ "x-enum-varnames": [
+ "minDuration",
+ "maxDuration",
+ "Nanosecond",
+ "Microsecond",
+ "Millisecond",
+ "Second",
+ "Minute",
+ "Hour"
+ ]
+ }
+ }
+}
@@ -0,0 +1,2361 @@
+basePath: /v1
+definitions:
+ catwalk.Model:
+ properties:
+ can_reason:
+ type: boolean
+ context_window:
+ type: integer
+ cost_per_1m_in:
+ type: number
+ cost_per_1m_in_cached:
+ type: number
+ cost_per_1m_out:
+ type: number
+ cost_per_1m_out_cached:
+ type: number
+ default_max_tokens:
+ type: integer
+ default_reasoning_effort:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ options:
+ $ref: '#/definitions/catwalk.ModelOptions'
+ reasoning_levels:
+ items:
+ type: string
+ type: array
+ supports_attachments:
+ type: boolean
+ type: object
+ catwalk.ModelOptions:
+ properties:
+ frequency_penalty:
+ type: number
+ presence_penalty:
+ type: number
+ provider_options:
+ additionalProperties: {}
+ type: object
+ temperature:
+ type: number
+ top_k:
+ type: integer
+ top_p:
+ type: number
+ type: object
+ config.Attribution:
+ properties:
+ co_authored_by:
+ type: boolean
+ generated_with:
+ type: boolean
+ trailer_style:
+ $ref: '#/definitions/config.TrailerStyle'
+ type: object
+ config.Completions:
+ properties:
+ max_depth:
+ type: integer
+ max_items:
+ type: integer
+ type: object
+ config.LSPConfig:
+ properties:
+ args:
+ items:
+ type: string
+ type: array
+ command:
+ type: string
+ disabled:
+ type: boolean
+ env:
+ additionalProperties:
+ type: string
+ type: object
+ filetypes:
+ items:
+ type: string
+ type: array
+ init_options:
+ additionalProperties: {}
+ type: object
+ options:
+ additionalProperties: {}
+ type: object
+ root_markers:
+ items:
+ type: string
+ type: array
+ timeout:
+ type: integer
+ type: object
+ config.LSPs:
+ additionalProperties:
+ $ref: '#/definitions/config.LSPConfig'
+ type: object
+ config.MCPConfig:
+ properties:
+ args:
+ items:
+ type: string
+ type: array
+ command:
+ type: string
+ disabled:
+ type: boolean
+ disabled_tools:
+ items:
+ type: string
+ type: array
+ env:
+ additionalProperties:
+ type: string
+ type: object
+ headers:
+ additionalProperties:
+ type: string
+ description: 'TODO: maybe make it possible to get the value from the env'
+ type: object
+ timeout:
+ type: integer
+ type:
+ $ref: '#/definitions/config.MCPType'
+ url:
+ type: string
+ type: object
+ config.MCPType:
+ enum:
+ - stdio
+ - sse
+ - http
+ type: string
+ x-enum-varnames:
+ - MCPStdio
+ - MCPSSE
+ - MCPHttp
+ config.MCPs:
+ additionalProperties:
+ $ref: '#/definitions/config.MCPConfig'
+ type: object
+ config.Permissions:
+ properties:
+ allowed_tools:
+ items:
+ type: string
+ type: array
+ type: object
+ config.Scope:
+ enum:
+ - 0
+ - 1
+ type: integer
+ x-enum-varnames:
+ - ScopeGlobal
+ - ScopeWorkspace
+ config.SelectedModel:
+ properties:
+ frequency_penalty:
+ type: number
+ max_tokens:
+ description: Overrides the default model configuration.
+ type: integer
+ model:
+ description: |-
+ The model id as used by the provider API.
+ Required.
+ type: string
+ presence_penalty:
+ type: number
+ provider:
+ description: |-
+ The model provider, same as the key/id used in the providers config.
+ Required.
+ type: string
+ provider_options:
+ additionalProperties: {}
+ description: Override provider specific options.
+ type: object
+ reasoning_effort:
+ description: Only used by models that use the openai provider and need this
+ set.
+ type: string
+ temperature:
+ type: number
+ think:
+ description: Used by anthropic models that can reason to indicate if the model
+ should think.
+ type: boolean
+ top_k:
+ type: integer
+ top_p:
+ type: number
+ type: object
+ config.SelectedModelType:
+ enum:
+ - large
+ - small
+ type: string
+ x-enum-varnames:
+ - SelectedModelTypeLarge
+ - SelectedModelTypeSmall
+ config.TUIOptions:
+ properties:
+ compact_mode:
+ type: boolean
+ completions:
+ $ref: '#/definitions/config.Completions'
+ diff_mode:
+ type: string
+ transparent:
+ type: boolean
+ type: object
+ config.ToolGrep:
+ properties:
+ timeout:
+ $ref: '#/definitions/time.Duration'
+ type: object
+ config.ToolLs:
+ properties:
+ max_depth:
+ type: integer
+ max_items:
+ type: integer
+ type: object
+ config.Tools:
+ properties:
+ grep:
+ $ref: '#/definitions/config.ToolGrep'
+ ls:
+ $ref: '#/definitions/config.ToolLs'
+ type: object
+ config.TrailerStyle:
+ enum:
+ - none
+ - co-authored-by
+ - assisted-by
+ type: string
+ x-enum-varnames:
+ - TrailerStyleNone
+ - TrailerStyleCoAuthoredBy
+ - TrailerStyleAssistedBy
+ csync.Map-string-config_ProviderConfig:
+ type: object
+ github_com_charmbracelet_crush_internal_config.Config:
+ properties:
+ $schema:
+ type: string
+ lsp:
+ $ref: '#/definitions/config.LSPs'
+ mcp:
+ $ref: '#/definitions/config.MCPs'
+ models:
+ additionalProperties:
+ $ref: '#/definitions/config.SelectedModel'
+ description: We currently only support large/small as values here.
+ type: object
+ options:
+ $ref: '#/definitions/github_com_charmbracelet_crush_internal_config.Options'
+ permissions:
+ $ref: '#/definitions/config.Permissions'
+ providers:
+ allOf:
+ - $ref: '#/definitions/csync.Map-string-config_ProviderConfig'
+ description: The providers that are configured
+ recent_models:
+ additionalProperties:
+ items:
+ $ref: '#/definitions/config.SelectedModel'
+ type: array
+ description: Recently used models stored in the data directory config.
+ type: object
+ tools:
+ $ref: '#/definitions/config.Tools'
+ type: object
+ github_com_charmbracelet_crush_internal_config.Options:
+ properties:
+ attribution:
+ $ref: '#/definitions/config.Attribution'
+ auto_lsp:
+ type: boolean
+ context_paths:
+ items:
+ type: string
+ type: array
+ data_directory:
+ description: Relative to the cwd
+ type: string
+ debug:
+ type: boolean
+ debug_lsp:
+ type: boolean
+ disable_auto_summarize:
+ type: boolean
+ disable_default_providers:
+ type: boolean
+ disable_metrics:
+ type: boolean
+ disable_notifications:
+ type: boolean
+ disable_provider_auto_update:
+ type: boolean
+ disabled_tools:
+ items:
+ type: string
+ type: array
+ initialize_as:
+ type: string
+ progress:
+ type: boolean
+ skills_paths:
+ items:
+ type: string
+ type: array
+ tui:
+ $ref: '#/definitions/config.TUIOptions'
+ type: object
+ github_com_charmbracelet_crush_internal_proto.Message:
+ properties:
+ created_at:
+ type: integer
+ id:
+ type: string
+ model:
+ type: string
+ parts:
+ items: {}
+ type: array
+ provider:
+ type: string
+ role:
+ $ref: '#/definitions/proto.MessageRole'
+ session_id:
+ type: string
+ updated_at:
+ type: integer
+ type: object
+ lsp.ServerState:
+ enum:
+ - 0
+ - 1
+ - 2
+ - 3
+ - 4
+ - 5
+ type: integer
+ x-enum-varnames:
+ - StateUnstarted
+ - StateStarting
+ - StateReady
+ - StateError
+ - StateStopped
+ - StateDisabled
+ proto.AgentInfo:
+ properties:
+ is_busy:
+ type: boolean
+ is_ready:
+ type: boolean
+ model:
+ $ref: '#/definitions/catwalk.Model'
+ model_cfg:
+ $ref: '#/definitions/config.SelectedModel'
+ type: object
+ proto.AgentMessage:
+ properties:
+ attachments:
+ items:
+ $ref: '#/definitions/proto.Attachment'
+ type: array
+ prompt:
+ type: string
+ session_id:
+ type: string
+ type: object
+ proto.AgentSession:
+ properties:
+ completion_tokens:
+ type: integer
+ cost:
+ type: number
+ created_at:
+ type: integer
+ id:
+ type: string
+ is_busy:
+ type: boolean
+ message_count:
+ type: integer
+ parent_session_id:
+ type: string
+ prompt_tokens:
+ type: integer
+ summary_message_id:
+ type: string
+ title:
+ type: string
+ updated_at:
+ type: integer
+ type: object
+ proto.Attachment:
+ properties:
+ content:
+ items:
+ type: integer
+ type: array
+ file_name:
+ type: string
+ file_path:
+ type: string
+ mime_type:
+ type: string
+ type: object
+ proto.ConfigCompactRequest:
+ properties:
+ enabled:
+ type: boolean
+ scope:
+ $ref: '#/definitions/config.Scope'
+ type: object
+ proto.ConfigModelRequest:
+ properties:
+ model:
+ $ref: '#/definitions/config.SelectedModel'
+ model_type:
+ $ref: '#/definitions/config.SelectedModelType'
+ scope:
+ $ref: '#/definitions/config.Scope'
+ type: object
+ proto.ConfigProviderKeyRequest:
+ properties:
+ api_key: {}
+ provider_id:
+ type: string
+ scope:
+ $ref: '#/definitions/config.Scope'
+ type: object
+ proto.ConfigRefreshOAuthRequest:
+ properties:
+ provider_id:
+ type: string
+ scope:
+ $ref: '#/definitions/config.Scope'
+ type: object
+ proto.ConfigRemoveRequest:
+ properties:
+ key:
+ type: string
+ scope:
+ $ref: '#/definitions/config.Scope'
+ type: object
+ proto.ConfigSetRequest:
+ properties:
+ key:
+ type: string
+ scope:
+ $ref: '#/definitions/config.Scope'
+ value: {}
+ type: object
+ proto.Error:
+ properties:
+ message:
+ type: string
+ type: object
+ proto.File:
+ properties:
+ content:
+ type: string
+ created_at:
+ type: integer
+ id:
+ type: string
+ path:
+ type: string
+ session_id:
+ type: string
+ updated_at:
+ type: integer
+ version:
+ type: integer
+ type: object
+ proto.FileTrackerReadRequest:
+ properties:
+ path:
+ type: string
+ session_id:
+ type: string
+ type: object
+ proto.ImportCopilotResponse:
+ properties:
+ success:
+ type: boolean
+ token: {}
+ type: object
+ proto.LSPClientInfo:
+ properties:
+ connected_at:
+ type: string
+ diagnostic_count:
+ type: integer
+ error: {}
+ name:
+ type: string
+ state:
+ $ref: '#/definitions/lsp.ServerState'
+ type: object
+ proto.LSPStartRequest:
+ properties:
+ path:
+ type: string
+ type: object
+ proto.MCPClientInfo:
+ properties:
+ connected_at:
+ type: string
+ error: {}
+ name:
+ type: string
+ prompt_count:
+ type: integer
+ resource_count:
+ type: integer
+ state:
+ $ref: '#/definitions/proto.MCPState'
+ tool_count:
+ type: integer
+ type: object
+ proto.MCPGetPromptRequest:
+ properties:
+ args:
+ additionalProperties:
+ type: string
+ type: object
+ client_id:
+ type: string
+ prompt_id:
+ type: string
+ type: object
+ proto.MCPGetPromptResponse:
+ properties:
+ prompt:
+ type: string
+ type: object
+ proto.MCPNameRequest:
+ properties:
+ name:
+ type: string
+ type: object
+ proto.MCPReadResourceRequest:
+ properties:
+ name:
+ type: string
+ uri:
+ type: string
+ type: object
+ proto.MCPState:
+ enum:
+ - 0
+ - 1
+ - 2
+ - 3
+ type: integer
+ x-enum-varnames:
+ - MCPStateDisabled
+ - MCPStateStarting
+ - MCPStateConnected
+ - MCPStateError
+ proto.MessageRole:
+ enum:
+ - assistant
+ - user
+ - system
+ - tool
+ type: string
+ x-enum-varnames:
+ - Assistant
+ - User
+ - System
+ - Tool
+ proto.PermissionAction:
+ enum:
+ - allow
+ - allow_session
+ - deny
+ type: string
+ x-enum-varnames:
+ - PermissionAllow
+ - PermissionAllowForSession
+ - PermissionDeny
+ proto.PermissionGrant:
+ properties:
+ action:
+ $ref: '#/definitions/proto.PermissionAction'
+ permission:
+ $ref: '#/definitions/proto.PermissionRequest'
+ type: object
+ proto.PermissionRequest:
+ properties:
+ action:
+ type: string
+ description:
+ type: string
+ id:
+ type: string
+ params: {}
+ path:
+ type: string
+ session_id:
+ type: string
+ tool_call_id:
+ type: string
+ tool_name:
+ type: string
+ type: object
+ proto.PermissionSkipRequest:
+ properties:
+ skip:
+ type: boolean
+ type: object
+ proto.ProjectInitPromptResponse:
+ properties:
+ prompt:
+ type: string
+ type: object
+ proto.ProjectNeedsInitResponse:
+ properties:
+ needs_init:
+ type: boolean
+ type: object
+ proto.ServerControl:
+ properties:
+ command:
+ type: string
+ type: object
+ proto.Session:
+ properties:
+ completion_tokens:
+ type: integer
+ cost:
+ type: number
+ created_at:
+ type: integer
+ id:
+ type: string
+ message_count:
+ type: integer
+ parent_session_id:
+ type: string
+ prompt_tokens:
+ type: integer
+ summary_message_id:
+ type: string
+ title:
+ type: string
+ updated_at:
+ type: integer
+ type: object
+ proto.VersionInfo:
+ properties:
+ commit:
+ type: string
+ go_version:
+ type: string
+ platform:
+ type: string
+ version:
+ type: string
+ type: object
+ proto.Workspace:
+ properties:
+ config:
+ $ref: '#/definitions/github_com_charmbracelet_crush_internal_config.Config'
+ data_dir:
+ type: string
+ debug:
+ type: boolean
+ env:
+ items:
+ type: string
+ type: array
+ id:
+ type: string
+ path:
+ type: string
+ version:
+ type: string
+ yolo:
+ type: boolean
+ type: object
+ time.Duration:
+ enum:
+ - -9223372036854775808
+ - 9223372036854775807
+ - 1
+ - 1000
+ - 1000000
+ - 1000000000
+ - 60000000000
+ - 3600000000000
+ format: int64
+ type: integer
+ x-enum-varnames:
+ - minDuration
+ - maxDuration
+ - Nanosecond
+ - Microsecond
+ - Millisecond
+ - Second
+ - Minute
+ - Hour
+info:
+ contact:
+ name: Charm
+ url: https://charm.sh
+ description: Crush is a terminal-based AI coding assistant. This API is served over
+ a Unix socket (or Windows named pipe) and provides programmatic access to workspaces,
+ sessions, agents, LSP, MCP, and more.
+ license:
+ name: MIT
+ url: https://github.com/charmbracelet/crush/blob/main/LICENSE
+ title: Crush API
+ version: "1.0"
+paths:
+ /config:
+ get:
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ type: object
+ summary: Get server config
+ tags:
+ - system
+ /control:
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Control command (e.g. shutdown)
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.ServerControl'
+ responses:
+ "200":
+ description: OK
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Send server control command
+ tags:
+ - system
+ /health:
+ get:
+ responses:
+ "200":
+ description: OK
+ summary: Health check
+ tags:
+ - system
+ /version:
+ get:
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/proto.VersionInfo'
+ summary: Get server version
+ tags:
+ - system
+ /workspaces:
+ get:
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ items:
+ $ref: '#/definitions/proto.Workspace'
+ type: array
+ summary: List workspaces
+ tags:
+ - workspaces
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Workspace creation params
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.Workspace'
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/proto.Workspace'
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Create workspace
+ tags:
+ - workspaces
+ /workspaces/{id}:
+ delete:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ responses:
+ "200":
+ description: OK
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Delete workspace
+ tags:
+ - workspaces
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/proto.Workspace'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Get workspace
+ tags:
+ - workspaces
+ /workspaces/{id}/agent:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/proto.AgentInfo'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Get agent info
+ tags:
+ - agent
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Agent message
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.AgentMessage'
+ responses:
+ "200":
+ description: OK
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Send message to agent
+ tags:
+ - agent
+ /workspaces/{id}/agent/default-small-model:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Provider ID
+ in: query
+ name: provider_id
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ type: object
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Get default small model
+ tags:
+ - agent
+ /workspaces/{id}/agent/init:
+ post:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ responses:
+ "200":
+ description: OK
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Initialize agent
+ tags:
+ - agent
+ /workspaces/{id}/agent/sessions/{sid}:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Session ID
+ in: path
+ name: sid
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/proto.AgentSession'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Get agent session
+ tags:
+ - agent
+ /workspaces/{id}/agent/sessions/{sid}/cancel:
+ post:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Session ID
+ in: path
+ name: sid
+ required: true
+ type: string
+ responses:
+ "200":
+ description: OK
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Cancel agent session
+ tags:
+ - agent
+ /workspaces/{id}/agent/sessions/{sid}/prompts/clear:
+ post:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Session ID
+ in: path
+ name: sid
+ required: true
+ type: string
+ responses:
+ "200":
+ description: OK
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Clear prompt queue
+ tags:
+ - agent
+ /workspaces/{id}/agent/sessions/{sid}/prompts/list:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Session ID
+ in: path
+ name: sid
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ items:
+ type: string
+ type: array
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: List queued prompts
+ tags:
+ - agent
+ /workspaces/{id}/agent/sessions/{sid}/prompts/queued:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Session ID
+ in: path
+ name: sid
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ type: object
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Get queued prompt status
+ tags:
+ - agent
+ /workspaces/{id}/agent/sessions/{sid}/summarize:
+ post:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Session ID
+ in: path
+ name: sid
+ required: true
+ type: string
+ responses:
+ "200":
+ description: OK
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Summarize session
+ tags:
+ - agent
+ /workspaces/{id}/agent/update:
+ post:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ responses:
+ "200":
+ description: OK
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Update agent
+ tags:
+ - agent
+ /workspaces/{id}/config:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ type: object
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Get workspace config
+ tags:
+ - workspaces
+ /workspaces/{id}/config/compact:
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Config compact request
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.ConfigCompactRequest'
+ responses:
+ "200":
+ description: OK
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Set compact mode
+ tags:
+ - config
+ /workspaces/{id}/config/import-copilot:
+ post:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/proto.ImportCopilotResponse'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Import Copilot credentials
+ tags:
+ - config
+ /workspaces/{id}/config/model:
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Config model request
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.ConfigModelRequest'
+ responses:
+ "200":
+ description: OK
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Set the preferred model
+ tags:
+ - config
+ /workspaces/{id}/config/provider-key:
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Config provider key request
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.ConfigProviderKeyRequest'
+ responses:
+ "200":
+ description: OK
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Set provider API key
+ tags:
+ - config
+ /workspaces/{id}/config/refresh-oauth:
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Refresh OAuth request
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.ConfigRefreshOAuthRequest'
+ responses:
+ "200":
+ description: OK
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Refresh OAuth token
+ tags:
+ - config
+ /workspaces/{id}/config/remove:
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Config remove request
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.ConfigRemoveRequest'
+ responses:
+ "200":
+ description: OK
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Remove a config field
+ tags:
+ - config
+ /workspaces/{id}/config/set:
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Config set request
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.ConfigSetRequest'
+ responses:
+ "200":
+ description: OK
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Set a config field
+ tags:
+ - config
+ /workspaces/{id}/events:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ produces:
+ - text/event-stream
+ responses:
+ "200":
+ description: OK
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Stream workspace events (SSE)
+ tags:
+ - workspaces
+ /workspaces/{id}/filetracker/lastread:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Session ID
+ in: query
+ name: session_id
+ type: string
+ - description: File path
+ in: query
+ name: path
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ type: object
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Get last read time for file
+ tags:
+ - filetracker
+ /workspaces/{id}/filetracker/read:
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: File tracker read request
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.FileTrackerReadRequest'
+ responses:
+ "200":
+ description: OK
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Record file read
+ tags:
+ - filetracker
+ /workspaces/{id}/lsps:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ additionalProperties:
+ $ref: '#/definitions/proto.LSPClientInfo'
+ type: object
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: List LSP clients
+ tags:
+ - lsp
+ /workspaces/{id}/lsps/{lsp}/diagnostics:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: LSP client name
+ in: path
+ name: lsp
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ type: object
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Get LSP diagnostics
+ tags:
+ - lsp
+ /workspaces/{id}/lsps/start:
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: LSP start request
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.LSPStartRequest'
+ responses:
+ "200":
+ description: OK
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Start LSP server
+ tags:
+ - lsp
+ /workspaces/{id}/lsps/stop:
+ post:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ responses:
+ "200":
+ description: OK
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Stop all LSP servers
+ tags:
+ - lsp
+ /workspaces/{id}/mcp/get-prompt:
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: MCP get prompt request
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.MCPGetPromptRequest'
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/proto.MCPGetPromptResponse'
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Get MCP prompt
+ tags:
+ - mcp
+ /workspaces/{id}/mcp/read-resource:
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: MCP read resource request
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.MCPReadResourceRequest'
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ type: object
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Read MCP resource
+ tags:
+ - mcp
+ /workspaces/{id}/mcp/refresh-prompts:
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: MCP name request
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.MCPNameRequest'
+ responses:
+ "200":
+ description: OK
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Refresh MCP prompts
+ tags:
+ - mcp
+ /workspaces/{id}/mcp/refresh-resources:
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: MCP name request
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.MCPNameRequest'
+ responses:
+ "200":
+ description: OK
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Refresh MCP resources
+ tags:
+ - mcp
+ /workspaces/{id}/mcp/refresh-tools:
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: MCP name request
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.MCPNameRequest'
+ responses:
+ "200":
+ description: OK
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Refresh MCP tools
+ tags:
+ - mcp
+ /workspaces/{id}/mcp/states:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ additionalProperties:
+ $ref: '#/definitions/proto.MCPClientInfo'
+ type: object
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Get MCP client states
+ tags:
+ - mcp
+ /workspaces/{id}/messages/user:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ items:
+ $ref: '#/definitions/github_com_charmbracelet_crush_internal_proto.Message'
+ type: array
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Get all user messages for workspace
+ tags:
+ - workspaces
+ /workspaces/{id}/permissions/grant:
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Permission grant
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.PermissionGrant'
+ responses:
+ "200":
+ description: OK
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Grant permission
+ tags:
+ - permissions
+ /workspaces/{id}/permissions/skip:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/proto.PermissionSkipRequest'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Get skip permissions status
+ tags:
+ - permissions
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Permission skip request
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.PermissionSkipRequest'
+ responses:
+ "200":
+ description: OK
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Set skip permissions
+ tags:
+ - permissions
+ /workspaces/{id}/project/init:
+ post:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ responses:
+ "200":
+ description: OK
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Mark project as initialized
+ tags:
+ - project
+ /workspaces/{id}/project/init-prompt:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/proto.ProjectInitPromptResponse'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Get project initialization prompt
+ tags:
+ - project
+ /workspaces/{id}/project/needs-init:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/proto.ProjectNeedsInitResponse'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Check if project needs initialization
+ tags:
+ - project
+ /workspaces/{id}/providers:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ type: object
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Get workspace providers
+ tags:
+ - workspaces
+ /workspaces/{id}/sessions:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ items:
+ $ref: '#/definitions/proto.Session'
+ type: array
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: List sessions
+ tags:
+ - sessions
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Session creation params (title)
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.Session'
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/proto.Session'
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Create session
+ tags:
+ - sessions
+ /workspaces/{id}/sessions/{sid}:
+ delete:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Session ID
+ in: path
+ name: sid
+ required: true
+ type: string
+ responses:
+ "200":
+ description: OK
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Delete session
+ tags:
+ - sessions
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Session ID
+ in: path
+ name: sid
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/proto.Session'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Get session
+ tags:
+ - sessions
+ put:
+ consumes:
+ - application/json
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Session ID
+ in: path
+ name: sid
+ required: true
+ type: string
+ - description: Updated session
+ in: body
+ name: request
+ required: true
+ schema:
+ $ref: '#/definitions/proto.Session'
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/proto.Session'
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Update session
+ tags:
+ - sessions
+ /workspaces/{id}/sessions/{sid}/filetracker/files:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Session ID
+ in: path
+ name: sid
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ items:
+ type: string
+ type: array
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: List tracked files for session
+ tags:
+ - filetracker
+ /workspaces/{id}/sessions/{sid}/history:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Session ID
+ in: path
+ name: sid
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ items:
+ $ref: '#/definitions/proto.File'
+ type: array
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Get session history
+ tags:
+ - sessions
+ /workspaces/{id}/sessions/{sid}/messages:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Session ID
+ in: path
+ name: sid
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ items:
+ $ref: '#/definitions/github_com_charmbracelet_crush_internal_proto.Message'
+ type: array
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Get session messages
+ tags:
+ - sessions
+ /workspaces/{id}/sessions/{sid}/messages/user:
+ get:
+ parameters:
+ - description: Workspace ID
+ in: path
+ name: id
+ required: true
+ type: string
+ - description: Session ID
+ in: path
+ name: sid
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ items:
+ $ref: '#/definitions/github_com_charmbracelet_crush_internal_proto.Message'
+ type: array
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/proto.Error'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/proto.Error'
+ summary: Get user messages for session
+ tags:
+ - sessions
+swagger: "2.0"