@bastani/atomic 0.9.26-alpha.2 → 0.9.26-alpha.3

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 (98) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/builtin/intercom/broker/spawn.ts +2 -0
  3. package/dist/builtin/intercom/index.bundle.mjs +1 -0
  4. package/dist/builtin/intercom/package.json +1 -1
  5. package/dist/builtin/mcp/native-client-licenses/NOTICE +2 -0
  6. package/dist/builtin/mcp/package.json +1 -1
  7. package/dist/builtin/subagents/package.json +1 -1
  8. package/dist/builtin/web-access/package.json +1 -1
  9. package/dist/builtin/workflows/package.json +1 -1
  10. package/dist/cli/args.d.ts.map +1 -1
  11. package/dist/cli/args.js +4 -1
  12. package/dist/cli/args.js.map +1 -1
  13. package/dist/core/keybindings.d.ts +5 -0
  14. package/dist/core/keybindings.d.ts.map +1 -1
  15. package/dist/core/keybindings.js +1 -0
  16. package/dist/core/keybindings.js.map +1 -1
  17. package/dist/extensions/mcp/cli.d.ts.map +1 -1
  18. package/dist/extensions/mcp/cli.js +4 -1
  19. package/dist/extensions/mcp/cli.js.map +1 -1
  20. package/dist/extensions/mcp/client/oauth/callback.d.ts +4 -2
  21. package/dist/extensions/mcp/client/oauth/callback.d.ts.map +1 -1
  22. package/dist/extensions/mcp/client/oauth/callback.js +12 -7
  23. package/dist/extensions/mcp/client/oauth/callback.js.map +1 -1
  24. package/dist/extensions/mcp/client/oauth/flow.d.ts +7 -1
  25. package/dist/extensions/mcp/client/oauth/flow.d.ts.map +1 -1
  26. package/dist/extensions/mcp/client/oauth/flow.js +20 -21
  27. package/dist/extensions/mcp/client/oauth/flow.js.map +1 -1
  28. package/dist/extensions/mcp/client/oauth/index.d.ts +1 -1
  29. package/dist/extensions/mcp/client/oauth/index.d.ts.map +1 -1
  30. package/dist/extensions/mcp/client/oauth/index.js.map +1 -1
  31. package/dist/extensions/mcp/client/oauth/provider.d.ts +5 -2
  32. package/dist/extensions/mcp/client/oauth/provider.d.ts.map +1 -1
  33. package/dist/extensions/mcp/client/oauth/provider.js +2 -0
  34. package/dist/extensions/mcp/client/oauth/provider.js.map +1 -1
  35. package/dist/extensions/mcp/config.d.ts +16 -4
  36. package/dist/extensions/mcp/config.d.ts.map +1 -1
  37. package/dist/extensions/mcp/config.js +50 -11
  38. package/dist/extensions/mcp/config.js.map +1 -1
  39. package/dist/extensions/mcp/index.d.ts +4 -1
  40. package/dist/extensions/mcp/index.d.ts.map +1 -1
  41. package/dist/extensions/mcp/index.js +80 -46
  42. package/dist/extensions/mcp/index.js.map +1 -1
  43. package/dist/extensions/mcp/oauth.d.ts.map +1 -1
  44. package/dist/extensions/mcp/oauth.js +9 -5
  45. package/dist/extensions/mcp/oauth.js.map +1 -1
  46. package/dist/extensions/mcp/ui.d.ts.map +1 -1
  47. package/dist/extensions/mcp/ui.js +8 -4
  48. package/dist/extensions/mcp/ui.js.map +1 -1
  49. package/dist/index.d.ts +1 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/modes/interactive/chat-input-actions.js.map +1 -1
  52. package/dist/modes/interactive/components/auth-url.d.ts +10 -0
  53. package/dist/modes/interactive/components/auth-url.d.ts.map +1 -0
  54. package/dist/modes/interactive/components/auth-url.js +37 -0
  55. package/dist/modes/interactive/components/auth-url.js.map +1 -0
  56. package/dist/modes/interactive/components/index.d.ts +0 -1
  57. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  58. package/dist/modes/interactive/components/index.js +0 -1
  59. package/dist/modes/interactive/components/index.js.map +1 -1
  60. package/dist/modes/interactive/components/login-dialog.d.ts +1 -0
  61. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  62. package/dist/modes/interactive/components/login-dialog.js +10 -5
  63. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  64. package/dist/modes/interactive/interactive-auth-login.js +0 -1
  65. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  66. package/dist/modes/interactive/interactive-hotkeys-debug.js +1 -11
  67. package/dist/modes/interactive/interactive-hotkeys-debug.js.map +1 -1
  68. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  69. package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -2
  70. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  71. package/dist/modes/interactive/interactive-mode-deps.js +0 -1
  72. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  73. package/dist/modes/interactive/interactive-mode-surface.d.ts +0 -5
  74. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  75. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  76. package/dist/modes/interactive/interactive-model-routing.js +0 -2
  77. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  78. package/dist/modes/interactive/interactive-tui.js.map +1 -1
  79. package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
  80. package/dist/modes/interactive-engine/engine-custom-ui.js +38 -2
  81. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  82. package/dist/modes/interactive-engine/protocol.d.ts +10 -0
  83. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  84. package/dist/modes/interactive-engine/protocol.js +10 -0
  85. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  86. package/dist/modes/interactive-engine/remote-component.d.ts +2 -1
  87. package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
  88. package/dist/modes/interactive-engine/remote-component.js +23 -1
  89. package/dist/modes/interactive-engine/remote-component.js.map +1 -1
  90. package/docs/keybindings.md +3 -0
  91. package/docs/mcp-servers.md +13 -1
  92. package/docs/providers.md +2 -0
  93. package/npm-shrinkwrap.json +55 -33
  94. package/package.json +4 -3
  95. package/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  96. package/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  97. package/dist/modes/interactive/components/daxnuts.js +0 -140
  98. package/dist/modes/interactive/components/daxnuts.js.map +0 -1
