diff --git a/bun.lock b/bun.lock index 5bbc889e0..7a4540182 100644 --- a/bun.lock +++ b/bun.lock @@ -29,7 +29,7 @@ }, "packages/app": { "name": "@mimo-ai/app", - "version": "0.1.1", + "version": "0.1.2", "dependencies": { "@kobalte/core": "catalog:", "@mimo-ai/sdk": "workspace:*", @@ -83,7 +83,7 @@ }, "packages/console/app": { "name": "@mimo-ai/console-app", - "version": "0.1.1", + "version": "0.1.2", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", @@ -117,7 +117,7 @@ }, "packages/console/core": { "name": "@mimo-ai/console-core", - "version": "0.1.1", + "version": "0.1.2", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -144,7 +144,7 @@ }, "packages/console/function": { "name": "@mimo-ai/console-function", - "version": "0.1.1", + "version": "0.1.2", "dependencies": { "@ai-sdk/anthropic": "3.0.64", "@ai-sdk/openai": "3.0.48", @@ -168,7 +168,7 @@ }, "packages/console/mail": { "name": "@mimo-ai/console-mail", - "version": "0.1.1", + "version": "0.1.2", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -192,7 +192,7 @@ }, "packages/desktop": { "name": "@mimo-ai/desktop", - "version": "0.1.1", + "version": "0.1.2", "dependencies": { "drizzle-orm": "catalog:", "effect": "catalog:", @@ -236,7 +236,7 @@ }, "packages/enterprise": { "name": "@mimo-ai/enterprise", - "version": "0.1.1", + "version": "0.1.2", "dependencies": { "@mimo-ai/shared": "workspace:*", "@mimo-ai/ui": "workspace:*", @@ -265,7 +265,7 @@ }, "packages/function": { "name": "@mimo-ai/function", - "version": "0.1.1", + "version": "0.1.2", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "catalog:", @@ -281,7 +281,7 @@ }, "packages/opencode": { "name": "@mimo-ai/cli", - "version": "0.1.1", + "version": "0.1.2", "bin": { "mimo": "./bin/mimo", }, @@ -436,7 +436,7 @@ }, "packages/plugin": { "name": "@mimo-ai/plugin", - "version": "0.1.1", + "version": "0.1.2", "dependencies": { "@mimo-ai/sdk": "workspace:*", "effect": "catalog:", @@ -471,7 +471,7 @@ }, "packages/sdk/js": { "name": "@mimo-ai/sdk", - "version": "0.1.1", + "version": "0.1.2", "dependencies": { "cross-spawn": "catalog:", }, @@ -486,7 +486,7 @@ }, "packages/shared": { "name": "@mimo-ai/shared", - "version": "0.1.1", + "version": "0.1.2", "bin": { "opencode": "./bin/opencode", }, @@ -510,7 +510,7 @@ }, "packages/slack": { "name": "@mimo-ai/slack", - "version": "0.1.1", + "version": "0.1.2", "dependencies": { "@mimo-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -545,7 +545,7 @@ }, "packages/ui": { "name": "@mimo-ai/ui", - "version": "0.1.1", + "version": "0.1.2", "dependencies": { "@kobalte/core": "catalog:", "@mimo-ai/sdk": "workspace:*", @@ -594,7 +594,7 @@ }, "packages/web": { "name": "@mimo-ai/web", - "version": "0.1.1", + "version": "0.1.2", "dependencies": { "@astrojs/cloudflare": "12.6.3", "@astrojs/markdown-remark": "6.3.1", diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index 5133d93db..86bd9bd19 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -4,308 +4,6 @@ export type ClientOptions = { baseUrl: `${string}://${string}` | (string & {}) } -export type EventServerConnected = { - type: "server.connected" - properties: { - [key: string]: unknown - } -} - -export type EventGlobalDisposed = { - type: "global.disposed" - properties: { - [key: string]: unknown - } -} - -export type EventActorRegistered = { - type: "actor.registered" - properties: { - sessionID: string - actorID: string - mode: "peer" | "subagent" | "main" - parentActorID?: string - description: string - agent: string - background: boolean - } -} - -export type EventActorStatus = { - type: "actor.status" - properties: { - sessionID: string - actorID: string - status: "pending" | "running" | "idle" - lastOutcome?: "success" | "failure" | "cancelled" - turnCount: number - lastTurnTime: number - error?: string - } -} - -export type EventActorStuck = { - type: "actor.stuck" - properties: { - sessionID: string - actorID: string - description: string - lastTurnTime: number - stuckDuration: number - } -} - -export type EventWriterCachePerf = { - type: "writer.cache_perf" - properties: { - sessionID: string - writerActorID: string - status: "completed" | "failed" - total_input_tokens: number - cache_read_tokens: number - cache_write_tokens: number - cache_hit_rate: number - num_llm_calls: number - } -} - -export type EventInboxArrived = { - type: "inbox.arrived" - properties: { - receiverSessionID: string - receiverActorID: string - senderSessionID?: string - senderActorID?: string - inboxID: string - type: string - } -} - -export type EventTaskCreated = { - type: "task.created" - properties: { - sessionID: string - task: { - id: string - session_id: string - parent_task_id?: string - status: "open" | "in_progress" | "blocked" | "done" | "abandoned" - summary: string - owner?: string - created_at: number - last_event_at: number - ended_at?: number - cleanup_after?: number - } - } -} - -export type EventTaskUpdated = { - type: "task.updated" - properties: { - sessionID: string - task: { - id: string - session_id: string - parent_task_id?: string - status: "open" | "in_progress" | "blocked" | "done" | "abandoned" - summary: string - owner?: string - created_at: number - last_event_at: number - ended_at?: number - cleanup_after?: number - } - kind: "started" | "unstarted" | "blocked" | "unblocked" | "done" | "abandoned" | "renamed" - } -} - -export type EventTeamCreated = { - type: "team.created" - properties: { - teamID: string - creatorSessionID: string - } -} - -export type EventTeamMemberJoined = { - type: "team.member.joined" - properties: { - teamID: string - sessionID: string - agent: string - role: string - } -} - -export type EventMetricsModelCall = { - type: "metrics.model_call" - properties: { - sessionID: string - finish_reason: string - ttft_ms?: number - latency_ms: number - cached_read_tokens: number - model_id: string - provider: string - total_tokens_in: number - total_tokens_out: number - } -} - -export type EventMetricsToolCall = { - type: "metrics.tool_call" - properties: { - sessionID: string - tool_name: string - input_bytes: number - output_bytes: number - tool_call_id: string - tool_call_status: "success" | "error" | "cancelled" - } -} - -export type EventMetricsAgentRequest = { - type: "metrics.agent_request" - properties: { - sessionID: string - phase: string - task_type: string - surface: string - total_tokens_in: number - total_tokens_out: number - files_changed: number - validation_status: string - } -} - -export type EventTuiPromptAppend = { - type: "tui.prompt.append" - properties: { - text: string - } -} - -export type EventTuiCommandExecute = { - type: "tui.command.execute" - properties: { - command: - | "session.list" - | "session.new" - | "session.share" - | "session.interrupt" - | "session.compact" - | "session.page.up" - | "session.page.down" - | "session.line.up" - | "session.line.down" - | "session.half.page.up" - | "session.half.page.down" - | "session.first" - | "session.last" - | "prompt.clear" - | "prompt.submit" - | "agent.cycle" - | string - } -} - -export type EventTuiToastShow = { - type: "tui.toast.show" - properties: { - title?: string - message: string - variant: "info" | "success" | "warning" | "error" - /** - * Duration in milliseconds - */ - duration?: number - } -} - -export type EventTuiSessionSelect = { - type: "tui.session.select" - properties: { - /** - * Session ID to navigate to - */ - sessionID: string - } -} - -export type EventTuiInstructionsLoaded = { - type: "tui.instructions.loaded" - properties: { - /** - * Display labels of loaded instruction files: worktree-relative path, ~-path, or absolute - */ - files: Array - } -} - -export type EventWorkflowPhase = { - type: "workflow.phase" - properties: { - sessionID: string - runID: string - title: string - } -} - -export type EventWorkflowLog = { - type: "workflow.log" - properties: { - sessionID: string - runID: string - message: string - } -} - -export type EventWorkflowStarted = { - type: "workflow.started" - properties: { - sessionID: string - runID: string - name: string - } -} - -export type EventWorkflowFinished = { - type: "workflow.finished" - properties: { - sessionID: string - runID: string - status: "completed" | "failed" | "cancelled" - error?: string - } -} - -export type EventWorkflowAgentFailed = { - type: "workflow.agent_failed" - properties: { - sessionID: string - runID: string - actorID?: string - agentType: string - label?: string - phase?: string - reason: "over-cap" | "spawn-reject" | "timeout" | "actor-error" | "no-deliverable" - errorMessage?: string - } -} - -export type EventWorkflowChildFailed = { - type: "workflow.child_failed" - properties: { - sessionID: string - runID: string - childRunID: string - name: string - status: "failed" | "cancelled" - error?: string - } -} - export type Project = { id: string worktree: string @@ -342,6 +40,20 @@ export type EventServerInstanceDisposed = { } } +export type EventServerConnected = { + type: "server.connected" + properties: { + [key: string]: unknown + } +} + +export type EventGlobalDisposed = { + type: "global.disposed" + properties: { + [key: string]: unknown + } +} + export type EventFileEdited = { type: "file.edited" properties: { @@ -426,6 +138,69 @@ export type EventPermissionReplied = { } } +export type EventActorRegistered = { + type: "actor.registered" + properties: { + sessionID: string + actorID: string + mode: "peer" | "subagent" | "main" + parentActorID?: string + description: string + agent: string + background: boolean + } +} + +export type EventActorStatus = { + type: "actor.status" + properties: { + sessionID: string + actorID: string + status: "pending" | "running" | "idle" + lastOutcome?: "success" | "failure" | "cancelled" + turnCount: number + lastTurnTime: number + error?: string + } +} + +export type EventActorStuck = { + type: "actor.stuck" + properties: { + sessionID: string + actorID: string + description: string + lastTurnTime: number + stuckDuration: number + } +} + +export type EventWriterCachePerf = { + type: "writer.cache_perf" + properties: { + sessionID: string + writerActorID: string + status: "completed" | "failed" + total_input_tokens: number + cache_read_tokens: number + cache_write_tokens: number + cache_hit_rate: number + num_llm_calls: number + } +} + +export type EventInboxArrived = { + type: "inbox.arrived" + properties: { + receiverSessionID: string + receiverActorID: string + senderSessionID?: string + senderActorID?: string + inboxID: string + type: string + } +} + export type SnapshotFileDiff = { file: string patch: string @@ -707,6 +482,45 @@ export type EventBashInteractiveReplied = { } } +export type EventTaskCreated = { + type: "task.created" + properties: { + sessionID: string + task: { + id: string + session_id: string + parent_task_id?: string + status: "open" | "in_progress" | "blocked" | "done" | "abandoned" + summary: string + owner?: string + created_at: number + last_event_at: number + ended_at?: number + cleanup_after?: number + } + } +} + +export type EventTaskUpdated = { + type: "task.updated" + properties: { + sessionID: string + task: { + id: string + session_id: string + parent_task_id?: string + status: "open" | "in_progress" | "blocked" | "done" | "abandoned" + summary: string + owner?: string + created_at: number + last_event_at: number + ended_at?: number + cleanup_after?: number + } + kind: "started" | "unstarted" | "blocked" | "unblocked" | "done" | "abandoned" | "renamed" + } +} + export type Todo = { /** * Brief description of the task @@ -721,63 +535,186 @@ export type Todo = { export type EventTodoUpdated = { type: "todo.updated" properties: { - sessionID: string - todos: Array + sessionID: string + todos: Array + } +} + +export type EventTeamCreated = { + type: "team.created" + properties: { + teamID: string + creatorSessionID: string + } +} + +export type EventTeamMemberJoined = { + type: "team.member.joined" + properties: { + teamID: string + sessionID: string + agent: string + role: string + } +} + +export type SessionStatus = + | { + type: "idle" + } + | { + type: "retry" + attempt: number + message: string + next: number + } + | { + type: "busy" + message?: string + } + +export type EventSessionStatus = { + type: "session.status" + properties: { + sessionID: string + status: SessionStatus + } +} + +export type EventSessionIdle = { + type: "session.idle" + properties: { + sessionID: string + } +} + +export type EventSessionGoal = { + type: "session.goal" + properties: { + sessionID: string + goal?: { + condition: string + } + lastVerdict?: { + ok: boolean + impossible?: boolean + reason: string + attempt: number + messageID?: string + error?: boolean + } + } +} + +export type EventMetricsModelCall = { + type: "metrics.model_call" + properties: { + sessionID: string + finish_reason: string + ttft_ms?: number + latency_ms: number + cached_read_tokens: number + model_id: string + provider: string + total_tokens_in: number + total_tokens_out: number + } +} + +export type EventMetricsToolCall = { + type: "metrics.tool_call" + properties: { + sessionID: string + tool_name: string + input_bytes: number + output_bytes: number + tool_call_id: string + tool_call_status: "success" | "error" | "cancelled" + } +} + +export type EventMetricsAgentRequest = { + type: "metrics.agent_request" + properties: { + sessionID: string + phase: string + task_type: string + surface: string + total_tokens_in: number + total_tokens_out: number + files_changed: number + validation_status: string + } +} + +export type EventSessionCompacted = { + type: "session.compacted" + properties: { + sessionID: string + } +} + +export type EventTuiPromptAppend = { + type: "tui.prompt.append" + properties: { + text: string } } -export type SessionStatus = - | { - type: "idle" - } - | { - type: "retry" - attempt: number - message: string - next: number - } - | { - type: "busy" - message?: string - } - -export type EventSessionStatus = { - type: "session.status" +export type EventTuiCommandExecute = { + type: "tui.command.execute" properties: { - sessionID: string - status: SessionStatus + command: + | "session.list" + | "session.new" + | "session.share" + | "session.interrupt" + | "session.compact" + | "session.page.up" + | "session.page.down" + | "session.line.up" + | "session.line.down" + | "session.half.page.up" + | "session.half.page.down" + | "session.first" + | "session.last" + | "prompt.clear" + | "prompt.submit" + | "agent.cycle" + | string } } -export type EventSessionIdle = { - type: "session.idle" +export type EventTuiToastShow = { + type: "tui.toast.show" properties: { - sessionID: string + title?: string + message: string + variant: "info" | "success" | "warning" | "error" + /** + * Duration in milliseconds + */ + duration?: number } } -export type EventSessionGoal = { - type: "session.goal" +export type EventTuiSessionSelect = { + type: "tui.session.select" properties: { + /** + * Session ID to navigate to + */ sessionID: string - goal?: { - condition: string - } - lastVerdict?: { - ok: boolean - impossible?: boolean - reason: string - attempt: number - messageID?: string - error?: boolean - } } } -export type EventSessionCompacted = { - type: "session.compacted" +export type EventTuiInstructionsLoaded = { + type: "tui.instructions.loaded" properties: { - sessionID: string + /** + * Display labels of loaded instruction files: worktree-relative path, ~-path, or absolute + */ + files: Array } } @@ -867,6 +804,69 @@ export type EventPtyDeleted = { } } +export type EventWorkflowPhase = { + type: "workflow.phase" + properties: { + sessionID: string + runID: string + title: string + } +} + +export type EventWorkflowLog = { + type: "workflow.log" + properties: { + sessionID: string + runID: string + message: string + } +} + +export type EventWorkflowStarted = { + type: "workflow.started" + properties: { + sessionID: string + runID: string + name: string + } +} + +export type EventWorkflowFinished = { + type: "workflow.finished" + properties: { + sessionID: string + runID: string + status: "completed" | "failed" | "cancelled" + error?: string + } +} + +export type EventWorkflowAgentFailed = { + type: "workflow.agent_failed" + properties: { + sessionID: string + runID: string + actorID?: string + agentType: string + label?: string + phase?: string + reason: "over-cap" | "spawn-reject" | "timeout" | "actor-error" | "no-deliverable" + errorMessage?: string + } +} + +export type EventWorkflowChildFailed = { + type: "workflow.child_failed" + properties: { + sessionID: string + runID: string + childRunID: string + name: string + status: "failed" | "cancelled" + error?: string + } +} + export type EventWorkspaceReady = { type: "workspace.ready" properties: { @@ -1498,33 +1498,10 @@ export type GlobalEvent = { project?: string workspace?: string payload: - | EventServerConnected - | EventGlobalDisposed - | EventActorRegistered - | EventActorStatus - | EventActorStuck - | EventWriterCachePerf - | EventInboxArrived - | EventTaskCreated - | EventTaskUpdated - | EventTeamCreated - | EventTeamMemberJoined - | EventMetricsModelCall - | EventMetricsToolCall - | EventMetricsAgentRequest - | EventTuiPromptAppend - | EventTuiCommandExecute - | EventTuiToastShow - | EventTuiSessionSelect - | EventTuiInstructionsLoaded - | EventWorkflowPhase - | EventWorkflowLog - | EventWorkflowStarted - | EventWorkflowFinished - | EventWorkflowAgentFailed - | EventWorkflowChildFailed | EventProjectUpdated | EventServerInstanceDisposed + | EventServerConnected + | EventGlobalDisposed | EventFileEdited | EventFileWatcherUpdated | EventLspClientDiagnostics @@ -1534,6 +1511,11 @@ export type GlobalEvent = { | EventMessagePartDelta | EventPermissionAsked | EventPermissionReplied + | EventActorRegistered + | EventActorStatus + | EventActorStuck + | EventWriterCachePerf + | EventInboxArrived | EventSessionDiff | EventSessionError | EventSessionRetryAttempt @@ -1546,11 +1528,23 @@ export type GlobalEvent = { | EventSessionCwd | EventBashInteractiveAsked | EventBashInteractiveReplied + | EventTaskCreated + | EventTaskUpdated | EventTodoUpdated + | EventTeamCreated + | EventTeamMemberJoined | EventSessionStatus | EventSessionIdle | EventSessionGoal + | EventMetricsModelCall + | EventMetricsToolCall + | EventMetricsAgentRequest | EventSessionCompacted + | EventTuiPromptAppend + | EventTuiCommandExecute + | EventTuiToastShow + | EventTuiSessionSelect + | EventTuiInstructionsLoaded | EventMcpToolsChanged | EventMcpBrowserOpenFailed | EventCommandExecuted @@ -1561,6 +1555,12 @@ export type GlobalEvent = { | EventPtyUpdated | EventPtyExited | EventPtyDeleted + | EventWorkflowPhase + | EventWorkflowLog + | EventWorkflowStarted + | EventWorkflowFinished + | EventWorkflowAgentFailed + | EventWorkflowChildFailed | EventWorkspaceReady | EventWorkspaceFailed | EventWorkspaceRestore @@ -1926,6 +1926,19 @@ export type Config = { */ urls?: Array } + /** + * Compose mode configuration + */ + compose?: { + /** + * Directory where compose skills save specs, plans, and reports. Relative paths are passed to the agent prompt verbatim; set docs_absolute: true to anchor them to the project root. Defaults to docs/compose. + */ + docs?: string + /** + * Whether the docs directory injected into the compose prompt is an absolute path. When false (default), a relative `docs` value is passed through verbatim. When true, a relative `docs` is resolved against the active worktree root so it is unambiguous regardless of the agent's working directory. Ignored when `docs` is already absolute. + */ + docs_absolute?: boolean + } watcher?: { ignore?: Array } @@ -2171,6 +2184,14 @@ export type Config = { * Token cap for §11 Open notes section of checkpoint.md (writer-side budget validation). Default: 800. */ open_notes?: number + /** + * Token cap for the recent user input section (verbatim user messages from the live DB, FIFO eviction). Default: 16000. Set 0 to disable. + */ + recent_user?: number + /** + * Per-message cap inside recent user input section; oversized messages get head/tail truncation with messageID elision marker. Default: 2000. + */ + recent_user_per_msg?: number } /** * Number of days after task done/abandoned before it's filtered out of `list({include_archived: false})`. Rows are NOT deleted — see v9 for true GC. Default: 7. @@ -2662,33 +2683,10 @@ export type File = { } export type Event = - | EventServerConnected - | EventGlobalDisposed - | EventActorRegistered - | EventActorStatus - | EventActorStuck - | EventWriterCachePerf - | EventInboxArrived - | EventTaskCreated - | EventTaskUpdated - | EventTeamCreated - | EventTeamMemberJoined - | EventMetricsModelCall - | EventMetricsToolCall - | EventMetricsAgentRequest - | EventTuiPromptAppend - | EventTuiCommandExecute - | EventTuiToastShow - | EventTuiSessionSelect - | EventTuiInstructionsLoaded - | EventWorkflowPhase - | EventWorkflowLog - | EventWorkflowStarted - | EventWorkflowFinished - | EventWorkflowAgentFailed - | EventWorkflowChildFailed | EventProjectUpdated | EventServerInstanceDisposed + | EventServerConnected + | EventGlobalDisposed | EventFileEdited | EventFileWatcherUpdated | EventLspClientDiagnostics @@ -2698,6 +2696,11 @@ export type Event = | EventMessagePartDelta | EventPermissionAsked | EventPermissionReplied + | EventActorRegistered + | EventActorStatus + | EventActorStuck + | EventWriterCachePerf + | EventInboxArrived | EventSessionDiff | EventSessionError | EventSessionRetryAttempt @@ -2710,11 +2713,23 @@ export type Event = | EventSessionCwd | EventBashInteractiveAsked | EventBashInteractiveReplied + | EventTaskCreated + | EventTaskUpdated | EventTodoUpdated + | EventTeamCreated + | EventTeamMemberJoined | EventSessionStatus | EventSessionIdle | EventSessionGoal + | EventMetricsModelCall + | EventMetricsToolCall + | EventMetricsAgentRequest | EventSessionCompacted + | EventTuiPromptAppend + | EventTuiCommandExecute + | EventTuiToastShow + | EventTuiSessionSelect + | EventTuiInstructionsLoaded | EventMcpToolsChanged | EventMcpBrowserOpenFailed | EventCommandExecuted @@ -2725,6 +2740,12 @@ export type Event = | EventPtyUpdated | EventPtyExited | EventPtyDeleted + | EventWorkflowPhase + | EventWorkflowLog + | EventWorkflowStarted + | EventWorkflowFinished + | EventWorkflowAgentFailed + | EventWorkflowChildFailed | EventWorkspaceReady | EventWorkspaceFailed | EventWorkspaceRestore