@rzx/ohs 1.1.16 → 1.1.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/frontend/index.js +1968 -1297
  2. package/dist/frontend/index.js.map +45 -19
  3. package/dist/index.js +40420 -33343
  4. package/dist/index.js.map +194 -132
  5. package/dist/migrations/0000_current_schema.sql +436 -0
  6. package/dist/migrations/meta/0000_snapshot.json +3442 -0
  7. package/dist/migrations/meta/_journal.json +3 -136
  8. package/package.json +12 -12
  9. package/dist/migrations/0000_session_runtime.sql +0 -68
  10. package/dist/migrations/0001_event_sequence.sql +0 -8
  11. package/dist/migrations/0002_cron.sql +0 -33
  12. package/dist/migrations/0003_projects.sql +0 -30
  13. package/dist/migrations/0004_project_default_shell.sql +0 -1
  14. package/dist/migrations/0005_scheduled_tasks.sql +0 -57
  15. package/dist/migrations/0006_event_schema_version.sql +0 -1
  16. package/dist/migrations/0007_projection_settlement.sql +0 -19
  17. package/dist/migrations/0008_run_attempt.sql +0 -23
  18. package/dist/migrations/0009_external_channels.sql +0 -45
  19. package/dist/migrations/0010_workflow_and_owner.sql +0 -68
  20. package/dist/migrations/0011_storage_format.sql +0 -6
  21. package/dist/migrations/0012_job_admission.sql +0 -6
  22. package/dist/migrations/0013_attachments.sql +0 -20
  23. package/dist/migrations/0014_session_input_attachments.sql +0 -45
  24. package/dist/migrations/0015_attachment_representations.sql +0 -22
  25. package/dist/migrations/0016_attachment_lifecycle.sql +0 -16
  26. package/dist/migrations/0017_structured_input_items.sql +0 -1
  27. package/dist/migrations/0018_session_goals.sql +0 -17
  28. package/dist/migrations/0019_session_goal_progress.sql +0 -3
@@ -1,31 +1,57 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../frontend/src/theme/builtinThemes.ts", "../../../../packages/protocol/src/session.ts", "../../../../packages/protocol/src/runtime-config.ts", "../../../../packages/protocol/src/session-input-items.ts", "../../../../packages/protocol/src/requests.ts", "../../../../packages/protocol/src/serialization.ts", "../../../../packages/protocol/src/attachment.ts", "../../../../packages/protocol/src/capabilities.ts", "../../../../packages/protocol/src/session-goals.ts", "../../../../packages/protocol/src/index.ts", "../../../../packages/client/src/transport/http-client.ts", "../../../../packages/client/src/transport/index.ts", "../../../../packages/client/src/state/reducer.ts", "../../../../packages/client/src/state/selectors.ts", "../../../../packages/client/src/state/sync.ts", "../../../../packages/client/src/state/index.ts", "../../../../packages/client/src/commands/plugin-presentation.ts", "../../../../packages/client/src/commands/session-commands.ts", "../../../../packages/client/src/commands/index.ts", "../../../../packages/client/src/index.ts", "../../../frontend/src/jobs/job-remote-state.ts", "../../../frontend/src/hooks/transcript.ts", "../../../frontend/src/hooks/sessionSlashCommands.ts", "../../../frontend/src/hooks/useServerSync.ts", "../../../frontend/src/ui/constants.ts", "../../../frontend/src/hooks/useEscToCancel.ts", "../../../frontend/src/theme/ThemeContext.tsx", "../../../frontend/src/ui/fuzzy.ts", "../../../frontend/src/hooks/useListNavigation.ts", "../../../frontend/src/ui/DialogSelect.tsx", "../../../frontend/src/ui/DialogText.tsx", "../../../frontend/src/components/dialogs/DiffView.tsx", "../../../frontend/src/components/dialogs/PermissionDialog.tsx", "../../../frontend/src/components/dialogs/QuestionDialog.tsx", "../../../frontend/src/hooks/useModalWiring.tsx", "../../../frontend/src/ui/DialogContext.tsx", "../../../frontend/src/ui/Toast.tsx", "../../../frontend/src/ui/ModelPickerDialog.tsx", "../../../frontend/src/keymap/commands.ts", "../../../frontend/src/keymap/permissionModes.ts", "../../../frontend/src/components/Logo.tsx", "../../../frontend/src/routes/Home.tsx", "../../../frontend/src/theme/syntax.ts", "../../../frontend/src/components/messages/ToolDiff.tsx", "../../../frontend/src/routes/session/parts.tsx", "../../../frontend/src/routes/session/Session.tsx", "../../../frontend/src/routes/session/Sidebar.tsx", "../../../frontend/src/services/status.ts", "../../../frontend/src/routes/session/Footer.tsx", "../../../frontend/src/components/prompt/Autocomplete.tsx", "../../../frontend/src/services/frecency.ts", "../../../frontend/src/ui/commandRanking.ts", "../../../frontend/src/components/prompt/fileCompletion.ts", "../../../frontend/src/components/prompt/Prompt.tsx", "../../../frontend/src/routes/session/AppView.tsx", "../../../frontend/src/components/JobsPanel.tsx", "../../../frontend/src/utils/selection.ts", "../../../frontend/src/App.tsx", "../../../frontend/src/index.tsx", "../../../frontend/src/runtime.ts"],
3
+ "sources": ["../../../frontend/src/theme/builtinThemes.ts", "../../../../packages/protocol/src/session.ts", "../../../../packages/protocol/src/serialization.ts", "../../../../packages/protocol/src/runtime-config.ts", "../../../../packages/protocol/src/session-input-items.ts", "../../../../packages/protocol/src/requests.ts", "../../../../packages/protocol/src/attachment.ts", "../../../../packages/protocol/src/capabilities.ts", "../../../../packages/protocol/src/session-goals.ts", "../../../../packages/protocol/src/index.ts", "../../../../packages/client/src/protocol/protocol-client.ts", "../../../../packages/client/src/transport/http-transport.ts", "../../../../packages/client/src/transport/sse-transport.ts", "../../../../packages/client/src/protocol/index.ts", "../../../../packages/client/src/resources/system-resource.ts", "../../../../packages/client/src/resources/provider-resource.ts", "../../../../packages/client/src/resources/auth-resource.ts", "../../../../packages/client/src/resources/project-resource.ts", "../../../../packages/client/src/resources/plugin-resource.ts", "../../../../packages/client/src/resources/development-resource.ts", "../../../../packages/client/src/resources/session-resource.ts", "../../../../packages/client/src/resources/attachment-resource.ts", "../../../../packages/client/src/resources/permission-resource.ts", "../../../../packages/client/src/resources/schedule-resource.ts", "../../../../packages/client/src/resources/job-resource.ts", "../../../../packages/client/src/resources/terminal-resource.ts", "../../../../packages/client/src/resources/channel-resource.ts", "../../../../packages/client/src/resources/event-resource.ts", "../../../../packages/client/src/resources/index.ts", "../../../../packages/client/src/transport/http-client.ts", "../../../../packages/client/src/transport/index.ts", "../../../../packages/client/src/state/reducer.ts", "../../../../packages/client/src/state/selectors.ts", "../../../../packages/client/src/state/sync.ts", "../../../../packages/client/src/state/session-sync-controller.ts", "../../../../packages/client/src/state/index.ts", "../../../../packages/client/src/commands/plugin-presentation.ts", "../../../../packages/client/src/commands/session-commands.ts", "../../../../packages/client/src/commands/index.ts", "../../../../packages/client/src/index.ts", "../../../frontend/src/jobs/job-remote-state.ts", "../../../frontend/src/hooks/transcript.ts", "../../../frontend/src/hooks/sessionSlashCommands.ts", "../../../frontend/src/hooks/sync-submodules/connection.ts", "../../../frontend/src/hooks/sync-submodules/permissions.ts", "../../../frontend/src/hooks/sync-submodules/view-model.ts", "../../../frontend/src/hooks/sync-submodules/mcp.ts", "../../../frontend/src/hooks/sync-submodules/actions.ts", "../../../frontend/src/hooks/sync-submodules/index.ts", "../../../frontend/src/hooks/useServerSync.ts", "../../../frontend/src/ui/constants.ts", "../../../frontend/src/hooks/useEscToCancel.ts", "../../../frontend/src/theme/ThemeContext.tsx", "../../../frontend/src/ui/fuzzy.ts", "../../../frontend/src/hooks/useListNavigation.ts", "../../../frontend/src/ui/DialogSelect.tsx", "../../../frontend/src/ui/DialogText.tsx", "../../../frontend/src/components/dialogs/DiffView.tsx", "../../../frontend/src/components/dialogs/PermissionDialog.tsx", "../../../frontend/src/components/dialogs/QuestionDialog.tsx", "../../../frontend/src/hooks/useModalWiring.tsx", "../../../frontend/src/ui/DialogContext.tsx", "../../../frontend/src/ui/Toast.tsx", "../../../frontend/src/ui/ModelPickerDialog.tsx", "../../../frontend/src/keymap/commands.ts", "../../../frontend/src/keymap/permissionModes.ts", "../../../frontend/src/components/Logo.tsx", "../../../frontend/src/routes/Home.tsx", "../../../frontend/src/theme/syntax.ts", "../../../frontend/src/components/messages/ToolDiff.tsx", "../../../frontend/src/routes/session/parts.tsx", "../../../frontend/src/routes/session/Session.tsx", "../../../frontend/src/routes/session/Sidebar.tsx", "../../../frontend/src/services/status.ts", "../../../frontend/src/routes/session/Footer.tsx", "../../../frontend/src/components/prompt/Autocomplete.tsx", "../../../frontend/src/services/frecency.ts", "../../../frontend/src/ui/commandRanking.ts", "../../../frontend/src/components/prompt/fileCompletion.ts", "../../../frontend/src/components/prompt/Prompt.tsx", "../../../frontend/src/routes/session/AppView.tsx", "../../../frontend/src/components/JobsPanel.tsx", "../../../frontend/src/utils/selection.ts", "../../../frontend/src/App.tsx", "../../../frontend/src/index.tsx", "../../../frontend/src/runtime.ts"],
4
4
  "sourcesContent": [
5
5
  "export type ThemeConfig = {\n name: string;\n colors: {\n primary: string;\n secondary: string;\n accent: string;\n foreground: string;\n background: string;\n backgroundPanel: string;\n backgroundPrompt: string;\n muted: string;\n success: string;\n warning: string;\n error: string;\n info: string;\n };\n icons: {\n spinner: string[];\n tool: string;\n assistant: string;\n user: string;\n system: string;\n success: string;\n error: string;\n };\n};\n\n/** One Dark — default dark theme */\nexport const defaultTheme: ThemeConfig = {\n name: \"default\",\n colors: {\n primary: \"#56b6c2\",\n secondary: \"#abb2bf\",\n accent: \"#61afef\",\n foreground: \"#abb2bf\",\n background: \"#000000\",\n backgroundPanel: \"#262a33\",\n backgroundPrompt: \"#262626\",\n muted: \"#5c6370\",\n success: \"#98c379\",\n warning: \"#e5c07b\",\n error: \"#e06c75\",\n info: \"#61afef\",\n },\n icons: {\n spinner: [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"],\n tool: \" ⏵ \",\n assistant: \"⏺ \",\n user: \"> \",\n system: \"ℹ \",\n success: \"✓ \",\n error: \"✗ \",\n },\n};\n\n/** GitHub Light — bright theme */\nexport const lightTheme: ThemeConfig = {\n name: \"light\",\n colors: {\n primary: \"#0550ae\",\n secondary: \"#24292f\",\n accent: \"#0969da\",\n foreground: \"#24292f\",\n background: \"#ffffff\",\n backgroundPanel: \"#f6f8fa\",\n backgroundPrompt: \"#f3f4f6\",\n muted: \"#6e7781\",\n success: \"#1a7f37\",\n warning: \"#9a6700\",\n error: \"#cf222e\",\n info: \"#0969da\",\n },\n icons: {\n spinner: [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"],\n tool: \" ⏵ \",\n assistant: \"⏺ \",\n user: \"> \",\n system: \"ℹ \",\n success: \"✓ \",\n error: \"✗ \",\n },\n};\n\n/** Dracula — high-contrast dark theme */\nexport const draculaTheme: ThemeConfig = {\n name: \"dracula\",\n colors: {\n primary: \"#bd93f9\",\n secondary: \"#f8f8f2\",\n accent: \"#8be9fd\",\n foreground: \"#f8f8f2\",\n background: \"#282a36\",\n backgroundPanel: \"#343746\",\n backgroundPrompt: \"#2f313d\",\n muted: \"#6272a4\",\n success: \"#50fa7b\",\n warning: \"#ffb86c\",\n error: \"#ff5555\",\n info: \"#8be9fd\",\n },\n icons: {\n spinner: [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"],\n tool: \" ⏵ \",\n assistant: \"⏺ \",\n user: \"> \",\n system: \"ℹ \",\n success: \"✓ \",\n error: \"✗ \",\n },\n};\n\nexport const BUILTIN_THEMES: Record<string, ThemeConfig> = {\n default: defaultTheme,\n light: lightTheme,\n dracula: draculaTheme,\n};\n\nexport function getTheme(name: string): ThemeConfig {\n return BUILTIN_THEMES[name] ?? defaultTheme;\n}\n",
6
- "/**\n * `closing` 表示 Session 正在停止当前工作并等待资源释放,此时不再接收新工作。\n * 等待结束后,Session 会进入不可逆的 archived 状态。\n */\nexport type SessionStatus =\n \"idle\" | \"running\" | \"closing\" | \"archived\" | \"error\";\nexport type InputDelivery = \"queue\" | \"steer\";\nexport type RunStatus =\n \"pending\" | \"running\" | \"completed\" | \"failed\" | \"interrupted\";\nexport type RunAttemptStatus = \"pending\" | \"running\" | \"completed\" | \"failed\" | \"cancelled\";\nexport type SessionTaskStatus =\n \"pending\" | \"running\" | \"completed\" | \"failed\" | \"stopped\" | \"interrupted\";\nexport type PermissionStatus = \"pending\" | \"approved\" | \"denied\" | \"expired\";\nexport type SessionMessageRole = \"system\" | \"user\" | \"assistant\";\nexport type SessionMessagePartType =\n | \"text\"\n | \"attachment\"\n | \"transformation\"\n | \"reasoning\"\n | \"tool\"\n | \"tool_result\"\n | \"error\"\n | \"log\";\nexport type SessionMessagePartStatus =\n \"pending\" | \"running\" | \"completed\" | \"failed\" | \"interrupted\";\nexport type ProjectionSettlementAction = \"retry-terminal-projection\" | \"compensate-child\";\nexport type ProjectionSettlementStatus = \"pending\" | \"retrying\" | \"resolved\" | \"abandoned\";\n\n/** Default durable session-event schema version for types without an override. */\nexport const SESSION_EVENT_SCHEMA_VERSION = 1;\n\n/**\n * Per-event payload schema versions written by the durable event registry.\n * Unlisted types use {@link SESSION_EVENT_SCHEMA_VERSION}.\n */\nexport const SESSION_EVENT_SCHEMA_VERSIONS: Readonly<Record<string, number>> = {\n \"session.input.admitted\": 2,\n};\n\nexport function sessionEventSchemaVersion(type: string): number {\n return SESSION_EVENT_SCHEMA_VERSIONS[type] ?? SESSION_EVENT_SCHEMA_VERSION;\n}\n\nexport interface SessionRecord {\n id: string;\n parentId?: string;\n projectId?: string;\n cwd: string;\n cwdRelative?: string;\n title: string;\n model: string;\n agent?: string;\n status: SessionStatus;\n metadata: Record<string, unknown>;\n createdAt: number;\n updatedAt: number;\n archivedAt?: number;\n}\n\nexport interface ProjectRecord {\n id: string;\n name: string;\n path: string;\n pinnedAt?: number;\n defaultShell?: string;\n lastOpenedAt: number;\n archivedAt?: number;\n createdAt: number;\n updatedAt: number;\n}\n\nexport interface ProjectLocationRecord {\n id: string;\n projectId: string;\n path: string;\n normalizedPath: string;\n status: \"active\" | \"historical\";\n boundAt: number;\n lastVerifiedAt?: number;\n}\n\nexport interface SessionInputRecord {\n id: string;\n sessionId: string;\n seq: number;\n delivery: InputDelivery;\n items: SessionUserInputItem[];\n content: string;\n attachments: SessionInputAttachmentRecord[];\n promotedMessageId?: string;\n metadata: Record<string, unknown>;\n createdAt: number;\n}\n\nexport interface SessionMessageRecord {\n id: string;\n sessionId: string;\n seq: number;\n role: SessionMessageRole;\n runId?: string;\n inputId?: string;\n metadata: Record<string, unknown>;\n createdAt: number;\n updatedAt: number;\n}\n\nexport interface SessionMessagePartRecord {\n id: string;\n sessionId: string;\n messageId: string;\n seq: number;\n type: SessionMessagePartType;\n status: SessionMessagePartStatus;\n text?: string;\n toolUseId?: string;\n toolName?: string;\n input?: Record<string, unknown>;\n output?: unknown;\n isError?: boolean;\n assetId?: string;\n intent?: AttachmentIntent;\n displayName?: string;\n mediaType?: string;\n sizeBytes?: number;\n kind?: \"direct\" | \"document_extract\" | \"tool_mount\";\n representationId?: string;\n processor?: string;\n transformationError?: string;\n metadata: Record<string, unknown>;\n createdAt: number;\n updatedAt: number;\n}\n\nexport interface SessionEventRecord {\n id: string;\n seq: number;\n type: string;\n schemaVersion: number;\n sessionId?: string;\n payload: Record<string, unknown>;\n createdAt: number;\n}\n\nexport interface SessionAttachmentMessagePartRecord\n extends SessionMessagePartRecord {\n type: \"attachment\";\n assetId: string;\n intent: AttachmentIntent;\n displayName: string;\n mediaType: string;\n sizeBytes: number;\n}\n\nexport interface SessionTransformationMessagePartRecord\n extends SessionMessagePartRecord {\n type: \"transformation\";\n assetId: string;\n kind: \"direct\" | \"document_extract\" | \"tool_mount\";\n representationId?: string;\n processor?: string;\n transformationError?: string;\n}\n\nexport interface ProjectionSettlementRecord {\n id: string;\n projector: string;\n rootSessionId: string;\n eventSequence: number;\n action: ProjectionSettlementAction;\n payload: Record<string, unknown>;\n status: ProjectionSettlementStatus;\n attemptCount: number;\n lastError?: string;\n nextRetryAt?: number;\n createdAt: number;\n updatedAt: number;\n resolvedAt?: number;\n}\n\nexport interface SessionRunRecord {\n id: string;\n sessionId: string;\n inputId?: string;\n status: RunStatus;\n startedAt?: number;\n finishedAt?: number;\n error?: string;\n metadata: Record<string, unknown>;\n createdAt: number;\n updatedAt: number;\n}\n\nexport interface SessionRunAttemptRecord {\n id: string;\n runId: string;\n sequence: number;\n status: RunAttemptStatus;\n provider?: string;\n model?: string;\n retryReason?: string;\n errorKind?: string;\n error?: string;\n inputTokens?: number;\n outputTokens?: number;\n startedAt?: number;\n finishedAt?: number;\n createdAt: number;\n updatedAt: number;\n}\n\n/** Daemon-owned execution projection. Live handles stay in their backend runtime and are never persisted. */\nexport interface SessionExecutionRecord {\n id: string;\n sessionId: string;\n /** Producer namespace plus requestId uniquely identify one logical admission. */\n requestNamespace?: string;\n requestId?: string;\n childSessionId?: string;\n runId?: string;\n type: string;\n status: SessionTaskStatus;\n description: string;\n cwd: string;\n output?: string;\n error?: string;\n metadata: Record<string, unknown>;\n createdAt: number;\n startedAt?: number;\n finishedAt?: number;\n updatedAt: number;\n}\n\nexport interface PermissionRequestRecord {\n id: string;\n sessionId: string;\n runId?: string;\n toolName: string;\n payload: Record<string, unknown>;\n status: PermissionStatus;\n decision?: string;\n decidedByClientId?: string;\n createdAt: number;\n updatedAt: number;\n}\n\n/** Atomic, server-owned state used when a client attaches to one session. */\nexport interface SessionStateSnapshot {\n cursor: number;\n session: SessionRecord;\n inputs: SessionInputRecord[];\n messages: SessionMessageRecord[];\n parts: SessionMessagePartRecord[];\n runs: SessionRunRecord[];\n attempts: SessionRunAttemptRecord[];\n tasks?: SessionExecutionRecord[];\n permissions: PermissionRequestRecord[];\n}\n\nexport type ScheduledTaskStatus = \"active\" | \"paused\" | \"completed\";\nexport type ScheduledTaskDestination = \"standalone\" | \"chat\";\nexport type ScheduledTaskExecutionMode = \"local\" | \"worktree\";\nexport type ScheduledRecurrenceFormat = \"rrule\" | \"once\";\nexport type ScheduledOverlapPolicy = \"skip\" | \"queue\";\nexport type ScheduledMissedRunPolicy = \"skip\" | \"run_once\";\n\nexport interface ScheduledPermissionProfile {\n mode: \"read_only\" | \"workspace_write\" | \"full_access\";\n network?: boolean;\n allowedTools?: string[];\n deniedTools?: string[];\n}\n\nexport interface ScheduledStopPolicy {\n runOnce?: boolean;\n maxRuns?: number;\n stopWhenCompleted?: boolean;\n expiresAt?: number;\n}\n\nexport interface ScheduledTaskRecord {\n id: string;\n name: string;\n description?: string;\n prompt: string;\n recurrence: string;\n recurrenceFormat: ScheduledRecurrenceFormat;\n timezone: string;\n status: ScheduledTaskStatus;\n destination: ScheduledTaskDestination;\n sessionId?: string;\n projectPaths: string[];\n executionMode: ScheduledTaskExecutionMode;\n model?: string;\n effort?: string;\n skillNames: string[];\n pluginNames: string[];\n permissionProfile: ScheduledPermissionProfile;\n overlapPolicy: ScheduledOverlapPolicy;\n missedRunPolicy: ScheduledMissedRunPolicy;\n stopPolicy?: ScheduledStopPolicy;\n createdBy: \"user\" | \"agent\" | \"migration\";\n createdFromSessionId?: string;\n lastRunAt?: number;\n nextRunAt?: number;\n runCount: number;\n createdAt: number;\n updatedAt: number;\n}\n\nexport type ScheduledRunCause = \"scheduled\" | \"manual\" | \"missed_run\";\nexport type ScheduledRunStatus =\n | \"queued\"\n | \"running\"\n | \"succeeded\"\n | \"failed\"\n | \"interrupted\"\n | \"needs_attention\"\n | \"skipped\";\n\nexport interface ScheduledRunRecord {\n id: string;\n taskId: string;\n cause: ScheduledRunCause;\n status: ScheduledRunStatus;\n scheduledFor: number;\n sessionId?: string;\n runId?: string;\n summary?: string;\n error?: string;\n unread: boolean;\n attentionReason?: string;\n createdAt: number;\n startedAt?: number;\n finishedAt?: number;\n updatedAt: number;\n}\n\nexport interface CreateScheduledTaskInput {\n id?: string;\n name: string;\n description?: string;\n prompt: string;\n recurrence: string;\n recurrenceFormat: ScheduledRecurrenceFormat;\n timezone: string;\n status?: ScheduledTaskStatus;\n destination: ScheduledTaskDestination;\n sessionId?: string;\n projectPaths?: string[];\n executionMode?: ScheduledTaskExecutionMode;\n model?: string;\n effort?: string;\n skillNames?: string[];\n pluginNames?: string[];\n permissionProfile?: ScheduledPermissionProfile;\n overlapPolicy?: ScheduledOverlapPolicy;\n missedRunPolicy?: ScheduledMissedRunPolicy;\n stopPolicy?: ScheduledStopPolicy;\n createdBy?: ScheduledTaskRecord[\"createdBy\"];\n createdFromSessionId?: string;\n nextRunAt?: number;\n}\n\nexport type UpdateScheduledTaskInput = Partial<\n Omit<CreateScheduledTaskInput, \"id\" | \"nextRunAt\">\n> & {\n lastRunAt?: number | null;\n nextRunAt?: number | null;\n runCount?: number;\n};\n\nexport interface CreateScheduledRunInput {\n id?: string;\n taskId: string;\n cause: ScheduledRunCause;\n scheduledFor: number;\n}\n\nexport interface UpdateScheduledRunInput {\n status?: ScheduledRunStatus;\n sessionId?: string;\n runId?: string;\n summary?: string;\n error?: string;\n unread?: boolean;\n attentionReason?: string;\n startedAt?: number;\n finishedAt?: number;\n}\n\nexport interface CreateSessionInput {\n id?: string;\n parentId?: string;\n projectId?: string;\n cwd: string;\n title?: string;\n model: string;\n agent?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface UpdateSessionInput {\n title?: string;\n model?: string;\n agent?: string | null;\n metadata?: Record<string, unknown>;\n}\n\nexport interface AdmitPromptInput {\n id?: string;\n sessionId: string;\n delivery?: InputDelivery;\n items: SessionUserInputItem[];\n attachments?: AdmitPromptAttachmentInput[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface AdmitPromptAttachmentInput {\n assetId: string;\n intent?: AttachmentIntent;\n displayName?: string;\n}\n\nexport interface CreateProjectionSettlementInput {\n id?: string;\n projector: string;\n rootSessionId: string;\n eventSequence: number;\n action: ProjectionSettlementAction;\n payload: Record<string, unknown>;\n error?: string;\n}\n\nexport interface ListProjectionSettlementsOptions {\n projector?: string;\n rootSessionId?: string;\n status?: ProjectionSettlementStatus | readonly ProjectionSettlementStatus[];\n}\n\nexport interface AdmitPromptWithRunInput {\n prompt: AdmitPromptInput;\n run?: {\n id?: string;\n metadata?: Record<string, unknown>;\n };\n}\n\nexport interface CreateMessageInput {\n id?: string;\n sessionId: string;\n role: SessionMessageRole;\n runId?: string;\n inputId?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface ReplaceTranscriptPartInput {\n type: SessionMessagePartType;\n status?: SessionMessagePartStatus;\n text?: string;\n toolUseId?: string;\n toolName?: string;\n input?: Record<string, unknown>;\n output?: unknown;\n isError?: boolean;\n assetId?: string;\n intent?: AttachmentIntent;\n displayName?: string;\n mediaType?: string;\n sizeBytes?: number;\n kind?: \"direct\" | \"document_extract\" | \"tool_mount\";\n representationId?: string;\n processor?: string;\n transformationError?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface ReplaceTranscriptMessageInput {\n role: SessionMessageRole;\n parts: ReplaceTranscriptPartInput[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface ReplaceTranscriptInput {\n sessionId: string;\n messages: ReplaceTranscriptMessageInput[];\n}\n\nexport interface UpsertMessagePartInput {\n id?: string;\n sessionId: string;\n messageId: string;\n type: SessionMessagePartType;\n status?: SessionMessagePartStatus;\n text?: string;\n toolUseId?: string;\n toolName?: string;\n input?: Record<string, unknown>;\n output?: unknown;\n isError?: boolean;\n assetId?: string;\n intent?: AttachmentIntent;\n displayName?: string;\n mediaType?: string;\n sizeBytes?: number;\n kind?: \"direct\" | \"document_extract\" | \"tool_mount\";\n representationId?: string;\n processor?: string;\n transformationError?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface AppendMessagePartDeltaInput {\n sessionId: string;\n messageId: string;\n partId: string;\n field: \"text\";\n delta: string;\n}\n\nexport interface AppendEventInput {\n id?: string;\n type: string;\n sessionId?: string;\n payload?: Record<string, unknown>;\n}\n\nexport interface CreateRunInput {\n id?: string;\n sessionId: string;\n inputId?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface UpdateRunInput {\n status?: RunStatus;\n error?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface CreateRunAttemptInput {\n id?: string;\n runId: string;\n sequence?: number;\n provider?: string;\n model?: string;\n retryReason?: string;\n}\n\nexport interface UpdateRunAttemptInput {\n status?: RunAttemptStatus;\n errorKind?: string;\n error?: string;\n inputTokens?: number;\n outputTokens?: number;\n}\n\nexport interface CreateSessionTaskInput {\n id?: string;\n sessionId: string;\n childSessionId?: string;\n runId?: string;\n type: string;\n description: string;\n cwd: string;\n status?: SessionTaskStatus;\n requestNamespace?: string;\n requestId?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface UpdateSessionTaskInput {\n status?: SessionTaskStatus;\n runId?: string;\n output?: string;\n error?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface CreatePermissionRequestInput {\n id?: string;\n sessionId: string;\n runId?: string;\n toolName: string;\n payload?: Record<string, unknown>;\n}\n\nexport interface ReplyPermissionInput {\n requestId: string;\n status: Extract<PermissionStatus, \"approved\" | \"denied\" | \"expired\">;\n decision?: string;\n clientId?: string;\n}\n\nexport interface ListPermissionRequestsOptions {\n sessionId?: string;\n status?: PermissionStatus;\n toolName?: string;\n limit?: number;\n}\n\nexport interface ListEventsOptions {\n afterSeq?: number;\n sessionId?: string;\n limit?: number;\n}\n\nexport interface ListSessionsOptions {\n cwd?: string;\n includeArchived?: boolean;\n limit?: number;\n}\n\nexport interface ListMessagesOptions {\n afterSeq?: number;\n limit?: number;\n}\n\nexport interface ListMessagePartsOptions {\n afterSeq?: number;\n messageId?: string;\n limit?: number;\n}\nimport type {\n AttachmentIntent,\n SessionInputAttachmentRecord,\n} from \"./attachment.js\";\nimport type { SessionUserInputItem } from \"./session-input-items.js\";\n",
7
- "import type { SessionRecord } from \"./session.js\";\n\nexport type SessionApiFormat = \"anthropic\" | \"openai\";\n\nexport type SessionRuntimeConfig = {\n model: string;\n provider?: string;\n baseUrl?: string;\n apiFormat?: SessionApiFormat;\n permissionMode?: \"default\" | \"plan\" | \"full_auto\";\n maxTurns?: number;\n effort?: \"low\" | \"medium\" | \"high\";\n sessionMode?: \"direct\" | \"coordinator\";\n systemPrompt?: string;\n allowedTools?: string[];\n disallowedTools?: string[];\n pluginsEnabled?: boolean;\n};\n\nexport type SessionRuntimeConfigPatch = Partial<SessionRuntimeConfig>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction stringArrayValue(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const items = value.filter((item): item is string => typeof item === \"string\" && item.trim().length > 0);\n return items.length > 0 ? items : undefined;\n}\n\nfunction permissionModeValue(value: unknown): SessionRuntimeConfig[\"permissionMode\"] | undefined {\n return value === \"default\" || value === \"plan\" || value === \"full_auto\" ? value : undefined;\n}\n\nfunction effortValue(value: unknown): SessionRuntimeConfig[\"effort\"] | undefined {\n return value === \"low\" || value === \"medium\" || value === \"high\" ? value : undefined;\n}\n\nfunction sessionModeValue(value: unknown): SessionRuntimeConfig[\"sessionMode\"] | undefined {\n return value === \"coordinator\" ? \"coordinator\" : value === \"direct\" ? \"direct\" : undefined;\n}\n\nfunction apiFormatValue(value: unknown): SessionApiFormat | undefined {\n return value === \"anthropic\" || value === \"openai\" ? value : undefined;\n}\n\nfunction booleanValue(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nexport function readRuntimeMetadata(metadata: Record<string, unknown> | undefined): Record<string, unknown> {\n return isRecord(metadata?.runtime) ? metadata.runtime : {};\n}\n\nexport function readSessionRuntimeConfig(\n session: SessionRecord,\n defaults?: Partial<SessionRuntimeConfig>,\n): SessionRuntimeConfig {\n const runtime = readRuntimeMetadata(session.metadata);\n const model = stringValue(runtime.model);\n if (!model) {\n throw new Error(`Session runtime config is missing metadata.runtime.model: ${session.id}`);\n }\n return {\n model,\n ...(stringValue(runtime.provider) ?? defaults?.provider\n ? { provider: stringValue(runtime.provider) ?? defaults?.provider }\n : {}),\n ...(stringValue(runtime.baseUrl) ?? defaults?.baseUrl\n ? { baseUrl: stringValue(runtime.baseUrl) ?? defaults?.baseUrl }\n : {}),\n ...(apiFormatValue(runtime.apiFormat) ?? defaults?.apiFormat\n ? { apiFormat: apiFormatValue(runtime.apiFormat) ?? defaults?.apiFormat }\n : {}),\n ...(permissionModeValue(runtime.permissionMode) ?? defaults?.permissionMode\n ? { permissionMode: permissionModeValue(runtime.permissionMode) ?? defaults?.permissionMode }\n : {}),\n ...(numberValue(runtime.maxTurns) ?? defaults?.maxTurns\n ? { maxTurns: numberValue(runtime.maxTurns) ?? defaults?.maxTurns }\n : {}),\n ...(effortValue(runtime.effort) ?? defaults?.effort\n ? { effort: effortValue(runtime.effort) ?? defaults?.effort }\n : {}),\n ...(sessionModeValue(runtime.sessionMode) ?? defaults?.sessionMode\n ? { sessionMode: sessionModeValue(runtime.sessionMode) ?? defaults?.sessionMode }\n : {}),\n ...(stringValue(runtime.systemPrompt) ?? defaults?.systemPrompt\n ? { systemPrompt: stringValue(runtime.systemPrompt) ?? defaults?.systemPrompt }\n : {}),\n ...(stringArrayValue(runtime.allowedTools) ?? defaults?.allowedTools\n ? { allowedTools: stringArrayValue(runtime.allowedTools) ?? defaults?.allowedTools }\n : {}),\n ...(stringArrayValue(runtime.disallowedTools) ?? defaults?.disallowedTools\n ? { disallowedTools: stringArrayValue(runtime.disallowedTools) ?? defaults?.disallowedTools }\n : {}),\n ...((booleanValue(runtime.pluginsEnabled) ?? defaults?.pluginsEnabled) !== undefined\n ? { pluginsEnabled: booleanValue(runtime.pluginsEnabled) ?? defaults?.pluginsEnabled }\n : {}),\n };\n}\n\nexport function patchSessionRuntimeMetadata(\n metadata: Record<string, unknown>,\n patch: SessionRuntimeConfigPatch,\n): Record<string, unknown> {\n const runtime = {\n ...readRuntimeMetadata(metadata),\n ...stripUndefined(patch),\n };\n return {\n ...metadata,\n runtime,\n };\n}\n\nexport function runtimeMetadataChanged(\n before: Record<string, unknown>,\n after: Record<string, unknown>,\n): boolean {\n return JSON.stringify(readRuntimeMetadata(before)) !== JSON.stringify(readRuntimeMetadata(after));\n}\n\nfunction stripUndefined<T extends Record<string, unknown>>(input: T): Partial<T> {\n return Object.fromEntries(Object.entries(input).filter(([, value]) => value !== undefined)) as Partial<T>;\n}\n",
8
- "export const SESSION_INPUT_LIMITS = {\n maxItems: 256,\n maxSkills: 32,\n maxTextBytes: 1024 * 1024,\n maxNameChars: 128,\n maxDisplayNameChars: 256,\n} as const\n\nexport type SkillSource = \"bundled\" | \"user\" | \"project\" | \"plugin\"\n\nexport type SessionUserInputItem =\n | { type: \"text\"; text: string }\n | { type: \"skill\"; name: string; path: string; displayName?: string; source?: SkillSource }\n | { type: \"mention\"; name: string; path: string; displayName?: string }\n | { type: \"context\"; kind: \"conversation\"; id: string; displayName: string }\n\nconst CONTROL_CHARACTER_PATTERN = /[\\u0000-\\u001F\\u007F-\\u009F]/\nconst TEXT_CONTROL_CHARACTER_PATTERN = /[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F-\\u009F]/\n\nexport function validateSessionUserInputItems(\n items: readonly SessionUserInputItem[],\n): SessionUserInputItem[] {\n if (items.length > SESSION_INPUT_LIMITS.maxItems) throw new Error(\"item_limit_exceeded\")\n\n let skillCount = 0\n let textBytes = 0\n for (const item of items) {\n if (item.type === \"text\") {\n assertValidText(item.text)\n textBytes += new TextEncoder().encode(item.text).byteLength\n continue\n }\n\n if (item.type === \"context\") {\n if (item.kind !== \"conversation\") throw new Error(\"invalid_context_kind\")\n assertValidString(item.id, \"id\")\n assertValidString(item.displayName, \"displayName\")\n assertMaximumLength(item.id, SESSION_INPUT_LIMITS.maxNameChars, \"id\")\n assertMaximumLength(item.displayName, SESSION_INPUT_LIMITS.maxDisplayNameChars, \"displayName\")\n continue\n }\n\n assertValidString(item.name, \"name\")\n assertValidString(item.path, \"path\")\n assertMaximumLength(item.name, SESSION_INPUT_LIMITS.maxNameChars, \"name\")\n if (item.displayName !== undefined) {\n assertValidString(item.displayName, \"displayName\")\n assertMaximumLength(item.displayName, SESSION_INPUT_LIMITS.maxDisplayNameChars, \"displayName\")\n }\n if (item.type === \"skill\") {\n skillCount += 1\n if (item.source !== undefined && !isSkillSource(item.source)) throw new Error(\"invalid_skill_source\")\n }\n }\n\n if (skillCount > SESSION_INPUT_LIMITS.maxSkills) throw new Error(\"skill_item_limit_exceeded\")\n if (textBytes > SESSION_INPUT_LIMITS.maxTextBytes) throw new Error(\"text_byte_limit_exceeded\")\n return [...items]\n}\n\nexport function normalizeSessionUserInputItems(\n items: readonly SessionUserInputItem[],\n): SessionUserInputItem[] {\n const normalized: SessionUserInputItem[] = []\n for (const item of validateSessionUserInputItems(items)) {\n if (item.type !== \"text\") {\n normalized.push(item)\n } else if (item.text.length > 0) {\n const previous = normalized.at(-1)\n if (previous?.type === \"text\") previous.text += item.text\n else normalized.push({ type: \"text\", text: item.text })\n }\n }\n return normalized\n}\n\nexport function sessionUserInputText(items: readonly SessionUserInputItem[]): string {\n return normalizeSessionUserInputItems(items)\n .map((item) => item.type === \"text\" ? item.text : item.type === \"context\" ? `@${item.displayName}` : `$${item.name}`)\n .join(\"\")\n}\n\nfunction assertValidString(value: string, field: string): void {\n if (typeof value !== \"string\" || CONTROL_CHARACTER_PATTERN.test(value)) throw new Error(`invalid_${field}`)\n}\n\nfunction assertValidText(value: string): void {\n if (typeof value !== \"string\" || TEXT_CONTROL_CHARACTER_PATTERN.test(value)) throw new Error(\"invalid_text\")\n}\n\nfunction assertMaximumLength(value: string, maximum: number, field: string): void {\n if (value.length > maximum) throw new Error(`${field}_limit_exceeded`)\n}\n\nfunction isSkillSource(value: string): value is SkillSource {\n return value === \"bundled\" || value === \"user\" || value === \"project\" || value === \"plugin\"\n}\n",
9
- "import {\n patchSessionRuntimeMetadata,\n readRuntimeMetadata,\n} from \"./runtime-config.js\";\nimport type {\n AdmitPromptAttachmentInput,\n AdmitPromptInput,\n CreateScheduledTaskInput,\n CreateSessionInput,\n ReplyPermissionInput,\n ScheduledPermissionProfile,\n ScheduledStopPolicy,\n UpdateScheduledTaskInput,\n UpdateSessionInput,\n} from \"./session.js\";\nimport type { AttachmentIntent } from \"./attachment.js\";\nimport {\n normalizeSessionUserInputItems,\n type SessionUserInputItem,\n type SkillSource,\n} from \"./session-input-items.js\";\n\nexport interface ProtocolError {\n code: string;\n message: string;\n retryable?: boolean;\n details?: Record<string, unknown>;\n traceId?: string;\n}\n\nexport class ProtocolValidationError extends Error {\n readonly code = \"invalid_request\";\n readonly details?: Record<string, unknown>;\n\n constructor(message: string, field?: string) {\n super(message);\n this.name = \"ProtocolValidationError\";\n this.details = field ? { field } : undefined;\n }\n\n toProtocolError(): ProtocolError {\n return {\n code: this.code,\n message: this.message,\n ...(this.details ? { details: this.details } : {}),\n };\n }\n}\n\ntype JsonRecord = Record<string, unknown>;\n\nexport type AdmitPromptRequest = Omit<AdmitPromptInput, \"sessionId\">;\nexport type ReplyPermissionRequest = Omit<ReplyPermissionInput, \"requestId\"> & {\n decision?: \"once\" | \"session\";\n};\n\nfunction record(value: unknown): JsonRecord {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new ProtocolValidationError(\"Request body must be a JSON object\");\n }\n return value as JsonRecord;\n}\n\nfunction requiredString(body: JsonRecord, field: string): string {\n const value = body[field];\n if (typeof value !== \"string\") {\n throw new ProtocolValidationError(`${field} is required`, field);\n }\n return value;\n}\n\nfunction optionalString(body: JsonRecord, field: string): string | undefined {\n const value = body[field];\n if (value === undefined) return undefined;\n if (typeof value !== \"string\") {\n throw new ProtocolValidationError(`${field} must be a string`, field);\n }\n return value;\n}\n\nfunction optionalNumber(\n body: JsonRecord,\n field: string,\n options: { nullable?: boolean; integer?: boolean; minimum?: number } = {},\n): number | null | undefined {\n const value = body[field];\n if (value === undefined) return undefined;\n if (value === null && options.nullable) return null;\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n (options.integer && !Number.isInteger(value)) ||\n (options.minimum !== undefined && value < options.minimum)\n ) {\n throw new ProtocolValidationError(`${field} must be a valid number`, field);\n }\n return value;\n}\n\nfunction optionalBoolean(body: JsonRecord, field: string): boolean | undefined {\n const value = body[field];\n if (value === undefined) return undefined;\n if (typeof value !== \"boolean\") {\n throw new ProtocolValidationError(`${field} must be a boolean`, field);\n }\n return value;\n}\n\nfunction optionalRecord(\n body: JsonRecord,\n field: string,\n): Record<string, unknown> | undefined {\n const value = body[field];\n if (value === undefined) return undefined;\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new ProtocolValidationError(`${field} must be an object`, field);\n }\n return value as Record<string, unknown>;\n}\n\nfunction optionalStringArray(body: JsonRecord, field: string): string[] | undefined {\n const value = body[field];\n if (value === undefined) return undefined;\n if (!Array.isArray(value) || value.some((entry) => typeof entry !== \"string\")) {\n throw new ProtocolValidationError(`${field} must be an array of strings`, field);\n }\n return [...value] as string[];\n}\n\nfunction optionalEnum<const T extends readonly string[]>(\n body: JsonRecord,\n field: string,\n values: T,\n): T[number] | undefined {\n const value = body[field];\n if (value === undefined) return undefined;\n if (typeof value !== \"string\" || !values.includes(value)) {\n throw new ProtocolValidationError(\n `${field} must be one of: ${values.join(\", \")}`,\n field,\n );\n }\n return value as T[number];\n}\n\nfunction requiredEnum<const T extends readonly string[]>(\n body: JsonRecord,\n field: string,\n values: T,\n): T[number] {\n const value = optionalEnum(body, field, values);\n if (value === undefined) {\n throw new ProtocolValidationError(`${field} is required`, field);\n }\n return value;\n}\n\nexport function parseCreateSessionRequest(value: unknown): CreateSessionInput {\n const body = record(value);\n const cwd = requiredString(body, \"cwd\");\n const rawMetadata = optionalRecord(body, \"metadata\") ?? {};\n const runtime = readRuntimeMetadata(rawMetadata);\n const bodyModel = optionalString(body, \"model\");\n const model = typeof runtime.model === \"string\" ? runtime.model : bodyModel;\n if (!model) throw new ProtocolValidationError(\"model is required\", \"model\");\n const id = optionalString(body, \"id\");\n const parentId = optionalString(body, \"parentId\");\n const projectId = optionalString(body, \"projectId\");\n const title = optionalString(body, \"title\");\n const agent = optionalString(body, \"agent\");\n\n return {\n cwd,\n model,\n metadata: patchSessionRuntimeMetadata(rawMetadata, { model }),\n ...(id !== undefined ? { id } : {}),\n ...(parentId !== undefined ? { parentId } : {}),\n ...(projectId !== undefined ? { projectId } : {}),\n ...(title !== undefined ? { title } : {}),\n ...(agent !== undefined ? { agent } : {}),\n };\n}\n\nexport function parseUpdateSessionRequest(value: unknown): UpdateSessionInput {\n const body = record(value);\n if (\"model\" in body) {\n throw new ProtocolValidationError(\n \"model must be changed through metadata.runtime.model\",\n \"model\",\n );\n }\n const title = optionalString(body, \"title\");\n const metadata = optionalRecord(body, \"metadata\");\n const rawAgent = body.agent;\n if (rawAgent !== undefined && rawAgent !== null && typeof rawAgent !== \"string\") {\n throw new ProtocolValidationError(\"agent must be a string or null\", \"agent\");\n }\n return {\n ...(title !== undefined ? { title } : {}),\n ...(rawAgent !== undefined ? { agent: rawAgent as string | null } : {}),\n ...(metadata !== undefined ? { metadata } : {}),\n };\n}\n\nexport function parseAdmitPromptRequest(value: unknown): AdmitPromptRequest {\n const body = record(value);\n const id = optionalString(body, \"id\");\n const delivery = optionalEnum(body, \"delivery\", [\"queue\", \"steer\"] as const);\n const metadata = optionalRecord(body, \"metadata\");\n const attachments = parsePromptAttachments(body.attachments);\n return {\n items: parsePromptItems(body),\n attachments,\n ...(id !== undefined ? { id } : {}),\n ...(delivery !== undefined ? { delivery } : {}),\n ...(metadata !== undefined ? { metadata } : {}),\n };\n}\n\nexport function parsePromptItems(value: unknown): SessionUserInputItem[] {\n const body = record(value);\n if (body.items !== undefined) return parseSessionInputItems(body.items);\n const content = optionalString(body, \"content\");\n if (content === undefined) {\n throw new ProtocolValidationError(\"items must be an array\", \"items\");\n }\n return parseSessionInputItems([{ type: \"text\", text: content }]);\n}\n\nexport function parseSessionInputItems(value: unknown): SessionUserInputItem[] {\n if (!Array.isArray(value)) {\n throw new ProtocolValidationError(\"items must be an array\", \"items\");\n }\n const items = value.map((entry, index): SessionUserInputItem => {\n const field = `items[${index}]`;\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) {\n throw new ProtocolValidationError(`${field} must be an object`, field);\n }\n const item = entry as JsonRecord;\n if (item.type === \"text\") {\n if (typeof item.text !== \"string\") {\n throw new ProtocolValidationError(`${field}.text must be a string`, `${field}.text`);\n }\n return { type: \"text\", text: item.text };\n }\n if (item.type === \"context\") {\n if (item.kind !== \"conversation\" || typeof item.id !== \"string\" || typeof item.displayName !== \"string\") {\n throw new ProtocolValidationError(`${field} requires kind, id and displayName`, field);\n }\n return { type: \"context\", kind: \"conversation\", id: item.id, displayName: item.displayName };\n }\n if (item.type !== \"skill\" && item.type !== \"mention\") {\n throw new ProtocolValidationError(`${field}.type is invalid`, `${field}.type`);\n }\n if (typeof item.name !== \"string\" || typeof item.path !== \"string\") {\n throw new ProtocolValidationError(`${field} requires name and path`, field);\n }\n if (item.displayName !== undefined && typeof item.displayName !== \"string\") {\n throw new ProtocolValidationError(`${field}.displayName must be a string`, `${field}.displayName`);\n }\n if (item.type === \"mention\") {\n return {\n type: \"mention\",\n name: item.name,\n path: item.path,\n ...(typeof item.displayName === \"string\" ? { displayName: item.displayName } : {}),\n };\n }\n if (\n item.source !== undefined &&\n item.source !== \"bundled\" && item.source !== \"user\" && item.source !== \"project\" && item.source !== \"plugin\"\n ) {\n throw new ProtocolValidationError(`${field}.source is invalid`, `${field}.source`);\n }\n return {\n type: \"skill\",\n name: item.name,\n path: item.path,\n ...(typeof item.displayName === \"string\" ? { displayName: item.displayName } : {}),\n ...(item.source !== undefined ? { source: item.source as SkillSource } : {}),\n };\n });\n try {\n return normalizeSessionUserInputItems(items);\n } catch (error) {\n throw new ProtocolValidationError(\n error instanceof Error ? error.message : \"items are invalid\",\n \"items\",\n );\n }\n}\n\nexport function parsePromptAttachments(\n value: unknown,\n): AdmitPromptAttachmentInput[] {\n if (value === undefined) return [];\n if (!Array.isArray(value)) {\n throw new ProtocolValidationError(\"attachments must be an array\", \"attachments\");\n }\n return value.map((entry, index) => {\n const field = `attachments[${index}]`;\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) {\n throw new ProtocolValidationError(`${field} must be an object`, field);\n }\n const item = entry as JsonRecord;\n const assetId = item.assetId;\n if (typeof assetId !== \"string\" || assetId.length === 0) {\n throw new ProtocolValidationError(\n `${field}.assetId must be a non-empty string`,\n `${field}.assetId`,\n );\n }\n const intent = item.intent;\n const allowedIntents = [\n \"auto\",\n \"vision\",\n \"ocr\",\n \"document\",\n \"tool_resource\",\n \"workspace_reference\",\n ] as const satisfies readonly AttachmentIntent[];\n if (\n intent !== undefined &&\n (typeof intent !== \"string\" || !allowedIntents.includes(intent as AttachmentIntent))\n ) {\n throw new ProtocolValidationError(\n `${field}.intent must be one of: ${allowedIntents.join(\", \")}`,\n `${field}.intent`,\n );\n }\n const displayName = item.displayName;\n if (displayName !== undefined && typeof displayName !== \"string\") {\n throw new ProtocolValidationError(\n `${field}.displayName must be a string`,\n `${field}.displayName`,\n );\n }\n return {\n assetId,\n ...(intent !== undefined ? { intent: intent as AttachmentIntent } : {}),\n ...(displayName !== undefined ? { displayName } : {}),\n };\n });\n}\n\nexport function parseReplyPermissionRequest(value: unknown): ReplyPermissionRequest {\n const body = record(value);\n const status = requiredEnum(\n body,\n \"status\",\n [\"approved\", \"denied\", \"expired\"] as const,\n );\n const decision = optionalEnum(body, \"decision\", [\"once\", \"session\"] as const);\n const clientId = optionalString(body, \"clientId\");\n return {\n status,\n ...(decision !== undefined ? { decision } : {}),\n ...(clientId !== undefined ? { clientId } : {}),\n };\n}\n\nfunction parsePermissionProfile(value: unknown): ScheduledPermissionProfile {\n const body = record(value);\n const mode = requiredEnum(\n body,\n \"mode\",\n [\"read_only\", \"workspace_write\", \"full_access\"] as const,\n );\n const network = optionalBoolean(body, \"network\");\n const allowedTools = optionalStringArray(body, \"allowedTools\");\n const deniedTools = optionalStringArray(body, \"deniedTools\");\n return {\n mode,\n ...(network !== undefined ? { network } : {}),\n ...(allowedTools !== undefined ? { allowedTools } : {}),\n ...(deniedTools !== undefined ? { deniedTools } : {}),\n };\n}\n\nfunction parseStopPolicy(value: unknown): ScheduledStopPolicy {\n const body = record(value);\n const runOnce = optionalBoolean(body, \"runOnce\");\n const maxRuns = optionalNumber(body, \"maxRuns\", { integer: true, minimum: 1 });\n const stopWhenCompleted = optionalBoolean(body, \"stopWhenCompleted\");\n const expiresAt = optionalNumber(body, \"expiresAt\");\n return {\n ...(runOnce !== undefined ? { runOnce } : {}),\n ...(maxRuns !== undefined ? { maxRuns: maxRuns as number } : {}),\n ...(stopWhenCompleted !== undefined ? { stopWhenCompleted } : {}),\n ...(expiresAt !== undefined ? { expiresAt: expiresAt as number } : {}),\n };\n}\n\nfunction parseScheduleFields(body: JsonRecord): Partial<CreateScheduledTaskInput> {\n const id = optionalString(body, \"id\");\n const name = optionalString(body, \"name\");\n const description = optionalString(body, \"description\");\n const prompt = optionalString(body, \"prompt\");\n const recurrence = optionalString(body, \"recurrence\");\n const recurrenceFormat = optionalEnum(\n body,\n \"recurrenceFormat\",\n [\"rrule\", \"once\"] as const,\n );\n const timezone = optionalString(body, \"timezone\");\n const status = optionalEnum(\n body,\n \"status\",\n [\"active\", \"paused\", \"completed\"] as const,\n );\n const destination = optionalEnum(\n body,\n \"destination\",\n [\"standalone\", \"chat\"] as const,\n );\n const sessionId = optionalString(body, \"sessionId\");\n const projectPaths = optionalStringArray(body, \"projectPaths\");\n const executionMode = optionalEnum(\n body,\n \"executionMode\",\n [\"local\", \"worktree\"] as const,\n );\n const model = optionalString(body, \"model\");\n const effort = optionalString(body, \"effort\");\n const skillNames = optionalStringArray(body, \"skillNames\");\n const pluginNames = optionalStringArray(body, \"pluginNames\");\n const permissionProfile = body.permissionProfile === undefined\n ? undefined\n : parsePermissionProfile(body.permissionProfile);\n const overlapPolicy = optionalEnum(\n body,\n \"overlapPolicy\",\n [\"skip\", \"queue\"] as const,\n );\n const missedRunPolicy = optionalEnum(\n body,\n \"missedRunPolicy\",\n [\"skip\", \"run_once\"] as const,\n );\n const stopPolicy = body.stopPolicy === undefined\n ? undefined\n : parseStopPolicy(body.stopPolicy);\n const createdBy = optionalEnum(\n body,\n \"createdBy\",\n [\"user\", \"agent\", \"migration\"] as const,\n );\n const createdFromSessionId = optionalString(body, \"createdFromSessionId\");\n return {\n ...(id !== undefined ? { id } : {}),\n ...(name !== undefined ? { name } : {}),\n ...(description !== undefined ? { description } : {}),\n ...(prompt !== undefined ? { prompt } : {}),\n ...(recurrence !== undefined ? { recurrence } : {}),\n ...(recurrenceFormat !== undefined ? { recurrenceFormat } : {}),\n ...(timezone !== undefined ? { timezone } : {}),\n ...(status !== undefined ? { status } : {}),\n ...(destination !== undefined ? { destination } : {}),\n ...(sessionId !== undefined ? { sessionId } : {}),\n ...(projectPaths !== undefined ? { projectPaths } : {}),\n ...(executionMode !== undefined ? { executionMode } : {}),\n ...(model !== undefined ? { model } : {}),\n ...(effort !== undefined ? { effort } : {}),\n ...(skillNames !== undefined ? { skillNames } : {}),\n ...(pluginNames !== undefined ? { pluginNames } : {}),\n ...(permissionProfile !== undefined ? { permissionProfile } : {}),\n ...(overlapPolicy !== undefined ? { overlapPolicy } : {}),\n ...(missedRunPolicy !== undefined ? { missedRunPolicy } : {}),\n ...(stopPolicy !== undefined ? { stopPolicy } : {}),\n ...(createdBy !== undefined ? { createdBy } : {}),\n ...(createdFromSessionId !== undefined ? { createdFromSessionId } : {}),\n };\n}\n\nexport function parseCreateScheduledTaskRequest(value: unknown): CreateScheduledTaskInput {\n const body = record(value);\n const parsed = parseScheduleFields(body);\n const nextRunAt = optionalNumber(body, \"nextRunAt\");\n return {\n ...parsed,\n name: requiredString(body, \"name\"),\n prompt: requiredString(body, \"prompt\"),\n recurrence: requiredString(body, \"recurrence\"),\n recurrenceFormat: requiredEnum(body, \"recurrenceFormat\", [\"rrule\", \"once\"] as const),\n timezone: requiredString(body, \"timezone\"),\n destination: requiredEnum(body, \"destination\", [\"standalone\", \"chat\"] as const),\n ...(nextRunAt !== undefined ? { nextRunAt: nextRunAt as number } : {}),\n };\n}\n\nexport function parseUpdateScheduledTaskRequest(value: unknown): UpdateScheduledTaskInput {\n const body = record(value);\n if (\"id\" in body) {\n throw new ProtocolValidationError(\"id cannot be changed\", \"id\");\n }\n const parsed = parseScheduleFields(body);\n const lastRunAt = optionalNumber(body, \"lastRunAt\", { nullable: true });\n const nextRunAt = optionalNumber(body, \"nextRunAt\", { nullable: true });\n const runCount = optionalNumber(body, \"runCount\", { integer: true, minimum: 0 });\n const { id: _id, ...patch } = parsed;\n return {\n ...patch,\n ...(lastRunAt !== undefined ? { lastRunAt: lastRunAt as number | null } : {}),\n ...(nextRunAt !== undefined ? { nextRunAt: nextRunAt as number | null } : {}),\n ...(runCount !== undefined ? { runCount: runCount as number } : {}),\n };\n}\n",
6
+ "/**\n * `closing` 表示 Session 正在停止当前工作并等待资源释放,此时不再接收新工作。\n * 等待结束后,Session 会进入不可逆的 archived 状态。\n */\nexport type SessionStatus =\n \"idle\" | \"running\" | \"closing\" | \"archived\" | \"error\";\nexport type InputDelivery = \"queue\" | \"steer\";\nexport type RunStatus =\n \"pending\" | \"running\" | \"completed\" | \"failed\" | \"interrupted\";\nexport type RunAttemptStatus = \"pending\" | \"running\" | \"completed\" | \"failed\" | \"cancelled\";\nexport type SessionTaskStatus =\n \"pending\" | \"running\" | \"completed\" | \"failed\" | \"stopped\" | \"interrupted\";\nexport type PermissionStatus = \"pending\" | \"approved\" | \"denied\" | \"expired\";\nexport type SessionMessageRole = \"system\" | \"user\" | \"assistant\";\nexport type SessionMessagePartType =\n | \"text\"\n | \"attachment\"\n | \"transformation\"\n | \"reasoning\"\n | \"tool\"\n | \"tool_result\"\n | \"error\"\n | \"log\";\nexport type SessionMessagePartStatus =\n \"pending\" | \"running\" | \"completed\" | \"failed\" | \"interrupted\";\nexport type ProjectionSettlementAction = \"retry-terminal-projection\" | \"compensate-child\";\nexport type ProjectionSettlementStatus = \"pending\" | \"retrying\" | \"resolved\" | \"abandoned\";\n\n/** Default durable session-event schema version for types without an override. */\nexport const SESSION_EVENT_SCHEMA_VERSION = 1;\n\n/**\n * Per-event payload schema versions written by the durable event registry.\n * Unlisted types use {@link SESSION_EVENT_SCHEMA_VERSION}.\n */\nexport const SESSION_EVENT_SCHEMA_VERSIONS: Readonly<Record<string, number>> = {\n \"session.input.admitted\": 2,\n};\n\nexport function sessionEventSchemaVersion(type: string): number {\n return SESSION_EVENT_SCHEMA_VERSIONS[type] ?? SESSION_EVENT_SCHEMA_VERSION;\n}\n\nexport interface SessionRecord {\n id: string;\n parentId?: string;\n projectId?: string;\n cwd: string;\n cwdRelative?: string;\n title: string;\n model: string;\n agent?: string;\n status: SessionStatus;\n metadata: Record<string, unknown>;\n createdAt: number;\n updatedAt: number;\n archivedAt?: number;\n}\n\nexport interface ProjectRecord {\n id: string;\n name: string;\n path: string;\n pinnedAt?: number;\n defaultShell?: string;\n lastOpenedAt: number;\n archivedAt?: number;\n createdAt: number;\n updatedAt: number;\n}\n\nexport interface ProjectLocationRecord {\n id: string;\n projectId: string;\n path: string;\n normalizedPath: string;\n status: \"active\" | \"historical\";\n boundAt: number;\n lastVerifiedAt?: number;\n}\n\nexport interface SessionInputRecord {\n id: string;\n sessionId: string;\n seq: number;\n delivery: InputDelivery;\n items: SessionUserInputItem[];\n content: string;\n attachments: SessionInputAttachmentRecord[];\n promotedMessageId?: string;\n metadata: Record<string, unknown>;\n createdAt: number;\n}\n\nexport interface SessionMessageRecord {\n id: string;\n sessionId: string;\n seq: number;\n role: SessionMessageRole;\n runId?: string;\n inputId?: string;\n metadata: Record<string, unknown>;\n createdAt: number;\n updatedAt: number;\n}\n\nexport interface SessionMessagePartRecord {\n id: string;\n sessionId: string;\n messageId: string;\n seq: number;\n type: SessionMessagePartType;\n status: SessionMessagePartStatus;\n text?: string;\n toolUseId?: string;\n toolName?: string;\n input?: Record<string, unknown>;\n output?: unknown;\n isError?: boolean;\n assetId?: string;\n intent?: AttachmentIntent;\n displayName?: string;\n mediaType?: string;\n sizeBytes?: number;\n kind?: \"direct\" | \"document_extract\" | \"tool_mount\";\n representationId?: string;\n processor?: string;\n transformationError?: string;\n metadata: Record<string, unknown>;\n createdAt: number;\n updatedAt: number;\n}\n\nexport interface SessionEventRecord {\n id: string;\n seq: number;\n type: string;\n schemaVersion: number;\n sessionId?: string;\n payload: Record<string, unknown>;\n createdAt: number;\n}\n\nexport interface SessionAttachmentMessagePartRecord\n extends SessionMessagePartRecord {\n type: \"attachment\";\n assetId: string;\n intent: AttachmentIntent;\n displayName: string;\n mediaType: string;\n sizeBytes: number;\n}\n\nexport interface SessionTransformationMessagePartRecord\n extends SessionMessagePartRecord {\n type: \"transformation\";\n assetId: string;\n kind: \"direct\" | \"document_extract\" | \"tool_mount\";\n representationId?: string;\n processor?: string;\n transformationError?: string;\n}\n\nexport interface ProjectionSettlementRecord {\n id: string;\n projector: string;\n rootSessionId: string;\n eventSequence: number;\n action: ProjectionSettlementAction;\n payload: Record<string, unknown>;\n status: ProjectionSettlementStatus;\n attemptCount: number;\n lastError?: string;\n nextRetryAt?: number;\n createdAt: number;\n updatedAt: number;\n resolvedAt?: number;\n}\n\nexport interface SessionRunRecord {\n id: string;\n sessionId: string;\n inputId?: string;\n status: RunStatus;\n startedAt?: number;\n finishedAt?: number;\n error?: string;\n metadata: Record<string, unknown>;\n createdAt: number;\n updatedAt: number;\n}\n\nexport interface SessionRunAttemptRecord {\n id: string;\n runId: string;\n sequence: number;\n status: RunAttemptStatus;\n provider?: string;\n model?: string;\n retryReason?: string;\n errorKind?: string;\n error?: string;\n inputTokens?: number;\n outputTokens?: number;\n startedAt?: number;\n finishedAt?: number;\n createdAt: number;\n updatedAt: number;\n}\n\n/** Daemon-owned execution projection. Live handles stay in their backend runtime and are never persisted. */\nexport interface SessionExecutionRecord {\n id: string;\n sessionId: string;\n /** Producer namespace plus requestId uniquely identify one logical admission. */\n requestNamespace?: string;\n requestId?: string;\n childSessionId?: string;\n runId?: string;\n type: string;\n status: SessionTaskStatus;\n description: string;\n cwd: string;\n output?: string;\n error?: string;\n metadata: Record<string, unknown>;\n createdAt: number;\n startedAt?: number;\n finishedAt?: number;\n updatedAt: number;\n}\n\nexport interface PermissionRequestRecord {\n id: string;\n sessionId: string;\n runId?: string;\n toolName: string;\n payload: Record<string, unknown>;\n status: PermissionStatus;\n decision?: string;\n decidedByClientId?: string;\n createdAt: number;\n updatedAt: number;\n}\n\n/** Atomic, server-owned state used when a client attaches to one session. */\nexport interface SessionStateSnapshot {\n cursor: number;\n session: SessionRecord;\n inputs: SessionInputRecord[];\n messages: SessionMessageRecord[];\n parts: SessionMessagePartRecord[];\n runs: SessionRunRecord[];\n attempts: SessionRunAttemptRecord[];\n tasks?: SessionExecutionRecord[];\n permissions: PermissionRequestRecord[];\n}\n\nexport type ScheduledTaskStatus = \"active\" | \"paused\" | \"completed\";\nexport type ScheduledTaskDestination = \"standalone\" | \"chat\";\nexport type ScheduledTaskExecutionMode = \"local\" | \"worktree\";\nexport type ScheduledRecurrenceFormat = \"rrule\" | \"once\";\nexport type ScheduledOverlapPolicy = \"skip\" | \"queue\";\nexport type ScheduledMissedRunPolicy = \"skip\" | \"run_once\";\n\nexport interface ScheduledPermissionProfile {\n mode: \"read_only\" | \"workspace_write\" | \"full_access\";\n network?: boolean;\n allowedTools?: string[];\n deniedTools?: string[];\n}\n\nexport interface ScheduledStopPolicy {\n runOnce?: boolean;\n maxRuns?: number;\n stopWhenCompleted?: boolean;\n expiresAt?: number;\n}\n\nexport interface ScheduledTaskRecord {\n id: string;\n name: string;\n description?: string;\n prompt: string;\n recurrence: string;\n recurrenceFormat: ScheduledRecurrenceFormat;\n timezone: string;\n status: ScheduledTaskStatus;\n destination: ScheduledTaskDestination;\n sessionId?: string;\n projectPaths: string[];\n executionMode: ScheduledTaskExecutionMode;\n model?: string;\n effort?: string;\n skillNames: string[];\n pluginNames: string[];\n permissionProfile: ScheduledPermissionProfile;\n overlapPolicy: ScheduledOverlapPolicy;\n missedRunPolicy: ScheduledMissedRunPolicy;\n stopPolicy?: ScheduledStopPolicy;\n createdBy: \"user\" | \"agent\";\n createdFromSessionId?: string;\n lastRunAt?: number;\n nextRunAt?: number;\n runCount: number;\n createdAt: number;\n updatedAt: number;\n}\n\nexport type ScheduledRunCause = \"scheduled\" | \"manual\" | \"missed_run\";\nexport type ScheduledRunStatus =\n | \"queued\"\n | \"running\"\n | \"succeeded\"\n | \"failed\"\n | \"interrupted\"\n | \"needs_attention\"\n | \"skipped\";\n\nexport interface ScheduledRunRecord {\n id: string;\n taskId: string;\n cause: ScheduledRunCause;\n status: ScheduledRunStatus;\n scheduledFor: number;\n sessionId?: string;\n runId?: string;\n summary?: string;\n error?: string;\n unread: boolean;\n attentionReason?: string;\n createdAt: number;\n startedAt?: number;\n finishedAt?: number;\n updatedAt: number;\n}\n\nexport interface CreateScheduledTaskInput {\n id?: string;\n name: string;\n description?: string;\n prompt: string;\n recurrence: string;\n recurrenceFormat: ScheduledRecurrenceFormat;\n timezone: string;\n status?: ScheduledTaskStatus;\n destination: ScheduledTaskDestination;\n sessionId?: string;\n projectPaths?: string[];\n executionMode?: ScheduledTaskExecutionMode;\n model?: string;\n effort?: string;\n skillNames?: string[];\n pluginNames?: string[];\n permissionProfile?: ScheduledPermissionProfile;\n overlapPolicy?: ScheduledOverlapPolicy;\n missedRunPolicy?: ScheduledMissedRunPolicy;\n stopPolicy?: ScheduledStopPolicy;\n createdBy?: ScheduledTaskRecord[\"createdBy\"];\n createdFromSessionId?: string;\n nextRunAt?: number;\n}\n\nexport type UpdateScheduledTaskInput = Partial<\n Omit<CreateScheduledTaskInput, \"id\" | \"nextRunAt\">\n> & {\n lastRunAt?: number | null;\n nextRunAt?: number | null;\n runCount?: number;\n};\n\nexport interface CreateScheduledRunInput {\n id?: string;\n taskId: string;\n cause: ScheduledRunCause;\n scheduledFor: number;\n}\n\nexport interface UpdateScheduledRunInput {\n status?: ScheduledRunStatus;\n sessionId?: string;\n runId?: string;\n summary?: string;\n error?: string;\n unread?: boolean;\n attentionReason?: string;\n startedAt?: number;\n finishedAt?: number;\n}\n\nexport interface CreateSessionInput {\n id?: string;\n parentId?: string;\n projectId?: string;\n cwd: string;\n title?: string;\n model: string;\n agent?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface UpdateSessionInput {\n title?: string;\n model?: string;\n agent?: string | null;\n metadata?: Record<string, unknown>;\n}\n\nexport interface AdmitPromptInput {\n id?: string;\n sessionId: string;\n delivery?: InputDelivery;\n items: SessionUserInputItem[];\n attachments?: AdmitPromptAttachmentInput[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface AdmitPromptAttachmentInput {\n assetId: string;\n intent?: AttachmentIntent;\n displayName?: string;\n}\n\nexport interface CreateProjectionSettlementInput {\n id?: string;\n projector: string;\n rootSessionId: string;\n eventSequence: number;\n action: ProjectionSettlementAction;\n payload: Record<string, unknown>;\n error?: string;\n}\n\nexport interface ListProjectionSettlementsOptions {\n projector?: string;\n rootSessionId?: string;\n status?: ProjectionSettlementStatus | readonly ProjectionSettlementStatus[];\n}\n\nexport interface AdmitPromptWithRunInput {\n prompt: AdmitPromptInput;\n run?: {\n id?: string;\n metadata?: Record<string, unknown>;\n };\n}\n\nexport interface CreateMessageInput {\n id?: string;\n sessionId: string;\n role: SessionMessageRole;\n runId?: string;\n inputId?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface ReplaceTranscriptPartInput {\n type: SessionMessagePartType;\n status?: SessionMessagePartStatus;\n text?: string;\n toolUseId?: string;\n toolName?: string;\n input?: Record<string, unknown>;\n output?: unknown;\n isError?: boolean;\n assetId?: string;\n intent?: AttachmentIntent;\n displayName?: string;\n mediaType?: string;\n sizeBytes?: number;\n kind?: \"direct\" | \"document_extract\" | \"tool_mount\";\n representationId?: string;\n processor?: string;\n transformationError?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface ReplaceTranscriptMessageInput {\n role: SessionMessageRole;\n parts: ReplaceTranscriptPartInput[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface ReplaceTranscriptInput {\n sessionId: string;\n messages: ReplaceTranscriptMessageInput[];\n}\n\nexport interface UpsertMessagePartInput {\n id?: string;\n sessionId: string;\n messageId: string;\n type: SessionMessagePartType;\n status?: SessionMessagePartStatus;\n text?: string;\n toolUseId?: string;\n toolName?: string;\n input?: Record<string, unknown>;\n output?: unknown;\n isError?: boolean;\n assetId?: string;\n intent?: AttachmentIntent;\n displayName?: string;\n mediaType?: string;\n sizeBytes?: number;\n kind?: \"direct\" | \"document_extract\" | \"tool_mount\";\n representationId?: string;\n processor?: string;\n transformationError?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface AppendMessagePartDeltaInput {\n sessionId: string;\n messageId: string;\n partId: string;\n field: \"text\";\n delta: string;\n}\n\nexport interface AppendEventInput {\n id?: string;\n type: string;\n sessionId?: string;\n payload?: Record<string, unknown>;\n}\n\nexport interface CreateRunInput {\n id?: string;\n sessionId: string;\n inputId?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface UpdateRunInput {\n status?: RunStatus;\n error?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface CreateRunAttemptInput {\n id?: string;\n runId: string;\n sequence?: number;\n provider?: string;\n model?: string;\n retryReason?: string;\n}\n\nexport interface UpdateRunAttemptInput {\n status?: RunAttemptStatus;\n errorKind?: string;\n error?: string;\n inputTokens?: number;\n outputTokens?: number;\n}\n\nexport interface CreateSessionTaskInput {\n id?: string;\n sessionId: string;\n childSessionId?: string;\n runId?: string;\n type: string;\n description: string;\n cwd: string;\n status?: SessionTaskStatus;\n requestNamespace?: string;\n requestId?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface UpdateSessionTaskInput {\n status?: SessionTaskStatus;\n runId?: string;\n output?: string;\n error?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface CreatePermissionRequestInput {\n id?: string;\n sessionId: string;\n runId?: string;\n toolName: string;\n payload?: Record<string, unknown>;\n}\n\nexport interface ReplyPermissionInput {\n requestId: string;\n status: Extract<PermissionStatus, \"approved\" | \"denied\" | \"expired\">;\n decision?: string;\n clientId?: string;\n}\n\nexport interface ListPermissionRequestsOptions {\n sessionId?: string;\n status?: PermissionStatus;\n toolName?: string;\n limit?: number;\n}\n\nexport interface ListEventsOptions {\n afterSeq?: number;\n sessionId?: string;\n limit?: number;\n}\n\nexport interface ListSessionsOptions {\n cwd?: string;\n includeArchived?: boolean;\n limit?: number;\n}\n\nexport interface ListMessagesOptions {\n afterSeq?: number;\n limit?: number;\n}\n\nexport interface ListMessagePartsOptions {\n afterSeq?: number;\n messageId?: string;\n limit?: number;\n}\nimport type {\n AttachmentIntent,\n SessionInputAttachmentRecord,\n} from \"./attachment.js\";\nimport type { SessionUserInputItem } from \"./session-input-items.js\";\n",
10
7
  "import type {\n PermissionRequestRecord,\n SessionEventRecord,\n SessionExecutionRecord,\n SessionInputRecord,\n SessionMessagePartRecord,\n SessionMessageRecord,\n SessionRunAttemptRecord,\n SessionRunRecord,\n SessionStateSnapshot,\n} from \"./session.js\";\nimport type { AttachmentIntent } from \"./attachment.js\";\nimport type { JobReadResult, JobSnapshot, JobWaitResult } from \"./job.js\";\nimport type {\n TerminalEvent,\n TerminalReadResult,\n TerminalSessionInfo,\n TerminalWaitResult,\n} from \"./terminal.js\";\nimport type { ProtocolError } from \"./requests.js\";\n\nexport class ProtocolDataError extends Error {\n readonly code = \"invalid_protocol_data\";\n readonly details?: Record<string, unknown>;\n\n constructor(message: string, path?: string) {\n super(message);\n this.name = \"ProtocolDataError\";\n this.details = path ? { path } : undefined;\n }\n\n toProtocolError(): ProtocolError {\n return {\n code: this.code,\n message: this.message,\n ...(this.details ? { details: this.details } : {}),\n };\n }\n}\n\ntype DataRecord = Record<string, unknown>;\ntype Validator<T> = (value: unknown, path: string) => T;\n\nfunction parseJson(text: string): unknown {\n try {\n return JSON.parse(text) as unknown;\n } catch {\n throw new ProtocolDataError(\"Protocol data must be valid JSON\");\n }\n}\n\nfunction object(value: unknown, path: string): DataRecord {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new ProtocolDataError(`${path} must be an object`, path);\n }\n return value as DataRecord;\n}\n\nfunction stringField(value: DataRecord, field: string, path: string): string {\n const fieldPath = `${path}.${field}`;\n if (typeof value[field] !== \"string\") {\n throw new ProtocolDataError(`${fieldPath} must be a string`, fieldPath);\n }\n return value[field] as string;\n}\n\nfunction optionalString(value: DataRecord, field: string, path: string): void {\n const fieldValue = value[field];\n if (fieldValue !== undefined && typeof fieldValue !== \"string\") {\n const fieldPath = `${path}.${field}`;\n throw new ProtocolDataError(`${fieldPath} must be a string`, fieldPath);\n }\n}\n\nfunction numberField(value: DataRecord, field: string, path: string): number {\n const fieldPath = `${path}.${field}`;\n const fieldValue = value[field];\n if (typeof fieldValue !== \"number\" || !Number.isFinite(fieldValue)) {\n throw new ProtocolDataError(`${fieldPath} must be a finite number`, fieldPath);\n }\n return fieldValue;\n}\n\nfunction optionalNumber(\n value: DataRecord,\n field: string,\n path: string,\n nullable = false,\n): void {\n const fieldValue = value[field];\n if (fieldValue === undefined || (nullable && fieldValue === null)) return;\n if (typeof fieldValue !== \"number\" || !Number.isFinite(fieldValue)) {\n const fieldPath = `${path}.${field}`;\n throw new ProtocolDataError(`${fieldPath} must be a finite number`, fieldPath);\n }\n}\n\nfunction booleanField(value: DataRecord, field: string, path: string): boolean {\n const fieldPath = `${path}.${field}`;\n if (typeof value[field] !== \"boolean\") {\n throw new ProtocolDataError(`${fieldPath} must be a boolean`, fieldPath);\n }\n return value[field] as boolean;\n}\n\nfunction recordField(value: DataRecord, field: string, path: string): DataRecord {\n return object(value[field], `${path}.${field}`);\n}\n\nfunction optionalRecord(value: DataRecord, field: string, path: string): void {\n if (value[field] !== undefined) object(value[field], `${path}.${field}`);\n}\n\nfunction enumField<const T extends readonly string[]>(\n value: DataRecord,\n field: string,\n path: string,\n allowed: T,\n): T[number] {\n const fieldPath = `${path}.${field}`;\n const fieldValue = value[field];\n if (typeof fieldValue !== \"string\" || !allowed.includes(fieldValue)) {\n throw new ProtocolDataError(\n `${fieldPath} must be one of: ${allowed.join(\", \")}`,\n fieldPath,\n );\n }\n return fieldValue as T[number];\n}\n\nfunction arrayField<T>(\n value: DataRecord,\n field: string,\n path: string,\n validate: Validator<T>,\n): T[] {\n const fieldPath = `${path}.${field}`;\n const items = value[field];\n if (!Array.isArray(items)) {\n throw new ProtocolDataError(`${fieldPath} must be an array`, fieldPath);\n }\n return items.map((item, index) => validate(item, `${fieldPath}[${index}]`));\n}\n\nfunction validateSession(value: unknown, path: string) {\n const item = object(value, path);\n stringField(item, \"id\", path);\n stringField(item, \"cwd\", path);\n stringField(item, \"title\", path);\n stringField(item, \"model\", path);\n enumField(item, \"status\", path, [\"idle\", \"running\", \"closing\", \"archived\", \"error\"] as const);\n recordField(item, \"metadata\", path);\n numberField(item, \"createdAt\", path);\n numberField(item, \"updatedAt\", path);\n for (const field of [\"parentId\", \"projectId\", \"cwdRelative\", \"agent\"] as const) {\n optionalString(item, field, path);\n }\n optionalNumber(item, \"archivedAt\", path);\n return item;\n}\n\nfunction validateInput(value: unknown, path: string): SessionInputRecord {\n const item = object(value, path);\n stringField(item, \"id\", path);\n stringField(item, \"sessionId\", path);\n numberField(item, \"seq\", path);\n enumField(item, \"delivery\", path, [\"queue\", \"steer\"] as const);\n stringField(item, \"content\", path);\n const attachments = arrayField(item, \"attachments\", path, validateInputAttachment);\n const assetIds = new Set<string>();\n for (const [index, attachment] of attachments.entries()) {\n const attachmentPath = `${path}.attachments[${index}]`;\n if (attachment.sessionId !== item.sessionId) {\n throw new ProtocolDataError(\n `${attachmentPath}.sessionId must match ${path}.sessionId`,\n `${attachmentPath}.sessionId`,\n );\n }\n if (attachment.inputId !== item.id) {\n throw new ProtocolDataError(\n `${attachmentPath}.inputId must match ${path}.id`,\n `${attachmentPath}.inputId`,\n );\n }\n if (attachment.seq !== index) {\n throw new ProtocolDataError(\n `${attachmentPath}.seq must equal its array index`,\n `${attachmentPath}.seq`,\n );\n }\n if (assetIds.has(attachment.assetId)) {\n throw new ProtocolDataError(\n `${attachmentPath}.assetId must be unique within the input`,\n `${attachmentPath}.assetId`,\n );\n }\n assetIds.add(attachment.assetId);\n }\n optionalString(item, \"promotedMessageId\", path);\n recordField(item, \"metadata\", path);\n numberField(item, \"createdAt\", path);\n return item as unknown as SessionInputRecord;\n}\n\nfunction validateInputAttachment(value: unknown, path: string) {\n const item = object(value, path);\n for (const field of [\"id\", \"sessionId\", \"inputId\", \"assetId\", \"displayName\", \"mediaType\"] as const) {\n stringField(item, field, path);\n }\n numberField(item, \"seq\", path);\n enumField(item, \"intent\", path, [\n \"auto\",\n \"vision\",\n \"ocr\",\n \"document\",\n \"tool_resource\",\n \"workspace_reference\",\n ] as const satisfies readonly AttachmentIntent[]);\n numberField(item, \"sizeBytes\", path);\n recordField(item, \"metadata\", path);\n numberField(item, \"createdAt\", path);\n return item as unknown as SessionInputRecord[\"attachments\"][number];\n}\n\nfunction validateMessage(value: unknown, path: string): SessionMessageRecord {\n const item = object(value, path);\n stringField(item, \"id\", path);\n stringField(item, \"sessionId\", path);\n numberField(item, \"seq\", path);\n enumField(item, \"role\", path, [\"system\", \"user\", \"assistant\"] as const);\n optionalString(item, \"runId\", path);\n optionalString(item, \"inputId\", path);\n recordField(item, \"metadata\", path);\n numberField(item, \"createdAt\", path);\n numberField(item, \"updatedAt\", path);\n return item as unknown as SessionMessageRecord;\n}\n\nfunction validatePart(value: unknown, path: string): SessionMessagePartRecord {\n const item = object(value, path);\n stringField(item, \"id\", path);\n stringField(item, \"sessionId\", path);\n stringField(item, \"messageId\", path);\n numberField(item, \"seq\", path);\n const type = enumField(item, \"type\", path, [\n \"text\",\n \"attachment\",\n \"transformation\",\n \"reasoning\",\n \"tool\",\n \"tool_result\",\n \"error\",\n \"log\",\n ] as const);\n enumField(item, \"status\", path, [\"pending\", \"running\", \"completed\", \"failed\", \"interrupted\"] as const);\n for (const field of [\"text\", \"toolUseId\", \"toolName\"] as const) optionalString(item, field, path);\n optionalRecord(item, \"input\", path);\n if (item.isError !== undefined && typeof item.isError !== \"boolean\") {\n throw new ProtocolDataError(`${path}.isError must be a boolean`, `${path}.isError`);\n }\n if (type === \"attachment\") {\n for (const field of [\"assetId\", \"displayName\", \"mediaType\"] as const) {\n stringField(item, field, path);\n }\n enumField(item, \"intent\", path, [\n \"auto\",\n \"vision\",\n \"ocr\",\n \"document\",\n \"tool_resource\",\n \"workspace_reference\",\n ] as const);\n numberField(item, \"sizeBytes\", path);\n }\n if (type === \"transformation\") {\n stringField(item, \"assetId\", path);\n enumField(item, \"kind\", path, [\"direct\", \"document_extract\", \"tool_mount\"] as const);\n for (const field of [\"representationId\", \"processor\", \"transformationError\"] as const) {\n optionalString(item, field, path);\n }\n }\n recordField(item, \"metadata\", path);\n numberField(item, \"createdAt\", path);\n numberField(item, \"updatedAt\", path);\n return item as unknown as SessionMessagePartRecord;\n}\n\nfunction validateRun(value: unknown, path: string): SessionRunRecord {\n const item = object(value, path);\n stringField(item, \"id\", path);\n stringField(item, \"sessionId\", path);\n optionalString(item, \"inputId\", path);\n enumField(item, \"status\", path, [\"pending\", \"running\", \"completed\", \"failed\", \"interrupted\"] as const);\n optionalNumber(item, \"startedAt\", path);\n optionalNumber(item, \"finishedAt\", path);\n optionalString(item, \"error\", path);\n recordField(item, \"metadata\", path);\n numberField(item, \"createdAt\", path);\n numberField(item, \"updatedAt\", path);\n return item as unknown as SessionRunRecord;\n}\n\nfunction validateAttempt(value: unknown, path: string): SessionRunAttemptRecord {\n const item = object(value, path);\n stringField(item, \"id\", path);\n stringField(item, \"runId\", path);\n numberField(item, \"sequence\", path);\n enumField(item, \"status\", path, [\"pending\", \"running\", \"completed\", \"failed\", \"cancelled\"] as const);\n for (const field of [\"provider\", \"model\", \"retryReason\", \"errorKind\", \"error\"] as const) {\n optionalString(item, field, path);\n }\n for (const field of [\"inputTokens\", \"outputTokens\", \"startedAt\", \"finishedAt\"] as const) {\n optionalNumber(item, field, path);\n }\n numberField(item, \"createdAt\", path);\n numberField(item, \"updatedAt\", path);\n return item as unknown as SessionRunAttemptRecord;\n}\n\nfunction validateTask(value: unknown, path: string): SessionExecutionRecord {\n const item = object(value, path);\n for (const field of [\"id\", \"sessionId\", \"type\", \"description\", \"cwd\"] as const) {\n stringField(item, field, path);\n }\n for (const field of [\"childSessionId\", \"runId\", \"requestNamespace\", \"requestId\", \"output\", \"error\"] as const) {\n optionalString(item, field, path);\n }\n enumField(item, \"status\", path, [\"pending\", \"running\", \"completed\", \"failed\", \"stopped\", \"interrupted\"] as const);\n recordField(item, \"metadata\", path);\n numberField(item, \"createdAt\", path);\n optionalNumber(item, \"startedAt\", path);\n optionalNumber(item, \"finishedAt\", path);\n numberField(item, \"updatedAt\", path);\n return item as unknown as SessionExecutionRecord;\n}\n\nfunction validatePermission(value: unknown, path: string): PermissionRequestRecord {\n const item = object(value, path);\n for (const field of [\"id\", \"sessionId\", \"toolName\"] as const) stringField(item, field, path);\n optionalString(item, \"runId\", path);\n recordField(item, \"payload\", path);\n enumField(item, \"status\", path, [\"pending\", \"approved\", \"denied\", \"expired\"] as const);\n optionalString(item, \"decision\", path);\n optionalString(item, \"decidedByClientId\", path);\n numberField(item, \"createdAt\", path);\n numberField(item, \"updatedAt\", path);\n return item as unknown as PermissionRequestRecord;\n}\n\nexport function decodeSessionEventRecord(value: unknown): SessionEventRecord {\n const event = object(value, \"event\");\n stringField(event, \"id\", \"event\");\n numberField(event, \"seq\", \"event\");\n stringField(event, \"type\", \"event\");\n numberField(event, \"schemaVersion\", \"event\");\n optionalString(event, \"sessionId\", \"event\");\n recordField(event, \"payload\", \"event\");\n numberField(event, \"createdAt\", \"event\");\n return event as unknown as SessionEventRecord;\n}\n\nexport function deserializeSessionEventRecord(text: string): SessionEventRecord {\n return decodeSessionEventRecord(parseJson(text));\n}\n\nexport function serializeSessionEventRecord(event: SessionEventRecord): string {\n decodeSessionEventRecord(event);\n return JSON.stringify(event);\n}\n\nexport function decodeSessionStateSnapshot(value: unknown): SessionStateSnapshot {\n const snapshot = object(value, \"snapshot\");\n numberField(snapshot, \"cursor\", \"snapshot\");\n validateSession(snapshot.session, \"snapshot.session\");\n arrayField(snapshot, \"inputs\", \"snapshot\", validateInput);\n arrayField(snapshot, \"messages\", \"snapshot\", validateMessage);\n arrayField(snapshot, \"parts\", \"snapshot\", validatePart);\n arrayField(snapshot, \"runs\", \"snapshot\", validateRun);\n arrayField(snapshot, \"attempts\", \"snapshot\", validateAttempt);\n if (snapshot.tasks !== undefined) arrayField(snapshot, \"tasks\", \"snapshot\", validateTask);\n arrayField(snapshot, \"permissions\", \"snapshot\", validatePermission);\n return snapshot as unknown as SessionStateSnapshot;\n}\n\nexport function deserializeSessionStateSnapshot(text: string): SessionStateSnapshot {\n return decodeSessionStateSnapshot(parseJson(text));\n}\n\nexport function serializeSessionStateSnapshot(snapshot: SessionStateSnapshot): string {\n decodeSessionStateSnapshot(snapshot);\n return JSON.stringify(snapshot);\n}\n\nexport function decodeJobSnapshot(value: unknown): JobSnapshot {\n const job = object(value, \"job\");\n for (const field of [\"id\", \"label\", \"ownerSession\", \"cwd\"] as const) stringField(job, field, \"job\");\n enumField(job, \"kind\", \"job\", [\"terminal\", \"shell\", \"agent\", \"dream\", \"workflow\"] as const);\n enumField(job, \"status\", \"job\", [\"running\", \"stopping\", \"completed\", \"killed\", \"failed\"] as const);\n const capabilities = recordField(job, \"capabilities\", \"job\");\n for (const field of [\"read\", \"wait\", \"send\", \"cancel\"] as const) {\n booleanField(capabilities, field, \"job.capabilities\");\n }\n numberField(job, \"startedAt\", \"job\");\n numberField(job, \"updatedAt\", \"job\");\n optionalNumber(job, \"finishedAt\", \"job\");\n optionalString(job, \"detail\", \"job\");\n optionalRecord(job, \"metadata\", \"job\");\n return job as unknown as JobSnapshot;\n}\n\nexport function decodeJobReadResult(value: unknown): JobReadResult {\n const result = object(value, \"jobReadResult\");\n stringField(result, \"text\", \"jobReadResult\");\n numberField(result, \"cursor\", \"jobReadResult\");\n booleanField(result, \"truncated\", \"jobReadResult\");\n decodeJobSnapshot(result.snapshot);\n optionalRecord(result, \"details\", \"jobReadResult\");\n return result as unknown as JobReadResult;\n}\n\nexport function decodeJobWaitResult(value: unknown): JobWaitResult {\n const result = object(value, \"jobWaitResult\");\n decodeJobReadResult(result);\n booleanField(result, \"timedOut\", \"jobWaitResult\");\n return result as unknown as JobWaitResult;\n}\n\nexport function decodeTerminalSessionInfo(value: unknown): TerminalSessionInfo {\n const terminal = object(value, \"terminal\");\n for (const field of [\"id\", \"name\", \"cwd\", \"shell\", \"createdAt\"] as const) {\n stringField(terminal, field, \"terminal\");\n }\n const scope = recordField(terminal, \"scope\", \"terminal\");\n const scopeKind = enumField(scope, \"kind\", \"terminal.scope\", [\"project\", \"session\"] as const);\n if (scopeKind === \"project\") {\n const projectId = stringField(scope, \"projectId\", \"terminal.scope\");\n optionalString(terminal, \"projectId\", \"terminal\");\n if (terminal.projectId !== undefined && terminal.projectId !== projectId) {\n throw new ProtocolDataError(\n \"terminal.projectId must match terminal.scope.projectId\",\n \"terminal.projectId\",\n );\n }\n } else {\n const sessionId = stringField(scope, \"sessionId\", \"terminal.scope\");\n optionalString(terminal, \"sessionId\", \"terminal\");\n if (terminal.sessionId !== undefined && terminal.sessionId !== sessionId) {\n throw new ProtocolDataError(\n \"terminal.sessionId must match terminal.scope.sessionId\",\n \"terminal.sessionId\",\n );\n }\n }\n optionalString(terminal, \"projectId\", \"terminal\");\n optionalString(terminal, \"sessionId\", \"terminal\");\n enumField(terminal, \"runtime\", \"terminal\", [\"local\", \"environment\"] as const);\n enumField(terminal, \"source\", \"terminal\", [\"user\", \"agent\"] as const);\n enumField(terminal, \"status\", \"terminal\", [\"running\", \"stopping\", \"completed\", \"killed\", \"failed\"] as const);\n numberField(terminal, \"cols\", \"terminal\");\n numberField(terminal, \"rows\", \"terminal\");\n optionalString(terminal, \"exitedAt\", \"terminal\");\n optionalNumber(terminal, \"exitCode\", \"terminal\", true);\n return terminal as unknown as TerminalSessionInfo;\n}\n\nexport function decodeTerminalEvent(value: unknown): TerminalEvent {\n const event = object(value, \"terminalEvent\");\n const type = enumField(event, \"type\", \"terminalEvent\", [\"data\", \"status\", \"exit\", \"title\", \"error\"] as const);\n stringField(event, \"terminalId\", \"terminalEvent\");\n if (type === \"data\") {\n stringField(event, \"data\", \"terminalEvent\");\n numberField(event, \"sequence\", \"terminalEvent\");\n } else if (type === \"status\") {\n enumField(event, \"status\", \"terminalEvent\", [\"stopping\", \"killed\"] as const);\n } else if (type === \"exit\") {\n optionalNumber(event, \"exitCode\", \"terminalEvent\", true);\n if (!(\"exitCode\" in event)) {\n throw new ProtocolDataError(\"terminalEvent.exitCode is required\", \"terminalEvent.exitCode\");\n }\n } else if (type === \"title\") {\n stringField(event, \"title\", \"terminalEvent\");\n } else {\n stringField(event, \"message\", \"terminalEvent\");\n }\n return event as unknown as TerminalEvent;\n}\n\nexport function decodeTerminalReadResult(value: unknown): TerminalReadResult {\n const result = object(value, \"terminalReadResult\");\n stringField(result, \"terminalId\", \"terminalReadResult\");\n stringField(result, \"data\", \"terminalReadResult\");\n numberField(result, \"sequence\", \"terminalReadResult\");\n booleanField(result, \"truncated\", \"terminalReadResult\");\n return result as unknown as TerminalReadResult;\n}\n\nexport function decodeTerminalWaitResult(value: unknown): TerminalWaitResult {\n const result = object(value, \"terminalWaitResult\");\n decodeTerminalReadResult(result);\n decodeTerminalSessionInfo(result.terminal);\n booleanField(result, \"timedOut\", \"terminalWaitResult\");\n return result as unknown as TerminalWaitResult;\n}\n",
8
+ "import type { SessionRecord } from \"./session.js\";\nimport { ProtocolDataError } from \"./serialization.js\";\n\nexport type SessionApiFormat = \"anthropic\" | \"openai\";\n\nexport type SessionRuntimeConfig = {\n model: string;\n provider?: string;\n baseUrl?: string;\n apiFormat?: SessionApiFormat;\n permissionMode?: \"default\" | \"plan\" | \"full_auto\";\n maxTurns?: number;\n effort?: \"low\" | \"medium\" | \"high\";\n sessionMode?: \"direct\" | \"coordinator\";\n systemPrompt?: string;\n allowedTools?: string[];\n disallowedTools?: string[];\n pluginsEnabled?: boolean;\n};\n\nexport type SessionRuntimeConfigPatch = Partial<SessionRuntimeConfig>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction stringArrayValue(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const items = value.filter((item): item is string => typeof item === \"string\" && item.trim().length > 0);\n return items.length > 0 ? items : undefined;\n}\n\nfunction permissionModeValue(value: unknown): SessionRuntimeConfig[\"permissionMode\"] | undefined {\n return value === \"default\" || value === \"plan\" || value === \"full_auto\" ? value : undefined;\n}\n\nfunction effortValue(value: unknown): SessionRuntimeConfig[\"effort\"] | undefined {\n return value === \"low\" || value === \"medium\" || value === \"high\" ? value : undefined;\n}\n\nfunction sessionModeValue(value: unknown): SessionRuntimeConfig[\"sessionMode\"] | undefined {\n return value === \"coordinator\" ? \"coordinator\" : value === \"direct\" ? \"direct\" : undefined;\n}\n\nfunction apiFormatValue(value: unknown): SessionApiFormat | undefined {\n return value === \"anthropic\" || value === \"openai\" ? value : undefined;\n}\n\nfunction booleanValue(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nexport function readRuntimeMetadata(metadata: Record<string, unknown> | undefined): Record<string, unknown> {\n const runtime = metadata?.runtime;\n if (runtime === undefined) return {};\n if (!isRecord(runtime)) throw new ProtocolDataError(\"metadata.runtime must be an object\", \"metadata.runtime\");\n for (const [field, value] of Object.entries(runtime)) {\n let valid = false;\n switch (field) {\n case \"model\": case \"provider\": case \"baseUrl\": case \"systemPrompt\":\n valid = typeof value === \"string\"; break;\n case \"apiFormat\": valid = apiFormatValue(value) !== undefined; break;\n case \"permissionMode\": valid = permissionModeValue(value) !== undefined; break;\n case \"effort\": valid = effortValue(value) !== undefined; break;\n case \"sessionMode\": valid = sessionModeValue(value) !== undefined; break;\n case \"maxTurns\": valid = numberValue(value) !== undefined; break;\n case \"pluginsEnabled\": valid = booleanValue(value) !== undefined; break;\n case \"allowedTools\": case \"disallowedTools\":\n valid = Array.isArray(value) && value.every((item) => typeof item === \"string\" && item.trim().length > 0); break;\n }\n if (!valid) {\n throw new ProtocolDataError(`Invalid runtime config field metadata.runtime.${field}`, `metadata.runtime.${field}`);\n }\n }\n return runtime;\n}\n\nexport function readSessionRuntimeConfig(\n session: SessionRecord,\n defaults?: Partial<SessionRuntimeConfig>,\n): SessionRuntimeConfig {\n const runtime = readRuntimeMetadata(session.metadata);\n const model = stringValue(runtime.model);\n if (!model) {\n throw new Error(`Session runtime config is missing metadata.runtime.model: ${session.id}`);\n }\n return {\n model,\n ...(stringValue(runtime.provider) ?? defaults?.provider\n ? { provider: stringValue(runtime.provider) ?? defaults?.provider }\n : {}),\n ...(stringValue(runtime.baseUrl) ?? defaults?.baseUrl\n ? { baseUrl: stringValue(runtime.baseUrl) ?? defaults?.baseUrl }\n : {}),\n ...(apiFormatValue(runtime.apiFormat) ?? defaults?.apiFormat\n ? { apiFormat: apiFormatValue(runtime.apiFormat) ?? defaults?.apiFormat }\n : {}),\n ...(permissionModeValue(runtime.permissionMode) ?? defaults?.permissionMode\n ? { permissionMode: permissionModeValue(runtime.permissionMode) ?? defaults?.permissionMode }\n : {}),\n ...(numberValue(runtime.maxTurns) ?? defaults?.maxTurns\n ? { maxTurns: numberValue(runtime.maxTurns) ?? defaults?.maxTurns }\n : {}),\n ...(effortValue(runtime.effort) ?? defaults?.effort\n ? { effort: effortValue(runtime.effort) ?? defaults?.effort }\n : {}),\n ...(sessionModeValue(runtime.sessionMode) ?? defaults?.sessionMode\n ? { sessionMode: sessionModeValue(runtime.sessionMode) ?? defaults?.sessionMode }\n : {}),\n ...(stringValue(runtime.systemPrompt) ?? defaults?.systemPrompt\n ? { systemPrompt: stringValue(runtime.systemPrompt) ?? defaults?.systemPrompt }\n : {}),\n ...(stringArrayValue(runtime.allowedTools) ?? defaults?.allowedTools\n ? { allowedTools: stringArrayValue(runtime.allowedTools) ?? defaults?.allowedTools }\n : {}),\n ...(stringArrayValue(runtime.disallowedTools) ?? defaults?.disallowedTools\n ? { disallowedTools: stringArrayValue(runtime.disallowedTools) ?? defaults?.disallowedTools }\n : {}),\n ...((booleanValue(runtime.pluginsEnabled) ?? defaults?.pluginsEnabled) !== undefined\n ? { pluginsEnabled: booleanValue(runtime.pluginsEnabled) ?? defaults?.pluginsEnabled }\n : {}),\n };\n}\n\nexport function patchSessionRuntimeMetadata(\n metadata: Record<string, unknown>,\n patch: SessionRuntimeConfigPatch,\n): Record<string, unknown> {\n const runtime = {\n ...readRuntimeMetadata(metadata),\n ...stripUndefined(patch),\n };\n readRuntimeMetadata({ runtime });\n return {\n ...metadata,\n runtime,\n };\n}\n\nexport function runtimeMetadataChanged(\n before: Record<string, unknown>,\n after: Record<string, unknown>,\n): boolean {\n return JSON.stringify(readRuntimeMetadata(before)) !== JSON.stringify(readRuntimeMetadata(after));\n}\n\nfunction stripUndefined<T extends Record<string, unknown>>(input: T): Partial<T> {\n return Object.fromEntries(Object.entries(input).filter(([, value]) => value !== undefined)) as Partial<T>;\n}\n",
9
+ "export const SESSION_INPUT_LIMITS = {\n maxItems: 256,\n maxSkills: 32,\n maxTextBytes: 1024 * 1024,\n maxNameChars: 128,\n maxDisplayNameChars: 256,\n} as const\n\nexport type SkillSource = \"bundled\" | \"user\" | \"project\" | \"plugin\"\n\n/** Safe picker metadata; implementation locations and permissions stay on the server. */\nexport interface PluginCatalogEntry {\n pluginId: string\n displayName: string\n version: string\n scope: \"user\" | \"managed\" | \"project\" | \"local\"\n origin: \"native\" | \"converted\"\n description: string\n capabilities: (\"skills\" | \"tools\" | \"agents\")[]\n}\n\nexport type PluginCapabilityRef = {\n type: \"capability\"\n kind: \"plugin\"\n pluginId: string\n displayName: string\n}\n\nexport type PluginAgentRef = {\n type: \"capability\"\n kind: \"plugin_agent\"\n pluginId: string\n agentId: string\n displayName: string\n}\n\nexport type SessionUserInputItem =\n | { type: \"text\"; text: string }\n | { type: \"skill\"; name: string; path: string; displayName?: string; source?: SkillSource }\n | { type: \"mention\"; name: string; path: string; displayName?: string }\n | { type: \"context\"; kind: \"conversation\"; id: string; displayName: string }\n | PluginCapabilityRef\n | PluginAgentRef\n\nconst CONTROL_CHARACTER_PATTERN = /[\\u0000-\\u001F\\u007F-\\u009F]/\nconst TEXT_CONTROL_CHARACTER_PATTERN = /[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F-\\u009F]/\n\nexport function validateSessionUserInputItems(\n items: readonly SessionUserInputItem[],\n): SessionUserInputItem[] {\n if (items.length > SESSION_INPUT_LIMITS.maxItems) throw new Error(\"item_limit_exceeded\")\n\n let skillCount = 0\n let textBytes = 0\n for (const item of items) {\n if (item.type === \"text\") {\n assertValidText(item.text)\n textBytes += new TextEncoder().encode(item.text).byteLength\n continue\n }\n\n if (item.type === \"context\") {\n if (item.kind !== \"conversation\") throw new Error(\"invalid_context_kind\")\n assertValidString(item.id, \"id\")\n assertValidString(item.displayName, \"displayName\")\n assertMaximumLength(item.id, SESSION_INPUT_LIMITS.maxNameChars, \"id\")\n assertMaximumLength(item.displayName, SESSION_INPUT_LIMITS.maxDisplayNameChars, \"displayName\")\n continue\n }\n\n if (item.type === \"capability\") {\n if (item.kind !== \"plugin\" && item.kind !== \"plugin_agent\") throw new Error(\"invalid_capability_kind\")\n assertValidString(item.pluginId, \"pluginId\")\n assertValidString(item.displayName, \"displayName\")\n assertMaximumLength(item.pluginId, SESSION_INPUT_LIMITS.maxNameChars, \"pluginId\")\n assertMaximumLength(item.displayName, SESSION_INPUT_LIMITS.maxDisplayNameChars, \"displayName\")\n if (item.kind === \"plugin_agent\") {\n assertValidString(item.agentId, \"agentId\")\n assertMaximumLength(item.agentId, SESSION_INPUT_LIMITS.maxNameChars, \"agentId\")\n }\n continue\n }\n\n assertValidString(item.name, \"name\")\n assertValidString(item.path, \"path\")\n assertMaximumLength(item.name, SESSION_INPUT_LIMITS.maxNameChars, \"name\")\n if (item.displayName !== undefined) {\n assertValidString(item.displayName, \"displayName\")\n assertMaximumLength(item.displayName, SESSION_INPUT_LIMITS.maxDisplayNameChars, \"displayName\")\n }\n if (item.type === \"skill\") {\n skillCount += 1\n if (item.source !== undefined && !isSkillSource(item.source)) throw new Error(\"invalid_skill_source\")\n }\n }\n\n if (skillCount > SESSION_INPUT_LIMITS.maxSkills) throw new Error(\"skill_item_limit_exceeded\")\n if (textBytes > SESSION_INPUT_LIMITS.maxTextBytes) throw new Error(\"text_byte_limit_exceeded\")\n return [...items]\n}\n\nexport function normalizeSessionUserInputItems(\n items: readonly SessionUserInputItem[],\n): SessionUserInputItem[] {\n const normalized: SessionUserInputItem[] = []\n for (const item of validateSessionUserInputItems(items)) {\n if (item.type !== \"text\") {\n normalized.push(item)\n } else if (item.text.length > 0) {\n const previous = normalized.at(-1)\n if (previous?.type === \"text\") previous.text += item.text\n else normalized.push({ type: \"text\", text: item.text })\n }\n }\n return normalized\n}\n\nexport function sessionUserInputText(items: readonly SessionUserInputItem[]): string {\n return normalizeSessionUserInputItems(items)\n .map((item) => item.type === \"text\"\n ? item.text\n : item.type === \"context\" || item.type === \"capability\"\n ? `@${item.displayName}`\n : `$${item.name}`)\n .join(\"\")\n}\n\nfunction assertValidString(value: string, field: string): void {\n if (typeof value !== \"string\" || CONTROL_CHARACTER_PATTERN.test(value)) throw new Error(`invalid_${field}`)\n}\n\nfunction assertValidText(value: string): void {\n if (typeof value !== \"string\" || TEXT_CONTROL_CHARACTER_PATTERN.test(value)) throw new Error(\"invalid_text\")\n}\n\nfunction assertMaximumLength(value: string, maximum: number, field: string): void {\n if (value.length > maximum) throw new Error(`${field}_limit_exceeded`)\n}\n\nfunction isSkillSource(value: string): value is SkillSource {\n return value === \"bundled\" || value === \"user\" || value === \"project\" || value === \"plugin\"\n}\n",
10
+ "import {\n patchSessionRuntimeMetadata,\n readRuntimeMetadata,\n} from \"./runtime-config.js\";\nimport type {\n AdmitPromptAttachmentInput,\n AdmitPromptInput,\n CreateScheduledTaskInput,\n CreateSessionInput,\n ReplyPermissionInput,\n ScheduledPermissionProfile,\n ScheduledStopPolicy,\n UpdateScheduledTaskInput,\n UpdateSessionInput,\n} from \"./session.js\";\nimport type { AttachmentIntent } from \"./attachment.js\";\nimport {\n normalizeSessionUserInputItems,\n type SessionUserInputItem,\n type SkillSource,\n} from \"./session-input-items.js\";\n\nexport interface ProtocolError {\n code: string;\n message: string;\n retryable?: boolean;\n details?: Record<string, unknown>;\n traceId?: string;\n}\n\nexport class ProtocolValidationError extends Error {\n readonly code = \"invalid_request\";\n readonly details?: Record<string, unknown>;\n\n constructor(message: string, field?: string) {\n super(message);\n this.name = \"ProtocolValidationError\";\n this.details = field ? { field } : undefined;\n }\n\n toProtocolError(): ProtocolError {\n return {\n code: this.code,\n message: this.message,\n ...(this.details ? { details: this.details } : {}),\n };\n }\n}\n\ntype JsonRecord = Record<string, unknown>;\n\nexport type AdmitPromptRequest = Omit<AdmitPromptInput, \"sessionId\">;\nexport type ReplyPermissionRequest = Omit<ReplyPermissionInput, \"requestId\"> & {\n decision?: \"once\" | \"session\";\n};\n\nfunction record(value: unknown): JsonRecord {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new ProtocolValidationError(\"Request body must be a JSON object\");\n }\n return value as JsonRecord;\n}\n\nfunction requiredString(body: JsonRecord, field: string): string {\n const value = body[field];\n if (typeof value !== \"string\") {\n throw new ProtocolValidationError(`${field} is required`, field);\n }\n return value;\n}\n\nfunction optionalString(body: JsonRecord, field: string): string | undefined {\n const value = body[field];\n if (value === undefined) return undefined;\n if (typeof value !== \"string\") {\n throw new ProtocolValidationError(`${field} must be a string`, field);\n }\n return value;\n}\n\nfunction optionalNumber(\n body: JsonRecord,\n field: string,\n options: { nullable?: boolean; integer?: boolean; minimum?: number } = {},\n): number | null | undefined {\n const value = body[field];\n if (value === undefined) return undefined;\n if (value === null && options.nullable) return null;\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n (options.integer && !Number.isInteger(value)) ||\n (options.minimum !== undefined && value < options.minimum)\n ) {\n throw new ProtocolValidationError(`${field} must be a valid number`, field);\n }\n return value;\n}\n\nfunction optionalBoolean(body: JsonRecord, field: string): boolean | undefined {\n const value = body[field];\n if (value === undefined) return undefined;\n if (typeof value !== \"boolean\") {\n throw new ProtocolValidationError(`${field} must be a boolean`, field);\n }\n return value;\n}\n\nfunction optionalRecord(\n body: JsonRecord,\n field: string,\n): Record<string, unknown> | undefined {\n const value = body[field];\n if (value === undefined) return undefined;\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new ProtocolValidationError(`${field} must be an object`, field);\n }\n return value as Record<string, unknown>;\n}\n\nfunction optionalStringArray(body: JsonRecord, field: string): string[] | undefined {\n const value = body[field];\n if (value === undefined) return undefined;\n if (!Array.isArray(value) || value.some((entry) => typeof entry !== \"string\")) {\n throw new ProtocolValidationError(`${field} must be an array of strings`, field);\n }\n return [...value] as string[];\n}\n\nfunction optionalEnum<const T extends readonly string[]>(\n body: JsonRecord,\n field: string,\n values: T,\n): T[number] | undefined {\n const value = body[field];\n if (value === undefined) return undefined;\n if (typeof value !== \"string\" || !values.includes(value)) {\n throw new ProtocolValidationError(\n `${field} must be one of: ${values.join(\", \")}`,\n field,\n );\n }\n return value as T[number];\n}\n\nfunction requiredEnum<const T extends readonly string[]>(\n body: JsonRecord,\n field: string,\n values: T,\n): T[number] {\n const value = optionalEnum(body, field, values);\n if (value === undefined) {\n throw new ProtocolValidationError(`${field} is required`, field);\n }\n return value;\n}\n\nexport function parseCreateSessionRequest(value: unknown): CreateSessionInput {\n const body = record(value);\n const cwd = requiredString(body, \"cwd\");\n const rawMetadata = optionalRecord(body, \"metadata\") ?? {};\n const runtime = readRuntimeMetadata(rawMetadata);\n const bodyModel = optionalString(body, \"model\");\n const model = typeof runtime.model === \"string\" ? runtime.model : bodyModel;\n if (!model) throw new ProtocolValidationError(\"model is required\", \"model\");\n const id = optionalString(body, \"id\");\n const parentId = optionalString(body, \"parentId\");\n const projectId = optionalString(body, \"projectId\");\n const title = optionalString(body, \"title\");\n const agent = optionalString(body, \"agent\");\n\n return {\n cwd,\n model,\n metadata: patchSessionRuntimeMetadata(rawMetadata, { model }),\n ...(id !== undefined ? { id } : {}),\n ...(parentId !== undefined ? { parentId } : {}),\n ...(projectId !== undefined ? { projectId } : {}),\n ...(title !== undefined ? { title } : {}),\n ...(agent !== undefined ? { agent } : {}),\n };\n}\n\nexport function parseUpdateSessionRequest(value: unknown): UpdateSessionInput {\n const body = record(value);\n if (\"model\" in body) {\n throw new ProtocolValidationError(\n \"model must be changed through metadata.runtime.model\",\n \"model\",\n );\n }\n const title = optionalString(body, \"title\");\n const metadata = optionalRecord(body, \"metadata\");\n readRuntimeMetadata(metadata);\n const rawAgent = body.agent;\n if (rawAgent !== undefined && rawAgent !== null && typeof rawAgent !== \"string\") {\n throw new ProtocolValidationError(\"agent must be a string or null\", \"agent\");\n }\n return {\n ...(title !== undefined ? { title } : {}),\n ...(rawAgent !== undefined ? { agent: rawAgent as string | null } : {}),\n ...(metadata !== undefined ? { metadata } : {}),\n };\n}\n\nexport function parseAdmitPromptRequest(value: unknown): AdmitPromptRequest {\n const body = record(value);\n const id = optionalString(body, \"id\");\n const delivery = optionalEnum(body, \"delivery\", [\"queue\", \"steer\"] as const);\n const metadata = optionalRecord(body, \"metadata\");\n const attachments = parsePromptAttachments(body.attachments);\n return {\n items: parsePromptItems(body),\n attachments,\n ...(id !== undefined ? { id } : {}),\n ...(delivery !== undefined ? { delivery } : {}),\n ...(metadata !== undefined ? { metadata } : {}),\n };\n}\n\nexport function parsePromptItems(value: unknown): SessionUserInputItem[] {\n const body = record(value);\n if (body.items !== undefined) return parseSessionInputItems(body.items);\n const content = optionalString(body, \"content\");\n if (content === undefined) {\n throw new ProtocolValidationError(\"items must be an array\", \"items\");\n }\n return parseSessionInputItems([{ type: \"text\", text: content }]);\n}\n\nexport function parseSessionInputItems(value: unknown): SessionUserInputItem[] {\n if (!Array.isArray(value)) {\n throw new ProtocolValidationError(\"items must be an array\", \"items\");\n }\n const items = value.map((entry, index): SessionUserInputItem => {\n const field = `items[${index}]`;\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) {\n throw new ProtocolValidationError(`${field} must be an object`, field);\n }\n const item = entry as JsonRecord;\n if (item.type === \"text\") {\n if (typeof item.text !== \"string\") {\n throw new ProtocolValidationError(`${field}.text must be a string`, `${field}.text`);\n }\n return { type: \"text\", text: item.text };\n }\n if (item.type === \"context\") {\n if (item.kind !== \"conversation\" || typeof item.id !== \"string\" || typeof item.displayName !== \"string\") {\n throw new ProtocolValidationError(`${field} requires kind, id and displayName`, field);\n }\n return { type: \"context\", kind: \"conversation\", id: item.id, displayName: item.displayName };\n }\n if (item.type === \"capability\") {\n if (\n (item.kind !== \"plugin\" && item.kind !== \"plugin_agent\") ||\n typeof item.pluginId !== \"string\" ||\n typeof item.displayName !== \"string\" ||\n (item.kind === \"plugin_agent\" && typeof item.agentId !== \"string\")\n ) {\n throw new ProtocolValidationError(\n `${field} requires a valid kind, pluginId, displayName and agentId`,\n field,\n );\n }\n return item.kind === \"plugin\"\n ? {\n type: \"capability\",\n kind: \"plugin\",\n pluginId: item.pluginId,\n displayName: item.displayName,\n }\n : {\n type: \"capability\",\n kind: \"plugin_agent\",\n pluginId: item.pluginId,\n agentId: item.agentId as string,\n displayName: item.displayName,\n };\n }\n if (item.type !== \"skill\" && item.type !== \"mention\") {\n throw new ProtocolValidationError(`${field}.type is invalid`, `${field}.type`);\n }\n if (typeof item.name !== \"string\" || typeof item.path !== \"string\") {\n throw new ProtocolValidationError(`${field} requires name and path`, field);\n }\n if (item.displayName !== undefined && typeof item.displayName !== \"string\") {\n throw new ProtocolValidationError(`${field}.displayName must be a string`, `${field}.displayName`);\n }\n if (item.type === \"mention\") {\n return {\n type: \"mention\",\n name: item.name,\n path: item.path,\n ...(typeof item.displayName === \"string\" ? { displayName: item.displayName } : {}),\n };\n }\n if (\n item.source !== undefined &&\n item.source !== \"bundled\" && item.source !== \"user\" && item.source !== \"project\" && item.source !== \"plugin\"\n ) {\n throw new ProtocolValidationError(`${field}.source is invalid`, `${field}.source`);\n }\n return {\n type: \"skill\",\n name: item.name,\n path: item.path,\n ...(typeof item.displayName === \"string\" ? { displayName: item.displayName } : {}),\n ...(item.source !== undefined ? { source: item.source as SkillSource } : {}),\n };\n });\n try {\n return normalizeSessionUserInputItems(items);\n } catch (error) {\n throw new ProtocolValidationError(\n error instanceof Error ? error.message : \"items are invalid\",\n \"items\",\n );\n }\n}\n\nexport function parsePromptAttachments(\n value: unknown,\n): AdmitPromptAttachmentInput[] {\n if (value === undefined) return [];\n if (!Array.isArray(value)) {\n throw new ProtocolValidationError(\"attachments must be an array\", \"attachments\");\n }\n return value.map((entry, index) => {\n const field = `attachments[${index}]`;\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) {\n throw new ProtocolValidationError(`${field} must be an object`, field);\n }\n const item = entry as JsonRecord;\n const assetId = item.assetId;\n if (typeof assetId !== \"string\" || assetId.length === 0) {\n throw new ProtocolValidationError(\n `${field}.assetId must be a non-empty string`,\n `${field}.assetId`,\n );\n }\n const intent = item.intent;\n const allowedIntents = [\n \"auto\",\n \"vision\",\n \"ocr\",\n \"document\",\n \"tool_resource\",\n \"workspace_reference\",\n ] as const satisfies readonly AttachmentIntent[];\n if (\n intent !== undefined &&\n (typeof intent !== \"string\" || !allowedIntents.includes(intent as AttachmentIntent))\n ) {\n throw new ProtocolValidationError(\n `${field}.intent must be one of: ${allowedIntents.join(\", \")}`,\n `${field}.intent`,\n );\n }\n const displayName = item.displayName;\n if (displayName !== undefined && typeof displayName !== \"string\") {\n throw new ProtocolValidationError(\n `${field}.displayName must be a string`,\n `${field}.displayName`,\n );\n }\n return {\n assetId,\n ...(intent !== undefined ? { intent: intent as AttachmentIntent } : {}),\n ...(displayName !== undefined ? { displayName } : {}),\n };\n });\n}\n\nexport function parseReplyPermissionRequest(value: unknown): ReplyPermissionRequest {\n const body = record(value);\n const status = requiredEnum(\n body,\n \"status\",\n [\"approved\", \"denied\", \"expired\"] as const,\n );\n const decision = optionalEnum(body, \"decision\", [\"once\", \"session\"] as const);\n const clientId = optionalString(body, \"clientId\");\n return {\n status,\n ...(decision !== undefined ? { decision } : {}),\n ...(clientId !== undefined ? { clientId } : {}),\n };\n}\n\nfunction parsePermissionProfile(value: unknown): ScheduledPermissionProfile {\n const body = record(value);\n const mode = requiredEnum(\n body,\n \"mode\",\n [\"read_only\", \"workspace_write\", \"full_access\"] as const,\n );\n const network = optionalBoolean(body, \"network\");\n const allowedTools = optionalStringArray(body, \"allowedTools\");\n const deniedTools = optionalStringArray(body, \"deniedTools\");\n return {\n mode,\n ...(network !== undefined ? { network } : {}),\n ...(allowedTools !== undefined ? { allowedTools } : {}),\n ...(deniedTools !== undefined ? { deniedTools } : {}),\n };\n}\n\nfunction parseStopPolicy(value: unknown): ScheduledStopPolicy {\n const body = record(value);\n const runOnce = optionalBoolean(body, \"runOnce\");\n const maxRuns = optionalNumber(body, \"maxRuns\", { integer: true, minimum: 1 });\n const stopWhenCompleted = optionalBoolean(body, \"stopWhenCompleted\");\n const expiresAt = optionalNumber(body, \"expiresAt\");\n return {\n ...(runOnce !== undefined ? { runOnce } : {}),\n ...(maxRuns !== undefined ? { maxRuns: maxRuns as number } : {}),\n ...(stopWhenCompleted !== undefined ? { stopWhenCompleted } : {}),\n ...(expiresAt !== undefined ? { expiresAt: expiresAt as number } : {}),\n };\n}\n\nfunction parseScheduleFields(body: JsonRecord): Partial<CreateScheduledTaskInput> {\n const id = optionalString(body, \"id\");\n const name = optionalString(body, \"name\");\n const description = optionalString(body, \"description\");\n const prompt = optionalString(body, \"prompt\");\n const recurrence = optionalString(body, \"recurrence\");\n const recurrenceFormat = optionalEnum(\n body,\n \"recurrenceFormat\",\n [\"rrule\", \"once\"] as const,\n );\n const timezone = optionalString(body, \"timezone\");\n const status = optionalEnum(\n body,\n \"status\",\n [\"active\", \"paused\", \"completed\"] as const,\n );\n const destination = optionalEnum(\n body,\n \"destination\",\n [\"standalone\", \"chat\"] as const,\n );\n const sessionId = optionalString(body, \"sessionId\");\n const projectPaths = optionalStringArray(body, \"projectPaths\");\n const executionMode = optionalEnum(\n body,\n \"executionMode\",\n [\"local\", \"worktree\"] as const,\n );\n const model = optionalString(body, \"model\");\n const effort = optionalString(body, \"effort\");\n const skillNames = optionalStringArray(body, \"skillNames\");\n const pluginNames = optionalStringArray(body, \"pluginNames\");\n const permissionProfile = body.permissionProfile === undefined\n ? undefined\n : parsePermissionProfile(body.permissionProfile);\n const overlapPolicy = optionalEnum(\n body,\n \"overlapPolicy\",\n [\"skip\", \"queue\"] as const,\n );\n const missedRunPolicy = optionalEnum(\n body,\n \"missedRunPolicy\",\n [\"skip\", \"run_once\"] as const,\n );\n const stopPolicy = body.stopPolicy === undefined\n ? undefined\n : parseStopPolicy(body.stopPolicy);\n const createdBy = optionalEnum(\n body,\n \"createdBy\",\n [\"user\", \"agent\"] as const,\n );\n const createdFromSessionId = optionalString(body, \"createdFromSessionId\");\n return {\n ...(id !== undefined ? { id } : {}),\n ...(name !== undefined ? { name } : {}),\n ...(description !== undefined ? { description } : {}),\n ...(prompt !== undefined ? { prompt } : {}),\n ...(recurrence !== undefined ? { recurrence } : {}),\n ...(recurrenceFormat !== undefined ? { recurrenceFormat } : {}),\n ...(timezone !== undefined ? { timezone } : {}),\n ...(status !== undefined ? { status } : {}),\n ...(destination !== undefined ? { destination } : {}),\n ...(sessionId !== undefined ? { sessionId } : {}),\n ...(projectPaths !== undefined ? { projectPaths } : {}),\n ...(executionMode !== undefined ? { executionMode } : {}),\n ...(model !== undefined ? { model } : {}),\n ...(effort !== undefined ? { effort } : {}),\n ...(skillNames !== undefined ? { skillNames } : {}),\n ...(pluginNames !== undefined ? { pluginNames } : {}),\n ...(permissionProfile !== undefined ? { permissionProfile } : {}),\n ...(overlapPolicy !== undefined ? { overlapPolicy } : {}),\n ...(missedRunPolicy !== undefined ? { missedRunPolicy } : {}),\n ...(stopPolicy !== undefined ? { stopPolicy } : {}),\n ...(createdBy !== undefined ? { createdBy } : {}),\n ...(createdFromSessionId !== undefined ? { createdFromSessionId } : {}),\n };\n}\n\nexport function parseCreateScheduledTaskRequest(value: unknown): CreateScheduledTaskInput {\n const body = record(value);\n const parsed = parseScheduleFields(body);\n const nextRunAt = optionalNumber(body, \"nextRunAt\");\n return {\n ...parsed,\n name: requiredString(body, \"name\"),\n prompt: requiredString(body, \"prompt\"),\n recurrence: requiredString(body, \"recurrence\"),\n recurrenceFormat: requiredEnum(body, \"recurrenceFormat\", [\"rrule\", \"once\"] as const),\n timezone: requiredString(body, \"timezone\"),\n destination: requiredEnum(body, \"destination\", [\"standalone\", \"chat\"] as const),\n ...(nextRunAt !== undefined ? { nextRunAt: nextRunAt as number } : {}),\n };\n}\n\nexport function parseUpdateScheduledTaskRequest(value: unknown): UpdateScheduledTaskInput {\n const body = record(value);\n if (\"id\" in body) {\n throw new ProtocolValidationError(\"id cannot be changed\", \"id\");\n }\n const parsed = parseScheduleFields(body);\n const lastRunAt = optionalNumber(body, \"lastRunAt\", { nullable: true });\n const nextRunAt = optionalNumber(body, \"nextRunAt\", { nullable: true });\n const runCount = optionalNumber(body, \"runCount\", { integer: true, minimum: 0 });\n const { id: _id, ...patch } = parsed;\n return {\n ...patch,\n ...(lastRunAt !== undefined ? { lastRunAt: lastRunAt as number | null } : {}),\n ...(nextRunAt !== undefined ? { nextRunAt: nextRunAt as number | null } : {}),\n ...(runCount !== undefined ? { runCount: runCount as number } : {}),\n };\n}\n",
11
11
  "export type AttachmentAssetStatus =\n | \"importing\"\n | \"ready\"\n | \"failed\"\n | \"deleted\";\n\nexport type AttachmentIntent =\n | \"auto\"\n | \"vision\"\n | \"ocr\"\n | \"document\"\n | \"tool_resource\"\n | \"workspace_reference\";\n\nexport type AttachmentRepresentationStatus =\n | \"pending\"\n | \"running\"\n | \"completed\"\n | \"failed\";\n\nexport type AttachmentRepresentationKind =\n | \"thumbnail\"\n | \"ocr_text\"\n | \"plain_text\"\n | \"pdf_text\"\n | \"pdf_page_image\"\n | \"archive_manifest\"\n | \"directory_manifest\";\n\nexport interface AttachmentAssetRecord {\n id: string;\n displayName: string;\n declaredMediaType?: string;\n mediaType?: string;\n sizeBytes?: number;\n sha256?: string;\n status: AttachmentAssetStatus;\n failureCode?: string;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number;\n}\n\nexport interface SessionInputAttachmentRecord {\n id: string;\n sessionId: string;\n inputId: string;\n assetId: string;\n seq: number;\n intent: AttachmentIntent;\n displayName: string;\n mediaType: string;\n sizeBytes: number;\n metadata: Record<string, unknown>;\n createdAt: number;\n}\n\nexport interface AttachmentRepresentationRecord {\n id: string;\n assetId: string;\n kind: AttachmentRepresentationKind;\n status: AttachmentRepresentationStatus;\n processor: string;\n processorVersion: string;\n cacheKey: string;\n mediaType: string;\n text?: string;\n error?: string;\n metadata: Record<string, unknown>;\n createdAt: number;\n updatedAt: number;\n}\n\nexport interface AttachmentLimits {\n maxFilesPerPrompt: number;\n maxBytesPerFile: number;\n maxBytesPerPrompt: number;\n maxSessionReferencedBytes: number;\n resumableThresholdBytes: number;\n uploadSessionTtlMs: number;\n stagingTtlMs: number;\n}\n\nexport const DEFAULT_ATTACHMENT_LIMITS: Readonly<AttachmentLimits> = {\n maxFilesPerPrompt: 20,\n maxBytesPerFile: 100 * 1024 * 1024,\n maxBytesPerPrompt: 250 * 1024 * 1024,\n maxSessionReferencedBytes: 2 * 1024 * 1024 * 1024,\n resumableThresholdBytes: 25 * 1024 * 1024,\n uploadSessionTtlMs: 24 * 60 * 60 * 1_000,\n stagingTtlMs: 24 * 60 * 60 * 1_000,\n};\n\nexport function parseAttachmentLimits(value: unknown): AttachmentLimits {\n const record = recordValue(value, \"attachment limits\");\n const limits: AttachmentLimits = {\n maxFilesPerPrompt: positiveInteger(\n record.maxFilesPerPrompt,\n \"maxFilesPerPrompt\",\n ),\n maxBytesPerFile: positiveInteger(record.maxBytesPerFile, \"maxBytesPerFile\"),\n maxBytesPerPrompt: positiveInteger(\n record.maxBytesPerPrompt,\n \"maxBytesPerPrompt\",\n ),\n maxSessionReferencedBytes: positiveInteger(\n record.maxSessionReferencedBytes,\n \"maxSessionReferencedBytes\",\n ),\n resumableThresholdBytes: positiveInteger(\n record.resumableThresholdBytes,\n \"resumableThresholdBytes\",\n ),\n uploadSessionTtlMs: positiveInteger(\n record.uploadSessionTtlMs,\n \"uploadSessionTtlMs\",\n ),\n stagingTtlMs: positiveInteger(record.stagingTtlMs, \"stagingTtlMs\"),\n };\n if (limits.resumableThresholdBytes > limits.maxBytesPerFile) {\n throw new Error(\"resumableThresholdBytes must not exceed maxBytesPerFile\");\n }\n if (limits.maxBytesPerFile > limits.maxBytesPerPrompt) {\n throw new Error(\"maxBytesPerFile must not exceed maxBytesPerPrompt\");\n }\n if (limits.maxBytesPerPrompt > limits.maxSessionReferencedBytes) {\n throw new Error(\n \"maxBytesPerPrompt must not exceed maxSessionReferencedBytes\",\n );\n }\n return limits;\n}\n\nexport function parseAttachmentAssetRecord(\n value: unknown,\n): AttachmentAssetRecord {\n const record = recordValue(value, \"attachment asset\");\n const status = enumValue(\n record.status,\n [\"importing\", \"ready\", \"failed\", \"deleted\"] as const,\n \"status\",\n );\n const asset: AttachmentAssetRecord = {\n id: nonEmptyString(record.id, \"id\"),\n displayName: nonEmptyString(record.displayName, \"displayName\"),\n status,\n createdAt: nonNegativeInteger(record.createdAt, \"createdAt\"),\n updatedAt: nonNegativeInteger(record.updatedAt, \"updatedAt\"),\n };\n\n const declaredMediaType = optionalNonEmptyString(\n record.declaredMediaType,\n \"declaredMediaType\",\n );\n const mediaType = optionalNonEmptyString(record.mediaType, \"mediaType\");\n const sizeBytes = optionalNonNegativeInteger(record.sizeBytes, \"sizeBytes\");\n const sha256 = optionalSha256(record.sha256);\n const failureCode = optionalNonEmptyString(record.failureCode, \"failureCode\");\n const deletedAt = optionalNonNegativeInteger(record.deletedAt, \"deletedAt\");\n\n if (declaredMediaType !== undefined) asset.declaredMediaType = declaredMediaType;\n if (mediaType !== undefined) asset.mediaType = mediaType;\n if (sizeBytes !== undefined) asset.sizeBytes = sizeBytes;\n if (sha256 !== undefined) asset.sha256 = sha256;\n if (failureCode !== undefined) asset.failureCode = failureCode;\n if (deletedAt !== undefined) asset.deletedAt = deletedAt;\n\n if (status === \"ready\" || status === \"deleted\") {\n if (asset.mediaType === undefined) throw new Error(\"mediaType is required\");\n if (asset.sizeBytes === undefined) throw new Error(\"sizeBytes is required\");\n if (asset.sha256 === undefined) throw new Error(\"sha256 is required\");\n }\n if (status === \"failed\" && asset.failureCode === undefined) {\n throw new Error(\"failureCode is required\");\n }\n if (status === \"deleted\" && asset.deletedAt === undefined) {\n throw new Error(\"deletedAt is required\");\n }\n return asset;\n}\n\nfunction recordValue(value: unknown, field: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new Error(`${field} must be an object`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction positiveInteger(value: unknown, field: string): number {\n if (!Number.isSafeInteger(value) || Number(value) < 1) {\n throw new Error(`${field} must be a positive safe integer`);\n }\n return Number(value);\n}\n\nfunction nonNegativeInteger(value: unknown, field: string): number {\n if (!Number.isSafeInteger(value) || Number(value) < 0) {\n throw new Error(`${field} must be a non-negative safe integer`);\n }\n return Number(value);\n}\n\nfunction optionalNonNegativeInteger(\n value: unknown,\n field: string,\n): number | undefined {\n return value === undefined ? undefined : nonNegativeInteger(value, field);\n}\n\nfunction nonEmptyString(value: unknown, field: string): string {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`${field} must be a non-empty string`);\n }\n return value;\n}\n\nfunction optionalNonEmptyString(\n value: unknown,\n field: string,\n): string | undefined {\n return value === undefined ? undefined : nonEmptyString(value, field);\n}\n\nfunction optionalSha256(value: unknown): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"string\" || !/^[a-f0-9]{64}$/.test(value)) {\n throw new Error(\"sha256 must be 64 lowercase hexadecimal characters\");\n }\n return value;\n}\n\nfunction enumValue<const T extends readonly string[]>(\n value: unknown,\n allowed: T,\n field: string,\n): T[number] {\n if (typeof value !== \"string\" || !allowed.includes(value)) {\n throw new Error(`${field} must be one of: ${allowed.join(\", \")}`);\n }\n return value as T[number];\n}\n",
12
- "import { parseAttachmentLimits, type AttachmentLimits } from \"./attachment.js\";\n\nexport interface ProtocolVersion {\n version: number;\n}\n\nexport interface ServerCapabilities {\n serverVersion: string;\n protocol: ProtocolVersion;\n features: Record<string, number>;\n attachments?: AttachmentTransferCapabilities;\n agentEnvironments?: AgentEnvironmentCapabilities;\n}\n\nexport interface AgentEnvironmentCapabilities {\n native: true;\n wsl: boolean;\n}\n\nexport type AttachmentUploadMode = \"single\" | \"resumable\";\n\nexport interface AttachmentTransferCapabilities {\n limits: AttachmentLimits;\n uploadModes: readonly [\"single\"] | readonly [\"single\", \"resumable\"];\n}\n\nexport interface ClientProtocolSupport {\n version: number;\n}\n\nexport interface ProtocolCompatibility {\n compatible: boolean;\n reason?: string;\n}\n\nexport function parseServerCapabilities(value: unknown): ServerCapabilities {\n if (!isRecord(value))\n throw new Error(\"Capabilities response must be an object\");\n if (typeof value.serverVersion !== \"string\")\n throw new Error(\"serverVersion must be a string\");\n if (!isRecord(value.protocol)) throw new Error(\"protocol must be an object\");\n const version = positiveInteger(value.protocol.version, \"protocol.version\");\n if (!isRecord(value.features)) throw new Error(\"features must be an object\");\n const features: Record<string, number> = {};\n for (const [name, version] of Object.entries(value.features)) {\n features[name] = positiveInteger(version, `features.${name}`);\n }\n const attachments = parseAttachmentTransferCapabilities(value.attachments);\n const agentEnvironments = parseAgentEnvironmentCapabilities(\n value.agentEnvironments,\n );\n return {\n serverVersion: value.serverVersion,\n protocol: { version },\n features,\n ...(attachments ? { attachments } : {}),\n ...(agentEnvironments ? { agentEnvironments } : {}),\n };\n}\n\nfunction parseAgentEnvironmentCapabilities(\n value: unknown,\n): AgentEnvironmentCapabilities | undefined {\n if (value === undefined) return undefined;\n if (\n !isRecord(value) ||\n value.native !== true ||\n typeof value.wsl !== \"boolean\"\n ) {\n throw new Error(\n \"agentEnvironments must contain native=true and a boolean wsl value\",\n );\n }\n return { native: true, wsl: value.wsl };\n}\n\nexport function checkProtocolCompatibility(\n server: ServerCapabilities,\n client: ClientProtocolSupport,\n): ProtocolCompatibility {\n if (client.version !== server.protocol.version) {\n return {\n compatible: false,\n reason: `Client protocol ${client.version} does not match server protocol ${server.protocol.version}`,\n };\n }\n return { compatible: true };\n}\n\nexport function supportsFeature(\n capabilities: ServerCapabilities,\n feature: string,\n minimumVersion = 1,\n): boolean {\n return (capabilities.features[feature] ?? 0) >= minimumVersion;\n}\n\nfunction positiveInteger(value: unknown, field: string): number {\n if (!Number.isInteger(value) || Number(value) < 1)\n throw new Error(`${field} must be a positive integer`);\n return Number(value);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseAttachmentTransferCapabilities(\n value: unknown,\n): AttachmentTransferCapabilities | undefined {\n if (value === undefined) return undefined;\n if (!isRecord(value)) throw new Error(\"attachments must be an object\");\n if (!Array.isArray(value.uploadModes) || value.uploadModes.length === 0) {\n throw new Error(\"attachments.uploadModes must be a non-empty array\");\n }\n if (\n value.uploadModes[0] !== \"single\" ||\n value.uploadModes.length > 2 ||\n (value.uploadModes.length === 2 && value.uploadModes[1] !== \"resumable\")\n ) {\n throw new Error(\n 'attachments.uploadModes must be [\"single\"] or [\"single\", \"resumable\"]',\n );\n }\n const uploadModes = value.uploadModes as [\"single\"] | [\"single\", \"resumable\"];\n return {\n limits: parseAttachmentLimits(value.limits),\n uploadModes,\n };\n}\n",
13
- "import type { AdmitPromptAttachmentInput } from \"./session.js\";\nimport type { SessionUserInputItem } from \"./session-input-items.js\";\nimport { parsePromptAttachments, parseSessionInputItems, ProtocolValidationError } from \"./requests.js\";\n\nexport type GoalStatus = \"active\" | \"waiting_user\" | \"blocked\" | \"paused\" | \"completed\" | \"cancelled\";\n\nexport type GoalAction = \"pause\" | \"resume\" | \"cancel\" | \"confirm\";\n\nexport type GoalWait =\n | {\n kind: \"user\";\n questionId: string;\n question: string;\n replyInputId?: string;\n }\n | { kind: \"approval\"; permissionRequestId: string }\n | { kind: \"external\"; handleId: string; runId: string; deadlineAt: number };\n\nexport interface GoalEvidenceRef {\n goalId: string;\n revision: number;\n runId: string;\n messagePartId: string;\n criterion: string;\n}\n\nexport interface GoalRequirementAssessment {\n requirement: string;\n source: string;\n status: \"satisfied\" | \"incomplete\" | \"needs_user\";\n evidenceRefs: GoalEvidenceRef[];\n}\n\nexport interface GoalProgressAssessment {\n kind: \"progress\" | \"waiting\" | \"no_progress\";\n summary: string;\n blockerKey?: string;\n}\n\nexport interface SessionGoal {\n id: string;\n sessionId: string;\n objective: string;\n revision: number;\n status: GoalStatus;\n maxAutoTurns: number;\n autoTurnsUsed: number;\n noProgressCount: number;\n blockerKey?: string;\n currentRunId?: string;\n reason?: string;\n wait?: GoalWait;\n evidence: string[];\n assessment?: GoalAssessment;\n createdAt: number;\n updatedAt: number;\n}\n\nexport interface CreateSessionGoalInput {\n requestId: string;\n objective: string;\n maxAutoTurns?: number;\n items?: SessionUserInputItem[];\n attachments?: AdmitPromptAttachmentInput[];\n}\n\nexport interface UpdateSessionGoalInput {\n requestId: string;\n expectedRevision: number;\n objective: string;\n items?: SessionUserInputItem[];\n attachments?: AdmitPromptAttachmentInput[];\n}\n\nexport interface GoalActionInput {\n requestId: string;\n expectedRevision: number;\n action: GoalAction;\n additionalAutoTurns?: number;\n questionId?: string;\n response?: string;\n}\n\nexport interface GoalAssessment {\n goalId: string;\n revision: number;\n runId: string;\n decision: \"continue\" | \"complete\" | \"waiting_user\" | \"blocked\";\n progress: string;\n progressAssessment: GoalProgressAssessment;\n evidence: string[];\n evidenceRefs: GoalEvidenceRef[];\n requirements?: GoalRequirementAssessment[];\n remainingWork?: string[];\n nextStep?: string;\n reason?: string;\n wait?: GoalWait;\n}\n\nexport const DEFAULT_GOAL_AUTO_TURNS = 20;\nexport const MAX_GOAL_AUTO_TURNS = 1_000;\nexport const MAX_GOAL_OBJECTIVE_CHARS = 32_000;\n\nexport function parseCreateSessionGoalInput(value: unknown): CreateSessionGoalInput {\n const record = goalRecord(value);\n return {\n requestId: requiredGoalString(record.requestId, \"requestId\", 128),\n objective: requiredGoalString(record.objective, \"objective\", MAX_GOAL_OBJECTIVE_CHARS),\n ...(record.maxAutoTurns === undefined\n ? {}\n : {\n maxAutoTurns: goalPositiveInteger(record.maxAutoTurns, \"maxAutoTurns\"),\n }),\n ...parseGoalContent(record),\n };\n}\n\nexport function parseUpdateSessionGoalInput(value: unknown): UpdateSessionGoalInput {\n const record = goalRecord(value);\n return {\n requestId: requiredGoalString(record.requestId, \"requestId\", 128),\n expectedRevision: goalNonNegativeInteger(record.expectedRevision, \"expectedRevision\"),\n objective: requiredGoalString(record.objective, \"objective\", MAX_GOAL_OBJECTIVE_CHARS),\n ...parseGoalContent(record),\n };\n}\n\nexport function parseGoalActionInput(value: unknown): GoalActionInput {\n const record = goalRecord(value);\n if (record.action !== \"pause\" && record.action !== \"resume\" && record.action !== \"cancel\" && record.action !== \"confirm\") {\n throw new ProtocolValidationError(\"invalid_goal_action\", \"action\");\n }\n if (record.action !== \"resume\" && (record.additionalAutoTurns !== undefined || record.response !== undefined)) {\n throw new ProtocolValidationError(\"Only resume accepts additionalAutoTurns or response\", \"action\");\n }\n if (record.action === \"confirm\") requiredGoalString(record.questionId, \"questionId\", 256);\n if ((record.action === \"pause\" || record.action === \"cancel\") && record.questionId !== undefined) {\n throw new ProtocolValidationError(\"This action does not answer a question\", \"questionId\");\n }\n return {\n requestId: requiredGoalString(record.requestId, \"requestId\", 128),\n expectedRevision: goalNonNegativeInteger(record.expectedRevision, \"expectedRevision\"),\n action: record.action,\n ...(record.questionId === undefined\n ? {}\n : {\n questionId: requiredGoalString(record.questionId, \"questionId\", 256),\n }),\n ...(record.response === undefined\n ? {}\n : {\n response: requiredGoalString(record.response, \"response\", MAX_GOAL_OBJECTIVE_CHARS),\n }),\n ...(record.additionalAutoTurns === undefined\n ? {}\n : {\n additionalAutoTurns: goalPositiveInteger(record.additionalAutoTurns, \"additionalAutoTurns\"),\n }),\n };\n}\n\nfunction goalRecord(value: unknown): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw new ProtocolValidationError(\"invalid_goal_input\", \"goal\");\n return value as Record<string, unknown>;\n}\n\nfunction requiredGoalString(value: unknown, field: string, max: number): string {\n if (typeof value !== \"string\" || !value.trim() || /[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F]/.test(value)) throw new ProtocolValidationError(`invalid_goal_${field}`, field);\n const normalized = value.trim();\n if (normalized.length > max) throw new ProtocolValidationError(`goal_${field}_limit_exceeded`, field);\n return normalized;\n}\n\nfunction goalNonNegativeInteger(value: unknown, field: string): number {\n if (!Number.isSafeInteger(value) || (value as number) < 0) throw new ProtocolValidationError(`invalid_goal_${field}`, field);\n return value as number;\n}\n\nfunction goalPositiveInteger(value: unknown, field: string): number {\n const integer = goalNonNegativeInteger(value, field);\n if (integer < 1 || integer > MAX_GOAL_AUTO_TURNS) throw new ProtocolValidationError(`invalid_goal_${field}`, field);\n return integer;\n}\nfunction parseGoalContent(record: Record<string, unknown>): Pick<CreateSessionGoalInput, \"items\" | \"attachments\"> {\n return {\n ...(record.items === undefined ? {} : { items: parseSessionInputItems(record.items) }),\n ...(record.attachments === undefined ? {} : { attachments: parsePromptAttachments(record.attachments) }),\n };\n}\n\n/** The caller supplies the trusted run identity; model input never sets it. */\nexport function parseGoalAssessment(value: unknown, binding: Pick<GoalAssessment, \"goalId\" | \"revision\" | \"runId\">): GoalAssessment {\n const record = goalRecord(value);\n const decision = record.decision;\n if (decision !== \"continue\" && decision !== \"complete\" && decision !== \"waiting_user\" && decision !== \"blocked\") {\n throw new ProtocolValidationError(\"invalid_goal_decision\", \"decision\");\n }\n if (!Array.isArray(record.evidence) || record.evidence.length > 32) throw new ProtocolValidationError(\"invalid_goal_evidence\", \"evidence\");\n const refs = record.evidenceRefs ?? [];\n if (!Array.isArray(refs) || refs.length > 32) throw new ProtocolValidationError(\"invalid_goal_evidence_refs\", \"evidenceRefs\");\n const savedWait = record.wait && typeof record.wait === \"object\" && !Array.isArray(record.wait) ? (record.wait as Record<string, unknown>) : undefined;\n const questionValue = record.question ?? (savedWait?.kind === \"user\" ? savedWait.question : undefined);\n const question = questionValue === undefined ? undefined : requiredGoalString(questionValue, \"question\", 4000);\n const progressAssessment = parseGoalProgressAssessment(record.progressAssessment);\n if ((decision === \"blocked\" || progressAssessment.kind === \"no_progress\") && !progressAssessment.blockerKey) {\n throw new ProtocolValidationError(\"goal_no_progress_requires_blocker_key\", \"progressAssessment\");\n }\n const requirements = parseGoalRequirements(record.requirements, binding);\n const remainingWork = parseGoalTextArray(record.remainingWork, \"remainingWork\");\n if (decision === \"complete\") {\n if (!requirements?.length) throw new ProtocolValidationError(\"goal_complete_requires_requirements\", \"requirements\");\n }\n const externalWait =\n progressAssessment.kind === \"waiting\" && savedWait?.kind === \"external\"\n ? {\n kind: \"external\" as const,\n handleId: requiredGoalString(savedWait.handleId, \"handleId\", 256),\n runId: binding.runId,\n deadlineAt: goalPositiveTimestamp(savedWait.deadlineAt, \"deadlineAt\"),\n }\n : undefined;\n return {\n ...binding,\n decision,\n progress: requiredGoalString(record.progress, \"progress\", 4000),\n progressAssessment,\n evidence: record.evidence.map((text) => requiredGoalString(text, \"evidence\", 4000)),\n evidenceRefs: refs.map((value) => {\n const ref = goalRecord(value);\n return {\n ...binding,\n messagePartId: requiredGoalString(ref.messagePartId, \"messagePartId\", 256),\n criterion: requiredGoalString(ref.criterion, \"criterion\", 4000),\n };\n }),\n ...(requirements === undefined ? {} : { requirements }),\n ...(remainingWork === undefined ? {} : { remainingWork }),\n ...(record.nextStep === undefined ? {} : { nextStep: requiredGoalString(record.nextStep, \"nextStep\", 4000) }),\n ...(record.reason === undefined ? {} : { reason: requiredGoalString(record.reason, \"reason\", 4000) }),\n ...(externalWait ? { wait: externalWait } : {}),\n ...(decision === \"waiting_user\"\n ? {\n wait: {\n kind: \"user\" as const,\n questionId: `goal-question-${binding.runId}`,\n question: question ?? \"请补充继续目标所需的信息。\",\n },\n }\n : {}),\n };\n}\n\nfunction goalPositiveTimestamp(value: unknown, field: string): number {\n if (!Number.isSafeInteger(value) || (value as number) <= 0) throw new ProtocolValidationError(`invalid_goal_${field}`, field);\n return value as number;\n}\n\nfunction parseGoalProgressAssessment(value: unknown): GoalProgressAssessment {\n const record = goalRecord(value);\n if (record.kind !== \"progress\" && record.kind !== \"waiting\" && record.kind !== \"no_progress\") {\n throw new ProtocolValidationError(\"invalid_goal_progress_kind\", \"progressAssessment\");\n }\n return {\n kind: record.kind,\n summary: requiredGoalString(record.summary, \"progressSummary\", 4000),\n ...(record.blockerKey === undefined\n ? {}\n : {\n blockerKey: requiredGoalString(record.blockerKey, \"blockerKey\", 256),\n }),\n };\n}\n\nfunction parseGoalTextArray(value: unknown, field: string): string[] | undefined {\n if (value === undefined) return undefined;\n if (!Array.isArray(value) || value.length > 64) throw new ProtocolValidationError(`invalid_goal_${field}`, field);\n return value.map((item) => requiredGoalString(item, field, 4000));\n}\n\nfunction parseGoalRequirements(value: unknown, binding: Pick<GoalAssessment, \"goalId\" | \"revision\" | \"runId\">): GoalRequirementAssessment[] | undefined {\n if (value === undefined) return undefined;\n if (!Array.isArray(value) || value.length > 64) throw new ProtocolValidationError(\"invalid_goal_requirements\", \"requirements\");\n return value.map((item) => {\n const record = goalRecord(item);\n if (record.status !== \"satisfied\" && record.status !== \"incomplete\" && record.status !== \"needs_user\") {\n throw new ProtocolValidationError(\"invalid_goal_requirement_status\", \"requirements\");\n }\n const rawRefs = record.evidenceRefs ?? [];\n if (!Array.isArray(rawRefs) || rawRefs.length > 32) throw new ProtocolValidationError(\"invalid_goal_requirement_evidence_refs\", \"requirements\");\n return {\n requirement: requiredGoalString(record.requirement, \"requirement\", 4000),\n source: requiredGoalString(record.source, \"source\", 4000),\n status: record.status,\n evidenceRefs: rawRefs.map((value) => {\n const ref = goalRecord(value);\n return {\n ...binding,\n messagePartId: requiredGoalString(ref.messagePartId, \"messagePartId\", 256),\n criterion: requiredGoalString(ref.criterion, \"criterion\", 4000),\n };\n }),\n };\n });\n}\n",
12
+ "import { parseAttachmentLimits, type AttachmentLimits } from \"./attachment.js\";\n\nexport const CURRENT_PROTOCOL_VERSION = 4;\nexport const PROTOCOL_VERSION_HEADER = \"x-openharness-protocol-version\";\n\nexport interface ProtocolVersion {\n version: number;\n}\n\nexport interface ServerCapabilities {\n serverVersion: string;\n protocol: ProtocolVersion;\n features: Record<string, number>;\n attachments?: AttachmentTransferCapabilities;\n agentEnvironments?: AgentEnvironmentCapabilities;\n}\n\nexport interface AgentEnvironmentCapabilities {\n native: true;\n wsl: boolean;\n}\n\nexport type AttachmentUploadMode = \"single\" | \"resumable\";\n\nexport interface AttachmentTransferCapabilities {\n limits: AttachmentLimits;\n uploadModes: readonly [\"single\"] | readonly [\"single\", \"resumable\"];\n}\n\nexport interface ClientProtocolSupport {\n version: number;\n}\n\nexport interface ProtocolCompatibility {\n compatible: boolean;\n reason?: string;\n}\n\nexport function parseServerCapabilities(value: unknown): ServerCapabilities {\n if (!isRecord(value))\n throw new Error(\"Capabilities response must be an object\");\n if (typeof value.serverVersion !== \"string\")\n throw new Error(\"serverVersion must be a string\");\n if (!isRecord(value.protocol)) throw new Error(\"protocol must be an object\");\n const version = positiveInteger(value.protocol.version, \"protocol.version\");\n if (!isRecord(value.features)) throw new Error(\"features must be an object\");\n const features: Record<string, number> = {};\n for (const [name, version] of Object.entries(value.features)) {\n features[name] = positiveInteger(version, `features.${name}`);\n }\n const attachments = parseAttachmentTransferCapabilities(value.attachments);\n const agentEnvironments = parseAgentEnvironmentCapabilities(\n value.agentEnvironments,\n );\n return {\n serverVersion: value.serverVersion,\n protocol: { version },\n features,\n ...(attachments ? { attachments } : {}),\n ...(agentEnvironments ? { agentEnvironments } : {}),\n };\n}\n\nfunction parseAgentEnvironmentCapabilities(\n value: unknown,\n): AgentEnvironmentCapabilities | undefined {\n if (value === undefined) return undefined;\n if (\n !isRecord(value) ||\n value.native !== true ||\n typeof value.wsl !== \"boolean\"\n ) {\n throw new Error(\n \"agentEnvironments must contain native=true and a boolean wsl value\",\n );\n }\n return { native: true, wsl: value.wsl };\n}\n\nexport function checkProtocolCompatibility(\n server: ServerCapabilities,\n client: ClientProtocolSupport,\n): ProtocolCompatibility {\n if (client.version !== server.protocol.version) {\n return {\n compatible: false,\n reason: `Client protocol ${client.version} does not match server protocol ${server.protocol.version}`,\n };\n }\n return { compatible: true };\n}\n\nexport function supportsFeature(\n capabilities: ServerCapabilities,\n feature: string,\n minimumVersion = 1,\n): boolean {\n return (capabilities.features[feature] ?? 0) >= minimumVersion;\n}\n\nfunction positiveInteger(value: unknown, field: string): number {\n if (!Number.isInteger(value) || Number(value) < 1)\n throw new Error(`${field} must be a positive integer`);\n return Number(value);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseAttachmentTransferCapabilities(\n value: unknown,\n): AttachmentTransferCapabilities | undefined {\n if (value === undefined) return undefined;\n if (!isRecord(value)) throw new Error(\"attachments must be an object\");\n if (!Array.isArray(value.uploadModes) || value.uploadModes.length === 0) {\n throw new Error(\"attachments.uploadModes must be a non-empty array\");\n }\n if (\n value.uploadModes[0] !== \"single\" ||\n value.uploadModes.length > 2 ||\n (value.uploadModes.length === 2 && value.uploadModes[1] !== \"resumable\")\n ) {\n throw new Error(\n 'attachments.uploadModes must be [\"single\"] or [\"single\", \"resumable\"]',\n );\n }\n const uploadModes = value.uploadModes as [\"single\"] | [\"single\", \"resumable\"];\n return {\n limits: parseAttachmentLimits(value.limits),\n uploadModes,\n };\n}\n",
13
+ "import type { AdmitPromptAttachmentInput } from \"./session.js\";\nimport type { SessionUserInputItem } from \"./session-input-items.js\";\nimport { parsePromptAttachments, parseSessionInputItems, ProtocolValidationError } from \"./requests.js\";\n\nexport type GoalStatus = \"active\" | \"waiting_user\" | \"blocked\" | \"paused\" | \"completed\" | \"cancelled\";\n\nexport type GoalAction = \"pause\" | \"resume\" | \"cancel\" | \"confirm\";\n\nexport type GoalWait =\n | {\n kind: \"user\";\n questionId: string;\n question: string;\n replyInputId?: string;\n }\n | { kind: \"approval\"; permissionRequestId: string }\n | { kind: \"external\"; handleId: string; runId: string; deadlineAt: number };\n\nexport interface GoalEvidenceRef {\n goalId: string;\n revision: number;\n runId: string;\n messagePartId: string;\n criterion: string;\n}\n\nexport interface GoalRequirementAssessment {\n requirement: string;\n source: string;\n status: \"satisfied\" | \"incomplete\" | \"needs_user\";\n evidenceRefs: GoalEvidenceRef[];\n}\n\nexport interface GoalProgressAssessment {\n kind: \"progress\" | \"waiting\" | \"no_progress\";\n summary: string;\n blockerKey?: string;\n}\n\nexport interface SessionGoal {\n id: string;\n sessionId: string;\n objective: string;\n pluginId?: string;\n revision: number;\n status: GoalStatus;\n maxAutoTurns: number;\n autoTurnsUsed: number;\n noProgressCount: number;\n blockerKey?: string;\n currentRunId?: string;\n reason?: string;\n wait?: GoalWait;\n evidence: string[];\n assessment?: GoalAssessment;\n createdAt: number;\n updatedAt: number;\n}\n\nexport interface CreateSessionGoalInput {\n requestId: string;\n objective: string;\n maxAutoTurns?: number;\n items?: SessionUserInputItem[];\n attachments?: AdmitPromptAttachmentInput[];\n}\n\nexport interface UpdateSessionGoalInput {\n requestId: string;\n expectedRevision: number;\n objective: string;\n items?: SessionUserInputItem[];\n attachments?: AdmitPromptAttachmentInput[];\n}\n\nexport interface GoalActionInput {\n requestId: string;\n expectedRevision: number;\n action: GoalAction;\n additionalAutoTurns?: number;\n questionId?: string;\n response?: string;\n}\n\nexport interface GoalAssessment {\n goalId: string;\n revision: number;\n runId: string;\n decision: \"continue\" | \"complete\" | \"waiting_user\" | \"blocked\";\n progress: string;\n progressAssessment: GoalProgressAssessment;\n evidence: string[];\n evidenceRefs: GoalEvidenceRef[];\n requirements?: GoalRequirementAssessment[];\n remainingWork?: string[];\n nextStep?: string;\n reason?: string;\n wait?: GoalWait;\n}\n\nexport const DEFAULT_GOAL_AUTO_TURNS = 20;\nexport const MAX_GOAL_AUTO_TURNS = 1_000;\nexport const MAX_GOAL_OBJECTIVE_CHARS = 32_000;\n\nexport function parseCreateSessionGoalInput(value: unknown): CreateSessionGoalInput {\n const record = goalRecord(value);\n return {\n requestId: requiredGoalString(record.requestId, \"requestId\", 128),\n objective: requiredGoalString(record.objective, \"objective\", MAX_GOAL_OBJECTIVE_CHARS),\n ...(record.maxAutoTurns === undefined\n ? {}\n : {\n maxAutoTurns: goalPositiveInteger(record.maxAutoTurns, \"maxAutoTurns\"),\n }),\n ...parseGoalContent(record),\n };\n}\n\nexport function parseUpdateSessionGoalInput(value: unknown): UpdateSessionGoalInput {\n const record = goalRecord(value);\n return {\n requestId: requiredGoalString(record.requestId, \"requestId\", 128),\n expectedRevision: goalNonNegativeInteger(record.expectedRevision, \"expectedRevision\"),\n objective: requiredGoalString(record.objective, \"objective\", MAX_GOAL_OBJECTIVE_CHARS),\n ...parseGoalContent(record),\n };\n}\n\nexport function parseGoalActionInput(value: unknown): GoalActionInput {\n const record = goalRecord(value);\n if (record.action !== \"pause\" && record.action !== \"resume\" && record.action !== \"cancel\" && record.action !== \"confirm\") {\n throw new ProtocolValidationError(\"invalid_goal_action\", \"action\");\n }\n if (record.action !== \"resume\" && (record.additionalAutoTurns !== undefined || record.response !== undefined)) {\n throw new ProtocolValidationError(\"Only resume accepts additionalAutoTurns or response\", \"action\");\n }\n if (record.action === \"confirm\") requiredGoalString(record.questionId, \"questionId\", 256);\n if ((record.action === \"pause\" || record.action === \"cancel\") && record.questionId !== undefined) {\n throw new ProtocolValidationError(\"This action does not answer a question\", \"questionId\");\n }\n return {\n requestId: requiredGoalString(record.requestId, \"requestId\", 128),\n expectedRevision: goalNonNegativeInteger(record.expectedRevision, \"expectedRevision\"),\n action: record.action,\n ...(record.questionId === undefined\n ? {}\n : {\n questionId: requiredGoalString(record.questionId, \"questionId\", 256),\n }),\n ...(record.response === undefined\n ? {}\n : {\n response: requiredGoalString(record.response, \"response\", MAX_GOAL_OBJECTIVE_CHARS),\n }),\n ...(record.additionalAutoTurns === undefined\n ? {}\n : {\n additionalAutoTurns: goalPositiveInteger(record.additionalAutoTurns, \"additionalAutoTurns\"),\n }),\n };\n}\n\nfunction goalRecord(value: unknown): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw new ProtocolValidationError(\"invalid_goal_input\", \"goal\");\n return value as Record<string, unknown>;\n}\n\nfunction requiredGoalString(value: unknown, field: string, max: number): string {\n if (typeof value !== \"string\" || !value.trim() || /[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F]/.test(value)) throw new ProtocolValidationError(`invalid_goal_${field}`, field);\n const normalized = value.trim();\n if (normalized.length > max) throw new ProtocolValidationError(`goal_${field}_limit_exceeded`, field);\n return normalized;\n}\n\nfunction goalNonNegativeInteger(value: unknown, field: string): number {\n if (!Number.isSafeInteger(value) || (value as number) < 0) throw new ProtocolValidationError(`invalid_goal_${field}`, field);\n return value as number;\n}\n\nfunction goalPositiveInteger(value: unknown, field: string): number {\n const integer = goalNonNegativeInteger(value, field);\n if (integer < 1 || integer > MAX_GOAL_AUTO_TURNS) throw new ProtocolValidationError(`invalid_goal_${field}`, field);\n return integer;\n}\nfunction parseGoalContent(record: Record<string, unknown>): Pick<CreateSessionGoalInput, \"items\" | \"attachments\"> {\n return {\n ...(record.items === undefined ? {} : { items: parseSessionInputItems(record.items) }),\n ...(record.attachments === undefined ? {} : { attachments: parsePromptAttachments(record.attachments) }),\n };\n}\n\n/** The caller supplies the trusted run identity; model input never sets it. */\nexport function parseGoalAssessment(value: unknown, binding: Pick<GoalAssessment, \"goalId\" | \"revision\" | \"runId\">): GoalAssessment {\n const record = goalRecord(value);\n const decision = record.decision;\n if (decision !== \"continue\" && decision !== \"complete\" && decision !== \"waiting_user\" && decision !== \"blocked\") {\n throw new ProtocolValidationError(\"invalid_goal_decision\", \"decision\");\n }\n if (!Array.isArray(record.evidence) || record.evidence.length > 32) throw new ProtocolValidationError(\"invalid_goal_evidence\", \"evidence\");\n const refs = record.evidenceRefs ?? [];\n if (!Array.isArray(refs) || refs.length > 32) throw new ProtocolValidationError(\"invalid_goal_evidence_refs\", \"evidenceRefs\");\n const savedWait = record.wait && typeof record.wait === \"object\" && !Array.isArray(record.wait) ? (record.wait as Record<string, unknown>) : undefined;\n const questionValue = record.question ?? (savedWait?.kind === \"user\" ? savedWait.question : undefined);\n const question = questionValue === undefined ? undefined : requiredGoalString(questionValue, \"question\", 4000);\n const progressAssessment = parseGoalProgressAssessment(record.progressAssessment);\n if ((decision === \"blocked\" || progressAssessment.kind === \"no_progress\") && !progressAssessment.blockerKey) {\n throw new ProtocolValidationError(\"goal_no_progress_requires_blocker_key\", \"progressAssessment\");\n }\n const requirements = parseGoalRequirements(record.requirements, binding);\n const remainingWork = parseGoalTextArray(record.remainingWork, \"remainingWork\");\n if (decision === \"complete\") {\n if (!requirements?.length) throw new ProtocolValidationError(\"goal_complete_requires_requirements\", \"requirements\");\n }\n const externalWait =\n progressAssessment.kind === \"waiting\" && savedWait?.kind === \"external\"\n ? {\n kind: \"external\" as const,\n handleId: requiredGoalString(savedWait.handleId, \"handleId\", 256),\n runId: binding.runId,\n deadlineAt: goalPositiveTimestamp(savedWait.deadlineAt, \"deadlineAt\"),\n }\n : undefined;\n return {\n ...binding,\n decision,\n progress: requiredGoalString(record.progress, \"progress\", 4000),\n progressAssessment,\n evidence: record.evidence.map((text) => requiredGoalString(text, \"evidence\", 4000)),\n evidenceRefs: refs.map((value) => {\n const ref = goalRecord(value);\n return {\n ...binding,\n messagePartId: requiredGoalString(ref.messagePartId, \"messagePartId\", 256),\n criterion: requiredGoalString(ref.criterion, \"criterion\", 4000),\n };\n }),\n ...(requirements === undefined ? {} : { requirements }),\n ...(remainingWork === undefined ? {} : { remainingWork }),\n ...(record.nextStep === undefined ? {} : { nextStep: requiredGoalString(record.nextStep, \"nextStep\", 4000) }),\n ...(record.reason === undefined ? {} : { reason: requiredGoalString(record.reason, \"reason\", 4000) }),\n ...(externalWait ? { wait: externalWait } : {}),\n ...(decision === \"waiting_user\"\n ? {\n wait: {\n kind: \"user\" as const,\n questionId: `goal-question-${binding.runId}`,\n question: question ?? \"请补充继续目标所需的信息。\",\n },\n }\n : {}),\n };\n}\n\nfunction goalPositiveTimestamp(value: unknown, field: string): number {\n if (!Number.isSafeInteger(value) || (value as number) <= 0) throw new ProtocolValidationError(`invalid_goal_${field}`, field);\n return value as number;\n}\n\nfunction parseGoalProgressAssessment(value: unknown): GoalProgressAssessment {\n const record = goalRecord(value);\n if (record.kind !== \"progress\" && record.kind !== \"waiting\" && record.kind !== \"no_progress\") {\n throw new ProtocolValidationError(\"invalid_goal_progress_kind\", \"progressAssessment\");\n }\n return {\n kind: record.kind,\n summary: requiredGoalString(record.summary, \"progressSummary\", 4000),\n ...(record.blockerKey === undefined\n ? {}\n : {\n blockerKey: requiredGoalString(record.blockerKey, \"blockerKey\", 256),\n }),\n };\n}\n\nfunction parseGoalTextArray(value: unknown, field: string): string[] | undefined {\n if (value === undefined) return undefined;\n if (!Array.isArray(value) || value.length > 64) throw new ProtocolValidationError(`invalid_goal_${field}`, field);\n return value.map((item) => requiredGoalString(item, field, 4000));\n}\n\nfunction parseGoalRequirements(value: unknown, binding: Pick<GoalAssessment, \"goalId\" | \"revision\" | \"runId\">): GoalRequirementAssessment[] | undefined {\n if (value === undefined) return undefined;\n if (!Array.isArray(value) || value.length > 64) throw new ProtocolValidationError(\"invalid_goal_requirements\", \"requirements\");\n return value.map((item) => {\n const record = goalRecord(item);\n if (record.status !== \"satisfied\" && record.status !== \"incomplete\" && record.status !== \"needs_user\") {\n throw new ProtocolValidationError(\"invalid_goal_requirement_status\", \"requirements\");\n }\n const rawRefs = record.evidenceRefs ?? [];\n if (!Array.isArray(rawRefs) || rawRefs.length > 32) throw new ProtocolValidationError(\"invalid_goal_requirement_evidence_refs\", \"requirements\");\n return {\n requirement: requiredGoalString(record.requirement, \"requirement\", 4000),\n source: requiredGoalString(record.source, \"source\", 4000),\n status: record.status,\n evidenceRefs: rawRefs.map((value) => {\n const ref = goalRecord(value);\n return {\n ...binding,\n messagePartId: requiredGoalString(ref.messagePartId, \"messagePartId\", 256),\n criterion: requiredGoalString(ref.criterion, \"criterion\", 4000),\n };\n }),\n };\n });\n}\n",
14
14
  "export * from \"./session.js\";\nexport * from \"./runtime-config.js\";\nexport * from \"./requests.js\";\nexport * from \"./job.js\";\nexport * from \"./terminal.js\";\nexport * from \"./serialization.js\";\nexport * from \"./channel.js\";\nexport * from \"./capabilities.js\";\nexport * from \"./attachment.js\";\nexport * from \"./session-input-items.js\";\nexport * from \"./session-goals.js\";\n",
15
- "/**\n * daemon HTTP/SSE 客户端。\n *\n * 包装 `@openharness/server` 的 REST 路由与 `/events/stream` SSE;\n * 不含本地状态归并(见 `reducer.ts` / `sync.ts`)。\n */\n\nimport type {\n AdmitClientPromptInput,\n CommandCatalogEntry,\n CreateClientSessionInput,\n EditLatestClientPromptInput,\n CancelQueuedClientPromptInput,\n CancelQueuedPromptResponse,\n EventSyncOptions,\n ForkClientSessionInput,\n InterruptSessionResponse,\n ListClientMessagePartsOptions,\n ListCommandsOptions,\n ListEventsOptions,\n ListMessagesOptions,\n ListPermissionsOptions,\n ListSessionsOptions,\n ListProjectsOptions,\n ProjectRecord,\n AgentPersonaInfo,\n AuthStatus,\n CompactSessionResponse,\n CreateBackgroundShellInput,\n CreateBackgroundShellResult,\n CustomProviderInput,\n CreateScheduledTaskInput,\n HookInfo,\n ReloadPluginsResponse,\n RewindSessionResponse,\n McpServerStatus,\n MemoryEntryRecord,\n MemoryListResponse,\n ModelProviderInfo,\n OpenHarnessClientOptions,\n OpenHarnessServerHealth,\n PermissionRequestRecord,\n PluginInfo,\n PluginArchivePreview,\n SkillSnapshot,\n PromoteQueuedClientPromptInput,\n PromoteQueuedPromptResponse,\n PromptResponse,\n ResumeInterruptedRunInput,\n ResumeInterruptedRunResponse,\n ProviderInfo,\n OutputStyleInfo,\n RememberSessionResponse,\n ScheduledRunRecord,\n ScheduledTaskRecord,\n ScheduledTaskStatusSummary,\n ReplyPermissionInput,\n SessionEventRecord,\n SessionExportResponse,\n SessionMessagePartRecord,\n SessionMessageRecord,\n SessionRecord,\n SessionStateSnapshot,\n SessionUsageResponse,\n StartDreamResponse,\n UpdateClientSessionInput,\n UpdateScheduledTaskInput,\n UploadAttachmentInput,\n DownloadAttachmentOptions,\n AttachmentAssetRecord,\n AttachmentStorageGcResult,\n AttachmentStorageRepairResult,\n AttachmentStorageReport,\n} from \"../types/index.js\";\nimport type { CreateSessionGoalInput, GoalActionInput, SessionGoal, UpdateSessionGoalInput } from \"@openharness/protocol\";\nimport type {\n JobKind,\n JobReadResult,\n JobSnapshot,\n JobStatus,\n JobWaitResult,\n TerminalCreateRequest,\n TerminalEvent,\n TerminalReadResult,\n TerminalResizeRequest,\n TerminalSessionInfo,\n TerminalSignal,\n TerminalSource,\n TerminalWriteRequest,\n DurableChannelMessageInput,\n DurableChannelMessageResult,\n RecordChannelDeliveryInput,\n ChannelDeliveryRecord,\n ChannelStatusSnapshot,\n ClientProtocolSupport,\n ServerCapabilities,\n} from \"@openharness/protocol\";\nimport {\n checkProtocolCompatibility,\n decodeJobReadResult,\n decodeJobSnapshot,\n decodeJobWaitResult,\n decodeSessionEventRecord,\n decodeSessionStateSnapshot,\n decodeTerminalEvent,\n decodeTerminalReadResult,\n decodeTerminalSessionInfo,\n ProtocolDataError,\n parseServerCapabilities,\n parseAttachmentAssetRecord,\n} from \"@openharness/protocol\";\n\nlet promptRequestCounter = 0;\n\nfunction responseField(value: unknown, field: string): unknown {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new ProtocolDataError(\"Response body must be an object\");\n }\n if (!(field in value)) {\n throw new ProtocolDataError(`Response body is missing ${field}`, field);\n }\n return (value as Record<string, unknown>)[field];\n}\n\nfunction responseArray<T>(\n value: unknown,\n field: string,\n decode: (item: unknown) => T,\n): T[] {\n const items = responseField(value, field);\n if (!Array.isArray(items)) {\n throw new ProtocolDataError(`Response ${field} must be an array`, field);\n }\n return items.map(decode);\n}\n\n/** Normalize a daemon base URL without accepting credentials or request fragments. */\nexport function normalizeDaemonBaseUrl(value: string): string {\n const raw = value.trim();\n if (!raw) throw new Error(\"Daemon URL is required\");\n\n let url: URL;\n try {\n url = new URL(raw);\n } catch {\n throw new Error(\"Daemon URL must be an absolute http or https URL\");\n }\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n throw new Error(\"Daemon URL must use http or https\");\n }\n if (url.username || url.password) {\n throw new Error(\n \"Daemon URL must not contain credentials; use a bearer token instead\",\n );\n }\n if (url.search || url.hash) {\n throw new Error(\n \"Daemon URL must not contain query parameters or a fragment\",\n );\n }\n\n const pathname = url.pathname.replace(/\\/+$/, \"\");\n return `${url.origin}${pathname === \"/\" ? \"\" : pathname}`;\n}\n\n/** Generate a caller-stable id for one prompt admission attempt. */\nexport function createPromptRequestId(): string {\n if (typeof globalThis.crypto?.randomUUID === \"function\")\n return globalThis.crypto.randomUUID();\n promptRequestCounter += 1;\n return `prompt-${Date.now().toString(36)}-${promptRequestCounter.toString(36)}`;\n}\n\n/** HTTP API 非 2xx 时抛出;携带 status 与原始响应体。 */\nexport class OpenHarnessApiError extends Error {\n constructor(\n message: string,\n readonly status: number,\n readonly body: unknown,\n ) {\n super(message);\n this.name = \"OpenHarnessApiError\";\n }\n}\n\n/**\n * 面向 daemon 的 typed fetch 客户端。\n * 构造时传入 `baseUrl` 与可选 Bearer `token`(通常来自 daemon registry)。\n */\nexport class OpenHarnessClient {\n private readonly baseUrl: string;\n private readonly token?: string;\n private readonly fetchImpl: typeof fetch;\n\n constructor(options: OpenHarnessClientOptions) {\n this.baseUrl = normalizeDaemonBaseUrl(options.baseUrl);\n this.token = options.token;\n this.fetchImpl = options.fetch ?? fetch;\n }\n\n /** `GET /health` */\n async health(\n options: { signal?: AbortSignal } = {},\n ): Promise<OpenHarnessServerHealth> {\n return this.request<OpenHarnessServerHealth>(\"/health\", {\n auth: false,\n signal: options.signal,\n });\n }\n\n /** 连接产品应先调用它,再根据 features 决定显示哪些功能。 */\n async capabilities(\n options: { signal?: AbortSignal; support?: ClientProtocolSupport } = {},\n ): Promise<ServerCapabilities> {\n const value = await this.request<unknown>(\"/capabilities\", {\n auth: false,\n signal: options.signal,\n });\n const capabilities = parseServerCapabilities(value);\n const compatibility = checkProtocolCompatibility(\n capabilities,\n options.support ?? { version: 2 },\n );\n if (!compatibility.compatible) {\n throw new IncompatibleProtocolError(\n capabilities,\n compatibility.reason ??\n \"Client and server protocol versions are incompatible\",\n );\n }\n return capabilities;\n }\n\n /** `POST /attachments` — upload bytes without JSON or multipart buffering. */\n async uploadAttachment(\n input: UploadAttachmentInput,\n ): Promise<AttachmentAssetRecord> {\n const headers = this.headers();\n headers[\"x-openharness-filename\"] = encodeURIComponent(input.displayName);\n if (input.mediaType) headers[\"content-type\"] = input.mediaType;\n const init: RequestInit & { duplex?: \"half\" } = {\n method: \"POST\",\n headers,\n body: input.body as RequestInit[\"body\"],\n signal: input.signal,\n };\n if (isReadableStream(input.body)) init.duplex = \"half\";\n const response = await this.fetchImpl(`${this.baseUrl}/attachments`, init);\n if (!response.ok) await this.throwResponseError(response);\n return parseAttachmentAssetRecord(await response.json());\n }\n\n async getAttachment(\n id: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<AttachmentAssetRecord> {\n const value = await this.request<unknown>(\n `/attachments/${encodeURIComponent(id)}`,\n { signal: options.signal },\n );\n return parseAttachmentAssetRecord(value);\n }\n\n /** Returns the raw response so callers can consume the body as a stream. */\n async downloadAttachment(\n id: string,\n options: DownloadAttachmentOptions = {},\n ): Promise<Response> {\n const range = attachmentRangeHeader(options.range);\n const headers = this.headers();\n if (range) headers.range = range;\n const response = await this.fetchImpl(\n `${this.baseUrl}/attachments/${encodeURIComponent(id)}/content`,\n { method: \"GET\", headers, signal: options.signal },\n );\n if (!response.ok) await this.throwResponseError(response);\n return response;\n }\n\n async deleteAttachment(\n id: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<AttachmentAssetRecord> {\n const value = await this.request<unknown>(\n `/attachments/${encodeURIComponent(id)}`,\n { method: \"DELETE\", signal: options.signal },\n );\n return parseAttachmentAssetRecord(value);\n }\n\n async scanAttachmentStorage(\n options: { signal?: AbortSignal } = {},\n ): Promise<AttachmentStorageReport> {\n return await this.request<AttachmentStorageReport>(\"/attachments/storage\", {\n signal: options.signal,\n });\n }\n\n async repairAttachmentStorage(\n options: { signal?: AbortSignal } = {},\n ): Promise<AttachmentStorageRepairResult> {\n return await this.request<AttachmentStorageRepairResult>(\n \"/attachments/storage/actions\",\n {\n method: \"POST\",\n body: { action: \"repair-safe\" },\n signal: options.signal,\n },\n );\n }\n\n async gcAttachmentStorage(\n options: { signal?: AbortSignal } = {},\n ): Promise<AttachmentStorageGcResult> {\n return await this.request<AttachmentStorageGcResult>(\n \"/attachments/storage/actions\",\n {\n method: \"POST\",\n body: { action: \"gc\" },\n signal: options.signal,\n },\n );\n }\n\n async handleChannelMessage(\n input: DurableChannelMessageInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<DurableChannelMessageResult> {\n return await this.request<DurableChannelMessageResult>(\n \"/channels/messages\",\n { method: \"POST\", body: input, signal: options.signal },\n );\n }\n\n async recordChannelDelivery(\n deliveryId: string,\n input: RecordChannelDeliveryInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<ChannelDeliveryRecord> {\n const response = await this.request<{ delivery: ChannelDeliveryRecord }>(\n `/channels/deliveries/${encodeURIComponent(deliveryId)}/result`,\n { method: \"POST\", body: input, signal: options.signal },\n );\n return response.delivery;\n }\n\n async getChannelStatus(\n options: { connector?: string; limit?: number; signal?: AbortSignal } = {},\n ): Promise<ChannelStatusSnapshot> {\n const { signal, ...query } = options;\n return await this.request<ChannelStatusSnapshot>(\n this.path(\"/channels/status\", query),\n { signal },\n );\n }\n\n async listPendingChannelDeliveries(\n options: { connector?: string; limit?: number; signal?: AbortSignal } = {},\n ): Promise<ChannelDeliveryRecord[]> {\n const { signal, ...query } = options;\n const response = await this.request<{\n deliveries: ChannelDeliveryRecord[];\n }>(this.path(\"/channels/deliveries/pending\", query), { signal });\n return response.deliveries;\n }\n\n /** `GET /commands?cwd=` — cwd-scoped slash command catalog for autocomplete. */\n async listCommands(\n options: ListCommandsOptions & { signal?: AbortSignal },\n ): Promise<CommandCatalogEntry[]> {\n const { signal, ...query } = options;\n const response = await this.request<{ commands: CommandCatalogEntry[] }>(\n this.path(\"/commands\", query),\n { signal },\n );\n return response.commands;\n }\n\n /** `GET /settings` */\n async getSettings(\n options: { signal?: AbortSignal } = {},\n ): Promise<Record<string, unknown>> {\n const response = await this.request<{ settings: Record<string, unknown> }>(\n \"/settings\",\n { signal: options.signal },\n );\n return response.settings;\n }\n\n /** `PATCH /settings` */\n async patchSettings(\n patch: Record<string, unknown>,\n options: { signal?: AbortSignal } = {},\n ): Promise<Record<string, unknown>> {\n const response = await this.request<{ settings: Record<string, unknown> }>(\n \"/settings\",\n {\n method: \"PATCH\",\n body: patch,\n signal: options.signal,\n },\n );\n return response.settings;\n }\n\n /** `GET /providers` */\n async listProviders(\n options: { signal?: AbortSignal } = {},\n ): Promise<ProviderInfo[]> {\n const response = await this.request<{ providers: ProviderInfo[] }>(\n \"/providers\",\n { signal: options.signal },\n );\n return response.providers;\n }\n\n async createCustomProvider(\n input: CustomProviderInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<ProviderInfo> {\n const response = await this.request<{ provider: ProviderInfo }>(\n \"/providers/custom\",\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n return response.provider;\n }\n\n async connectCatalogProvider(\n id: string,\n apiKey: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<ProviderInfo> {\n const response = await this.request<{ provider: ProviderInfo }>(\n `/providers/catalog/${encodeURIComponent(id)}/connect`,\n { method: \"POST\", body: { apiKey }, signal: options.signal },\n );\n return response.provider;\n }\n\n async disconnectCatalogProvider(\n id: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<void> {\n await this.request<{ ok: true }>(\n `/providers/catalog/${encodeURIComponent(id)}/connect`,\n { method: \"DELETE\", signal: options.signal },\n );\n }\n\n async updateCustomProvider(\n id: string,\n input: CustomProviderInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<ProviderInfo> {\n const response = await this.request<{ provider: ProviderInfo }>(\n `/providers/custom/${encodeURIComponent(id)}`,\n { method: \"PATCH\", body: input, signal: options.signal },\n );\n return response.provider;\n }\n\n async removeCustomProvider(\n id: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<void> {\n await this.request<{ ok: true }>(\n `/providers/custom/${encodeURIComponent(id)}`,\n {\n method: \"DELETE\",\n signal: options.signal,\n },\n );\n }\n\n /** `GET /models` */\n async listModels(\n options: { signal?: AbortSignal } = {},\n ): Promise<ModelProviderInfo[]> {\n const response = await this.request<{ providers: ModelProviderInfo[] }>(\n \"/models\",\n { signal: options.signal },\n );\n return response.providers;\n }\n\n /** `GET /sessions/:id/mcp` */\n async getSessionMcp(\n sessionId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<McpServerStatus[]> {\n const response = await this.request<{ servers: McpServerStatus[] }>(\n `/sessions/${encodeURIComponent(sessionId)}/mcp`,\n { signal: options.signal },\n );\n return response.servers;\n }\n\n /** `GET /memory?cwd=` */\n async listMemory(options: {\n cwd: string;\n signal?: AbortSignal;\n }): Promise<MemoryListResponse> {\n const { signal, ...query } = options;\n return await this.request<MemoryListResponse>(this.path(\"/memory\", query), {\n signal,\n });\n }\n\n /** `GET /memory/:id?cwd=` */\n async getMemory(\n entryId: string,\n options: { cwd: string; signal?: AbortSignal },\n ): Promise<MemoryEntryRecord> {\n const { signal, cwd } = options;\n const response = await this.request<{ entry: MemoryEntryRecord }>(\n this.path(`/memory/${encodeURIComponent(entryId)}`, { cwd }),\n { signal },\n );\n return response.entry;\n }\n\n /** `POST /memory` */\n async addMemory(\n input: { cwd: string; content: string; tags?: string[] },\n options: { signal?: AbortSignal } = {},\n ): Promise<MemoryEntryRecord> {\n const response = await this.request<{ entry: MemoryEntryRecord }>(\n \"/memory\",\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n return response.entry;\n }\n\n /** `DELETE /memory/:id?cwd=` */\n async removeMemory(\n entryId: string,\n options: { cwd: string; signal?: AbortSignal },\n ): Promise<void> {\n const { signal, cwd } = options;\n await this.request<{ deleted: boolean }>(\n this.path(`/memory/${encodeURIComponent(entryId)}`, { cwd }),\n { method: \"DELETE\", signal },\n );\n }\n\n /** `GET /auth` */\n async getAuthStatus(\n options: { signal?: AbortSignal } = {},\n ): Promise<AuthStatus> {\n const response = await this.request<{ auth: AuthStatus }>(\"/auth\", {\n signal: options.signal,\n });\n return response.auth;\n }\n\n /** `POST /auth/login` */\n async authLogin(\n input: { provider: string; apiKey?: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<{ message: string }> {\n return await this.request<{ message: string }>(\"/auth/login\", {\n method: \"POST\",\n body: input,\n signal: options.signal,\n });\n }\n\n /** `POST /auth/logout` */\n async authLogout(\n input: { provider: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<{ message: string }> {\n return await this.request<{ message: string }>(\"/auth/logout\", {\n method: \"POST\",\n body: input,\n signal: options.signal,\n });\n }\n\n /** `GET /context?cwd=` */\n async getContextPreview(options: {\n cwd: string;\n signal?: AbortSignal;\n }): Promise<string> {\n const { signal, ...query } = options;\n const response = await this.request<{ report: string }>(\n this.path(\"/context\", query),\n { signal },\n );\n return response.report;\n }\n\n /** `GET /context/status?cwd=` */\n async getContextStatus(options: {\n cwd: string;\n signal?: AbortSignal;\n }): Promise<string> {\n const { signal, ...query } = options;\n const response = await this.request<{ report: string }>(\n this.path(\"/context/status\", query),\n { signal },\n );\n return response.report;\n }\n\n /** `GET /context/usage?cwd=&sessionId=&refresh=` */\n async getContextUsage(options: {\n cwd: string;\n sessionId?: string;\n refresh?: boolean;\n previousContextWindow?: number;\n signal?: AbortSignal;\n }): Promise<{ snapshot: unknown; report: string }> {\n const { signal, refresh, previousContextWindow, ...rest } = options;\n const query: Record<string, string | undefined> = {\n ...rest,\n ...(refresh !== undefined ? { refresh: refresh ? \"true\" : \"false\" } : {}),\n ...(previousContextWindow !== undefined\n ? { previousContextWindow: String(previousContextWindow) }\n : {}),\n };\n return await this.request<{ snapshot: unknown; report: string }>(\n this.path(\"/context/usage\", query),\n { signal },\n );\n }\n\n /** `POST /sessions/:id/compact` */\n async compactSession(\n sessionId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<CompactSessionResponse> {\n return await this.request<CompactSessionResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/compact`,\n { method: \"POST\", signal: options.signal },\n );\n }\n\n async getSessionGoal(sessionId: string): Promise<SessionGoal | null> {\n const response = await this.request<{ goal: SessionGoal | null }>(`/sessions/${encodeURIComponent(sessionId)}/goal`);\n return response.goal;\n }\n\n async createSessionGoal(sessionId: string, input: CreateSessionGoalInput): Promise<SessionGoal> {\n const response = await this.request<{ goal: SessionGoal }>(`/sessions/${encodeURIComponent(sessionId)}/goals`, { method: \"POST\", body: input });\n return response.goal;\n }\n\n async updateSessionGoal(sessionId: string, goalId: string, input: UpdateSessionGoalInput): Promise<SessionGoal> {\n const response = await this.request<{ goal: SessionGoal }>(`/sessions/${encodeURIComponent(sessionId)}/goals/${encodeURIComponent(goalId)}`, { method: \"PATCH\", body: input });\n return response.goal;\n }\n\n async applySessionGoalAction(sessionId: string, goalId: string, input: GoalActionInput): Promise<SessionGoal> {\n const response = await this.request<{ goal: SessionGoal }>(`/sessions/${encodeURIComponent(sessionId)}/goals/${encodeURIComponent(goalId)}/actions`, { method: \"POST\", body: input });\n return response.goal;\n }\n\n /** `POST /sessions/:id/rewind` */\n async rewindSession(\n sessionId: string,\n input: { count?: number } = {},\n options: { signal?: AbortSignal } = {},\n ): Promise<RewindSessionResponse> {\n return await this.request<RewindSessionResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/rewind`,\n { method: \"POST\", body: input, signal: options.signal },\n );\n }\n\n /** `POST /sessions/:id/remember` */\n async rememberSession(\n sessionId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<RememberSessionResponse> {\n return await this.request<RememberSessionResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/remember`,\n { method: \"POST\", signal: options.signal },\n );\n }\n\n /** `POST /dream` */\n async startDream(\n input: { cwd: string; sessionId?: string; preview?: boolean },\n options: { signal?: AbortSignal } = {},\n ): Promise<StartDreamResponse> {\n return await this.request<StartDreamResponse>(\"/dream\", {\n method: \"POST\",\n body: input,\n signal: options.signal,\n });\n }\n\n /** `GET /profile` */\n async getProfileStatus(\n options: { signal?: AbortSignal } = {},\n ): Promise<string> {\n const response = await this.request<{ report: string }>(\"/profile\", {\n signal: options.signal,\n });\n return response.report;\n }\n\n /** `POST /profile/init` */\n async initProfile(options: { signal?: AbortSignal } = {}): Promise<string> {\n const response = await this.request<{ report: string }>(\"/profile/init\", {\n method: \"POST\",\n signal: options.signal,\n });\n return response.report;\n }\n\n /** `GET /output-styles` */\n async listOutputStyles(\n options: { signal?: AbortSignal } = {},\n ): Promise<OutputStyleInfo[]> {\n const response = await this.request<{ styles: OutputStyleInfo[] }>(\n \"/output-styles\",\n {\n signal: options.signal,\n },\n );\n return response.styles;\n }\n\n /** `POST /project/init` */\n async initProject(\n input: { cwd: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<string> {\n const response = await this.request<{ report: string }>(\"/project/init\", {\n method: \"POST\",\n body: input,\n signal: options.signal,\n });\n return response.report;\n }\n\n /** `GET /plugins?cwd=` */\n async listPlugins(options: { cwd: string; signal?: AbortSignal }): Promise<{\n plugins: PluginInfo[];\n warnings: string[];\n }> {\n const { signal, ...query } = options;\n return await this.request<{ plugins: PluginInfo[]; warnings: string[] }>(\n this.path(\"/plugins\", query),\n { signal },\n );\n }\n\n /** `POST /plugins/:id/enable` */\n async enablePlugin(\n id: string,\n input: { cwd: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<{ message: string }> {\n return await this.request<{ message: string }>(\n `/plugins/${encodeURIComponent(id)}/enable`,\n { method: \"POST\", body: input, signal: options.signal },\n );\n }\n\n /** `POST /plugins/:id/disable` */\n async disablePlugin(\n id: string,\n input: { cwd: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<{ message: string }> {\n return await this.request<{ message: string }>(\n `/plugins/${encodeURIComponent(id)}/disable`,\n { method: \"POST\", body: input, signal: options.signal },\n );\n }\n\n async installLocalPlugin(input: {\n cwd: string;\n sourcePath: string;\n scope: \"user\";\n approvedPermissions: string[];\n link?: boolean;\n }): Promise<{ message: string }> {\n return await this.request<{ message: string }>(\n input.link ? \"/plugins/link-local\" : \"/plugins/install-local\",\n { method: \"POST\", body: input },\n );\n }\n\n /** `POST /plugins/archive/preview` */\n async previewPluginArchive(\n input: { cwd: string; archivePath: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<PluginArchivePreview> {\n return await this.request<PluginArchivePreview>(\"/plugins/archive/preview\", {\n method: \"POST\", body: input, signal: options.signal,\n });\n }\n\n /** `POST /plugins/archive/install` */\n async installPluginArchive(\n input: { cwd: string; archivePath: string; expectedArchiveDigest: string; approvedPermissions: string[] },\n options: { signal?: AbortSignal } = {},\n ): Promise<{ message: string }> {\n return await this.request<{ message: string }>(\"/plugins/archive/install\", {\n method: \"POST\", body: input, signal: options.signal,\n });\n }\n\n async uninstallPlugin(\n id: string,\n input: { cwd: string },\n ): Promise<{ message: string }> {\n return await this.request<{ message: string }>(\n `/plugins/${encodeURIComponent(id)}`,\n { method: \"DELETE\", body: input },\n );\n }\n\n /** `POST /plugins/reload` */\n async reloadPlugins(\n input: { cwd: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<ReloadPluginsResponse> {\n return await this.request<ReloadPluginsResponse>(\"/plugins/reload\", {\n method: \"POST\",\n body: input,\n signal: options.signal,\n });\n }\n\n /** `GET /skills` */\n async listSkills(\n options: { signal?: AbortSignal } = {},\n ): Promise<SkillSnapshot> {\n return await this.request<SkillSnapshot>(\"/skills\", {\n signal: options.signal,\n });\n }\n\n /** `DELETE /skills/:id` */\n async removeSkill(\n id: string,\n input: { expectedContent: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<SkillSnapshot> {\n return await this.request<SkillSnapshot>(\n `/skills/${encodeURIComponent(id)}`,\n {\n method: \"DELETE\",\n body: input,\n signal: options.signal,\n },\n );\n }\n\n /** `GET /agent-personas` */\n async listAgentPersonas(\n options: { signal?: AbortSignal } = {},\n ): Promise<AgentPersonaInfo[]> {\n const response = await this.request<{ agents: AgentPersonaInfo[] }>(\n \"/agent-personas\",\n {\n signal: options.signal,\n },\n );\n return response.agents;\n }\n\n /** `GET /hooks?cwd=&sessionId=` */\n async listHooks(options: {\n cwd: string;\n sessionId?: string;\n signal?: AbortSignal;\n }): Promise<HookInfo[]> {\n const { signal, ...query } = options;\n const response = await this.request<{ hooks: HookInfo[] }>(\n this.path(\"/hooks\", query),\n { signal },\n );\n return response.hooks;\n }\n\n /** `GET /git/diff?cwd=&full=` */\n async getGitDiff(options: {\n cwd: string;\n full?: boolean;\n signal?: AbortSignal;\n }): Promise<string> {\n const { signal, cwd, full } = options;\n const response = await this.request<{ output: string }>(\n this.path(\"/git/diff\", { cwd, ...(full ? { full: \"true\" } : {}) }),\n { signal },\n );\n return response.output;\n }\n\n /** `GET /git/branch?cwd=&list=` */\n async getGitBranch(options: {\n cwd: string;\n list?: boolean;\n signal?: AbortSignal;\n }): Promise<string> {\n const { signal, cwd, list } = options;\n const response = await this.request<{ output: string }>(\n this.path(\"/git/branch\", { cwd, ...(list ? { list: \"true\" } : {}) }),\n { signal },\n );\n return response.output;\n }\n\n /** `GET /git/status?cwd=` */\n async getGitStatus(options: {\n cwd: string;\n signal?: AbortSignal;\n }): Promise<string> {\n const { signal, cwd } = options;\n const response = await this.request<{ output: string }>(\n this.path(\"/git/status\", { cwd }),\n { signal },\n );\n return response.output;\n }\n\n /** `POST /git/commit` */\n async gitCommit(\n input: { cwd: string; message: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<string> {\n const response = await this.request<{ output: string }>(\"/git/commit\", {\n method: \"POST\",\n body: input,\n signal: options.signal,\n });\n return response.output;\n }\n\n /** `GET /sessions/:id/usage` */\n async getSessionUsage(\n sessionId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<SessionUsageResponse> {\n return await this.request<SessionUsageResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/usage`,\n { signal: options.signal },\n );\n }\n\n /** `POST /sessions/:id/export` */\n async exportSession(\n sessionId: string,\n input: { filename?: string; json?: boolean } = {},\n options: { signal?: AbortSignal } = {},\n ): Promise<SessionExportResponse> {\n return await this.request<SessionExportResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/export`,\n { method: \"POST\", body: input, signal: options.signal },\n );\n }\n\n /** `GET /sessions` */\n async listSessions(\n options: ListSessionsOptions & { signal?: AbortSignal } = {},\n ): Promise<SessionRecord[]> {\n const { signal, ...query } = options;\n const response = await this.request<{ sessions: SessionRecord[] }>(\n this.path(\"/sessions\", query),\n { signal },\n );\n return response.sessions;\n }\n\n async listProjects(\n options: ListProjectsOptions & { signal?: AbortSignal } = {},\n ): Promise<ProjectRecord[]> {\n const { signal, ...query } = options;\n const response = await this.request<{ projects: ProjectRecord[] }>(\n this.path(\"/projects\", query),\n { signal },\n );\n return response.projects;\n }\n\n async inspectProject(path: string): Promise<ProjectRecord> {\n return (\n await this.request<{ project: ProjectRecord }>(\"/projects/inspect\", {\n method: \"POST\",\n body: { path },\n })\n ).project;\n }\n\n async renameProject(projectId: string, name: string): Promise<ProjectRecord> {\n return (\n await this.request<{ project: ProjectRecord }>(\n `/projects/${encodeURIComponent(projectId)}`,\n { method: \"PATCH\", body: { name } },\n )\n ).project;\n }\n\n async setProjectPinned(\n projectId: string,\n pinned: boolean,\n ): Promise<ProjectRecord> {\n return (\n await this.request<{ project: ProjectRecord }>(\n `/projects/${encodeURIComponent(projectId)}`,\n { method: \"PATCH\", body: { pinned } },\n )\n ).project;\n }\n\n async setProjectDefaultShell(\n projectId: string,\n defaultShell: string | null,\n ): Promise<ProjectRecord> {\n return (\n await this.request<{ project: ProjectRecord }>(\n `/projects/${encodeURIComponent(projectId)}`,\n { method: \"PATCH\", body: { defaultShell } },\n )\n ).project;\n }\n\n async rebindProject(projectId: string, path: string): Promise<ProjectRecord> {\n return (\n await this.request<{ project: ProjectRecord }>(\n `/projects/${encodeURIComponent(projectId)}/rebind`,\n { method: \"POST\", body: { path } },\n )\n ).project;\n }\n\n async archiveProject(projectId: string): Promise<ProjectRecord> {\n return (\n await this.request<{ project: ProjectRecord }>(\n `/projects/${encodeURIComponent(projectId)}`,\n { method: \"DELETE\" },\n )\n ).project;\n }\n\n /** `POST /sessions` */\n async createSession(\n input: CreateClientSessionInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<SessionRecord> {\n const response = await this.request<{ session: SessionRecord }>(\n \"/sessions\",\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n return response.session;\n }\n\n /** `GET /sessions/:id` */\n async getSession(\n sessionId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<SessionRecord> {\n const response = await this.request<{ session: SessionRecord }>(\n `/sessions/${encodeURIComponent(sessionId)}`,\n {\n signal: options.signal,\n },\n );\n return response.session;\n }\n\n /** `POST /sessions/:id/fork` */\n async forkSession(\n sessionId: string,\n input: ForkClientSessionInput = {},\n options: { signal?: AbortSignal } = {},\n ): Promise<SessionRecord> {\n const response = await this.request<{ session: SessionRecord }>(\n `/sessions/${encodeURIComponent(sessionId)}/fork`,\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n return response.session;\n }\n\n /** `GET /sessions/:id/state` - atomic attach snapshot plus SSE cursor. */\n async getSessionState(\n sessionId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<SessionStateSnapshot> {\n const response = await this.request<unknown>(\n `/sessions/${encodeURIComponent(sessionId)}/state`,\n {\n signal: options.signal,\n },\n );\n return decodeSessionStateSnapshot(response);\n }\n\n /** `DELETE /sessions/:id` */\n async archiveSession(\n sessionId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<SessionRecord> {\n const response = await this.request<{ session: SessionRecord }>(\n `/sessions/${encodeURIComponent(sessionId)}`,\n {\n method: \"DELETE\",\n signal: options.signal,\n },\n );\n return response.session;\n }\n\n /** `DELETE /sessions/:id/hard` */\n async deleteSession(\n sessionId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<string[]> {\n const response = await this.request<{ deletedSessionIds: string[] }>(\n `/sessions/${encodeURIComponent(sessionId)}/hard`,\n {\n method: \"DELETE\",\n signal: options.signal,\n },\n );\n return response.deletedSessionIds;\n }\n\n /** `PATCH /sessions/:id` - update title, agent, or metadata.runtime fields. */\n async updateSession(\n sessionId: string,\n input: UpdateClientSessionInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<SessionRecord> {\n const response = await this.request<{ session: SessionRecord }>(\n `/sessions/${encodeURIComponent(sessionId)}`,\n {\n method: \"PATCH\",\n body: input,\n signal: options.signal,\n },\n );\n return response.session;\n }\n\n /** `GET /sessions/:id/messages` */\n async listMessages(\n sessionId: string,\n options: ListMessagesOptions & { signal?: AbortSignal } = {},\n ): Promise<SessionMessageRecord[]> {\n const { signal, ...query } = options;\n const response = await this.request<{ messages: SessionMessageRecord[] }>(\n this.path(`/sessions/${encodeURIComponent(sessionId)}/messages`, query),\n { signal },\n );\n return response.messages;\n }\n\n /** `GET /sessions/:id/parts` */\n async listMessageParts(\n sessionId: string,\n options: ListClientMessagePartsOptions & { signal?: AbortSignal } = {},\n ): Promise<SessionMessagePartRecord[]> {\n const { signal, ...query } = options;\n const response = await this.request<{ parts: SessionMessagePartRecord[] }>(\n this.path(`/sessions/${encodeURIComponent(sessionId)}/parts`, query),\n { signal },\n );\n return response.parts;\n }\n\n /** `POST /sessions/:id/prompts` — 提交用户输入并触发/排队一次 run。 */\n async admitPrompt(\n sessionId: string,\n input: AdmitClientPromptInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<PromptResponse> {\n return await this.request<PromptResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/prompts`,\n {\n method: \"POST\",\n body: { ...input, id: input.id ?? createPromptRequestId() },\n signal: options.signal,\n },\n );\n }\n\n /** `POST /sessions/:id/prompts/latest/edit` */\n async editLatestPrompt(\n sessionId: string,\n input: EditLatestClientPromptInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<PromptResponse> {\n return await this.request<PromptResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/prompts/latest/edit`,\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n }\n\n /** Promote one durable queued prompt into the exact active run. */\n async promoteQueuedPrompt(\n sessionId: string,\n inputId: string,\n input: PromoteQueuedClientPromptInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<PromoteQueuedPromptResponse> {\n return await this.request<PromoteQueuedPromptResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/prompts/${encodeURIComponent(inputId)}/promote`,\n { method: \"POST\", body: input, signal: options.signal },\n );\n }\n\n /** Cancel one durable prompt that is still waiting in the run queue. */\n async cancelQueuedPrompt(\n sessionId: string,\n inputId: string,\n input: CancelQueuedClientPromptInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<CancelQueuedPromptResponse> {\n return await this.request<CancelQueuedPromptResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/prompts/${encodeURIComponent(inputId)}/cancel`,\n { method: \"POST\", body: input, signal: options.signal },\n );\n }\n\n /**\n * `POST /sessions/:id/runs/:runId/resume` — 显式重放一次中断 run 的原始 prompt。\n * 不会继续旧 provider stream;服务端会创建一个带恢复溯源的新 input/run。\n */\n async resumeInterruptedRun(\n sessionId: string,\n runId: string,\n input: ResumeInterruptedRunInput = {},\n options: { signal?: AbortSignal } = {},\n ): Promise<ResumeInterruptedRunResponse> {\n return await this.request<ResumeInterruptedRunResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/runs/${encodeURIComponent(runId)}/resume`,\n {\n method: \"POST\",\n body: { ...input, id: input.id ?? createPromptRequestId() },\n signal: options.signal,\n },\n );\n }\n\n /** `POST /sessions/:id/interrupt` — 中断当前/排队中的 run。 */\n async interruptSession(\n sessionId: string,\n options: { signal?: AbortSignal; expectedRunId?: string } = {},\n ): Promise<InterruptSessionResponse> {\n return await this.request<InterruptSessionResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/interrupt`,\n {\n method: \"POST\",\n body: options.expectedRunId\n ? { expectedRunId: options.expectedRunId }\n : undefined,\n signal: options.signal,\n },\n );\n }\n\n /** `GET /events` — 用于 attach 时的历史 replay。 */\n async listEvents(\n options: ListEventsOptions & { signal?: AbortSignal } = {},\n ): Promise<SessionEventRecord[]> {\n const { signal, ...query } = options;\n const response = await this.request<unknown>(this.path(\"/events\", query), {\n signal,\n });\n return responseArray(response, \"events\", decodeSessionEventRecord);\n }\n\n /** `GET /permissions` */\n async listPermissions(\n options: ListPermissionsOptions & { signal?: AbortSignal } = {},\n ): Promise<PermissionRequestRecord[]> {\n const { signal, ...query } = options;\n const response = await this.request<{\n requests: PermissionRequestRecord[];\n }>(this.path(\"/permissions\", query), { signal });\n return response.requests;\n }\n\n /** `POST /permissions/:id/reply` — 批准/拒绝工具权限请求。 */\n async replyPermission(\n requestId: string,\n input: ReplyPermissionInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<PermissionRequestRecord> {\n const response = await this.request<{ request: PermissionRequestRecord }>(\n `/permissions/${encodeURIComponent(requestId)}/reply`,\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n return response.request;\n }\n\n async getScheduledTaskStatus(\n options: { signal?: AbortSignal } = {},\n ): Promise<ScheduledTaskStatusSummary> {\n return await this.request<ScheduledTaskStatusSummary>(\"/schedules/status\", {\n signal: options.signal,\n });\n }\n\n async listScheduledTasks(\n options: {\n status?: ScheduledTaskRecord[\"status\"];\n signal?: AbortSignal;\n } = {},\n ): Promise<ScheduledTaskRecord[]> {\n const { signal, ...query } = options;\n const response = await this.request<{ tasks: ScheduledTaskRecord[] }>(\n this.path(\"/schedules/tasks\", query),\n { signal },\n );\n return response.tasks;\n }\n\n async getScheduledTask(\n id: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<ScheduledTaskRecord> {\n const response = await this.request<{ task: ScheduledTaskRecord }>(\n `/schedules/tasks/${encodeURIComponent(id)}`,\n { signal: options.signal },\n );\n return response.task;\n }\n\n async createScheduledTask(\n input: CreateScheduledTaskInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<ScheduledTaskRecord> {\n const response = await this.request<{ task: ScheduledTaskRecord }>(\n \"/schedules/tasks\",\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n return response.task;\n }\n\n async updateScheduledTask(\n id: string,\n input: UpdateScheduledTaskInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<ScheduledTaskRecord> {\n const response = await this.request<{ task: ScheduledTaskRecord }>(\n `/schedules/tasks/${encodeURIComponent(id)}`,\n { method: \"PATCH\", body: input, signal: options.signal },\n );\n return response.task;\n }\n\n async removeScheduledTask(\n id: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<void> {\n await this.request<{ removed: true }>(\n `/schedules/tasks/${encodeURIComponent(id)}`,\n {\n method: \"DELETE\",\n signal: options.signal,\n },\n );\n }\n\n async triggerScheduledTask(\n id: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<ScheduledRunRecord> {\n const response = await this.request<{ run: ScheduledRunRecord }>(\n `/schedules/tasks/${encodeURIComponent(id)}/run`,\n { method: \"POST\", signal: options.signal },\n );\n return response.run;\n }\n\n async listScheduledRuns(\n options: {\n taskId?: string;\n unread?: boolean;\n limit?: number;\n signal?: AbortSignal;\n } = {},\n ): Promise<ScheduledRunRecord[]> {\n const { signal, ...query } = options;\n const response = await this.request<{ runs: ScheduledRunRecord[] }>(\n this.path(\"/schedules/runs\", query),\n { signal },\n );\n return response.runs;\n }\n\n async setScheduledRunUnread(\n id: string,\n unread: boolean,\n options: { signal?: AbortSignal } = {},\n ): Promise<ScheduledRunRecord> {\n const response = await this.request<{ run: ScheduledRunRecord }>(\n `/schedules/runs/${encodeURIComponent(id)}/read`,\n { method: \"PATCH\", body: { unread }, signal: options.signal },\n );\n return response.run;\n }\n\n async createTerminal(\n input: TerminalCreateRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<TerminalSessionInfo> {\n const response = await this.request<unknown>(\"/terminals\", {\n method: \"POST\",\n body: input,\n signal: options.signal,\n });\n return decodeTerminalSessionInfo(responseField(response, \"terminal\"));\n }\n\n async listJobs(options: {\n sessionId: string;\n kinds?: JobKind[];\n statuses?: JobStatus[];\n startedAfter?: number;\n startedBefore?: number;\n updatedAfter?: number;\n updatedBefore?: number;\n includeFinished?: boolean;\n limit?: number;\n signal?: AbortSignal;\n }): Promise<JobSnapshot[]> {\n const { signal, kinds, statuses, includeFinished, ...query } = options;\n const response = await this.request<unknown>(\n this.path(\"/jobs\", {\n ...query,\n ...(kinds ? { kinds: kinds.join(\",\") } : {}),\n ...(statuses ? { statuses: statuses.join(\",\") } : {}),\n ...(includeFinished !== undefined\n ? { includeFinished: String(includeFinished) }\n : {}),\n }),\n { signal },\n );\n return responseArray(response, \"jobs\", decodeJobSnapshot);\n }\n\n async createBackgroundShell(\n input: CreateBackgroundShellInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<CreateBackgroundShellResult> {\n return await this.request<CreateBackgroundShellResult>(\n \"/background-shells\",\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n }\n\n async readJob(\n jobId: string,\n options: {\n sessionId: string;\n after?: number;\n maxChars?: number;\n signal?: AbortSignal;\n },\n ): Promise<JobReadResult> {\n const { signal, ...query } = options;\n const response = await this.request<unknown>(\n this.path(`/jobs/${encodeURIComponent(jobId)}`, query),\n { signal },\n );\n return decodeJobReadResult(response);\n }\n\n async waitJob(\n jobId: string,\n input: {\n sessionId: string;\n timeoutMs?: number;\n after?: number;\n maxChars?: number;\n },\n options: { signal?: AbortSignal } = {},\n ): Promise<JobWaitResult> {\n const response = await this.request<unknown>(\n `/jobs/${encodeURIComponent(jobId)}/wait`,\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n return decodeJobWaitResult(response);\n }\n\n async sendJob(\n jobId: string,\n input: { sessionId: string; data: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<void> {\n await this.request(`/jobs/${encodeURIComponent(jobId)}/input`, {\n method: \"POST\",\n body: input,\n signal: options.signal,\n });\n }\n\n async cancelJob(\n jobId: string,\n input: { sessionId: string; reason?: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<JobSnapshot> {\n const response = await this.request<unknown>(\n `/jobs/${encodeURIComponent(jobId)}/cancel`,\n { method: \"POST\", body: input, signal: options.signal },\n );\n return decodeJobSnapshot(responseField(response, \"snapshot\"));\n }\n\n async listTerminals(\n options: {\n projectId?: string;\n sessionId?: string;\n source?: TerminalSource;\n signal?: AbortSignal;\n } = {},\n ): Promise<TerminalSessionInfo[]> {\n const { signal, ...query } = options;\n const response = await this.request<unknown>(\n this.path(\"/terminals\", query),\n { signal },\n );\n return responseArray(response, \"terminals\", decodeTerminalSessionInfo);\n }\n\n async getTerminal(\n terminalId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<TerminalSessionInfo> {\n const response = await this.request<unknown>(\n `/terminals/${encodeURIComponent(terminalId)}`,\n { signal: options.signal },\n );\n return decodeTerminalSessionInfo(responseField(response, \"terminal\"));\n }\n\n async readTerminal(\n terminalId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<TerminalReadResult> {\n const response = await this.request<unknown>(\n `/terminals/${encodeURIComponent(terminalId)}/output`,\n { signal: options.signal },\n );\n return decodeTerminalReadResult(responseField(response, \"snapshot\"));\n }\n\n async writeTerminal(\n input: TerminalWriteRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<void> {\n await this.request<{ written: true }>(\n `/terminals/${encodeURIComponent(input.terminalId)}/input`,\n { method: \"POST\", body: { data: input.data }, signal: options.signal },\n );\n }\n\n async resizeTerminal(\n input: TerminalResizeRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<void> {\n await this.request<{ resized: true }>(\n `/terminals/${encodeURIComponent(input.terminalId)}/resize`,\n {\n method: \"POST\",\n body: { cols: input.cols, rows: input.rows },\n signal: options.signal,\n },\n );\n }\n\n async signalTerminal(\n terminalId: string,\n signal: TerminalSignal,\n options: { signal?: AbortSignal } = {},\n ): Promise<void> {\n await this.request<{ signaled: true }>(\n `/terminals/${encodeURIComponent(terminalId)}/signal`,\n { method: \"POST\", body: { signal }, signal: options.signal },\n );\n }\n\n async closeTerminal(\n terminalId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<void> {\n await this.request<{ removed: true }>(\n `/terminals/${encodeURIComponent(terminalId)}`,\n {\n method: \"DELETE\",\n signal: options.signal,\n },\n );\n }\n\n streamTerminalEvents(\n options: { signal?: AbortSignal } = {},\n ): AsyncIterable<TerminalEvent> {\n return streamServerSentEvents(async () => {\n const response = await this.fetchImpl(\n `${this.baseUrl}/terminals/stream`,\n {\n headers: this.headers(),\n signal: options.signal,\n },\n );\n if (!response.ok) await this.throwResponseError(response);\n if (!response.body)\n throw new Error(\"Terminal event stream response has no body\");\n return response.body;\n }, decodeTerminalEvent);\n }\n\n streamEvents(\n options: EventSyncOptions = {},\n ): AsyncIterable<SessionEventRecord> {\n return streamServerSentEvents(async () => {\n const query = {\n cursor: options.cursor,\n sessionId: options.sessionId,\n };\n const response = await this.fetchImpl(\n `${this.baseUrl}${this.path(\"/events/stream\", query)}`,\n {\n headers: this.headers(),\n signal: options.signal,\n },\n );\n if (!response.ok) await this.throwResponseError(response);\n if (!response.body) throw new Error(\"Event stream response has no body\");\n return response.body;\n }, decodeSessionEventRecord);\n }\n\n private async request<T>(\n path: string,\n options: {\n method?: string;\n body?: unknown;\n signal?: AbortSignal;\n auth?: boolean;\n } = {},\n ): Promise<T> {\n const response = await this.fetchImpl(`${this.baseUrl}${path}`, {\n method: options.method ?? \"GET\",\n headers: this.headers(options.body !== undefined, options.auth ?? true),\n body:\n options.body === undefined ? undefined : JSON.stringify(options.body),\n signal: options.signal,\n });\n if (!response.ok) await this.throwResponseError(response);\n return (await response.json()) as T;\n }\n\n private headers(json = false, auth = true): Record<string, string> {\n return {\n ...(auth && this.token ? { authorization: `Bearer ${this.token}` } : {}),\n ...(json ? { \"content-type\": \"application/json\" } : {}),\n };\n }\n\n /** 拼 query;跳过 undefined / null / false。 */\n private path(pathname: string, query: Record<string, unknown> = {}): string {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null || value === false) continue;\n params.set(key, String(value));\n }\n const qs = params.toString();\n return qs ? `${pathname}?${qs}` : pathname;\n }\n\n private async throwResponseError(response: Response): Promise<never> {\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = await response.text().catch(() => \"\");\n }\n const message =\n body &&\n typeof body === \"object\" &&\n \"error\" in body &&\n typeof body.error === \"string\"\n ? body.error\n : body &&\n typeof body === \"object\" &&\n \"message\" in body &&\n typeof body.message === \"string\"\n ? body.message\n : `OpenHarness API request failed with ${response.status}`;\n throw new OpenHarnessApiError(message, response.status, body);\n }\n}\n\nfunction isReadableStream(value: unknown): value is ReadableStream<Uint8Array> {\n return (\n typeof ReadableStream !== \"undefined\" && value instanceof ReadableStream\n );\n}\n\nfunction attachmentRangeHeader(\n range: DownloadAttachmentOptions[\"range\"],\n): string | undefined {\n if (!range) return undefined;\n const { start, end, suffixBytes } = range;\n if (suffixBytes !== undefined) {\n if (start !== undefined || end !== undefined) {\n throw new Error(\"suffixBytes cannot be combined with start or end\");\n }\n assertPositiveSafeInteger(suffixBytes, \"suffixBytes\");\n return `bytes=-${suffixBytes}`;\n }\n if (start === undefined && end === undefined) return undefined;\n if (start === undefined) {\n throw new Error(\"range start is required when end is provided\");\n }\n assertNonNegativeSafeInteger(start, \"start\");\n if (end === undefined) return `bytes=${start}-`;\n assertNonNegativeSafeInteger(end, \"end\");\n if (end < start) throw new Error(\"range end must not be less than start\");\n return `bytes=${start}-${end}`;\n}\n\nfunction assertNonNegativeSafeInteger(value: number, field: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new Error(`${field} must be a non-negative safe integer`);\n }\n}\n\nfunction assertPositiveSafeInteger(value: number, field: string): void {\n if (!Number.isSafeInteger(value) || value < 1) {\n throw new Error(`${field} must be a positive safe integer`);\n }\n}\n\n/**\n * 将 SSE 字节流解析为 `SessionEventRecord` 异步迭代。\n * `open` 负责建立连接并返回 response body,便于重试或注入。\n */\nexport async function* streamServerSentEvents<T = SessionEventRecord>(\n open: () => Promise<ReadableStream<Uint8Array>>,\n decode: (value: unknown) => T = (value) => value as T,\n): AsyncIterable<T> {\n const reader = (await open()).getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n try {\n while (true) {\n const chunk = await reader.read();\n if (chunk.done) break;\n buffer += decoder.decode(chunk.value, { stream: true });\n // SSE 事件以空行分隔\n const frames = buffer.split(/\\r?\\n\\r?\\n/);\n buffer = frames.pop() ?? \"\";\n for (const frame of frames) {\n const event = parseSseFrame(frame);\n if (event !== undefined) yield decode(event);\n }\n }\n buffer += decoder.decode();\n const event = parseSseFrame(buffer);\n if (event !== undefined) yield decode(event);\n } finally {\n reader.releaseLock();\n }\n}\n\n/** 解析单个 SSE frame 的 `data:` 行,得到事件 JSON。 */\nfunction parseSseFrame(frame: string): unknown | undefined {\n let data = \"\";\n for (const line of frame.split(/\\r?\\n/)) {\n if (!line || line.startsWith(\":\")) continue;\n if (line.startsWith(\"data:\")) data += line.slice(5).trimStart();\n }\n if (!data) return undefined;\n return JSON.parse(data) as unknown;\n}\n\nexport class IncompatibleProtocolError extends Error {\n constructor(\n readonly capabilities: ServerCapabilities,\n message: string,\n ) {\n super(message);\n this.name = \"IncompatibleProtocolError\";\n }\n}\n",
16
- "export * from \"./http-client.js\";\n",
17
- "/**\n * 事件 → 客户端状态 reducer。\n *\n * 幂等:同一 `seq` 只应用一次。多端用同一套事件流应收敛到相同状态。\n */\n\nimport { sessionEventSchemaVersion } from \"@openharness/protocol\";\n\nimport type {\n OpenHarnessClientState,\n PermissionRequestRecord,\n SessionBucket,\n SessionEventRecord,\n SessionInputRecord,\n SessionMessagePartRecord,\n SessionMessageRecord,\n SessionRecord,\n SessionRunRecord,\n SessionRunAttemptRecord,\n SessionExecutionRecord,\n SessionStateSnapshot,\n} from \"../types/index.js\";\n\nexport class UnsupportedSessionEventSchemaVersionError extends Error {\n readonly event: Pick<SessionEventRecord, \"seq\" | \"type\" | \"schemaVersion\">;\n\n constructor(event: SessionEventRecord) {\n const expected = sessionEventSchemaVersion(event.type);\n super(\n `Unsupported session event schema version ${event.schemaVersion} for ${event.type} at sequence ${event.seq}; expected ${expected}`,\n );\n this.name = \"UnsupportedSessionEventSchemaVersionError\";\n this.event = {\n seq: event.seq,\n type: event.type,\n schemaVersion: event.schemaVersion,\n };\n }\n}\n\n/** 空客户端状态,作为 replay/hydrate 起点。 */\nexport function createInitialClientState(): OpenHarnessClientState {\n return {\n sessions: {},\n sessionOrder: [],\n buckets: {},\n eventsBySeq: {},\n snapshotCursorBySession: {},\n transientCursor: 0,\n lastSeq: 0,\n };\n}\n\n/** 按序批量应用事件。 */\nexport function applyEvents(\n state: OpenHarnessClientState,\n events: Iterable<SessionEventRecord>,\n): OpenHarnessClientState {\n let next = state;\n for (const event of events) next = applyEvent(next, event);\n return next;\n}\n\n/** Replace one session bucket with an atomic server snapshot. */\nexport function applySessionSnapshot(\n state: OpenHarnessClientState,\n snapshot: SessionStateSnapshot,\n): OpenHarnessClientState {\n const partsByMessageId: SessionBucket[\"partsByMessageId\"] = {};\n for (const part of snapshot.parts) {\n const parts = partsByMessageId[part.messageId] ?? [];\n parts.push(part);\n partsByMessageId[part.messageId] = parts;\n }\n for (const parts of Object.values(partsByMessageId)) parts.sort((a, b) => a.seq - b.seq);\n\n const sessions = { ...state.sessions, [snapshot.session.id]: snapshot.session };\n return {\n ...state,\n sessions,\n sessionOrder: sortSessionOrder(sessions),\n buckets: {\n ...state.buckets,\n [snapshot.session.id]: {\n session: snapshot.session,\n inputs: [...snapshot.inputs].sort((a, b) => a.seq - b.seq),\n messages: [...snapshot.messages].sort((a, b) => a.seq - b.seq),\n partsByMessageId,\n runs: Object.fromEntries(snapshot.runs.map((run) => [run.id, run])),\n attempts: Object.fromEntries((snapshot.attempts ?? []).map((attempt) => [attempt.id, attempt])),\n tasks: Object.fromEntries((snapshot.tasks ?? []).map((task) => [task.id, task])),\n permissions: Object.fromEntries(snapshot.permissions.map((request) => [request.id, request])),\n },\n },\n snapshotCursorBySession: {\n ...state.snapshotCursorBySession,\n [snapshot.session.id]: Math.max(\n state.snapshotCursorBySession[snapshot.session.id] ?? 0,\n snapshot.cursor,\n ),\n },\n transientCursor: Math.max(state.transientCursor, snapshot.cursor),\n lastSeq: Math.max(state.lastSeq, snapshot.cursor),\n };\n}\n\n/**\n * 应用单条事件。已见过的 `seq` 直接返回原 state(引用相等,便于 live 去重)。\n */\nexport function applyEvent(\n state: OpenHarnessClientState,\n event: SessionEventRecord,\n): OpenHarnessClientState {\n if (event.schemaVersion !== sessionEventSchemaVersion(event.type)) {\n throw new UnsupportedSessionEventSchemaVersionError(event);\n }\n const transient = event.type === \"session.message.part.delta\";\n const snapshotCursor = event.sessionId\n ? state.snapshotCursorBySession[event.sessionId] ?? 0\n : 0;\n if (event.seq <= snapshotCursor) return state;\n if (transient && event.seq <= state.transientCursor) return state;\n if (!transient && state.eventsBySeq[event.seq]) return state;\n if (!transient) state.eventsBySeq[event.seq] = event;\n\n let next: OpenHarnessClientState = {\n ...state,\n eventsBySeq: state.eventsBySeq,\n transientCursor: transient ? event.seq : state.transientCursor,\n lastSeq: Math.max(state.lastSeq, event.seq),\n };\n\n switch (event.type) {\n case \"session.created\":\n case \"session.updated\":\n next = upsertSession(next, readPayloadRecord<SessionRecord>(event, \"session\"));\n break;\n case \"session.archived\":\n next = archiveSession(next, event);\n break;\n case \"session.input.admitted\":\n next = upsertInput(next, readPayloadRecord<SessionInputRecord>(event, \"input\"));\n break;\n case \"session.message.created\":\n next = upsertMessage(next, readPayloadRecord<SessionMessageRecord>(event, \"message\"));\n break;\n case \"session.transcript.replaced\":\n next = replaceTranscript(next, event);\n break;\n case \"session.message.part.updated\":\n next = upsertPart(next, readPayloadRecord<SessionMessagePartRecord>(event, \"part\"));\n break;\n case \"session.message.part.delta\":\n next = appendPartDelta(next, event);\n break;\n case \"session.run.created\":\n case \"session.run.updated\":\n next = upsertRun(next, readPayloadRecord<SessionRunRecord>(event, \"run\"));\n break;\n case \"session.run_attempt.created\":\n case \"session.run_attempt.updated\":\n next = upsertRunAttempt(next, readPayloadRecord<SessionRunAttemptRecord>(event, \"attempt\"));\n break;\n case \"session.task.created\":\n case \"session.task.updated\":\n next = upsertTask(next, readPayloadRecord<SessionExecutionRecord>(event, \"task\"));\n break;\n case \"permission.asked\":\n case \"permission.replied\":\n next = upsertPermission(next, readPayloadRecord<PermissionRequestRecord>(event, \"request\"));\n break;\n }\n\n return next;\n}\n\nfunction readPayloadRecord<T>(event: SessionEventRecord, key: string): T | undefined {\n const value = event.payload[key];\n return value && typeof value === \"object\" && !Array.isArray(value) ? value as T : undefined;\n}\n\nfunction upsertSession(state: OpenHarnessClientState, session: SessionRecord | undefined): OpenHarnessClientState {\n if (!session) return state;\n const bucket = cloneBucket(state.buckets[session.id]);\n bucket.session = session;\n const sessions = { ...state.sessions, [session.id]: session };\n return {\n ...state,\n sessions,\n sessionOrder: sortSessionOrder(sessions),\n buckets: { ...state.buckets, [session.id]: bucket },\n };\n}\n\nfunction archiveSession(state: OpenHarnessClientState, event: SessionEventRecord): OpenHarnessClientState {\n const sessionId = typeof event.payload.sessionId === \"string\" ? event.payload.sessionId : event.sessionId;\n if (!sessionId) return state;\n const current = state.sessions[sessionId];\n if (!current) return state;\n const archived: SessionRecord = {\n ...current,\n status: \"archived\",\n archivedAt: current.archivedAt ?? event.createdAt,\n updatedAt: Math.max(current.updatedAt, event.createdAt),\n };\n return upsertSession(state, archived);\n}\n\nfunction upsertInput(state: OpenHarnessClientState, input: SessionInputRecord | undefined): OpenHarnessClientState {\n if (!input) return state;\n const bucket = cloneBucket(state.buckets[input.sessionId]);\n bucket.inputs = upsertSorted(bucket.inputs, input, (row) => row.seq);\n return { ...state, buckets: { ...state.buckets, [input.sessionId]: bucket } };\n}\n\nfunction upsertMessage(state: OpenHarnessClientState, message: SessionMessageRecord | undefined): OpenHarnessClientState {\n if (!message) return state;\n const bucket = cloneBucket(state.buckets[message.sessionId]);\n bucket.messages = upsertSorted(bucket.messages, message, (row) => row.seq);\n return { ...state, buckets: { ...state.buckets, [message.sessionId]: bucket } };\n}\n\nfunction replaceTranscript(state: OpenHarnessClientState, event: SessionEventRecord): OpenHarnessClientState {\n const sessionId = event.sessionId;\n if (!sessionId) return state;\n const messages = Array.isArray(event.payload.messages)\n ? event.payload.messages.filter((row): row is SessionMessageRecord =>\n !!row && typeof row === \"object\" && !Array.isArray(row) && typeof (row as SessionMessageRecord).id === \"string\")\n : [];\n const parts = Array.isArray(event.payload.parts)\n ? event.payload.parts.filter((row): row is SessionMessagePartRecord =>\n !!row && typeof row === \"object\" && !Array.isArray(row) && typeof (row as SessionMessagePartRecord).id === \"string\")\n : [];\n const bucket = cloneBucket(state.buckets[sessionId]);\n const partsByMessageId: SessionBucket[\"partsByMessageId\"] = {};\n for (const part of parts) {\n const rows = partsByMessageId[part.messageId] ?? [];\n rows.push(part);\n partsByMessageId[part.messageId] = rows;\n }\n for (const rows of Object.values(partsByMessageId)) rows.sort((a, b) => a.seq - b.seq);\n bucket.messages = [...messages].sort((a, b) => a.seq - b.seq);\n bucket.partsByMessageId = partsByMessageId;\n if (bucket.session) {\n bucket.session = {\n ...bucket.session,\n updatedAt: Math.max(bucket.session.updatedAt, event.createdAt),\n };\n }\n const sessions = bucket.session\n ? { ...state.sessions, [sessionId]: bucket.session }\n : state.sessions;\n return {\n ...state,\n sessions,\n sessionOrder: sortSessionOrder(sessions),\n buckets: { ...state.buckets, [sessionId]: bucket },\n };\n}\n\nfunction upsertPart(state: OpenHarnessClientState, part: SessionMessagePartRecord | undefined): OpenHarnessClientState {\n if (!part) return state;\n const bucket = cloneBucketForPartWrite(state.buckets[part.sessionId]);\n const existing = bucket.partsByMessageId[part.messageId] ?? [];\n bucket.partsByMessageId = {\n ...bucket.partsByMessageId,\n [part.messageId]: upsertSorted(existing, part, (row) => row.seq),\n };\n return { ...state, buckets: { ...state.buckets, [part.sessionId]: bucket } };\n}\n\nfunction appendPartDelta(state: OpenHarnessClientState, event: SessionEventRecord): OpenHarnessClientState {\n const sessionId = typeof event.payload.sessionId === \"string\" ? event.payload.sessionId : event.sessionId;\n const messageId = typeof event.payload.messageId === \"string\" ? event.payload.messageId : undefined;\n const partId = typeof event.payload.partId === \"string\" ? event.payload.partId : undefined;\n const field = event.payload.field;\n const delta = typeof event.payload.delta === \"string\" ? event.payload.delta : undefined;\n if (!sessionId || !messageId || !partId || field !== \"text\" || delta === undefined) return state;\n\n const bucket = cloneBucketForPartWrite(state.buckets[sessionId]);\n const currentParts = bucket.partsByMessageId[messageId] ?? [];\n const index = currentParts.findIndex((part) => part.id === partId);\n const nextParts = [...currentParts];\n if (index >= 0) {\n const current = nextParts[index]!;\n nextParts[index] = {\n ...current,\n text: `${current.text ?? \"\"}${delta}`,\n updatedAt: Math.max(current.updatedAt, event.createdAt),\n };\n } else {\n const seq = currentParts.reduce((max, part) => Math.max(max, part.seq), 0) + 1;\n nextParts.push({\n id: partId,\n sessionId,\n messageId,\n seq,\n type: \"text\",\n status: \"running\",\n text: delta,\n metadata: {},\n createdAt: event.createdAt,\n updatedAt: event.createdAt,\n });\n }\n const sortedParts = index >= 0\n ? nextParts\n : nextParts.sort((a, b) => a.seq - b.seq);\n bucket.partsByMessageId = {\n ...bucket.partsByMessageId,\n [messageId]: sortedParts,\n };\n return { ...state, buckets: { ...state.buckets, [sessionId]: bucket } };\n}\n\nfunction upsertRun(state: OpenHarnessClientState, run: SessionRunRecord | undefined): OpenHarnessClientState {\n if (!run) return state;\n const bucket = cloneBucket(state.buckets[run.sessionId]);\n bucket.runs = { ...bucket.runs, [run.id]: run };\n const session = refreshSessionStatusFromRuns(bucket.session, bucket.runs, run.updatedAt);\n bucket.session = session;\n const sessions = session ? { ...state.sessions, [run.sessionId]: session } : state.sessions;\n return {\n ...state,\n sessions,\n sessionOrder: session ? sortSessionOrder(sessions) : state.sessionOrder,\n buckets: { ...state.buckets, [run.sessionId]: bucket },\n };\n}\n\nfunction upsertRunAttempt(\n state: OpenHarnessClientState,\n attempt: SessionRunAttemptRecord | undefined,\n): OpenHarnessClientState {\n if (!attempt) return state;\n const run = Object.values(state.buckets)\n .flatMap((bucket) => Object.values(bucket.runs))\n .find((candidate) => candidate.id === attempt.runId);\n if (!run) return state;\n const bucket = cloneBucket(state.buckets[run.sessionId]);\n bucket.attempts = { ...bucket.attempts, [attempt.id]: attempt };\n return { ...state, buckets: { ...state.buckets, [run.sessionId]: bucket } };\n}\n\nfunction refreshSessionStatusFromRuns(\n session: SessionRecord | undefined,\n runs: SessionBucket[\"runs\"],\n updatedAt: number,\n): SessionRecord | undefined {\n if (!session || session.status === \"archived\" || session.status === \"closing\") return session;\n const running = Object.values(runs).some(\n (candidate) => candidate.status === \"pending\" || candidate.status === \"running\",\n );\n return {\n ...session,\n status: running ? \"running\" : \"idle\",\n updatedAt: Math.max(session.updatedAt, updatedAt),\n };\n}\n\nfunction upsertPermission(\n state: OpenHarnessClientState,\n request: PermissionRequestRecord | undefined,\n): OpenHarnessClientState {\n if (!request) return state;\n const bucket = cloneBucket(state.buckets[request.sessionId]);\n bucket.permissions = { ...bucket.permissions, [request.id]: request };\n return { ...state, buckets: { ...state.buckets, [request.sessionId]: bucket } };\n}\n\nfunction upsertTask(state: OpenHarnessClientState, task: SessionExecutionRecord | undefined): OpenHarnessClientState {\n if (!task) return state;\n const bucket = cloneBucket(state.buckets[task.sessionId]);\n bucket.tasks = { ...bucket.tasks, [task.id]: task };\n return { ...state, buckets: { ...state.buckets, [task.sessionId]: bucket } };\n}\n\nfunction cloneBucket(bucket: SessionBucket | undefined): SessionBucket {\n return {\n session: bucket?.session,\n inputs: bucket?.inputs ? [...bucket.inputs] : [],\n messages: bucket?.messages ? [...bucket.messages] : [],\n partsByMessageId: bucket?.partsByMessageId\n ? Object.fromEntries(Object.entries(bucket.partsByMessageId).map(([id, parts]) => [id, [...parts]]))\n : {},\n runs: bucket?.runs ? { ...bucket.runs } : {},\n attempts: bucket?.attempts ? { ...bucket.attempts } : {},\n tasks: bucket?.tasks ? { ...bucket.tasks } : {},\n permissions: bucket?.permissions ? { ...bucket.permissions } : {},\n };\n}\n\nfunction cloneBucketForPartWrite(bucket: SessionBucket | undefined): SessionBucket {\n return {\n session: bucket?.session,\n inputs: bucket?.inputs ?? [],\n messages: bucket?.messages ?? [],\n partsByMessageId: bucket?.partsByMessageId ?? {},\n runs: bucket?.runs ?? {},\n attempts: bucket?.attempts ?? {},\n tasks: bucket?.tasks ?? {},\n permissions: bucket?.permissions ?? {},\n };\n}\n\n/** 按 id 覆盖后按 sortKey 升序排列。 */\nfunction upsertSorted<T extends { id: string }>(rows: T[], row: T, sortKey: (row: T) => number): T[] {\n const without = rows.filter((existing) => existing.id !== row.id);\n without.push(row);\n return without.sort((a, b) => sortKey(a) - sortKey(b));\n}\n\n/** session 列表排序:最近更新优先。 */\nfunction sortSessionOrder(sessions: Record<string, SessionRecord>): string[] {\n return Object.values(sessions)\n .sort((a, b) => b.updatedAt - a.updatedAt || a.id.localeCompare(b.id))\n .map((session) => session.id);\n}\n",
18
- "/**\n * Read-only selectors over the reducer state.\n *\n * These stay UI-agnostic so TUI/Web/Desktop can share the canonical\n * message/part view and map it to their own presentation models.\n */\n\nimport type { SessionBucket, SessionMessagePartRecord, SessionMessageRecord } from \"../types/index.js\";\n\nexport interface SessionMessageWithParts {\n message: SessionMessageRecord;\n parts: SessionMessagePartRecord[];\n}\n\nexport function selectSessionMessagesWithParts(\n bucket: SessionBucket | undefined,\n): SessionMessageWithParts[] {\n if (!bucket) return [];\n return [...bucket.messages]\n .sort((a, b) => a.seq - b.seq)\n .map((message) => ({\n message,\n parts: [...(bucket.partsByMessageId[message.id] ?? [])].sort((a, b) => a.seq - b.seq),\n }));\n}\n",
19
- "/**\n * 客户端事件同步:session 使用原子 HTTP snapshot + SSE live;\n * 无 sessionId 的全局视图使用 HTTP replay + SSE live。\n *\n * UI(如 `useServerSync`)通常消费 `syncEvents`,而不是分别调 listEvents / streamEvents。\n * live SSE 非 abort 断流后按 `state.lastSeq` 指数退避重连;session 路径遇 seq 空洞会 re-snapshot。\n */\n\nimport {\n applyEvent,\n applyEvents,\n applySessionSnapshot,\n createInitialClientState,\n UnsupportedSessionEventSchemaVersionError,\n} from \"./reducer.js\";\nimport type {\n EventSyncOptions,\n OpenHarnessClientState,\n SessionEventRecord,\n SyncEventUpdate,\n} from \"../types/index.js\";\nimport type { OpenHarnessClient } from \"../transport/http-client.js\";\n\nconst DEFAULT_RECONNECT_DELAY_MS = (attempt: number): number =>\n Math.min(30_000, 250 * 2 ** Math.max(0, attempt));\n\n/** 用已有事件列表一次性 hydrate 出客户端状态(离线/测试常用)。 */\nexport function hydrateState(events: Iterable<SessionEventRecord>): OpenHarnessClientState {\n return applyEvents(createInitialClientState(), events);\n}\n\n/**\n * session attach 主路径:`getSessionState` snapshot → `streamEvents` live。\n * 每应用一条(或 live 下状态确有变化的)事件就 yield `{ event, state, source }`。\n * live 阶段若 `applyEvent` 因重复 seq 返回同一引用,则跳过 yield。\n */\nexport async function* syncEvents(\n client: OpenHarnessClient,\n options: EventSyncOptions = {},\n): AsyncIterable<SyncEventUpdate> {\n let state = createInitialClientState();\n if (options.sessionId) {\n const snapshot = await client.getSessionState(options.sessionId, { signal: options.signal });\n state = applySessionSnapshot(state, snapshot);\n yield { state, source: \"snapshot\" };\n\n yield* liveWithReconnect(client, state, options, snapshot.cursor);\n return;\n }\n const replay = await client.listEvents({\n cursor: options.cursor,\n sessionId: options.sessionId,\n signal: options.signal,\n });\n\n for (const event of replay) {\n state = applyEvent(state, event);\n yield { event, state, source: \"replay\" };\n }\n\n yield* liveWithReconnect(client, state, options, state.lastSeq);\n}\n\nasync function* liveWithReconnect(\n client: OpenHarnessClient,\n initialState: OpenHarnessClientState,\n options: EventSyncOptions,\n initialCursor: number,\n): AsyncIterable<SyncEventUpdate> {\n let state = initialState;\n let cursor = initialCursor;\n let attempt = 0;\n const delayMs = options.reconnectDelayMs ?? DEFAULT_RECONNECT_DELAY_MS;\n\n while (!options.signal?.aborted) {\n try {\n for await (const event of client.streamEvents({\n cursor,\n sessionId: options.sessionId,\n signal: options.signal,\n })) {\n attempt = 0;\n if (event.seq > state.lastSeq + 1 && !options.sessionId) {\n const gap = await client.listEvents({\n cursor: state.lastSeq,\n signal: options.signal,\n });\n for (const missed of gap) {\n const beforeGap = state;\n state = applyEvent(state, missed);\n if (state !== beforeGap) yield { event: missed, state, source: \"replay\" };\n }\n cursor = state.lastSeq;\n }\n\n const before = state;\n state = applyEvent(state, event);\n cursor = state.lastSeq;\n if (state !== before) yield { event, state, source: \"live\" };\n }\n\n // Clean stream end is treated as a disconnect that should resume.\n if (options.signal?.aborted) return;\n yield { state, source: \"reconnecting\" };\n if (!(await waitForReconnect(delayMs(attempt), options.signal))) return;\n attempt += 1;\n cursor = state.lastSeq;\n } catch (error) {\n if (error instanceof UnsupportedSessionEventSchemaVersionError) throw error;\n if (isAbortError(error) || options.signal?.aborted) return;\n yield { state, source: \"reconnecting\" };\n if (!(await waitForReconnect(delayMs(attempt), options.signal))) return;\n attempt += 1;\n cursor = state.lastSeq;\n }\n }\n}\n\nasync function waitForReconnect(ms: number, signal?: AbortSignal): Promise<boolean> {\n try {\n await sleep(ms, signal);\n return !signal?.aborted;\n } catch (error) {\n if (isAbortError(error) || signal?.aborted) return false;\n throw error;\n }\n}\n\nfunction isAbortError(error: unknown): boolean {\n if (!error || typeof error !== \"object\") return false;\n if (\"name\" in error && (error as { name?: string }).name === \"AbortError\") return true;\n return false;\n}\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n if (ms <= 0) {\n if (signal?.aborted) return Promise.reject(abortError(signal));\n return Promise.resolve();\n }\n return new Promise<void>((resolve, reject) => {\n if (signal?.aborted) {\n reject(abortError(signal));\n return;\n }\n const timer = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(timer);\n reject(abortError(signal!));\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\nfunction abortError(signal: AbortSignal): Error {\n if (signal.reason instanceof Error) return signal.reason;\n return new DOMException(\"Aborted\", \"AbortError\");\n}\n",
20
- "export * from \"./reducer.js\";\nexport * from \"./selectors.js\";\nexport * from \"./sync.js\";\n",
15
+ "/**\n * ProtocolClient: 协议协商与健康检查客户端。\n *\n * 负责:\n * - GET /health 服务健康探测 (无需鉴权)\n * - GET /capabilities 服务协议能力探测与版本协商 (无需鉴权)\n * - 协议兼容性断言与 IncompatibleProtocolError 抛出\n *\n * 约束:\n * - 构造只接收 HttpTransport\n * - 业务请求的强制握手由 HttpTransport 缓存并执行\n */\n\nimport type {\n ClientProtocolSupport,\n ServerCapabilities,\n} from \"@openharness/protocol\";\nimport {\n checkProtocolCompatibility,\n CURRENT_PROTOCOL_VERSION,\n parseServerCapabilities,\n} from \"@openharness/protocol\";\nimport type { HttpTransport } from \"../transport/http-transport.js\";\nimport type { OpenHarnessServerHealth } from \"../types/index.js\";\n\nexport class IncompatibleProtocolError extends Error {\n constructor(\n readonly capabilities: ServerCapabilities,\n message: string,\n ) {\n super(message);\n this.name = \"IncompatibleProtocolError\";\n }\n}\n\nexport interface CapabilitiesOptions {\n signal?: AbortSignal;\n support?: ClientProtocolSupport;\n}\n\nexport interface HealthOptions {\n signal?: AbortSignal;\n}\n\nexport class ProtocolClient {\n constructor(private readonly transport: HttpTransport) {}\n\n /** `GET /health` */\n async health(options: HealthOptions = {}): Promise<OpenHarnessServerHealth> {\n return this.transport.request<OpenHarnessServerHealth>(\"/health\", {\n auth: false,\n signal: options.signal,\n });\n }\n\n /**\n * `GET /capabilities`\n * 连接产品应先调用它,再根据 features 决定显示哪些功能。\n */\n async capabilities(\n options: CapabilitiesOptions = {},\n ): Promise<ServerCapabilities> {\n const value = await this.transport.request<unknown>(\"/capabilities\", {\n auth: false,\n signal: options.signal,\n });\n const capabilities = parseServerCapabilities(value);\n const compatibility = checkProtocolCompatibility(\n capabilities,\n options.support ?? { version: CURRENT_PROTOCOL_VERSION },\n );\n if (!compatibility.compatible) {\n throw new IncompatibleProtocolError(\n capabilities,\n compatibility.reason ??\n \"Client and server protocol versions are incompatible\",\n );\n }\n return capabilities;\n }\n}\n",
16
+ "/**\n * HttpTransport: OpenHarness HTTP 传输内核。\n *\n * 负责:\n * - Base URL 规范化\n * - Bearer Token 鉴权头\n * - fetch 注入与执行\n * - URL query 拼接\n * - 请求体序列化与错误转换 (OpenHarnessApiError)\n * - 基础响应解析与流式透传\n *\n * 约束:不感知任何业务 Resource 领域逻辑。\n */\n\nimport {\n ProtocolDataError,\n CURRENT_PROTOCOL_VERSION,\n PROTOCOL_VERSION_HEADER,\n checkProtocolCompatibility,\n parseServerCapabilities,\n type ServerCapabilities,\n} from \"@openharness/protocol\";\nimport { IncompatibleProtocolError } from \"../protocol/protocol-client.js\";\n\nexport interface HttpTransportOptions {\n baseUrl: string;\n token?: string;\n fetch?: typeof fetch;\n}\n\nexport interface HttpRequestOptions {\n method?: string;\n body?: unknown;\n headers?: RequestInit[\"headers\"];\n query?: Record<string, unknown>;\n signal?: AbortSignal;\n auth?: boolean;\n}\n\nexport interface RawRequestOptions extends RequestInit {\n duplex?: \"half\";\n query?: Record<string, unknown>;\n auth?: boolean;\n}\n\n/** HTTP API 非 2xx 时抛出;携带 status 与原始响应体。 */\nexport class OpenHarnessApiError extends Error {\n constructor(\n message: string,\n readonly status: number,\n readonly body: unknown,\n ) {\n super(message);\n this.name = \"OpenHarnessApiError\";\n }\n}\n\nexport function responseField(value: unknown, field: string): unknown {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new ProtocolDataError(\"Response body must be an object\");\n }\n if (!(field in value)) {\n throw new ProtocolDataError(`Response body is missing ${field}`, field);\n }\n return (value as Record<string, unknown>)[field];\n}\n\nexport function responseArray<T>(\n value: unknown,\n field: string,\n decode: (item: unknown) => T,\n): T[] {\n const items = responseField(value, field);\n if (!Array.isArray(items)) {\n throw new ProtocolDataError(`Response ${field} must be an array`, field);\n }\n return items.map(decode);\n}\n\n/** Normalize a daemon base URL without accepting credentials or request fragments. */\nexport function normalizeDaemonBaseUrl(value: string): string {\n const raw = value.trim();\n if (!raw) throw new Error(\"Daemon URL is required\");\n\n let url: URL;\n try {\n url = new URL(raw);\n } catch {\n throw new Error(\"Daemon URL must be an absolute http or https URL\");\n }\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n throw new Error(\"Daemon URL must use http or https\");\n }\n if (url.username || url.password) {\n throw new Error(\n \"Daemon URL must not contain credentials; use a bearer token instead\",\n );\n }\n if (url.search || url.hash) {\n throw new Error(\n \"Daemon URL must not contain query parameters or a fragment\",\n );\n }\n\n const pathname = url.pathname.replace(/\\/+$/, \"\");\n return `${url.origin}${pathname === \"/\" ? \"\" : pathname}`;\n}\n\nexport function isReadableStream(value: unknown): value is ReadableStream<Uint8Array> {\n return (\n typeof ReadableStream !== \"undefined\" && value instanceof ReadableStream\n );\n}\n\nexport interface AttachmentRangeOptions {\n start?: number;\n end?: number;\n suffixBytes?: number;\n}\n\nexport function attachmentRangeHeader(\n range: AttachmentRangeOptions | undefined,\n): string | undefined {\n if (!range) return undefined;\n const { start, end, suffixBytes } = range;\n if (suffixBytes !== undefined) {\n if (start !== undefined || end !== undefined) {\n throw new Error(\"suffixBytes cannot be combined with start or end\");\n }\n assertPositiveSafeInteger(suffixBytes, \"suffixBytes\");\n return `bytes=-${suffixBytes}`;\n }\n if (start === undefined && end === undefined) return undefined;\n if (start === undefined) {\n throw new Error(\"range start is required when end is provided\");\n }\n assertNonNegativeSafeInteger(start, \"start\");\n if (end === undefined) return `bytes=${start}-`;\n assertNonNegativeSafeInteger(end, \"end\");\n if (end < start) throw new Error(\"range end must not be less than start\");\n return `bytes=${start}-${end}`;\n}\n\nfunction assertNonNegativeSafeInteger(value: number, field: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new Error(`${field} must be a non-negative safe integer`);\n }\n}\n\nfunction assertPositiveSafeInteger(value: number, field: string): void {\n if (!Number.isSafeInteger(value) || value < 1) {\n throw new Error(`${field} must be a positive safe integer`);\n }\n}\n\nexport async function throwResponseError(response: Response): Promise<never> {\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = await response.text().catch(() => \"\");\n }\n const message =\n body &&\n typeof body === \"object\" &&\n \"error\" in body &&\n typeof body.error === \"string\"\n ? body.error\n : body &&\n typeof body === \"object\" &&\n \"message\" in body &&\n typeof body.message === \"string\"\n ? body.message\n : `OpenHarness API request failed with ${response.status}`;\n throw new OpenHarnessApiError(message, response.status, body);\n}\n\nexport class HttpTransport {\n private protocolHandshake?: Promise<ServerCapabilities>;\n readonly baseUrl: string;\n readonly token?: string;\n readonly fetchImpl: typeof fetch;\n\n constructor(options: HttpTransportOptions) {\n this.baseUrl = normalizeDaemonBaseUrl(options.baseUrl);\n this.token = options.token;\n this.fetchImpl = options.fetch ?? fetch;\n }\n\n isHandshakeExempt(pathname: string): boolean {\n const path = pathname.split(\"?\")[0];\n return path === \"/health\" || path === \"/capabilities\";\n }\n\n ensureProtocol(signal?: AbortSignal): Promise<ServerCapabilities> {\n signal?.throwIfAborted();\n this.protocolHandshake ??= this.requestUnknown(\"/capabilities\", { auth: false })\n .then((value) => {\n const capabilities = parseServerCapabilities(value);\n const result = checkProtocolCompatibility(capabilities, { version: CURRENT_PROTOCOL_VERSION });\n if (!result.compatible) {\n throw new IncompatibleProtocolError(capabilities, result.reason!);\n }\n return capabilities;\n })\n .catch((error: unknown) => {\n this.protocolHandshake = undefined;\n throw error;\n });\n // Cancellation belongs to each waiter, not to the shared connection probe.\n if (!signal) return this.protocolHandshake;\n return new Promise((resolve, reject) => {\n const onAbort = () => reject(signal.reason);\n signal.addEventListener(\"abort\", onAbort, { once: true });\n this.protocolHandshake!.then(resolve, reject).finally(() => {\n signal.removeEventListener(\"abort\", onAbort);\n });\n });\n }\n\n headers(\n jsonOrOptions:\n | boolean\n | { json?: boolean; auth?: boolean; extra?: Record<string, string> } = false,\n auth = true,\n ): Record<string, string> {\n let json = false;\n let authHeader = auth;\n let extra: Record<string, string> | undefined;\n\n if (typeof jsonOrOptions === \"object\" && jsonOrOptions !== null) {\n json = jsonOrOptions.json ?? false;\n authHeader = jsonOrOptions.auth ?? true;\n extra = jsonOrOptions.extra;\n } else {\n json = Boolean(jsonOrOptions);\n authHeader = auth;\n }\n\n return {\n ...(authHeader && this.token ? { authorization: `Bearer ${this.token}` } : {}),\n ...(json ? { \"content-type\": \"application/json\" } : {}),\n ...(extra ?? {}),\n };\n }\n\n path(pathname: string, query: Record<string, unknown> = {}): string {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null || value === false) continue;\n params.set(key, String(value));\n }\n const qs = params.toString();\n return qs ? `${pathname}?${qs}` : pathname;\n }\n\n resolveUrl(pathname: string, query?: Record<string, unknown>): string {\n const resolvedPath = query ? this.path(pathname, query) : pathname;\n return `${this.baseUrl}${resolvedPath}`;\n }\n\n async request<T>(path: string, options: HttpRequestOptions = {}): Promise<T> {\n const business = !this.isHandshakeExempt(path);\n if (business) await this.ensureProtocol(options.signal);\n options.signal?.throwIfAborted();\n const url = this.resolveUrl(path, options.query);\n const hasJsonBody = options.body !== undefined;\n const headers = mergeHeaders(\n this.headers(hasJsonBody, options.auth ?? true),\n options.headers,\n );\n if (business) headers[PROTOCOL_VERSION_HEADER] = String(CURRENT_PROTOCOL_VERSION);\n\n const response = await this.fetchImpl(url, {\n method: options.method ?? \"GET\",\n headers,\n body: hasJsonBody ? JSON.stringify(options.body) : undefined,\n signal: options.signal,\n });\n\n if (!response.ok) {\n await throwResponseError(response);\n }\n return (await response.json()) as T;\n }\n\n async requestUnknown(\n path: string,\n options: HttpRequestOptions = {},\n ): Promise<unknown> {\n return this.request<unknown>(path, options);\n }\n\n async requestResponse(\n path: string,\n options: RawRequestOptions = {},\n ): Promise<Response> {\n const business = !this.isHandshakeExempt(path);\n if (business) await this.ensureProtocol(options.signal ?? undefined);\n options.signal?.throwIfAborted();\n const url = this.resolveUrl(path, options.query);\n const auth = options.auth ?? true;\n const headers = mergeHeaders(this.headers(false, auth), options.headers);\n if (business) headers[PROTOCOL_VERSION_HEADER] = String(CURRENT_PROTOCOL_VERSION);\n\n const init: RequestInit & { duplex?: \"half\" } = {\n ...options,\n headers,\n };\n if (isReadableStream(init.body) && !init.duplex) {\n init.duplex = \"half\";\n }\n\n const response = await this.fetchImpl(url, init);\n if (!response.ok) {\n await throwResponseError(response);\n }\n return response;\n }\n\n async throwResponseError(response: Response): Promise<never> {\n return throwResponseError(response);\n }\n}\n\nfunction mergeHeaders(\n defaults: NonNullable<RequestInit[\"headers\"]>,\n overrides?: RequestInit[\"headers\"],\n): Record<string, string> {\n const headers = new Headers(defaults);\n if (overrides) {\n new Headers(overrides).forEach((value, key) => headers.set(key, value));\n }\n return Object.fromEntries(headers.entries());\n}\n",
17
+ "/**\n * SseTransport: Server-Sent Events 流式传输内核。\n *\n * 负责:\n * - 原始字节流 TextDecoder 解码\n * - SSE 行解析(data:, event:, id:, retry:, 注释行)\n * - 多行 data 拼接(\\n 间隔)\n * - CRLF / LF 空行完成单个 frame\n * - signal / abort 支持\n * - Last-Event-ID 透传与错误处理\n */\n\nimport type { HttpTransport } from \"./http-transport.js\";\n\nexport interface SseStreamOptions<T = unknown> {\n headers?: RequestInit[\"headers\"];\n signal?: AbortSignal;\n lastEventId?: string;\n decode?: (value: unknown) => T;\n reconnect?: boolean;\n reconnectDelayMs?: number;\n noBodyMessage?: string;\n}\n\nexport interface SseRawFrame {\n id?: string;\n event?: string;\n data?: string;\n retry?: number;\n}\n\n/**\n * 解析单个 SSE frame 的各字段。\n * 符合 W3C SSE 规范:多行 data 以 LF 拼接;以冒号开头的注释行跳过。\n */\nexport function parseRawSseFrame(frame: string): SseRawFrame | undefined {\n let id: string | undefined;\n let event: string | undefined;\n let retry: number | undefined;\n const dataLines: string[] = [];\n\n for (const line of frame.split(/\\r?\\n/)) {\n if (!line || line.startsWith(\":\")) continue;\n if (line.startsWith(\"data:\")) {\n dataLines.push(line.startsWith(\"data: \") ? line.slice(6) : line.slice(5));\n } else if (line.startsWith(\"event:\")) {\n event = (line.startsWith(\"event: \") ? line.slice(7) : line.slice(6)).trim();\n } else if (line.startsWith(\"id:\")) {\n id = (line.startsWith(\"id: \") ? line.slice(4) : line.slice(3)).trim();\n } else if (line.startsWith(\"retry:\")) {\n const value = (line.startsWith(\"retry: \") ? line.slice(7) : line.slice(6)).trim();\n const parsed = parseInt(value, 10);\n if (!Number.isNaN(parsed)) {\n retry = parsed;\n }\n }\n }\n\n if (dataLines.length === 0 && !id && !event && retry === undefined) {\n return undefined;\n }\n\n return {\n id,\n event,\n retry,\n data: dataLines.length > 0 ? dataLines.join(\"\\n\") : undefined,\n };\n}\n\n/** 解析单个 SSE frame 的 `data:` 行,得到事件 JSON。保持原有行为。 */\nexport function parseSseFrame(frame: string): unknown | undefined {\n let data = \"\";\n for (const line of frame.split(/\\r?\\n/)) {\n if (!line || line.startsWith(\":\")) continue;\n if (line.startsWith(\"data:\")) {\n const slice = line.slice(5).trimStart();\n data = data ? `${data}\\n${slice}` : slice;\n }\n }\n if (!data) return undefined;\n return JSON.parse(data) as unknown;\n}\n\n/**\n * 将 SSE 字节流解析为事件异步迭代器。\n * `open` 负责建立连接并返回 response body,便于重试或注入。\n */\nexport async function* streamServerSentEvents<T>(\n open: () => Promise<ReadableStream<Uint8Array>>,\n decode: (value: unknown) => T = (value) => value as T,\n): AsyncIterable<T> {\n const reader = (await open()).getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n try {\n while (true) {\n const chunk = await reader.read();\n if (chunk.done) break;\n buffer += decoder.decode(chunk.value, { stream: true });\n // SSE 事件以空行分隔\n const frames = buffer.split(/\\r?\\n\\r?\\n/);\n buffer = frames.pop() ?? \"\";\n for (const frame of frames) {\n const event = parseSseFrame(frame);\n if (event !== undefined) yield decode(event);\n }\n }\n buffer += decoder.decode();\n const event = parseSseFrame(buffer);\n if (event !== undefined) yield decode(event);\n } finally {\n reader.releaseLock();\n }\n}\n\nexport class SseTransport {\n constructor(private readonly transport: HttpTransport) {}\n\n streamFromReader<T>(\n open: () => Promise<ReadableStream<Uint8Array>>,\n decode: (value: unknown) => T = (val) => val as T,\n ): AsyncIterable<T> {\n return streamServerSentEvents(open, decode);\n }\n\n async *stream<T>(\n url: string,\n options: SseStreamOptions<T> = {},\n ): AsyncIterable<T> {\n let lastEventId = options.lastEventId;\n let reconnectDelayMs = options.reconnectDelayMs ?? 250;\n let connected = false;\n\n while (!options.signal?.aborted) {\n const headers = new Headers(options.headers);\n if (lastEventId) headers.set(\"Last-Event-ID\", lastEventId);\n const requestUrl = connected && lastEventId ? withoutCursor(url) : url;\n const response = await this.transport.requestResponse(\n requestUrl.slice(this.transport.baseUrl.length),\n { headers, signal: options.signal },\n );\n connected = true;\n if (!response.body) {\n throw new Error(options.noBodyMessage ?? \"Event stream response has no body\");\n }\n\n for await (const frame of readRawSseFrames(response.body)) {\n if (frame.id !== undefined) lastEventId = frame.id;\n if (frame.retry !== undefined) reconnectDelayMs = frame.retry;\n if (frame.data !== undefined) {\n yield (options.decode ?? ((value) => value as T))(JSON.parse(frame.data));\n }\n }\n\n if (!options.reconnect || options.signal?.aborted) return;\n await waitForReconnect(reconnectDelayMs, options.signal);\n }\n }\n}\n\nasync function* readRawSseFrames(\n stream: ReadableStream<Uint8Array>,\n): AsyncIterable<SseRawFrame> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n try {\n while (true) {\n const chunk = await reader.read();\n if (chunk.done) break;\n buffer += decoder.decode(chunk.value, { stream: true });\n const frames = buffer.split(/\\r?\\n\\r?\\n/);\n buffer = frames.pop() ?? \"\";\n for (const value of frames) {\n const frame = parseRawSseFrame(value);\n if (frame) yield frame;\n }\n }\n buffer += decoder.decode();\n const frame = parseRawSseFrame(buffer);\n if (frame) yield frame;\n } finally {\n reader.releaseLock();\n }\n}\n\nfunction waitForReconnect(ms: number, signal?: AbortSignal): Promise<void> {\n if (signal?.aborted) return Promise.reject(abortError(signal));\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, Math.max(0, ms));\n const onAbort = () => {\n clearTimeout(timer);\n reject(abortError(signal!));\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\nfunction abortError(signal: AbortSignal): Error {\n if (signal.reason instanceof Error) return signal.reason;\n return new DOMException(\"Aborted\", \"AbortError\");\n}\n\nfunction withoutCursor(url: string): string {\n const parsed = new URL(url);\n parsed.searchParams.delete(\"cursor\");\n return parsed.toString();\n}\n",
18
+ "export * from \"./protocol-client.js\";\n",
19
+ "/**\n * SystemResource: 系统配置、命令、上下文、记忆、Dream 与环境设定资源。\n */\n\nimport type { PluginCatalogEntry } from \"@openharness/protocol\";\nimport type { HttpTransport } from \"../transport/http-transport.js\";\nimport type {\n CommandCatalogEntry,\n ListCommandsOptions,\n McpServerStatus,\n MemoryEntryRecord,\n MemoryListResponse,\n OutputStyleInfo,\n StartDreamResponse,\n} from \"../types/index.js\";\n\nexport class SystemResource {\n constructor(private readonly transport: HttpTransport) {}\n\n /** `GET /commands` */\n async listCommands(\n options: ListCommandsOptions & { signal?: AbortSignal },\n ): Promise<CommandCatalogEntry[]> {\n const { signal, ...query } = options;\n const response = await this.transport.request<{ commands: CommandCatalogEntry[] }>(\n this.transport.path(\"/commands\", query),\n { signal },\n );\n return response.commands;\n }\n\n /** `GET /settings` */\n async getSettings(\n options: { signal?: AbortSignal } = {},\n ): Promise<Record<string, unknown>> {\n const response = await this.transport.request<{ settings: Record<string, unknown> }>(\n \"/settings\",\n { signal: options.signal },\n );\n return response.settings;\n }\n\n /** `PATCH /settings` */\n async patchSettings(\n patch: Record<string, unknown>,\n options: { signal?: AbortSignal } = {},\n ): Promise<Record<string, unknown>> {\n const response = await this.transport.request<{ settings: Record<string, unknown> }>(\n \"/settings\",\n {\n method: \"PATCH\",\n body: patch,\n signal: options.signal,\n },\n );\n return response.settings;\n }\n\n /** `GET /sessions/:id/mcp` */\n async getSessionMcp(\n sessionId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<McpServerStatus[]> {\n const response = await this.transport.request<{ servers: McpServerStatus[] }>(\n `/sessions/${encodeURIComponent(sessionId)}/mcp`,\n { signal: options.signal },\n );\n return response.servers;\n }\n\n /** `GET /memory?cwd=` */\n async listMemory(options: {\n cwd: string;\n signal?: AbortSignal;\n }): Promise<MemoryListResponse> {\n const { signal, ...query } = options;\n return await this.transport.request<MemoryListResponse>(\n this.transport.path(\"/memory\", query),\n { signal },\n );\n }\n\n /** `GET /memory/:id?cwd=` */\n async getMemory(\n entryId: string,\n options: { cwd: string; signal?: AbortSignal },\n ): Promise<MemoryEntryRecord> {\n const { signal, cwd } = options;\n const response = await this.transport.request<{ entry: MemoryEntryRecord }>(\n this.transport.path(`/memory/${encodeURIComponent(entryId)}`, { cwd }),\n { signal },\n );\n return response.entry;\n }\n\n /** `POST /memory` */\n async addMemory(\n input: { cwd: string; content: string; tags?: string[] },\n options: { signal?: AbortSignal } = {},\n ): Promise<MemoryEntryRecord> {\n const response = await this.transport.request<{ entry: MemoryEntryRecord }>(\n \"/memory\",\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n return response.entry;\n }\n\n /** `DELETE /memory/:id?cwd=` */\n async removeMemory(\n entryId: string,\n options: { cwd: string; signal?: AbortSignal },\n ): Promise<void> {\n const { signal, cwd } = options;\n await this.transport.request<{ deleted: boolean }>(\n this.transport.path(`/memory/${encodeURIComponent(entryId)}`, { cwd }),\n { method: \"DELETE\", signal },\n );\n }\n\n /** `GET /context/plugins?cwd=` — safe plugin picker metadata. */\n async listContextPlugins(options: {\n cwd: string;\n signal?: AbortSignal;\n }): Promise<PluginCatalogEntry[]> {\n const { signal, ...query } = options;\n const response = await this.transport.request<{ plugins: PluginCatalogEntry[] }>(\n this.transport.path(\"/context/plugins\", query),\n { signal },\n );\n return response.plugins;\n }\n\n /** `GET /context?cwd=` */\n async getContextPreview(options: {\n cwd: string;\n signal?: AbortSignal;\n }): Promise<string> {\n const { signal, ...query } = options;\n const response = await this.transport.request<{ report: string }>(\n this.transport.path(\"/context\", query),\n { signal },\n );\n return response.report;\n }\n\n /** `GET /context/status?cwd=` */\n async getContextStatus(options: {\n cwd: string;\n signal?: AbortSignal;\n }): Promise<string> {\n const { signal, ...query } = options;\n const response = await this.transport.request<{ report: string }>(\n this.transport.path(\"/context/status\", query),\n { signal },\n );\n return response.report;\n }\n\n /** `GET /context/usage?cwd=&sessionId=&refresh=` */\n async getContextUsage(options: {\n cwd: string;\n sessionId?: string;\n refresh?: boolean;\n previousContextWindow?: number;\n signal?: AbortSignal;\n }): Promise<{ snapshot: unknown; report: string }> {\n const { signal, refresh, previousContextWindow, ...rest } = options;\n const query: Record<string, string | undefined> = {\n ...rest,\n ...(refresh !== undefined ? { refresh: refresh ? \"true\" : \"false\" } : {}),\n ...(previousContextWindow !== undefined\n ? { previousContextWindow: String(previousContextWindow) }\n : {}),\n };\n return await this.transport.request<{ snapshot: unknown; report: string }>(\n this.transport.path(\"/context/usage\", query),\n { signal },\n );\n }\n\n /** `POST /dream` */\n async startDream(\n input: { cwd: string; sessionId?: string; preview?: boolean },\n options: { signal?: AbortSignal } = {},\n ): Promise<StartDreamResponse> {\n return await this.transport.request<StartDreamResponse>(\"/dream\", {\n method: \"POST\",\n body: input,\n signal: options.signal,\n });\n }\n\n /** `GET /profile` */\n async getProfileStatus(\n options: { signal?: AbortSignal } = {},\n ): Promise<string> {\n const response = await this.transport.request<{ report: string }>(\"/profile\", {\n signal: options.signal,\n });\n return response.report;\n }\n\n /** `POST /profile/init` */\n async initProfile(options: { signal?: AbortSignal } = {}): Promise<string> {\n const response = await this.transport.request<{ report: string }>(\n \"/profile/init\",\n {\n method: \"POST\",\n signal: options.signal,\n },\n );\n return response.report;\n }\n\n /** `GET /output-styles` */\n async listOutputStyles(\n options: { signal?: AbortSignal } = {},\n ): Promise<OutputStyleInfo[]> {\n const response = await this.transport.request<{ styles: OutputStyleInfo[] }>(\n \"/output-styles\",\n {\n signal: options.signal,\n },\n );\n return response.styles;\n }\n}\n",
20
+ "/**\n * ProviderResource: 模型提供商与 Catalog 配置资源。\n */\n\nimport type { HttpTransport } from \"../transport/http-transport.js\";\nimport type {\n ConnectCatalogProviderInput,\n CustomProviderInput,\n ModelProviderInfo,\n ProviderInfo,\n} from \"../types/index.js\";\n\nexport class ProviderResource {\n constructor(private readonly transport: HttpTransport) {}\n\n /** `GET /providers` */\n async listProviders(\n options: { signal?: AbortSignal } = {},\n ): Promise<ProviderInfo[]> {\n const response = await this.transport.request<{ providers: ProviderInfo[] }>(\n \"/providers\",\n { signal: options.signal },\n );\n return response.providers;\n }\n\n /** `POST /providers/custom` */\n async createCustomProvider(\n input: CustomProviderInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<ProviderInfo> {\n const response = await this.transport.request<{ provider: ProviderInfo }>(\n \"/providers/custom\",\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n return response.provider;\n }\n\n /** `POST /providers/catalog/:id/connect` */\n async connectCatalogProvider(\n id: string,\n apiKey: string,\n options?: { signal?: AbortSignal },\n ): Promise<ProviderInfo>;\n async connectCatalogProvider(\n id: string,\n input: ConnectCatalogProviderInput,\n options?: { signal?: AbortSignal },\n ): Promise<ProviderInfo>;\n async connectCatalogProvider(\n id: string,\n apiKeyOrInput: string | ConnectCatalogProviderInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<ProviderInfo> {\n const body: ConnectCatalogProviderInput =\n typeof apiKeyOrInput === \"string\"\n ? { apiKey: apiKeyOrInput }\n : apiKeyOrInput;\n const response = await this.transport.request<{ provider: ProviderInfo }>(\n `/providers/catalog/${encodeURIComponent(id)}/connect`,\n { method: \"POST\", body, signal: options.signal },\n );\n return response.provider;\n }\n\n /** `PATCH /providers/catalog/:id` */\n async updateCatalogProviderHeaders(\n id: string,\n headers: Record<string, string>,\n options: { signal?: AbortSignal } = {},\n ): Promise<ProviderInfo> {\n const response = await this.transport.request<{ provider: ProviderInfo }>(\n `/providers/catalog/${encodeURIComponent(id)}`,\n {\n method: \"PATCH\",\n body: { headers },\n signal: options.signal,\n },\n );\n return response.provider;\n }\n\n /** `DELETE /providers/catalog/:id/connect` */\n async disconnectCatalogProvider(\n id: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<void> {\n await this.transport.request<{ ok: true }>(\n `/providers/catalog/${encodeURIComponent(id)}/connect`,\n { method: \"DELETE\", signal: options.signal },\n );\n }\n\n /** `PATCH /providers/custom/:id` */\n async updateCustomProvider(\n id: string,\n input: CustomProviderInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<ProviderInfo> {\n const response = await this.transport.request<{ provider: ProviderInfo }>(\n `/providers/custom/${encodeURIComponent(id)}`,\n { method: \"PATCH\", body: input, signal: options.signal },\n );\n return response.provider;\n }\n\n /** `DELETE /providers/custom/:id` */\n async removeCustomProvider(\n id: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<void> {\n await this.transport.request<{ ok: true }>(\n `/providers/custom/${encodeURIComponent(id)}`,\n {\n method: \"DELETE\",\n signal: options.signal,\n },\n );\n }\n\n /** `GET /models` */\n async listModels(\n options: { signal?: AbortSignal } = {},\n ): Promise<ModelProviderInfo[]> {\n const response = await this.transport.request<{ providers: ModelProviderInfo[] }>(\n \"/models\",\n { signal: options.signal },\n );\n return response.providers;\n }\n}\n",
21
+ "/**\n * AuthResource: 鉴权与第三方认证状态资源。\n */\n\nimport type { HttpTransport } from \"../transport/http-transport.js\";\nimport type { AuthStatus } from \"../types/index.js\";\n\nexport class AuthResource {\n constructor(private readonly transport: HttpTransport) {}\n\n /** `GET /auth` */\n async getStatus(\n options: { signal?: AbortSignal } = {},\n ): Promise<AuthStatus> {\n const response = await this.transport.request<{ auth: AuthStatus }>(\"/auth\", {\n signal: options.signal,\n });\n return response.auth;\n }\n\n /** `POST /auth/login` */\n async login(\n input: { provider: string; apiKey?: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<{ message: string }> {\n return await this.transport.request<{ message: string }>(\"/auth/login\", {\n method: \"POST\",\n body: input,\n signal: options.signal,\n });\n }\n\n /** `POST /auth/logout` */\n async logout(\n input: { provider: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<{ message: string }> {\n return await this.transport.request<{ message: string }>(\"/auth/logout\", {\n method: \"POST\",\n body: input,\n signal: options.signal,\n });\n }\n}\n",
22
+ "/**\n * ProjectResource: 项目目录探测、绑定、别名与元数据管理资源。\n */\n\nimport type { HttpTransport } from \"../transport/http-transport.js\";\nimport type { ListProjectsOptions, ProjectRecord } from \"../types/index.js\";\n\nexport class ProjectResource {\n constructor(private readonly transport: HttpTransport) {}\n\n /** `GET /projects` */\n async list(\n options: ListProjectsOptions & { signal?: AbortSignal } = {},\n ): Promise<ProjectRecord[]> {\n const { signal, ...query } = options;\n const response = await this.transport.request<{ projects: ProjectRecord[] }>(\n this.transport.path(\"/projects\", query),\n { signal },\n );\n return response.projects;\n }\n\n /** `POST /projects/inspect` */\n async inspect(path: string): Promise<ProjectRecord> {\n return (\n await this.transport.request<{ project: ProjectRecord }>(\"/projects/inspect\", {\n method: \"POST\",\n body: { path },\n })\n ).project;\n }\n\n /** `PATCH /projects/:id` (name) */\n async rename(projectId: string, name: string): Promise<ProjectRecord> {\n return (\n await this.transport.request<{ project: ProjectRecord }>(\n `/projects/${encodeURIComponent(projectId)}`,\n { method: \"PATCH\", body: { name } },\n )\n ).project;\n }\n\n /** `PATCH /projects/:id` (pinned) */\n async setPinned(\n projectId: string,\n pinned: boolean,\n ): Promise<ProjectRecord> {\n return (\n await this.transport.request<{ project: ProjectRecord }>(\n `/projects/${encodeURIComponent(projectId)}`,\n { method: \"PATCH\", body: { pinned } },\n )\n ).project;\n }\n\n /** `PATCH /projects/:id` (defaultShell) */\n async setDefaultShell(\n projectId: string,\n defaultShell: string | null,\n ): Promise<ProjectRecord> {\n return (\n await this.transport.request<{ project: ProjectRecord }>(\n `/projects/${encodeURIComponent(projectId)}`,\n { method: \"PATCH\", body: { defaultShell } },\n )\n ).project;\n }\n\n /** `POST /projects/:id/rebind` */\n async rebind(projectId: string, path: string): Promise<ProjectRecord> {\n return (\n await this.transport.request<{ project: ProjectRecord }>(\n `/projects/${encodeURIComponent(projectId)}/rebind`,\n { method: \"POST\", body: { path } },\n )\n ).project;\n }\n\n /** `DELETE /projects/:id` */\n async archive(projectId: string): Promise<ProjectRecord> {\n return (\n await this.transport.request<{ project: ProjectRecord }>(\n `/projects/${encodeURIComponent(projectId)}`,\n { method: \"DELETE\" },\n )\n ).project;\n }\n\n /** `POST /project/init` */\n async init(\n input: { cwd: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<string> {\n const response = await this.transport.request<{ report: string }>(\"/project/init\", {\n method: \"POST\",\n body: input,\n signal: options.signal,\n });\n return response.report;\n }\n}\n",
23
+ "/**\n * PluginResource: 插件发现、生命周期、本地与归档安装、Git 安装与重载资源。\n */\n\nimport type { HttpTransport } from \"../transport/http-transport.js\";\nimport type {\n PluginArchivePreview,\n PluginGitPreview,\n PluginInfo,\n ReloadPluginsResponse,\n} from \"../types/index.js\";\n\nexport class PluginResource {\n constructor(private readonly transport: HttpTransport) {}\n\n /** `GET /plugins?cwd=` */\n async list(options: { cwd: string; signal?: AbortSignal }): Promise<{\n plugins: PluginInfo[];\n warnings: string[];\n }> {\n const { signal, ...query } = options;\n return await this.transport.request<{ plugins: PluginInfo[]; warnings: string[] }>(\n this.transport.path(\"/plugins\", query),\n { signal },\n );\n }\n\n /** `POST /plugins/:id/enable` */\n async enable(\n id: string,\n input: { cwd: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<{ message: string }> {\n return await this.transport.request<{ message: string }>(\n `/plugins/${encodeURIComponent(id)}/enable`,\n { method: \"POST\", body: input, signal: options.signal },\n );\n }\n\n /** `POST /plugins/:id/disable` */\n async disable(\n id: string,\n input: { cwd: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<{ message: string }> {\n return await this.transport.request<{ message: string }>(\n `/plugins/${encodeURIComponent(id)}/disable`,\n { method: \"POST\", body: input, signal: options.signal },\n );\n }\n\n /** `POST /plugins/install-local` 或 `/plugins/link-local` */\n async installLocal(input: {\n cwd: string;\n sourcePath: string;\n scope: \"user\";\n approvedPermissions: string[];\n link?: boolean;\n }): Promise<{ message: string }> {\n return await this.transport.request<{ message: string }>(\n input.link ? \"/plugins/link-local\" : \"/plugins/install-local\",\n { method: \"POST\", body: input },\n );\n }\n\n /** `POST /plugins/archive/preview` */\n async previewArchive(\n input: { cwd: string; archivePath: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<PluginArchivePreview> {\n return await this.transport.request<PluginArchivePreview>(\n \"/plugins/archive/preview\",\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n }\n\n /** `POST /plugins/archive/install` */\n async installArchive(\n input: {\n cwd: string;\n archivePath: string;\n expectedArchiveDigest: string;\n approvedPermissions: string[];\n },\n options: { signal?: AbortSignal } = {},\n ): Promise<{ message: string }> {\n return await this.transport.request<{ message: string }>(\n \"/plugins/archive/install\",\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n }\n\n /** `POST /plugins/git/preview` */\n async previewGit(\n input: { cwd: string; url: string; ref?: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<PluginGitPreview> {\n return await this.transport.request<PluginGitPreview>(\n \"/plugins/git/preview\",\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n }\n\n /** `POST /plugins/git/install` */\n async installGit(\n input: {\n cwd: string;\n url: string;\n ref?: string;\n expectedSourceDigest: string;\n approvedPermissions: string[];\n },\n options: { signal?: AbortSignal } = {},\n ): Promise<{ message: string }> {\n return await this.transport.request<{ message: string }>(\n \"/plugins/git/install\",\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n }\n\n /** `DELETE /plugins/:id` */\n async uninstall(\n id: string,\n input: { cwd: string },\n ): Promise<{ message: string }> {\n return await this.transport.request<{ message: string }>(\n `/plugins/${encodeURIComponent(id)}`,\n { method: \"DELETE\", body: input },\n );\n }\n\n /** `POST /plugins/reload` */\n async reload(\n input: { cwd: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<ReloadPluginsResponse> {\n return await this.transport.request<ReloadPluginsResponse>(\n \"/plugins/reload\",\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n }\n}\n",
24
+ "/**\n * DevelopmentResource: 技能、Agent Persona、Hook 与 Git 源码控制资源。\n */\n\nimport type { HttpTransport } from \"../transport/http-transport.js\";\nimport type {\n AgentPersonaInfo,\n HookInfo,\n SkillSnapshot,\n} from \"../types/index.js\";\n\nexport class DevelopmentResource {\n constructor(private readonly transport: HttpTransport) {}\n\n /** `GET /skills` */\n async listSkills(\n options: { signal?: AbortSignal } = {},\n ): Promise<SkillSnapshot> {\n return await this.transport.request<SkillSnapshot>(\"/skills\", {\n signal: options.signal,\n });\n }\n\n /** `DELETE /skills/:id` */\n async removeSkill(\n id: string,\n input: { expectedContent: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<SkillSnapshot> {\n return await this.transport.request<SkillSnapshot>(\n `/skills/${encodeURIComponent(id)}`,\n {\n method: \"DELETE\",\n body: input,\n signal: options.signal,\n },\n );\n }\n\n /** `GET /agent-personas` */\n async listAgentPersonas(\n options: { signal?: AbortSignal } = {},\n ): Promise<AgentPersonaInfo[]> {\n const response = await this.transport.request<{ agents: AgentPersonaInfo[] }>(\n \"/agent-personas\",\n {\n signal: options.signal,\n },\n );\n return response.agents;\n }\n\n /** `GET /hooks?cwd=&sessionId=` */\n async listHooks(options: {\n cwd: string;\n sessionId?: string;\n signal?: AbortSignal;\n }): Promise<HookInfo[]> {\n const { signal, ...query } = options;\n const response = await this.transport.request<{ hooks: HookInfo[] }>(\n this.transport.path(\"/hooks\", query),\n { signal },\n );\n return response.hooks;\n }\n\n /** `GET /git/diff?cwd=&full=` */\n async getGitDiff(options: {\n cwd: string;\n full?: boolean;\n signal?: AbortSignal;\n }): Promise<string> {\n const { signal, cwd, full } = options;\n const response = await this.transport.request<{ output: string }>(\n this.transport.path(\"/git/diff\", { cwd, ...(full ? { full: \"true\" } : {}) }),\n { signal },\n );\n return response.output;\n }\n\n /** `GET /git/branch?cwd=&list=` */\n async getGitBranch(options: {\n cwd: string;\n list?: boolean;\n signal?: AbortSignal;\n }): Promise<string> {\n const { signal, cwd, list } = options;\n const response = await this.transport.request<{ output: string }>(\n this.transport.path(\"/git/branch\", { cwd, ...(list ? { list: \"true\" } : {}) }),\n { signal },\n );\n return response.output;\n }\n\n /** `GET /git/status?cwd=` */\n async getGitStatus(options: {\n cwd: string;\n signal?: AbortSignal;\n }): Promise<string> {\n const { signal, cwd } = options;\n const response = await this.transport.request<{ output: string }>(\n this.transport.path(\"/git/status\", { cwd }),\n { signal },\n );\n return response.output;\n }\n\n /** `POST /git/commit` */\n async gitCommit(\n input: { cwd: string; message: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<string> {\n const response = await this.transport.request<{ output: string }>(\"/git/commit\", {\n method: \"POST\",\n body: input,\n signal: options.signal,\n });\n return response.output;\n }\n}\n",
25
+ "/**\n * SessionResource: 会话生命周期、快照、消息树、Prompt 准入排队与 Goal 资源。\n */\n\nimport type {\n CreateSessionGoalInput,\n GoalActionInput,\n SessionGoal,\n UpdateSessionGoalInput,\n} from \"@openharness/protocol\";\nimport { decodeSessionStateSnapshot } from \"@openharness/protocol\";\nimport type { HttpTransport } from \"../transport/http-transport.js\";\nimport type {\n AdmitClientPromptInput,\n CancelQueuedClientPromptInput,\n CancelQueuedPromptResponse,\n CompactSessionResponse,\n CreateClientSessionInput,\n EditLatestClientPromptInput,\n ForkClientSessionInput,\n InterruptSessionResponse,\n ListClientMessagePartsOptions,\n ListMessagesOptions,\n ListSessionsOptions,\n PromoteQueuedClientPromptInput,\n PromoteQueuedPromptResponse,\n PromptResponse,\n RememberSessionResponse,\n ResumeInterruptedRunInput,\n ResumeInterruptedRunResponse,\n RewindSessionResponse,\n SessionExportResponse,\n SessionMessagePartRecord,\n SessionMessageRecord,\n SessionRecord,\n SessionStateSnapshot,\n SessionUsageResponse,\n UpdateClientSessionInput,\n} from \"../types/index.js\";\n\nlet promptRequestCounter = 0;\n\n/** Generate a caller-stable id for one prompt admission attempt. */\nexport function createPromptRequestId(): string {\n if (typeof globalThis.crypto?.randomUUID === \"function\") {\n return globalThis.crypto.randomUUID();\n }\n promptRequestCounter += 1;\n return `prompt-${Date.now().toString(36)}-${promptRequestCounter.toString(36)}`;\n}\n\nexport class SessionResource {\n constructor(private readonly transport: HttpTransport) {}\n\n /** `GET /sessions` */\n async list(\n options: ListSessionsOptions & { signal?: AbortSignal } = {},\n ): Promise<SessionRecord[]> {\n const { signal, ...query } = options;\n const response = await this.transport.request<{ sessions: SessionRecord[] }>(\n this.transport.path(\"/sessions\", query),\n { signal },\n );\n return response.sessions;\n }\n\n /** `GET /sessions/:id` */\n async get(\n sessionId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<SessionRecord> {\n const response = await this.transport.request<{ session: SessionRecord }>(\n `/sessions/${encodeURIComponent(sessionId)}`,\n {\n signal: options.signal,\n },\n );\n return response.session;\n }\n\n /** `POST /sessions` */\n async create(\n input: CreateClientSessionInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<SessionRecord> {\n const response = await this.transport.request<{ session: SessionRecord }>(\n \"/sessions\",\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n return response.session;\n }\n\n /** `PATCH /sessions/:id` - update title, agent, or metadata.runtime fields. */\n async update(\n sessionId: string,\n input: UpdateClientSessionInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<SessionRecord> {\n const response = await this.transport.request<{ session: SessionRecord }>(\n `/sessions/${encodeURIComponent(sessionId)}`,\n {\n method: \"PATCH\",\n body: input,\n signal: options.signal,\n },\n );\n return response.session;\n }\n\n /** `POST /sessions/:id/fork` */\n async fork(\n sessionId: string,\n input: ForkClientSessionInput = {},\n options: { signal?: AbortSignal } = {},\n ): Promise<SessionRecord> {\n const response = await this.transport.request<{ session: SessionRecord }>(\n `/sessions/${encodeURIComponent(sessionId)}/fork`,\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n return response.session;\n }\n\n /** `DELETE /sessions/:id` */\n async archive(\n sessionId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<SessionRecord> {\n const response = await this.transport.request<{ session: SessionRecord }>(\n `/sessions/${encodeURIComponent(sessionId)}`,\n {\n method: \"DELETE\",\n signal: options.signal,\n },\n );\n return response.session;\n }\n\n /** `DELETE /sessions/:id/hard` */\n async delete(\n sessionId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<string[]> {\n const response = await this.transport.request<{ deletedSessionIds: string[] }>(\n `/sessions/${encodeURIComponent(sessionId)}/hard`,\n {\n method: \"DELETE\",\n signal: options.signal,\n },\n );\n return response.deletedSessionIds;\n }\n\n /** `GET /sessions/:id/state` - atomic attach snapshot plus SSE cursor. */\n async getState(\n sessionId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<SessionStateSnapshot> {\n const response = await this.transport.request<unknown>(\n `/sessions/${encodeURIComponent(sessionId)}/state`,\n {\n signal: options.signal,\n },\n );\n return decodeSessionStateSnapshot(response);\n }\n\n /** `GET /sessions/:id/messages` */\n async listMessages(\n sessionId: string,\n options: ListMessagesOptions & { signal?: AbortSignal } = {},\n ): Promise<SessionMessageRecord[]> {\n const { signal, ...query } = options;\n const response = await this.transport.request<{ messages: SessionMessageRecord[] }>(\n this.transport.path(`/sessions/${encodeURIComponent(sessionId)}/messages`, query),\n { signal },\n );\n return response.messages;\n }\n\n /** `GET /sessions/:id/parts` */\n async listMessageParts(\n sessionId: string,\n options: ListClientMessagePartsOptions & { signal?: AbortSignal } = {},\n ): Promise<SessionMessagePartRecord[]> {\n const { signal, ...query } = options;\n const response = await this.transport.request<{ parts: SessionMessagePartRecord[] }>(\n this.transport.path(`/sessions/${encodeURIComponent(sessionId)}/parts`, query),\n { signal },\n );\n return response.parts;\n }\n\n /** `POST /sessions/:id/prompts` — 提交用户输入并触发/排队一次 run。 */\n async admitPrompt(\n sessionId: string,\n input: AdmitClientPromptInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<PromptResponse> {\n return await this.transport.request<PromptResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/prompts`,\n {\n method: \"POST\",\n body: { ...input, id: input.id ?? createPromptRequestId() },\n signal: options.signal,\n },\n );\n }\n\n /** `POST /sessions/:id/prompts/latest/edit` */\n async editLatestPrompt(\n sessionId: string,\n input: EditLatestClientPromptInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<PromptResponse> {\n return await this.transport.request<PromptResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/prompts/latest/edit`,\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n }\n\n /** Promote one durable queued prompt into the exact active run. */\n async promoteQueuedPrompt(\n sessionId: string,\n inputId: string,\n input: PromoteQueuedClientPromptInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<PromoteQueuedPromptResponse> {\n return await this.transport.request<PromoteQueuedPromptResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/prompts/${encodeURIComponent(inputId)}/promote`,\n { method: \"POST\", body: input, signal: options.signal },\n );\n }\n\n /** Cancel one durable prompt that is still waiting in the run queue. */\n async cancelQueuedPrompt(\n sessionId: string,\n inputId: string,\n input: CancelQueuedClientPromptInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<CancelQueuedPromptResponse> {\n return await this.transport.request<CancelQueuedPromptResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/prompts/${encodeURIComponent(inputId)}/cancel`,\n { method: \"POST\", body: input, signal: options.signal },\n );\n }\n\n /**\n * `POST /sessions/:id/runs/:runId/resume` — 显式重放一次中断 run 的原始 prompt。\n * 不会继续旧 provider stream;服务端会创建一个带恢复溯源的新 input/run。\n */\n async resumeInterruptedRun(\n sessionId: string,\n runId: string,\n input: ResumeInterruptedRunInput = {},\n options: { signal?: AbortSignal } = {},\n ): Promise<ResumeInterruptedRunResponse> {\n return await this.transport.request<ResumeInterruptedRunResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/runs/${encodeURIComponent(runId)}/resume`,\n {\n method: \"POST\",\n body: { ...input, id: input.id ?? createPromptRequestId() },\n signal: options.signal,\n },\n );\n }\n\n /** `POST /sessions/:id/interrupt` — 中断当前/排队中的 run。 */\n async interrupt(\n sessionId: string,\n options: { signal?: AbortSignal; expectedRunId?: string } = {},\n ): Promise<InterruptSessionResponse> {\n return await this.transport.request<InterruptSessionResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/interrupt`,\n {\n method: \"POST\",\n body: options.expectedRunId\n ? { expectedRunId: options.expectedRunId }\n : undefined,\n signal: options.signal,\n },\n );\n }\n\n /** `POST /sessions/:id/compact` */\n async compact(\n sessionId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<CompactSessionResponse> {\n return await this.transport.request<CompactSessionResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/compact`,\n { method: \"POST\", signal: options.signal },\n );\n }\n\n /** `POST /sessions/:id/rewind` */\n async rewind(\n sessionId: string,\n input: { count?: number } = {},\n options: { signal?: AbortSignal } = {},\n ): Promise<RewindSessionResponse> {\n return await this.transport.request<RewindSessionResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/rewind`,\n { method: \"POST\", body: input, signal: options.signal },\n );\n }\n\n /** `POST /sessions/:id/remember` */\n async remember(\n sessionId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<RememberSessionResponse> {\n return await this.transport.request<RememberSessionResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/remember`,\n { method: \"POST\", signal: options.signal },\n );\n }\n\n /** `POST /sessions/:id/export` */\n async export(\n sessionId: string,\n input: { filename?: string; json?: boolean } = {},\n options: { signal?: AbortSignal } = {},\n ): Promise<SessionExportResponse> {\n return await this.transport.request<SessionExportResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/export`,\n { method: \"POST\", body: input, signal: options.signal },\n );\n }\n\n /** `GET /sessions/:id/usage` */\n async getUsage(\n sessionId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<SessionUsageResponse> {\n return await this.transport.request<SessionUsageResponse>(\n `/sessions/${encodeURIComponent(sessionId)}/usage`,\n { signal: options.signal },\n );\n }\n\n /** `GET /sessions/:id/goal` */\n async getGoal(sessionId: string): Promise<SessionGoal | null> {\n const response = await this.transport.request<{ goal: SessionGoal | null }>(\n `/sessions/${encodeURIComponent(sessionId)}/goal`,\n );\n return response.goal;\n }\n\n /** `POST /sessions/:id/goals` */\n async createGoal(\n sessionId: string,\n input: CreateSessionGoalInput,\n ): Promise<SessionGoal> {\n const response = await this.transport.request<{ goal: SessionGoal }>(\n `/sessions/${encodeURIComponent(sessionId)}/goals`,\n { method: \"POST\", body: input },\n );\n return response.goal;\n }\n\n /** `PATCH /sessions/:id/goals/:goalId` */\n async updateGoal(\n sessionId: string,\n goalId: string,\n input: UpdateSessionGoalInput,\n ): Promise<SessionGoal> {\n const response = await this.transport.request<{ goal: SessionGoal }>(\n `/sessions/${encodeURIComponent(sessionId)}/goals/${encodeURIComponent(goalId)}`,\n { method: \"PATCH\", body: input },\n );\n return response.goal;\n }\n\n /** `POST /sessions/:id/goals/:goalId/actions` */\n async applyGoalAction(\n sessionId: string,\n goalId: string,\n input: GoalActionInput,\n ): Promise<SessionGoal> {\n const response = await this.transport.request<{ goal: SessionGoal }>(\n `/sessions/${encodeURIComponent(sessionId)}/goals/${encodeURIComponent(goalId)}/actions`,\n { method: \"POST\", body: input },\n );\n return response.goal;\n }\n}\n",
26
+ "import type { AttachmentAssetRecord } from \"@openharness/protocol\";\nimport { parseAttachmentAssetRecord } from \"@openharness/protocol\";\nimport type { HttpTransport } from \"../transport/http-transport.js\";\nimport { attachmentRangeHeader } from \"../transport/http-transport.js\";\nimport type {\n AttachmentStorageGcResult,\n AttachmentStorageRepairResult,\n AttachmentStorageReport,\n DownloadAttachmentOptions,\n UploadAttachmentInput,\n} from \"../types/index.js\";\n\nexport class AttachmentResource {\n constructor(private readonly transport: HttpTransport) {}\n\n /** `POST /attachments` — upload bytes without JSON or multipart buffering. */\n async upload(input: UploadAttachmentInput): Promise<AttachmentAssetRecord> {\n const headers: Record<string, string> = {};\n headers[\"x-openharness-filename\"] = encodeURIComponent(input.displayName);\n if (input.mediaType) headers[\"content-type\"] = input.mediaType;\n const response = await this.transport.requestResponse(\"/attachments\", {\n method: \"POST\",\n headers,\n body: input.body as RequestInit[\"body\"],\n signal: input.signal,\n });\n return parseAttachmentAssetRecord(await response.json());\n }\n\n async get(\n id: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<AttachmentAssetRecord> {\n const value = await this.transport.request<unknown>(\n `/attachments/${encodeURIComponent(id)}`,\n { signal: options.signal },\n );\n return parseAttachmentAssetRecord(value);\n }\n\n /** Returns the raw response so callers can consume the body as a stream. */\n async download(\n id: string,\n options: DownloadAttachmentOptions = {},\n ): Promise<Response> {\n const range = attachmentRangeHeader(options.range);\n const headers: Record<string, string> = {};\n if (range) headers.range = range;\n return await this.transport.requestResponse(\n `/attachments/${encodeURIComponent(id)}/content`,\n { method: \"GET\", headers, signal: options.signal },\n );\n }\n\n async delete(\n id: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<AttachmentAssetRecord> {\n const value = await this.transport.request<unknown>(\n `/attachments/${encodeURIComponent(id)}`,\n { method: \"DELETE\", signal: options.signal },\n );\n return parseAttachmentAssetRecord(value);\n }\n\n async scanStorage(\n options: { signal?: AbortSignal } = {},\n ): Promise<AttachmentStorageReport> {\n return await this.transport.request<AttachmentStorageReport>(\n \"/attachments/storage\",\n { signal: options.signal },\n );\n }\n\n async repairStorage(\n options: { signal?: AbortSignal } = {},\n ): Promise<AttachmentStorageRepairResult> {\n return await this.transport.request<AttachmentStorageRepairResult>(\n \"/attachments/storage/actions\",\n {\n method: \"POST\",\n body: { action: \"repair-safe\" },\n signal: options.signal,\n },\n );\n }\n\n async gcStorage(\n options: { signal?: AbortSignal } = {},\n ): Promise<AttachmentStorageGcResult> {\n return await this.transport.request<AttachmentStorageGcResult>(\n \"/attachments/storage/actions\",\n {\n method: \"POST\",\n body: { action: \"gc\" },\n signal: options.signal,\n },\n );\n }\n}\n",
27
+ "import type { PermissionRequestRecord } from \"@openharness/protocol\";\nimport type { HttpTransport } from \"../transport/http-transport.js\";\nimport type {\n ListPermissionsOptions,\n ReplyPermissionInput,\n} from \"../types/index.js\";\n\nexport class PermissionResource {\n constructor(private readonly transport: HttpTransport) {}\n\n /** `GET /permissions` */\n async list(\n options: ListPermissionsOptions & { signal?: AbortSignal } = {},\n ): Promise<PermissionRequestRecord[]> {\n const { signal, ...query } = options;\n const response = await this.transport.request<{\n requests: PermissionRequestRecord[];\n }>(this.transport.path(\"/permissions\", query), { signal });\n return response.requests;\n }\n\n /** `POST /permissions/:id/reply` — 批准/拒绝工具权限请求。 */\n async reply(\n requestId: string,\n input: ReplyPermissionInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<PermissionRequestRecord> {\n const response = await this.transport.request<{ request: PermissionRequestRecord }>(\n `/permissions/${encodeURIComponent(requestId)}/reply`,\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n return response.request;\n }\n}\n",
28
+ "import type {\n CreateScheduledTaskInput,\n ScheduledRunRecord,\n ScheduledTaskRecord,\n UpdateScheduledTaskInput,\n} from \"@openharness/protocol\";\nimport type { HttpTransport } from \"../transport/http-transport.js\";\nimport type { ScheduledTaskStatusSummary } from \"../types/index.js\";\n\nexport class ScheduleResource {\n constructor(private readonly transport: HttpTransport) {}\n\n async getStatus(\n options: { signal?: AbortSignal } = {},\n ): Promise<ScheduledTaskStatusSummary> {\n return await this.transport.request<ScheduledTaskStatusSummary>(\"/schedules/status\", {\n signal: options.signal,\n });\n }\n\n async listTasks(\n options: {\n status?: ScheduledTaskRecord[\"status\"];\n signal?: AbortSignal;\n } = {},\n ): Promise<ScheduledTaskRecord[]> {\n const { signal, ...query } = options;\n const response = await this.transport.request<{ tasks: ScheduledTaskRecord[] }>(\n this.transport.path(\"/schedules/tasks\", query),\n { signal },\n );\n return response.tasks;\n }\n\n async getTask(\n id: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<ScheduledTaskRecord> {\n const response = await this.transport.request<{ task: ScheduledTaskRecord }>(\n `/schedules/tasks/${encodeURIComponent(id)}`,\n { signal: options.signal },\n );\n return response.task;\n }\n\n async createTask(\n input: CreateScheduledTaskInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<ScheduledTaskRecord> {\n const response = await this.transport.request<{ task: ScheduledTaskRecord }>(\n \"/schedules/tasks\",\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n return response.task;\n }\n\n async updateTask(\n id: string,\n input: UpdateScheduledTaskInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<ScheduledTaskRecord> {\n const response = await this.transport.request<{ task: ScheduledTaskRecord }>(\n `/schedules/tasks/${encodeURIComponent(id)}`,\n { method: \"PATCH\", body: input, signal: options.signal },\n );\n return response.task;\n }\n\n async removeTask(\n id: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<void> {\n await this.transport.request<{ removed: true }>(\n `/schedules/tasks/${encodeURIComponent(id)}`,\n {\n method: \"DELETE\",\n signal: options.signal,\n },\n );\n }\n\n async triggerTask(\n id: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<ScheduledRunRecord> {\n const response = await this.transport.request<{ run: ScheduledRunRecord }>(\n `/schedules/tasks/${encodeURIComponent(id)}/run`,\n { method: \"POST\", signal: options.signal },\n );\n return response.run;\n }\n\n async listRuns(\n options: {\n taskId?: string;\n unread?: boolean;\n limit?: number;\n signal?: AbortSignal;\n } = {},\n ): Promise<ScheduledRunRecord[]> {\n const { signal, ...query } = options;\n const response = await this.transport.request<{ runs: ScheduledRunRecord[] }>(\n this.transport.path(\"/schedules/runs\", query),\n { signal },\n );\n return response.runs;\n }\n\n async setRunUnread(\n id: string,\n unread: boolean,\n options: { signal?: AbortSignal } = {},\n ): Promise<ScheduledRunRecord> {\n const response = await this.transport.request<{ run: ScheduledRunRecord }>(\n `/schedules/runs/${encodeURIComponent(id)}/read`,\n { method: \"PATCH\", body: { unread }, signal: options.signal },\n );\n return response.run;\n }\n}\n",
29
+ "import type {\n JobKind,\n JobReadResult,\n JobSnapshot,\n JobStatus,\n JobWaitResult,\n} from \"@openharness/protocol\";\nimport {\n decodeJobReadResult,\n decodeJobSnapshot,\n decodeJobWaitResult,\n} from \"@openharness/protocol\";\nimport type {\n CreateBackgroundShellInput,\n CreateBackgroundShellResult,\n} from \"../types/index.js\";\nimport type { HttpTransport } from \"../transport/http-transport.js\";\nimport { responseArray, responseField } from \"../transport/http-transport.js\";\n\nexport class JobResource {\n constructor(private readonly transport: HttpTransport) {}\n\n async list(options: {\n sessionId: string;\n kinds?: JobKind[];\n statuses?: JobStatus[];\n startedAfter?: number;\n startedBefore?: number;\n updatedAfter?: number;\n updatedBefore?: number;\n includeFinished?: boolean;\n limit?: number;\n signal?: AbortSignal;\n }): Promise<JobSnapshot[]> {\n const { signal, kinds, statuses, includeFinished, ...query } = options;\n const response = await this.transport.request<unknown>(\n this.transport.path(\"/jobs\", {\n ...query,\n ...(kinds ? { kinds: kinds.join(\",\") } : {}),\n ...(statuses ? { statuses: statuses.join(\",\") } : {}),\n ...(includeFinished !== undefined\n ? { includeFinished: String(includeFinished) }\n : {}),\n }),\n { signal },\n );\n return responseArray(response, \"jobs\", decodeJobSnapshot);\n }\n\n async createBackgroundShell(\n input: CreateBackgroundShellInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<CreateBackgroundShellResult> {\n return await this.transport.request<CreateBackgroundShellResult>(\n \"/background-shells\",\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n }\n\n async read(\n jobId: string,\n options: {\n sessionId: string;\n after?: number;\n maxChars?: number;\n signal?: AbortSignal;\n },\n ): Promise<JobReadResult> {\n const { signal, ...query } = options;\n const response = await this.transport.request<unknown>(\n this.transport.path(`/jobs/${encodeURIComponent(jobId)}`, query),\n { signal },\n );\n return decodeJobReadResult(response);\n }\n\n async wait(\n jobId: string,\n input: {\n sessionId: string;\n timeoutMs?: number;\n after?: number;\n maxChars?: number;\n },\n options: { signal?: AbortSignal } = {},\n ): Promise<JobWaitResult> {\n const response = await this.transport.request<unknown>(\n `/jobs/${encodeURIComponent(jobId)}/wait`,\n {\n method: \"POST\",\n body: input,\n signal: options.signal,\n },\n );\n return decodeJobWaitResult(response);\n }\n\n async send(\n jobId: string,\n input: { sessionId: string; data: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<void> {\n await this.transport.request(`/jobs/${encodeURIComponent(jobId)}/input`, {\n method: \"POST\",\n body: input,\n signal: options.signal,\n });\n }\n\n async cancel(\n jobId: string,\n input: { sessionId: string; reason?: string },\n options: { signal?: AbortSignal } = {},\n ): Promise<JobSnapshot> {\n const response = await this.transport.request<unknown>(\n `/jobs/${encodeURIComponent(jobId)}/cancel`,\n { method: \"POST\", body: input, signal: options.signal },\n );\n return decodeJobSnapshot(responseField(response, \"snapshot\"));\n }\n}\n",
30
+ "import type {\n TerminalCreateRequest,\n TerminalEvent,\n TerminalReadResult,\n TerminalResizeRequest,\n TerminalSessionInfo,\n TerminalSignal,\n TerminalSource,\n TerminalWriteRequest,\n} from \"@openharness/protocol\";\nimport {\n decodeTerminalEvent,\n decodeTerminalReadResult,\n decodeTerminalSessionInfo,\n} from \"@openharness/protocol\";\nimport type { HttpTransport } from \"../transport/http-transport.js\";\nimport { responseArray, responseField } from \"../transport/http-transport.js\";\nimport type { SseTransport } from \"../transport/sse-transport.js\";\n\nexport class TerminalResource {\n constructor(\n private readonly transport: HttpTransport,\n private readonly sse: SseTransport,\n ) {}\n\n async create(\n input: TerminalCreateRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<TerminalSessionInfo> {\n const response = await this.transport.request<unknown>(\"/terminals\", {\n method: \"POST\",\n body: input,\n signal: options.signal,\n });\n return decodeTerminalSessionInfo(responseField(response, \"terminal\"));\n }\n\n async list(\n options: {\n projectId?: string;\n sessionId?: string;\n source?: TerminalSource;\n signal?: AbortSignal;\n } = {},\n ): Promise<TerminalSessionInfo[]> {\n const { signal, ...query } = options;\n const response = await this.transport.request<unknown>(\n this.transport.path(\"/terminals\", query),\n { signal },\n );\n return responseArray(response, \"terminals\", decodeTerminalSessionInfo);\n }\n\n async get(\n terminalId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<TerminalSessionInfo> {\n const response = await this.transport.request<unknown>(\n `/terminals/${encodeURIComponent(terminalId)}`,\n { signal: options.signal },\n );\n return decodeTerminalSessionInfo(responseField(response, \"terminal\"));\n }\n\n async read(\n terminalId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<TerminalReadResult> {\n const response = await this.transport.request<unknown>(\n `/terminals/${encodeURIComponent(terminalId)}/output`,\n { signal: options.signal },\n );\n return decodeTerminalReadResult(responseField(response, \"snapshot\"));\n }\n\n async write(\n input: TerminalWriteRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<void> {\n await this.transport.request<{ written: true }>(\n `/terminals/${encodeURIComponent(input.terminalId)}/input`,\n { method: \"POST\", body: { data: input.data }, signal: options.signal },\n );\n }\n\n async resize(\n input: TerminalResizeRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<void> {\n await this.transport.request<{ resized: true }>(\n `/terminals/${encodeURIComponent(input.terminalId)}/resize`,\n {\n method: \"POST\",\n body: { cols: input.cols, rows: input.rows },\n signal: options.signal,\n },\n );\n }\n\n async signal(\n terminalId: string,\n signal: TerminalSignal,\n options: { signal?: AbortSignal } = {},\n ): Promise<void> {\n await this.transport.request<{ signaled: true }>(\n `/terminals/${encodeURIComponent(terminalId)}/signal`,\n { method: \"POST\", body: { signal }, signal: options.signal },\n );\n }\n\n async close(\n terminalId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<void> {\n await this.transport.request<{ removed: true }>(\n `/terminals/${encodeURIComponent(terminalId)}`,\n {\n method: \"DELETE\",\n signal: options.signal,\n },\n );\n }\n\n streamEvents(\n options: { signal?: AbortSignal } = {},\n ): AsyncIterable<TerminalEvent> {\n return this.sse.stream(\n this.transport.resolveUrl(\"/terminals/stream\"),\n {\n headers: this.transport.headers(),\n signal: options.signal,\n decode: decodeTerminalEvent,\n noBodyMessage: \"Terminal event stream response has no body\",\n },\n );\n }\n}\n",
31
+ "import type {\n ChannelDeliveryRecord,\n ChannelStatusSnapshot,\n DurableChannelMessageInput,\n DurableChannelMessageResult,\n RecordChannelDeliveryInput,\n} from \"@openharness/protocol\";\nimport type { HttpTransport } from \"../transport/http-transport.js\";\n\nexport class ChannelResource {\n constructor(private readonly transport: HttpTransport) {}\n\n async handleMessage(\n input: DurableChannelMessageInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<DurableChannelMessageResult> {\n return await this.transport.request<DurableChannelMessageResult>(\n \"/channels/messages\",\n { method: \"POST\", body: input, signal: options.signal },\n );\n }\n\n async recordDelivery(\n deliveryId: string,\n input: RecordChannelDeliveryInput,\n options: { signal?: AbortSignal } = {},\n ): Promise<ChannelDeliveryRecord> {\n const response = await this.transport.request<{ delivery: ChannelDeliveryRecord }>(\n `/channels/deliveries/${encodeURIComponent(deliveryId)}/result`,\n { method: \"POST\", body: input, signal: options.signal },\n );\n return response.delivery;\n }\n\n async getStatus(\n options: { connector?: string; limit?: number; signal?: AbortSignal } = {},\n ): Promise<ChannelStatusSnapshot> {\n const { signal, ...query } = options;\n return await this.transport.request<ChannelStatusSnapshot>(\n this.transport.path(\"/channels/status\", query),\n { signal },\n );\n }\n\n async listPendingDeliveries(\n options: { connector?: string; limit?: number; signal?: AbortSignal } = {},\n ): Promise<ChannelDeliveryRecord[]> {\n const { signal, ...query } = options;\n const response = await this.transport.request<{\n deliveries: ChannelDeliveryRecord[];\n }>(this.transport.path(\"/channels/deliveries/pending\", query), { signal });\n return response.deliveries;\n }\n}\n",
32
+ "import type { SessionEventRecord } from \"@openharness/protocol\";\nimport { decodeSessionEventRecord } from \"@openharness/protocol\";\nimport type { HttpTransport } from \"../transport/http-transport.js\";\nimport { responseArray } from \"../transport/http-transport.js\";\nimport type { SseTransport } from \"../transport/sse-transport.js\";\nimport type { EventSyncOptions, ListEventsOptions } from \"../types/index.js\";\n\nexport class EventResource {\n constructor(\n private readonly transport: HttpTransport,\n private readonly sse: SseTransport,\n ) {}\n\n /** `GET /events` — 用于 attach 时的历史 replay。 */\n async list(\n options: ListEventsOptions & { signal?: AbortSignal } = {},\n ): Promise<SessionEventRecord[]> {\n const { signal, ...query } = options;\n const response = await this.transport.request<unknown>(\n this.transport.path(\"/events\", query),\n { signal },\n );\n return responseArray(response, \"events\", decodeSessionEventRecord);\n }\n\n stream(\n options: EventSyncOptions & { transportReconnect?: boolean } = {},\n ): AsyncIterable<SessionEventRecord> {\n const query = {\n cursor: options.cursor,\n sessionId: options.sessionId,\n };\n return this.sse.stream(\n this.transport.resolveUrl(\"/events/stream\", query),\n {\n headers: this.transport.headers(),\n signal: options.signal,\n decode: decodeSessionEventRecord,\n reconnect: options.transportReconnect ?? false,\n },\n );\n }\n}\n",
33
+ "export * from \"./system-resource.js\";\nexport * from \"./provider-resource.js\";\nexport * from \"./auth-resource.js\";\nexport * from \"./project-resource.js\";\nexport * from \"./plugin-resource.js\";\nexport * from \"./development-resource.js\";\nexport * from \"./session-resource.js\";\nexport * from \"./attachment-resource.js\";\nexport * from \"./permission-resource.js\";\nexport * from \"./schedule-resource.js\";\nexport * from \"./job-resource.js\";\nexport * from \"./terminal-resource.js\";\nexport * from \"./channel-resource.js\";\nexport * from \"./event-resource.js\";\n",
34
+ "/**\n * daemon HTTP/SSE 客户端。\n *\n * `OpenHarnessClient` 只组装当前领域 Resource;底层 transport 不作为实例 API 暴露。\n */\n\nimport type { OpenHarnessClientOptions } from \"../types/index.js\";\nimport {\n HttpTransport,\n OpenHarnessApiError,\n normalizeDaemonBaseUrl,\n} from \"./http-transport.js\";\nimport {\n SseTransport,\n streamServerSentEvents,\n} from \"./sse-transport.js\";\nimport {\n ProtocolClient,\n IncompatibleProtocolError,\n} from \"../protocol/index.js\";\nimport {\n SystemResource,\n ProviderResource,\n AuthResource,\n ProjectResource,\n PluginResource,\n DevelopmentResource,\n SessionResource,\n AttachmentResource,\n PermissionResource,\n ScheduleResource,\n JobResource,\n TerminalResource,\n ChannelResource,\n EventResource,\n createPromptRequestId,\n} from \"../resources/index.js\";\n\nexport {\n HttpTransport,\n OpenHarnessApiError,\n normalizeDaemonBaseUrl,\n SseTransport,\n streamServerSentEvents,\n ProtocolClient,\n IncompatibleProtocolError,\n SystemResource,\n ProviderResource,\n AuthResource,\n ProjectResource,\n PluginResource,\n DevelopmentResource,\n SessionResource,\n AttachmentResource,\n PermissionResource,\n ScheduleResource,\n JobResource,\n TerminalResource,\n ChannelResource,\n EventResource,\n createPromptRequestId,\n};\n\n/** 面向 daemon 的 typed fetch 客户端。 */\nexport class OpenHarnessClient {\n readonly protocol: ProtocolClient;\n readonly system: SystemResource;\n readonly providers: ProviderResource;\n readonly auth: AuthResource;\n readonly projects: ProjectResource;\n readonly plugins: PluginResource;\n readonly development: DevelopmentResource;\n readonly sessions: SessionResource;\n readonly attachments: AttachmentResource;\n readonly permissions: PermissionResource;\n readonly schedules: ScheduleResource;\n readonly jobs: JobResource;\n readonly terminals: TerminalResource;\n readonly channels: ChannelResource;\n readonly events: EventResource;\n\n constructor(options: OpenHarnessClientOptions) {\n const transport = new HttpTransport(options);\n const sse = new SseTransport(transport);\n this.protocol = new ProtocolClient(transport);\n this.system = new SystemResource(transport);\n this.providers = new ProviderResource(transport);\n this.auth = new AuthResource(transport);\n this.projects = new ProjectResource(transport);\n this.plugins = new PluginResource(transport);\n this.development = new DevelopmentResource(transport);\n this.sessions = new SessionResource(transport);\n this.attachments = new AttachmentResource(transport);\n this.permissions = new PermissionResource(transport);\n this.schedules = new ScheduleResource(transport);\n this.jobs = new JobResource(transport);\n this.terminals = new TerminalResource(transport, sse);\n this.channels = new ChannelResource(transport);\n this.events = new EventResource(transport, sse);\n }\n}\n",
35
+ "export * from \"./http-transport.js\";\nexport * from \"./sse-transport.js\";\nexport * from \"./http-client.js\";\n",
36
+ "/**\n * 事件 → 客户端状态 reducer。\n *\n * 幂等:同一 `seq` 只应用一次。多端用同一套事件流应收敛到相同状态。\n */\n\nimport { sessionEventSchemaVersion } from \"@openharness/protocol\";\n\nimport type {\n OpenHarnessClientState,\n PermissionRequestRecord,\n SessionBucket,\n SessionEventRecord,\n SessionInputRecord,\n SessionMessagePartRecord,\n SessionMessageRecord,\n SessionRecord,\n SessionRunRecord,\n SessionRunAttemptRecord,\n SessionExecutionRecord,\n SessionStateSnapshot,\n} from \"../types/index.js\";\n\nexport class UnsupportedSessionEventSchemaVersionError extends Error {\n readonly event: Pick<SessionEventRecord, \"seq\" | \"type\" | \"schemaVersion\">;\n\n constructor(event: SessionEventRecord) {\n const expected = sessionEventSchemaVersion(event.type);\n super(\n `Unsupported session event schema version ${event.schemaVersion} for ${event.type} at sequence ${event.seq}; expected ${expected}`,\n );\n this.name = \"UnsupportedSessionEventSchemaVersionError\";\n this.event = {\n seq: event.seq,\n type: event.type,\n schemaVersion: event.schemaVersion,\n };\n }\n}\n\n/** 空客户端状态,作为 replay/hydrate 起点。 */\nexport function createInitialClientState(): OpenHarnessClientState {\n return {\n sessions: {},\n sessionOrder: [],\n buckets: {},\n eventsBySeq: {},\n snapshotCursorBySession: {},\n transientCursor: 0,\n lastSeq: 0,\n };\n}\n\n/** 按序批量应用事件。 */\nexport function applyEvents(\n state: OpenHarnessClientState,\n events: Iterable<SessionEventRecord>,\n): OpenHarnessClientState {\n let next = state;\n for (const event of events) next = applyEvent(next, event);\n return next;\n}\n\n/** Replace one session bucket with an atomic server snapshot. */\nexport function applySessionSnapshot(\n state: OpenHarnessClientState,\n snapshot: SessionStateSnapshot,\n): OpenHarnessClientState {\n const knownCursor = state.snapshotCursorBySession[snapshot.session.id] ?? 0;\n if (snapshot.cursor < knownCursor) return state;\n\n const partsByMessageId: SessionBucket[\"partsByMessageId\"] = {};\n for (const part of snapshot.parts) {\n const parts = partsByMessageId[part.messageId] ?? [];\n parts.push(part);\n partsByMessageId[part.messageId] = parts;\n }\n for (const parts of Object.values(partsByMessageId)) parts.sort((a, b) => a.seq - b.seq);\n\n const sessions = { ...state.sessions, [snapshot.session.id]: snapshot.session };\n return {\n ...state,\n sessions,\n sessionOrder: sortSessionOrder(sessions),\n buckets: {\n ...state.buckets,\n [snapshot.session.id]: {\n session: snapshot.session,\n inputs: [...snapshot.inputs].sort((a, b) => a.seq - b.seq),\n messages: [...snapshot.messages].sort((a, b) => a.seq - b.seq),\n partsByMessageId,\n runs: Object.fromEntries(snapshot.runs.map((run) => [run.id, run])),\n attempts: Object.fromEntries((snapshot.attempts ?? []).map((attempt) => [attempt.id, attempt])),\n tasks: Object.fromEntries((snapshot.tasks ?? []).map((task) => [task.id, task])),\n permissions: Object.fromEntries(snapshot.permissions.map((request) => [request.id, request])),\n },\n },\n snapshotCursorBySession: {\n ...state.snapshotCursorBySession,\n [snapshot.session.id]: Math.max(\n state.snapshotCursorBySession[snapshot.session.id] ?? 0,\n snapshot.cursor,\n ),\n },\n transientCursor: Math.max(state.transientCursor, snapshot.cursor),\n lastSeq: Math.max(state.lastSeq, snapshot.cursor),\n };\n}\n\n/**\n * 应用单条事件。已见过的 `seq` 直接返回原 state(引用相等,便于 live 去重)。\n */\nexport function applyEvent(\n state: OpenHarnessClientState,\n event: SessionEventRecord,\n): OpenHarnessClientState {\n if (event.schemaVersion !== sessionEventSchemaVersion(event.type)) {\n throw new UnsupportedSessionEventSchemaVersionError(event);\n }\n const transient = event.type === \"session.message.part.delta\";\n const snapshotCursor = event.sessionId\n ? state.snapshotCursorBySession[event.sessionId] ?? 0\n : 0;\n if (event.seq <= snapshotCursor) return state;\n if (transient && event.seq <= state.transientCursor) return state;\n if (!transient && state.eventsBySeq[event.seq]) return state;\n if (!transient) state.eventsBySeq[event.seq] = event;\n\n let next: OpenHarnessClientState = {\n ...state,\n eventsBySeq: state.eventsBySeq,\n transientCursor: transient ? event.seq : state.transientCursor,\n lastSeq: Math.max(state.lastSeq, event.seq),\n };\n\n switch (event.type) {\n case \"session.created\":\n case \"session.updated\":\n next = upsertSession(next, readPayloadRecord<SessionRecord>(event, \"session\"));\n break;\n case \"session.archived\":\n next = archiveSession(next, event);\n break;\n case \"session.input.admitted\":\n next = upsertInput(next, readPayloadRecord<SessionInputRecord>(event, \"input\"));\n break;\n case \"session.message.created\":\n next = upsertMessage(next, readPayloadRecord<SessionMessageRecord>(event, \"message\"));\n break;\n case \"session.transcript.replaced\":\n next = replaceTranscript(next, event);\n break;\n case \"session.message.part.updated\":\n next = upsertPart(next, readPayloadRecord<SessionMessagePartRecord>(event, \"part\"));\n break;\n case \"session.message.part.delta\":\n next = appendPartDelta(next, event);\n break;\n case \"session.run.created\":\n case \"session.run.updated\":\n next = upsertRun(next, readPayloadRecord<SessionRunRecord>(event, \"run\"));\n break;\n case \"session.run_attempt.created\":\n case \"session.run_attempt.updated\":\n next = upsertRunAttempt(next, readPayloadRecord<SessionRunAttemptRecord>(event, \"attempt\"));\n break;\n case \"session.task.created\":\n case \"session.task.updated\":\n next = upsertTask(next, readPayloadRecord<SessionExecutionRecord>(event, \"task\"));\n break;\n case \"permission.asked\":\n case \"permission.replied\":\n next = upsertPermission(next, readPayloadRecord<PermissionRequestRecord>(event, \"request\"));\n break;\n }\n\n return next;\n}\n\nfunction readPayloadRecord<T>(event: SessionEventRecord, key: string): T | undefined {\n const value = event.payload[key];\n return value && typeof value === \"object\" && !Array.isArray(value) ? value as T : undefined;\n}\n\nfunction upsertSession(state: OpenHarnessClientState, session: SessionRecord | undefined): OpenHarnessClientState {\n if (!session) return state;\n const bucket = cloneBucket(state.buckets[session.id]);\n bucket.session = session;\n const sessions = { ...state.sessions, [session.id]: session };\n return {\n ...state,\n sessions,\n sessionOrder: sortSessionOrder(sessions),\n buckets: { ...state.buckets, [session.id]: bucket },\n };\n}\n\nfunction archiveSession(state: OpenHarnessClientState, event: SessionEventRecord): OpenHarnessClientState {\n const sessionId = typeof event.payload.sessionId === \"string\" ? event.payload.sessionId : event.sessionId;\n if (!sessionId) return state;\n const current = state.sessions[sessionId];\n if (!current) return state;\n const archived: SessionRecord = {\n ...current,\n status: \"archived\",\n archivedAt: current.archivedAt ?? event.createdAt,\n updatedAt: Math.max(current.updatedAt, event.createdAt),\n };\n return upsertSession(state, archived);\n}\n\nfunction upsertInput(state: OpenHarnessClientState, input: SessionInputRecord | undefined): OpenHarnessClientState {\n if (!input) return state;\n const bucket = cloneBucket(state.buckets[input.sessionId]);\n bucket.inputs = upsertSorted(bucket.inputs, input, (row) => row.seq);\n return { ...state, buckets: { ...state.buckets, [input.sessionId]: bucket } };\n}\n\nfunction upsertMessage(state: OpenHarnessClientState, message: SessionMessageRecord | undefined): OpenHarnessClientState {\n if (!message) return state;\n const bucket = cloneBucket(state.buckets[message.sessionId]);\n bucket.messages = upsertSorted(bucket.messages, message, (row) => row.seq);\n return { ...state, buckets: { ...state.buckets, [message.sessionId]: bucket } };\n}\n\nfunction replaceTranscript(state: OpenHarnessClientState, event: SessionEventRecord): OpenHarnessClientState {\n const sessionId = event.sessionId;\n if (!sessionId) return state;\n const messages = Array.isArray(event.payload.messages)\n ? event.payload.messages.filter((row): row is SessionMessageRecord =>\n !!row && typeof row === \"object\" && !Array.isArray(row) && typeof (row as SessionMessageRecord).id === \"string\")\n : [];\n const parts = Array.isArray(event.payload.parts)\n ? event.payload.parts.filter((row): row is SessionMessagePartRecord =>\n !!row && typeof row === \"object\" && !Array.isArray(row) && typeof (row as SessionMessagePartRecord).id === \"string\")\n : [];\n const bucket = cloneBucket(state.buckets[sessionId]);\n const partsByMessageId: SessionBucket[\"partsByMessageId\"] = {};\n for (const part of parts) {\n const rows = partsByMessageId[part.messageId] ?? [];\n rows.push(part);\n partsByMessageId[part.messageId] = rows;\n }\n for (const rows of Object.values(partsByMessageId)) rows.sort((a, b) => a.seq - b.seq);\n bucket.messages = [...messages].sort((a, b) => a.seq - b.seq);\n bucket.partsByMessageId = partsByMessageId;\n if (bucket.session) {\n bucket.session = {\n ...bucket.session,\n updatedAt: Math.max(bucket.session.updatedAt, event.createdAt),\n };\n }\n const sessions = bucket.session\n ? { ...state.sessions, [sessionId]: bucket.session }\n : state.sessions;\n return {\n ...state,\n sessions,\n sessionOrder: sortSessionOrder(sessions),\n buckets: { ...state.buckets, [sessionId]: bucket },\n };\n}\n\nfunction upsertPart(state: OpenHarnessClientState, part: SessionMessagePartRecord | undefined): OpenHarnessClientState {\n if (!part) return state;\n const bucket = cloneBucketForPartWrite(state.buckets[part.sessionId]);\n const existing = bucket.partsByMessageId[part.messageId] ?? [];\n bucket.partsByMessageId = {\n ...bucket.partsByMessageId,\n [part.messageId]: upsertSorted(existing, part, (row) => row.seq),\n };\n return { ...state, buckets: { ...state.buckets, [part.sessionId]: bucket } };\n}\n\nfunction appendPartDelta(state: OpenHarnessClientState, event: SessionEventRecord): OpenHarnessClientState {\n const sessionId = typeof event.payload.sessionId === \"string\" ? event.payload.sessionId : event.sessionId;\n const messageId = typeof event.payload.messageId === \"string\" ? event.payload.messageId : undefined;\n const partId = typeof event.payload.partId === \"string\" ? event.payload.partId : undefined;\n const field = event.payload.field;\n const delta = typeof event.payload.delta === \"string\" ? event.payload.delta : undefined;\n if (!sessionId || !messageId || !partId || field !== \"text\" || delta === undefined) return state;\n\n const bucket = cloneBucketForPartWrite(state.buckets[sessionId]);\n const currentParts = bucket.partsByMessageId[messageId] ?? [];\n const index = currentParts.findIndex((part) => part.id === partId);\n const nextParts = [...currentParts];\n if (index >= 0) {\n const current = nextParts[index]!;\n nextParts[index] = {\n ...current,\n text: `${current.text ?? \"\"}${delta}`,\n updatedAt: Math.max(current.updatedAt, event.createdAt),\n };\n } else {\n const seq = currentParts.reduce((max, part) => Math.max(max, part.seq), 0) + 1;\n nextParts.push({\n id: partId,\n sessionId,\n messageId,\n seq,\n type: \"text\",\n status: \"running\",\n text: delta,\n metadata: {},\n createdAt: event.createdAt,\n updatedAt: event.createdAt,\n });\n }\n const sortedParts = index >= 0\n ? nextParts\n : nextParts.sort((a, b) => a.seq - b.seq);\n bucket.partsByMessageId = {\n ...bucket.partsByMessageId,\n [messageId]: sortedParts,\n };\n return { ...state, buckets: { ...state.buckets, [sessionId]: bucket } };\n}\n\nfunction upsertRun(state: OpenHarnessClientState, run: SessionRunRecord | undefined): OpenHarnessClientState {\n if (!run) return state;\n const bucket = cloneBucket(state.buckets[run.sessionId]);\n bucket.runs = { ...bucket.runs, [run.id]: run };\n const session = refreshSessionStatusFromRuns(bucket.session, bucket.runs, run.updatedAt);\n bucket.session = session;\n const sessions = session ? { ...state.sessions, [run.sessionId]: session } : state.sessions;\n return {\n ...state,\n sessions,\n sessionOrder: session ? sortSessionOrder(sessions) : state.sessionOrder,\n buckets: { ...state.buckets, [run.sessionId]: bucket },\n };\n}\n\nfunction upsertRunAttempt(\n state: OpenHarnessClientState,\n attempt: SessionRunAttemptRecord | undefined,\n): OpenHarnessClientState {\n if (!attempt) return state;\n const run = Object.values(state.buckets)\n .flatMap((bucket) => Object.values(bucket.runs))\n .find((candidate) => candidate.id === attempt.runId);\n if (!run) return state;\n const bucket = cloneBucket(state.buckets[run.sessionId]);\n bucket.attempts = { ...bucket.attempts, [attempt.id]: attempt };\n return { ...state, buckets: { ...state.buckets, [run.sessionId]: bucket } };\n}\n\nfunction refreshSessionStatusFromRuns(\n session: SessionRecord | undefined,\n runs: SessionBucket[\"runs\"],\n updatedAt: number,\n): SessionRecord | undefined {\n if (!session || session.status === \"archived\" || session.status === \"closing\") return session;\n const running = Object.values(runs).some(\n (candidate) => candidate.status === \"pending\" || candidate.status === \"running\",\n );\n return {\n ...session,\n status: running ? \"running\" : \"idle\",\n updatedAt: Math.max(session.updatedAt, updatedAt),\n };\n}\n\nfunction upsertPermission(\n state: OpenHarnessClientState,\n request: PermissionRequestRecord | undefined,\n): OpenHarnessClientState {\n if (!request) return state;\n const bucket = cloneBucket(state.buckets[request.sessionId]);\n bucket.permissions = { ...bucket.permissions, [request.id]: request };\n return { ...state, buckets: { ...state.buckets, [request.sessionId]: bucket } };\n}\n\nfunction upsertTask(state: OpenHarnessClientState, task: SessionExecutionRecord | undefined): OpenHarnessClientState {\n if (!task) return state;\n const bucket = cloneBucket(state.buckets[task.sessionId]);\n bucket.tasks = { ...bucket.tasks, [task.id]: task };\n return { ...state, buckets: { ...state.buckets, [task.sessionId]: bucket } };\n}\n\nfunction cloneBucket(bucket: SessionBucket | undefined): SessionBucket {\n return {\n session: bucket?.session,\n inputs: bucket?.inputs ? [...bucket.inputs] : [],\n messages: bucket?.messages ? [...bucket.messages] : [],\n partsByMessageId: bucket?.partsByMessageId\n ? Object.fromEntries(Object.entries(bucket.partsByMessageId).map(([id, parts]) => [id, [...parts]]))\n : {},\n runs: bucket?.runs ? { ...bucket.runs } : {},\n attempts: bucket?.attempts ? { ...bucket.attempts } : {},\n tasks: bucket?.tasks ? { ...bucket.tasks } : {},\n permissions: bucket?.permissions ? { ...bucket.permissions } : {},\n };\n}\n\nfunction cloneBucketForPartWrite(bucket: SessionBucket | undefined): SessionBucket {\n return {\n session: bucket?.session,\n inputs: bucket?.inputs ?? [],\n messages: bucket?.messages ?? [],\n partsByMessageId: bucket?.partsByMessageId ?? {},\n runs: bucket?.runs ?? {},\n attempts: bucket?.attempts ?? {},\n tasks: bucket?.tasks ?? {},\n permissions: bucket?.permissions ?? {},\n };\n}\n\n/** 按 id 覆盖后按 sortKey 升序排列。 */\nfunction upsertSorted<T extends { id: string }>(rows: T[], row: T, sortKey: (row: T) => number): T[] {\n const without = rows.filter((existing) => existing.id !== row.id);\n without.push(row);\n return without.sort((a, b) => sortKey(a) - sortKey(b));\n}\n\n/** session 列表排序:最近更新优先。 */\nfunction sortSessionOrder(sessions: Record<string, SessionRecord>): string[] {\n return Object.values(sessions)\n .sort((a, b) => b.updatedAt - a.updatedAt || a.id.localeCompare(b.id))\n .map((session) => session.id);\n}\n",
37
+ "/**\n * Read-only selectors over the reducer state.\n *\n * These stay UI-agnostic so TUI/Web/Desktop can share the canonical\n * message/part view and map it to their own presentation models.\n */\n\nimport type { SessionBucket, SessionMessagePartRecord, SessionMessageRecord } from \"../types/index.js\";\n\nexport interface SessionMessageWithParts {\n message: SessionMessageRecord;\n parts: SessionMessagePartRecord[];\n}\nexport function selectSessionMessagesWithParts(\n bucket: SessionBucket | undefined,\n): SessionMessageWithParts[] {\n if (!bucket) return [];\n return [...bucket.messages]\n .sort((a, b) => a.seq - b.seq)\n .map((message) => ({\n message,\n parts: [...(bucket.partsByMessageId[message.id] ?? [])].sort((a, b) => a.seq - b.seq),\n }));\n}\n\nexport function selectSessionInputs(bucket: SessionBucket | undefined) {\n if (!bucket) return [];\n return [...bucket.inputs].sort((a, b) => a.seq - b.seq);\n}\n\nexport function selectSessionOrderedMessages(bucket: SessionBucket | undefined) {\n if (!bucket) return [];\n return [...bucket.messages].sort((a, b) => a.seq - b.seq);\n}\n\nexport function selectSessionParts(bucket: SessionBucket | undefined) {\n if (!bucket) return [];\n return Object.values(bucket.partsByMessageId)\n .flat()\n .sort((a, b) => a.seq - b.seq);\n}\n\nexport function selectSessionRuns(bucket: SessionBucket | undefined) {\n if (!bucket) return [];\n return Object.values(bucket.runs);\n}\n\nexport function selectSessionTasks(bucket: SessionBucket | undefined) {\n if (!bucket) return [];\n return Object.values(bucket.tasks);\n}\n\nexport function selectSessionPermissions(bucket: SessionBucket | undefined) {\n if (!bucket) return [];\n return Object.values(bucket.permissions);\n}\n\nexport function selectFirstPendingPermission(\n state: import(\"../types/index.js\").OpenHarnessClientState,\n sessionId?: string,\n): import(\"../types/index.js\").PermissionRequestRecord | undefined {\n if (!sessionId) return undefined;\n const bucket = state.buckets[sessionId];\n if (!bucket) return undefined;\n return Object.values(bucket.permissions)\n .filter((request) => request.status === \"pending\")\n .sort((a, b) => a.createdAt - b.createdAt)\n .at(0);\n}\n\n",
38
+ "/**\n * 客户端事件同步:session 使用原子 HTTP snapshot + SSE live;\n * 无 sessionId 的全局视图使用 HTTP replay + SSE live。\n *\n * UI(如 `useServerSync`)通常消费 `syncEvents`,而不是分别调 listEvents / streamEvents。\n * live SSE 非 abort 断流后按 `state.lastSeq` 指数退避重连;session 路径遇 seq 空洞会 re-snapshot。\n */\n\nimport {\n applyEvent,\n applyEvents,\n applySessionSnapshot,\n createInitialClientState,\n UnsupportedSessionEventSchemaVersionError,\n} from \"./reducer.js\";\nimport type {\n EventSyncOptions,\n ListEventsOptions,\n OpenHarnessClientState,\n SessionEventRecord,\n SessionStateSnapshot,\n SyncEventUpdate,\n} from \"../types/index.js\";\n\nexport interface SyncEventsClient {\n sessions: {\n getState(sessionId: string, options?: { signal?: AbortSignal }): Promise<SessionStateSnapshot>;\n };\n events: {\n list(options?: ListEventsOptions & { signal?: AbortSignal }): Promise<SessionEventRecord[]>;\n stream(options?: EventSyncOptions & { transportReconnect?: boolean }): AsyncIterable<SessionEventRecord>;\n };\n}\n\nconst DEFAULT_RECONNECT_DELAY_MS = (attempt: number): number =>\n Math.min(30_000, 250 * 2 ** Math.max(0, attempt));\n\n/** 用已有事件列表一次性 hydrate 出客户端状态(离线/测试常用)。 */\nexport function hydrateState(events: Iterable<SessionEventRecord>): OpenHarnessClientState {\n return applyEvents(createInitialClientState(), events);\n}\n\n/**\n * session attach 主路径:`getSessionState` snapshot → `streamEvents` live。\n * 每应用一条(或 live 下状态确有变化的)事件就 yield `{ event, state, source }`。\n * live 阶段若 `applyEvent` 因重复 seq 返回同一引用,则跳过 yield。\n */\nexport async function* syncEvents(\n client: SyncEventsClient,\n options: EventSyncOptions = {},\n): AsyncIterable<SyncEventUpdate> {\n let state = createInitialClientState();\n if (options.sessionId) {\n const snapshot = await client.sessions.getState(options.sessionId, { signal: options.signal });\n state = applySessionSnapshot(state, snapshot);\n yield { state, source: \"snapshot\" };\n\n yield* liveWithReconnect(client, state, options, snapshot.cursor);\n return;\n }\n const replay = await client.events.list({\n cursor: options.cursor,\n sessionId: options.sessionId,\n signal: options.signal,\n });\n\n for (const event of replay) {\n state = applyEvent(state, event);\n yield { event, state, source: \"replay\" };\n }\n\n yield* liveWithReconnect(client, state, options, state.lastSeq);\n}\n\nasync function* liveWithReconnect(\n client: SyncEventsClient,\n initialState: OpenHarnessClientState,\n options: EventSyncOptions,\n initialCursor: number,\n): AsyncIterable<SyncEventUpdate> {\n let state = initialState;\n let cursor = initialCursor;\n let attempt = 0;\n const delayMs = options.reconnectDelayMs ?? DEFAULT_RECONNECT_DELAY_MS;\n\n while (!options.signal?.aborted) {\n try {\n for await (const event of client.events.stream({\n cursor,\n sessionId: options.sessionId,\n signal: options.signal,\n transportReconnect: false,\n })) {\n attempt = 0;\n if (event.seq > state.lastSeq + 1 && !options.sessionId) {\n const gap = await client.events.list({\n cursor: state.lastSeq,\n signal: options.signal,\n });\n for (const missed of gap) {\n const beforeGap = state;\n state = applyEvent(state, missed);\n if (state !== beforeGap) yield { event: missed, state, source: \"replay\" };\n }\n cursor = state.lastSeq;\n }\n\n const before = state;\n state = applyEvent(state, event);\n cursor = state.lastSeq;\n if (state !== before) yield { event, state, source: \"live\" };\n }\n\n // Clean stream end is treated as a disconnect that should resume.\n if (options.signal?.aborted) return;\n yield { state, source: \"reconnecting\" };\n if (!(await waitForReconnect(delayMs(attempt), options.signal))) return;\n attempt += 1;\n cursor = state.lastSeq;\n } catch (error) {\n if (error instanceof UnsupportedSessionEventSchemaVersionError) throw error;\n if (isAbortError(error) || options.signal?.aborted) return;\n yield { state, source: \"reconnecting\" };\n if (!(await waitForReconnect(delayMs(attempt), options.signal))) return;\n attempt += 1;\n cursor = state.lastSeq;\n }\n }\n}\n\nasync function waitForReconnect(ms: number, signal?: AbortSignal): Promise<boolean> {\n try {\n await sleep(ms, signal);\n return !signal?.aborted;\n } catch (error) {\n if (isAbortError(error) || signal?.aborted) return false;\n throw error;\n }\n}\n\nfunction isAbortError(error: unknown): boolean {\n if (!error || typeof error !== \"object\") return false;\n if (\"name\" in error && (error as { name?: string }).name === \"AbortError\") return true;\n return false;\n}\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n if (ms <= 0) {\n if (signal?.aborted) return Promise.reject(abortError(signal));\n return Promise.resolve();\n }\n return new Promise<void>((resolve, reject) => {\n if (signal?.aborted) {\n reject(abortError(signal));\n return;\n }\n const timer = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(timer);\n reject(abortError(signal!));\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\nfunction abortError(signal: AbortSignal): Error {\n if (signal.reason instanceof Error) return signal.reason;\n return new DOMException(\"Aborted\", \"AbortError\");\n}\n",
39
+ "/**\n * 无 UI 框架依赖的 Session 同步控制器。\n *\n * 封装 snapshot-first attach、cursor 维护、gap catch-up、SSE 重连、abort 与 generation fencing。\n * 平台层(Frontend Hook、Desktop Main Subscription Service)直接使用此控制器,\n * 避免重复编写 stream pump、重连定时器、generation 丢弃等逻辑。\n */\n\nimport {\n applyEvent,\n applySessionSnapshot,\n createInitialClientState,\n UnsupportedSessionEventSchemaVersionError,\n} from \"./reducer.js\";\nimport type { SyncEventsClient } from \"./sync.js\";\nimport type {\n OpenHarnessClientState,\n SyncEventUpdate,\n} from \"../types/index.js\";\n\nexport type SyncConnectionStatus = \"idle\" | \"connecting\" | \"connected\" | \"reconnecting\" | \"error\";\n\nexport interface SessionSyncControllerOptions {\n client: SyncEventsClient;\n sessionId?: string;\n initialState?: OpenHarnessClientState;\n cursor?: number;\n generation?: number;\n signal?: AbortSignal;\n reconnectDelayMs?: (attempt: number) => number;\n onUpdate?: (update: SyncEventUpdate, generation: number) => void;\n onStatusChange?: (status: SyncConnectionStatus, generation: number) => void;\n onError?: (error: unknown, generation: number) => void;\n}\n\nconst DEFAULT_RECONNECT_DELAY_MS = (attempt: number): number =>\n Math.min(30_000, 250 * 2 ** Math.max(0, attempt));\n\nexport class SessionSyncController {\n private readonly client: SyncEventsClient;\n private readonly sessionId?: string;\n private readonly initialCursor: number;\n private readonly generation: number;\n private readonly externalSignal?: AbortSignal;\n private readonly reconnectDelayMs: (attempt: number) => number;\n private readonly onUpdate?: (update: SyncEventUpdate, generation: number) => void;\n private readonly onStatusChange?: (status: SyncConnectionStatus, generation: number) => void;\n private readonly onError?: (error: unknown, generation: number) => void;\n\n private readonly abortController = new AbortController();\n private state: OpenHarnessClientState;\n private status: SyncConnectionStatus = \"idle\";\n private running = false;\n\n constructor(options: SessionSyncControllerOptions) {\n this.client = options.client;\n this.sessionId = options.sessionId;\n this.state = options.initialState ?? createInitialClientState();\n if ((options.cursor ?? 0) > 0 && !options.initialState) {\n throw new Error(\"A non-zero cursor requires initialState so durable state is not skipped\");\n }\n this.initialCursor = Math.max(0, options.cursor ?? 0, this.state.lastSeq);\n this.generation = options.generation ?? 0;\n this.externalSignal = options.signal;\n this.reconnectDelayMs = options.reconnectDelayMs ?? DEFAULT_RECONNECT_DELAY_MS;\n this.onUpdate = options.onUpdate;\n this.onStatusChange = options.onStatusChange;\n this.onError = options.onError;\n\n if (this.externalSignal) {\n if (this.externalSignal.aborted) {\n this.abortController.abort(this.externalSignal.reason);\n } else {\n this.externalSignal.addEventListener(\n \"abort\",\n () => this.abortController.abort(this.externalSignal?.reason),\n { once: true },\n );\n }\n }\n }\n\n get currentStatus(): SyncConnectionStatus {\n return this.status;\n }\n\n get currentState(): OpenHarnessClientState {\n return this.state;\n }\n\n get currentGeneration(): number {\n return this.generation;\n }\n\n get signal(): AbortSignal {\n return this.abortController.signal;\n }\n\n abort(reason?: unknown): void {\n this.abortController.abort(reason);\n }\n\n private setStatus(status: SyncConnectionStatus): void {\n if (this.status === status) return;\n this.status = status;\n this.onStatusChange?.(status, this.generation);\n }\n\n private emitUpdate(update: SyncEventUpdate): void {\n if (this.abortController.signal.aborted) return;\n this.state = update.state;\n this.onUpdate?.(update, this.generation);\n }\n\n /**\n * 启动同步循环。\n * 返回一个在同步正常结束(如 abort)或不可恢复错误已通过 onError 上报后 resolve 的 Promise。\n */\n async start(): Promise<void> {\n if (this.running) return;\n this.running = true;\n const signal = this.abortController.signal;\n if (signal.aborted) {\n this.setStatus(\"idle\");\n return;\n }\n\n let cursor = this.initialCursor;\n let attempt = 0;\n\n try {\n this.setStatus(\"connecting\");\n\n if (this.sessionId) {\n const snapshot = await this.client.sessions.getState(this.sessionId, { signal });\n if (signal.aborted) return;\n this.state = applySessionSnapshot(this.state, snapshot);\n cursor = Math.max(cursor, snapshot.cursor, this.state.lastSeq);\n this.setStatus(\"connected\");\n this.emitUpdate({ state: this.state, source: \"snapshot\" });\n } else {\n const replay = await this.client.events.list({\n cursor,\n sessionId: this.sessionId,\n signal,\n });\n if (signal.aborted) return;\n for (const event of replay) {\n this.state = applyEvent(this.state, event);\n this.emitUpdate({ event, state: this.state, source: \"replay\" });\n }\n cursor = Math.max(cursor, this.state.lastSeq);\n this.setStatus(\"connected\");\n }\n\n while (!signal.aborted) {\n try {\n for await (const event of this.client.events.stream({\n cursor,\n sessionId: this.sessionId,\n signal,\n transportReconnect: false,\n })) {\n if (signal.aborted) return;\n attempt = 0;\n this.setStatus(\"connected\");\n\n if (event.seq > cursor + 1) {\n const gap = await this.client.events.list({\n cursor,\n sessionId: this.sessionId,\n signal,\n });\n if (signal.aborted) return;\n for (const missed of gap) {\n const beforeGap = this.state;\n this.state = applyEvent(this.state, missed);\n if (this.state !== beforeGap) {\n this.emitUpdate({ event: missed, state: this.state, source: \"replay\" });\n }\n }\n cursor = Math.max(cursor, this.state.lastSeq);\n }\n\n const before = this.state;\n this.state = applyEvent(this.state, event);\n cursor = Math.max(cursor, this.state.lastSeq);\n if (this.state !== before) {\n this.emitUpdate({ event, state: this.state, source: \"live\" });\n }\n }\n\n if (signal.aborted) return;\n this.setStatus(\"reconnecting\");\n this.emitUpdate({ state: this.state, source: \"reconnecting\" });\n const delay = this.reconnectDelayMs(attempt);\n attempt += 1;\n cursor = this.state.lastSeq;\n if (!(await this.waitForDelay(delay, signal))) return;\n } catch (error) {\n if (error instanceof UnsupportedSessionEventSchemaVersionError) {\n throw error;\n }\n if (this.isAbortError(error) || signal.aborted) return;\n this.setStatus(\"reconnecting\");\n this.emitUpdate({ state: this.state, source: \"reconnecting\" });\n const delay = this.reconnectDelayMs(attempt);\n attempt += 1;\n cursor = this.state.lastSeq;\n if (!(await this.waitForDelay(delay, signal))) return;\n }\n }\n } catch (error) {\n if (!this.isAbortError(error) && !signal.aborted) {\n this.setStatus(\"error\");\n this.onError?.(error, this.generation);\n }\n } finally {\n this.running = false;\n if (signal.aborted && this.status !== \"error\") {\n this.setStatus(\"idle\");\n }\n }\n }\n\n private isAbortError(error: unknown): boolean {\n if (!error || typeof error !== \"object\") return false;\n if (\"name\" in error && (error as { name?: string }).name === \"AbortError\") return true;\n return false;\n }\n\n private waitForDelay(ms: number, signal: AbortSignal): Promise<boolean> {\n if (ms <= 0) return Promise.resolve(!signal.aborted);\n return new Promise<boolean>((resolve) => {\n if (signal.aborted) {\n resolve(false);\n return;\n }\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve(!signal.aborted);\n }, ms);\n const onAbort = () => {\n clearTimeout(timer);\n resolve(false);\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n }\n}\n",
40
+ "export * from \"./reducer.js\";\nexport * from \"./selectors.js\";\nexport * from \"./sync.js\";\nexport * from \"./session-sync-controller.js\";\n",
21
41
  "import type { ReloadPluginsResponse } from \"../types/index.js\";\n\n/** Reload invalidates runtimes; it does not prove that every plugin activated. */\nexport function formatPluginReload(result: ReloadPluginsResponse): string {\n const lines = [result.message];\n if (!result.plugins.length) lines.push(\"No plugins discovered.\");\n else {\n lines.push(\"Plugin validation after reload (runtimes load on next use):\");\n for (const plugin of result.plugins) {\n lines.push(`- ${plugin.identity.id} [${plugin.enabled ? \"enabled\" : \"disabled\"}/${plugin.installation}/${plugin.activation}]`);\n for (const diagnostic of plugin.diagnostics) lines.push(` ${diagnostic.severity}: ${diagnostic.code}: ${diagnostic.message}`);\n if (plugin.permissions.missing.length) lines.push(` Missing permissions: ${plugin.permissions.missing.join(\", \")}`);\n if (plugin.installation !== \"installed\" || plugin.permissions.missing.length || plugin.diagnostics.some(item => item.code.includes(\"permission\"))) {\n lines.push(plugin.scope === \"managed\"\n ? \" Ask your administrator to repair this managed plugin.\"\n : \" Review the source and permissions, then run ohs plugin install-local <source> or ohs plugin link <source>, supplying --approve <permission> for each requested permission.\");\n }\n }\n }\n lines.push(...result.warnings.map(warning => `! ${warning}`));\n return lines.join(\"\\n\");\n}\n",
22
- "import type { OpenHarnessClient } from \"../transport/http-client.js\";\nimport type { CommandCatalogEntry, OpenHarnessClientState } from \"../types/index.js\";\nimport type { JobReadResult, JobSnapshot } from \"@openharness/protocol\";\nimport { patchSessionRuntimeMetadata } from \"@openharness/protocol\";\nimport { formatPluginReload } from \"./plugin-presentation.js\";\n\nexport type SlashLine = { name: string; args: string };\n\nexport type PresentationReadRequest = {\n key: string;\n title: string;\n load: () => Promise<string>;\n};\n\nexport type RuntimeDiagnostics = {\n runtime?: string;\n platform?: string;\n architecture?: string;\n};\n\nexport type SessionCommandHost = {\n client: OpenHarnessClient;\n sessionId?: string;\n /** Project cwd for memory/git/plugins/etc. */\n cwd: string;\n /** Values used by /status */\n model?: string;\n permissionMode?: string;\n statusSessionId?: string;\n commandCatalog: CommandCatalogEntry[];\n clientState: OpenHarnessClientState;\n busy: boolean;\n /** Present a system/notice message to the user */\n emit(text: string): void;\n /** Present read-only output in a transient UI surface when available. */\n present?(title: string, content: string): void;\n /** Present cached read-only output immediately and refresh it asynchronously. */\n cacheFirstRead?(request: PresentationReadRequest): void;\n /** Optional status patch for /plan /provider */\n patchStatus?(patch: Record<string, unknown>): void;\n /** Host-specific runtime information used by /doctor. Browsers may omit it. */\n getRuntimeDiagnostics?(): RuntimeDiagnostics | Promise<RuntimeDiagnostics>;\n};\n\nexport type SessionCommandOutcome =\n | \"handled\"\n | \"unhandled\"\n | \"local_ui\";\n\n/** Client-local UI commands; never forwarded as model prompts. */\nexport const LOCAL_COMMAND_DETAILS: Array<{ name: string; description?: string }> = [\n { name: \"/new\", description: \"Start a new session\" },\n { name: \"/sessions\", description: \"List and switch sessions\" },\n { name: \"/resume\", description: \"Replay an interrupted prompt run\" },\n { name: \"/permissions\", description: \"Change permission mode\" },\n { name: \"/plan\", description: \"Toggle plan mode\" },\n { name: \"/theme\", description: \"Change TUI theme\" },\n { name: \"/models\", description: \"Select model\" },\n { name: \"/workflow\", description: \"Open Jobs panel with Workflow details\" },\n { name: \"/workflows\", description: \"Open Jobs panel with Workflow details\" },\n];\n\nexport const LOCAL_COMMAND_NAMES = new Set(LOCAL_COMMAND_DETAILS.map((entry) => entry.name));\n\nexport function parseSlashLine(line: string): SlashLine | null {\n const trimmed = line.trim();\n if (!trimmed.startsWith(\"/\")) return null;\n const spaceIdx = trimmed.search(/\\s/);\n if (spaceIdx === -1) return { name: trimmed, args: \"\" };\n return { name: trimmed.slice(0, spaceIdx), args: trimmed.slice(spaceIdx + 1).trim() };\n}\n\nexport function mergeCommandDetails(\n catalog: CommandCatalogEntry[],\n): Array<{ name: string; description?: string }> {\n const byName = new Map<string, { name: string; description?: string }>();\n for (const entry of LOCAL_COMMAND_DETAILS) byName.set(entry.name, entry);\n for (const entry of catalog) {\n if (byName.has(entry.name)) continue;\n byName.set(entry.name, {\n name: entry.name,\n ...(entry.description ? { description: entry.description } : {}),\n });\n }\n return [...byName.values()].sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport function hasActiveRun(state: OpenHarnessClientState, sessionId?: string): boolean {\n if (!sessionId) return false;\n const bucket = state.buckets[sessionId];\n if (!bucket) return false;\n return Object.values(bucket.runs).some((run) => run.status === \"pending\" || run.status === \"running\");\n}\n\nexport function resolveSessionCwd(input: {\n statusCwd?: unknown;\n daemonCwd?: string;\n fallback?: string;\n}): string {\n if (typeof input.statusCwd === \"string\" && input.statusCwd) return input.statusCwd;\n if (input.daemonCwd) return input.daemonCwd;\n return input.fallback ?? \".\";\n}\n\nfunction firstArg(args: string): string | undefined {\n return args.trim().split(/\\s+/).filter(Boolean)[0];\n}\n\nfunction shouldPresentSlashOutput(slash: SlashLine): boolean {\n switch (slash.name) {\n case \"/help\":\n case \"/version\":\n case \"/status\":\n case \"/mcp\":\n case \"/context\":\n case \"/stats\":\n case \"/agents\":\n case \"/doctor\":\n case \"/usage\":\n case \"/cost\":\n case \"/hooks\":\n case \"/subagents\":\n case \"/diff\":\n case \"/skills\":\n return true;\n case \"/config\": {\n const args = slash.args.trim();\n return !args || args === \"show\";\n }\n case \"/provider\":\n return !slash.args.trim();\n case \"/jobs\": {\n const sub = firstArg(slash.args);\n return !sub || sub === \"list\" || sub === \"show\";\n }\n case \"/memory\": {\n const sub = firstArg(slash.args);\n return !sub || sub === \"list\" || sub === \"show\";\n }\n case \"/auth\": {\n const sub = firstArg(slash.args);\n return !sub || sub === \"status\";\n }\n case \"/profile\": {\n const action = firstArg(slash.args) ?? \"status\";\n return action === \"status\" || action === \"show\";\n }\n case \"/effort\":\n case \"/turns\":\n return !slash.args.trim();\n case \"/output-style\": {\n const sub = firstArg(slash.args);\n return !sub || sub === \"show\" || sub === \"list\";\n }\n case \"/plugin\": {\n const sub = firstArg(slash.args);\n return !sub || sub === \"list\";\n }\n case \"/branch\":\n return !slash.args.trim() || slash.args.trim().split(/\\s+/).includes(\"list\");\n case \"/commit\":\n return !slash.args.trim();\n default:\n return false;\n }\n}\n\nfunction formatJobReadResult(result: JobReadResult): string {\n const snapshot: JobSnapshot = result.snapshot;\n const capabilities = [\n `read=${snapshot.capabilities.read}`,\n `wait=${snapshot.capabilities.wait}`,\n `send=${snapshot.capabilities.send}`,\n `cancel=${snapshot.capabilities.cancel}`,\n ].join(\", \");\n return [\n `Job: ${snapshot.id}`,\n ` Kind: ${snapshot.kind}`,\n ` Status: ${snapshot.status}`,\n ` Label: ${snapshot.label}`,\n ` Owner session: ${snapshot.ownerSession}`,\n ` CWD: ${snapshot.cwd}`,\n ` Started at: ${snapshot.startedAt}`,\n ` Updated at: ${snapshot.updatedAt}`,\n ` Finished at: ${snapshot.finishedAt ?? \"(n/a)\"}`,\n ` Detail: ${snapshot.detail ?? \"(none)\"}`,\n ` Capabilities: ${capabilities}`,\n ` Metadata: ${snapshot.metadata ? JSON.stringify(snapshot.metadata) : \"(none)\"}`,\n ` Cursor: ${result.cursor}`,\n ` Truncated: ${result.truncated}`,\n \"\",\n \"Output:\",\n result.text || \"(no output)\",\n ].join(\"\\n\");\n}\n\nfunction slashOutputTitle(slash: SlashLine): string {\n const name = slash.name.startsWith(\"/\") ? slash.name.slice(1) : slash.name;\n return name ? name[0]!.toUpperCase() + name.slice(1) : \"Output\";\n}\n\nexport async function dispatchSessionCommand(\n slash: SlashLine | null,\n host: SessionCommandHost,\n): Promise<SessionCommandOutcome> {\n const {\n client,\n sessionId,\n cwd,\n model,\n permissionMode,\n statusSessionId,\n commandCatalog,\n clientState,\n busy,\n } = host;\n const emit = (text: string) => {\n if (slash && host.present && shouldPresentSlashOutput(slash)) {\n host.present(slashOutputTitle(slash), text);\n return;\n }\n host.emit(text);\n };\n const readPresentation = async (\n key: string,\n title: string,\n load: () => Promise<string>,\n ): Promise<void> => {\n if (slash && host.cacheFirstRead && shouldPresentSlashOutput(slash)) {\n host.cacheFirstRead({ key, title, load });\n return;\n }\n emit(await load());\n };\n const patchStatus = (patch: Record<string, unknown>) => host.patchStatus?.(patch);\n\n if (slash?.name === \"/plan\") {\n const next =\n slash.args === \"on\" ? \"plan\"\n : slash.args === \"off\" ? \"default\"\n : undefined;\n if (!next) {\n emit(\"Usage: /plan [on|off]\");\n return \"handled\";\n }\n patchStatus({ permission_mode: next });\n if (sessionId) {\n await client.updateSession(sessionId, {\n metadata: patchSessionRuntimeMetadata({}, { permissionMode: next }),\n });\n }\n emit(`Permission mode: ${next}`);\n return \"handled\";\n }\n\n if (slash?.name === \"/skills\") {\n const templates = commandCatalog.filter((entry) => entry.kind === \"template\");\n if (slash.args) {\n const name = slash.args.startsWith(\"/\") ? slash.args : `/${slash.args}`;\n const match = templates.find((entry) => entry.name === name || entry.name === `/${slash.args}`);\n if (!match) {\n emit(`Unknown skill: ${slash.args}`);\n return \"handled\";\n }\n emit(`${match.name}${match.description ? ` — ${match.description}` : \"\"}`);\n return \"handled\";\n }\n if (templates.length === 0) {\n emit(\"No user-invocable skills available.\");\n return \"handled\";\n }\n emit(\n [\"Skills:\", ...templates.map((entry) =>\n `- ${entry.name}${entry.description ? ` — ${entry.description}` : \"\"}`)].join(\"\\n\"),\n );\n return \"handled\";\n }\n\n if (slash?.name === \"/help\") {\n const details = mergeCommandDetails(commandCatalog);\n emit(\n [\"Available commands:\", ...details.map((entry) =>\n `${entry.name}${entry.description ? ` — ${entry.description}` : \"\"}`)].join(\"\\n\"),\n );\n return \"handled\";\n }\n\n if (slash?.name === \"/version\") {\n await readPresentation(\"version\", \"Version\", async () => {\n const health = await client.health();\n return `OpenHarness${health.version ? ` v${health.version}` : \"\"}`;\n });\n return \"handled\";\n }\n\n if (slash?.name === \"/status\") {\n emit([\n \"Session status:\",\n ` session: ${statusSessionId ?? \"(none)\"}`,\n ` model: ${model ?? \"(unknown)\"}`,\n ` cwd: ${cwd || \"(unknown)\"}`,\n ` mode: ${permissionMode ?? \"default\"}`,\n ` busy: ${busy || hasActiveRun(clientState, sessionId) ? \"yes\" : \"no\"}`,\n ].join(\"\\n\"));\n return \"handled\";\n }\n\n if (slash?.name === \"/config\") {\n const args = slash.args.trim();\n if (!args || args === \"show\") {\n await readPresentation(`config:${cwd}`, \"Config\", async () => {\n const settings = await client.getSettings();\n return JSON.stringify(settings, null, 2);\n });\n return \"handled\";\n }\n const setMatch = args.match(/^set\\s+(\\S+)\\s+([\\s\\S]+)$/);\n if (!setMatch?.[1] || setMatch[2] === undefined) {\n emit(\"Usage: /config [show | set KEY VALUE]\");\n return \"handled\";\n }\n await client.patchSettings({ path: setMatch[1], value: setMatch[2].trim() });\n emit(`Set ${setMatch[1]} = ${setMatch[2].trim()}`);\n return \"handled\";\n }\n\n if (slash?.name === \"/provider\") {\n if (!slash.args) {\n await readPresentation(\"providers\", \"Provider\", async () => {\n const providers = await client.listProviders();\n const lines = [\"Available providers:\", \"\"];\n for (const provider of providers) {\n const marker = provider.active ? \" (active)\" : \"\";\n const keyStatus = provider.local ? \"[local]\" : provider.hasKey ? \"[key]\" : \"[no key]\";\n lines.push(` ${provider.name.padEnd(14)} ${provider.displayName.padEnd(14)} ${keyStatus}${marker}`);\n }\n return lines.join(\"\\n\");\n });\n return \"handled\";\n }\n const settings = await client.patchSettings(\n slash.args === \"auto\"\n ? { provider: \"auto\" }\n : { provider: slash.args },\n );\n if (typeof settings.model === \"string\") {\n patchStatus({ model: settings.model });\n }\n emit(`Provider switched to: ${slash.args}`);\n return \"handled\";\n }\n\n if (slash?.name === \"/mcp\") {\n if (!sessionId) return \"handled\";\n await readPresentation(`mcp:${sessionId}`, \"MCP\", async () => {\n const servers = await client.getSessionMcp(sessionId);\n if (servers.length === 0) return \"No MCP servers connected.\";\n return [\n `MCP Servers (${servers.length}):`,\n \"\",\n ...servers.flatMap((server) => [\n ` ${server.name}: ${server.status}`,\n ...(server.command ? [` Command: ${server.command}`] : []),\n ` Tools: ${server.toolCount} Resources: ${server.resourceCount}`,\n ...(server.error ? [` Error: ${server.error}`] : []),\n \"\",\n ]),\n ].join(\"\\n\");\n });\n return \"handled\";\n }\n\n if (slash?.name === \"/jobs\") {\n if (!sessionId) return \"handled\";\n const args = slash.args.trim();\n const [sub, id, ...extra] = args.split(/\\s+/).filter(Boolean);\n if ((!sub || sub === \"list\") && !id) {\n await readPresentation(`jobs:${sessionId}`, \"Jobs\", async () => {\n const jobs = await client.listJobs({\n sessionId,\n includeFinished: true,\n limit: 100,\n });\n if (jobs.length === 0) return \"No Jobs.\";\n return [\n `Jobs (${jobs.length}):`,\n \"\",\n ...jobs.map((job) => ` ${job.id} [${job.status}] ${job.kind}: ${job.label}`),\n ].join(\"\\n\");\n });\n return \"handled\";\n }\n if (sub === \"show\" && id && extra.length === 0) {\n await readPresentation(`job:${sessionId}:${id}`, \"Jobs\", async () => {\n const result = await client.readJob(id, { sessionId });\n return formatJobReadResult(result);\n });\n return \"handled\";\n }\n if (sub === \"cancel\" && id && extra.length === 0) {\n const snapshot = await client.cancelJob(id, {\n sessionId,\n reason: \"Cancelled from slash command\",\n });\n emit(`Job ${snapshot.id} status: ${snapshot.status}.`);\n return \"handled\";\n }\n emit(\"Usage: /jobs [list | show ID | cancel ID]\");\n return \"handled\";\n }\n\n if (slash?.name === \"/background\") {\n const command = slash.args.trim();\n if (!command) {\n emit(\"Usage: /background <command>\");\n return \"handled\";\n }\n if (!sessionId) return \"handled\";\n const result = await client.createBackgroundShell({ sessionId, command });\n emit(`Background shell started: ${result.jobId}. Use /jobs to inspect it.`);\n return \"handled\";\n }\n\n if (slash?.name === \"/memory\") {\n const args = slash.args.trim();\n const [sub, ...rest] = args.split(/\\s+/).filter(Boolean);\n if (!sub || sub === \"list\") {\n await readPresentation(`memory:${cwd}:list`, \"Memory\", async () => {\n const listed = await client.listMemory({ cwd });\n if (listed.entries.length === 0) return `Memory directory: ${listed.directory}\\nNo entries found.`;\n return [\n `Memory entries (${listed.entries.length}):`,\n \"\",\n ...listed.entries.map((entry) => {\n const tags = entry.tags?.length ? ` [${entry.tags.join(\", \")}]` : \"\";\n const preview = entry.content.length > 80\n ? `${entry.content.slice(0, 80)}...`\n : entry.content;\n return ` ${entry.id}${tags}: ${preview}`;\n }),\n ].join(\"\\n\");\n });\n return \"handled\";\n }\n if (sub === \"show\" && rest[0]) {\n const memoryId = rest[0];\n await readPresentation(`memory:${cwd}:show:${memoryId}`, \"Memory\", async () => {\n const entry = await client.getMemory(memoryId, { cwd });\n return [\n `ID: ${entry.id}`,\n `Created: ${new Date(entry.createdAt).toISOString()}`,\n `Updated: ${new Date(entry.updatedAt).toISOString()}`,\n `Tags: ${entry.tags?.join(\", \") ?? \"(none)\"}`,\n \"\",\n entry.content,\n ].join(\"\\n\");\n });\n return \"handled\";\n }\n if (sub === \"add\") {\n const content = rest.join(\" \").trim();\n if (!content) {\n emit(\"Usage: /memory add <content>\");\n return \"handled\";\n }\n const entry = await client.addMemory({ cwd, content });\n emit(`Memory added: ${entry.id}`);\n return \"handled\";\n }\n if (sub === \"remove\" && rest[0]) {\n await client.removeMemory(rest[0], { cwd });\n emit(`Memory removed: ${rest[0]}`);\n return \"handled\";\n }\n emit(\"Usage: /memory [list | show ID | add CONTENT | remove ID]\");\n return \"handled\";\n }\n\n if (slash?.name === \"/auth\") {\n const args = slash.args.trim();\n const [sub, provider, apiKey] = args.split(/\\s+/).filter(Boolean);\n if (!sub || sub === \"status\") {\n await readPresentation(\"auth:status\", \"Auth\", async () => {\n const auth = await client.getAuthStatus();\n const lines = [\"Credential status:\", \"\", \" Auth sources:\"];\n lines.push(\n ` codex_subscription: ${auth.codex.configured ? \"ready\" : auth.codex.state} (${auth.codex.source})`,\n );\n if (auth.storedProviders.length > 0) {\n lines.push(\"\", \" Stored credentials:\");\n for (const name of auth.storedProviders) lines.push(` ${name}: configured`);\n }\n if (auth.envProviders.length > 0) {\n lines.push(\" Environment variables:\");\n for (const env of auth.envProviders) lines.push(` ${env.name}: ${env.envKey}`);\n }\n if (auth.storedProviders.length === 0 && auth.envProviders.length === 0) {\n lines.push(\"\", \" No credentials configured.\");\n lines.push(\" Use /auth login <provider> <api-key> to store an API key.\");\n lines.push(\" Use /auth login codex to use a Codex subscription.\");\n }\n return lines.join(\"\\n\");\n });\n return \"handled\";\n }\n if (sub === \"login\") {\n if (!provider) {\n emit(\"Usage: /auth login <provider> <api-key> or /auth login codex\");\n return \"handled\";\n }\n const result = await client.authLogin({ provider, apiKey });\n emit(result.message);\n return \"handled\";\n }\n if (sub === \"logout\") {\n if (!provider) {\n emit(\"Usage: /auth logout <provider>\");\n return \"handled\";\n }\n const result = await client.authLogout({ provider });\n emit(result.message);\n return \"handled\";\n }\n emit(\"Unknown subcommand. Use login, logout, or status.\");\n return \"handled\";\n }\n\n if (slash?.name === \"/context\") {\n const action = slash.args.trim().split(/\\s+/).filter(Boolean)[0] ?? \"preview\";\n if (action === \"status\") {\n await readPresentation(`context:${cwd}:status`, \"Context\", async () => await client.getContextStatus({ cwd }));\n return \"handled\";\n }\n if (action === \"usage\") {\n await readPresentation(\n `context:${cwd}:usage:${sessionId ?? \"none\"}`,\n \"Context\",\n async () => {\n const result = await client.getContextUsage({\n cwd,\n ...(sessionId ? { sessionId } : {}),\n });\n return result.report;\n },\n );\n return \"handled\";\n }\n if (action !== \"preview\") {\n emit(\"Usage: /context [preview|status|usage]\");\n return \"handled\";\n }\n await readPresentation(`context:${cwd}`, \"Context\", async () => await client.getContextPreview({ cwd }));\n return \"handled\";\n }\n\n if (slash?.name === \"/stats\") {\n if (!sessionId) return \"handled\";\n const bucket = clientState.buckets[sessionId];\n const messageCount = bucket?.messages.length ?? 0;\n const text = (bucket?.messages ?? [])\n .flatMap((message) => bucket?.partsByMessageId[message.id] ?? [])\n .map((part) => part.text ?? \"\")\n .join(\" \");\n const estimatedTokens = Math.max(1, Math.ceil(text.length / 4));\n const [memory, jobsResult, settings] = await Promise.all([\n client.listMemory({ cwd }).catch(() => ({ entries: [] as Array<{ id: string }> })),\n client.listJobs({ sessionId, includeFinished: true, limit: 100 })\n .then((jobs) => ({ jobs }))\n .catch((error: unknown) => ({\n error: error instanceof Error ? error.message : String(error),\n })),\n client.getSettings().catch(() => ({} as Record<string, unknown>)),\n ]);\n const jobsSummary = \"jobs\" in jobsResult\n ? String(jobsResult.jobs.length)\n : `unavailable (${jobsResult.error})`;\n emit([\n \"Session stats:\",\n `- messages: ${messageCount}`,\n `- estimated_tokens: ${estimatedTokens}`,\n `- memory_entries: ${memory.entries.length}`,\n `- jobs: ${jobsSummary}`,\n `- output_style: ${typeof settings.outputStyle === \"string\" ? settings.outputStyle : \"default\"}`,\n ].join(\"\\n\"));\n return \"handled\";\n }\n\n if (slash?.name === \"/agents\") {\n if (!sessionId) return \"handled\";\n const agents = await client.listJobs({\n sessionId,\n kinds: [\"agent\"],\n includeFinished: true,\n limit: 100,\n });\n if (agents.length === 0) {\n emit(\"No Agent Jobs.\");\n return \"handled\";\n }\n emit(\n [\n `Agent Jobs (${agents.length}):`,\n \"\",\n ...agents.map((job) => ` ${job.id} [${job.status}] ${job.label}`),\n ].join(\"\\n\"),\n );\n return \"handled\";\n }\n\n if (slash?.name === \"/rewind\") {\n if (!sessionId) return \"handled\";\n const raw = slash.args.trim().split(/\\s+/).filter(Boolean)[0] ?? \"1\";\n const count = Number.parseInt(raw, 10);\n if (!Number.isInteger(count) || count < 1) {\n emit(\"Count must be a positive integer\");\n return \"handled\";\n }\n const result = await client.rewindSession(sessionId, { count });\n emit(`Rewound ${result.turns} turn(s), removed ${result.removed} message(s).`);\n return \"handled\";\n }\n\n if (slash?.name === \"/compact\") {\n if (!sessionId) return \"handled\";\n const result = await client.compactSession(sessionId);\n emit(`Conversation compacted (${result.messageCount} messages retained).`);\n return \"handled\";\n }\n\n if (slash?.name === \"/remember\") {\n if (!sessionId) return \"handled\";\n const result = await client.rememberSession(sessionId);\n if (result.skipped) {\n emit(`未写入记忆:${result.reason ?? \"skipped\"}`);\n return \"handled\";\n }\n emit(`已写入 ${result.writtenIds.length} 条记忆:${result.titles.join(\"、\")}`);\n return \"handled\";\n }\n\n if (slash?.name === \"/dream\") {\n const preview = slash.args.includes(\"--preview\");\n const result = await client.startDream({\n cwd,\n ...(sessionId ? { sessionId } : {}),\n preview,\n });\n emit(`Dream started as Job ${result.taskId}. Use /jobs to inspect it.`);\n return \"handled\";\n }\n\n if (slash?.name === \"/profile\") {\n const action = slash.args.trim().split(/\\s+/).filter(Boolean)[0] ?? \"status\";\n if (action === \"status\" || action === \"show\") {\n emit(await client.getProfileStatus());\n return \"handled\";\n }\n if (action === \"init\") {\n emit(await client.initProfile());\n return \"handled\";\n }\n emit(\"Usage: /profile [status|init]\");\n return \"handled\";\n }\n\n if (slash?.name === \"/doctor\") {\n const [settings, auth, memory, mcp, jobsResult] = await Promise.all([\n client.getSettings().catch(() => ({}) as Record<string, unknown>),\n client.getAuthStatus().catch(() => null),\n client.listMemory({ cwd }).catch(() => ({ directory: \"(unavailable)\", entries: [] as Array<{ id: string }> })),\n sessionId ? client.getSessionMcp(sessionId).catch(() => []) : Promise.resolve([]),\n sessionId\n ? client.listJobs({ sessionId, includeFinished: true, limit: 100 })\n .then((jobs) => ({ jobs }))\n .catch((error: unknown) => ({\n error: error instanceof Error ? error.message : String(error),\n }))\n : Promise.resolve({ jobs: [] as JobSnapshot[] }),\n ]);\n const jobsSummary = \"jobs\" in jobsResult\n ? String(jobsResult.jobs.length)\n : `unavailable (${jobsResult.error})`;\n const bucket = sessionId ? clientState.buckets[sessionId] : undefined;\n const diagnostics = await host.getRuntimeDiagnostics?.();\n const runtime = diagnostics?.runtime ?? \"(not provided by this host)\";\n const platform = [diagnostics?.platform, diagnostics?.architecture]\n .filter(Boolean)\n .join(\" \") || \"(not provided by this host)\";\n const lines = [\n \"OpenHarness Environment Diagnostic\",\n \"═\".repeat(40),\n \"\",\n `CWD: ${cwd}`,\n `Runtime: ${runtime}`,\n `Platform: ${platform}`,\n `Model: ${model ?? String(settings.model ?? \"(unknown)\")}`,\n `API Format: ${String(settings.apiFormat ?? \"(default)\")}`,\n `Base URL: ${String(settings.baseUrl ?? \"(default)\")}`,\n `Permission: ${typeof settings.permission === \"object\" && settings.permission && \"mode\" in settings.permission\n ? String((settings.permission as { mode?: string }).mode ?? \"default\")\n : \"default\"}`,\n `Max Turns: ${String(settings.maxTurns ?? \"(default)\")}`,\n `Effort: ${String(settings.effort ?? \"medium\")}`,\n `Passes: ${String(settings.passes ?? 1)}`,\n `Fast Mode: ${settings.fastMode ? \"on\" : \"off\"}`,\n `Theme: ${String(settings.theme ?? \"default\")}`,\n \"\",\n `Messages: ${bucket?.messages.length ?? 0}`,\n `Jobs: ${jobsSummary}`,\n \"\",\n `Memory dir: ${memory.directory}`,\n `Memory entries: ${memory.entries.length}`,\n ];\n if (auth) {\n lines.push(\n \"\",\n `Codex auth: ${auth.codex.configured ? \"ready\" : auth.codex.state} (${auth.codex.source})`,\n `Stored keys: ${auth.storedProviders.length ? auth.storedProviders.join(\", \") : \"(none)\"}`,\n );\n }\n lines.push(\"\", \"MCP Servers:\");\n if (mcp.length === 0) lines.push(\" (none)\");\n else {\n for (const server of mcp) {\n lines.push(` ${server.name}: ${server.status} (${server.toolCount} tools)`);\n }\n }\n emit(lines.join(\"\\n\"));\n return \"handled\";\n }\n\n if (slash?.name === \"/effort\") {\n const level = slash.args.trim().split(/\\s+/).filter(Boolean)[0];\n if (!level) {\n const settings = await client.getSettings();\n emit(`Current effort: ${String(settings.effort ?? \"medium\")}`);\n return \"handled\";\n }\n if (level !== \"low\" && level !== \"medium\" && level !== \"high\") {\n emit(\"Invalid effort. Use: low, medium, or high\");\n return \"handled\";\n }\n await client.patchSettings({ effort: level });\n emit(`Effort set to: ${level}`);\n return \"handled\";\n }\n\n if (slash?.name === \"/fast\") {\n const arg = slash.args.trim().split(/\\s+/).filter(Boolean)[0];\n const settings = await client.getSettings();\n const current = settings.fastMode === true;\n let next: boolean;\n if (arg === \"on\") next = true;\n else if (arg === \"off\") next = false;\n else next = !current;\n await client.patchSettings({ fastMode: next });\n emit(`Fast mode: ${next ? \"ON\" : \"OFF\"}`);\n return \"handled\";\n }\n\n if (slash?.name === \"/turns\") {\n const value = slash.args.trim().split(/\\s+/).filter(Boolean)[0];\n if (!value) {\n const settings = await client.getSettings();\n emit(`Current max turns: ${String(settings.maxTurns ?? \"(default)\")}`);\n return \"handled\";\n }\n const n = Number.parseInt(value, 10);\n if (!Number.isFinite(n) || n < 1 || n > 512) {\n emit(\"Value must be between 1 and 512\");\n return \"handled\";\n }\n await client.patchSettings({ maxTurns: n });\n emit(`Max turns set to: ${n}`);\n return \"handled\";\n }\n\n if (slash?.name === \"/usage\" || slash?.name === \"/cost\") {\n if (!sessionId) return \"handled\";\n if (slash.name === \"/cost\") {\n await readPresentation(`cost:${sessionId}`, \"Cost\", async () => {\n const usage = await client.getSessionUsage(sessionId);\n return [\n \"Cost estimate:\",\n ` Model: ${usage.model}`,\n ` Input tokens: ${usage.inputTokens.toLocaleString()}`,\n ` Output tokens: ${usage.outputTokens.toLocaleString()}`,\n ` Est. cost: ${usage.estimatedCost}`,\n ...(usage.cacheCreationTokens\n ? [` Cache write: ${usage.cacheCreationTokens.toLocaleString()}`]\n : []),\n ...(usage.cacheReadTokens\n ? [` Cache read: ${usage.cacheReadTokens.toLocaleString()}`]\n : []),\n ].join(\"\\n\");\n });\n return \"handled\";\n }\n await readPresentation(`usage:${sessionId}`, \"Usage\", async () => {\n const usage = await client.getSessionUsage(sessionId);\n return [\n \"Token usage:\",\n ` Input: ${usage.inputTokens.toLocaleString()}`,\n ` Output: ${usage.outputTokens.toLocaleString()}`,\n ` Total: ${(usage.inputTokens + usage.outputTokens).toLocaleString()}`,\n ` Cache write: ${usage.cacheCreationTokens.toLocaleString()}`,\n ` Cache read: ${usage.cacheReadTokens.toLocaleString()}`,\n ` Messages: ${usage.messageCount}`,\n ` Est. cost: ${usage.estimatedCost}`,\n ].join(\"\\n\");\n });\n return \"handled\";\n }\n\n if (slash?.name === \"/export\") {\n if (!sessionId) return \"handled\";\n const args = slash.args.trim().split(/\\s+/).filter(Boolean);\n const forceJson = args.includes(\"--json\");\n const filename = args.find((arg) => !arg.startsWith(\"--\"));\n const result = await client.exportSession(sessionId, {\n ...(filename ? { filename } : {}),\n json: forceJson,\n });\n emit(`Exported ${result.format === \"json\" ? \"JSON\" : \"Markdown\"} to: ${result.filepath}`);\n return \"handled\";\n }\n\n if (slash?.name === \"/output-style\") {\n const args = slash.args.trim();\n const styles = await client.listOutputStyles();\n const settings = await client.getSettings();\n const current = typeof settings.outputStyle === \"string\" ? settings.outputStyle : \"default\";\n const firstSpace = args.search(/\\s/);\n const first = firstSpace === -1 ? args : args.slice(0, firstSpace);\n const rest = firstSpace === -1 ? \"\" : args.slice(firstSpace + 1).trim();\n\n if (!first || first === \"show\") {\n emit(`Output style: ${current}`);\n return \"handled\";\n }\n if (first === \"list\") {\n emit(\n styles\n .map((style) => `${style.name === current ? \"* \" : \" \"}${style.name} [${style.source}]`)\n .join(\"\\n\"),\n );\n return \"handled\";\n }\n\n const styleName = first === \"set\" && rest ? rest : rest === \"\" ? first : undefined;\n if (!styleName) {\n emit(\"Usage: /output-style [show|list|NAME]\");\n return \"handled\";\n }\n if (!styles.some((style) => style.name === styleName)) {\n emit(`Unknown output style: ${styleName}`);\n return \"handled\";\n }\n await client.patchSettings({ outputStyle: styleName });\n emit(`Output style set to ${styleName}`);\n return \"handled\";\n }\n\n if (slash?.name === \"/init\") {\n emit(await client.initProject({ cwd }));\n return \"handled\";\n }\n\n if (slash?.name === \"/plugin\") {\n const args = slash.args.trim().split(/\\s+/).filter(Boolean);\n const sub = args[0];\n if (!sub || sub === \"list\") {\n await readPresentation(`plugins:${cwd}`, \"Plugin\", async () => {\n const listed = await client.listPlugins({ cwd });\n if (listed.plugins.length === 0) return \"No plugins discovered.\";\n return [\n ...listed.plugins.map(\n (plugin) =>\n `- ${plugin.identity.id} (${plugin.identity.name}@${plugin.identity.version}) ` +\n `[${plugin.origin}/${plugin.scope}/${plugin.enabled ? \"enabled\" : \"disabled\"}/${plugin.activation}] ` +\n Object.entries(plugin.inventory).map(([kind, count]) => `${kind}=${count}`).join(\" \") +\n plugin.diagnostics.map((item) => `\\n ! ${item.code}: ${item.message}`).join(\"\"),\n ),\n ...listed.warnings.map((warning) => `! ${warning}`),\n ].join(\"\\n\");\n });\n return \"handled\";\n }\n if ((sub === \"enable\" || sub === \"disable\") && args[1]) {\n const result = sub === \"enable\"\n ? await client.enablePlugin(args[1], { cwd })\n : await client.disablePlugin(args[1], { cwd });\n emit(result.message);\n return \"handled\";\n }\n emit(\"Usage: /plugin [list|enable ID|disable ID]\");\n return \"handled\";\n }\n\n if (slash?.name === \"/reload-plugins\") {\n const result = await client.reloadPlugins({ cwd });\n emit(formatPluginReload(result));\n return \"handled\";\n }\n\n if (slash?.name === \"/hooks\") {\n await readPresentation(`hooks:${cwd}:${sessionId ?? \"global\"}`, \"Hooks\", async () => {\n const hooks = await client.listHooks({\n cwd,\n ...(sessionId ? { sessionId } : {}),\n });\n if (hooks.length === 0) return \"No hooks configured.\";\n const settingsHooks = hooks.filter((hook) => hook.origin === \"settings\");\n const runtimeHooks = hooks.filter((hook) => hook.origin === \"runtime\");\n const lines = [\"Hooks:\", \"\"];\n if (runtimeHooks.length > 0) {\n lines.push(\"Runtime hooks:\");\n for (const hook of runtimeHooks) {\n lines.push(` ${hook.id}: ${hook.event} (${hook.type}) [${hook.enabled ? \"enabled\" : \"disabled\"}]`);\n }\n lines.push(\"\");\n }\n if (settingsHooks.length > 0) {\n lines.push(\"Settings hooks:\");\n for (const hook of settingsHooks) {\n lines.push(` ${hook.id}: ${hook.event} (${hook.type}) [${hook.enabled ? \"enabled\" : \"disabled\"}]`);\n }\n }\n return lines.join(\"\\n\");\n });\n return \"handled\";\n }\n\n if (slash?.name === \"/subagents\") {\n const agents = await client.listAgentPersonas();\n emit(\n [\n `Available subagent personas (${agents.length}):`,\n \"\",\n ...agents.flatMap((agent) => [\n `- ${agent.name} [${agent.source ?? \"builtin\"}]${agent.model ? ` model=${agent.model}` : \"\"}`,\n ` ${agent.description.split(\"\\n\")[0]?.slice(0, 100) ?? \"\"}`,\n ]),\n \"\",\n '用法: Agent 工具 subagentType=\"<name>\" 派发;/agents 查看 Agent Jobs。',\n ].join(\"\\n\"),\n );\n return \"handled\";\n }\n\n if (slash?.name === \"/diff\") {\n const full = slash.args.trim().split(/\\s+/).includes(\"full\");\n await readPresentation(`git:diff:${cwd}:${full ? \"full\" : \"summary\"}`, \"Diff\", async () =>\n await client.getGitDiff({ cwd, full }));\n return \"handled\";\n }\n\n if (slash?.name === \"/branch\") {\n const list = slash.args.trim().split(/\\s+/).includes(\"list\");\n await readPresentation(`git:branch:${cwd}:${list ? \"list\" : \"current\"}`, \"Branch\", async () =>\n await client.getGitBranch({ cwd, list }));\n return \"handled\";\n }\n\n if (slash?.name === \"/commit\") {\n const message = slash.args.trim();\n if (!message) {\n await readPresentation(`git:status:${cwd}`, \"Commit\", async () => await client.getGitStatus({ cwd }));\n return \"handled\";\n }\n emit(await client.gitCommit({ cwd, message }));\n return \"handled\";\n }\n\n if (slash && LOCAL_COMMAND_NAMES.has(slash.name)) {\n // UI-only commands are handled by the host UI layer; ignore accidental falls-through.\n return \"local_ui\";\n }\n\n return \"unhandled\";\n}\n",
42
+ "import type {\n AuthResource,\n DevelopmentResource,\n JobResource,\n PluginResource,\n ProjectResource,\n ProviderResource,\n SessionResource,\n SystemResource,\n} from \"../resources/index.js\";\nimport type { ProtocolClient } from \"../protocol/index.js\";\nimport type { CommandCatalogEntry, OpenHarnessClientState } from \"../types/index.js\";\nimport type { JobReadResult, JobSnapshot } from \"@openharness/protocol\";\nimport { patchSessionRuntimeMetadata } from \"@openharness/protocol\";\nimport { formatPluginReload } from \"./plugin-presentation.js\";\n\nexport type SlashLine = { name: string; args: string };\n\nexport type PresentationReadRequest = {\n key: string;\n title: string;\n load: () => Promise<string>;\n};\n\nexport type RuntimeDiagnostics = {\n runtime?: string;\n platform?: string;\n architecture?: string;\n};\n\nexport interface SessionCommandClient {\n protocol: Pick<ProtocolClient, \"health\">;\n system: Pick<\n SystemResource,\n | \"getSettings\" | \"patchSettings\" | \"getSessionMcp\"\n | \"listMemory\" | \"getMemory\" | \"addMemory\" | \"removeMemory\"\n | \"getContextPreview\" | \"getContextStatus\" | \"getContextUsage\"\n | \"startDream\" | \"getProfileStatus\" | \"initProfile\" | \"listOutputStyles\"\n >;\n providers: Pick<ProviderResource, \"listProviders\">;\n auth: Pick<AuthResource, \"getStatus\" | \"login\" | \"logout\">;\n projects: Pick<ProjectResource, \"init\">;\n plugins: Pick<PluginResource, \"list\" | \"enable\" | \"disable\" | \"reload\">;\n development: Pick<\n DevelopmentResource,\n \"listAgentPersonas\" | \"listHooks\" | \"getGitDiff\" | \"getGitBranch\" | \"getGitStatus\" | \"gitCommit\"\n >;\n sessions: Pick<\n SessionResource,\n \"update\" | \"compact\" | \"rewind\" | \"remember\" | \"export\" | \"getUsage\"\n >;\n jobs: Pick<JobResource, \"list\" | \"createBackgroundShell\" | \"read\" | \"cancel\">;\n}\n\nexport type SessionCommandHost = {\n client: SessionCommandClient;\n sessionId?: string;\n /** Project cwd for memory/git/plugins/etc. */\n cwd: string;\n /** Values used by /status */\n model?: string;\n permissionMode?: string;\n statusSessionId?: string;\n commandCatalog: CommandCatalogEntry[];\n clientState: OpenHarnessClientState;\n busy: boolean;\n /** Present a system/notice message to the user */\n emit(text: string): void;\n /** Present read-only output in a transient UI surface when available. */\n present?(title: string, content: string): void;\n /** Present cached read-only output immediately and refresh it asynchronously. */\n cacheFirstRead?(request: PresentationReadRequest): void;\n /** Optional status patch for /plan /provider */\n patchStatus?(patch: Record<string, unknown>): void;\n /** Host-specific runtime information used by /doctor. Browsers may omit it. */\n getRuntimeDiagnostics?(): RuntimeDiagnostics | Promise<RuntimeDiagnostics>;\n};\n\nexport type SessionCommandOutcome =\n | \"handled\"\n | \"unhandled\"\n | \"local_ui\";\n\n/** Client-local UI commands; never forwarded as model prompts. */\nexport const LOCAL_COMMAND_DETAILS: Array<{ name: string; description?: string }> = [\n { name: \"/new\", description: \"Start a new session\" },\n { name: \"/sessions\", description: \"List and switch sessions\" },\n { name: \"/resume\", description: \"Replay an interrupted prompt run\" },\n { name: \"/permissions\", description: \"Change permission mode\" },\n { name: \"/plan\", description: \"Toggle plan mode\" },\n { name: \"/theme\", description: \"Change TUI theme\" },\n { name: \"/models\", description: \"Select model\" },\n { name: \"/workflow\", description: \"Open Jobs panel with Workflow details\" },\n { name: \"/workflows\", description: \"Open Jobs panel with Workflow details\" },\n];\n\nexport const LOCAL_COMMAND_NAMES = new Set(LOCAL_COMMAND_DETAILS.map((entry) => entry.name));\n\nexport function parseSlashLine(line: string): SlashLine | null {\n const trimmed = line.trim();\n if (!trimmed.startsWith(\"/\")) return null;\n const spaceIdx = trimmed.search(/\\s/);\n if (spaceIdx === -1) return { name: trimmed, args: \"\" };\n return { name: trimmed.slice(0, spaceIdx), args: trimmed.slice(spaceIdx + 1).trim() };\n}\n\nexport function mergeCommandDetails(\n catalog: CommandCatalogEntry[],\n): Array<{ name: string; description?: string }> {\n const byName = new Map<string, { name: string; description?: string }>();\n for (const entry of LOCAL_COMMAND_DETAILS) byName.set(entry.name, entry);\n for (const entry of catalog) {\n if (byName.has(entry.name)) continue;\n byName.set(entry.name, {\n name: entry.name,\n ...(entry.description ? { description: entry.description } : {}),\n });\n }\n return [...byName.values()].sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport function hasActiveRun(state: OpenHarnessClientState, sessionId?: string): boolean {\n if (!sessionId) return false;\n const bucket = state.buckets[sessionId];\n if (!bucket) return false;\n return Object.values(bucket.runs).some((run) => run.status === \"pending\" || run.status === \"running\");\n}\n\nexport function resolveSessionCwd(input: {\n statusCwd?: unknown;\n daemonCwd?: string;\n fallback?: string;\n}): string {\n if (typeof input.statusCwd === \"string\" && input.statusCwd) return input.statusCwd;\n if (input.daemonCwd) return input.daemonCwd;\n return input.fallback ?? \".\";\n}\n\nfunction firstArg(args: string): string | undefined {\n return args.trim().split(/\\s+/).filter(Boolean)[0];\n}\n\nfunction shouldPresentSlashOutput(slash: SlashLine): boolean {\n switch (slash.name) {\n case \"/help\":\n case \"/version\":\n case \"/status\":\n case \"/mcp\":\n case \"/context\":\n case \"/stats\":\n case \"/agents\":\n case \"/doctor\":\n case \"/usage\":\n case \"/cost\":\n case \"/hooks\":\n case \"/subagents\":\n case \"/diff\":\n case \"/skills\":\n return true;\n case \"/config\": {\n const args = slash.args.trim();\n return !args || args === \"show\";\n }\n case \"/provider\":\n return !slash.args.trim();\n case \"/jobs\": {\n const sub = firstArg(slash.args);\n return !sub || sub === \"list\" || sub === \"show\";\n }\n case \"/memory\": {\n const sub = firstArg(slash.args);\n return !sub || sub === \"list\" || sub === \"show\";\n }\n case \"/auth\": {\n const sub = firstArg(slash.args);\n return !sub || sub === \"status\";\n }\n case \"/profile\": {\n const action = firstArg(slash.args) ?? \"status\";\n return action === \"status\" || action === \"show\";\n }\n case \"/effort\":\n case \"/turns\":\n return !slash.args.trim();\n case \"/output-style\": {\n const sub = firstArg(slash.args);\n return !sub || sub === \"show\" || sub === \"list\";\n }\n case \"/plugin\": {\n const sub = firstArg(slash.args);\n return !sub || sub === \"list\";\n }\n case \"/branch\":\n return !slash.args.trim() || slash.args.trim().split(/\\s+/).includes(\"list\");\n case \"/commit\":\n return !slash.args.trim();\n default:\n return false;\n }\n}\n\nfunction formatJobReadResult(result: JobReadResult): string {\n const snapshot: JobSnapshot = result.snapshot;\n const capabilities = [\n `read=${snapshot.capabilities.read}`,\n `wait=${snapshot.capabilities.wait}`,\n `send=${snapshot.capabilities.send}`,\n `cancel=${snapshot.capabilities.cancel}`,\n ].join(\", \");\n return [\n `Job: ${snapshot.id}`,\n ` Kind: ${snapshot.kind}`,\n ` Status: ${snapshot.status}`,\n ` Label: ${snapshot.label}`,\n ` Owner session: ${snapshot.ownerSession}`,\n ` CWD: ${snapshot.cwd}`,\n ` Started at: ${snapshot.startedAt}`,\n ` Updated at: ${snapshot.updatedAt}`,\n ` Finished at: ${snapshot.finishedAt ?? \"(n/a)\"}`,\n ` Detail: ${snapshot.detail ?? \"(none)\"}`,\n ` Capabilities: ${capabilities}`,\n ` Metadata: ${snapshot.metadata ? JSON.stringify(snapshot.metadata) : \"(none)\"}`,\n ` Cursor: ${result.cursor}`,\n ` Truncated: ${result.truncated}`,\n \"\",\n \"Output:\",\n result.text || \"(no output)\",\n ].join(\"\\n\");\n}\n\nfunction slashOutputTitle(slash: SlashLine): string {\n const name = slash.name.startsWith(\"/\") ? slash.name.slice(1) : slash.name;\n return name ? name[0]!.toUpperCase() + name.slice(1) : \"Output\";\n}\n\nexport async function dispatchSessionCommand(\n slash: SlashLine | null,\n host: SessionCommandHost,\n): Promise<SessionCommandOutcome> {\n const {\n client,\n sessionId,\n cwd,\n model,\n permissionMode,\n statusSessionId,\n commandCatalog,\n clientState,\n busy,\n } = host;\n const emit = (text: string) => {\n if (slash && host.present && shouldPresentSlashOutput(slash)) {\n host.present(slashOutputTitle(slash), text);\n return;\n }\n host.emit(text);\n };\n const readPresentation = async (\n key: string,\n title: string,\n load: () => Promise<string>,\n ): Promise<void> => {\n if (slash && host.cacheFirstRead && shouldPresentSlashOutput(slash)) {\n host.cacheFirstRead({ key, title, load });\n return;\n }\n emit(await load());\n };\n const patchStatus = (patch: Record<string, unknown>) => host.patchStatus?.(patch);\n\n if (slash?.name === \"/plan\") {\n const next =\n slash.args === \"on\" ? \"plan\"\n : slash.args === \"off\" ? \"default\"\n : undefined;\n if (!next) {\n emit(\"Usage: /plan [on|off]\");\n return \"handled\";\n }\n patchStatus({ permission_mode: next });\n if (sessionId) {\n await client.sessions.update(sessionId, {\n metadata: patchSessionRuntimeMetadata({}, { permissionMode: next }),\n });\n }\n emit(`Permission mode: ${next}`);\n return \"handled\";\n }\n\n if (slash?.name === \"/skills\") {\n const templates = commandCatalog.filter((entry) => entry.kind === \"template\");\n if (slash.args) {\n const name = slash.args.startsWith(\"/\") ? slash.args : `/${slash.args}`;\n const match = templates.find((entry) => entry.name === name || entry.name === `/${slash.args}`);\n if (!match) {\n emit(`Unknown skill: ${slash.args}`);\n return \"handled\";\n }\n emit(`${match.name}${match.description ? ` — ${match.description}` : \"\"}`);\n return \"handled\";\n }\n if (templates.length === 0) {\n emit(\"No user-invocable skills available.\");\n return \"handled\";\n }\n emit(\n [\"Skills:\", ...templates.map((entry) =>\n `- ${entry.name}${entry.description ? ` — ${entry.description}` : \"\"}`)].join(\"\\n\"),\n );\n return \"handled\";\n }\n\n if (slash?.name === \"/help\") {\n const details = mergeCommandDetails(commandCatalog);\n emit(\n [\"Available commands:\", ...details.map((entry) =>\n `${entry.name}${entry.description ? ` — ${entry.description}` : \"\"}`)].join(\"\\n\"),\n );\n return \"handled\";\n }\n\n if (slash?.name === \"/version\") {\n await readPresentation(\"version\", \"Version\", async () => {\n const health = await client.protocol.health();\n return `OpenHarness${health.version ? ` v${health.version}` : \"\"}`;\n });\n return \"handled\";\n }\n\n if (slash?.name === \"/status\") {\n emit([\n \"Session status:\",\n ` session: ${statusSessionId ?? \"(none)\"}`,\n ` model: ${model ?? \"(unknown)\"}`,\n ` cwd: ${cwd || \"(unknown)\"}`,\n ` mode: ${permissionMode ?? \"default\"}`,\n ` busy: ${busy || hasActiveRun(clientState, sessionId) ? \"yes\" : \"no\"}`,\n ].join(\"\\n\"));\n return \"handled\";\n }\n\n if (slash?.name === \"/config\") {\n const args = slash.args.trim();\n if (!args || args === \"show\") {\n await readPresentation(`config:${cwd}`, \"Config\", async () => {\n const settings = await client.system.getSettings();\n return JSON.stringify(settings, null, 2);\n });\n return \"handled\";\n }\n const setMatch = args.match(/^set\\s+(\\S+)\\s+([\\s\\S]+)$/);\n if (!setMatch?.[1] || setMatch[2] === undefined) {\n emit(\"Usage: /config [show | set KEY VALUE]\");\n return \"handled\";\n }\n await client.system.patchSettings({ path: setMatch[1], value: setMatch[2].trim() });\n emit(`Set ${setMatch[1]} = ${setMatch[2].trim()}`);\n return \"handled\";\n }\n\n if (slash?.name === \"/provider\") {\n if (!slash.args) {\n await readPresentation(\"providers\", \"Provider\", async () => {\n const providers = await client.providers.listProviders();\n const lines = [\"Available providers:\", \"\"];\n for (const provider of providers) {\n const marker = provider.active ? \" (active)\" : \"\";\n const keyStatus = provider.local ? \"[local]\" : provider.hasKey ? \"[key]\" : \"[no key]\";\n lines.push(` ${provider.name.padEnd(14)} ${provider.displayName.padEnd(14)} ${keyStatus}${marker}`);\n }\n return lines.join(\"\\n\");\n });\n return \"handled\";\n }\n const settings = await client.system.patchSettings(\n slash.args === \"auto\"\n ? { provider: \"auto\" }\n : { provider: slash.args },\n );\n if (typeof settings.model === \"string\") {\n patchStatus({ model: settings.model });\n }\n emit(`Provider switched to: ${slash.args}`);\n return \"handled\";\n }\n\n if (slash?.name === \"/mcp\") {\n if (!sessionId) return \"handled\";\n await readPresentation(`mcp:${sessionId}`, \"MCP\", async () => {\n const servers = await client.system.getSessionMcp(sessionId);\n if (servers.length === 0) return \"No MCP servers connected.\";\n return [\n `MCP Servers (${servers.length}):`,\n \"\",\n ...servers.flatMap((server) => [\n ` ${server.name}: ${server.status}`,\n ...(server.command ? [` Command: ${server.command}`] : []),\n ` Tools: ${server.toolCount} Resources: ${server.resourceCount}`,\n ...(server.error ? [` Error: ${server.error}`] : []),\n \"\",\n ]),\n ].join(\"\\n\");\n });\n return \"handled\";\n }\n\n if (slash?.name === \"/jobs\") {\n if (!sessionId) return \"handled\";\n const args = slash.args.trim();\n const [sub, id, ...extra] = args.split(/\\s+/).filter(Boolean);\n if ((!sub || sub === \"list\") && !id) {\n await readPresentation(`jobs:${sessionId}`, \"Jobs\", async () => {\n const jobs = await client.jobs.list({\n sessionId,\n includeFinished: true,\n limit: 100,\n });\n if (jobs.length === 0) return \"No Jobs.\";\n return [\n `Jobs (${jobs.length}):`,\n \"\",\n ...jobs.map((job) => ` ${job.id} [${job.status}] ${job.kind}: ${job.label}`),\n ].join(\"\\n\");\n });\n return \"handled\";\n }\n if (sub === \"show\" && id && extra.length === 0) {\n await readPresentation(`job:${sessionId}:${id}`, \"Jobs\", async () => {\n const result = await client.jobs.read(id, { sessionId });\n return formatJobReadResult(result);\n });\n return \"handled\";\n }\n if (sub === \"cancel\" && id && extra.length === 0) {\n const snapshot = await client.jobs.cancel(id, {\n sessionId,\n reason: \"Cancelled from slash command\",\n });\n emit(`Job ${snapshot.id} status: ${snapshot.status}.`);\n return \"handled\";\n }\n emit(\"Usage: /jobs [list | show ID | cancel ID]\");\n return \"handled\";\n }\n\n if (slash?.name === \"/background\") {\n const command = slash.args.trim();\n if (!command) {\n emit(\"Usage: /background <command>\");\n return \"handled\";\n }\n if (!sessionId) return \"handled\";\n const result = await client.jobs.createBackgroundShell({ sessionId, command });\n emit(`Background shell started: ${result.jobId}. Use /jobs to inspect it.`);\n return \"handled\";\n }\n\n if (slash?.name === \"/memory\") {\n const args = slash.args.trim();\n const [sub, ...rest] = args.split(/\\s+/).filter(Boolean);\n if (!sub || sub === \"list\") {\n await readPresentation(`memory:${cwd}:list`, \"Memory\", async () => {\n const listed = await client.system.listMemory({ cwd });\n if (listed.entries.length === 0) return `Memory directory: ${listed.directory}\\nNo entries found.`;\n return [\n `Memory entries (${listed.entries.length}):`,\n \"\",\n ...listed.entries.map((entry) => {\n const tags = entry.tags?.length ? ` [${entry.tags.join(\", \")}]` : \"\";\n const preview = entry.content.length > 80\n ? `${entry.content.slice(0, 80)}...`\n : entry.content;\n return ` ${entry.id}${tags}: ${preview}`;\n }),\n ].join(\"\\n\");\n });\n return \"handled\";\n }\n if (sub === \"show\" && rest[0]) {\n const memoryId = rest[0];\n await readPresentation(`memory:${cwd}:show:${memoryId}`, \"Memory\", async () => {\n const entry = await client.system.getMemory(memoryId, { cwd });\n return [\n `ID: ${entry.id}`,\n `Created: ${new Date(entry.createdAt).toISOString()}`,\n `Updated: ${new Date(entry.updatedAt).toISOString()}`,\n `Tags: ${entry.tags?.join(\", \") ?? \"(none)\"}`,\n \"\",\n entry.content,\n ].join(\"\\n\");\n });\n return \"handled\";\n }\n if (sub === \"add\") {\n const content = rest.join(\" \").trim();\n if (!content) {\n emit(\"Usage: /memory add <content>\");\n return \"handled\";\n }\n const entry = await client.system.addMemory({ cwd, content });\n emit(`Memory added: ${entry.id}`);\n return \"handled\";\n }\n if (sub === \"remove\" && rest[0]) {\n await client.system.removeMemory(rest[0], { cwd });\n emit(`Memory removed: ${rest[0]}`);\n return \"handled\";\n }\n emit(\"Usage: /memory [list | show ID | add CONTENT | remove ID]\");\n return \"handled\";\n }\n\n if (slash?.name === \"/auth\") {\n const args = slash.args.trim();\n const [sub, provider, apiKey] = args.split(/\\s+/).filter(Boolean);\n if (!sub || sub === \"status\") {\n await readPresentation(\"auth:status\", \"Auth\", async () => {\n const auth = await client.auth.getStatus();\n const lines = [\"Credential status:\", \"\", \" Auth sources:\"];\n lines.push(\n ` codex_subscription: ${auth.codex.configured ? \"ready\" : auth.codex.state} (${auth.codex.source})`,\n );\n if (auth.storedProviders.length > 0) {\n lines.push(\"\", \" Stored credentials:\");\n for (const name of auth.storedProviders) lines.push(` ${name}: configured`);\n }\n if (auth.envProviders.length > 0) {\n lines.push(\" Environment variables:\");\n for (const env of auth.envProviders) lines.push(` ${env.name}: ${env.envKey}`);\n }\n if (auth.storedProviders.length === 0 && auth.envProviders.length === 0) {\n lines.push(\"\", \" No credentials configured.\");\n lines.push(\" Use /auth login <provider> <api-key> to store an API key.\");\n lines.push(\" Use /auth login codex to use a Codex subscription.\");\n }\n return lines.join(\"\\n\");\n });\n return \"handled\";\n }\n if (sub === \"login\") {\n if (!provider) {\n emit(\"Usage: /auth login <provider> <api-key> or /auth login codex\");\n return \"handled\";\n }\n const result = await client.auth.login({ provider, apiKey });\n emit(result.message);\n return \"handled\";\n }\n if (sub === \"logout\") {\n if (!provider) {\n emit(\"Usage: /auth logout <provider>\");\n return \"handled\";\n }\n const result = await client.auth.logout({ provider });\n emit(result.message);\n return \"handled\";\n }\n emit(\"Unknown subcommand. Use login, logout, or status.\");\n return \"handled\";\n }\n\n if (slash?.name === \"/context\") {\n const action = slash.args.trim().split(/\\s+/).filter(Boolean)[0] ?? \"preview\";\n if (action === \"status\") {\n await readPresentation(`context:${cwd}:status`, \"Context\", async () => await client.system.getContextStatus({ cwd }));\n return \"handled\";\n }\n if (action === \"usage\") {\n await readPresentation(\n `context:${cwd}:usage:${sessionId ?? \"none\"}`,\n \"Context\",\n async () => {\n const result = await client.system.getContextUsage({\n cwd,\n ...(sessionId ? { sessionId } : {}),\n });\n return result.report;\n },\n );\n return \"handled\";\n }\n if (action !== \"preview\") {\n emit(\"Usage: /context [preview|status|usage]\");\n return \"handled\";\n }\n await readPresentation(`context:${cwd}`, \"Context\", async () => await client.system.getContextPreview({ cwd }));\n return \"handled\";\n }\n\n if (slash?.name === \"/stats\") {\n if (!sessionId) return \"handled\";\n const bucket = clientState.buckets[sessionId];\n const messageCount = bucket?.messages.length ?? 0;\n const text = (bucket?.messages ?? [])\n .flatMap((message) => bucket?.partsByMessageId[message.id] ?? [])\n .map((part) => part.text ?? \"\")\n .join(\" \");\n const estimatedTokens = Math.max(1, Math.ceil(text.length / 4));\n const [memory, jobsResult, settings] = await Promise.all([\n client.system.listMemory({ cwd }).catch(() => ({ entries: [] as Array<{ id: string }> })),\n client.jobs.list({ sessionId, includeFinished: true, limit: 100 })\n .then((jobs) => ({ jobs }))\n .catch((error: unknown) => ({\n error: error instanceof Error ? error.message : String(error),\n })),\n client.system.getSettings().catch(() => ({} as Record<string, unknown>)),\n ]);\n const jobsSummary = \"jobs\" in jobsResult\n ? String(jobsResult.jobs.length)\n : `unavailable (${jobsResult.error})`;\n emit([\n \"Session stats:\",\n `- messages: ${messageCount}`,\n `- estimated_tokens: ${estimatedTokens}`,\n `- memory_entries: ${memory.entries.length}`,\n `- jobs: ${jobsSummary}`,\n `- output_style: ${typeof settings.outputStyle === \"string\" ? settings.outputStyle : \"default\"}`,\n ].join(\"\\n\"));\n return \"handled\";\n }\n\n if (slash?.name === \"/agents\") {\n if (!sessionId) return \"handled\";\n const agents = await client.jobs.list({\n sessionId,\n kinds: [\"agent\"],\n includeFinished: true,\n limit: 100,\n });\n if (agents.length === 0) {\n emit(\"No Agent Jobs.\");\n return \"handled\";\n }\n emit(\n [\n `Agent Jobs (${agents.length}):`,\n \"\",\n ...agents.map((job) => ` ${job.id} [${job.status}] ${job.label}`),\n ].join(\"\\n\"),\n );\n return \"handled\";\n }\n\n if (slash?.name === \"/rewind\") {\n if (!sessionId) return \"handled\";\n const raw = slash.args.trim().split(/\\s+/).filter(Boolean)[0] ?? \"1\";\n const count = Number.parseInt(raw, 10);\n if (!Number.isInteger(count) || count < 1) {\n emit(\"Count must be a positive integer\");\n return \"handled\";\n }\n const result = await client.sessions.rewind(sessionId, { count });\n emit(`Rewound ${result.turns} turn(s), removed ${result.removed} message(s).`);\n return \"handled\";\n }\n\n if (slash?.name === \"/compact\") {\n if (!sessionId) return \"handled\";\n const result = await client.sessions.compact(sessionId);\n emit(`Conversation compacted (${result.messageCount} messages retained).`);\n return \"handled\";\n }\n\n if (slash?.name === \"/remember\") {\n if (!sessionId) return \"handled\";\n const result = await client.sessions.remember(sessionId);\n if (result.skipped) {\n emit(`未写入记忆:${result.reason ?? \"skipped\"}`);\n return \"handled\";\n }\n emit(`已写入 ${result.writtenIds.length} 条记忆:${result.titles.join(\"、\")}`);\n return \"handled\";\n }\n\n if (slash?.name === \"/dream\") {\n const preview = slash.args.includes(\"--preview\");\n const result = await client.system.startDream({\n cwd,\n ...(sessionId ? { sessionId } : {}),\n preview,\n });\n emit(`Dream started as Job ${result.taskId}. Use /jobs to inspect it.`);\n return \"handled\";\n }\n\n if (slash?.name === \"/profile\") {\n const action = slash.args.trim().split(/\\s+/).filter(Boolean)[0] ?? \"status\";\n if (action === \"status\" || action === \"show\") {\n emit(await client.system.getProfileStatus());\n return \"handled\";\n }\n if (action === \"init\") {\n emit(await client.system.initProfile());\n return \"handled\";\n }\n emit(\"Usage: /profile [status|init]\");\n return \"handled\";\n }\n\n if (slash?.name === \"/doctor\") {\n const [settings, auth, memory, mcp, jobsResult] = await Promise.all([\n client.system.getSettings().catch(() => ({}) as Record<string, unknown>),\n client.auth.getStatus().catch(() => null),\n client.system.listMemory({ cwd }).catch(() => ({ directory: \"(unavailable)\", entries: [] as Array<{ id: string }> })),\n sessionId ? client.system.getSessionMcp(sessionId).catch(() => []) : Promise.resolve([]),\n sessionId\n ? client.jobs.list({ sessionId, includeFinished: true, limit: 100 })\n .then((jobs) => ({ jobs }))\n .catch((error: unknown) => ({\n error: error instanceof Error ? error.message : String(error),\n }))\n : Promise.resolve({ jobs: [] as JobSnapshot[] }),\n ]);\n const jobsSummary = \"jobs\" in jobsResult\n ? String(jobsResult.jobs.length)\n : `unavailable (${jobsResult.error})`;\n const bucket = sessionId ? clientState.buckets[sessionId] : undefined;\n const diagnostics = await host.getRuntimeDiagnostics?.();\n const runtime = diagnostics?.runtime ?? \"(not provided by this host)\";\n const platform = [diagnostics?.platform, diagnostics?.architecture]\n .filter(Boolean)\n .join(\" \") || \"(not provided by this host)\";\n const lines = [\n \"OpenHarness Environment Diagnostic\",\n \"═\".repeat(40),\n \"\",\n `CWD: ${cwd}`,\n `Runtime: ${runtime}`,\n `Platform: ${platform}`,\n `Model: ${model ?? String(settings.model ?? \"(unknown)\")}`,\n `API Format: ${String(settings.apiFormat ?? \"(default)\")}`,\n `Base URL: ${String(settings.baseUrl ?? \"(default)\")}`,\n `Permission: ${typeof settings.permission === \"object\" && settings.permission && \"mode\" in settings.permission\n ? String((settings.permission as { mode?: string }).mode ?? \"default\")\n : \"default\"}`,\n `Max Turns: ${String(settings.maxTurns ?? \"(default)\")}`,\n `Effort: ${String(settings.effort ?? \"medium\")}`,\n `Passes: ${String(settings.passes ?? 1)}`,\n `Fast Mode: ${settings.fastMode ? \"on\" : \"off\"}`,\n `Theme: ${String(settings.theme ?? \"default\")}`,\n \"\",\n `Messages: ${bucket?.messages.length ?? 0}`,\n `Jobs: ${jobsSummary}`,\n \"\",\n `Memory dir: ${memory.directory}`,\n `Memory entries: ${memory.entries.length}`,\n ];\n if (auth) {\n lines.push(\n \"\",\n `Codex auth: ${auth.codex.configured ? \"ready\" : auth.codex.state} (${auth.codex.source})`,\n `Stored keys: ${auth.storedProviders.length ? auth.storedProviders.join(\", \") : \"(none)\"}`,\n );\n }\n lines.push(\"\", \"MCP Servers:\");\n if (mcp.length === 0) lines.push(\" (none)\");\n else {\n for (const server of mcp) {\n lines.push(` ${server.name}: ${server.status} (${server.toolCount} tools)`);\n }\n }\n emit(lines.join(\"\\n\"));\n return \"handled\";\n }\n\n if (slash?.name === \"/effort\") {\n const level = slash.args.trim().split(/\\s+/).filter(Boolean)[0];\n if (!level) {\n const settings = await client.system.getSettings();\n emit(`Current effort: ${String(settings.effort ?? \"medium\")}`);\n return \"handled\";\n }\n if (level !== \"low\" && level !== \"medium\" && level !== \"high\") {\n emit(\"Invalid effort. Use: low, medium, or high\");\n return \"handled\";\n }\n await client.system.patchSettings({ effort: level });\n emit(`Effort set to: ${level}`);\n return \"handled\";\n }\n\n if (slash?.name === \"/fast\") {\n const arg = slash.args.trim().split(/\\s+/).filter(Boolean)[0];\n const settings = await client.system.getSettings();\n const current = settings.fastMode === true;\n let next: boolean;\n if (arg === \"on\") next = true;\n else if (arg === \"off\") next = false;\n else next = !current;\n await client.system.patchSettings({ fastMode: next });\n emit(`Fast mode: ${next ? \"ON\" : \"OFF\"}`);\n return \"handled\";\n }\n\n if (slash?.name === \"/turns\") {\n const value = slash.args.trim().split(/\\s+/).filter(Boolean)[0];\n if (!value) {\n const settings = await client.system.getSettings();\n emit(`Current max turns: ${String(settings.maxTurns ?? \"(default)\")}`);\n return \"handled\";\n }\n const n = Number.parseInt(value, 10);\n if (!Number.isFinite(n) || n < 1 || n > 512) {\n emit(\"Value must be between 1 and 512\");\n return \"handled\";\n }\n await client.system.patchSettings({ maxTurns: n });\n emit(`Max turns set to: ${n}`);\n return \"handled\";\n }\n\n if (slash?.name === \"/usage\" || slash?.name === \"/cost\") {\n if (!sessionId) return \"handled\";\n if (slash.name === \"/cost\") {\n await readPresentation(`cost:${sessionId}`, \"Cost\", async () => {\n const usage = await client.sessions.getUsage(sessionId);\n return [\n \"Cost estimate:\",\n ` Model: ${usage.model}`,\n ` Input tokens: ${usage.inputTokens.toLocaleString()}`,\n ` Output tokens: ${usage.outputTokens.toLocaleString()}`,\n ` Est. cost: ${usage.estimatedCost}`,\n ...(usage.cacheCreationTokens\n ? [` Cache write: ${usage.cacheCreationTokens.toLocaleString()}`]\n : []),\n ...(usage.cacheReadTokens\n ? [` Cache read: ${usage.cacheReadTokens.toLocaleString()}`]\n : []),\n ].join(\"\\n\");\n });\n return \"handled\";\n }\n await readPresentation(`usage:${sessionId}`, \"Usage\", async () => {\n const usage = await client.sessions.getUsage(sessionId);\n return [\n \"Token usage:\",\n ` Input: ${usage.inputTokens.toLocaleString()}`,\n ` Output: ${usage.outputTokens.toLocaleString()}`,\n ` Total: ${(usage.inputTokens + usage.outputTokens).toLocaleString()}`,\n ` Cache write: ${usage.cacheCreationTokens.toLocaleString()}`,\n ` Cache read: ${usage.cacheReadTokens.toLocaleString()}`,\n ` Messages: ${usage.messageCount}`,\n ` Est. cost: ${usage.estimatedCost}`,\n ].join(\"\\n\");\n });\n return \"handled\";\n }\n\n if (slash?.name === \"/export\") {\n if (!sessionId) return \"handled\";\n const args = slash.args.trim().split(/\\s+/).filter(Boolean);\n const forceJson = args.includes(\"--json\");\n const filename = args.find((arg) => !arg.startsWith(\"--\"));\n const result = await client.sessions.export(sessionId, {\n ...(filename ? { filename } : {}),\n json: forceJson,\n });\n emit(`Exported ${result.format === \"json\" ? \"JSON\" : \"Markdown\"} to: ${result.filepath}`);\n return \"handled\";\n }\n\n if (slash?.name === \"/output-style\") {\n const args = slash.args.trim();\n const styles = await client.system.listOutputStyles();\n const settings = await client.system.getSettings();\n const current = typeof settings.outputStyle === \"string\" ? settings.outputStyle : \"default\";\n const firstSpace = args.search(/\\s/);\n const first = firstSpace === -1 ? args : args.slice(0, firstSpace);\n const rest = firstSpace === -1 ? \"\" : args.slice(firstSpace + 1).trim();\n\n if (!first || first === \"show\") {\n emit(`Output style: ${current}`);\n return \"handled\";\n }\n if (first === \"list\") {\n emit(\n styles\n .map((style) => `${style.name === current ? \"* \" : \" \"}${style.name} [${style.source}]`)\n .join(\"\\n\"),\n );\n return \"handled\";\n }\n\n const styleName = first === \"set\" && rest ? rest : rest === \"\" ? first : undefined;\n if (!styleName) {\n emit(\"Usage: /output-style [show|list|NAME]\");\n return \"handled\";\n }\n if (!styles.some((style) => style.name === styleName)) {\n emit(`Unknown output style: ${styleName}`);\n return \"handled\";\n }\n await client.system.patchSettings({ outputStyle: styleName });\n emit(`Output style set to ${styleName}`);\n return \"handled\";\n }\n\n if (slash?.name === \"/init\") {\n emit(await client.projects.init({ cwd }));\n return \"handled\";\n }\n\n if (slash?.name === \"/plugin\") {\n const args = slash.args.trim().split(/\\s+/).filter(Boolean);\n const sub = args[0];\n if (!sub || sub === \"list\") {\n await readPresentation(`plugins:${cwd}`, \"Plugin\", async () => {\n const listed = await client.plugins.list({ cwd });\n if (listed.plugins.length === 0) return \"No plugins discovered.\";\n return [\n ...listed.plugins.map(\n (plugin) =>\n `- ${plugin.identity.id} (${plugin.identity.name}@${plugin.identity.version}) ` +\n `[${plugin.origin}/${plugin.scope}/${plugin.enabled ? \"enabled\" : \"disabled\"}/${plugin.activation}] ` +\n Object.entries(plugin.inventory).map(([kind, count]) => `${kind}=${count}`).join(\" \") +\n plugin.diagnostics.map((item) => `\\n ! ${item.code}: ${item.message}`).join(\"\"),\n ),\n ...listed.warnings.map((warning) => `! ${warning}`),\n ].join(\"\\n\");\n });\n return \"handled\";\n }\n if ((sub === \"enable\" || sub === \"disable\") && args[1]) {\n const result = sub === \"enable\"\n ? await client.plugins.enable(args[1], { cwd })\n : await client.plugins.disable(args[1], { cwd });\n emit(result.message);\n return \"handled\";\n }\n emit(\"Usage: /plugin [list|enable ID|disable ID]\");\n return \"handled\";\n }\n\n if (slash?.name === \"/reload-plugins\") {\n const result = await client.plugins.reload({ cwd });\n emit(formatPluginReload(result));\n return \"handled\";\n }\n\n if (slash?.name === \"/hooks\") {\n await readPresentation(`hooks:${cwd}:${sessionId ?? \"global\"}`, \"Hooks\", async () => {\n const hooks = await client.development.listHooks({\n cwd,\n ...(sessionId ? { sessionId } : {}),\n });\n if (hooks.length === 0) return \"No hooks configured.\";\n const settingsHooks = hooks.filter((hook) => hook.origin === \"settings\");\n const runtimeHooks = hooks.filter((hook) => hook.origin === \"runtime\");\n const lines = [\"Hooks:\", \"\"];\n if (runtimeHooks.length > 0) {\n lines.push(\"Runtime hooks:\");\n for (const hook of runtimeHooks) {\n lines.push(` ${hook.id}: ${hook.event} (${hook.type}) [${hook.enabled ? \"enabled\" : \"disabled\"}]`);\n }\n lines.push(\"\");\n }\n if (settingsHooks.length > 0) {\n lines.push(\"Settings hooks:\");\n for (const hook of settingsHooks) {\n lines.push(` ${hook.id}: ${hook.event} (${hook.type}) [${hook.enabled ? \"enabled\" : \"disabled\"}]`);\n }\n }\n return lines.join(\"\\n\");\n });\n return \"handled\";\n }\n\n if (slash?.name === \"/subagents\") {\n const agents = await client.development.listAgentPersonas();\n emit(\n [\n `Available subagent personas (${agents.length}):`,\n \"\",\n ...agents.flatMap((agent) => [\n `- ${agent.name} [${agent.source ?? \"builtin\"}]${agent.model ? ` model=${agent.model}` : \"\"}`,\n ` ${agent.description.split(\"\\n\")[0]?.slice(0, 100) ?? \"\"}`,\n ]),\n \"\",\n '用法: Agent 工具 subagentType=\"<name>\" 派发;/agents 查看 Agent Jobs。',\n ].join(\"\\n\"),\n );\n return \"handled\";\n }\n\n if (slash?.name === \"/diff\") {\n const full = slash.args.trim().split(/\\s+/).includes(\"full\");\n await readPresentation(`git:diff:${cwd}:${full ? \"full\" : \"summary\"}`, \"Diff\", async () =>\n await client.development.getGitDiff({ cwd, full }));\n return \"handled\";\n }\n\n if (slash?.name === \"/branch\") {\n const list = slash.args.trim().split(/\\s+/).includes(\"list\");\n await readPresentation(`git:branch:${cwd}:${list ? \"list\" : \"current\"}`, \"Branch\", async () =>\n await client.development.getGitBranch({ cwd, list }));\n return \"handled\";\n }\n\n if (slash?.name === \"/commit\") {\n const message = slash.args.trim();\n if (!message) {\n await readPresentation(`git:status:${cwd}`, \"Commit\", async () => await client.development.getGitStatus({ cwd }));\n return \"handled\";\n }\n emit(await client.development.gitCommit({ cwd, message }));\n return \"handled\";\n }\n\n if (slash && LOCAL_COMMAND_NAMES.has(slash.name)) {\n // UI-only commands are handled by the host UI layer; ignore accidental falls-through.\n return \"local_ui\";\n }\n\n return \"unhandled\";\n}\n",
23
43
  "export * from \"./session-commands.js\";\n",
24
- "/**\n * @openharness/client 公共导出。\n *\n * 面向 TUI / Web / Desktop:typed HTTP API、SSE 解析、事件 reducer、replay+live 同步。\n * 客户端只做展示与控制,不拥有 agent runtime。\n */\n\nexport {\n createPromptRequestId,\n normalizeDaemonBaseUrl,\n OpenHarnessApiError,\n IncompatibleProtocolError,\n OpenHarnessClient,\n streamServerSentEvents,\n} from \"./transport/index.js\";\nexport { parseCreateSessionGoalInput, parseUpdateSessionGoalInput, parseGoalActionInput } from \"@openharness/protocol\";\nexport type {\n AgentEnvironmentCapabilities,\n AttachmentAssetRecord,\n ClientProtocolSupport,\n ProtocolCompatibility,\n ServerCapabilities,\n} from \"@openharness/protocol\";\nexport {\n checkProtocolCompatibility,\n supportsFeature,\n} from \"@openharness/protocol\";\nexport {\n applyEvent,\n applyEvents,\n applySessionSnapshot,\n createInitialClientState,\n hydrateState,\n selectSessionMessagesWithParts,\n syncEvents,\n UnsupportedSessionEventSchemaVersionError,\n} from \"./state/index.js\";\nexport {\n LOCAL_COMMAND_DETAILS,\n LOCAL_COMMAND_NAMES,\n dispatchSessionCommand,\n hasActiveRun,\n mergeCommandDetails,\n parseSlashLine,\n resolveSessionCwd,\n} from \"./commands/index.js\";\nexport {\n patchSessionRuntimeMetadata,\n readRuntimeMetadata,\n readSessionRuntimeConfig,\n} from \"@openharness/protocol\";\nexport type {\n SessionRuntimeConfig,\n SessionRuntimeConfigPatch,\n} from \"@openharness/protocol\";\nexport type {\n PresentationReadRequest,\n SessionCommandHost,\n SessionCommandOutcome,\n SlashLine,\n} from \"./commands/index.js\";\nexport type {\n AdmitClientPromptInput,\n AgentPersonaInfo,\n AttachmentStorageGcResult,\n AttachmentStorageIssue,\n AttachmentStorageRepairResult,\n AttachmentStorageReport,\n AuthStatus,\n CommandCatalogEntry,\n CommandKind,\n CommandSelection,\n CommandSource,\n CompactSessionResponse,\n CancelQueuedClientPromptInput,\n CancelQueuedPromptResponse,\n CreateBackgroundShellInput,\n CreateBackgroundShellResult,\n CreateScheduledTaskInput,\n AdmitPromptAttachmentInput,\n CreateClientSessionInput,\n EditLatestClientPromptInput,\n EventSyncOptions,\n ForkClientSessionInput,\n HookInfo,\n ReloadPluginsResponse,\n RewindSessionResponse,\n InputDelivery,\n InterruptSessionResponse,\n ListClientMessagePartsOptions,\n ListCommandsOptions,\n ListEventsOptions,\n ListMessagesOptions,\n ListPermissionsOptions,\n ListSessionsOptions,\n ListProjectsOptions,\n ProjectRecord,\n McpServerStatus,\n MemoryEntryRecord,\n MemoryListResponse,\n ModelInfo,\n ModelProviderInfo,\n OpenHarnessClientOptions,\n OpenHarnessClientState,\n OpenHarnessServerHealth,\n OutputStyleInfo,\n PermissionRequestRecord,\n PermissionStatus,\n PluginInfo,\n SkillInfo,\n SkillProject,\n SkillSnapshot,\n SkillSource,\n PromoteQueuedClientPromptInput,\n PromoteQueuedPromptResponse,\n PromptResponse,\n ProviderInfo,\n CustomProviderInput,\n RememberSessionResponse,\n ReplyPermissionInput,\n ScheduledRunRecord,\n ScheduledTaskRecord,\n ScheduledTaskStatusSummary,\n SessionBucket,\n UpdateScheduledTaskInput,\n SessionEventRecord,\n SessionAttachmentMessagePartRecord,\n SessionInputAttachmentRecord,\n SessionExportResponse,\n SessionInputRecord,\n SessionMessagePartRecord,\n SessionMessageRecord,\n SessionRecord,\n SessionRunRecord,\n SessionRunAttemptRecord,\n SessionExecutionRecord,\n SessionStateSnapshot,\n SessionTransformationMessagePartRecord,\n SessionUserInputItem,\n SessionGoal,\n CreateSessionGoalInput,\n UpdateSessionGoalInput,\n GoalActionInput,\n SessionUsageResponse,\n StartDreamResponse,\n SyncEventUpdate,\n UpdateClientSessionInput,\n UploadAttachmentInput,\n DownloadAttachmentOptions,\n} from \"./types/index.js\";\nexport type { SessionMessageWithParts } from \"./state/index.js\";\nexport type {\n TerminalCreateRequest,\n TerminalEvent,\n TerminalReadRequest,\n TerminalReadResult,\n TerminalResizeRequest,\n TerminalRuntime,\n TerminalSessionInfo,\n TerminalSessionStatus,\n TerminalSignal,\n TerminalSource,\n TerminalWriteRequest,\n JobCapabilities,\n JobKind,\n JobReadResult,\n JobSnapshot,\n JobStatus,\n JobWaitResult,\n DurableChannelMessageInput,\n DurableChannelMessageResult,\n ExternalConversationRecord,\n ChannelDeliveryRecord,\n ChannelDeliveryStatus,\n ChannelStatusSnapshot,\n RecordChannelDeliveryInput,\n} from \"@openharness/protocol\";\n",
44
+ "/**\n * @openharness/client 公共导出。\n *\n * 面向 TUI / Web / Desktop:typed HTTP API、SSE 解析、事件 reducer、replay+live 同步。\n * 客户端只做展示与控制,不拥有 agent runtime。\n */\n\nexport {\n createPromptRequestId,\n normalizeDaemonBaseUrl,\n OpenHarnessApiError,\n IncompatibleProtocolError,\n OpenHarnessClient,\n streamServerSentEvents,\n HttpTransport,\n SseTransport,\n} from \"./transport/index.js\";\nexport {\n ProtocolClient,\n} from \"./protocol/index.js\";\nexport {\n SystemResource,\n ProviderResource,\n AuthResource,\n ProjectResource,\n PluginResource,\n DevelopmentResource,\n SessionResource,\n AttachmentResource,\n PermissionResource,\n ScheduleResource,\n JobResource,\n TerminalResource,\n ChannelResource,\n EventResource,\n} from \"./resources/index.js\";\nexport { parseCreateSessionGoalInput, parseUpdateSessionGoalInput, parseGoalActionInput } from \"@openharness/protocol\";\nexport type {\n PluginCatalogEntry,\n AgentEnvironmentCapabilities,\n AttachmentAssetRecord,\n ClientProtocolSupport,\n ProtocolCompatibility,\n ServerCapabilities,\n} from \"@openharness/protocol\";\nexport {\n checkProtocolCompatibility,\n CURRENT_PROTOCOL_VERSION,\n supportsFeature,\n} from \"@openharness/protocol\";\nexport {\n applyEvent,\n applyEvents,\n applySessionSnapshot,\n createInitialClientState,\n hydrateState,\n selectFirstPendingPermission,\n selectSessionInputs,\n selectSessionMessagesWithParts,\n selectSessionOrderedMessages,\n selectSessionParts,\n selectSessionPermissions,\n selectSessionRuns,\n selectSessionTasks,\n SessionSyncController,\n syncEvents,\n UnsupportedSessionEventSchemaVersionError,\n} from \"./state/index.js\";\nexport type {\n SessionSyncControllerOptions,\n SyncConnectionStatus,\n} from \"./state/index.js\";\nexport {\n LOCAL_COMMAND_DETAILS,\n LOCAL_COMMAND_NAMES,\n dispatchSessionCommand,\n hasActiveRun,\n mergeCommandDetails,\n parseSlashLine,\n resolveSessionCwd,\n} from \"./commands/index.js\";\nexport {\n patchSessionRuntimeMetadata,\n readRuntimeMetadata,\n readSessionRuntimeConfig,\n} from \"@openharness/protocol\";\nexport type {\n SessionRuntimeConfig,\n SessionRuntimeConfigPatch,\n} from \"@openharness/protocol\";\nexport type {\n PresentationReadRequest,\n SessionCommandHost,\n SessionCommandOutcome,\n SlashLine,\n} from \"./commands/index.js\";\nexport type {\n AdmitClientPromptInput,\n AgentPersonaInfo,\n AttachmentStorageGcResult,\n AttachmentStorageIssue,\n AttachmentStorageRepairResult,\n AttachmentStorageReport,\n AuthStatus,\n CommandCatalogEntry,\n CommandKind,\n CommandSelection,\n CommandSource,\n CompactSessionResponse,\n CancelQueuedClientPromptInput,\n CancelQueuedPromptResponse,\n CreateBackgroundShellInput,\n CreateBackgroundShellResult,\n CreateScheduledTaskInput,\n AdmitPromptAttachmentInput,\n CreateClientSessionInput,\n EditLatestClientPromptInput,\n EventSyncOptions,\n ForkClientSessionInput,\n HookInfo,\n ReloadPluginsResponse,\n RewindSessionResponse,\n InputDelivery,\n InterruptSessionResponse,\n ListClientMessagePartsOptions,\n ListCommandsOptions,\n ListEventsOptions,\n ListMessagesOptions,\n ListPermissionsOptions,\n ListSessionsOptions,\n ListProjectsOptions,\n ProjectRecord,\n McpServerStatus,\n MemoryEntryRecord,\n MemoryListResponse,\n ModelInfo,\n ModelProviderInfo,\n OpenHarnessClientOptions,\n OpenHarnessClientState,\n OpenHarnessServerHealth,\n OutputStyleInfo,\n PermissionRequestRecord,\n PermissionStatus,\n PluginInfo,\n PluginRuntimeStatus,\n SkillInfo,\n SkillProject,\n SkillSnapshot,\n SkillSource,\n PromoteQueuedClientPromptInput,\n PromoteQueuedPromptResponse,\n PromptResponse,\n ProviderInfo,\n CustomProviderInput,\n ConnectCatalogProviderInput,\n UpdateCatalogProviderHeadersInput,\n RememberSessionResponse,\n ReplyPermissionInput,\n ScheduledRunRecord,\n ScheduledTaskRecord,\n ScheduledTaskStatusSummary,\n SessionBucket,\n UpdateScheduledTaskInput,\n SessionEventRecord,\n SessionAttachmentMessagePartRecord,\n SessionInputAttachmentRecord,\n SessionExportResponse,\n SessionInputRecord,\n SessionMessagePartRecord,\n SessionMessageRecord,\n SessionRecord,\n SessionRunRecord,\n SessionRunAttemptRecord,\n SessionExecutionRecord,\n SessionStateSnapshot,\n SessionTransformationMessagePartRecord,\n SessionUserInputItem,\n SessionGoal,\n CreateSessionGoalInput,\n UpdateSessionGoalInput,\n GoalActionInput,\n SessionUsageResponse,\n StartDreamResponse,\n SyncEventUpdate,\n UpdateClientSessionInput,\n UploadAttachmentInput,\n DownloadAttachmentOptions,\n} from \"./types/index.js\";\nexport type { SessionMessageWithParts } from \"./state/index.js\";\nexport type {\n TerminalCreateRequest,\n TerminalEvent,\n TerminalReadRequest,\n TerminalReadResult,\n TerminalResizeRequest,\n TerminalRuntime,\n TerminalSessionInfo,\n TerminalSessionStatus,\n TerminalSignal,\n TerminalSource,\n TerminalWriteRequest,\n JobCapabilities,\n JobKind,\n JobReadResult,\n JobSnapshot,\n JobStatus,\n JobWaitResult,\n DurableChannelMessageInput,\n DurableChannelMessageResult,\n ExternalConversationRecord,\n ChannelDeliveryRecord,\n ChannelDeliveryStatus,\n ChannelStatusSnapshot,\n RecordChannelDeliveryInput,\n} from \"@openharness/protocol\";\n",
25
45
  "import type { JobReadResult, JobSnapshot } from \"@openharness/client\";\n\nexport type JobRemoteState =\n | { status: \"idle\"; jobs: JobSnapshot[] }\n | { status: \"loading\"; jobs: JobSnapshot[] }\n | { status: \"ready\"; jobs: JobSnapshot[]; refreshedAt: number }\n | { status: \"error\"; jobs: JobSnapshot[]; error: string; refreshedAt?: number };\n\nexport type JobDetailRemoteState =\n | { status: \"idle\" }\n | { status: \"loading\"; jobId: string; previous?: JobReadResult }\n | { status: \"ready\"; jobId: string; result: JobReadResult; refreshedAt: number }\n | { status: \"error\"; jobId: string; error: string; previous?: JobReadResult };\n\nexport function beginJobList(previous: JobRemoteState): JobRemoteState {\n return { status: \"loading\", jobs: [...previous.jobs] };\n}\n\nexport function resolveJobList(\n jobs: JobSnapshot[],\n now: number,\n previous?: JobRemoteState,\n): JobRemoteState {\n const cachedById = new Map(previous?.jobs.map((job) => [job.id, job]) ?? []);\n return {\n status: \"ready\",\n jobs: jobs.map((snapshot) => preferMonotonicSnapshot(cachedById.get(snapshot.id), snapshot)),\n refreshedAt: now,\n };\n}\n\nexport function rejectJobList(previous: JobRemoteState, error: string): JobRemoteState {\n const refreshedAt = \"refreshedAt\" in previous ? previous.refreshedAt : undefined;\n return {\n status: \"error\",\n jobs: [...previous.jobs],\n error,\n ...(refreshedAt !== undefined ? { refreshedAt } : {}),\n };\n}\n\nexport function mergeJobSnapshot(\n state: JobRemoteState,\n snapshot: JobSnapshot,\n now: number,\n): JobRemoteState {\n const found = state.jobs.some((job) => job.id === snapshot.id);\n const jobs = found\n ? state.jobs.map((job) => job.id === snapshot.id ? preferMonotonicSnapshot(job, snapshot) : job)\n : [snapshot, ...state.jobs];\n return { status: \"ready\", jobs, refreshedAt: now };\n}\n\nfunction preferMonotonicSnapshot(\n cached: JobSnapshot | undefined,\n incoming: JobSnapshot,\n): JobSnapshot {\n if (!cached) return incoming;\n if (isTerminalStatus(cached.status) && !isTerminalStatus(incoming.status)) return cached;\n if (incoming.updatedAt < cached.updatedAt) return cached;\n return incoming;\n}\n\nfunction isTerminalStatus(status: JobSnapshot[\"status\"]): boolean {\n return status === \"completed\" || status === \"killed\" || status === \"failed\";\n}\n\nconst JOB_KINDS = [\"terminal\", \"shell\", \"agent\", \"dream\", \"workflow\"] as const;\nconst JOB_STATUSES = [\"running\", \"stopping\", \"completed\", \"killed\", \"failed\"] as const;\n\ntype UnknownRecord = Record<string, unknown>;\n\nfunction isRecord(value: unknown): value is UnknownRecord {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isJobSnapshot(value: unknown, ownerSession: string): value is JobSnapshot {\n if (!isRecord(value)) {\n return false;\n }\n\n const capabilities = value.capabilities;\n return (\n typeof value.id === \"string\" &&\n value.id.trim().length > 0 &&\n value.ownerSession === ownerSession &&\n typeof value.label === \"string\" &&\n typeof value.cwd === \"string\" &&\n typeof value.kind === \"string\" &&\n JOB_KINDS.includes(value.kind as (typeof JOB_KINDS)[number]) &&\n typeof value.status === \"string\" &&\n JOB_STATUSES.includes(value.status as (typeof JOB_STATUSES)[number]) &&\n Number.isFinite(value.startedAt) &&\n Number.isFinite(value.updatedAt) &&\n (value.finishedAt === undefined || Number.isFinite(value.finishedAt)) &&\n (value.detail === undefined || typeof value.detail === \"string\") &&\n (value.metadata === undefined || isRecord(value.metadata)) &&\n isRecord(capabilities) &&\n typeof capabilities.read === \"boolean\" &&\n typeof capabilities.wait === \"boolean\" &&\n typeof capabilities.send === \"boolean\" &&\n typeof capabilities.cancel === \"boolean\"\n );\n}\n\nexport function validateJobSnapshot(\n value: unknown,\n ownerSession: string,\n expectedJobId?: string,\n): { snapshot?: JobSnapshot; error?: string } {\n if (!isRecord(value)) {\n return { error: \"Job snapshot has invalid fields.\" };\n }\n if (typeof value.id === \"string\" && expectedJobId !== undefined && value.id !== expectedJobId) {\n return { error: `Job snapshot id \"${value.id}\" does not match requested Job \"${expectedJobId}\".` };\n }\n if (typeof value.ownerSession === \"string\" && value.ownerSession !== ownerSession) {\n return { error: `Job snapshot ownerSession \"${value.ownerSession}\" does not match active session \"${ownerSession}\".` };\n }\n if (!isJobSnapshot(value, ownerSession)) {\n return { error: \"Job snapshot has invalid fields.\" };\n }\n return { snapshot: value };\n}\n\nexport function validateJobReadResult(\n value: unknown,\n ownerSession: string,\n expectedJobId: string,\n): { result?: JobReadResult; error?: string } {\n if (\n !isRecord(value) ||\n typeof value.text !== \"string\" ||\n !Number.isFinite(value.cursor) ||\n typeof value.truncated !== \"boolean\" ||\n (value.details !== undefined && !isRecord(value.details))\n ) {\n return { error: `Job read response for \"${expectedJobId}\" has invalid fields.` };\n }\n const snapshotValidation = validateJobSnapshot(value.snapshot, ownerSession, expectedJobId);\n if (!snapshotValidation.snapshot) {\n return { error: snapshotValidation.error ?? \"Job snapshot has invalid fields.\" };\n }\n return { result: value as unknown as JobReadResult };\n}\n\nexport function validateJobSnapshots(\n value: unknown,\n ownerSession: string,\n): { jobs: JobSnapshot[]; error?: string } {\n if (!Array.isArray(value)) {\n return { jobs: [], error: \"Jobs response must be an array.\" };\n }\n\n const jobs = value.filter((entry): entry is JobSnapshot => isJobSnapshot(entry, ownerSession));\n const invalidCount = value.length - jobs.length;\n if (invalidCount === 0) {\n return { jobs };\n }\n\n const noun = invalidCount === 1 ? \"snapshot\" : \"snapshots\";\n return { jobs, error: `Ignored ${invalidCount} invalid Job ${noun}.` };\n}\n",
26
46
  "import {\n selectSessionMessagesWithParts,\n type SessionBucket,\n type SessionMessagePartRecord,\n type SessionMessageRecord,\n} from \"@openharness/client\";\n\nimport type { TranscriptItem } from \"../types\";\n\nexport type TranscriptView = { items: TranscriptItem[]; assistantBuffer: string };\n\nfunction contentToText(content: unknown): string {\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((block) => {\n if (block && typeof block === \"object\" && \"text\" in block) return String(block.text ?? \"\");\n return JSON.stringify(block);\n })\n .join(\"\");\n }\n if (content == null) return \"\";\n return JSON.stringify(content);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction textFromParts(parts: SessionMessagePartRecord[]): string {\n return parts\n .filter((part) => part.type === \"text\" || part.type === \"reasoning\")\n .map((part) => part.text ?? \"\")\n .join(\"\");\n}\n\nfunction messageToTranscriptItems(\n message: SessionMessageRecord,\n parts: SessionMessagePartRecord[],\n inputText?: string,\n): TranscriptItem[] {\n if (message.role === \"user\") {\n return [{\n id: message.inputId ? `input:${message.inputId}` : message.id,\n role: \"user\",\n text: textFromParts(parts) || inputText || \"\",\n }];\n }\n if (message.role === \"system\") return [{ id: message.id, role: \"system\", text: textFromParts(parts) }];\n\n const items: TranscriptItem[] = [];\n for (const part of parts) {\n if (part.type === \"text\" || part.type === \"reasoning\") {\n if (part.text) items.push({\n id: `${message.id}:${part.id}`,\n role: \"assistant\",\n text: part.text,\n streaming: part.status === \"pending\" || part.status === \"running\",\n });\n continue;\n }\n if (part.type === \"tool\") {\n const toolName = part.toolName ?? \"tool\";\n items.push({\n id: `${message.id}:${part.id}:tool`,\n role: \"tool\",\n text: toolName,\n tool_name: toolName,\n tool_input: part.input,\n });\n if (part.output !== undefined) {\n const output = isRecord(part.output) ? part.output : {};\n items.push({\n id: `${message.id}:${part.id}:result`,\n role: \"tool_result\",\n text: contentToText(output.content),\n tool_name: toolName,\n is_error: part.isError === true,\n });\n }\n continue;\n }\n if (part.type === \"tool_result\") {\n items.push({\n id: `${message.id}:${part.id}:result`,\n role: \"tool_result\",\n text: contentToText(part.output ?? part.text ?? \"\"),\n tool_name: part.toolName,\n is_error: part.isError === true,\n });\n continue;\n }\n if (part.type === \"error\") {\n items.push({ id: `${message.id}:${part.id}`, role: \"system\", text: part.text ?? \"error\" });\n continue;\n }\n if (part.type === \"log\") {\n items.push({ id: `${message.id}:${part.id}`, role: \"log\", text: part.text ?? \"\" });\n }\n }\n return items;\n}\n\nexport function bucketToTranscript(bucket: SessionBucket | undefined): TranscriptItem[] {\n if (!bucket) return [];\n const inputById = new Map(bucket.inputs.map((input) => [input.id, input]));\n const projectedInputIds = new Set<string>();\n const items: TranscriptItem[] = [];\n const activeRuns = Object.values(bucket.runs)\n .filter((run) => run.status === \"pending\" || run.status === \"running\");\n const activeRunInputIds = new Set(activeRuns.flatMap((run) => run.inputId ? [run.inputId] : []));\n const transcriptUpdatedAt = bucket.messages.reduce(\n (latest, message) => Math.max(latest, message.updatedAt),\n bucket.session?.updatedAt ?? 0,\n );\n\n for (const { message, parts } of selectSessionMessagesWithParts(bucket)) {\n if (message.role === \"user\" && message.inputId) projectedInputIds.add(message.inputId);\n items.push(...messageToTranscriptItems(\n message,\n parts,\n message.inputId ? inputById.get(message.inputId)?.content : undefined,\n ));\n }\n\n // Admission and transcript projection are separate daemon steps. Until the user message\n // exists, keep its input-backed placeholder at the canonical transcript tail. input.seq\n // and message.seq are independent counters and must never be compared. Transcript rewrites\n // such as compact/rewind drop historical inputId links, so old inputs are not placeholders.\n for (const input of [...bucket.inputs].sort((a, b) => a.seq - b.seq)) {\n if (projectedInputIds.has(input.id)) continue;\n const belongsToActiveRun = activeRunInputIds.has(input.id)\n || (input.delivery === \"steer\" && activeRuns.some((run) => input.createdAt >= run.createdAt));\n const admittedAfterTranscript = input.createdAt >= transcriptUpdatedAt;\n if (!belongsToActiveRun && !admittedAfterTranscript) continue;\n items.push({ id: `input:${input.id}`, role: \"user\", text: input.content });\n }\n return items;\n}\n\nexport function splitStreamingAssistant(items: TranscriptItem[]): TranscriptView {\n for (let index = items.length - 1; index >= 0; index -= 1) {\n const item = items[index];\n if (!item) continue;\n if (item.role !== \"assistant\" || item.streaming !== true || !item.text) continue;\n return {\n items: [\n ...items.slice(0, index),\n ...items.slice(index + 1),\n ],\n assistantBuffer: item.text,\n };\n }\n return { items, assistantBuffer: \"\" };\n}\n",
27
- "import type {\n CommandCatalogEntry,\n OpenHarnessClient,\n OpenHarnessClientState,\n PresentationReadRequest,\n SlashLine,\n} from \"@openharness/client\";\nimport {\n LOCAL_COMMAND_DETAILS,\n LOCAL_COMMAND_NAMES,\n dispatchSessionCommand,\n hasActiveRun,\n mergeCommandDetails,\n parseSlashLine,\n resolveSessionCwd,\n} from \"@openharness/client\";\nimport type { Dispatch, MutableRefObject, SetStateAction } from \"react\";\n\nimport type { FrontendConfig } from \"../types\";\n\nexport {\n LOCAL_COMMAND_DETAILS,\n LOCAL_COMMAND_NAMES,\n hasActiveRun,\n mergeCommandDetails,\n parseSlashLine,\n};\n\nexport type SessionSlashCtx = {\n client: OpenHarnessClient;\n sessionId: string | undefined;\n pushSystem: (text: string) => void;\n presentSystem: (title: string, content: string) => void;\n statusRef: MutableRefObject<Record<string, unknown>>;\n commandCatalogRef: MutableRefObject<CommandCatalogEntry[]>;\n clientState: OpenHarnessClientState;\n localBusy: boolean;\n cacheFirstRead?: (request: PresentationReadRequest) => void;\n daemon?: FrontendConfig[\"daemon\"];\n setStatus: Dispatch<SetStateAction<Record<string, unknown>>>;\n};\n\nexport async function dispatchSessionSlashCommand(\n slash: SlashLine | null,\n ctx: SessionSlashCtx,\n): Promise<\"handled\" | \"unhandled\" | \"local_ui_ignored\"> {\n const {\n client,\n sessionId,\n pushSystem,\n presentSystem,\n statusRef,\n commandCatalogRef,\n clientState,\n localBusy,\n cacheFirstRead,\n daemon,\n setStatus,\n } = ctx;\n\n const outcome = await dispatchSessionCommand(slash, {\n client,\n sessionId,\n cwd: resolveSessionCwd({\n statusCwd: statusRef.current.cwd,\n daemonCwd: daemon?.cwd ?? undefined,\n }),\n model: statusRef.current.model != null\n ? String(statusRef.current.model)\n : daemon?.model ?? undefined,\n permissionMode: typeof statusRef.current.permission_mode === \"string\"\n ? statusRef.current.permission_mode\n : undefined,\n statusSessionId: typeof statusRef.current.session_id === \"string\"\n ? statusRef.current.session_id\n : sessionId,\n commandCatalog: commandCatalogRef.current,\n clientState,\n busy: localBusy,\n emit: pushSystem,\n present: presentSystem,\n cacheFirstRead,\n getRuntimeDiagnostics: () => ({\n runtime: `Node ${process.version}`,\n platform: process.platform,\n architecture: process.arch,\n }),\n patchStatus: (patch) => setStatus((current) => ({ ...current, ...patch })),\n });\n\n if (outcome === \"local_ui\") return \"local_ui_ignored\";\n return outcome;\n}\n",
28
- "import { useCallback, useEffect, useMemo, useRef, useState, type SetStateAction } from \"react\";\nimport {\n OpenHarnessClient,\n createPromptRequestId,\n createInitialClientState,\n patchSessionRuntimeMetadata,\n readSessionRuntimeConfig,\n syncEvents,\n type CommandCatalogEntry,\n type McpServerStatus,\n type ModelProviderInfo,\n type OpenHarnessClientState,\n type PermissionRequestRecord,\n type PresentationReadRequest,\n type SessionRuntimeConfigPatch,\n type SessionBucket,\n type SessionRecord,\n type SyncEventUpdate,\n} from \"@openharness/client\";\n\nimport type { FrontendConfig, McpServerSnapshot, TranscriptItem } from \"../types\";\nimport {\n beginJobList,\n mergeJobSnapshot,\n rejectJobList,\n resolveJobList,\n validateJobReadResult,\n validateJobSnapshot,\n validateJobSnapshots,\n type JobDetailRemoteState,\n type JobRemoteState,\n} from \"../jobs/job-remote-state\";\nimport type { TuiAction, TuiSessionController } from \"./sessionController\";\nimport { bucketToTranscript, splitStreamingAssistant } from \"./transcript\";\nimport {\n dispatchSessionSlashCommand,\n hasActiveRun,\n mergeCommandDetails,\n parseSlashLine\n} from \"./sessionSlashCommands\";\n\nconst JOBS_AUXILIARY_SLASH_COMMANDS = new Set([\n \"/agents\",\n \"/background\",\n \"/doctor\",\n \"/jobs\",\n \"/stats\",\n]);\n\ntype DisplayRequest = NonNullable<TuiSessionController[\"displayRequest\"]>;\ntype PresentationCacheEntry = {\n title: string;\n content: string;\n updatedAt: number;\n};\n\nconst LIVE_TEXT_DELTA_FLUSH_MS = 33;\nconst PRESENTATION_LOADING_TEXT = \"Loading...\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function sessionRuntimeMetadata(input: {\n model?: unknown;\n provider?: unknown;\n baseUrl?: unknown;\n apiFormat?: unknown;\n permissionMode?: unknown;\n maxTurns?: unknown;\n sessionMode?: unknown;\n pluginsEnabled?: unknown;\n}): Record<string, unknown> {\n const runtime: SessionRuntimeConfigPatch = {};\n if (typeof input.model === \"string\" && input.model) {\n runtime.model = input.model;\n }\n if (typeof input.provider === \"string\" && input.provider) {\n runtime.provider = input.provider;\n }\n if (typeof input.baseUrl === \"string\" && input.baseUrl) {\n runtime.baseUrl = input.baseUrl;\n }\n if (input.apiFormat === \"anthropic\" || input.apiFormat === \"openai\") {\n runtime.apiFormat = input.apiFormat;\n }\n if (input.permissionMode === \"default\" || input.permissionMode === \"plan\" || input.permissionMode === \"full_auto\") {\n runtime.permissionMode = input.permissionMode;\n }\n if (typeof input.maxTurns === \"number\" && Number.isFinite(input.maxTurns)) {\n runtime.maxTurns = input.maxTurns;\n }\n if (input.sessionMode === \"coordinator\" || input.sessionMode === \"direct\") {\n runtime.sessionMode = input.sessionMode;\n }\n if (typeof input.pluginsEnabled === \"boolean\") {\n runtime.pluginsEnabled = input.pluginsEnabled;\n }\n return patchSessionRuntimeMetadata({}, runtime);\n}\n\nfunction mcpServerSnapshot(server: McpServerStatus): McpServerSnapshot {\n return {\n name: server.name,\n state: server.status,\n ...(server.error || server.command ? { detail: server.error ?? server.command } : {}),\n tool_count: server.toolCount,\n resource_count: server.resourceCount,\n };\n}\n\nfunction normalizeSessionMode(value: unknown): \"coordinator\" | null {\n return value === \"coordinator\" ? \"coordinator\" : null;\n}\n\nfunction statusSessionMode(value: unknown): \"coordinator\" | \"direct\" {\n return normalizeSessionMode(value) ?? \"direct\";\n}\n\nfunction stringSetting(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\ntype RecoverableRun = {\n id: string;\n error?: string;\n prompt: string;\n};\n\nfunction archiveClientSession(\n state: OpenHarnessClientState,\n sessionId: string,\n archivedAt: number\n): OpenHarnessClientState {\n const current = state.sessions[sessionId];\n if (!current || current.status === \"archived\") return state;\n const archived: SessionRecord = {\n ...current,\n status: \"archived\",\n archivedAt,\n updatedAt: Math.max(current.updatedAt, archivedAt),\n };\n const bucket = state.buckets[sessionId];\n return {\n ...state,\n sessions: { ...state.sessions, [sessionId]: archived },\n buckets: bucket\n ? { ...state.buckets, [sessionId]: { ...bucket, session: archived } }\n : state.buckets,\n };\n}\n\nfunction listTopLevelSessions(\n sessions: Iterable<SessionRecord>,\n activeSessionId?: string\n): SessionRecord[] {\n return [...sessions]\n .filter((session) => !session.parentId && session.status !== \"archived\")\n .sort((a, b) => {\n if (a.id === activeSessionId) return -1;\n if (b.id === activeSessionId) return 1;\n return b.updatedAt - a.updatedAt;\n });\n}\n\nfunction sessionSelectOptions(\n sessions: Iterable<SessionRecord>,\n activeSessionId?: string\n): NonNullable<TuiSessionController[\"selectRequest\"]>[\"options\"] {\n return listTopLevelSessions(sessions, activeSessionId).map((session) => ({\n value: session.id,\n label: `${session.id === activeSessionId ? \"* \" : \"\"}${session.title || session.id}`,\n description: `${session.model} | ${session.status}`,\n }));\n}\n\nexport function shouldAutoActivateSession(\n session: SessionRecord,\n defaultModel: string,\n pluginsEnabled: boolean | undefined | null,\n): boolean {\n const runtime = readSessionRuntimeConfig(session);\n return runtime.model === defaultModel\n && (pluginsEnabled == null || (runtime.pluginsEnabled ?? true) === pluginsEnabled);\n}\n\nfunction recoverableInterruptedRuns(bucket?: SessionBucket): RecoverableRun[] {\n if (!bucket) return [];\n const recoveredSourceRunIds = new Set(bucket.inputs.flatMap((input) => (isRecord(input.metadata.recovery) && typeof input.metadata.recovery.sourceRunId === \"string\" ? [input.metadata.recovery.sourceRunId] : [])));\n return Object.values(bucket.runs)\n .filter((run) => run.status === \"interrupted\" && !!run.inputId && !recoveredSourceRunIds.has(run.id))\n .sort((a, b) => b.updatedAt - a.updatedAt)\n .flatMap((run) => {\n const input = bucket.inputs.find((candidate) => candidate.id === run.inputId);\n return input ? [{ id: run.id, error: run.error, prompt: input.content }] : [];\n });\n}\n\nfunction shouldCoalesceClientState(update: SyncEventUpdate): boolean {\n return update.source === \"live\" && update.event?.type === \"session.message.part.delta\";\n}\n\nfunction permissionToModal(request: PermissionRequestRecord): Record<string, unknown> {\n const input = request.payload.input && typeof request.payload.input === \"object\" ? (request.payload.input as Record<string, unknown>) : {};\n return {\n kind: \"permission\",\n request_id: request.id,\n tool_name: request.toolName,\n reason: typeof request.payload.reason === \"string\" ? request.payload.reason : null,\n input,\n };\n}\n\nfunction firstPendingPermission(state: OpenHarnessClientState, sessionId?: string): PermissionRequestRecord | undefined {\n if (!sessionId) return undefined;\n const bucket = state.buckets[sessionId];\n if (!bucket) return undefined;\n return Object.values(bucket.permissions)\n .filter((request) => request.status === \"pending\")\n .sort((a, b) => a.createdAt - b.createdAt)\n .at(0);\n}\n\nexport function useServerSync(config: FrontendConfig, onError?: (message: string) => void): TuiSessionController {\n const daemon = config.daemon;\n const [clientState, setClientState] = useState<OpenHarnessClientState>(() => createInitialClientState());\n const [activeSessionId, setActiveSessionId] = useState<string | undefined>();\n const [status, setStatus] = useState<Record<string, unknown>>({\n permission_mode: daemon?.permissionMode ?? \"default\",\n model: daemon?.model ?? \"default\",\n session_mode: statusSessionMode(daemon?.sessionMode),\n ...(typeof daemon?.maxTurns === \"number\" ? { max_turns: daemon.maxTurns } : {}),\n });\n const [modal, setModal] = useState<Record<string, unknown> | null>(null);\n const [selectRequest, setSelectRequest] = useState<TuiSessionController[\"selectRequest\"]>(null);\n const [displayRequest, setDisplayRequest] = useState<TuiSessionController[\"displayRequest\"]>(null);\n const [localBusy, setLocalBusy] = useState(false);\n const [submittedRun, setSubmittedRun] = useState<{\n sessionId: string;\n runId: string;\n } | null>(null);\n const [ready, setReady] = useState(false);\n const [globalSystemItems, setGlobalSystemItems] = useState<TranscriptItem[]>([]);\n const [systemItemsBySession, setSystemItemsBySession] = useState<Record<string, TranscriptItem[]>>({});\n const [commandCatalog, setCommandCatalog] = useState<CommandCatalogEntry[]>([]);\n const [jobState, setJobState] = useState<JobRemoteState>({ status: \"idle\", jobs: [] });\n const [jobDetailState, setJobDetailState] = useState<JobDetailRemoteState>({ status: \"idle\" });\n const [mcpServers, setMcpServers] = useState<McpServerSnapshot[]>([]);\n const clientRef = useRef<OpenHarnessClient | null>(null);\n const activeSessionIdRef = useRef<string | undefined>(undefined);\n const commandCatalogRef = useRef<CommandCatalogEntry[]>([]);\n const defaultRuntimeRef = useRef<{\n model: string;\n provider?: string;\n baseUrl?: string;\n apiFormat?: \"anthropic\" | \"openai\";\n }>({\n model: daemon?.model ?? \"default\",\n });\n const nextSessionModeRef = useRef<\"coordinator\" | \"direct\">(statusSessionMode(daemon?.sessionMode));\n const statusRef = useRef(status);\n const sentInitialPromptRef = useRef(false);\n const pendingNewSessionTitleRef = useRef<string | undefined>(undefined);\n const listedSessionsRef = useRef<Record<string, SessionRecord>>({});\n const presentationCacheRef = useRef<Record<string, PresentationCacheEntry>>({});\n const displayRequestRef = useRef<TuiSessionController[\"displayRequest\"]>(null);\n const pendingClientStateRef = useRef<OpenHarnessClientState | null>(null);\n const pendingClientStateTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const shownPermissionIdRef = useRef<string | undefined>(undefined);\n const auxiliaryGenerationRef = useRef(0);\n const jobStateRef = useRef(jobState);\n const jobDetailStateRef = useRef(jobDetailState);\n const jobGenerationRef = useRef(0);\n const jobDetailGenerationRef = useRef(0);\n const jobsAbortRef = useRef<AbortController | null>(null);\n const jobDetailAbortRef = useRef<AbortController | null>(null);\n const jobControlAbortRef = useRef<AbortController | null>(null);\n const jobControlGenerationRef = useRef(0);\n const mcpAbortRef = useRef<AbortController | null>(null);\n const onErrorRef = useRef(onError);\n onErrorRef.current = onError;\n\n useEffect(() => {\n activeSessionIdRef.current = activeSessionId;\n }, [activeSessionId]);\n\n useEffect(() => {\n commandCatalogRef.current = commandCatalog;\n }, [commandCatalog]);\n\n useEffect(() => {\n statusRef.current = status;\n }, [status]);\n\n useEffect(() => {\n displayRequestRef.current = displayRequest;\n }, [displayRequest]);\n\n useEffect(() => {\n jobStateRef.current = jobState;\n }, [jobState]);\n\n useEffect(() => {\n jobDetailStateRef.current = jobDetailState;\n }, [jobDetailState]);\n\n const clearDisplayRequest = useCallback(() => {\n displayRequestRef.current = null;\n setDisplayRequest(null);\n }, []);\n\n const showDisplayRequest = useCallback((request: DisplayRequest) => {\n displayRequestRef.current = request;\n setSelectRequest(null);\n setDisplayRequest(request);\n }, []);\n\n const clearAuxiliaryState = useCallback((): void => {\n auxiliaryGenerationRef.current += 1;\n jobGenerationRef.current += 1;\n jobDetailGenerationRef.current += 1;\n jobControlGenerationRef.current += 1;\n mcpAbortRef.current?.abort();\n jobsAbortRef.current?.abort();\n jobDetailAbortRef.current?.abort();\n jobControlAbortRef.current?.abort();\n mcpAbortRef.current = null;\n jobsAbortRef.current = null;\n jobDetailAbortRef.current = null;\n jobControlAbortRef.current = null;\n const emptyJobState: JobRemoteState = { status: \"idle\", jobs: [] };\n const emptyJobDetailState: JobDetailRemoteState = { status: \"idle\" };\n jobStateRef.current = emptyJobState;\n jobDetailStateRef.current = emptyJobDetailState;\n setJobState(emptyJobState);\n setJobDetailState(emptyJobDetailState);\n setMcpServers([]);\n }, []);\n\n const setStatusAndDefault = useCallback((value: SetStateAction<Record<string, unknown>>) => {\n setStatus((current) => {\n const next = typeof value === \"function\" ? value(current) : value;\n if (typeof next.model === \"string\" && !activeSessionIdRef.current) {\n defaultRuntimeRef.current = {\n ...defaultRuntimeRef.current,\n model: next.model,\n ...(typeof next.provider === \"string\" ? { provider: next.provider } : {}),\n ...(typeof next.baseUrl === \"string\" ? { baseUrl: next.baseUrl } : {}),\n ...(next.apiFormat === \"anthropic\" || next.apiFormat === \"openai\" ? { apiFormat: next.apiFormat } : {}),\n };\n }\n return next;\n });\n }, []);\n\n const pushSystem = useCallback((text: string) => {\n const sessionId = activeSessionIdRef.current;\n if (!sessionId) {\n setGlobalSystemItems((items) => [...items, { role: \"system\", text }]);\n return;\n }\n setSystemItemsBySession((itemsBySession) => ({\n ...itemsBySession,\n [sessionId]: [...(itemsBySession[sessionId] ?? []), { role: \"system\", text }],\n }));\n }, []);\n\n const reportError = useCallback(\n (message: string) => {\n pushSystem(`error: ${message}`);\n onErrorRef.current?.(message);\n setLocalBusy(false);\n setSubmittedRun(null);\n },\n [pushSystem],\n );\n\n const reportAuxiliaryError = useCallback((scope: string, error: unknown): void => {\n const message = error instanceof Error ? error.message : String(error);\n onErrorRef.current?.(`${scope}: ${message}`);\n }, []);\n\n const refreshJobs = useCallback(async (): Promise<void> => {\n const client = clientRef.current;\n const sessionId = activeSessionIdRef.current;\n const generation = ++jobGenerationRef.current;\n if (!client || !sessionId) {\n const idle: JobRemoteState = { status: \"idle\", jobs: [] };\n jobStateRef.current = idle;\n setJobState(idle);\n return;\n }\n\n jobsAbortRef.current?.abort();\n const controller = new AbortController();\n jobsAbortRef.current = controller;\n setJobState((current) => {\n const next = beginJobList(current);\n jobStateRef.current = next;\n return next;\n });\n\n try {\n const response = await client.listJobs({\n sessionId,\n includeFinished: true,\n limit: 100,\n signal: controller.signal,\n });\n if (activeSessionIdRef.current !== sessionId || jobGenerationRef.current !== generation) return;\n const validated = validateJobSnapshots(response, sessionId);\n if (validated.error) {\n const validationError = validated.error;\n const now = Date.now();\n setJobState((current) => {\n const next: JobRemoteState = validated.jobs.length > 0\n ? {\n ...resolveJobList(validated.jobs, now, current),\n status: \"error\",\n error: validationError,\n }\n : rejectJobList(current, validationError);\n jobStateRef.current = next;\n return next;\n });\n reportAuxiliaryError(\"Jobs\", validationError);\n } else {\n const next = resolveJobList(validated.jobs, Date.now(), jobStateRef.current);\n jobStateRef.current = next;\n setJobState(next);\n }\n } catch (error) {\n if (controller.signal.aborted) return;\n if (activeSessionIdRef.current !== sessionId || jobGenerationRef.current !== generation) return;\n const message = error instanceof Error ? error.message : String(error);\n setJobState((current) => {\n const next = rejectJobList(current, message);\n jobStateRef.current = next;\n return next;\n });\n reportAuxiliaryError(\"Jobs\", message);\n } finally {\n if (jobsAbortRef.current === controller) jobsAbortRef.current = null;\n }\n }, [reportAuxiliaryError]);\n\n const loadJobDetail = useCallback(async (\n client: OpenHarnessClient,\n sessionId: string,\n jobId: string,\n ): Promise<void> => {\n const generation = ++jobDetailGenerationRef.current;\n jobDetailAbortRef.current?.abort();\n const controller = new AbortController();\n jobDetailAbortRef.current = controller;\n const current = jobDetailStateRef.current;\n const previous = current.status !== \"idle\" && current.jobId === jobId\n ? current.status === \"ready\"\n ? current.result\n : current.previous\n : undefined;\n const loading: JobDetailRemoteState = {\n status: \"loading\",\n jobId,\n ...(previous ? { previous } : {}),\n };\n jobDetailStateRef.current = loading;\n setJobDetailState(loading);\n\n try {\n const response = await client.readJob(jobId, {\n sessionId,\n signal: controller.signal,\n });\n if (activeSessionIdRef.current !== sessionId || jobDetailGenerationRef.current !== generation) return;\n const validated = validateJobReadResult(response, sessionId, jobId);\n if (!validated.result) {\n throw new Error(validated.error ?? `Job read response for \"${jobId}\" has invalid fields.`);\n }\n const result = validated.result;\n const readyState: JobDetailRemoteState = {\n status: \"ready\",\n jobId,\n result,\n refreshedAt: Date.now(),\n };\n jobDetailStateRef.current = readyState;\n setJobDetailState(readyState);\n } catch (error) {\n if (controller.signal.aborted) return;\n if (activeSessionIdRef.current !== sessionId || jobDetailGenerationRef.current !== generation) return;\n const message = error instanceof Error ? error.message : String(error);\n const errorState: JobDetailRemoteState = {\n status: \"error\",\n jobId,\n error: message,\n ...(previous ? { previous } : {}),\n };\n jobDetailStateRef.current = errorState;\n setJobDetailState(errorState);\n reportAuxiliaryError(\"Jobs\", message);\n } finally {\n if (jobDetailAbortRef.current === controller) jobDetailAbortRef.current = null;\n }\n }, [reportAuxiliaryError]);\n\n const loadModels = useCallback(async (): Promise<ModelProviderInfo[]> => {\n const client = clientRef.current;\n if (!client) return [];\n return await client.listModels();\n }, []);\n\n const cacheFirstRead = useCallback(\n (request: PresentationReadRequest): void => {\n const cached = presentationCacheRef.current[request.key];\n showDisplayRequest({\n key: request.key,\n title: request.title,\n content: cached?.content ?? PRESENTATION_LOADING_TEXT,\n });\n\n void request\n .load()\n .then((content) => {\n presentationCacheRef.current = {\n ...presentationCacheRef.current,\n [request.key]: {\n title: request.title,\n content,\n updatedAt: Date.now(),\n },\n };\n if (displayRequestRef.current?.key !== request.key) return;\n showDisplayRequest({\n key: request.key,\n title: request.title,\n content,\n });\n })\n .catch((error) => {\n const message = error instanceof Error ? error.message : String(error);\n const content = cached ? `${cached.content}\\n\\nRefresh failed: ${message}` : `Failed to load ${request.title}: ${message}`;\n if (displayRequestRef.current?.key !== request.key) return;\n showDisplayRequest({\n key: request.key,\n title: request.title,\n content,\n });\n });\n },\n [showDisplayRequest],\n );\n\n const clearPendingClientState = useCallback(() => {\n if (pendingClientStateTimerRef.current) {\n clearTimeout(pendingClientStateTimerRef.current);\n pendingClientStateTimerRef.current = null;\n }\n pendingClientStateRef.current = null;\n }, []);\n\n const commitClientState = useCallback(\n (state: OpenHarnessClientState, coalesce: boolean) => {\n if (!coalesce) {\n clearPendingClientState();\n setClientState(state);\n return;\n }\n\n pendingClientStateRef.current = state;\n if (pendingClientStateTimerRef.current) return;\n pendingClientStateTimerRef.current = setTimeout(() => {\n pendingClientStateTimerRef.current = null;\n const pending = pendingClientStateRef.current;\n pendingClientStateRef.current = null;\n if (pending) setClientState(pending);\n }, LIVE_TEXT_DELTA_FLUSH_MS);\n },\n [clearPendingClientState],\n );\n\n useEffect(() => clearPendingClientState, [clearPendingClientState]);\n\n const activateSession = useCallback(\n (session: SessionRecord): void => {\n const runtime = readSessionRuntimeConfig(session, defaultRuntimeRef.current);\n activeSessionIdRef.current = session.id;\n setActiveSessionId(session.id);\n clearAuxiliaryState();\n setStatus((current) => ({\n ...current,\n model: runtime.model,\n ...(runtime.provider ? { provider: runtime.provider } : {}),\n session_id: session.id,\n cwd: session.cwd,\n permission_mode: typeof runtime.permissionMode === \"string\" ? runtime.permissionMode : current.permission_mode,\n ...(typeof runtime.maxTurns === \"number\" ? { max_turns: runtime.maxTurns } : {}),\n session_mode: statusSessionMode(runtime.sessionMode),\n }));\n },\n [clearAuxiliaryState],\n );\n\n const returnToHome = useCallback(\n (title?: string): void => {\n pendingNewSessionTitleRef.current = title?.trim() || undefined;\n activeSessionIdRef.current = undefined;\n setActiveSessionId(undefined);\n clearAuxiliaryState();\n setLocalBusy(false);\n setSubmittedRun(null);\n setSelectRequest(null);\n clearDisplayRequest();\n setModal(null);\n setStatus((current) => {\n const next = { ...current };\n delete next.session_id;\n next.model = defaultRuntimeRef.current.model;\n if (defaultRuntimeRef.current.provider) next.provider = defaultRuntimeRef.current.provider;\n else delete next.provider;\n next.session_mode = nextSessionModeRef.current;\n return next;\n });\n },\n [clearAuxiliaryState, clearDisplayRequest],\n );\n\n useEffect(() => {\n if (!daemon?.url) {\n setReady(true);\n reportError(\"Daemon URL is required for TUI. Launch with `ohs` or `ohs --tui` so the CLI can start or attach the daemon.\");\n return;\n }\n let cancelled = false;\n const client = new OpenHarnessClient({\n baseUrl: daemon.url,\n token: daemon.token ?? undefined,\n });\n clientRef.current = client;\n\n void (async () => {\n try {\n await client.health();\n const cwd = daemon.cwd ?? process.cwd();\n const [settings, sessions, commands] = await Promise.all([client.getSettings().catch(() => ({}) as Record<string, unknown>), client.listSessions({ cwd, limit: 20 }), client.listCommands({ cwd }).catch(() => [] as CommandCatalogEntry[])]);\n const model = daemon.model ?? stringSetting(settings.model) ?? \"default\";\n const provider = stringSetting(settings.provider);\n const baseUrl = stringSetting(settings.baseUrl);\n const apiFormat = settings.apiFormat === \"anthropic\" || settings.apiFormat === \"openai\" ? settings.apiFormat : undefined;\n defaultRuntimeRef.current = {\n model,\n ...(provider ? { provider } : {}),\n ...(baseUrl ? { baseUrl } : {}),\n ...(apiFormat ? { apiFormat } : {}),\n };\n if (cancelled) return;\n listedSessionsRef.current = Object.fromEntries(sessions.map((session) => [session.id, session]));\n setCommandCatalog(commands);\n setStatus((current) => ({\n ...current,\n model,\n ...(provider ? { provider } : {}),\n cwd,\n permission_mode: daemon?.permissionMode ?? current.permission_mode,\n ...(typeof daemon?.maxTurns === \"number\" ? { max_turns: daemon.maxTurns } : {}),\n session_mode: statusSessionMode(daemon?.sessionMode),\n }));\n const session = sessions[0];\n if (session && shouldAutoActivateSession(session, model, daemon?.pluginsEnabled)) {\n activateSession(session);\n void client.getSession(session.id).catch(() => {});\n }\n setReady(true);\n } catch (error) {\n if (cancelled) return;\n setReady(true);\n reportError(error instanceof Error ? error.message : String(error));\n }\n })();\n\n return () => {\n cancelled = true;\n clientRef.current = null;\n };\n }, [activateSession, daemon?.cwd, daemon?.maxTurns, daemon?.model, daemon?.permissionMode, daemon?.pluginsEnabled, daemon?.sessionMode, daemon?.token, daemon?.url, reportError]);\n\n useEffect(() => {\n const client = clientRef.current;\n if (!client || !activeSessionId) return;\n const controller = new AbortController();\n\n void (async () => {\n let reconnectNotice = false;\n try {\n for await (const update of syncEvents(client, {\n sessionId: activeSessionId,\n signal: controller.signal,\n })) {\n if (update.source === \"reconnecting\") {\n if (!reconnectNotice) {\n reconnectNotice = true;\n pushSystem(\"reconnecting...\");\n }\n continue;\n }\n if (reconnectNotice) reconnectNotice = false;\n commitClientState(update.state, shouldCoalesceClientState(update));\n }\n } catch (error) {\n if (controller.signal.aborted) return;\n reportError(error instanceof Error ? error.message : String(error));\n }\n })();\n\n return () => {\n clearPendingClientState();\n controller.abort();\n };\n }, [activeSessionId, clearPendingClientState, commitClientState, pushSystem, reportError]);\n\n useEffect(() => {\n const client = clientRef.current;\n const sessionId = activeSessionId;\n if (!client || !sessionId) return;\n const generation = ++auxiliaryGenerationRef.current;\n mcpAbortRef.current?.abort();\n const controller = new AbortController();\n mcpAbortRef.current = controller;\n const isCurrent = () => activeSessionIdRef.current === sessionId && auxiliaryGenerationRef.current === generation;\n\n void client.getSessionMcp(sessionId, { signal: controller.signal })\n .then((servers) => {\n if (!isCurrent()) return;\n setMcpServers(Array.isArray(servers) ? servers.map(mcpServerSnapshot) : []);\n })\n .catch((error) => {\n if (controller.signal.aborted) return;\n if (!isCurrent()) return;\n setMcpServers([]);\n reportAuxiliaryError(\"MCP\", error);\n })\n .finally(() => {\n if (mcpAbortRef.current === controller) mcpAbortRef.current = null;\n });\n\n return () => {\n controller.abort();\n };\n }, [activeSessionId, reportAuxiliaryError]);\n\n useEffect(() => {\n jobDetailGenerationRef.current += 1;\n jobDetailAbortRef.current?.abort();\n jobDetailAbortRef.current = null;\n const idle: JobDetailRemoteState = { status: \"idle\" };\n jobDetailStateRef.current = idle;\n setJobDetailState(idle);\n void refreshJobs();\n return () => {\n jobsAbortRef.current?.abort();\n };\n }, [activeSessionId, refreshJobs]);\n\n useEffect(() => {\n const pending = firstPendingPermission(clientState, activeSessionId);\n if (!pending) {\n shownPermissionIdRef.current = undefined;\n if (modal?.kind === \"permission\") setModal(null);\n return;\n }\n if (shownPermissionIdRef.current === pending.id) return;\n shownPermissionIdRef.current = pending.id;\n setModal(permissionToModal(pending));\n }, [activeSessionId, clientState, modal?.kind]);\n\n const running = hasActiveRun(clientState, activeSessionId);\n useEffect(() => {\n if (!submittedRun) return;\n const run = clientState.buckets[submittedRun.sessionId]?.runs[submittedRun.runId];\n if (!run || run.status === \"pending\" || run.status === \"running\") return;\n void refreshJobs();\n if (run.status === \"failed\") {\n reportError(run.error ?? \"Agent run failed\");\n return;\n }\n setSubmittedRun(null);\n }, [clientState, refreshJobs, reportError, submittedRun]);\n\n const createAndSwitchSession = useCallback(\n async (title?: string): Promise<SessionRecord | undefined> => {\n const client = clientRef.current;\n if (!client) return undefined;\n setLocalBusy(true);\n const cwd = daemon?.cwd ?? process.cwd();\n const model = defaultRuntimeRef.current.model;\n const metadata = sessionRuntimeMetadata({\n model,\n provider: defaultRuntimeRef.current.provider,\n baseUrl: defaultRuntimeRef.current.baseUrl,\n apiFormat: defaultRuntimeRef.current.apiFormat,\n permissionMode: statusRef.current.permission_mode ?? daemon?.permissionMode ?? \"default\",\n maxTurns: statusRef.current.max_turns ?? daemon?.maxTurns,\n sessionMode: nextSessionModeRef.current,\n pluginsEnabled: daemon?.pluginsEnabled,\n });\n const session = await client.createSession({\n cwd,\n model,\n title: title?.trim() || \"TUI\",\n metadata,\n });\n activateSession(session);\n setSelectRequest(null);\n setLocalBusy(false);\n setSubmittedRun(null);\n pendingNewSessionTitleRef.current = undefined;\n return session;\n },\n [activateSession, daemon?.cwd, daemon?.maxTurns, daemon?.model, daemon?.permissionMode, daemon?.pluginsEnabled, daemon?.sessionMode],\n );\n\n useEffect(() => {\n if (!ready || sentInitialPromptRef.current || !config.initial_prompt) return;\n sentInitialPromptRef.current = true;\n const client = clientRef.current;\n if (!client) return;\n setLocalBusy(true);\n void (async () => {\n const session = activeSessionId ? (clientState.sessions[activeSessionId] ?? (await client.getSession(activeSessionId))) : await createAndSwitchSession();\n if (!session) {\n setLocalBusy(false);\n return;\n }\n const response = await client.admitPrompt(session.id, {\n id: createPromptRequestId(),\n items: [{ type: \"text\", text: config.initial_prompt! }],\n });\n setLocalBusy(false);\n setSubmittedRun(response.run ? { sessionId: session.id, runId: response.run.id } : null);\n })().catch((error) => reportError(error instanceof Error ? error.message : String(error)));\n }, [activeSessionId, clientState.sessions, config.initial_prompt, createAndSwitchSession, ready, reportError]);\n\n const sendRequest = useCallback(\n (action: TuiAction): void => {\n const client = clientRef.current;\n let sessionId = activeSessionIdRef.current;\n\n void (async () => {\n const runtimeAction = action as TuiAction | { type?: unknown };\n const runtimeType = typeof runtimeAction.type === \"string\" ? runtimeAction.type : \"unknown\";\n switch (action.type) {\n case \"select_model\": {\n if (!client) return;\n const model = action.model.trim();\n const provider = action.provider?.trim() ?? \"\";\n if (!model) return;\n\n if (sessionId) {\n const session = await client.updateSession(sessionId, {\n metadata: patchSessionRuntimeMetadata(\n {},\n {\n model,\n ...(provider ? { provider } : {}),\n },\n ),\n });\n activateSession(session);\n } else {\n const settingsPatch: Record<string, unknown> = { model };\n if (provider) settingsPatch.provider = provider;\n await client.patchSettings(settingsPatch);\n defaultRuntimeRef.current = {\n ...defaultRuntimeRef.current,\n model,\n ...(provider ? { provider } : {}),\n };\n setStatus((current) => ({\n ...current,\n model,\n ...(provider ? { provider } : {}),\n }));\n }\n pushSystem(`Model selected: ${model}`);\n return;\n }\n\n case \"submit_line\": {\n if (!client) return;\n const line = action.line;\n const slash = parseSlashLine(line);\n\n const newSession = line.match(/^\\/new(?:\\s+(.+))?$/);\n if (newSession) {\n returnToHome(newSession[1]);\n return;\n }\n const switchSession = line.match(/^\\/sessions\\s+open\\s+(.+)$/);\n if (switchSession?.[1]) {\n const target = switchSession[1].trim();\n setLocalBusy(false);\n setSubmittedRun(null);\n pendingNewSessionTitleRef.current = undefined;\n setSelectRequest(null);\n const knownSession = clientState.sessions[target] ?? listedSessionsRef.current[target];\n if (knownSession) {\n activateSession(knownSession);\n return;\n }\n const session = await client.getSession(target);\n activateSession(session);\n return;\n }\n\n if (slash?.name === \"/resume\") {\n if (!sessionId) {\n pushSystem(\"No active session to resume.\");\n return;\n }\n const recoverable = recoverableInterruptedRuns(clientState.buckets[sessionId]);\n if (!slash.args) {\n if (recoverable.length === 0) {\n pushSystem(\"No interrupted prompt runs are available to resume.\");\n return;\n }\n clearDisplayRequest();\n setSelectRequest({\n title: \"Resume interrupted run\",\n submitPrefix: \"/resume \",\n options: recoverable.map((run) => ({\n value: run.id,\n label: run.prompt.length > 72 ? `${run.prompt.slice(0, 72)}...` : run.prompt,\n description: run.error ?? \"Interrupted before completion\",\n })),\n });\n return;\n }\n const runId = slash.args.trim();\n if (!recoverable.some((run) => run.id === runId)) {\n pushSystem(`Run is not available for recovery: ${runId}`);\n return;\n }\n setLocalBusy(true);\n const response = await client.resumeInterruptedRun(sessionId, runId, { id: createPromptRequestId() });\n setLocalBusy(false);\n setSubmittedRun(response.run ? { sessionId, runId: response.run.id } : null);\n setSelectRequest(null);\n return;\n }\n\n let slashResult: Awaited<ReturnType<typeof dispatchSessionSlashCommand>>;\n try {\n slashResult = await dispatchSessionSlashCommand(slash, {\n client,\n sessionId,\n pushSystem,\n presentSystem: (title, content) => showDisplayRequest({ title, content }),\n statusRef,\n commandCatalogRef,\n clientState,\n localBusy,\n cacheFirstRead,\n daemon,\n setStatus: setStatusAndDefault,\n });\n } catch (error) {\n if (slash && JOBS_AUXILIARY_SLASH_COMMANDS.has(slash.name)) {\n reportAuxiliaryError(\"Jobs\", error);\n return;\n }\n throw error;\n }\n if (slashResult === \"handled\") {\n if (slash?.name === \"/background\" && slash.args.trim() && sessionId) {\n await refreshJobs();\n }\n return;\n }\n if (slashResult === \"local_ui_ignored\") return;\n\n if (slash) {\n const catalogEntry = commandCatalogRef.current.find((entry) => entry.name === slash.name);\n if (catalogEntry?.kind === \"template\") {\n if (!sessionId) return;\n setLocalBusy(true);\n const response = await client.admitPrompt(sessionId, {\n id: createPromptRequestId(),\n items: [\n {\n type: \"skill\",\n name: catalogEntry.skillName,\n path: catalogEntry.path,\n ...(catalogEntry.displayName ? { displayName: catalogEntry.displayName } : {}),\n ...(catalogEntry.source && catalogEntry.source !== \"builtin\" ? { source: catalogEntry.source } : {}),\n },\n ...(slash.args ? [{ type: \"text\" as const, text: ` ${slash.args}` }] : []),\n ],\n });\n setLocalBusy(false);\n setSubmittedRun(response.run ? { sessionId, runId: response.run.id } : null);\n return;\n }\n pushSystem(`Unknown command: ${slash.name}`);\n return;\n }\n\n if (!sessionId) {\n const session = await createAndSwitchSession(pendingNewSessionTitleRef.current);\n if (!session) return;\n sessionId = session.id;\n }\n setLocalBusy(true);\n const response = await client.admitPrompt(sessionId, {\n id: createPromptRequestId(),\n items: [{ type: \"text\", text: line }],\n });\n setLocalBusy(false);\n setSubmittedRun(response.run ? { sessionId, runId: response.run.id } : null);\n return;\n }\n\n case \"delete_session\": {\n if (!client) return;\n const target = action.session_id;\n if (!target) return;\n const archived = await client.archiveSession(target);\n const archivedAt = archived.archivedAt ?? Date.now();\n delete listedSessionsRef.current[target];\n setClientState((current) => archiveClientSession(current, target, archivedAt));\n setLocalBusy(false);\n setSubmittedRun(null);\n setSelectRequest((current) =>\n current\n ? {\n ...current,\n options: current.options.filter((option) => option.value !== target),\n }\n : current,\n );\n if (target === activeSessionIdRef.current) {\n const remaining = listTopLevelSessions(\n Object.values({\n ...clientState.sessions,\n ...listedSessionsRef.current,\n [target]: { ...archived, status: \"archived\", archivedAt },\n }),\n );\n if (remaining[0]) {\n activateSession(remaining[0]);\n } else {\n const sessions = await client.listSessions({\n cwd: daemon?.cwd ?? undefined,\n includeArchived: false,\n limit: 20,\n });\n listedSessionsRef.current = Object.fromEntries(sessions.map((session) => [session.id, session]));\n const remoteNext = sessions.find((session) => session.id !== target);\n if (remoteNext) activateSession(remoteNext);\n else returnToHome();\n }\n }\n return;\n }\n\n case \"interrupt\": {\n if (!client) return;\n if (sessionId) await client.interruptSession(sessionId);\n setLocalBusy(false);\n setSubmittedRun(null);\n return;\n }\n\n case \"permission_response\": {\n if (!client) return;\n const requestId = action.request_id;\n const allowed = action.allowed;\n await client.replyPermission(requestId, {\n status: allowed ? \"approved\" : \"denied\",\n decision: action.scope === \"session\" ? \"session\" : \"once\",\n clientId: \"tui\",\n });\n setModal(null);\n return;\n }\n\n case \"list_sessions\": {\n if (!client) return;\n const cachedSessions = {\n ...listedSessionsRef.current,\n ...clientState.sessions,\n };\n const cachedOptions = sessionSelectOptions(Object.values(cachedSessions), activeSessionIdRef.current);\n clearDisplayRequest();\n setSelectRequest({\n title: \"Sessions\",\n submitPrefix: \"/sessions open \",\n options: cachedOptions,\n });\n const sessions = await client.listSessions({\n cwd: daemon?.cwd ?? undefined,\n includeArchived: false,\n limit: 20,\n });\n listedSessionsRef.current = Object.fromEntries(sessions.map((session) => [session.id, session]));\n setSelectRequest((current) =>\n current?.submitPrefix === \"/sessions open \"\n ? {\n title: \"Sessions\",\n submitPrefix: \"/sessions open \",\n options: sessionSelectOptions(sessions, activeSessionIdRef.current),\n }\n : current,\n );\n return;\n }\n\n case \"set_permission_mode\": {\n if (!client) return;\n const mode = action.permission_mode;\n setStatus((current) => ({ ...current, permission_mode: mode }));\n if (sessionId) {\n await client.updateSession(sessionId, {\n metadata: patchSessionRuntimeMetadata({}, { permissionMode: mode }),\n });\n }\n return;\n }\n\n case \"question_response\": {\n if (!client) return;\n reportError(\"Interactive question responses are not available through the daemon client.\");\n return;\n }\n\n case \"set_session_mode\": {\n if (!client) return;\n if (sessionId) {\n pushSystem(\"Coordinator mode can only be changed before starting a new session. Use /new first.\");\n return;\n }\n const mode = normalizeSessionMode(action.session_mode);\n nextSessionModeRef.current = statusSessionMode(mode);\n setStatus((current) => ({\n ...current,\n session_mode: nextSessionModeRef.current,\n }));\n return;\n }\n\n case \"job_request\": {\n if (!client) {\n reportAuxiliaryError(\"Jobs\", \"The daemon client is not connected.\");\n return;\n }\n const currentSessionId = activeSessionIdRef.current;\n if (!currentSessionId) return;\n try {\n switch (action.job_action) {\n case \"open\":\n await refreshJobs();\n return;\n case \"refresh\": {\n jobControlGenerationRef.current += 1;\n jobControlAbortRef.current?.abort();\n jobControlAbortRef.current = null;\n const detail = jobDetailStateRef.current;\n const detailJobId = detail.status === \"idle\" ? undefined : detail.jobId;\n await Promise.all([\n refreshJobs(),\n detailJobId\n ? loadJobDetail(client, currentSessionId, detailJobId)\n : Promise.resolve(),\n ]);\n return;\n }\n case \"select\":\n jobControlGenerationRef.current += 1;\n jobControlAbortRef.current?.abort();\n jobControlAbortRef.current = null;\n await loadJobDetail(client, currentSessionId, action.job_id);\n return;\n case \"cancel\": {\n const controlGeneration = ++jobControlGenerationRef.current;\n const detailGeneration = jobDetailGenerationRef.current;\n jobControlAbortRef.current?.abort();\n const controller = new AbortController();\n jobControlAbortRef.current = controller;\n let response: Awaited<ReturnType<OpenHarnessClient[\"cancelJob\"]>>;\n try {\n response = await client.cancelJob(\n action.job_id,\n {\n sessionId: currentSessionId,\n reason: action.reason,\n },\n { signal: controller.signal },\n );\n } catch (error) {\n if (activeSessionIdRef.current !== currentSessionId) return;\n if (controller.signal.aborted || jobControlGenerationRef.current !== controlGeneration) {\n await refreshJobs();\n return;\n }\n throw error;\n } finally {\n if (jobControlAbortRef.current === controller) jobControlAbortRef.current = null;\n }\n if (activeSessionIdRef.current !== currentSessionId) return;\n const ownsDetail = !controller.signal.aborted &&\n jobControlGenerationRef.current === controlGeneration &&\n jobDetailGenerationRef.current === detailGeneration;\n const validated = validateJobSnapshot(response, currentSessionId, action.job_id);\n if (!validated.snapshot) {\n if (controller.signal.aborted || jobControlGenerationRef.current !== controlGeneration) {\n await refreshJobs();\n return;\n }\n throw new Error(validated.error ?? \"Job snapshot has invalid fields.\");\n }\n const snapshot = validated.snapshot;\n const next = mergeJobSnapshot(jobStateRef.current, snapshot, Date.now());\n jobStateRef.current = next;\n setJobState(next);\n if (ownsDetail) {\n await loadJobDetail(client, currentSessionId, action.job_id);\n }\n await refreshJobs();\n return;\n }\n case \"send\": {\n const controlGeneration = ++jobControlGenerationRef.current;\n const detailGeneration = jobDetailGenerationRef.current;\n jobControlAbortRef.current?.abort();\n const controller = new AbortController();\n jobControlAbortRef.current = controller;\n try {\n await client.sendJob(\n action.job_id,\n {\n sessionId: currentSessionId,\n data: action.data,\n },\n { signal: controller.signal },\n );\n } catch (error) {\n if (activeSessionIdRef.current !== currentSessionId) return;\n if (controller.signal.aborted || jobControlGenerationRef.current !== controlGeneration) {\n await refreshJobs();\n return;\n }\n throw error;\n } finally {\n if (jobControlAbortRef.current === controller) jobControlAbortRef.current = null;\n }\n if (activeSessionIdRef.current !== currentSessionId) return;\n const ownsDetail = !controller.signal.aborted &&\n jobControlGenerationRef.current === controlGeneration &&\n jobDetailGenerationRef.current === detailGeneration;\n if (ownsDetail) {\n await loadJobDetail(client, currentSessionId, action.job_id);\n }\n await refreshJobs();\n return;\n }\n }\n } catch (error) {\n reportAuxiliaryError(\"Jobs\", error);\n return;\n }\n }\n\n default: {\n const exhaustive: never = action;\n void exhaustive;\n reportError(`Unsupported TUI action: ${runtimeType}`);\n return;\n }\n }\n })().catch((error) => {\n reportError(error instanceof Error ? error.message : String(error));\n });\n },\n [activeSessionId, activateSession, cacheFirstRead, clearDisplayRequest, clientState, createAndSwitchSession, daemon, loadJobDetail, localBusy, pushSystem, refreshJobs, reportAuxiliaryError, reportError, returnToHome, showDisplayRequest],\n );\n\n const bucket = activeSessionId ? clientState.buckets[activeSessionId] : undefined;\n const recoveryItems = useMemo(\n () =>\n recoverableInterruptedRuns(bucket).map((run) => ({\n id: `recovery:${run.id}`,\n role: \"system\" as const,\n text: `Run interrupted${run.error ? `: ${run.error}` : \"\"}\\nUse /resume ${run.id} to replay its original prompt.`,\n })),\n [bucket],\n );\n const transcriptView = useMemo(() => {\n const base = splitStreamingAssistant(bucketToTranscript(bucket));\n return {\n transcript: [...base.items, ...recoveryItems, ...(activeSessionId ? (systemItemsBySession[activeSessionId] ?? []) : globalSystemItems)],\n assistantBuffer: base.assistantBuffer,\n };\n }, [activeSessionId, bucket, globalSystemItems, recoveryItems, systemItemsBySession]);\n const submittedRunRecord = submittedRun ? clientState.buckets[submittedRun.sessionId]?.runs[submittedRun.runId] : undefined;\n const waitingForSubmittedRun = !!submittedRun && (!submittedRunRecord || submittedRunRecord.status === \"pending\" || submittedRunRecord.status === \"running\");\n const commandDetails = useMemo(() => mergeCommandDetails(commandCatalog), [commandCatalog]);\n const commands = useMemo(() => commandDetails.map((entry) => entry.name), [commandDetails]);\n\n return useMemo(\n () => ({\n transcript: transcriptView.transcript,\n assistantBuffer: transcriptView.assistantBuffer,\n status,\n jobState,\n jobs: jobState.jobs,\n jobDetailState,\n commands,\n commandDetails,\n mcpServers,\n modal,\n selectRequest,\n displayRequest,\n busy: localBusy || running || waitingForSubmittedRun,\n ready,\n setModal,\n setSelectRequest,\n setDisplayRequest,\n setBusy: setLocalBusy,\n loadModels,\n sendRequest,\n }),\n [commandDetails, commands, displayRequest, jobDetailState, jobState, loadModels, localBusy, mcpServers, modal, ready, running, selectRequest, sendRequest, status, transcriptView, waitingForSubmittedRun],\n );\n}\n",
47
+ "import type {\n CommandCatalogEntry,\n OpenHarnessClient,\n OpenHarnessClientState,\n PresentationReadRequest,\n SlashLine,\n} from \"@openharness/client\";\nimport {\n LOCAL_COMMAND_DETAILS,\n LOCAL_COMMAND_NAMES,\n dispatchSessionCommand,\n hasActiveRun,\n mergeCommandDetails,\n parseSlashLine,\n resolveSessionCwd,\n} from \"@openharness/client\";\nimport type { Dispatch, MutableRefObject, SetStateAction } from \"react\";\n\nimport type { FrontendConfig } from \"../types\";\n\nexport {\n LOCAL_COMMAND_DETAILS,\n LOCAL_COMMAND_NAMES,\n hasActiveRun,\n mergeCommandDetails,\n parseSlashLine,\n};\n\ntype SessionSlashClient = Pick<\n OpenHarnessClient,\n \"protocol\" | \"system\" | \"providers\" | \"auth\" | \"projects\" | \"plugins\" | \"development\" | \"sessions\" | \"jobs\"\n>;\n\nexport type SessionSlashCtx = {\n client: SessionSlashClient;\n sessionId: string | undefined;\n pushSystem: (text: string) => void;\n presentSystem: (title: string, content: string) => void;\n statusRef: MutableRefObject<Record<string, unknown>>;\n commandCatalogRef: MutableRefObject<CommandCatalogEntry[]>;\n clientState: OpenHarnessClientState;\n localBusy: boolean;\n cacheFirstRead?: (request: PresentationReadRequest) => void;\n daemon?: FrontendConfig[\"daemon\"];\n setStatus: Dispatch<SetStateAction<Record<string, unknown>>>;\n};\n\nexport async function dispatchSessionSlashCommand(\n slash: SlashLine | null,\n ctx: SessionSlashCtx,\n): Promise<\"handled\" | \"unhandled\" | \"local_ui_ignored\"> {\n const {\n client,\n sessionId,\n pushSystem,\n presentSystem,\n statusRef,\n commandCatalogRef,\n clientState,\n localBusy,\n cacheFirstRead,\n daemon,\n setStatus,\n } = ctx;\n\n const outcome = await dispatchSessionCommand(slash, {\n client,\n sessionId,\n cwd: resolveSessionCwd({\n statusCwd: statusRef.current.cwd,\n daemonCwd: daemon?.cwd ?? undefined,\n }),\n model: statusRef.current.model != null\n ? String(statusRef.current.model)\n : daemon?.model ?? undefined,\n permissionMode: typeof statusRef.current.permission_mode === \"string\"\n ? statusRef.current.permission_mode\n : undefined,\n statusSessionId: typeof statusRef.current.session_id === \"string\"\n ? statusRef.current.session_id\n : sessionId,\n commandCatalog: commandCatalogRef.current,\n clientState,\n busy: localBusy,\n emit: pushSystem,\n present: presentSystem,\n cacheFirstRead,\n getRuntimeDiagnostics: () => ({\n runtime: `Node ${process.version}`,\n platform: process.platform,\n architecture: process.arch,\n }),\n patchStatus: (patch) => setStatus((current) => ({ ...current, ...patch })),\n });\n\n if (outcome === \"local_ui\") return \"local_ui_ignored\";\n return outcome;\n}\n",
48
+ "import {\n OpenHarnessClient,\n readSessionRuntimeConfig,\n type SessionRecord,\n} from \"@openharness/client\";\n\nimport type { FrontendConfig } from \"../../types\";\n\nexport interface DefaultRuntimeSettings {\n model: string;\n provider?: string;\n baseUrl?: string;\n apiFormat?: \"anthropic\" | \"openai\";\n}\n\nexport function stringSetting(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nexport function normalizeSessionMode(value: unknown): \"coordinator\" | null {\n return value === \"coordinator\" ? \"coordinator\" : null;\n}\n\nexport function statusSessionMode(value: unknown): \"coordinator\" | \"direct\" {\n return normalizeSessionMode(value) ?? \"direct\";\n}\n\nexport function shouldAutoActivateSession(\n session: SessionRecord,\n defaultModel: string,\n pluginsEnabled: boolean | undefined | null,\n): boolean {\n const runtime = readSessionRuntimeConfig(session);\n return runtime.model === defaultModel\n && (pluginsEnabled == null || (runtime.pluginsEnabled ?? true) === pluginsEnabled);\n}\n\nexport function createDaemonClient(daemon: FrontendConfig[\"daemon\"]): OpenHarnessClient | null {\n if (!daemon?.url) return null;\n return new OpenHarnessClient({\n baseUrl: daemon.url,\n token: daemon.token ?? undefined,\n });\n}\n",
49
+ "import type { OpenHarnessClientState, PermissionRequestRecord } from \"@openharness/client\";\nimport { selectFirstPendingPermission } from \"@openharness/client\";\n\nexport function permissionToModal(request: PermissionRequestRecord): Record<string, unknown> {\n const input = request.payload.input && typeof request.payload.input === \"object\"\n ? (request.payload.input as Record<string, unknown>)\n : {};\n return {\n kind: \"permission\",\n request_id: request.id,\n tool_name: request.toolName,\n reason: typeof request.payload.reason === \"string\" ? request.payload.reason : null,\n input,\n };\n}\n\nexport function firstPendingPermission(\n state: OpenHarnessClientState,\n sessionId?: string,\n): PermissionRequestRecord | undefined {\n return selectFirstPendingPermission(state, sessionId);\n}\n",
50
+ "import {\n patchSessionRuntimeMetadata,\n type SessionRuntimeConfigPatch,\n type OpenHarnessClientState,\n type SessionBucket,\n type SessionRecord,\n type SyncEventUpdate,\n} from \"@openharness/client\";\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function sessionRuntimeMetadata(input: {\n model?: unknown;\n provider?: unknown;\n baseUrl?: unknown;\n apiFormat?: unknown;\n permissionMode?: unknown;\n maxTurns?: unknown;\n sessionMode?: unknown;\n pluginsEnabled?: unknown;\n}): Record<string, unknown> {\n const runtime: SessionRuntimeConfigPatch = {};\n if (typeof input.model === \"string\" && input.model) {\n runtime.model = input.model;\n }\n if (typeof input.provider === \"string\" && input.provider) {\n runtime.provider = input.provider;\n }\n if (typeof input.baseUrl === \"string\" && input.baseUrl) {\n runtime.baseUrl = input.baseUrl;\n }\n if (input.apiFormat === \"anthropic\" || input.apiFormat === \"openai\") {\n runtime.apiFormat = input.apiFormat;\n }\n if (input.permissionMode === \"default\" || input.permissionMode === \"plan\" || input.permissionMode === \"full_auto\") {\n runtime.permissionMode = input.permissionMode;\n }\n if (typeof input.maxTurns === \"number\" && Number.isFinite(input.maxTurns)) {\n runtime.maxTurns = input.maxTurns;\n }\n if (input.sessionMode === \"coordinator\" || input.sessionMode === \"direct\") {\n runtime.sessionMode = input.sessionMode;\n }\n if (typeof input.pluginsEnabled === \"boolean\") {\n runtime.pluginsEnabled = input.pluginsEnabled;\n }\n return patchSessionRuntimeMetadata({}, runtime);\n}\n\nexport function archiveClientSession(\n state: OpenHarnessClientState,\n sessionId: string,\n archivedAt: number\n): OpenHarnessClientState {\n const current = state.sessions[sessionId];\n if (!current || current.status === \"archived\") return state;\n const archived: SessionRecord = {\n ...current,\n status: \"archived\",\n archivedAt,\n updatedAt: Math.max(current.updatedAt, archivedAt),\n };\n const bucket = state.buckets[sessionId];\n return {\n ...state,\n sessions: { ...state.sessions, [sessionId]: archived },\n buckets: bucket\n ? { ...state.buckets, [sessionId]: { ...bucket, session: archived } }\n : state.buckets,\n };\n}\n\nexport function listTopLevelSessions(\n sessions: Iterable<SessionRecord>,\n activeSessionId?: string\n): SessionRecord[] {\n return [...sessions]\n .filter((session) => !session.parentId && session.status !== \"archived\")\n .sort((a, b) => {\n if (a.id === activeSessionId) return -1;\n if (b.id === activeSessionId) return 1;\n return b.updatedAt - a.updatedAt;\n });\n}\n\nexport function sessionSelectOptions(\n sessions: Iterable<SessionRecord>,\n activeSessionId?: string\n): Array<{ value: string; label: string; description: string }> {\n return listTopLevelSessions(sessions, activeSessionId).map((session) => ({\n value: session.id,\n label: `${session.id === activeSessionId ? \"* \" : \"\"}${session.title || session.id}`,\n description: `${session.model} | ${session.status}`,\n }));\n}\n\nexport type RecoverableRun = {\n id: string;\n error?: string;\n prompt: string;\n};\n\nexport function recoverableInterruptedRuns(bucket?: SessionBucket): RecoverableRun[] {\n if (!bucket) return [];\n const recoveredSourceRunIds = new Set(\n bucket.inputs.flatMap((input) =>\n isRecord(input.metadata.recovery) && typeof input.metadata.recovery.sourceRunId === \"string\"\n ? [input.metadata.recovery.sourceRunId]\n : [],\n ),\n );\n return Object.values(bucket.runs)\n .filter((run) => run.status === \"interrupted\" && !!run.inputId && !recoveredSourceRunIds.has(run.id))\n .sort((a, b) => b.updatedAt - a.updatedAt)\n .flatMap((run) => {\n const input = bucket.inputs.find((candidate) => candidate.id === run.inputId);\n return input ? [{ id: run.id, error: run.error, prompt: input.content }] : [];\n });\n}\n\nexport function shouldCoalesceClientState(update: SyncEventUpdate): boolean {\n return update.source === \"live\" && update.event?.type === \"session.message.part.delta\";\n}\n",
51
+ "import type { McpServerStatus } from \"@openharness/client\";\nimport type { McpServerSnapshot } from \"../../types\";\n\nexport function mcpServerSnapshot(server: McpServerStatus): McpServerSnapshot {\n return {\n name: server.name,\n state: server.status,\n ...(server.error || server.command ? { detail: server.error ?? server.command } : {}),\n tool_count: server.toolCount,\n resource_count: server.resourceCount,\n };\n}\n",
52
+ "import {\n createPromptRequestId,\n patchSessionRuntimeMetadata,\n type CommandCatalogEntry,\n type JobResource,\n type OpenHarnessClient,\n type OpenHarnessClientState,\n type SessionRecord,\n} from \"@openharness/client\";\n\nimport type { FrontendConfig } from \"../../types\";\nimport {\n beginJobList,\n mergeJobSnapshot,\n rejectJobList,\n resolveJobList,\n validateJobReadResult,\n validateJobSnapshot,\n validateJobSnapshots,\n type JobDetailRemoteState,\n type JobRemoteState,\n} from \"../../jobs/job-remote-state\";\nimport type { TuiAction, TuiSessionController } from \"../sessionController\";\nimport {\n dispatchSessionSlashCommand,\n parseSlashLine,\n} from \"../sessionSlashCommands\";\nimport {\n archiveClientSession,\n listTopLevelSessions,\n recoverableInterruptedRuns,\n sessionRuntimeMetadata,\n sessionSelectOptions,\n} from \"./view-model\";\nimport { normalizeSessionMode, statusSessionMode } from \"./connection\";\n\nexport const JOBS_AUXILIARY_SLASH_COMMANDS = new Set([\n \"/agents\",\n \"/background\",\n \"/doctor\",\n \"/jobs\",\n \"/stats\",\n]);\n\ntype ActionClient = Pick<\n OpenHarnessClient,\n | \"protocol\" | \"system\" | \"providers\" | \"auth\" | \"projects\"\n | \"plugins\" | \"development\" | \"sessions\" | \"jobs\" | \"permissions\"\n>;\n\nexport interface ActionDispatcherContext {\n clientRef: { current: ActionClient | null };\n activeSessionIdRef: { current: string | undefined };\n clientState: OpenHarnessClientState;\n setClientState: React.Dispatch<React.SetStateAction<OpenHarnessClientState>>;\n daemon: FrontendConfig[\"daemon\"];\n defaultRuntimeRef: { current: { model: string; provider?: string; baseUrl?: string; apiFormat?: \"anthropic\" | \"openai\" } };\n nextSessionModeRef: { current: \"coordinator\" | \"direct\" };\n statusRef: { current: Record<string, unknown> };\n setStatus: React.Dispatch<React.SetStateAction<Record<string, unknown>>>;\n setStatusAndDefault: (value: React.SetStateAction<Record<string, unknown>>) => void;\n listedSessionsRef: { current: Record<string, SessionRecord> };\n commandCatalogRef: { current: CommandCatalogEntry[] };\n pendingNewSessionTitleRef: { current: string | undefined };\n localBusy: boolean;\n setLocalBusy: (busy: boolean) => void;\n setSubmittedRun: (run: { sessionId: string; runId: string } | null) => void;\n setModal: (modal: Record<string, unknown> | null) => void;\n setSelectRequest: React.Dispatch<React.SetStateAction<TuiSessionController[\"selectRequest\"]>>;\n clearDisplayRequest: () => void;\n showDisplayRequest: (request: NonNullable<TuiSessionController[\"displayRequest\"]>) => void;\n pushSystem: (text: string) => void;\n reportError: (message: string) => void;\n reportAuxiliaryError: (scope: string, error: unknown) => void;\n activateSession: (session: SessionRecord) => void;\n returnToHome: (title?: string) => void;\n refreshJobs: () => Promise<void>;\n loadJobDetail: (client: Pick<OpenHarnessClient, \"jobs\">, sessionId: string, jobId: string) => Promise<void>;\n createAndSwitchSession: (title?: string) => Promise<SessionRecord | undefined>;\n cacheFirstRead: (request: import(\"@openharness/client\").PresentationReadRequest) => void;\n jobStateRef: { current: JobRemoteState };\n setJobState: React.Dispatch<React.SetStateAction<JobRemoteState>>;\n jobDetailStateRef: { current: JobDetailRemoteState };\n jobControlGenerationRef: { current: number };\n jobDetailGenerationRef: { current: number };\n jobControlAbortRef: { current: AbortController | null };\n}\n\nexport async function executeTuiAction(\n action: TuiAction,\n ctx: ActionDispatcherContext,\n): Promise<void> {\n const client = ctx.clientRef.current;\n let sessionId = ctx.activeSessionIdRef.current;\n const runtimeAction = action as TuiAction | { type?: unknown };\n const runtimeType = typeof runtimeAction.type === \"string\" ? runtimeAction.type : \"unknown\";\n\n switch (action.type) {\n case \"select_model\": {\n if (!client) return;\n const model = action.model.trim();\n const provider = action.provider?.trim() ?? \"\";\n if (!model) return;\n\n if (sessionId) {\n const session = await client.sessions.update(sessionId, {\n metadata: patchSessionRuntimeMetadata(\n {},\n {\n model,\n ...(provider ? { provider } : {}),\n },\n ),\n });\n ctx.activateSession(session);\n } else {\n const settingsPatch: Record<string, unknown> = { model };\n if (provider) settingsPatch.provider = provider;\n await client.system.patchSettings(settingsPatch);\n ctx.defaultRuntimeRef.current = {\n ...ctx.defaultRuntimeRef.current,\n model,\n ...(provider ? { provider } : {}),\n };\n ctx.setStatus((current) => ({\n ...current,\n model,\n ...(provider ? { provider } : {}),\n }));\n }\n ctx.pushSystem(`Model selected: ${model}`);\n return;\n }\n\n case \"submit_line\": {\n if (!client) return;\n const line = action.line;\n const slash = parseSlashLine(line);\n\n const newSession = line.match(/^\\/new(?:\\s+(.+))?$/);\n if (newSession) {\n ctx.returnToHome(newSession[1]);\n return;\n }\n const switchSession = line.match(/^\\/sessions\\s+open\\s+(.+)$/);\n if (switchSession?.[1]) {\n const target = switchSession[1].trim();\n ctx.setLocalBusy(false);\n ctx.setSubmittedRun(null);\n ctx.pendingNewSessionTitleRef.current = undefined;\n ctx.setSelectRequest(null);\n const knownSession = ctx.clientState.sessions[target] ?? ctx.listedSessionsRef.current[target];\n if (knownSession) {\n ctx.activateSession(knownSession);\n return;\n }\n const session = await client.sessions.get(target);\n ctx.activateSession(session);\n return;\n }\n\n if (slash?.name === \"/resume\") {\n if (!sessionId) {\n ctx.pushSystem(\"No active session to resume.\");\n return;\n }\n const recoverable = recoverableInterruptedRuns(ctx.clientState.buckets[sessionId]);\n if (!slash.args) {\n if (recoverable.length === 0) {\n ctx.pushSystem(\"No interrupted prompt runs are available to resume.\");\n return;\n }\n ctx.clearDisplayRequest();\n ctx.setSelectRequest({\n title: \"Resume interrupted run\",\n submitPrefix: \"/resume \",\n options: recoverable.map((run) => ({\n value: run.id,\n label: run.prompt.length > 72 ? `${run.prompt.slice(0, 72)}...` : run.prompt,\n description: run.error ?? \"Interrupted before completion\",\n })),\n });\n return;\n }\n const runId = slash.args.trim();\n if (!recoverable.some((run) => run.id === runId)) {\n ctx.pushSystem(`Run is not available for recovery: ${runId}`);\n return;\n }\n ctx.setLocalBusy(true);\n const response = await client.sessions.resumeInterruptedRun(sessionId, runId, { id: createPromptRequestId() });\n ctx.setLocalBusy(false);\n ctx.setSubmittedRun(response.run ? { sessionId, runId: response.run.id } : null);\n ctx.setSelectRequest(null);\n return;\n }\n\n let slashResult: Awaited<ReturnType<typeof dispatchSessionSlashCommand>>;\n try {\n slashResult = await dispatchSessionSlashCommand(slash, {\n client,\n sessionId,\n pushSystem: ctx.pushSystem,\n presentSystem: (title, content) => ctx.showDisplayRequest({ title, content }),\n statusRef: ctx.statusRef,\n commandCatalogRef: ctx.commandCatalogRef,\n clientState: ctx.clientState,\n localBusy: ctx.localBusy,\n cacheFirstRead: ctx.cacheFirstRead,\n daemon: ctx.daemon,\n setStatus: ctx.setStatusAndDefault,\n });\n } catch (error) {\n if (slash && JOBS_AUXILIARY_SLASH_COMMANDS.has(slash.name)) {\n ctx.reportAuxiliaryError(\"Jobs\", error);\n return;\n }\n throw error;\n }\n if (slashResult === \"handled\") {\n if (slash?.name === \"/background\" && slash.args.trim() && sessionId) {\n await ctx.refreshJobs();\n }\n return;\n }\n if (slashResult === \"local_ui_ignored\") return;\n\n if (slash) {\n const catalogEntry = ctx.commandCatalogRef.current.find((entry) => entry.name === slash.name);\n if (catalogEntry?.kind === \"template\") {\n if (!sessionId) return;\n ctx.setLocalBusy(true);\n const response = await client.sessions.admitPrompt(sessionId, {\n id: createPromptRequestId(),\n items: [\n {\n type: \"skill\",\n name: catalogEntry.skillName,\n path: catalogEntry.path,\n ...(catalogEntry.displayName ? { displayName: catalogEntry.displayName } : {}),\n ...(catalogEntry.source && catalogEntry.source !== \"builtin\" ? { source: catalogEntry.source } : {}),\n },\n ...(slash.args ? [{ type: \"text\" as const, text: ` ${slash.args}` }] : []),\n ],\n });\n ctx.setLocalBusy(false);\n ctx.setSubmittedRun(response.run ? { sessionId, runId: response.run.id } : null);\n return;\n }\n ctx.pushSystem(`Unknown command: ${slash.name}`);\n return;\n }\n\n if (!sessionId) {\n const session = await ctx.createAndSwitchSession(ctx.pendingNewSessionTitleRef.current);\n if (!session) return;\n sessionId = session.id;\n }\n ctx.setLocalBusy(true);\n const response = await client.sessions.admitPrompt(sessionId, {\n id: createPromptRequestId(),\n items: [{ type: \"text\", text: line }],\n });\n ctx.setLocalBusy(false);\n ctx.setSubmittedRun(response.run ? { sessionId, runId: response.run.id } : null);\n return;\n }\n\n case \"delete_session\": {\n if (!client) return;\n const target = action.session_id;\n if (!target) return;\n const archived = await client.sessions.archive(target);\n const archivedAt = archived.archivedAt ?? Date.now();\n delete ctx.listedSessionsRef.current[target];\n ctx.setClientState((current) => archiveClientSession(current, target, archivedAt));\n ctx.setLocalBusy(false);\n ctx.setSubmittedRun(null);\n ctx.setSelectRequest((current) =>\n current\n ? {\n ...current,\n options: current.options.filter((option) => option.value !== target),\n }\n : current,\n );\n if (target === ctx.activeSessionIdRef.current) {\n const remaining = listTopLevelSessions(\n Object.values({\n ...ctx.clientState.sessions,\n ...ctx.listedSessionsRef.current,\n [target]: { ...archived, status: \"archived\", archivedAt },\n }),\n );\n if (remaining[0]) {\n ctx.activateSession(remaining[0]);\n } else {\n const sessions = await client.sessions.list({\n cwd: ctx.daemon?.cwd ?? undefined,\n includeArchived: false,\n limit: 20,\n });\n ctx.listedSessionsRef.current = Object.fromEntries(sessions.map((session) => [session.id, session]));\n const remoteNext = sessions.find((session) => session.id !== target);\n if (remoteNext) ctx.activateSession(remoteNext);\n else ctx.returnToHome();\n }\n }\n return;\n }\n\n case \"interrupt\": {\n if (!client) return;\n if (sessionId) await client.sessions.interrupt(sessionId);\n ctx.setLocalBusy(false);\n ctx.setSubmittedRun(null);\n return;\n }\n\n case \"permission_response\": {\n if (!client) return;\n const requestId = action.request_id;\n const allowed = action.allowed;\n await client.permissions.reply(requestId, {\n status: allowed ? \"approved\" : \"denied\",\n decision: action.scope === \"session\" ? \"session\" : \"once\",\n clientId: \"tui\",\n });\n ctx.setModal(null);\n return;\n }\n\n case \"list_sessions\": {\n if (!client) return;\n const cachedSessions = {\n ...ctx.listedSessionsRef.current,\n ...ctx.clientState.sessions,\n };\n const cachedOptions = sessionSelectOptions(Object.values(cachedSessions), ctx.activeSessionIdRef.current);\n ctx.clearDisplayRequest();\n ctx.setSelectRequest({\n title: \"Sessions\",\n submitPrefix: \"/sessions open \",\n options: cachedOptions,\n });\n const sessions = await client.sessions.list({\n cwd: ctx.daemon?.cwd ?? undefined,\n includeArchived: false,\n limit: 20,\n });\n ctx.listedSessionsRef.current = Object.fromEntries(sessions.map((session) => [session.id, session]));\n ctx.setSelectRequest((current) =>\n current?.submitPrefix === \"/sessions open \"\n ? {\n title: \"Sessions\",\n submitPrefix: \"/sessions open \",\n options: sessionSelectOptions(sessions, ctx.activeSessionIdRef.current),\n }\n : current,\n );\n return;\n }\n\n case \"set_permission_mode\": {\n if (!client) return;\n const mode = action.permission_mode;\n ctx.setStatus((current) => ({ ...current, permission_mode: mode }));\n if (sessionId) {\n await client.sessions.update(sessionId, {\n metadata: patchSessionRuntimeMetadata({}, { permissionMode: mode }),\n });\n }\n return;\n }\n\n case \"question_response\": {\n if (!client) return;\n ctx.reportError(\"Interactive question responses are not available through the daemon client.\");\n return;\n }\n\n case \"set_session_mode\": {\n if (!client) return;\n if (sessionId) {\n ctx.pushSystem(\"Coordinator mode can only be changed before starting a new session. Use /new first.\");\n return;\n }\n const mode = normalizeSessionMode(action.session_mode);\n ctx.nextSessionModeRef.current = statusSessionMode(mode);\n ctx.setStatus((current) => ({\n ...current,\n session_mode: ctx.nextSessionModeRef.current,\n }));\n return;\n }\n\n case \"job_request\": {\n if (!client) {\n ctx.reportAuxiliaryError(\"Jobs\", \"The daemon client is not connected.\");\n return;\n }\n const currentSessionId = ctx.activeSessionIdRef.current;\n if (!currentSessionId) return;\n try {\n switch (action.job_action) {\n case \"open\":\n await ctx.refreshJobs();\n return;\n case \"refresh\": {\n ctx.jobControlGenerationRef.current += 1;\n ctx.jobControlAbortRef.current?.abort();\n ctx.jobControlAbortRef.current = null;\n const detail = ctx.jobDetailStateRef.current;\n const detailJobId = detail.status === \"idle\" ? undefined : detail.jobId;\n await Promise.all([\n ctx.refreshJobs(),\n detailJobId\n ? ctx.loadJobDetail(client, currentSessionId, detailJobId)\n : Promise.resolve(),\n ]);\n return;\n }\n case \"select\":\n ctx.jobControlGenerationRef.current += 1;\n ctx.jobControlAbortRef.current?.abort();\n ctx.jobControlAbortRef.current = null;\n await ctx.loadJobDetail(client, currentSessionId, action.job_id);\n return;\n case \"cancel\": {\n const controlGeneration = ++ctx.jobControlGenerationRef.current;\n const detailGeneration = ctx.jobDetailGenerationRef.current;\n ctx.jobControlAbortRef.current?.abort();\n const controller = new AbortController();\n ctx.jobControlAbortRef.current = controller;\n let response: Awaited<ReturnType<JobResource[\"cancel\"]>>;\n try {\n response = await client.jobs.cancel(\n action.job_id,\n {\n sessionId: currentSessionId,\n reason: action.reason,\n },\n { signal: controller.signal },\n );\n } catch (error) {\n if (ctx.activeSessionIdRef.current !== currentSessionId) return;\n if (controller.signal.aborted || ctx.jobControlGenerationRef.current !== controlGeneration) {\n await ctx.refreshJobs();\n return;\n }\n throw error;\n } finally {\n if (ctx.jobControlAbortRef.current === controller) ctx.jobControlAbortRef.current = null;\n }\n if (ctx.activeSessionIdRef.current !== currentSessionId) return;\n const ownsDetail = !controller.signal.aborted &&\n ctx.jobControlGenerationRef.current === controlGeneration &&\n ctx.jobDetailGenerationRef.current === detailGeneration;\n const validated = validateJobSnapshot(response, currentSessionId, action.job_id);\n if (!validated.snapshot) {\n if (controller.signal.aborted || ctx.jobControlGenerationRef.current !== controlGeneration) {\n await ctx.refreshJobs();\n return;\n }\n throw new Error(validated.error ?? \"Job snapshot has invalid fields.\");\n }\n const snapshot = validated.snapshot;\n const next = mergeJobSnapshot(ctx.jobStateRef.current, snapshot, Date.now());\n ctx.jobStateRef.current = next;\n ctx.setJobState(next);\n if (ownsDetail) {\n await ctx.loadJobDetail(client, currentSessionId, action.job_id);\n }\n await ctx.refreshJobs();\n return;\n }\n case \"send\": {\n const controlGeneration = ++ctx.jobControlGenerationRef.current;\n const detailGeneration = ctx.jobDetailGenerationRef.current;\n ctx.jobControlAbortRef.current?.abort();\n const controller = new AbortController();\n ctx.jobControlAbortRef.current = controller;\n try {\n await client.jobs.send(\n action.job_id,\n {\n sessionId: currentSessionId,\n data: action.data,\n },\n { signal: controller.signal },\n );\n } catch (error) {\n if (ctx.activeSessionIdRef.current !== currentSessionId) return;\n if (controller.signal.aborted || ctx.jobControlGenerationRef.current !== controlGeneration) {\n await ctx.refreshJobs();\n return;\n }\n throw error;\n } finally {\n if (ctx.jobControlAbortRef.current === controller) ctx.jobControlAbortRef.current = null;\n }\n if (ctx.activeSessionIdRef.current !== currentSessionId) return;\n const ownsDetail = !controller.signal.aborted &&\n ctx.jobControlGenerationRef.current === controlGeneration &&\n ctx.jobDetailGenerationRef.current === detailGeneration;\n if (ownsDetail) {\n await ctx.loadJobDetail(client, currentSessionId, action.job_id);\n }\n await ctx.refreshJobs();\n return;\n }\n }\n } catch (error) {\n ctx.reportAuxiliaryError(\"Jobs\", error);\n return;\n }\n }\n\n default: {\n const exhaustive: never = action;\n void exhaustive;\n ctx.reportError(`Unsupported TUI action: ${runtimeType}`);\n return;\n }\n }\n}\n",
53
+ "export * from \"./connection\";\nexport * from \"./permissions\";\nexport * from \"./view-model\";\nexport * from \"./mcp\";\nexport * from \"./actions\";\n",
54
+ "import { useCallback, useEffect, useMemo, useRef, useState, type SetStateAction } from \"react\";\nimport {\n OpenHarnessClient,\n SessionSyncController,\n createPromptRequestId,\n createInitialClientState,\n readSessionRuntimeConfig,\n type CommandCatalogEntry,\n type ModelProviderInfo,\n type OpenHarnessClientState,\n type PresentationReadRequest,\n type SessionRecord,\n} from \"@openharness/client\";\n\nimport type { FrontendConfig, McpServerSnapshot, TranscriptItem } from \"../types\";\nimport {\n beginJobList,\n rejectJobList,\n resolveJobList,\n validateJobReadResult,\n validateJobSnapshots,\n type JobDetailRemoteState,\n type JobRemoteState,\n} from \"../jobs/job-remote-state\";\nimport type { TuiAction, TuiSessionController } from \"./sessionController\";\nimport { bucketToTranscript, splitStreamingAssistant } from \"./transcript\";\nimport {\n hasActiveRun,\n mergeCommandDetails,\n} from \"./sessionSlashCommands\";\nimport {\n createDaemonClient,\n executeTuiAction,\n firstPendingPermission,\n mcpServerSnapshot,\n permissionToModal,\n recoverableInterruptedRuns,\n sessionRuntimeMetadata,\n shouldAutoActivateSession,\n shouldCoalesceClientState,\n statusSessionMode,\n stringSetting,\n type DefaultRuntimeSettings,\n} from \"./sync-submodules\";\n\nexport { sessionRuntimeMetadata, shouldAutoActivateSession } from \"./sync-submodules\";\n\ntype DisplayRequest = NonNullable<TuiSessionController[\"displayRequest\"]>;\ntype PresentationCacheEntry = {\n title: string;\n content: string;\n updatedAt: number;\n};\n\nconst LIVE_TEXT_DELTA_FLUSH_MS = 33;\nconst PRESENTATION_LOADING_TEXT = \"Loading...\";\n\nexport function useServerSync(config: FrontendConfig, onError?: (message: string) => void): TuiSessionController {\n const daemon = config.daemon;\n const [clientState, setClientState] = useState<OpenHarnessClientState>(() => createInitialClientState());\n const [activeSessionId, setActiveSessionId] = useState<string | undefined>();\n const [status, setStatus] = useState<Record<string, unknown>>({\n permission_mode: daemon?.permissionMode ?? \"default\",\n model: daemon?.model ?? \"default\",\n session_mode: statusSessionMode(daemon?.sessionMode),\n ...(typeof daemon?.maxTurns === \"number\" ? { max_turns: daemon.maxTurns } : {}),\n });\n const [modal, setModal] = useState<Record<string, unknown> | null>(null);\n const [selectRequest, setSelectRequest] = useState<TuiSessionController[\"selectRequest\"]>(null);\n const [displayRequest, setDisplayRequest] = useState<TuiSessionController[\"displayRequest\"]>(null);\n const [localBusy, setLocalBusy] = useState(false);\n const [submittedRun, setSubmittedRun] = useState<{\n sessionId: string;\n runId: string;\n } | null>(null);\n const [ready, setReady] = useState(false);\n const [globalSystemItems, setGlobalSystemItems] = useState<TranscriptItem[]>([]);\n const [systemItemsBySession, setSystemItemsBySession] = useState<Record<string, TranscriptItem[]>>({});\n const [commandCatalog, setCommandCatalog] = useState<CommandCatalogEntry[]>([]);\n const [jobState, setJobState] = useState<JobRemoteState>({ status: \"idle\", jobs: [] });\n const [jobDetailState, setJobDetailState] = useState<JobDetailRemoteState>({ status: \"idle\" });\n const [mcpServers, setMcpServers] = useState<McpServerSnapshot[]>([]);\n\n const clientRef = useRef<OpenHarnessClient | null>(null);\n const activeSessionIdRef = useRef<string | undefined>(undefined);\n const commandCatalogRef = useRef<CommandCatalogEntry[]>([]);\n const defaultRuntimeRef = useRef<DefaultRuntimeSettings>({\n model: daemon?.model ?? \"default\",\n });\n const nextSessionModeRef = useRef<\"coordinator\" | \"direct\">(statusSessionMode(daemon?.sessionMode));\n const statusRef = useRef(status);\n const sentInitialPromptRef = useRef(false);\n const pendingNewSessionTitleRef = useRef<string | undefined>(undefined);\n const listedSessionsRef = useRef<Record<string, SessionRecord>>({});\n const presentationCacheRef = useRef<Record<string, PresentationCacheEntry>>({});\n const displayRequestRef = useRef<TuiSessionController[\"displayRequest\"]>(null);\n const pendingClientStateRef = useRef<OpenHarnessClientState | null>(null);\n const pendingClientStateTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const shownPermissionIdRef = useRef<string | undefined>(undefined);\n const auxiliaryGenerationRef = useRef(0);\n const syncGenerationRef = useRef(0);\n const jobStateRef = useRef(jobState);\n const jobDetailStateRef = useRef(jobDetailState);\n const jobGenerationRef = useRef(0);\n const jobDetailGenerationRef = useRef(0);\n const jobsAbortRef = useRef<AbortController | null>(null);\n const jobDetailAbortRef = useRef<AbortController | null>(null);\n const jobControlAbortRef = useRef<AbortController | null>(null);\n const jobControlGenerationRef = useRef(0);\n const mcpAbortRef = useRef<AbortController | null>(null);\n const onErrorRef = useRef(onError);\n onErrorRef.current = onError;\n\n useEffect(() => {\n activeSessionIdRef.current = activeSessionId;\n }, [activeSessionId]);\n\n useEffect(() => {\n commandCatalogRef.current = commandCatalog;\n }, [commandCatalog]);\n\n useEffect(() => {\n statusRef.current = status;\n }, [status]);\n\n useEffect(() => {\n displayRequestRef.current = displayRequest;\n }, [displayRequest]);\n\n useEffect(() => {\n jobStateRef.current = jobState;\n }, [jobState]);\n\n useEffect(() => {\n jobDetailStateRef.current = jobDetailState;\n }, [jobDetailState]);\n\n const clearDisplayRequest = useCallback(() => {\n displayRequestRef.current = null;\n setDisplayRequest(null);\n }, []);\n\n const showDisplayRequest = useCallback((request: DisplayRequest) => {\n displayRequestRef.current = request;\n setSelectRequest(null);\n setDisplayRequest(request);\n }, []);\n\n const clearAuxiliaryState = useCallback((): void => {\n auxiliaryGenerationRef.current += 1;\n jobGenerationRef.current += 1;\n jobDetailGenerationRef.current += 1;\n jobControlGenerationRef.current += 1;\n mcpAbortRef.current?.abort();\n jobsAbortRef.current?.abort();\n jobDetailAbortRef.current?.abort();\n jobControlAbortRef.current?.abort();\n mcpAbortRef.current = null;\n jobsAbortRef.current = null;\n jobDetailAbortRef.current = null;\n jobControlAbortRef.current = null;\n const emptyJobState: JobRemoteState = { status: \"idle\", jobs: [] };\n const emptyJobDetailState: JobDetailRemoteState = { status: \"idle\" };\n jobStateRef.current = emptyJobState;\n jobDetailStateRef.current = emptyJobDetailState;\n setJobState(emptyJobState);\n setJobDetailState(emptyJobDetailState);\n setMcpServers([]);\n }, []);\n\n const setStatusAndDefault = useCallback((value: SetStateAction<Record<string, unknown>>) => {\n setStatus((current) => {\n const next = typeof value === \"function\" ? value(current) : value;\n if (typeof next.model === \"string\" && !activeSessionIdRef.current) {\n defaultRuntimeRef.current = {\n ...defaultRuntimeRef.current,\n model: next.model,\n ...(typeof next.provider === \"string\" ? { provider: next.provider } : {}),\n ...(typeof next.baseUrl === \"string\" ? { baseUrl: next.baseUrl } : {}),\n ...(next.apiFormat === \"anthropic\" || next.apiFormat === \"openai\" ? { apiFormat: next.apiFormat } : {}),\n };\n }\n return next;\n });\n }, []);\n\n const pushSystem = useCallback((text: string) => {\n const sessionId = activeSessionIdRef.current;\n if (!sessionId) {\n setGlobalSystemItems((items) => [...items, { role: \"system\", text }]);\n return;\n }\n setSystemItemsBySession((itemsBySession) => ({\n ...itemsBySession,\n [sessionId]: [...(itemsBySession[sessionId] ?? []), { role: \"system\", text }],\n }));\n }, []);\n\n const reportError = useCallback(\n (message: string) => {\n pushSystem(`error: ${message}`);\n onErrorRef.current?.(message);\n setLocalBusy(false);\n setSubmittedRun(null);\n },\n [pushSystem],\n );\n\n const reportAuxiliaryError = useCallback((scope: string, error: unknown): void => {\n const message = error instanceof Error ? error.message : String(error);\n onErrorRef.current?.(`${scope}: ${message}`);\n }, []);\n\n const refreshJobs = useCallback(async (): Promise<void> => {\n const client = clientRef.current;\n const sessionId = activeSessionIdRef.current;\n const generation = ++jobGenerationRef.current;\n if (!client || !sessionId) {\n const idle: JobRemoteState = { status: \"idle\", jobs: [] };\n jobStateRef.current = idle;\n setJobState(idle);\n return;\n }\n\n jobsAbortRef.current?.abort();\n const controller = new AbortController();\n jobsAbortRef.current = controller;\n setJobState((current) => {\n const next = beginJobList(current);\n jobStateRef.current = next;\n return next;\n });\n\n try {\n const response = await client.jobs.list({\n sessionId,\n includeFinished: true,\n limit: 100,\n signal: controller.signal,\n });\n if (activeSessionIdRef.current !== sessionId || jobGenerationRef.current !== generation) return;\n const validated = validateJobSnapshots(response, sessionId);\n if (validated.error) {\n const validationError = validated.error;\n const now = Date.now();\n setJobState((current) => {\n const next: JobRemoteState = validated.jobs.length > 0\n ? {\n ...resolveJobList(validated.jobs, now, current),\n status: \"error\",\n error: validationError,\n }\n : rejectJobList(current, validationError);\n jobStateRef.current = next;\n return next;\n });\n reportAuxiliaryError(\"Jobs\", validationError);\n } else {\n const next = resolveJobList(validated.jobs, Date.now(), jobStateRef.current);\n jobStateRef.current = next;\n setJobState(next);\n }\n } catch (error) {\n if (controller.signal.aborted) return;\n if (activeSessionIdRef.current !== sessionId || jobGenerationRef.current !== generation) return;\n const message = error instanceof Error ? error.message : String(error);\n setJobState((current) => {\n const next = rejectJobList(current, message);\n jobStateRef.current = next;\n return next;\n });\n reportAuxiliaryError(\"Jobs\", message);\n } finally {\n if (jobsAbortRef.current === controller) jobsAbortRef.current = null;\n }\n }, [reportAuxiliaryError]);\n\n const loadJobDetail = useCallback(async (\n client: Pick<OpenHarnessClient, \"jobs\">,\n sessionId: string,\n jobId: string,\n ): Promise<void> => {\n const generation = ++jobDetailGenerationRef.current;\n jobDetailAbortRef.current?.abort();\n const controller = new AbortController();\n jobDetailAbortRef.current = controller;\n const current = jobDetailStateRef.current;\n const previous = current.status !== \"idle\" && current.jobId === jobId\n ? current.status === \"ready\"\n ? current.result\n : current.previous\n : undefined;\n const loading: JobDetailRemoteState = {\n status: \"loading\",\n jobId,\n ...(previous ? { previous } : {}),\n };\n jobDetailStateRef.current = loading;\n setJobDetailState(loading);\n\n try {\n const response = await client.jobs.read(jobId, {\n sessionId,\n signal: controller.signal,\n });\n if (activeSessionIdRef.current !== sessionId || jobDetailGenerationRef.current !== generation) return;\n const validated = validateJobReadResult(response, sessionId, jobId);\n if (!validated.result) {\n throw new Error(validated.error ?? `Job read response for \"${jobId}\" has invalid fields.`);\n }\n const result = validated.result;\n const readyState: JobDetailRemoteState = {\n status: \"ready\",\n jobId,\n result,\n refreshedAt: Date.now(),\n };\n jobDetailStateRef.current = readyState;\n setJobDetailState(readyState);\n } catch (error) {\n if (controller.signal.aborted) return;\n if (activeSessionIdRef.current !== sessionId || jobDetailGenerationRef.current !== generation) return;\n const message = error instanceof Error ? error.message : String(error);\n const errorState: JobDetailRemoteState = {\n status: \"error\",\n jobId,\n error: message,\n ...(previous ? { previous } : {}),\n };\n jobDetailStateRef.current = errorState;\n setJobDetailState(errorState);\n reportAuxiliaryError(\"Jobs\", message);\n } finally {\n if (jobDetailAbortRef.current === controller) jobDetailAbortRef.current = null;\n }\n }, [reportAuxiliaryError]);\n\n const loadModels = useCallback(async (): Promise<ModelProviderInfo[]> => {\n const client = clientRef.current;\n if (!client) return [];\n return await client.providers.listModels();\n }, []);\n\n const cacheFirstRead = useCallback(\n (request: PresentationReadRequest): void => {\n const cached = presentationCacheRef.current[request.key];\n showDisplayRequest({\n key: request.key,\n title: request.title,\n content: cached?.content ?? PRESENTATION_LOADING_TEXT,\n });\n\n void request\n .load()\n .then((content) => {\n presentationCacheRef.current = {\n ...presentationCacheRef.current,\n [request.key]: {\n title: request.title,\n content,\n updatedAt: Date.now(),\n },\n };\n if (displayRequestRef.current?.key !== request.key) return;\n showDisplayRequest({\n key: request.key,\n title: request.title,\n content,\n });\n })\n .catch((error) => {\n const message = error instanceof Error ? error.message : String(error);\n const content = cached ? `${cached.content}\\n\\nRefresh failed: ${message}` : `Failed to load ${request.title}: ${message}`;\n if (displayRequestRef.current?.key !== request.key) return;\n showDisplayRequest({\n key: request.key,\n title: request.title,\n content,\n });\n });\n },\n [showDisplayRequest],\n );\n\n const clearPendingClientState = useCallback(() => {\n if (pendingClientStateTimerRef.current) {\n clearTimeout(pendingClientStateTimerRef.current);\n pendingClientStateTimerRef.current = null;\n }\n pendingClientStateRef.current = null;\n }, []);\n\n const commitClientState = useCallback(\n (state: OpenHarnessClientState, coalesce: boolean) => {\n if (!coalesce) {\n clearPendingClientState();\n setClientState(state);\n return;\n }\n\n pendingClientStateRef.current = state;\n if (pendingClientStateTimerRef.current) return;\n pendingClientStateTimerRef.current = setTimeout(() => {\n pendingClientStateTimerRef.current = null;\n const pending = pendingClientStateRef.current;\n pendingClientStateRef.current = null;\n if (pending) setClientState(pending);\n }, LIVE_TEXT_DELTA_FLUSH_MS);\n },\n [clearPendingClientState],\n );\n\n useEffect(() => clearPendingClientState, [clearPendingClientState]);\n\n const activateSession = useCallback(\n (session: SessionRecord): void => {\n const runtime = readSessionRuntimeConfig(session, defaultRuntimeRef.current);\n activeSessionIdRef.current = session.id;\n setActiveSessionId(session.id);\n clearAuxiliaryState();\n setStatus((current) => ({\n ...current,\n model: runtime.model,\n ...(runtime.provider ? { provider: runtime.provider } : {}),\n session_id: session.id,\n cwd: session.cwd,\n permission_mode: typeof runtime.permissionMode === \"string\" ? runtime.permissionMode : current.permission_mode,\n ...(typeof runtime.maxTurns === \"number\" ? { max_turns: runtime.maxTurns } : {}),\n session_mode: statusSessionMode(runtime.sessionMode),\n }));\n },\n [clearAuxiliaryState],\n );\n\n const returnToHome = useCallback(\n (title?: string): void => {\n pendingNewSessionTitleRef.current = title?.trim() || undefined;\n activeSessionIdRef.current = undefined;\n setActiveSessionId(undefined);\n clearAuxiliaryState();\n setLocalBusy(false);\n setSubmittedRun(null);\n setSelectRequest(null);\n clearDisplayRequest();\n setModal(null);\n setStatus((current) => {\n const next = { ...current };\n delete next.session_id;\n next.model = defaultRuntimeRef.current.model;\n if (defaultRuntimeRef.current.provider) next.provider = defaultRuntimeRef.current.provider;\n else delete next.provider;\n next.session_mode = nextSessionModeRef.current;\n return next;\n });\n },\n [clearAuxiliaryState, clearDisplayRequest],\n );\n\n useEffect(() => {\n if (!daemon?.url) {\n setReady(true);\n reportError(\"Daemon URL is required for TUI. Launch with `ohs` or `ohs --tui` so the CLI can start or attach the daemon.\");\n return;\n }\n let cancelled = false;\n const client = createDaemonClient(daemon);\n if (!client) return;\n clientRef.current = client;\n\n void (async () => {\n try {\n await client.protocol.health();\n const cwd = daemon.cwd ?? process.cwd();\n const [settings, sessions, commands] = await Promise.all([\n client.system.getSettings().catch(() => ({}) as Record<string, unknown>),\n client.sessions.list({ cwd, limit: 20 }),\n client.system.listCommands({ cwd }).catch(() => [] as CommandCatalogEntry[]),\n ]);\n const model = daemon.model ?? stringSetting(settings.model) ?? \"default\";\n const provider = stringSetting(settings.provider);\n const baseUrl = stringSetting(settings.baseUrl);\n const apiFormat = settings.apiFormat === \"anthropic\" || settings.apiFormat === \"openai\" ? settings.apiFormat : undefined;\n defaultRuntimeRef.current = {\n model,\n ...(provider ? { provider } : {}),\n ...(baseUrl ? { baseUrl } : {}),\n ...(apiFormat ? { apiFormat } : {}),\n };\n if (cancelled) return;\n listedSessionsRef.current = Object.fromEntries(sessions.map((session) => [session.id, session]));\n setCommandCatalog(commands);\n setStatus((current) => ({\n ...current,\n model,\n ...(provider ? { provider } : {}),\n cwd,\n permission_mode: daemon?.permissionMode ?? current.permission_mode,\n ...(typeof daemon?.maxTurns === \"number\" ? { max_turns: daemon.maxTurns } : {}),\n session_mode: statusSessionMode(daemon?.sessionMode),\n }));\n const session = sessions[0];\n if (session && shouldAutoActivateSession(session, model, daemon?.pluginsEnabled)) {\n activateSession(session);\n void client.sessions.get(session.id).catch(() => {});\n }\n setReady(true);\n } catch (error) {\n if (cancelled) return;\n setReady(true);\n reportError(error instanceof Error ? error.message : String(error));\n }\n })();\n\n return () => {\n cancelled = true;\n clientRef.current = null;\n };\n }, [activateSession, daemon?.cwd, daemon?.maxTurns, daemon?.model, daemon?.permissionMode, daemon?.pluginsEnabled, daemon?.sessionMode, daemon?.token, daemon?.url, reportError]);\n\n useEffect(() => {\n const client = clientRef.current;\n if (!client || !activeSessionId) return;\n const generation = ++syncGenerationRef.current;\n let reconnectNotice = false;\n\n const controller = new SessionSyncController({\n client,\n sessionId: activeSessionId,\n generation,\n onUpdate: (update, gen) => {\n if (gen !== syncGenerationRef.current) return;\n if (update.source === \"reconnecting\") {\n if (!reconnectNotice) {\n reconnectNotice = true;\n pushSystem(\"reconnecting...\");\n }\n return;\n }\n if (reconnectNotice) reconnectNotice = false;\n commitClientState(update.state, shouldCoalesceClientState(update));\n },\n onError: (error, gen) => {\n if (gen !== syncGenerationRef.current) return;\n reportError(error instanceof Error ? error.message : String(error));\n },\n });\n\n void controller.start();\n\n return () => {\n clearPendingClientState();\n controller.abort();\n };\n }, [\n activeSessionId,\n clearPendingClientState,\n commitClientState,\n daemon?.token,\n daemon?.url,\n pushSystem,\n reportError,\n ]);\n\n useEffect(() => {\n const client = clientRef.current;\n const sessionId = activeSessionId;\n if (!client || !sessionId) return;\n const generation = ++auxiliaryGenerationRef.current;\n mcpAbortRef.current?.abort();\n const controller = new AbortController();\n mcpAbortRef.current = controller;\n const isCurrent = () => activeSessionIdRef.current === sessionId && auxiliaryGenerationRef.current === generation;\n\n void client.system.getSessionMcp(sessionId, { signal: controller.signal })\n .then((servers) => {\n if (!isCurrent()) return;\n setMcpServers(Array.isArray(servers) ? servers.map(mcpServerSnapshot) : []);\n })\n .catch((error) => {\n if (controller.signal.aborted) return;\n if (!isCurrent()) return;\n setMcpServers([]);\n reportAuxiliaryError(\"MCP\", error);\n })\n .finally(() => {\n if (mcpAbortRef.current === controller) mcpAbortRef.current = null;\n });\n\n return () => {\n controller.abort();\n };\n }, [activeSessionId, reportAuxiliaryError]);\n\n useEffect(() => {\n jobDetailGenerationRef.current += 1;\n jobDetailAbortRef.current?.abort();\n jobDetailAbortRef.current = null;\n const idle: JobDetailRemoteState = { status: \"idle\" };\n jobDetailStateRef.current = idle;\n setJobDetailState(idle);\n void refreshJobs();\n return () => {\n jobsAbortRef.current?.abort();\n };\n }, [activeSessionId, refreshJobs]);\n\n useEffect(() => {\n const pending = firstPendingPermission(clientState, activeSessionId);\n if (!pending) {\n shownPermissionIdRef.current = undefined;\n if (modal?.kind === \"permission\") setModal(null);\n return;\n }\n if (shownPermissionIdRef.current === pending.id) return;\n shownPermissionIdRef.current = pending.id;\n setModal(permissionToModal(pending));\n }, [activeSessionId, clientState, modal?.kind]);\n\n const running = hasActiveRun(clientState, activeSessionId);\n useEffect(() => {\n if (!submittedRun) return;\n const run = clientState.buckets[submittedRun.sessionId]?.runs[submittedRun.runId];\n if (!run || run.status === \"pending\" || run.status === \"running\") return;\n void refreshJobs();\n if (run.status === \"failed\") {\n reportError(run.error ?? \"Agent run failed\");\n return;\n }\n setSubmittedRun(null);\n }, [clientState, refreshJobs, reportError, submittedRun]);\n\n const createAndSwitchSession = useCallback(\n async (title?: string): Promise<SessionRecord | undefined> => {\n const client = clientRef.current;\n if (!client) return undefined;\n setLocalBusy(true);\n const cwd = daemon?.cwd ?? process.cwd();\n const model = defaultRuntimeRef.current.model;\n const metadata = sessionRuntimeMetadata({\n model,\n provider: defaultRuntimeRef.current.provider,\n baseUrl: defaultRuntimeRef.current.baseUrl,\n apiFormat: defaultRuntimeRef.current.apiFormat,\n permissionMode: statusRef.current.permission_mode ?? daemon?.permissionMode ?? \"default\",\n maxTurns: statusRef.current.max_turns ?? daemon?.maxTurns,\n sessionMode: nextSessionModeRef.current,\n pluginsEnabled: daemon?.pluginsEnabled,\n });\n const session = await client.sessions.create({\n cwd,\n model,\n title: title?.trim() || \"TUI\",\n metadata,\n });\n activateSession(session);\n setSelectRequest(null);\n setLocalBusy(false);\n setSubmittedRun(null);\n pendingNewSessionTitleRef.current = undefined;\n return session;\n },\n [activateSession, daemon?.cwd, daemon?.maxTurns, daemon?.model, daemon?.permissionMode, daemon?.pluginsEnabled, daemon?.sessionMode],\n );\n\n useEffect(() => {\n if (!ready || sentInitialPromptRef.current || !config.initial_prompt) return;\n sentInitialPromptRef.current = true;\n const client = clientRef.current;\n if (!client) return;\n setLocalBusy(true);\n void (async () => {\n const session = activeSessionId ? (clientState.sessions[activeSessionId] ?? (await client.sessions.get(activeSessionId))) : await createAndSwitchSession();\n if (!session) {\n setLocalBusy(false);\n return;\n }\n const response = await client.sessions.admitPrompt(session.id, {\n id: createPromptRequestId(),\n items: [{ type: \"text\", text: config.initial_prompt! }],\n });\n setLocalBusy(false);\n setSubmittedRun(response.run ? { sessionId: session.id, runId: response.run.id } : null);\n })().catch((error) => reportError(error instanceof Error ? error.message : String(error)));\n }, [activeSessionId, clientState.sessions, config.initial_prompt, createAndSwitchSession, ready, reportError]);\n\n const sendRequest = useCallback(\n (action: TuiAction): void => {\n executeTuiAction(action, {\n clientRef,\n activeSessionIdRef,\n clientState,\n setClientState,\n daemon,\n defaultRuntimeRef,\n nextSessionModeRef,\n statusRef,\n setStatus,\n setStatusAndDefault,\n listedSessionsRef,\n commandCatalogRef,\n pendingNewSessionTitleRef,\n localBusy,\n setLocalBusy,\n setSubmittedRun,\n setModal,\n setSelectRequest,\n clearDisplayRequest,\n showDisplayRequest,\n pushSystem,\n reportError,\n reportAuxiliaryError,\n activateSession,\n returnToHome,\n refreshJobs,\n loadJobDetail,\n createAndSwitchSession,\n cacheFirstRead,\n jobStateRef,\n setJobState,\n jobDetailStateRef,\n jobControlGenerationRef,\n jobDetailGenerationRef,\n jobControlAbortRef,\n }).catch((error) => {\n reportError(error instanceof Error ? error.message : String(error));\n });\n },\n [activateSession, cacheFirstRead, clearDisplayRequest, clientState, createAndSwitchSession, daemon, loadJobDetail, localBusy, pushSystem, refreshJobs, reportAuxiliaryError, reportError, returnToHome, setStatusAndDefault, showDisplayRequest],\n );\n\n const bucket = activeSessionId ? clientState.buckets[activeSessionId] : undefined;\n const recoveryItems = useMemo(\n () =>\n recoverableInterruptedRuns(bucket).map((run) => ({\n id: `recovery:${run.id}`,\n role: \"system\" as const,\n text: `Run interrupted${run.error ? `: ${run.error}` : \"\"}\\nUse /resume ${run.id} to replay its original prompt.`,\n })),\n [bucket],\n );\n const transcriptView = useMemo(() => {\n const base = splitStreamingAssistant(bucketToTranscript(bucket));\n return {\n transcript: [...base.items, ...recoveryItems, ...(activeSessionId ? (systemItemsBySession[activeSessionId] ?? []) : globalSystemItems)],\n assistantBuffer: base.assistantBuffer,\n };\n }, [activeSessionId, bucket, globalSystemItems, recoveryItems, systemItemsBySession]);\n const submittedRunRecord = submittedRun ? clientState.buckets[submittedRun.sessionId]?.runs[submittedRun.runId] : undefined;\n const waitingForSubmittedRun = !!submittedRun && (!submittedRunRecord || submittedRunRecord.status === \"pending\" || submittedRunRecord.status === \"running\");\n const commandDetails = useMemo(() => mergeCommandDetails(commandCatalog), [commandCatalog]);\n const commands = useMemo(() => commandDetails.map((entry) => entry.name), [commandDetails]);\n\n return useMemo(\n () => ({\n transcript: transcriptView.transcript,\n assistantBuffer: transcriptView.assistantBuffer,\n status,\n jobState,\n jobs: jobState.jobs,\n jobDetailState,\n commands,\n commandDetails,\n mcpServers,\n modal,\n selectRequest,\n displayRequest,\n busy: localBusy || running || waitingForSubmittedRun,\n ready,\n setModal,\n setSelectRequest,\n setDisplayRequest,\n setBusy: setLocalBusy,\n loadModels,\n sendRequest,\n }),\n [commandDetails, commands, displayRequest, jobDetailState, jobState, loadModels, localBusy, mcpServers, modal, ready, running, selectRequest, sendRequest, status, transcriptView, waitingForSubmittedRun],\n );\n}\n",
29
55
  "// ─── 列表/视口 ────────────────────────────────────────────────────────────────\n/** 补全浮窗(命令 / 文件)和 DialogSelect 的最大可见行数 */\nexport const AC_VISIBLE_ITEMS = 10;\n\n// ─── 上限 ────────────────────────────────────────────────────────────────────\n/** 输入历史保留条数 */\nexport const HISTORY_LIMIT = 100;\n/** Swarm 通知队列保留条数(slice tail) */\nexport const SWARM_NOTIFICATION_TAIL = 20;\n\n// ─── 计时器 ──────────────────────────────────────────────────────────────────\n/** 双击 Esc 取消:第一次 Esc 后提示的显示时长 (ms) */\nexport const ESC_HINT_TIMEOUT_MS = 2000;\n/** Spinner 动画帧间隔 (ms) */\nexport const SPINNER_INTERVAL_MS = 100;\n\n// ─── 布局 ────────────────────────────────────────────────────────────────────\n/** 终端宽度达到此值时自动展开 Sidebar */\nexport const SIDEBAR_AUTO_OPEN_WIDTH = 110;\n/** Footer cwd 缩略最大字符数 */\nexport const CWD_DISPLAY_MAX_LEN = 40;\n\n// ─── 显示格式 ─────────────────────────────────────────────────────────────────\n/** Token 计数超过此值时显示为 \"Nk\" */\nexport const TOKEN_K_THRESHOLD = 1000;\n/** 多行输入框最大行高 */\nexport const TEXTAREA_MAX_LINES = 6;\n/** Minimum prompt textarea rows; keeps the prompt chrome from jumping on single-line edits. */\nexport const TEXTAREA_MIN_LINES = 2;\n",
30
56
  "import { useEffect, useRef, useState } from \"react\";\nimport { ESC_HINT_TIMEOUT_MS } from \"../ui/constants\";\n\n/**\n * 双击 Esc 取消运行中的对话(对齐 opencode)。\n *\n * 第一次按 Esc 在 2s 内显示提示(escHint=true),期间再按 Esc 触发 onInterrupt;\n * 超时或对话结束(busy→false)自动复位。调用方在全局键盘处理里转发 Esc 到 handleEscape。\n *\n * @param busy 当前是否有运行中的对话\n * @param onInterrupt 第二次 Esc 时的中断回调(通常向后端发 interrupt 请求)\n */\nexport function useEscToCancel(busy: boolean, onInterrupt: () => void) {\n const [escHint, setEscHint] = useState(false);\n const escHintRef = useRef(false);\n const escTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // 对话结束即复位,避免提示残留到下一轮。\n useEffect(() => {\n if (!busy) {\n if (escTimerRef.current) clearTimeout(escTimerRef.current);\n escTimerRef.current = null;\n escHintRef.current = false;\n setEscHint(false);\n }\n }, [busy]);\n\n const handleEscape = (): void => {\n if (escHintRef.current) {\n // 第二次 Esc — 中断\n if (escTimerRef.current) clearTimeout(escTimerRef.current);\n escTimerRef.current = null;\n escHintRef.current = false;\n setEscHint(false);\n onInterrupt();\n } else {\n // 第一次 Esc — 显示提示 2s\n escHintRef.current = true;\n setEscHint(true);\n escTimerRef.current = setTimeout(() => {\n escHintRef.current = false;\n setEscHint(false);\n escTimerRef.current = null;\n }, ESC_HINT_TIMEOUT_MS);\n }\n };\n\n return { escHint, handleEscape };\n}\n",
31
57
  "import type { UiNode } from \"../types/ui\";\nimport { createContext, useContext, useState } from \"react\";\nimport { type ThemeConfig, BUILTIN_THEMES, defaultTheme, getTheme } from \"./builtinThemes\";\n\nexport type { ThemeConfig };\n\ntype ThemeContextValue = {\n theme: ThemeConfig;\n setThemeName: (name: string) => void;\n};\n\nconst ThemeContext = createContext<ThemeContextValue>({\n theme: defaultTheme,\n setThemeName: () => undefined,\n});\n\nexport function ThemeProvider({\n children,\n initialTheme = \"default\",\n}: {\n children: UiNode;\n initialTheme?: string;\n}) {\n const [theme, setTheme] = useState<ThemeConfig>(() => getTheme(initialTheme));\n\n const setThemeName = (name: string): void => {\n const resolved = BUILTIN_THEMES[name] ?? defaultTheme;\n setTheme(resolved);\n };\n\n return (\n <ThemeContext.Provider value={{ theme, setThemeName }}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme(): ThemeContextValue {\n return useContext(ThemeContext);\n}\n",
@@ -63,7 +89,7 @@
63
89
  "/**\n * TUI 前端入口(进程 B,Bun 运行时)。配置经 OPENHARNESS_FRONTEND_CONFIG 注入;\n * daemon 主线由 useServerSync attach。\n * 详见 docs/tui-flow.md 与 docs/client-sync-flow.md。\n */\nimport { getTheme } from \"./theme/builtinThemes\";\nimport { assertSupportedTuiRuntime } from \"./runtime\";\nimport type { FrontendConfig } from \"./types\";\n\nconst rawConfig = process.env.OPENHARNESS_FRONTEND_CONFIG;\nlet config: FrontendConfig;\ntry {\n const parsed = rawConfig ? JSON.parse(rawConfig) : {};\n config = {\n daemon: parsed.daemon ?? (\n process.env.OPENHARNESS_DAEMON_URL\n ? {\n url: process.env.OPENHARNESS_DAEMON_URL,\n token: process.env.OPENHARNESS_DAEMON_TOKEN ?? null,\n cwd: process.env.OPENHARNESS_DAEMON_CWD ?? null,\n model: process.env.OPENHARNESS_DAEMON_MODEL ?? null,\n }\n : null\n ),\n initial_prompt: parsed.initial_prompt ?? process.env.OPENHARNESS_INITIAL_PROMPT ?? null,\n theme: parsed.theme ?? process.env.OPENHARNESS_THEME ?? \"default\",\n version: parsed.version ?? null,\n };\n} catch {\n config = { daemon: null, theme: \"default\" };\n}\n\ntry {\n // OpenTUI 默认 backgroundColor 为 transparent,会透出终端配色;启动时铺上主题底色。\n // Run before importing OpenTUI because its native DLL can crash an unsupported Bun.\n assertSupportedTuiRuntime();\n const [{ createCliRenderer }, { createElement, createRoot }, { App }] = await Promise.all([\n import(\"@opentui/core\"),\n import(\"@opentui/react\"),\n import(\"./App\"),\n ]);\n const initialBg = getTheme(String(config.theme ?? \"default\")).colors.background;\n const renderer = await createCliRenderer({\n exitOnCtrlC: false,\n backgroundColor: initialBg,\n onDestroy: () => process.exit(process.exitCode ?? 0),\n });\n renderer.setTerminalTitle(\"OpenHarness\");\n createRoot(renderer).render(createElement(App, { config }));\n} catch (err) {\n console.error(\"[openharness] 终端渲染器初始化失败(需要 Bun + 支持的平台):\", err);\n process.exit(1);\n}\n",
64
90
  "export const MIN_WINDOWS_BUN_VERSION = \"1.3.12\";\n\ntype RuntimeInfo = {\n platform: string;\n bunVersion: string | null;\n};\n\nfunction compareVersions(left: string, right: string): number {\n const leftParts = left.split(\".\").map((part) => Number.parseInt(part, 10) || 0);\n const rightParts = right.split(\".\").map((part) => Number.parseInt(part, 10) || 0);\n const length = Math.max(leftParts.length, rightParts.length);\n\n for (let index = 0; index < length; index += 1) {\n const difference = (leftParts[index] ?? 0) - (rightParts[index] ?? 0);\n if (difference !== 0) return difference;\n }\n\n return 0;\n}\n\nexport function assertSupportedTuiRuntime(runtime: RuntimeInfo = {\n platform: process.platform,\n bunVersion: typeof Bun === \"undefined\" ? null : Bun.version,\n}): void {\n if (runtime.platform !== \"win32\" || runtime.bunVersion === null) return;\n\n if (compareVersions(runtime.bunVersion, MIN_WINDOWS_BUN_VERSION) < 0) {\n throw new Error(\n `Windows TUI requires Bun ${MIN_WINDOWS_BUN_VERSION} or newer; found ${runtime.bunVersion}. Run: bun upgrade`,\n );\n }\n}\n"
65
91
  ],
66
- "mappings": "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",
67
- "debugId": "CC7EA554B2C5EAF964756E2164756E21",
92
+ "mappings": "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",
93
+ "debugId": "9F3BE548A8F89F3864756E2164756E21",
68
94
  "names": []
69
95
  }