@@ -127,6 +127,11 @@ export type InteractiveEngineMessage = {
127
127
  type: "engine_custom_terminal";
128
128
  componentId: string;
129
129
  control: EngineTerminalControl;
130
+ } | {
131
+ type: "engine_custom_copy";
132
+ componentId: string;
133
+ requestId: number;
134
+ text: string;
130
135
  } | {
131
136
  type: "engine_custom_control";
132
137
  componentId: string;
@@ -177,6 +182,11 @@ export type InteractiveEngineCommand = {
177
182
  componentId: string;
178
183
  requestId: number;
179
184
  data: string;
185
+ } | {
186
+ type: "engine_custom_copy_result";
187
+ componentId: string;
188
+ requestId: number;
189
+ error?: string;
180
190
  } | {
181
191
  type: "engine_custom_scroll";
182
192
  componentId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/protocol.ts"],"names":[],"mappings":"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"}
@@ -279,6 +279,12 @@ export function parseInteractiveEngineMessage(line) {
279
279
  return typeof value.componentId === "string"
280
280
  ? { type: value.type, componentId: value.componentId, result: value.result }
281
281
  : undefined;
282
+ case "engine_custom_copy":
283
+ return typeof value.componentId === "string" &&
284
+ typeof value.requestId === "number" &&
285
+ typeof value.text === "string"
286
+ ? { type: value.type, componentId: value.componentId, requestId: value.requestId, text: value.text }
287
+ : undefined;
282
288
  case "engine_custom_terminal": {
283
289
  const control = parseEngineTerminalControl(value.control);
284
290
  return typeof value.componentId === "string" && control
@@ -379,6 +385,10 @@ export function parseInteractiveEngineCommand(line) {
379
385
  }
380
386
  if (value.type === "engine_custom_input" && typeof value.requestId === "number" && typeof value.data === "string")
381
387
  return { type: value.type, componentId: value.componentId, requestId: value.requestId, data: value.data };
388
+ if (value.type === "engine_custom_copy_result" &&
389
+ typeof value.requestId === "number" &&
390
+ (value.error === undefined || typeof value.error === "string"))
391
+ return { type: value.type, componentId: value.componentId, requestId: value.requestId, error: value.error };
382
392
  if (value.type === "engine_custom_dispose" || value.type === "engine_render_dispose")
383
393
  return { type: value.type, componentId: value.componentId };
384
394
  if ((value.type === "engine_session_picker_select" || value.type === "engine_session_picker_delete") &&
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/protocol.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CallbackActivity, CallbackActivityKind } from \"../../core/callback-activity.ts\";\nimport type {\n\tHostInputFormField,\n\tHostSessionPickerRow,\n\tWidgetScrollRequest,\n\tWidgetScrollState,\n} from \"../../core/extensions/ui-types.js\";\nimport type { KeyId } from \"../../core/keybindings.ts\";\n\n/**\n * Version 4 separates minimal session binding from optional resource readiness.\n * A host must not submit a prompt until the matching engine generation reports\n * `engine_resources_ready`.\n */\nexport const INTERACTIVE_ENGINE_PROTOCOL_VERSION = 4;\n\nexport interface JsonObject {\n\t[key: string]: JsonValue;\n}\n\nexport type JsonValue = boolean | JsonObject | JsonValue[] | null | number | string;\n\nexport interface SerializableOverlayOptions {\n\tanchor?: string;\n\tcol?: number | string;\n\tmargin?: number | { top?: number; right?: number; bottom?: number; left?: number };\n\tmaxHeight?: number | string;\n\tmaxWidth?: number | string;\n\tminHeight?: number;\n\tminWidth?: number;\n\toffsetX?: number;\n\toffsetY?: number;\n\trow?: number | string;\n\twidth?: number | string;\n}\n\n/**\n * Allowlisted terminal-mode control a remote custom component may ask the host\n * to apply to the real host TTY. Deliberately NOT a raw byte channel: the child\n * names an intent and the host owns the concrete escape sequence, so a buggy or\n * compromised child can only toggle this documented mode.\n */\nexport type EngineTerminalControl = { kind: \"autowrap\"; enabled: boolean };\n\nexport interface EngineExtensionShortcut {\n\tkey: string;\n\tdescription?: string;\n\t/** Editor-owned input exclusions resolved in the engine and matched by the host. */\n\teditorKeys?: KeyId[];\n}\n\nexport type SerializableKeybindingsConfig = Record<string, KeyId | KeyId[]>;\n\nexport interface EngineKeybindingState {\n\tuserBindings: SerializableKeybindingsConfig;\n\teffectiveBindings: SerializableKeybindingsConfig;\n\tshortcuts: EngineExtensionShortcut[];\n}\n\nexport type InteractiveEngineMessage =\n\t| { type: \"engine_ready\"; protocolVersion: typeof INTERACTIVE_ENGINE_PROTOCOL_VERSION; pid: number }\n\t| { type: \"engine_bound\" }\n\t| { type: \"engine_resources_ready\" }\n\t| { type: \"engine_resources_failed\"; message: string }\n\t| { type: \"engine_keybindings_reloaded\"; state: EngineKeybindingState }\n\t| { type: \"engine_heartbeat\"; at: number }\n\t| { type: \"engine_activity_started\"; activity: CallbackActivity }\n\t| { type: \"engine_activity_finished\"; activityId: string }\n\t/**\n\t * The child took ownership of a correlated RPC request: it has parsed the\n\t * command and is about to run it. Emitted and flushed BEFORE any handler\n\t * work, so a later transport failure can be told apart from a send that\n\t * never landed. Output is not a substitute: a command can run to completion\n\t * with side effects and produce nothing.\n\t */\n\t| { type: \"engine_request_accepted\"; requestId: string; command: string }\n\t| {\n\t\t\ttype: \"engine_custom_open\";\n\t\t\tcomponentId: string;\n\t\t\toverlay: boolean;\n\t\t\tpurpose?: \"prompt\" | \"navigation\";\n\t\t\tdeferInlineCustomUiFocus?: boolean;\n\t\t\thandlesCtrlC?: boolean;\n\t\t\thandlesInternalUiAction?: boolean;\n\t\t\treserveTranscriptRows?: boolean;\n\t\t\toverlayOptions?: SerializableOverlayOptions;\n\t\t\twidgetKey?: string;\n\t\t\twidgetPlacement?: \"aboveEditor\" | \"belowEditor\";\n\t\t\twidgetScroll?: { maxHeight: number; maxHeightFraction?: number };\n\t }\n\t| { type: \"engine_custom_close\"; componentId: string }\n\t| {\n\t\t\ttype: \"engine_custom_frame\";\n\t\t\tcomponentId: string;\n\t\t\trequestId: number;\n\t\t\tlines: string[];\n\t\t\tscrollRequest?: WidgetScrollRequest;\n\t }\n\t| { type: \"engine_custom_input_result\"; componentId: string; requestId: number; handled: boolean }\n\t| { type: \"engine_custom_invalidate\"; componentId: string }\n\t| { type: \"engine_custom_done\"; componentId: string; result?: JsonValue }\n\t| { type: \"engine_custom_terminal\"; componentId: string; control: EngineTerminalControl }\n\t| { type: \"engine_custom_control\"; componentId: string; action: \"focus\" | \"hide\" | \"show\" | \"unfocus\" }\n\t| {\n\t\t\ttype: \"engine_session_picker_open\";\n\t\t\tcomponentId: string;\n\t\t\tsessions: HostSessionPickerRow[];\n\t\t\tshowRenameHint?: boolean;\n\t }\n\t| { type: \"engine_session_picker_update\"; componentId: string; sessions: HostSessionPickerRow[] }\n\t| { type: \"engine_session_picker_error\"; componentId: string; message: string }\n\t| { type: \"engine_session_picker_close\"; componentId: string }\n\t| {\n\t\t\ttype: \"engine_input_form_open\";\n\t\t\tcomponentId: string;\n\t\t\ttitle: string;\n\t\t\tfields: HostInputFormField[];\n\t\t\theading?: string;\n\t\t\tsubmitLabel?: string;\n\t }\n\t| { type: \"engine_input_form_close\"; componentId: string };\nexport type InteractiveEngineCommand =\n\t| { type: \"engine_project_trust_start\"; componentId: string; kind: \"select\" | \"confirm\" | \"input\"; title: string }\n\t| { type: \"engine_project_trust_end\"; componentId: string }\n\t| { type: \"engine_custom_render\"; componentId: string; requestId: number; width: number; rows: number }\n\t| { type: \"engine_custom_input\"; componentId: string; requestId: number; data: string }\n\t| { type: \"engine_custom_scroll\"; componentId: string; state: WidgetScrollState }\n\t| { type: \"engine_custom_dispose\"; componentId: string }\n\t| {\n\t\t\ttype: \"engine_tool_render\";\n\t\t\tcomponentId: string;\n\t\t\trequestId: number;\n\t\t\twidth: number;\n\t\t\ttoolName: string;\n\t\t\ttoolCallId: string;\n\t\t\targs: JsonValue;\n\t\t\tresult?: JsonObject;\n\t\t\texecutionStarted: boolean;\n\t\t\targsComplete: boolean;\n\t\t\tisPartial: boolean;\n\t\t\texpanded: boolean;\n\t\t\tshowImages: boolean;\n\t\t\timageWidthCells: number;\n\t }\n\t| {\n\t\t\ttype: \"engine_message_render\";\n\t\t\tcomponentId: string;\n\t\t\trequestId: number;\n\t\t\twidth: number;\n\t\t\tmessage: JsonObject;\n\t\t\texpanded: boolean;\n\t\t\toutputPad: number;\n\t }\n\t| { type: \"engine_render_dispose\"; componentId: string }\n\t| { type: \"engine_session_picker_select\"; componentId: string; path: string }\n\t| { type: \"engine_session_picker_cancel\"; componentId: string }\n\t| { type: \"engine_session_picker_delete\"; componentId: string; path: string }\n\t| { type: \"engine_input_form_submit\"; componentId: string; values: Record<string, string> }\n\t| { type: \"engine_input_form_cancel\"; componentId: string };\n\nconst ACTIVITY_KINDS: readonly CallbackActivityKind[] = [\n\t\"extension.hook\",\n\t\"renderer\",\n\t\"tool.execute\",\n\t\"tool.prepare\",\n\t\"workflow.ctx_tool\",\n\t\"workflow.run\",\n\t\"workflow.stage_adapter\",\n];\n\nexport function isJsonValue(value: object | boolean | null | number | string): value is JsonValue {\n\tif (value === null || typeof value !== \"object\") return true;\n\tif (Array.isArray(value)) return value.every((item) => isJsonValue(item));\n\treturn Object.values(value).every((item) => item !== undefined && isJsonValue(item));\n}\n\nfunction isJsonObject(value: JsonValue): value is JsonObject {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isActivityKind(value: JsonValue): value is CallbackActivityKind {\n\treturn typeof value === \"string\" && ACTIVITY_KINDS.includes(value as CallbackActivityKind);\n}\n\nfunction isCallbackActivity(value: JsonValue): value is JsonObject & CallbackActivity {\n\treturn (\n\t\tisJsonObject(value) &&\n\t\ttypeof value.id === \"string\" &&\n\t\tisActivityKind(value.kind) &&\n\t\ttypeof value.name === \"string\" &&\n\t\ttypeof value.startedAt === \"number\"\n\t);\n}\n\nfunction parseEngineTerminalControl(value: JsonValue | undefined): EngineTerminalControl | undefined {\n\tif (value === undefined || !isJsonObject(value) || value.kind !== \"autowrap\" || typeof value.enabled !== \"boolean\") {\n\t\treturn undefined;\n\t}\n\treturn { kind: \"autowrap\", enabled: value.enabled };\n}\n\nconst SESSION_PICKER_MESSAGE_COLORS = [\"success\", \"warning\", \"accent\", \"error\"] as const;\n\nfunction parseSessionPickerRow(value: JsonValue): HostSessionPickerRow | undefined {\n\tif (!isJsonObject(value)) return undefined;\n\tconst {\n\t\tpath,\n\t\tid,\n\t\tcwd,\n\t\tcreatedAt,\n\t\tmodifiedAt,\n\t\tmessageCount,\n\t\tfirstMessage,\n\t\tsummary,\n\t\tallMessagesText,\n\t\tname,\n\t\tmessageColor,\n\t} = value;\n\tif (\n\t\ttypeof path !== \"string\" ||\n\t\ttypeof id !== \"string\" ||\n\t\ttypeof cwd !== \"string\" ||\n\t\ttypeof createdAt !== \"number\" ||\n\t\ttypeof modifiedAt !== \"number\" ||\n\t\ttypeof messageCount !== \"number\" ||\n\t\ttypeof firstMessage !== \"string\"\n\t)\n\t\treturn undefined;\n\tif (summary !== undefined && typeof summary !== \"string\") return undefined;\n\tif (allMessagesText !== undefined && typeof allMessagesText !== \"string\") return undefined;\n\tif (name !== undefined && typeof name !== \"string\") return undefined;\n\tif (\n\t\tmessageColor !== undefined &&\n\t\t!SESSION_PICKER_MESSAGE_COLORS.includes(messageColor as (typeof SESSION_PICKER_MESSAGE_COLORS)[number])\n\t)\n\t\treturn undefined;\n\treturn {\n\t\tpath,\n\t\tid,\n\t\tcwd,\n\t\tcreatedAt,\n\t\tmodifiedAt,\n\t\tmessageCount,\n\t\tfirstMessage,\n\t\t...(summary !== undefined ? { summary } : {}),\n\t\t...(allMessagesText !== undefined ? { allMessagesText } : {}),\n\t\t...(name !== undefined ? { name } : {}),\n\t\t...(messageColor !== undefined\n\t\t\t? { messageColor: messageColor as (typeof SESSION_PICKER_MESSAGE_COLORS)[number] }\n\t\t\t: {}),\n\t};\n}\n\nfunction parseSessionPickerRows(value: JsonValue | undefined): HostSessionPickerRow[] | undefined {\n\tif (!Array.isArray(value)) return undefined;\n\tconst rows: HostSessionPickerRow[] = [];\n\tfor (const entry of value) {\n\t\tconst row = parseSessionPickerRow(entry);\n\t\tif (!row) return undefined;\n\t\trows.push(row);\n\t}\n\treturn rows;\n}\n\nconst INPUT_FORM_FIELD_TYPES = [\"string\", \"text\", \"number\", \"integer\", \"boolean\", \"select\"] as const;\n\nfunction parseInputFormFields(value: JsonValue | undefined): HostInputFormField[] | undefined {\n\tif (!Array.isArray(value)) return undefined;\n\tconst fields: HostInputFormField[] = [];\n\tfor (const entry of value) {\n\t\tif (!isJsonObject(entry)) return undefined;\n\t\tconst { name, type, description, required, choices, placeholder, initialValue } = entry;\n\t\tif (\n\t\t\ttypeof name !== \"string\" ||\n\t\t\t!INPUT_FORM_FIELD_TYPES.includes(type as HostInputFormField[\"type\"]) ||\n\t\t\ttypeof initialValue !== \"string\"\n\t\t)\n\t\t\treturn undefined;\n\t\tif (description !== undefined && typeof description !== \"string\") return undefined;\n\t\tif (required !== undefined && typeof required !== \"boolean\") return undefined;\n\t\tif (choices !== undefined && (!Array.isArray(choices) || !choices.every((choice) => typeof choice === \"string\")))\n\t\t\treturn undefined;\n\t\tif (placeholder !== undefined && typeof placeholder !== \"string\") return undefined;\n\t\tfields.push({\n\t\t\tname,\n\t\t\ttype: type as HostInputFormField[\"type\"],\n\t\t\tinitialValue,\n\t\t\t...(typeof description === \"string\" ? { description } : {}),\n\t\t\t...(typeof required === \"boolean\" ? { required } : {}),\n\t\t\t...(Array.isArray(choices) ? { choices: choices as string[] } : {}),\n\t\t\t...(typeof placeholder === \"string\" ? { placeholder } : {}),\n\t\t});\n\t}\n\treturn fields;\n}\n\nfunction parseStringRecord(value: JsonValue | undefined): Record<string, string> | undefined {\n\tif (value === undefined || !isJsonObject(value)) return undefined;\n\tconst entries = Object.entries(value);\n\tif (entries.some(([, entry]) => typeof entry !== \"string\")) return undefined;\n\treturn Object.fromEntries(entries) as Record<string, string>;\n}\n\nfunction parseKeybindingsConfig(value: JsonValue | undefined): SerializableKeybindingsConfig | undefined {\n\tif (value === undefined || !isJsonObject(value)) return undefined;\n\tconst config: SerializableKeybindingsConfig = {};\n\tfor (const [key, binding] of Object.entries(value)) {\n\t\tif (typeof binding === \"string\") config[key] = binding as SerializableKeybindingsConfig[string];\n\t\telse if (Array.isArray(binding) && binding.every((entry) => typeof entry === \"string\")) {\n\t\t\tconfig[key] = binding as SerializableKeybindingsConfig[string];\n\t\t} else return undefined;\n\t}\n\treturn config;\n}\n\nfunction parseKeybindingState(value: JsonValue | undefined): EngineKeybindingState | undefined {\n\tif (value === undefined || !isJsonObject(value) || !Array.isArray(value.shortcuts)) return undefined;\n\tconst userBindings = parseKeybindingsConfig(value.userBindings);\n\tconst effectiveBindings = parseKeybindingsConfig(value.effectiveBindings);\n\tif (!userBindings || !effectiveBindings) return undefined;\n\tconst shortcuts: EngineExtensionShortcut[] = [];\n\tfor (const shortcut of value.shortcuts) {\n\t\tif (\n\t\t\t!isJsonObject(shortcut) ||\n\t\t\ttypeof shortcut.key !== \"string\" ||\n\t\t\t(shortcut.description !== undefined && typeof shortcut.description !== \"string\") ||\n\t\t\t(shortcut.editorKeys !== undefined &&\n\t\t\t\t(!Array.isArray(shortcut.editorKeys) || shortcut.editorKeys.some((key) => typeof key !== \"string\")))\n\t\t)\n\t\t\treturn undefined;\n\t\tshortcuts.push({\n\t\t\tkey: shortcut.key,\n\t\t\t...(typeof shortcut.description === \"string\" ? { description: shortcut.description } : {}),\n\t\t\t...(Array.isArray(shortcut.editorKeys) ? { editorKeys: shortcut.editorKeys as KeyId[] } : {}),\n\t\t});\n\t}\n\treturn { userBindings, effectiveBindings, shortcuts };\n}\n\nfunction parseJsonObject(line: string): JsonObject | undefined {\n\tlet value: JsonValue;\n\ttry {\n\t\tvalue = JSON.parse(line) as JsonValue;\n\t} catch {\n\t\treturn undefined;\n\t}\n\treturn isJsonObject(value) ? value : undefined;\n}\n\nexport function parseInteractiveEngineMessage(line: string): InteractiveEngineMessage | undefined {\n\tconst value = parseJsonObject(line);\n\tif (!value || typeof value.type !== \"string\") return undefined;\n\tswitch (value.type) {\n\t\tcase \"engine_ready\":\n\t\t\treturn value.protocolVersion === INTERACTIVE_ENGINE_PROTOCOL_VERSION && typeof value.pid === \"number\"\n\t\t\t\t? { type: value.type, protocolVersion: INTERACTIVE_ENGINE_PROTOCOL_VERSION, pid: value.pid }\n\t\t\t\t: undefined;\n\t\tcase \"engine_bound\":\n\t\t\treturn { type: value.type };\n\t\tcase \"engine_resources_ready\":\n\t\t\treturn { type: value.type };\n\t\tcase \"engine_resources_failed\":\n\t\t\treturn typeof value.message === \"string\" ? { type: value.type, message: value.message } : undefined;\n\t\tcase \"engine_keybindings_reloaded\": {\n\t\t\tconst state = parseKeybindingState(value.state);\n\t\t\treturn state ? { type: value.type, state } : undefined;\n\t\t}\n\t\tcase \"engine_heartbeat\":\n\t\t\treturn typeof value.at === \"number\" ? { type: value.type, at: value.at } : undefined;\n\t\tcase \"engine_activity_started\":\n\t\t\treturn isCallbackActivity(value.activity) ? { type: value.type, activity: value.activity } : undefined;\n\t\tcase \"engine_activity_finished\":\n\t\t\treturn typeof value.activityId === \"string\" ? { type: value.type, activityId: value.activityId } : undefined;\n\t\tcase \"engine_request_accepted\":\n\t\t\treturn typeof value.requestId === \"string\" && typeof value.command === \"string\"\n\t\t\t\t? { type: value.type, requestId: value.requestId, command: value.command }\n\t\t\t\t: undefined;\n\t\tcase \"engine_custom_open\":\n\t\t\treturn typeof value.componentId === \"string\" && typeof value.overlay === \"boolean\"\n\t\t\t\t? {\n\t\t\t\t\t\ttype: value.type,\n\t\t\t\t\t\tcomponentId: value.componentId,\n\t\t\t\t\t\toverlay: value.overlay,\n\t\t\t\t\t\t...(value.purpose === \"navigation\" || value.purpose === \"prompt\" ? { purpose: value.purpose } : {}),\n\t\t\t\t\t\tdeferInlineCustomUiFocus: value.deferInlineCustomUiFocus === true,\n\t\t\t\t\t\thandlesCtrlC: value.handlesCtrlC === true,\n\t\t\t\t\t\thandlesInternalUiAction: value.handlesInternalUiAction === true,\n\t\t\t\t\t\treserveTranscriptRows: value.reserveTranscriptRows === true,\n\t\t\t\t\t\toverlayOptions: isJsonObject(value.overlayOptions)\n\t\t\t\t\t\t\t? (value.overlayOptions as SerializableOverlayOptions)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\twidgetKey: typeof value.widgetKey === \"string\" ? value.widgetKey : undefined,\n\t\t\t\t\t\t...(isJsonObject(value.widgetScroll) && typeof value.widgetScroll.maxHeight === \"number\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\twidgetScroll: {\n\t\t\t\t\t\t\t\t\t\tmaxHeight: value.widgetScroll.maxHeight,\n\t\t\t\t\t\t\t\t\t\t...(typeof value.widgetScroll.maxHeightFraction === \"number\"\n\t\t\t\t\t\t\t\t\t\t\t? { maxHeightFraction: value.widgetScroll.maxHeightFraction }\n\t\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\twidgetPlacement:\n\t\t\t\t\t\t\tvalue.widgetPlacement === \"belowEditor\"\n\t\t\t\t\t\t\t\t? \"belowEditor\"\n\t\t\t\t\t\t\t\t: value.widgetPlacement === \"aboveEditor\"\n\t\t\t\t\t\t\t\t\t? \"aboveEditor\"\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\t\tcase \"engine_custom_close\":\n\t\t\treturn typeof value.componentId === \"string\"\n\t\t\t\t? { type: value.type, componentId: value.componentId }\n\t\t\t\t: undefined;\n\t\tcase \"engine_custom_frame\":\n\t\t\treturn typeof value.componentId === \"string\" &&\n\t\t\t\ttypeof value.requestId === \"number\" &&\n\t\t\t\tArray.isArray(value.lines) &&\n\t\t\t\tvalue.lines.every((entry) => typeof entry === \"string\")\n\t\t\t\t? {\n\t\t\t\t\t\ttype: value.type,\n\t\t\t\t\t\tcomponentId: value.componentId,\n\t\t\t\t\t\trequestId: value.requestId,\n\t\t\t\t\t\tlines: value.lines,\n\t\t\t\t\t\t...(isJsonObject(value.scrollRequest) &&\n\t\t\t\t\t\ttypeof value.scrollRequest.version === \"number\" &&\n\t\t\t\t\t\ttypeof value.scrollRequest.scrollTop === \"number\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tscrollRequest: {\n\t\t\t\t\t\t\t\t\t\tversion: value.scrollRequest.version,\n\t\t\t\t\t\t\t\t\t\tscrollTop: value.scrollRequest.scrollTop,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\t\tcase \"engine_custom_input_result\":\n\t\t\treturn typeof value.componentId === \"string\" &&\n\t\t\t\ttypeof value.requestId === \"number\" &&\n\t\t\t\ttypeof value.handled === \"boolean\"\n\t\t\t\t? { type: value.type, componentId: value.componentId, requestId: value.requestId, handled: value.handled }\n\t\t\t\t: undefined;\n\t\tcase \"engine_custom_invalidate\":\n\t\t\treturn typeof value.componentId === \"string\"\n\t\t\t\t? { type: value.type, componentId: value.componentId }\n\t\t\t\t: undefined;\n\t\tcase \"engine_custom_done\":\n\t\t\treturn typeof value.componentId === \"string\"\n\t\t\t\t? { type: value.type, componentId: value.componentId, result: value.result }\n\t\t\t\t: undefined;\n\t\tcase \"engine_custom_terminal\": {\n\t\t\tconst control = parseEngineTerminalControl(value.control);\n\t\t\treturn typeof value.componentId === \"string\" && control\n\t\t\t\t? { type: value.type, componentId: value.componentId, control }\n\t\t\t\t: undefined;\n\t\t}\n\t\tcase \"engine_custom_control\":\n\t\t\treturn typeof value.componentId === \"string\" &&\n\t\t\t\t[\"focus\", \"hide\", \"show\", \"unfocus\"].includes(String(value.action))\n\t\t\t\t? {\n\t\t\t\t\t\ttype: value.type,\n\t\t\t\t\t\tcomponentId: value.componentId,\n\t\t\t\t\t\taction: value.action as \"focus\" | \"hide\" | \"show\" | \"unfocus\",\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\t\tcase \"engine_session_picker_open\": {\n\t\t\tconst sessions = parseSessionPickerRows(value.sessions);\n\t\t\treturn typeof value.componentId === \"string\" &&\n\t\t\t\tsessions &&\n\t\t\t\t(value.showRenameHint === undefined || typeof value.showRenameHint === \"boolean\")\n\t\t\t\t? {\n\t\t\t\t\t\ttype: value.type,\n\t\t\t\t\t\tcomponentId: value.componentId,\n\t\t\t\t\t\tsessions,\n\t\t\t\t\t\t...(typeof value.showRenameHint === \"boolean\" ? { showRenameHint: value.showRenameHint } : {}),\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\t\t}\n\t\tcase \"engine_session_picker_update\": {\n\t\t\tconst sessions = parseSessionPickerRows(value.sessions);\n\t\t\treturn typeof value.componentId === \"string\" && sessions\n\t\t\t\t? { type: value.type, componentId: value.componentId, sessions }\n\t\t\t\t: undefined;\n\t\t}\n\t\tcase \"engine_session_picker_error\":\n\t\t\treturn typeof value.componentId === \"string\" && typeof value.message === \"string\"\n\t\t\t\t? { type: value.type, componentId: value.componentId, message: value.message }\n\t\t\t\t: undefined;\n\t\tcase \"engine_session_picker_close\":\n\t\tcase \"engine_input_form_close\":\n\t\t\treturn typeof value.componentId === \"string\"\n\t\t\t\t? { type: value.type, componentId: value.componentId }\n\t\t\t\t: undefined;\n\t\tcase \"engine_input_form_open\": {\n\t\t\tconst fields = parseInputFormFields(value.fields);\n\t\t\treturn typeof value.componentId === \"string\" && typeof value.title === \"string\" && fields\n\t\t\t\t? {\n\t\t\t\t\t\ttype: value.type,\n\t\t\t\t\t\tcomponentId: value.componentId,\n\t\t\t\t\t\ttitle: value.title,\n\t\t\t\t\t\tfields,\n\t\t\t\t\t\t...(typeof value.heading === \"string\" ? { heading: value.heading } : {}),\n\t\t\t\t\t\t...(typeof value.submitLabel === \"string\" ? { submitLabel: value.submitLabel } : {}),\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\t\t}\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\nexport function parseInteractiveEngineCommand(line: string): InteractiveEngineCommand | undefined {\n\tconst value = parseJsonObject(line);\n\tif (!value || typeof value.type !== \"string\" || typeof value.componentId !== \"string\") return undefined;\n\tif (value.type === \"engine_project_trust_end\") return { type: value.type, componentId: value.componentId };\n\tif (\n\t\tvalue.type === \"engine_project_trust_start\" &&\n\t\t(value.kind === \"select\" || value.kind === \"confirm\" || value.kind === \"input\") &&\n\t\ttypeof value.title === \"string\"\n\t) {\n\t\treturn { type: value.type, componentId: value.componentId, kind: value.kind, title: value.title };\n\t}\n\tif (\n\t\tvalue.type === \"engine_custom_scroll\" &&\n\t\tisJsonObject(value.state) &&\n\t\ttypeof value.state.scrollTop === \"number\" &&\n\t\ttypeof value.state.viewportHeight === \"number\" &&\n\t\ttypeof value.state.contentHeight === \"number\"\n\t) {\n\t\treturn {\n\t\t\ttype: value.type,\n\t\t\tcomponentId: value.componentId,\n\t\t\tstate: {\n\t\t\t\tscrollTop: value.state.scrollTop,\n\t\t\t\tviewportHeight: value.state.viewportHeight,\n\t\t\t\tcontentHeight: value.state.contentHeight,\n\t\t\t},\n\t\t};\n\t}\n\tif (\n\t\tvalue.type === \"engine_custom_render\" &&\n\t\ttypeof value.requestId === \"number\" &&\n\t\ttypeof value.width === \"number\" &&\n\t\ttypeof value.rows === \"number\"\n\t) {\n\t\treturn {\n\t\t\ttype: value.type,\n\t\t\tcomponentId: value.componentId,\n\t\t\trequestId: value.requestId,\n\t\t\twidth: value.width,\n\t\t\trows: value.rows,\n\t\t};\n\t}\n\tif (value.type === \"engine_custom_input\" && typeof value.requestId === \"number\" && typeof value.data === \"string\")\n\t\treturn { type: value.type, componentId: value.componentId, requestId: value.requestId, data: value.data };\n\tif (value.type === \"engine_custom_dispose\" || value.type === \"engine_render_dispose\")\n\t\treturn { type: value.type, componentId: value.componentId };\n\tif (\n\t\t(value.type === \"engine_session_picker_select\" || value.type === \"engine_session_picker_delete\") &&\n\t\ttypeof value.path === \"string\"\n\t) {\n\t\treturn { type: value.type, componentId: value.componentId, path: value.path };\n\t}\n\tif (value.type === \"engine_session_picker_cancel\") return { type: value.type, componentId: value.componentId };\n\tif (value.type === \"engine_input_form_cancel\") return { type: value.type, componentId: value.componentId };\n\tif (value.type === \"engine_input_form_submit\") {\n\t\tconst values = parseStringRecord(value.values);\n\t\treturn values ? { type: value.type, componentId: value.componentId, values } : undefined;\n\t}\n\tif (\n\t\tvalue.type === \"engine_tool_render\" &&\n\t\ttypeof value.requestId === \"number\" &&\n\t\ttypeof value.width === \"number\" &&\n\t\ttypeof value.toolName === \"string\" &&\n\t\ttypeof value.toolCallId === \"string\" &&\n\t\ttypeof value.executionStarted === \"boolean\" &&\n\t\ttypeof value.argsComplete === \"boolean\" &&\n\t\ttypeof value.isPartial === \"boolean\" &&\n\t\ttypeof value.expanded === \"boolean\" &&\n\t\ttypeof value.showImages === \"boolean\" &&\n\t\ttypeof value.imageWidthCells === \"number\"\n\t) {\n\t\treturn {\n\t\t\ttype: value.type,\n\t\t\tcomponentId: value.componentId,\n\t\t\trequestId: value.requestId,\n\t\t\twidth: value.width,\n\t\t\ttoolName: value.toolName,\n\t\t\ttoolCallId: value.toolCallId,\n\t\t\targs: value.args,\n\t\t\tresult: isJsonObject(value.result) ? value.result : undefined,\n\t\t\texecutionStarted: value.executionStarted,\n\t\t\targsComplete: value.argsComplete,\n\t\t\tisPartial: value.isPartial,\n\t\t\texpanded: value.expanded,\n\t\t\tshowImages: value.showImages,\n\t\t\timageWidthCells: value.imageWidthCells,\n\t\t};\n\t}\n\tif (\n\t\tvalue.type === \"engine_message_render\" &&\n\t\ttypeof value.requestId === \"number\" &&\n\t\ttypeof value.width === \"number\" &&\n\t\tisJsonObject(value.message) &&\n\t\ttypeof value.expanded === \"boolean\" &&\n\t\ttypeof value.outputPad === \"number\"\n\t) {\n\t\treturn {\n\t\t\ttype: value.type,\n\t\t\tcomponentId: value.componentId,\n\t\t\trequestId: value.requestId,\n\t\t\twidth: value.width,\n\t\t\tmessage: value.message,\n\t\t\texpanded: value.expanded,\n\t\t\toutputPad: value.outputPad,\n\t\t};\n\t}\n\treturn undefined;\n}\n\nexport function serializeInteractiveEngineFrame(message: InteractiveEngineMessage | InteractiveEngineCommand): string {\n\treturn `${JSON.stringify(message)}\\n`;\n}\n\nexport const serializeInteractiveEngineMessage = serializeInteractiveEngineFrame;\n"]}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/protocol.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CallbackActivity, CallbackActivityKind } from \"../../core/callback-activity.ts\";\nimport type {\n\tHostInputFormField,\n\tHostSessionPickerRow,\n\tWidgetScrollRequest,\n\tWidgetScrollState,\n} from \"../../core/extensions/ui-types.js\";\nimport type { KeyId } from \"../../core/keybindings.ts\";\n\n/**\n * Version 4 separates minimal session binding from optional resource readiness.\n * A host must not submit a prompt until the matching engine generation reports\n * `engine_resources_ready`.\n */\nexport const INTERACTIVE_ENGINE_PROTOCOL_VERSION = 4;\n\nexport interface JsonObject {\n\t[key: string]: JsonValue;\n}\n\nexport type JsonValue = boolean | JsonObject | JsonValue[] | null | number | string;\n\nexport interface SerializableOverlayOptions {\n\tanchor?: string;\n\tcol?: number | string;\n\tmargin?: number | { top?: number; right?: number; bottom?: number; left?: number };\n\tmaxHeight?: number | string;\n\tmaxWidth?: number | string;\n\tminHeight?: number;\n\tminWidth?: number;\n\toffsetX?: number;\n\toffsetY?: number;\n\trow?: number | string;\n\twidth?: number | string;\n}\n\n/**\n * Allowlisted terminal-mode control a remote custom component may ask the host\n * to apply to the real host TTY. Deliberately NOT a raw byte channel: the child\n * names an intent and the host owns the concrete escape sequence, so a buggy or\n * compromised child can only toggle this documented mode.\n */\nexport type EngineTerminalControl = { kind: \"autowrap\"; enabled: boolean };\n\nexport interface EngineExtensionShortcut {\n\tkey: string;\n\tdescription?: string;\n\t/** Editor-owned input exclusions resolved in the engine and matched by the host. */\n\teditorKeys?: KeyId[];\n}\n\nexport type SerializableKeybindingsConfig = Record<string, KeyId | KeyId[]>;\n\nexport interface EngineKeybindingState {\n\tuserBindings: SerializableKeybindingsConfig;\n\teffectiveBindings: SerializableKeybindingsConfig;\n\tshortcuts: EngineExtensionShortcut[];\n}\n\nexport type InteractiveEngineMessage =\n\t| { type: \"engine_ready\"; protocolVersion: typeof INTERACTIVE_ENGINE_PROTOCOL_VERSION; pid: number }\n\t| { type: \"engine_bound\" }\n\t| { type: \"engine_resources_ready\" }\n\t| { type: \"engine_resources_failed\"; message: string }\n\t| { type: \"engine_keybindings_reloaded\"; state: EngineKeybindingState }\n\t| { type: \"engine_heartbeat\"; at: number }\n\t| { type: \"engine_activity_started\"; activity: CallbackActivity }\n\t| { type: \"engine_activity_finished\"; activityId: string }\n\t/**\n\t * The child took ownership of a correlated RPC request: it has parsed the\n\t * command and is about to run it. Emitted and flushed BEFORE any handler\n\t * work, so a later transport failure can be told apart from a send that\n\t * never landed. Output is not a substitute: a command can run to completion\n\t * with side effects and produce nothing.\n\t */\n\t| { type: \"engine_request_accepted\"; requestId: string; command: string }\n\t| {\n\t\t\ttype: \"engine_custom_open\";\n\t\t\tcomponentId: string;\n\t\t\toverlay: boolean;\n\t\t\tpurpose?: \"prompt\" | \"navigation\";\n\t\t\tdeferInlineCustomUiFocus?: boolean;\n\t\t\thandlesCtrlC?: boolean;\n\t\t\thandlesInternalUiAction?: boolean;\n\t\t\treserveTranscriptRows?: boolean;\n\t\t\toverlayOptions?: SerializableOverlayOptions;\n\t\t\twidgetKey?: string;\n\t\t\twidgetPlacement?: \"aboveEditor\" | \"belowEditor\";\n\t\t\twidgetScroll?: { maxHeight: number; maxHeightFraction?: number };\n\t }\n\t| { type: \"engine_custom_close\"; componentId: string }\n\t| {\n\t\t\ttype: \"engine_custom_frame\";\n\t\t\tcomponentId: string;\n\t\t\trequestId: number;\n\t\t\tlines: string[];\n\t\t\tscrollRequest?: WidgetScrollRequest;\n\t }\n\t| { type: \"engine_custom_input_result\"; componentId: string; requestId: number; handled: boolean }\n\t| { type: \"engine_custom_invalidate\"; componentId: string }\n\t| { type: \"engine_custom_done\"; componentId: string; result?: JsonValue }\n\t| { type: \"engine_custom_terminal\"; componentId: string; control: EngineTerminalControl }\n\t| { type: \"engine_custom_copy\"; componentId: string; requestId: number; text: string }\n\t| { type: \"engine_custom_control\"; componentId: string; action: \"focus\" | \"hide\" | \"show\" | \"unfocus\" }\n\t| {\n\t\t\ttype: \"engine_session_picker_open\";\n\t\t\tcomponentId: string;\n\t\t\tsessions: HostSessionPickerRow[];\n\t\t\tshowRenameHint?: boolean;\n\t }\n\t| { type: \"engine_session_picker_update\"; componentId: string; sessions: HostSessionPickerRow[] }\n\t| { type: \"engine_session_picker_error\"; componentId: string; message: string }\n\t| { type: \"engine_session_picker_close\"; componentId: string }\n\t| {\n\t\t\ttype: \"engine_input_form_open\";\n\t\t\tcomponentId: string;\n\t\t\ttitle: string;\n\t\t\tfields: HostInputFormField[];\n\t\t\theading?: string;\n\t\t\tsubmitLabel?: string;\n\t }\n\t| { type: \"engine_input_form_close\"; componentId: string };\nexport type InteractiveEngineCommand =\n\t| { type: \"engine_project_trust_start\"; componentId: string; kind: \"select\" | \"confirm\" | \"input\"; title: string }\n\t| { type: \"engine_project_trust_end\"; componentId: string }\n\t| { type: \"engine_custom_render\"; componentId: string; requestId: number; width: number; rows: number }\n\t| { type: \"engine_custom_input\"; componentId: string; requestId: number; data: string }\n\t| { type: \"engine_custom_copy_result\"; componentId: string; requestId: number; error?: string }\n\t| { type: \"engine_custom_scroll\"; componentId: string; state: WidgetScrollState }\n\t| { type: \"engine_custom_dispose\"; componentId: string }\n\t| {\n\t\t\ttype: \"engine_tool_render\";\n\t\t\tcomponentId: string;\n\t\t\trequestId: number;\n\t\t\twidth: number;\n\t\t\ttoolName: string;\n\t\t\ttoolCallId: string;\n\t\t\targs: JsonValue;\n\t\t\tresult?: JsonObject;\n\t\t\texecutionStarted: boolean;\n\t\t\targsComplete: boolean;\n\t\t\tisPartial: boolean;\n\t\t\texpanded: boolean;\n\t\t\tshowImages: boolean;\n\t\t\timageWidthCells: number;\n\t }\n\t| {\n\t\t\ttype: \"engine_message_render\";\n\t\t\tcomponentId: string;\n\t\t\trequestId: number;\n\t\t\twidth: number;\n\t\t\tmessage: JsonObject;\n\t\t\texpanded: boolean;\n\t\t\toutputPad: number;\n\t }\n\t| { type: \"engine_render_dispose\"; componentId: string }\n\t| { type: \"engine_session_picker_select\"; componentId: string; path: string }\n\t| { type: \"engine_session_picker_cancel\"; componentId: string }\n\t| { type: \"engine_session_picker_delete\"; componentId: string; path: string }\n\t| { type: \"engine_input_form_submit\"; componentId: string; values: Record<string, string> }\n\t| { type: \"engine_input_form_cancel\"; componentId: string };\n\nconst ACTIVITY_KINDS: readonly CallbackActivityKind[] = [\n\t\"extension.hook\",\n\t\"renderer\",\n\t\"tool.execute\",\n\t\"tool.prepare\",\n\t\"workflow.ctx_tool\",\n\t\"workflow.run\",\n\t\"workflow.stage_adapter\",\n];\n\nexport function isJsonValue(value: object | boolean | null | number | string): value is JsonValue {\n\tif (value === null || typeof value !== \"object\") return true;\n\tif (Array.isArray(value)) return value.every((item) => isJsonValue(item));\n\treturn Object.values(value).every((item) => item !== undefined && isJsonValue(item));\n}\n\nfunction isJsonObject(value: JsonValue): value is JsonObject {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isActivityKind(value: JsonValue): value is CallbackActivityKind {\n\treturn typeof value === \"string\" && ACTIVITY_KINDS.includes(value as CallbackActivityKind);\n}\n\nfunction isCallbackActivity(value: JsonValue): value is JsonObject & CallbackActivity {\n\treturn (\n\t\tisJsonObject(value) &&\n\t\ttypeof value.id === \"string\" &&\n\t\tisActivityKind(value.kind) &&\n\t\ttypeof value.name === \"string\" &&\n\t\ttypeof value.startedAt === \"number\"\n\t);\n}\n\nfunction parseEngineTerminalControl(value: JsonValue | undefined): EngineTerminalControl | undefined {\n\tif (value === undefined || !isJsonObject(value) || value.kind !== \"autowrap\" || typeof value.enabled !== \"boolean\") {\n\t\treturn undefined;\n\t}\n\treturn { kind: \"autowrap\", enabled: value.enabled };\n}\n\nconst SESSION_PICKER_MESSAGE_COLORS = [\"success\", \"warning\", \"accent\", \"error\"] as const;\n\nfunction parseSessionPickerRow(value: JsonValue): HostSessionPickerRow | undefined {\n\tif (!isJsonObject(value)) return undefined;\n\tconst {\n\t\tpath,\n\t\tid,\n\t\tcwd,\n\t\tcreatedAt,\n\t\tmodifiedAt,\n\t\tmessageCount,\n\t\tfirstMessage,\n\t\tsummary,\n\t\tallMessagesText,\n\t\tname,\n\t\tmessageColor,\n\t} = value;\n\tif (\n\t\ttypeof path !== \"string\" ||\n\t\ttypeof id !== \"string\" ||\n\t\ttypeof cwd !== \"string\" ||\n\t\ttypeof createdAt !== \"number\" ||\n\t\ttypeof modifiedAt !== \"number\" ||\n\t\ttypeof messageCount !== \"number\" ||\n\t\ttypeof firstMessage !== \"string\"\n\t)\n\t\treturn undefined;\n\tif (summary !== undefined && typeof summary !== \"string\") return undefined;\n\tif (allMessagesText !== undefined && typeof allMessagesText !== \"string\") return undefined;\n\tif (name !== undefined && typeof name !== \"string\") return undefined;\n\tif (\n\t\tmessageColor !== undefined &&\n\t\t!SESSION_PICKER_MESSAGE_COLORS.includes(messageColor as (typeof SESSION_PICKER_MESSAGE_COLORS)[number])\n\t)\n\t\treturn undefined;\n\treturn {\n\t\tpath,\n\t\tid,\n\t\tcwd,\n\t\tcreatedAt,\n\t\tmodifiedAt,\n\t\tmessageCount,\n\t\tfirstMessage,\n\t\t...(summary !== undefined ? { summary } : {}),\n\t\t...(allMessagesText !== undefined ? { allMessagesText } : {}),\n\t\t...(name !== undefined ? { name } : {}),\n\t\t...(messageColor !== undefined\n\t\t\t? { messageColor: messageColor as (typeof SESSION_PICKER_MESSAGE_COLORS)[number] }\n\t\t\t: {}),\n\t};\n}\n\nfunction parseSessionPickerRows(value: JsonValue | undefined): HostSessionPickerRow[] | undefined {\n\tif (!Array.isArray(value)) return undefined;\n\tconst rows: HostSessionPickerRow[] = [];\n\tfor (const entry of value) {\n\t\tconst row = parseSessionPickerRow(entry);\n\t\tif (!row) return undefined;\n\t\trows.push(row);\n\t}\n\treturn rows;\n}\n\nconst INPUT_FORM_FIELD_TYPES = [\"string\", \"text\", \"number\", \"integer\", \"boolean\", \"select\"] as const;\n\nfunction parseInputFormFields(value: JsonValue | undefined): HostInputFormField[] | undefined {\n\tif (!Array.isArray(value)) return undefined;\n\tconst fields: HostInputFormField[] = [];\n\tfor (const entry of value) {\n\t\tif (!isJsonObject(entry)) return undefined;\n\t\tconst { name, type, description, required, choices, placeholder, initialValue } = entry;\n\t\tif (\n\t\t\ttypeof name !== \"string\" ||\n\t\t\t!INPUT_FORM_FIELD_TYPES.includes(type as HostInputFormField[\"type\"]) ||\n\t\t\ttypeof initialValue !== \"string\"\n\t\t)\n\t\t\treturn undefined;\n\t\tif (description !== undefined && typeof description !== \"string\") return undefined;\n\t\tif (required !== undefined && typeof required !== \"boolean\") return undefined;\n\t\tif (choices !== undefined && (!Array.isArray(choices) || !choices.every((choice) => typeof choice === \"string\")))\n\t\t\treturn undefined;\n\t\tif (placeholder !== undefined && typeof placeholder !== \"string\") return undefined;\n\t\tfields.push({\n\t\t\tname,\n\t\t\ttype: type as HostInputFormField[\"type\"],\n\t\t\tinitialValue,\n\t\t\t...(typeof description === \"string\" ? { description } : {}),\n\t\t\t...(typeof required === \"boolean\" ? { required } : {}),\n\t\t\t...(Array.isArray(choices) ? { choices: choices as string[] } : {}),\n\t\t\t...(typeof placeholder === \"string\" ? { placeholder } : {}),\n\t\t});\n\t}\n\treturn fields;\n}\n\nfunction parseStringRecord(value: JsonValue | undefined): Record<string, string> | undefined {\n\tif (value === undefined || !isJsonObject(value)) return undefined;\n\tconst entries = Object.entries(value);\n\tif (entries.some(([, entry]) => typeof entry !== \"string\")) return undefined;\n\treturn Object.fromEntries(entries) as Record<string, string>;\n}\n\nfunction parseKeybindingsConfig(value: JsonValue | undefined): SerializableKeybindingsConfig | undefined {\n\tif (value === undefined || !isJsonObject(value)) return undefined;\n\tconst config: SerializableKeybindingsConfig = {};\n\tfor (const [key, binding] of Object.entries(value)) {\n\t\tif (typeof binding === \"string\") config[key] = binding as SerializableKeybindingsConfig[string];\n\t\telse if (Array.isArray(binding) && binding.every((entry) => typeof entry === \"string\")) {\n\t\t\tconfig[key] = binding as SerializableKeybindingsConfig[string];\n\t\t} else return undefined;\n\t}\n\treturn config;\n}\n\nfunction parseKeybindingState(value: JsonValue | undefined): EngineKeybindingState | undefined {\n\tif (value === undefined || !isJsonObject(value) || !Array.isArray(value.shortcuts)) return undefined;\n\tconst userBindings = parseKeybindingsConfig(value.userBindings);\n\tconst effectiveBindings = parseKeybindingsConfig(value.effectiveBindings);\n\tif (!userBindings || !effectiveBindings) return undefined;\n\tconst shortcuts: EngineExtensionShortcut[] = [];\n\tfor (const shortcut of value.shortcuts) {\n\t\tif (\n\t\t\t!isJsonObject(shortcut) ||\n\t\t\ttypeof shortcut.key !== \"string\" ||\n\t\t\t(shortcut.description !== undefined && typeof shortcut.description !== \"string\") ||\n\t\t\t(shortcut.editorKeys !== undefined &&\n\t\t\t\t(!Array.isArray(shortcut.editorKeys) || shortcut.editorKeys.some((key) => typeof key !== \"string\")))\n\t\t)\n\t\t\treturn undefined;\n\t\tshortcuts.push({\n\t\t\tkey: shortcut.key,\n\t\t\t...(typeof shortcut.description === \"string\" ? { description: shortcut.description } : {}),\n\t\t\t...(Array.isArray(shortcut.editorKeys) ? { editorKeys: shortcut.editorKeys as KeyId[] } : {}),\n\t\t});\n\t}\n\treturn { userBindings, effectiveBindings, shortcuts };\n}\n\nfunction parseJsonObject(line: string): JsonObject | undefined {\n\tlet value: JsonValue;\n\ttry {\n\t\tvalue = JSON.parse(line) as JsonValue;\n\t} catch {\n\t\treturn undefined;\n\t}\n\treturn isJsonObject(value) ? value : undefined;\n}\n\nexport function parseInteractiveEngineMessage(line: string): InteractiveEngineMessage | undefined {\n\tconst value = parseJsonObject(line);\n\tif (!value || typeof value.type !== \"string\") return undefined;\n\tswitch (value.type) {\n\t\tcase \"engine_ready\":\n\t\t\treturn value.protocolVersion === INTERACTIVE_ENGINE_PROTOCOL_VERSION && typeof value.pid === \"number\"\n\t\t\t\t? { type: value.type, protocolVersion: INTERACTIVE_ENGINE_PROTOCOL_VERSION, pid: value.pid }\n\t\t\t\t: undefined;\n\t\tcase \"engine_bound\":\n\t\t\treturn { type: value.type };\n\t\tcase \"engine_resources_ready\":\n\t\t\treturn { type: value.type };\n\t\tcase \"engine_resources_failed\":\n\t\t\treturn typeof value.message === \"string\" ? { type: value.type, message: value.message } : undefined;\n\t\tcase \"engine_keybindings_reloaded\": {\n\t\t\tconst state = parseKeybindingState(value.state);\n\t\t\treturn state ? { type: value.type, state } : undefined;\n\t\t}\n\t\tcase \"engine_heartbeat\":\n\t\t\treturn typeof value.at === \"number\" ? { type: value.type, at: value.at } : undefined;\n\t\tcase \"engine_activity_started\":\n\t\t\treturn isCallbackActivity(value.activity) ? { type: value.type, activity: value.activity } : undefined;\n\t\tcase \"engine_activity_finished\":\n\t\t\treturn typeof value.activityId === \"string\" ? { type: value.type, activityId: value.activityId } : undefined;\n\t\tcase \"engine_request_accepted\":\n\t\t\treturn typeof value.requestId === \"string\" && typeof value.command === \"string\"\n\t\t\t\t? { type: value.type, requestId: value.requestId, command: value.command }\n\t\t\t\t: undefined;\n\t\tcase \"engine_custom_open\":\n\t\t\treturn typeof value.componentId === \"string\" && typeof value.overlay === \"boolean\"\n\t\t\t\t? {\n\t\t\t\t\t\ttype: value.type,\n\t\t\t\t\t\tcomponentId: value.componentId,\n\t\t\t\t\t\toverlay: value.overlay,\n\t\t\t\t\t\t...(value.purpose === \"navigation\" || value.purpose === \"prompt\" ? { purpose: value.purpose } : {}),\n\t\t\t\t\t\tdeferInlineCustomUiFocus: value.deferInlineCustomUiFocus === true,\n\t\t\t\t\t\thandlesCtrlC: value.handlesCtrlC === true,\n\t\t\t\t\t\thandlesInternalUiAction: value.handlesInternalUiAction === true,\n\t\t\t\t\t\treserveTranscriptRows: value.reserveTranscriptRows === true,\n\t\t\t\t\t\toverlayOptions: isJsonObject(value.overlayOptions)\n\t\t\t\t\t\t\t? (value.overlayOptions as SerializableOverlayOptions)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\twidgetKey: typeof value.widgetKey === \"string\" ? value.widgetKey : undefined,\n\t\t\t\t\t\t...(isJsonObject(value.widgetScroll) && typeof value.widgetScroll.maxHeight === \"number\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\twidgetScroll: {\n\t\t\t\t\t\t\t\t\t\tmaxHeight: value.widgetScroll.maxHeight,\n\t\t\t\t\t\t\t\t\t\t...(typeof value.widgetScroll.maxHeightFraction === \"number\"\n\t\t\t\t\t\t\t\t\t\t\t? { maxHeightFraction: value.widgetScroll.maxHeightFraction }\n\t\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\twidgetPlacement:\n\t\t\t\t\t\t\tvalue.widgetPlacement === \"belowEditor\"\n\t\t\t\t\t\t\t\t? \"belowEditor\"\n\t\t\t\t\t\t\t\t: value.widgetPlacement === \"aboveEditor\"\n\t\t\t\t\t\t\t\t\t? \"aboveEditor\"\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\t\tcase \"engine_custom_close\":\n\t\t\treturn typeof value.componentId === \"string\"\n\t\t\t\t? { type: value.type, componentId: value.componentId }\n\t\t\t\t: undefined;\n\t\tcase \"engine_custom_frame\":\n\t\t\treturn typeof value.componentId === \"string\" &&\n\t\t\t\ttypeof value.requestId === \"number\" &&\n\t\t\t\tArray.isArray(value.lines) &&\n\t\t\t\tvalue.lines.every((entry) => typeof entry === \"string\")\n\t\t\t\t? {\n\t\t\t\t\t\ttype: value.type,\n\t\t\t\t\t\tcomponentId: value.componentId,\n\t\t\t\t\t\trequestId: value.requestId,\n\t\t\t\t\t\tlines: value.lines,\n\t\t\t\t\t\t...(isJsonObject(value.scrollRequest) &&\n\t\t\t\t\t\ttypeof value.scrollRequest.version === \"number\" &&\n\t\t\t\t\t\ttypeof value.scrollRequest.scrollTop === \"number\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tscrollRequest: {\n\t\t\t\t\t\t\t\t\t\tversion: value.scrollRequest.version,\n\t\t\t\t\t\t\t\t\t\tscrollTop: value.scrollRequest.scrollTop,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\t\tcase \"engine_custom_input_result\":\n\t\t\treturn typeof value.componentId === \"string\" &&\n\t\t\t\ttypeof value.requestId === \"number\" &&\n\t\t\t\ttypeof value.handled === \"boolean\"\n\t\t\t\t? { type: value.type, componentId: value.componentId, requestId: value.requestId, handled: value.handled }\n\t\t\t\t: undefined;\n\t\tcase \"engine_custom_invalidate\":\n\t\t\treturn typeof value.componentId === \"string\"\n\t\t\t\t? { type: value.type, componentId: value.componentId }\n\t\t\t\t: undefined;\n\t\tcase \"engine_custom_done\":\n\t\t\treturn typeof value.componentId === \"string\"\n\t\t\t\t? { type: value.type, componentId: value.componentId, result: value.result }\n\t\t\t\t: undefined;\n\t\tcase \"engine_custom_copy\":\n\t\t\treturn typeof value.componentId === \"string\" &&\n\t\t\t\ttypeof value.requestId === \"number\" &&\n\t\t\t\ttypeof value.text === \"string\"\n\t\t\t\t? { type: value.type, componentId: value.componentId, requestId: value.requestId, text: value.text }\n\t\t\t\t: undefined;\n\t\tcase \"engine_custom_terminal\": {\n\t\t\tconst control = parseEngineTerminalControl(value.control);\n\t\t\treturn typeof value.componentId === \"string\" && control\n\t\t\t\t? { type: value.type, componentId: value.componentId, control }\n\t\t\t\t: undefined;\n\t\t}\n\t\tcase \"engine_custom_control\":\n\t\t\treturn typeof value.componentId === \"string\" &&\n\t\t\t\t[\"focus\", \"hide\", \"show\", \"unfocus\"].includes(String(value.action))\n\t\t\t\t? {\n\t\t\t\t\t\ttype: value.type,\n\t\t\t\t\t\tcomponentId: value.componentId,\n\t\t\t\t\t\taction: value.action as \"focus\" | \"hide\" | \"show\" | \"unfocus\",\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\t\tcase \"engine_session_picker_open\": {\n\t\t\tconst sessions = parseSessionPickerRows(value.sessions);\n\t\t\treturn typeof value.componentId === \"string\" &&\n\t\t\t\tsessions &&\n\t\t\t\t(value.showRenameHint === undefined || typeof value.showRenameHint === \"boolean\")\n\t\t\t\t? {\n\t\t\t\t\t\ttype: value.type,\n\t\t\t\t\t\tcomponentId: value.componentId,\n\t\t\t\t\t\tsessions,\n\t\t\t\t\t\t...(typeof value.showRenameHint === \"boolean\" ? { showRenameHint: value.showRenameHint } : {}),\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\t\t}\n\t\tcase \"engine_session_picker_update\": {\n\t\t\tconst sessions = parseSessionPickerRows(value.sessions);\n\t\t\treturn typeof value.componentId === \"string\" && sessions\n\t\t\t\t? { type: value.type, componentId: value.componentId, sessions }\n\t\t\t\t: undefined;\n\t\t}\n\t\tcase \"engine_session_picker_error\":\n\t\t\treturn typeof value.componentId === \"string\" && typeof value.message === \"string\"\n\t\t\t\t? { type: value.type, componentId: value.componentId, message: value.message }\n\t\t\t\t: undefined;\n\t\tcase \"engine_session_picker_close\":\n\t\tcase \"engine_input_form_close\":\n\t\t\treturn typeof value.componentId === \"string\"\n\t\t\t\t? { type: value.type, componentId: value.componentId }\n\t\t\t\t: undefined;\n\t\tcase \"engine_input_form_open\": {\n\t\t\tconst fields = parseInputFormFields(value.fields);\n\t\t\treturn typeof value.componentId === \"string\" && typeof value.title === \"string\" && fields\n\t\t\t\t? {\n\t\t\t\t\t\ttype: value.type,\n\t\t\t\t\t\tcomponentId: value.componentId,\n\t\t\t\t\t\ttitle: value.title,\n\t\t\t\t\t\tfields,\n\t\t\t\t\t\t...(typeof value.heading === \"string\" ? { heading: value.heading } : {}),\n\t\t\t\t\t\t...(typeof value.submitLabel === \"string\" ? { submitLabel: value.submitLabel } : {}),\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\t\t}\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\nexport function parseInteractiveEngineCommand(line: string): InteractiveEngineCommand | undefined {\n\tconst value = parseJsonObject(line);\n\tif (!value || typeof value.type !== \"string\" || typeof value.componentId !== \"string\") return undefined;\n\tif (value.type === \"engine_project_trust_end\") return { type: value.type, componentId: value.componentId };\n\tif (\n\t\tvalue.type === \"engine_project_trust_start\" &&\n\t\t(value.kind === \"select\" || value.kind === \"confirm\" || value.kind === \"input\") &&\n\t\ttypeof value.title === \"string\"\n\t) {\n\t\treturn { type: value.type, componentId: value.componentId, kind: value.kind, title: value.title };\n\t}\n\tif (\n\t\tvalue.type === \"engine_custom_scroll\" &&\n\t\tisJsonObject(value.state) &&\n\t\ttypeof value.state.scrollTop === \"number\" &&\n\t\ttypeof value.state.viewportHeight === \"number\" &&\n\t\ttypeof value.state.contentHeight === \"number\"\n\t) {\n\t\treturn {\n\t\t\ttype: value.type,\n\t\t\tcomponentId: value.componentId,\n\t\t\tstate: {\n\t\t\t\tscrollTop: value.state.scrollTop,\n\t\t\t\tviewportHeight: value.state.viewportHeight,\n\t\t\t\tcontentHeight: value.state.contentHeight,\n\t\t\t},\n\t\t};\n\t}\n\tif (\n\t\tvalue.type === \"engine_custom_render\" &&\n\t\ttypeof value.requestId === \"number\" &&\n\t\ttypeof value.width === \"number\" &&\n\t\ttypeof value.rows === \"number\"\n\t) {\n\t\treturn {\n\t\t\ttype: value.type,\n\t\t\tcomponentId: value.componentId,\n\t\t\trequestId: value.requestId,\n\t\t\twidth: value.width,\n\t\t\trows: value.rows,\n\t\t};\n\t}\n\tif (value.type === \"engine_custom_input\" && typeof value.requestId === \"number\" && typeof value.data === \"string\")\n\t\treturn { type: value.type, componentId: value.componentId, requestId: value.requestId, data: value.data };\n\tif (\n\t\tvalue.type === \"engine_custom_copy_result\" &&\n\t\ttypeof value.requestId === \"number\" &&\n\t\t(value.error === undefined || typeof value.error === \"string\")\n\t)\n\t\treturn { type: value.type, componentId: value.componentId, requestId: value.requestId, error: value.error };\n\tif (value.type === \"engine_custom_dispose\" || value.type === \"engine_render_dispose\")\n\t\treturn { type: value.type, componentId: value.componentId };\n\tif (\n\t\t(value.type === \"engine_session_picker_select\" || value.type === \"engine_session_picker_delete\") &&\n\t\ttypeof value.path === \"string\"\n\t) {\n\t\treturn { type: value.type, componentId: value.componentId, path: value.path };\n\t}\n\tif (value.type === \"engine_session_picker_cancel\") return { type: value.type, componentId: value.componentId };\n\tif (value.type === \"engine_input_form_cancel\") return { type: value.type, componentId: value.componentId };\n\tif (value.type === \"engine_input_form_submit\") {\n\t\tconst values = parseStringRecord(value.values);\n\t\treturn values ? { type: value.type, componentId: value.componentId, values } : undefined;\n\t}\n\tif (\n\t\tvalue.type === \"engine_tool_render\" &&\n\t\ttypeof value.requestId === \"number\" &&\n\t\ttypeof value.width === \"number\" &&\n\t\ttypeof value.toolName === \"string\" &&\n\t\ttypeof value.toolCallId === \"string\" &&\n\t\ttypeof value.executionStarted === \"boolean\" &&\n\t\ttypeof value.argsComplete === \"boolean\" &&\n\t\ttypeof value.isPartial === \"boolean\" &&\n\t\ttypeof value.expanded === \"boolean\" &&\n\t\ttypeof value.showImages === \"boolean\" &&\n\t\ttypeof value.imageWidthCells === \"number\"\n\t) {\n\t\treturn {\n\t\t\ttype: value.type,\n\t\t\tcomponentId: value.componentId,\n\t\t\trequestId: value.requestId,\n\t\t\twidth: value.width,\n\t\t\ttoolName: value.toolName,\n\t\t\ttoolCallId: value.toolCallId,\n\t\t\targs: value.args,\n\t\t\tresult: isJsonObject(value.result) ? value.result : undefined,\n\t\t\texecutionStarted: value.executionStarted,\n\t\t\targsComplete: value.argsComplete,\n\t\t\tisPartial: value.isPartial,\n\t\t\texpanded: value.expanded,\n\t\t\tshowImages: value.showImages,\n\t\t\timageWidthCells: value.imageWidthCells,\n\t\t};\n\t}\n\tif (\n\t\tvalue.type === \"engine_message_render\" &&\n\t\ttypeof value.requestId === \"number\" &&\n\t\ttypeof value.width === \"number\" &&\n\t\tisJsonObject(value.message) &&\n\t\ttypeof value.expanded === \"boolean\" &&\n\t\ttypeof value.outputPad === \"number\"\n\t) {\n\t\treturn {\n\t\t\ttype: value.type,\n\t\t\tcomponentId: value.componentId,\n\t\t\trequestId: value.requestId,\n\t\t\twidth: value.width,\n\t\t\tmessage: value.message,\n\t\t\texpanded: value.expanded,\n\t\t\toutputPad: value.outputPad,\n\t\t};\n\t}\n\treturn undefined;\n}\n\nexport function serializeInteractiveEngineFrame(message: InteractiveEngineMessage | InteractiveEngineCommand): string {\n\treturn `${JSON.stringify(message)}\\n`;\n}\n\nexport const serializeInteractiveEngineMessage = serializeInteractiveEngineFrame;\n"]}
@@ -19,7 +19,8 @@ export declare class RemoteComponentController {
19
19
  private readonly unsubscribeTuiRendererReplaced;
20
20
  private readonly runtime;
21
21
  private readonly ui;
22
- constructor(runtime: RemoteComponentRuntime, ui: RemoteComponentUI, tuiRendererLifecycle: TuiRendererLifecycle);
22
+ private readonly copyText;
23
+ constructor(runtime: RemoteComponentRuntime, ui: RemoteComponentUI, tuiRendererLifecycle: TuiRendererLifecycle, copyText?: (text: string) => Promise<void>);
23
24
  dispose(): void;
24
25
  /** The remote overlay proxy that currently holds focus (see remote-input-ownership.ts). */
25
26
  focusedRemoteOverlay(): unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"remote-component.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/remote-component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAKxE,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACxC,0BAA0B,EAC1B,iBAAiB,GAAG,mBAAmB,GAAG,mBAAmB,CAC7D,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,eAAe,GAAG,WAAW,GAAG,iBAAiB,CAAC,CAAC;AAevH;;;GAGG;AACH,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAwJjD,MAAM,WAAW,oBAAoB;IACpC,YAAY,IAAI,OAAO,CAAC;IACxB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CACrD;AAED,qBAAa,yBAAyB;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IACrE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAa;IACxD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IACvD,OAAO,CAAC,QAAQ,CAAC,8BAA8B,CAAa;IAE5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;IAEvC,YAAY,OAAO,EAAE,sBAAsB,EAAE,EAAE,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,EAY7G;IAED,OAAO,IAAI,IAAI,CAKd;IAED,2FAA2F;IAC3F,oBAAoB,IAAI,OAAO,CAK9B;IAED,sFAAsF;IACtF,gBAAgB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAM5C;IAED,iFAAiF;IACjF,uBAAuB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAKnD;IAED;;;;;;;;;;OAUG;IACH,kBAAkB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAQ9C;IAED,OAAO,CAAC,aAAa;IASrB;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,aAAa;IAuDrB,OAAO,CAAC,IAAI;IAoFZ,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,OAAO;CAkBf"}
1
+ {"version":3,"file":"remote-component.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/remote-component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAKxE,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACxC,0BAA0B,EAC1B,iBAAiB,GAAG,mBAAmB,GAAG,mBAAmB,CAC7D,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,eAAe,GAAG,WAAW,GAAG,iBAAiB,CAAC,CAAC;AAevH;;;GAGG;AACH,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAwJjD,MAAM,WAAW,oBAAoB;IACpC,YAAY,IAAI,OAAO,CAAC;IACxB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CACrD;AAED,qBAAa,yBAAyB;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IACrE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAa;IACxD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IACvD,OAAO,CAAC,QAAQ,CAAC,8BAA8B,CAAa;IAE5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;IAE3D,YACC,OAAO,EAAE,sBAAsB,EAC/B,EAAE,EAAE,iBAAiB,EACrB,oBAAoB,EAAE,oBAAoB,EAC1C,QAAQ,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAmB,EAc3D;IAED,OAAO,IAAI,IAAI,CAKd;IAED,2FAA2F;IAC3F,oBAAoB,IAAI,OAAO,CAK9B;IAED,sFAAsF;IACtF,gBAAgB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAM5C;IAED,iFAAiF;IACjF,uBAAuB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAKnD;IAED;;;;;;;;;;OAUG;IACH,kBAAkB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAQ9C;IAED,OAAO,CAAC,aAAa;IASrB;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,aAAa;IAwErB,OAAO,CAAC,IAAI;IAoFZ,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,OAAO;CAkBf"}
@@ -1,3 +1,4 @@
1
+ import { copyToClipboard } from "../../utils/clipboard.js";
1
2
  import { RemoteFrameWidthClamp } from "./remote-frame-clamp.js";
2
3
  import { TerminalModeController } from "./terminal-mode-controller.js";
3
4
  /**
@@ -147,9 +148,11 @@ export class RemoteComponentController {
147
148
  unsubscribeTuiRendererReplaced;
148
149
  runtime;
149
150
  ui;
150
- constructor(runtime, ui, tuiRendererLifecycle) {
151
+ copyText;
152
+ constructor(runtime, ui, tuiRendererLifecycle, copyText = copyToClipboard) {
151
153
  this.runtime = runtime;
152
154
  this.ui = ui;
155
+ this.copyText = copyText;
153
156
  this.terminalModes = new TerminalModeController(() => tuiRendererLifecycle.isFullscreen());
154
157
  this.unsubscribeTuiRendererReplaced = tuiRendererLifecycle.onRendererReplaced(() => this.terminalModes.rebindTui());
155
158
  this.unsubscribe = runtime.onEngineMessage((message) => this.handleMessage(message));
@@ -281,6 +284,25 @@ export class RemoteComponentController {
281
284
  case "engine_custom_invalidate":
282
285
  this.mounted.get(message.componentId)?.component.requestRemoteRender();
283
286
  break;
287
+ case "engine_custom_copy":
288
+ void (async () => {
289
+ let error;
290
+ try {
291
+ if (!this.mounted.has(message.componentId))
292
+ throw new Error("Sign-in screen is no longer open");
293
+ await this.copyText(message.text);
294
+ }
295
+ catch (cause) {
296
+ error = cause instanceof Error ? cause.message : String(cause);
297
+ }
298
+ this.runtime.sendEngineCommand({
299
+ type: "engine_custom_copy_result",
300
+ componentId: message.componentId,
301
+ requestId: message.requestId,
302
+ error,
303
+ });
304
+ })();
305
+ break;
284
306
  case "engine_custom_terminal":
285
307
  this.terminalModes.applyControl(message.componentId, message.control);
286
308
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"remote-component.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/remote-component.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Component, OverlayHandle, OverlayOptions, TUI } from \"@earendil-works/pi-tui\";\nimport type { ExtensionUIContext } from \"../../core/extensions/index.js\";\nimport type { WidgetScrollRequest, WidgetScrollState } from \"../../core/extensions/ui-types.js\";\nimport type { IsolatedInteractiveRuntime } from \"./isolated-runtime.js\";\nimport type { InteractiveEngineMessage, JsonValue, SerializableOverlayOptions } from \"./protocol.ts\";\nimport { RemoteFrameWidthClamp } from \"./remote-frame-clamp.ts\";\nimport { TerminalModeController } from \"./terminal-mode-controller.ts\";\n\nexport type RemoteComponentRuntime = Pick<\n\tIsolatedInteractiveRuntime,\n\t\"onEngineMessage\" | \"onGenerationEnded\" | \"sendEngineCommand\"\n>;\n\nexport type RemoteComponentUI = Pick<ExtensionUIContext, \"custom\" | \"requestRender\" | \"setWidget\" | \"onWidgetRelease\">;\n\ninterface MountedRemoteComponent {\n\tcomponent: RemoteComponent;\n\tdone: (result: JsonValue | undefined) => void;\n\tengineDone: boolean;\n\t/** The extension declared that this component binds Ctrl+C itself. */\n\thandlesCtrlC: boolean;\n\t/** The extension declared that this component claims internal UI actions. */\n\thandlesInternalUiAction: boolean;\n\thandle?: OverlayHandle;\n\twidgetKey?: string;\n\tunsubscribeWidgetRelease?: () => void;\n}\n\n/**\n * A stalled engine must not make fullscreen input wait forever. A timed-out\n * reply is treated as unhandled and lets the viewport process the key.\n */\nexport const REMOTE_INPUT_REPLY_TIMEOUT_MS = 250;\n\ninterface PendingInput {\n\tresolve: (handled: boolean | undefined) => void;\n\ttimer: ReturnType<typeof setTimeout>;\n}\n\nclass RemoteComponent implements Component {\n\tprivate scrollRequest: WidgetScrollRequest | undefined;\n\tgetScrollRequest(): WidgetScrollRequest | undefined {\n\t\treturn this.scrollRequest;\n\t}\n\tonScroll(state: WidgetScrollState): void {\n\t\tif (!this.disposed)\n\t\t\tthis.runtime.sendEngineCommand({ type: \"engine_custom_scroll\", componentId: this.componentId, state });\n\t}\n\twantsKeyRelease = true;\n\treadonly handlesInternalUiAction: boolean;\n\tprivate lines = [\"Loading remote component…\"];\n\tprivate width = 0;\n\tprivate rows = 0;\n\tprivate requestId = 0;\n\tprivate inputRequestId = 0;\n\tprivate appliedRequestId = 0;\n\tprivate dirty = true;\n\tprivate disposed = false;\n\tprivate readonly pendingInputs = new Map<number, PendingInput>();\n\tprivate readonly frameClamp = new RemoteFrameWidthClamp();\n\n\tprivate readonly componentId: string;\n\tprivate readonly runtime: RemoteComponentRuntime;\n\tprivate readonly requestRender: () => void;\n\tprivate readonly getRows: () => number;\n\n\tconstructor(\n\t\tcomponentId: string,\n\t\truntime: RemoteComponentRuntime,\n\t\trequestRender: () => void,\n\t\tgetRows: () => number,\n\t\thandlesInternalUiAction = false,\n\t) {\n\t\tthis.componentId = componentId;\n\t\tthis.runtime = runtime;\n\t\tthis.requestRender = requestRender;\n\t\tthis.getRows = getRows;\n\t\tthis.handlesInternalUiAction = handlesInternalUiAction;\n\t}\n\n\trender(width: number): string[] {\n\t\tconst rows = this.getRows();\n\t\tif (!this.disposed && (this.dirty || width !== this.width || rows !== this.rows)) {\n\t\t\tthis.width = width;\n\t\t\tthis.rows = rows;\n\t\t\tthis.dirty = false;\n\t\t\tthis.runtime.sendEngineCommand({\n\t\t\t\ttype: \"engine_custom_render\",\n\t\t\t\tcomponentId: this.componentId,\n\t\t\t\trequestId: ++this.requestId,\n\t\t\t\twidth,\n\t\t\t\trows,\n\t\t\t});\n\t\t}\n\t\t// The engine child re-renders asynchronously; until the fresh frame\n\t\t// arrives, the previous frame may be wrapped for an older terminal\n\t\t// width. Clamp so a resize never replays overflowing lines (pi-tui\n\t\t// crashes on any rendered line wider than the terminal).\n\t\treturn this.frameClamp.clamp(this.lines, width);\n\t}\n\n\thandleInput(data: string): Promise<boolean | undefined> {\n\t\tif (this.disposed) return Promise.resolve(undefined);\n\t\tconst requestId = ++this.inputRequestId;\n\t\tconst result = new Promise<boolean | undefined>((resolve) => {\n\t\t\tconst timer = setTimeout(() => this.resolveInput(requestId, false), REMOTE_INPUT_REPLY_TIMEOUT_MS);\n\t\t\ttimer.unref?.();\n\t\t\tthis.pendingInputs.set(requestId, { resolve, timer });\n\t\t});\n\t\ttry {\n\t\t\tthis.runtime.sendEngineCommand({\n\t\t\t\ttype: \"engine_custom_input\",\n\t\t\t\tcomponentId: this.componentId,\n\t\t\t\trequestId,\n\t\t\t\tdata,\n\t\t\t});\n\t\t} catch {\n\t\t\tthis.resolveInput(requestId, false);\n\t\t}\n\t\t// Engine commands are delivered in order, so a frame requested now is\n\t\t// rendered by the child only AFTER it has applied this input. Pipelining\n\t\t// the request keeps keypress latency at a single round trip and repaints\n\t\t// components that never self-invalidate, instead of waiting for a\n\t\t// child-side invalidate (or an unrelated refresh) to trigger a frame.\n\t\tthis.dirty = true;\n\t\tthis.requestRender();\n\t\treturn result;\n\t}\n\n\tresolveInput(requestId: number, handled: boolean | undefined): void {\n\t\tconst pending = this.pendingInputs.get(requestId);\n\t\tif (!pending) return;\n\t\tthis.pendingInputs.delete(requestId);\n\t\tclearTimeout(pending.timer);\n\t\tpending.resolve(handled);\n\t}\n\n\tinvalidate(): void {\n\t\tthis.dirty = true;\n\t}\n\n\tapplyFrame(requestId: number, lines: string[], scrollRequest?: WidgetScrollRequest): void {\n\t\tif (this.disposed || requestId < this.appliedRequestId) return;\n\t\tthis.appliedRequestId = requestId;\n\t\tthis.lines = lines;\n\t\tthis.scrollRequest = scrollRequest;\n\t\tthis.requestRender();\n\t}\n\n\trequestRemoteRender(): void {\n\t\tif (this.disposed) return;\n\t\tthis.dirty = true;\n\t\tthis.requestRender();\n\t}\n\n\t/**\n\t * Tear the proxy down. `notifyEngine` must be false once the writer no longer\n\t * points at the generation that owns this component: component IDs restart at\n\t * `remote_component_1` for every child, so a late dispose would address an\n\t * unrelated component in the replacement engine.\n\t */\n\tdispose(notifyEngine = true): void {\n\t\tif (this.disposed) return;\n\t\tthis.disposed = true;\n\t\tfor (const requestId of [...this.pendingInputs.keys()]) this.resolveInput(requestId, undefined);\n\t\tif (notifyEngine)\n\t\t\tthis.runtime.sendEngineCommand({ type: \"engine_custom_dispose\", componentId: this.componentId });\n\t}\n}\n\nfunction overlayOptions(options: SerializableOverlayOptions | undefined): OverlayOptions | undefined {\n\treturn options as OverlayOptions | undefined;\n}\n\n/**\n * Resolve the real host terminal from the pi-tui TUI handed to the overlay\n * factory. Optional: some hosts / test seams do not surface `tui.terminal`, in\n * which case terminal-mode controls harmlessly no-op.\n */\nfunction hostTerminal(tui: TUI): { write(data: string): void } {\n\tconst terminal = (tui as { terminal?: { write?(data: string): void } }).terminal;\n\treturn typeof terminal?.write === \"function\" ? (terminal as { write(data: string): void }) : { write: () => {} };\n}\n\nexport interface TuiRendererLifecycle {\n\tisFullscreen(): boolean;\n\tonRendererReplaced(listener: () => void): () => void;\n}\n\nexport class RemoteComponentController {\n\tprivate readonly mounted = new Map<string, MountedRemoteComponent>();\n\tprivate readonly unsubscribe: () => void;\n\tprivate readonly unsubscribeGenerationEnded: () => void;\n\tprivate readonly terminalModes: TerminalModeController;\n\tprivate readonly unsubscribeTuiRendererReplaced: () => void;\n\n\tprivate readonly runtime: RemoteComponentRuntime;\n\tprivate readonly ui: RemoteComponentUI;\n\n\tconstructor(runtime: RemoteComponentRuntime, ui: RemoteComponentUI, tuiRendererLifecycle: TuiRendererLifecycle) {\n\t\tthis.runtime = runtime;\n\t\tthis.ui = ui;\n\t\tthis.terminalModes = new TerminalModeController(() => tuiRendererLifecycle.isFullscreen());\n\t\tthis.unsubscribeTuiRendererReplaced = tuiRendererLifecycle.onRendererReplaced(() =>\n\t\t\tthis.terminalModes.rebindTui(),\n\t\t);\n\t\tthis.unsubscribe = runtime.onEngineMessage((message) => this.handleMessage(message));\n\t\t// Teardown is driven by engine death rather than the NEXT generation's\n\t\t// `engine_ready`, so a crash with no restart, or a hung/failed restart,\n\t\t// still releases the host editor, focus, and inline-custom-UI depth.\n\t\tthis.unsubscribeGenerationEnded = runtime.onGenerationEnded(() => this.disposeAll(\"generation-lost\"));\n\t}\n\n\tdispose(): void {\n\t\tthis.unsubscribeTuiRendererReplaced();\n\t\tthis.unsubscribe();\n\t\tthis.unsubscribeGenerationEnded();\n\t\tthis.disposeAll(\"host-shutdown\");\n\t}\n\n\t/** The remote overlay proxy that currently holds focus (see remote-input-ownership.ts). */\n\tfocusedRemoteOverlay(): unknown {\n\t\tfor (const record of this.mounted.values()) {\n\t\t\tif (record.handle?.isFocused() === true) return record.component;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/** `component` itself when it is one of this generation's live non-widget proxies. */\n\tremoteProxyOwner(component: unknown): unknown {\n\t\tif (!(component instanceof RemoteComponent)) return undefined;\n\t\tfor (const record of this.mounted.values()) {\n\t\t\tif (record.component === component) return record.widgetKey === undefined ? component : undefined;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/** True when the extension that mounted `component` declared it binds Ctrl+C. */\n\tremoteProxyHandlesCtrlC(component: unknown): boolean {\n\t\tfor (const record of this.mounted.values()) {\n\t\t\tif (record.component === component) return record.handlesCtrlC;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Close exactly one live proxy through the ordinary host close path.\n\t *\n\t * The host escape from a component that traps Ctrl+C, and deliberately not\n\t * `disposeAll()`: that is generation-death teardown, which would also close\n\t * unrelated nested components and suppress the child notification. Here the\n\t * record stays registered while `done` runs, so `showExtensionCustom()`\n\t * hides this overlay (or remounts the editor) and its finalizer disposes the\n\t * proxy normally — which tells the healthy child to resolve its own\n\t * `ui.custom()` promise with `undefined`, exactly like a user cancel.\n\t */\n\tdismissRemoteProxy(component: unknown): boolean {\n\t\tfor (const record of this.mounted.values()) {\n\t\t\tif (record.component !== component || record.widgetKey !== undefined) continue;\n\t\t\trecord.done(undefined);\n\t\t\tthis.ui.requestRender();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate releaseWidget(widgetKey: string): void {\n\t\tfor (const [componentId, record] of this.mounted) {\n\t\t\tif (record.widgetKey !== widgetKey) continue;\n\t\t\tthis.mounted.delete(componentId);\n\t\t\trecord.unsubscribeWidgetRelease?.();\n\t\t\trecord.unsubscribeWidgetRelease = undefined;\n\t\t\tthis.terminalModes.onUnmount(componentId);\n\t\t}\n\t}\n\t/**\n\t * Close every mounted component.\n\t *\n\t * `\"generation-lost\"` closes through the real host close path: it hides the\n\t * overlay or remounts the editor into `editorContainer`, restores the saved\n\t * draft and focus, releases `blockingInlineCustomUiDepth`, and resolves the\n\t * extension's `ui.custom()` promise. Records are removed BEFORE each `done`\n\t * runs so the settlement path cannot re-enter the controller, and proxy\n\t * disposal is local-only because the writer already points at a replacement\n\t * child whose component IDs restart at `remote_component_1`.\n\t *\n\t * Order is newest-first, matching the TUI's overlay stack. Closing oldest\n\t * first would let an overlay mounted above an inline proxy restore focus to\n\t * that inline proxy after it had already been disposed.\n\t *\n\t * `\"host-shutdown\"` notifies the still-live engine child instead and leaves\n\t * host mounts alone: the TUI is already stopping and must not repaint.\n\t */\n\tprivate disposeAll(reason: \"generation-lost\" | \"host-shutdown\"): void {\n\t\tconst records = [...this.mounted.entries()].reverse();\n\t\tthis.mounted.clear();\n\t\tfor (const [componentId, record] of records) {\n\t\t\tthis.terminalModes.onUnmount(componentId);\n\t\t\trecord.unsubscribeWidgetRelease?.();\n\t\t\trecord.component.dispose(reason === \"host-shutdown\" && !record.engineDone);\n\t\t\tif (record.widgetKey) this.ui.setWidget(record.widgetKey, undefined);\n\t\t\telse if (reason === \"generation-lost\") record.done(undefined);\n\t\t}\n\t\tthis.terminalModes.resetAll();\n\t\tif (reason === \"generation-lost\" && records.length > 0) this.ui.requestRender();\n\t}\n\n\tprivate handleMessage(message: InteractiveEngineMessage): void {\n\t\tswitch (message.type) {\n\t\t\tcase \"engine_ready\":\n\t\t\t\t// Idempotent fallback for a generation replacement whose death event\n\t\t\t\t// was already handled: stale records must be gone before the new child\n\t\t\t\t// can reuse `remote_component_1`, and any terminal modes the dead\n\t\t\t\t// generation left on are reset here too.\n\t\t\t\tthis.disposeAll(\"generation-lost\");\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_open\":\n\t\t\t\tthis.open(\n\t\t\t\t\tmessage.componentId,\n\t\t\t\t\tmessage.overlay,\n\t\t\t\t\tmessage.deferInlineCustomUiFocus,\n\t\t\t\t\tmessage.overlayOptions,\n\t\t\t\t\tmessage.widgetKey,\n\t\t\t\t\tmessage.widgetPlacement,\n\t\t\t\t\tmessage.handlesCtrlC === true,\n\t\t\t\t\tmessage.handlesInternalUiAction === true,\n\t\t\t\t\tmessage.reserveTranscriptRows === true,\n\t\t\t\t\tmessage.purpose,\n\t\t\t\t\tmessage.widgetScroll,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_close\":\n\t\t\t\tthis.close(message.componentId);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_frame\":\n\t\t\t\tthis.mounted\n\t\t\t\t\t.get(message.componentId)\n\t\t\t\t\t?.component.applyFrame(message.requestId, message.lines, message.scrollRequest);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_input_result\":\n\t\t\t\tthis.mounted.get(message.componentId)?.component.resolveInput(message.requestId, message.handled);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_invalidate\":\n\t\t\t\tthis.mounted.get(message.componentId)?.component.requestRemoteRender();\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_terminal\":\n\t\t\t\tthis.terminalModes.applyControl(message.componentId, message.control);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_done\": {\n\t\t\t\tconst record = this.mounted.get(message.componentId);\n\t\t\t\tif (record) {\n\t\t\t\t\trecord.engineDone = true;\n\t\t\t\t\trecord.done(message.result);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"engine_custom_control\":\n\t\t\t\tthis.control(message.componentId, message.action);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate open(\n\t\tcomponentId: string,\n\t\toverlay: boolean,\n\t\tdeferInlineCustomUiFocus: boolean | undefined,\n\t\toptions: SerializableOverlayOptions | undefined,\n\t\twidgetKey?: string,\n\t\twidgetPlacement?: \"aboveEditor\" | \"belowEditor\",\n\t\thandlesCtrlC = false,\n\t\thandlesInternalUiAction = false,\n\t\treserveTranscriptRows = false,\n\t\tpurpose?: \"prompt\" | \"navigation\",\n\t\twidgetScroll?: { maxHeight: number; maxHeightFraction?: number },\n\t): void {\n\t\tif (this.mounted.has(componentId)) return;\n\t\tif (widgetKey) {\n\t\t\tlet getRows = () => 24;\n\t\t\tconst component = new RemoteComponent(\n\t\t\t\tcomponentId,\n\t\t\t\tthis.runtime,\n\t\t\t\t() => this.ui.requestRender(),\n\t\t\t\t() => getRows(),\n\t\t\t\thandlesInternalUiAction,\n\t\t\t);\n\t\t\tconst unsubscribeWidgetRelease = this.ui.onWidgetRelease?.(widgetKey, () => this.releaseWidget(widgetKey));\n\t\t\tthis.mounted.set(componentId, {\n\t\t\t\tcomponent,\n\t\t\t\tdone: () => {},\n\t\t\t\tengineDone: false,\n\t\t\t\thandlesCtrlC,\n\t\t\t\thandlesInternalUiAction,\n\t\t\t\twidgetKey,\n\t\t\t\tunsubscribeWidgetRelease,\n\t\t\t});\n\t\t\tthis.ui.setWidget(\n\t\t\t\twidgetKey,\n\t\t\t\t(tui) => {\n\t\t\t\t\tgetRows = () => tui.terminal.rows;\n\t\t\t\t\treturn component;\n\t\t\t\t},\n\t\t\t\t{ placement: widgetPlacement, ...(widgetScroll ? { scroll: widgetScroll } : {}) },\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tlet mounted: MountedRemoteComponent | undefined;\n\t\tvoid this.ui\n\t\t\t.custom<JsonValue | undefined>(\n\t\t\t\t(tui, _theme, _keybindings, done) => {\n\t\t\t\t\tconst component = new RemoteComponent(\n\t\t\t\t\t\tcomponentId,\n\t\t\t\t\t\tthis.runtime,\n\t\t\t\t\t\t() => this.ui.requestRender(),\n\t\t\t\t\t\t() => tui.terminal.rows,\n\t\t\t\t\t\thandlesInternalUiAction,\n\t\t\t\t\t);\n\t\t\t\t\tmounted = { component, done, engineDone: false, handlesCtrlC, handlesInternalUiAction };\n\t\t\t\t\tthis.mounted.set(componentId, mounted);\n\t\t\t\t\t// Bind this component to the real host terminal so a buffered\n\t\t\t\t\t// autowrap control emitted before the mount frame applies to the host TTY.\n\t\t\t\t\tthis.terminalModes.onMount(componentId, hostTerminal(tui));\n\t\t\t\t\treturn component;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toverlay,\n\t\t\t\t\tpurpose,\n\t\t\t\t\tdeferInlineCustomUiFocus,\n\t\t\t\t\thandlesInternalUiAction,\n\t\t\t\t\treserveTranscriptRows,\n\t\t\t\t\toverlayOptions: overlayOptions(options),\n\t\t\t\t\tonHandle: (handle) => {\n\t\t\t\t\t\tif (mounted) mounted.handle = handle;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t)\n\t\t\t.catch(() => undefined)\n\t\t\t.finally(() => {\n\t\t\t\tthis.terminalModes.onUnmount(componentId);\n\t\t\t\tconst record = this.mounted.get(componentId);\n\t\t\t\tif (!record) return;\n\t\t\t\tthis.mounted.delete(componentId);\n\t\t\t\tif (record.engineDone) record.component.dispose(false);\n\t\t\t\telse record.component.dispose();\n\t\t\t});\n\t}\n\n\tprivate close(componentId: string): void {\n\t\tconst record = this.mounted.get(componentId);\n\t\tif (!record) return;\n\t\tthis.terminalModes.onUnmount(componentId);\n\t\tthis.mounted.delete(componentId);\n\t\trecord.unsubscribeWidgetRelease?.();\n\t\tif (record.widgetKey) this.ui.setWidget(record.widgetKey, undefined);\n\t\trecord.component.dispose();\n\t}\n\n\tprivate control(componentId: string, action: \"focus\" | \"hide\" | \"show\" | \"unfocus\"): void {\n\t\tconst handle = this.mounted.get(componentId)?.handle;\n\t\tif (!handle) return;\n\t\tswitch (action) {\n\t\t\tcase \"focus\":\n\t\t\t\thandle.focus();\n\t\t\t\tbreak;\n\t\t\tcase \"hide\":\n\t\t\t\thandle.setHidden(true);\n\t\t\t\tbreak;\n\t\t\tcase \"show\":\n\t\t\t\thandle.setHidden(false);\n\t\t\t\tbreak;\n\t\t\tcase \"unfocus\":\n\t\t\t\thandle.unfocus();\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"remote-component.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/remote-component.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Component, OverlayHandle, OverlayOptions, TUI } from \"@earendil-works/pi-tui\";\nimport type { ExtensionUIContext } from \"../../core/extensions/index.js\";\nimport type { WidgetScrollRequest, WidgetScrollState } from \"../../core/extensions/ui-types.js\";\nimport { copyToClipboard } from \"../../utils/clipboard.js\";\nimport type { IsolatedInteractiveRuntime } from \"./isolated-runtime.js\";\nimport type { InteractiveEngineMessage, JsonValue, SerializableOverlayOptions } from \"./protocol.ts\";\nimport { RemoteFrameWidthClamp } from \"./remote-frame-clamp.ts\";\nimport { TerminalModeController } from \"./terminal-mode-controller.ts\";\n\nexport type RemoteComponentRuntime = Pick<\n\tIsolatedInteractiveRuntime,\n\t\"onEngineMessage\" | \"onGenerationEnded\" | \"sendEngineCommand\"\n>;\n\nexport type RemoteComponentUI = Pick<ExtensionUIContext, \"custom\" | \"requestRender\" | \"setWidget\" | \"onWidgetRelease\">;\n\ninterface MountedRemoteComponent {\n\tcomponent: RemoteComponent;\n\tdone: (result: JsonValue | undefined) => void;\n\tengineDone: boolean;\n\t/** The extension declared that this component binds Ctrl+C itself. */\n\thandlesCtrlC: boolean;\n\t/** The extension declared that this component claims internal UI actions. */\n\thandlesInternalUiAction: boolean;\n\thandle?: OverlayHandle;\n\twidgetKey?: string;\n\tunsubscribeWidgetRelease?: () => void;\n}\n\n/**\n * A stalled engine must not make fullscreen input wait forever. A timed-out\n * reply is treated as unhandled and lets the viewport process the key.\n */\nexport const REMOTE_INPUT_REPLY_TIMEOUT_MS = 250;\n\ninterface PendingInput {\n\tresolve: (handled: boolean | undefined) => void;\n\ttimer: ReturnType<typeof setTimeout>;\n}\n\nclass RemoteComponent implements Component {\n\tprivate scrollRequest: WidgetScrollRequest | undefined;\n\tgetScrollRequest(): WidgetScrollRequest | undefined {\n\t\treturn this.scrollRequest;\n\t}\n\tonScroll(state: WidgetScrollState): void {\n\t\tif (!this.disposed)\n\t\t\tthis.runtime.sendEngineCommand({ type: \"engine_custom_scroll\", componentId: this.componentId, state });\n\t}\n\twantsKeyRelease = true;\n\treadonly handlesInternalUiAction: boolean;\n\tprivate lines = [\"Loading remote component…\"];\n\tprivate width = 0;\n\tprivate rows = 0;\n\tprivate requestId = 0;\n\tprivate inputRequestId = 0;\n\tprivate appliedRequestId = 0;\n\tprivate dirty = true;\n\tprivate disposed = false;\n\tprivate readonly pendingInputs = new Map<number, PendingInput>();\n\tprivate readonly frameClamp = new RemoteFrameWidthClamp();\n\n\tprivate readonly componentId: string;\n\tprivate readonly runtime: RemoteComponentRuntime;\n\tprivate readonly requestRender: () => void;\n\tprivate readonly getRows: () => number;\n\n\tconstructor(\n\t\tcomponentId: string,\n\t\truntime: RemoteComponentRuntime,\n\t\trequestRender: () => void,\n\t\tgetRows: () => number,\n\t\thandlesInternalUiAction = false,\n\t) {\n\t\tthis.componentId = componentId;\n\t\tthis.runtime = runtime;\n\t\tthis.requestRender = requestRender;\n\t\tthis.getRows = getRows;\n\t\tthis.handlesInternalUiAction = handlesInternalUiAction;\n\t}\n\n\trender(width: number): string[] {\n\t\tconst rows = this.getRows();\n\t\tif (!this.disposed && (this.dirty || width !== this.width || rows !== this.rows)) {\n\t\t\tthis.width = width;\n\t\t\tthis.rows = rows;\n\t\t\tthis.dirty = false;\n\t\t\tthis.runtime.sendEngineCommand({\n\t\t\t\ttype: \"engine_custom_render\",\n\t\t\t\tcomponentId: this.componentId,\n\t\t\t\trequestId: ++this.requestId,\n\t\t\t\twidth,\n\t\t\t\trows,\n\t\t\t});\n\t\t}\n\t\t// The engine child re-renders asynchronously; until the fresh frame\n\t\t// arrives, the previous frame may be wrapped for an older terminal\n\t\t// width. Clamp so a resize never replays overflowing lines (pi-tui\n\t\t// crashes on any rendered line wider than the terminal).\n\t\treturn this.frameClamp.clamp(this.lines, width);\n\t}\n\n\thandleInput(data: string): Promise<boolean | undefined> {\n\t\tif (this.disposed) return Promise.resolve(undefined);\n\t\tconst requestId = ++this.inputRequestId;\n\t\tconst result = new Promise<boolean | undefined>((resolve) => {\n\t\t\tconst timer = setTimeout(() => this.resolveInput(requestId, false), REMOTE_INPUT_REPLY_TIMEOUT_MS);\n\t\t\ttimer.unref?.();\n\t\t\tthis.pendingInputs.set(requestId, { resolve, timer });\n\t\t});\n\t\ttry {\n\t\t\tthis.runtime.sendEngineCommand({\n\t\t\t\ttype: \"engine_custom_input\",\n\t\t\t\tcomponentId: this.componentId,\n\t\t\t\trequestId,\n\t\t\t\tdata,\n\t\t\t});\n\t\t} catch {\n\t\t\tthis.resolveInput(requestId, false);\n\t\t}\n\t\t// Engine commands are delivered in order, so a frame requested now is\n\t\t// rendered by the child only AFTER it has applied this input. Pipelining\n\t\t// the request keeps keypress latency at a single round trip and repaints\n\t\t// components that never self-invalidate, instead of waiting for a\n\t\t// child-side invalidate (or an unrelated refresh) to trigger a frame.\n\t\tthis.dirty = true;\n\t\tthis.requestRender();\n\t\treturn result;\n\t}\n\n\tresolveInput(requestId: number, handled: boolean | undefined): void {\n\t\tconst pending = this.pendingInputs.get(requestId);\n\t\tif (!pending) return;\n\t\tthis.pendingInputs.delete(requestId);\n\t\tclearTimeout(pending.timer);\n\t\tpending.resolve(handled);\n\t}\n\n\tinvalidate(): void {\n\t\tthis.dirty = true;\n\t}\n\n\tapplyFrame(requestId: number, lines: string[], scrollRequest?: WidgetScrollRequest): void {\n\t\tif (this.disposed || requestId < this.appliedRequestId) return;\n\t\tthis.appliedRequestId = requestId;\n\t\tthis.lines = lines;\n\t\tthis.scrollRequest = scrollRequest;\n\t\tthis.requestRender();\n\t}\n\n\trequestRemoteRender(): void {\n\t\tif (this.disposed) return;\n\t\tthis.dirty = true;\n\t\tthis.requestRender();\n\t}\n\n\t/**\n\t * Tear the proxy down. `notifyEngine` must be false once the writer no longer\n\t * points at the generation that owns this component: component IDs restart at\n\t * `remote_component_1` for every child, so a late dispose would address an\n\t * unrelated component in the replacement engine.\n\t */\n\tdispose(notifyEngine = true): void {\n\t\tif (this.disposed) return;\n\t\tthis.disposed = true;\n\t\tfor (const requestId of [...this.pendingInputs.keys()]) this.resolveInput(requestId, undefined);\n\t\tif (notifyEngine)\n\t\t\tthis.runtime.sendEngineCommand({ type: \"engine_custom_dispose\", componentId: this.componentId });\n\t}\n}\n\nfunction overlayOptions(options: SerializableOverlayOptions | undefined): OverlayOptions | undefined {\n\treturn options as OverlayOptions | undefined;\n}\n\n/**\n * Resolve the real host terminal from the pi-tui TUI handed to the overlay\n * factory. Optional: some hosts / test seams do not surface `tui.terminal`, in\n * which case terminal-mode controls harmlessly no-op.\n */\nfunction hostTerminal(tui: TUI): { write(data: string): void } {\n\tconst terminal = (tui as { terminal?: { write?(data: string): void } }).terminal;\n\treturn typeof terminal?.write === \"function\" ? (terminal as { write(data: string): void }) : { write: () => {} };\n}\n\nexport interface TuiRendererLifecycle {\n\tisFullscreen(): boolean;\n\tonRendererReplaced(listener: () => void): () => void;\n}\n\nexport class RemoteComponentController {\n\tprivate readonly mounted = new Map<string, MountedRemoteComponent>();\n\tprivate readonly unsubscribe: () => void;\n\tprivate readonly unsubscribeGenerationEnded: () => void;\n\tprivate readonly terminalModes: TerminalModeController;\n\tprivate readonly unsubscribeTuiRendererReplaced: () => void;\n\n\tprivate readonly runtime: RemoteComponentRuntime;\n\tprivate readonly ui: RemoteComponentUI;\n\tprivate readonly copyText: (text: string) => Promise<void>;\n\n\tconstructor(\n\t\truntime: RemoteComponentRuntime,\n\t\tui: RemoteComponentUI,\n\t\ttuiRendererLifecycle: TuiRendererLifecycle,\n\t\tcopyText: (text: string) => Promise<void> = copyToClipboard,\n\t) {\n\t\tthis.runtime = runtime;\n\t\tthis.ui = ui;\n\t\tthis.copyText = copyText;\n\t\tthis.terminalModes = new TerminalModeController(() => tuiRendererLifecycle.isFullscreen());\n\t\tthis.unsubscribeTuiRendererReplaced = tuiRendererLifecycle.onRendererReplaced(() =>\n\t\t\tthis.terminalModes.rebindTui(),\n\t\t);\n\t\tthis.unsubscribe = runtime.onEngineMessage((message) => this.handleMessage(message));\n\t\t// Teardown is driven by engine death rather than the NEXT generation's\n\t\t// `engine_ready`, so a crash with no restart, or a hung/failed restart,\n\t\t// still releases the host editor, focus, and inline-custom-UI depth.\n\t\tthis.unsubscribeGenerationEnded = runtime.onGenerationEnded(() => this.disposeAll(\"generation-lost\"));\n\t}\n\n\tdispose(): void {\n\t\tthis.unsubscribeTuiRendererReplaced();\n\t\tthis.unsubscribe();\n\t\tthis.unsubscribeGenerationEnded();\n\t\tthis.disposeAll(\"host-shutdown\");\n\t}\n\n\t/** The remote overlay proxy that currently holds focus (see remote-input-ownership.ts). */\n\tfocusedRemoteOverlay(): unknown {\n\t\tfor (const record of this.mounted.values()) {\n\t\t\tif (record.handle?.isFocused() === true) return record.component;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/** `component` itself when it is one of this generation's live non-widget proxies. */\n\tremoteProxyOwner(component: unknown): unknown {\n\t\tif (!(component instanceof RemoteComponent)) return undefined;\n\t\tfor (const record of this.mounted.values()) {\n\t\t\tif (record.component === component) return record.widgetKey === undefined ? component : undefined;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/** True when the extension that mounted `component` declared it binds Ctrl+C. */\n\tremoteProxyHandlesCtrlC(component: unknown): boolean {\n\t\tfor (const record of this.mounted.values()) {\n\t\t\tif (record.component === component) return record.handlesCtrlC;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Close exactly one live proxy through the ordinary host close path.\n\t *\n\t * The host escape from a component that traps Ctrl+C, and deliberately not\n\t * `disposeAll()`: that is generation-death teardown, which would also close\n\t * unrelated nested components and suppress the child notification. Here the\n\t * record stays registered while `done` runs, so `showExtensionCustom()`\n\t * hides this overlay (or remounts the editor) and its finalizer disposes the\n\t * proxy normally — which tells the healthy child to resolve its own\n\t * `ui.custom()` promise with `undefined`, exactly like a user cancel.\n\t */\n\tdismissRemoteProxy(component: unknown): boolean {\n\t\tfor (const record of this.mounted.values()) {\n\t\t\tif (record.component !== component || record.widgetKey !== undefined) continue;\n\t\t\trecord.done(undefined);\n\t\t\tthis.ui.requestRender();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate releaseWidget(widgetKey: string): void {\n\t\tfor (const [componentId, record] of this.mounted) {\n\t\t\tif (record.widgetKey !== widgetKey) continue;\n\t\t\tthis.mounted.delete(componentId);\n\t\t\trecord.unsubscribeWidgetRelease?.();\n\t\t\trecord.unsubscribeWidgetRelease = undefined;\n\t\t\tthis.terminalModes.onUnmount(componentId);\n\t\t}\n\t}\n\t/**\n\t * Close every mounted component.\n\t *\n\t * `\"generation-lost\"` closes through the real host close path: it hides the\n\t * overlay or remounts the editor into `editorContainer`, restores the saved\n\t * draft and focus, releases `blockingInlineCustomUiDepth`, and resolves the\n\t * extension's `ui.custom()` promise. Records are removed BEFORE each `done`\n\t * runs so the settlement path cannot re-enter the controller, and proxy\n\t * disposal is local-only because the writer already points at a replacement\n\t * child whose component IDs restart at `remote_component_1`.\n\t *\n\t * Order is newest-first, matching the TUI's overlay stack. Closing oldest\n\t * first would let an overlay mounted above an inline proxy restore focus to\n\t * that inline proxy after it had already been disposed.\n\t *\n\t * `\"host-shutdown\"` notifies the still-live engine child instead and leaves\n\t * host mounts alone: the TUI is already stopping and must not repaint.\n\t */\n\tprivate disposeAll(reason: \"generation-lost\" | \"host-shutdown\"): void {\n\t\tconst records = [...this.mounted.entries()].reverse();\n\t\tthis.mounted.clear();\n\t\tfor (const [componentId, record] of records) {\n\t\t\tthis.terminalModes.onUnmount(componentId);\n\t\t\trecord.unsubscribeWidgetRelease?.();\n\t\t\trecord.component.dispose(reason === \"host-shutdown\" && !record.engineDone);\n\t\t\tif (record.widgetKey) this.ui.setWidget(record.widgetKey, undefined);\n\t\t\telse if (reason === \"generation-lost\") record.done(undefined);\n\t\t}\n\t\tthis.terminalModes.resetAll();\n\t\tif (reason === \"generation-lost\" && records.length > 0) this.ui.requestRender();\n\t}\n\n\tprivate handleMessage(message: InteractiveEngineMessage): void {\n\t\tswitch (message.type) {\n\t\t\tcase \"engine_ready\":\n\t\t\t\t// Idempotent fallback for a generation replacement whose death event\n\t\t\t\t// was already handled: stale records must be gone before the new child\n\t\t\t\t// can reuse `remote_component_1`, and any terminal modes the dead\n\t\t\t\t// generation left on are reset here too.\n\t\t\t\tthis.disposeAll(\"generation-lost\");\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_open\":\n\t\t\t\tthis.open(\n\t\t\t\t\tmessage.componentId,\n\t\t\t\t\tmessage.overlay,\n\t\t\t\t\tmessage.deferInlineCustomUiFocus,\n\t\t\t\t\tmessage.overlayOptions,\n\t\t\t\t\tmessage.widgetKey,\n\t\t\t\t\tmessage.widgetPlacement,\n\t\t\t\t\tmessage.handlesCtrlC === true,\n\t\t\t\t\tmessage.handlesInternalUiAction === true,\n\t\t\t\t\tmessage.reserveTranscriptRows === true,\n\t\t\t\t\tmessage.purpose,\n\t\t\t\t\tmessage.widgetScroll,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_close\":\n\t\t\t\tthis.close(message.componentId);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_frame\":\n\t\t\t\tthis.mounted\n\t\t\t\t\t.get(message.componentId)\n\t\t\t\t\t?.component.applyFrame(message.requestId, message.lines, message.scrollRequest);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_input_result\":\n\t\t\t\tthis.mounted.get(message.componentId)?.component.resolveInput(message.requestId, message.handled);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_invalidate\":\n\t\t\t\tthis.mounted.get(message.componentId)?.component.requestRemoteRender();\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_copy\":\n\t\t\t\tvoid (async () => {\n\t\t\t\t\tlet error: string | undefined;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (!this.mounted.has(message.componentId)) throw new Error(\"Sign-in screen is no longer open\");\n\t\t\t\t\t\tawait this.copyText(message.text);\n\t\t\t\t\t} catch (cause) {\n\t\t\t\t\t\terror = cause instanceof Error ? cause.message : String(cause);\n\t\t\t\t\t}\n\t\t\t\t\tthis.runtime.sendEngineCommand({\n\t\t\t\t\t\ttype: \"engine_custom_copy_result\",\n\t\t\t\t\t\tcomponentId: message.componentId,\n\t\t\t\t\t\trequestId: message.requestId,\n\t\t\t\t\t\terror,\n\t\t\t\t\t});\n\t\t\t\t})();\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_terminal\":\n\t\t\t\tthis.terminalModes.applyControl(message.componentId, message.control);\n\t\t\t\tbreak;\n\t\t\tcase \"engine_custom_done\": {\n\t\t\t\tconst record = this.mounted.get(message.componentId);\n\t\t\t\tif (record) {\n\t\t\t\t\trecord.engineDone = true;\n\t\t\t\t\trecord.done(message.result);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"engine_custom_control\":\n\t\t\t\tthis.control(message.componentId, message.action);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate open(\n\t\tcomponentId: string,\n\t\toverlay: boolean,\n\t\tdeferInlineCustomUiFocus: boolean | undefined,\n\t\toptions: SerializableOverlayOptions | undefined,\n\t\twidgetKey?: string,\n\t\twidgetPlacement?: \"aboveEditor\" | \"belowEditor\",\n\t\thandlesCtrlC = false,\n\t\thandlesInternalUiAction = false,\n\t\treserveTranscriptRows = false,\n\t\tpurpose?: \"prompt\" | \"navigation\",\n\t\twidgetScroll?: { maxHeight: number; maxHeightFraction?: number },\n\t): void {\n\t\tif (this.mounted.has(componentId)) return;\n\t\tif (widgetKey) {\n\t\t\tlet getRows = () => 24;\n\t\t\tconst component = new RemoteComponent(\n\t\t\t\tcomponentId,\n\t\t\t\tthis.runtime,\n\t\t\t\t() => this.ui.requestRender(),\n\t\t\t\t() => getRows(),\n\t\t\t\thandlesInternalUiAction,\n\t\t\t);\n\t\t\tconst unsubscribeWidgetRelease = this.ui.onWidgetRelease?.(widgetKey, () => this.releaseWidget(widgetKey));\n\t\t\tthis.mounted.set(componentId, {\n\t\t\t\tcomponent,\n\t\t\t\tdone: () => {},\n\t\t\t\tengineDone: false,\n\t\t\t\thandlesCtrlC,\n\t\t\t\thandlesInternalUiAction,\n\t\t\t\twidgetKey,\n\t\t\t\tunsubscribeWidgetRelease,\n\t\t\t});\n\t\t\tthis.ui.setWidget(\n\t\t\t\twidgetKey,\n\t\t\t\t(tui) => {\n\t\t\t\t\tgetRows = () => tui.terminal.rows;\n\t\t\t\t\treturn component;\n\t\t\t\t},\n\t\t\t\t{ placement: widgetPlacement, ...(widgetScroll ? { scroll: widgetScroll } : {}) },\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tlet mounted: MountedRemoteComponent | undefined;\n\t\tvoid this.ui\n\t\t\t.custom<JsonValue | undefined>(\n\t\t\t\t(tui, _theme, _keybindings, done) => {\n\t\t\t\t\tconst component = new RemoteComponent(\n\t\t\t\t\t\tcomponentId,\n\t\t\t\t\t\tthis.runtime,\n\t\t\t\t\t\t() => this.ui.requestRender(),\n\t\t\t\t\t\t() => tui.terminal.rows,\n\t\t\t\t\t\thandlesInternalUiAction,\n\t\t\t\t\t);\n\t\t\t\t\tmounted = { component, done, engineDone: false, handlesCtrlC, handlesInternalUiAction };\n\t\t\t\t\tthis.mounted.set(componentId, mounted);\n\t\t\t\t\t// Bind this component to the real host terminal so a buffered\n\t\t\t\t\t// autowrap control emitted before the mount frame applies to the host TTY.\n\t\t\t\t\tthis.terminalModes.onMount(componentId, hostTerminal(tui));\n\t\t\t\t\treturn component;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toverlay,\n\t\t\t\t\tpurpose,\n\t\t\t\t\tdeferInlineCustomUiFocus,\n\t\t\t\t\thandlesInternalUiAction,\n\t\t\t\t\treserveTranscriptRows,\n\t\t\t\t\toverlayOptions: overlayOptions(options),\n\t\t\t\t\tonHandle: (handle) => {\n\t\t\t\t\t\tif (mounted) mounted.handle = handle;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t)\n\t\t\t.catch(() => undefined)\n\t\t\t.finally(() => {\n\t\t\t\tthis.terminalModes.onUnmount(componentId);\n\t\t\t\tconst record = this.mounted.get(componentId);\n\t\t\t\tif (!record) return;\n\t\t\t\tthis.mounted.delete(componentId);\n\t\t\t\tif (record.engineDone) record.component.dispose(false);\n\t\t\t\telse record.component.dispose();\n\t\t\t});\n\t}\n\n\tprivate close(componentId: string): void {\n\t\tconst record = this.mounted.get(componentId);\n\t\tif (!record) return;\n\t\tthis.terminalModes.onUnmount(componentId);\n\t\tthis.mounted.delete(componentId);\n\t\trecord.unsubscribeWidgetRelease?.();\n\t\tif (record.widgetKey) this.ui.setWidget(record.widgetKey, undefined);\n\t\trecord.component.dispose();\n\t}\n\n\tprivate control(componentId: string, action: \"focus\" | \"hide\" | \"show\" | \"unfocus\"): void {\n\t\tconst handle = this.mounted.get(componentId)?.handle;\n\t\tif (!handle) return;\n\t\tswitch (action) {\n\t\t\tcase \"focus\":\n\t\t\t\thandle.focus();\n\t\t\t\tbreak;\n\t\t\tcase \"hide\":\n\t\t\t\thandle.setHidden(true);\n\t\t\t\tbreak;\n\t\t\tcase \"show\":\n\t\t\t\thandle.setHidden(false);\n\t\t\t\tbreak;\n\t\t\tcase \"unfocus\":\n\t\t\t\thandle.unfocus();\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n"]}
@@ -167,6 +167,8 @@ When the clipboard has both text and an image, behavior depends on the terminal:
167
167
 
168
168
  Ctrl+X does not copy messages or selections. A workflow tool-detail view closes to its graph; the scoped-model selector clears its local selection; an attached workflow stage chat returns to its graph; and a workflow graph returns to main chat. Workflow surfaces recognize the physical Ctrl+X chord directly, including CSI variants. `/copy` always copies the last assistant message.
169
169
 
170
+ On OAuth sign-in screens, Ctrl+X copies the sign-in URL, including long URLs that wrap across lines. This also works in `/mcp login`. Customize this shortcut with `app.auth.copyUrl`; it does not change Ctrl+X behavior outside sign-in screens. Remote sessions use OSC 52 clipboard forwarding as described above.
171
+
170
172
  A held paused queue by itself is idle for Ctrl+C handling. After an interruption settles, the next Ctrl+C clears the editor without releasing or dequeuing the hold, and a second quick idle press exits normally.
171
173
 
172
174
  In interactive sessions the agent runs in a supervised engine child (see [Extensions](/extensions#interactive-callback-isolation)). Escape there requests the engine's cooperative cancellation and waits for it with no deadline; it never terminates or replaces the engine.
@@ -213,6 +215,7 @@ Interactive model and thinking choices automatically become startup defaults. Th
213
215
  | Keybinding id | Default | Description |
214
216
  |--------|---------|-------------|
215
217
  | `app.tools.expand` | `ctrl+o` | Collapse or expand tool and workflow-node detail in main chat or an attached workflow stage chat |
218
+ | `app.auth.copyUrl` | `ctrl+x` | Copy the URL on an OAuth sign-in screen |
216
219
  | `app.message.followUp` | `alt+enter` | Queue follow-up message |
217
220
  | `app.message.dequeue` | `alt+up` | Restore queued messages to editor |
218
221
 
@@ -31,6 +31,16 @@ Use `/mcp` to inspect connections and manage servers. After changing configurati
31
31
 
32
32
  Atomic reads user-level servers from `~/.atomic/agent/mcp.json` and project servers from `.atomic/mcp.json`. Project configuration is read only after [project trust](/security) is granted. A project entry replaces a user-level entry with the same name.
33
33
 
34
+ A project entry without `command`, `url`, or `type` overrides only `enabled`, `exposure`, and `toolExposure` of the user-level server with the same name and keeps the rest, including `env`, `headers`, and `auth`. For example, this turns off a user-level server in one project:
35
+
36
+ ```json
37
+ {
38
+ "mcpServers": {
39
+ "internal-tools": { "enabled": false }
40
+ }
41
+ }
42
+ ```
43
+
34
44
  Both files use a top-level `mcpServers` object. Keep personal servers and credentials in the user-level file. `ATOMIC_CODING_AGENT_DIR` relocates the Atomic agent directory.
35
45
 
36
46
  Stdio servers use `command`, `args`, `env`, and `cwd`. `command` is one executable, not a shell command string. Relative `cwd` values resolve against the session directory.
@@ -66,7 +76,7 @@ Server names may contain letters, digits, `_`, and `-`. Names that differ only i
66
76
 
67
77
  Installed [packages](/packages/authoring#mcp-servers) and extensions can contribute servers with the same configuration shape. File-configured servers take precedence over contributions with the same normalized name. Project packages load only after the project is trusted.
68
78
 
69
- `/mcp` shows each server's source. Enabled-state and exposure changes for file-configured servers are saved without replacing unrelated configuration. Changes to extension-contributed servers apply to the current session.
79
+ `/mcp` shows each server's source. Enabled-state and exposure changes for file-configured servers are saved without replacing unrelated configuration. In a trusted project, "Enable in this project" and "Disable in this project" add a project override for a user-level server; later changes to that server are saved to the override. `atomic mcp list` shows the override. Changes to extension-contributed servers apply to the current session.
70
80
 
71
81
  ## Manage servers
72
82
 
@@ -177,6 +187,8 @@ OAuth applies to HTTP servers without an `Authorization` header or provider-toke
177
187
 
178
188
  `clientSecret` is optional. `callbackPort` uses `http://127.0.0.1:<port>/callback`. For another registered redirect URI, set `callbackUrl`; it must use HTTP on `localhost`, `127.0.0.1`, or `[::1]`. Atomic sends it as written. If it has no port, Atomic adds `callbackPort` or a free port. The URI must match the client's registration.
179
189
 
190
+ When pasting a redirect URL, keep its scheme, host, port, and path unchanged. Atomic rejects a URL that does not match the redirect URI for the current sign-in, even if its authorization code and state are present.
191
+
180
192
  Use `oauth.clientName` when a server requires a known registration name. Sign out before signing in again to register with a changed name. Use `oauth.scope` for servers that do not advertise their required scopes; later scope requests are added to it.
181
193
 
182
194
  ### Override OAuth authorization server discovery
package/docs/providers.md CHANGED
@@ -521,6 +521,8 @@ atomic --provider cloudflare-workers-ai --model "@cf/moonshotai/kimi-k2.6"
521
521
 
522
522
  Atomic automatically sets `x-session-affinity` for [prefix caching](https://developers.cloudflare.com/workers-ai/features/prompt-caching/) discounts.
523
523
 
524
+ Workers AI also lists Cloudflare's Clef (`@cf/cloudflare/clef`) and Clef Flash (`@cf/cloudflare/clef-flash`) as classifiers. They use the same `CLOUDFLARE_API_KEY` and `CLOUDFLARE_ACCOUNT_ID`. Name the exact ID in `routerModel`, `structured_output`, or `generateStructuredOutput()`; like other classifiers they do not appear in `/model` or work with `--model`. See [Structured decisions](/sdk/structured-decisions).
525
+
524
526
  ### Google Vertex AI
525
527
 
526
528
  Uses Application Default Credentials: