@di-code/coding-agent 0.1.9 → 0.2.2

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 (106) hide show
  1. package/README.md +7 -0
  2. package/compositions/base.yml +3 -0
  3. package/dist/compositions.d.ts.map +1 -1
  4. package/dist/compositions.js +2 -0
  5. package/dist/compositions.js.map +1 -1
  6. package/dist/core/image-input.d.ts +1 -1
  7. package/dist/core/image-input.d.ts.map +1 -1
  8. package/dist/core/image-input.js +15 -4
  9. package/dist/core/image-input.js.map +1 -1
  10. package/dist/core/session/session-manager.d.ts +18 -1
  11. package/dist/core/session/session-manager.d.ts.map +1 -1
  12. package/dist/core/session/session-manager.js +90 -1
  13. package/dist/core/session/session-manager.js.map +1 -1
  14. package/dist/core/session/session-storage.d.ts +2 -0
  15. package/dist/core/session/session-storage.d.ts.map +1 -1
  16. package/dist/core/session/session-storage.js +34 -2
  17. package/dist/core/session/session-storage.js.map +1 -1
  18. package/dist/core/session/types.d.ts +16 -1
  19. package/dist/core/session/types.d.ts.map +1 -1
  20. package/dist/core/session/types.js.map +1 -1
  21. package/dist/core/session.d.ts +27 -2
  22. package/dist/core/session.d.ts.map +1 -1
  23. package/dist/core/session.js +59 -0
  24. package/dist/core/session.js.map +1 -1
  25. package/dist/entry.js +1 -1
  26. package/dist/entry.js.map +1 -1
  27. package/dist/i18n.js +4 -4
  28. package/dist/i18n.js.map +1 -1
  29. package/dist/interactive-host-entry.d.ts.map +1 -1
  30. package/dist/interactive-host-entry.js +107 -12
  31. package/dist/interactive-host-entry.js.map +1 -1
  32. package/dist/main.d.ts.map +1 -1
  33. package/dist/main.js +8 -1
  34. package/dist/main.js.map +1 -1
  35. package/dist/mcp/config.d.ts.map +1 -1
  36. package/dist/mcp/config.js +19 -0
  37. package/dist/mcp/config.js.map +1 -1
  38. package/dist/mcp-command-entry.d.ts +8 -0
  39. package/dist/mcp-command-entry.d.ts.map +1 -0
  40. package/dist/mcp-command-entry.js +56 -0
  41. package/dist/mcp-command-entry.js.map +1 -0
  42. package/dist/modes/interactive-components.d.ts +8 -0
  43. package/dist/modes/interactive-components.d.ts.map +1 -1
  44. package/dist/modes/interactive-components.js +7 -2
  45. package/dist/modes/interactive-components.js.map +1 -1
  46. package/dist/modes/interactive-state.d.ts.map +1 -1
  47. package/dist/modes/interactive-state.js +1 -4
  48. package/dist/modes/interactive-state.js.map +1 -1
  49. package/dist/modes/interactive.d.ts +4 -0
  50. package/dist/modes/interactive.d.ts.map +1 -1
  51. package/dist/modes/interactive.js +69 -0
  52. package/dist/modes/interactive.js.map +1 -1
  53. package/dist/modes/tree-selector.d.ts.map +1 -1
  54. package/dist/modes/tree-selector.js +5 -4
  55. package/dist/modes/tree-selector.js.map +1 -1
  56. package/dist/rpc/client.d.ts +2 -0
  57. package/dist/rpc/client.d.ts.map +1 -1
  58. package/dist/rpc/client.js +3 -0
  59. package/dist/rpc/client.js.map +1 -1
  60. package/dist/rpc/dispatcher.d.ts +14 -0
  61. package/dist/rpc/dispatcher.d.ts.map +1 -1
  62. package/dist/rpc/dispatcher.js +222 -7
  63. package/dist/rpc/dispatcher.js.map +1 -1
  64. package/dist/rpc/protocol.d.ts +12 -5
  65. package/dist/rpc/protocol.d.ts.map +1 -1
  66. package/dist/rpc/protocol.js +56 -0
  67. package/dist/rpc/protocol.js.map +1 -1
  68. package/dist/rpc/server.d.ts +5 -0
  69. package/dist/rpc/server.d.ts.map +1 -1
  70. package/dist/rpc/server.js +4 -0
  71. package/dist/rpc/server.js.map +1 -1
  72. package/dist/rpc-server-entry.d.ts.map +1 -1
  73. package/dist/rpc-server-entry.js +15 -1
  74. package/dist/rpc-server-entry.js.map +1 -1
  75. package/dist/runtime/product-host.d.ts +7 -0
  76. package/dist/runtime/product-host.d.ts.map +1 -1
  77. package/dist/runtime/product-host.js +29 -9
  78. package/dist/runtime/product-host.js.map +1 -1
  79. package/dist/runtime/session-factory.d.ts +18 -2
  80. package/dist/runtime/session-factory.d.ts.map +1 -1
  81. package/dist/runtime/session-factory.js +286 -23
  82. package/dist/runtime/session-factory.js.map +1 -1
  83. package/dist/runtime/session-host.d.ts +46 -1
  84. package/dist/runtime/session-host.d.ts.map +1 -1
  85. package/dist/runtime/session-host.js +38 -6
  86. package/dist/runtime/session-host.js.map +1 -1
  87. package/dist/ui-host.d.ts.map +1 -1
  88. package/dist/ui-host.js +3 -0
  89. package/dist/ui-host.js.map +1 -1
  90. package/dist/web/assets/index-C2SOU925.css +1 -0
  91. package/dist/web/assets/index-knXkInvO.js +41 -0
  92. package/dist/web/assets/index-knXkInvO.js.map +1 -0
  93. package/dist/web/index.html +2 -2
  94. package/dist/web-command.d.ts.map +1 -1
  95. package/dist/web-command.js +8 -1
  96. package/dist/web-command.js.map +1 -1
  97. package/dist/webui-entry.js +9 -1
  98. package/dist/webui-entry.js.map +1 -1
  99. package/dist/webui.d.ts +10 -0
  100. package/dist/webui.d.ts.map +1 -1
  101. package/dist/webui.js +21 -0
  102. package/dist/webui.js.map +1 -1
  103. package/package.json +11 -9
  104. package/dist/web/assets/index-BwfuGMvv.css +0 -1
  105. package/dist/web/assets/index-DPUaJqFJ.js +0 -41
  106. package/dist/web/assets/index-DPUaJqFJ.js.map +0 -1
@@ -4,6 +4,7 @@ export const RPC_MAX_ID_LENGTH = 128;
4
4
  export const RPC_MAX_PROMPT_LENGTH = 1_000_000;
5
5
  export const RPC_MAX_ATTACHMENTS_PER_REQUEST = 4;
6
6
  export const RPC_MAX_ATTACHMENT_BYTES = 5 * 1024 * 1024;
7
+ const RPC_MAX_ASSISTANT_IMAGE_BYTES = 5 * 1024 * 1024;
7
8
  /** Allows one JSONL user entry containing a maximum-sized base64 image to be read in a single transcript page. */
8
9
  export const RPC_MAX_TRANSCRIPT_BYTES = 8 * 1024 * 1024;
9
10
  const RPC_MAX_ATTACHMENT_BASE64_LENGTH = Math.ceil(RPC_MAX_ATTACHMENT_BYTES / 3) * 4;
@@ -61,6 +62,7 @@ export const RPC_METHODS = [
61
62
  "set_plugin_enabled",
62
63
  "create_attachment",
63
64
  "approve_tool",
65
+ "respond_interaction",
64
66
  ];
65
67
  const RPC_ERROR_CODES = new Set([
66
68
  "PARSE_ERROR",
@@ -77,6 +79,7 @@ const RPC_ERROR_CODES = new Set([
77
79
  "UNAUTHORIZED",
78
80
  "INTERNAL_ERROR",
79
81
  "PROCESS_EXIT",
82
+ "INTERACTION_UNAVAILABLE",
80
83
  ]);
81
84
  const LEGACY_EVENT_TYPES = new Set([
82
85
  "agent_start",
@@ -99,7 +102,9 @@ const EXTENDED_EVENT_TYPES = new Set([
99
102
  "operation_update",
100
103
  "session_changed",
101
104
  "tool_approval",
105
+ "interaction_request",
102
106
  "product_audit",
107
+ "projection",
103
108
  ]);
104
109
  const EXTENDED_EVENT_NAMES = new Set([
105
110
  "sequence",
@@ -107,7 +112,9 @@ const EXTENDED_EVENT_NAMES = new Set([
107
112
  "snapshot_required",
108
113
  "session_changed",
109
114
  "tool_approval",
115
+ "interaction_request",
110
116
  "product_audit",
117
+ "projection",
111
118
  ]);
112
119
  const ASSISTANT_STOP_REASONS = new Set(["stop", "length", "tool_use", "error", "aborted"]);
113
120
  export class RpcProtocolError extends Error {
@@ -332,6 +339,17 @@ export function parseRpcRequest(line) {
332
339
  stringParam(params, "approvalId", id);
333
340
  booleanParam(params, "approved", id);
334
341
  break;
342
+ case "respond_interaction":
343
+ stringParam(params, "requestId", id);
344
+ if (typeof params.status !== "string" || !["answered", "cancelled", "timeout"].includes(params.status))
345
+ throw new RpcProtocolError("INVALID_PARAMS", "respond_interaction.status is invalid.", id);
346
+ if (params.approved !== undefined && typeof params.approved !== "boolean")
347
+ throw new RpcProtocolError("INVALID_PARAMS", "respond_interaction.approved must be boolean.", id);
348
+ if (params.value !== undefined)
349
+ stringParam(params, "value", id, true);
350
+ if (params.feedback !== undefined)
351
+ stringParam(params, "feedback", id, true);
352
+ break;
335
353
  }
336
354
  return { version: RPC_PROTOCOL_VERSION, kind: "request", id, method, params };
337
355
  }
@@ -479,6 +497,7 @@ function assertSuccessResult(result) {
479
497
  case "set_locale":
480
498
  case "set_permission_mode":
481
499
  case "configure_custom_provider":
500
+ case "respond_interaction":
482
501
  return;
483
502
  }
484
503
  }
@@ -572,6 +591,13 @@ function assertEvent(event, type) {
572
591
  throw new RpcProtocolError("INVALID_REQUEST", "RPC tool_approval event is invalid.");
573
592
  return;
574
593
  }
594
+ if (type === "interaction_request") {
595
+ if (typeof event.interactionRequestId !== "string" ||
596
+ typeof event.kind !== "string" ||
597
+ typeof event.prompt !== "string")
598
+ throw new RpcProtocolError("INVALID_REQUEST", "RPC interaction_request event is invalid.");
599
+ return;
600
+ }
575
601
  if (type === "product_audit") {
576
602
  if (typeof event.action !== "string" ||
577
603
  ![
@@ -587,6 +613,15 @@ function assertEvent(event, type) {
587
613
  throw new RpcProtocolError("INVALID_REQUEST", "RPC product_audit event is invalid.");
588
614
  return;
589
615
  }
616
+ if (type === "projection") {
617
+ if (typeof event.namespace !== "string" ||
618
+ typeof event.projectionName !== "string" ||
619
+ !Number.isSafeInteger(event.version) ||
620
+ event.version < 0 ||
621
+ !("state" in event))
622
+ throw new RpcProtocolError("INVALID_REQUEST", "RPC projection event is invalid.");
623
+ return;
624
+ }
590
625
  if (type === "tool_execution_start") {
591
626
  if (typeof event.toolCallId !== "string" || typeof event.toolName !== "string" || !objectRecord(event.arguments))
592
627
  throw new RpcProtocolError("INVALID_REQUEST", "RPC tool event is invalid.");
@@ -664,6 +699,27 @@ function assertAssistantMessage(value) {
664
699
  if (!message ||
665
700
  message.role !== "assistant" ||
666
701
  !Array.isArray(message.content) ||
702
+ !message.content.every((content) => {
703
+ const block = objectRecord(content);
704
+ if (!block || typeof block.type !== "string")
705
+ return false;
706
+ if (block.type === "text")
707
+ return typeof block.text === "string";
708
+ if (block.type === "thinking")
709
+ return typeof block.thinking === "string";
710
+ if (block.type === "tool_call")
711
+ return typeof block.id === "string" && typeof block.name === "string" && objectRecord(block.arguments);
712
+ if (block.type !== "image" || typeof block.data !== "string" || typeof block.mimeType !== "string")
713
+ return false;
714
+ const padding = block.data.endsWith("==") ? 2 : block.data.endsWith("=") ? 1 : 0;
715
+ const decodedBytes = Math.floor((block.data.length * 3) / 4) - padding;
716
+ return (/^image\/[A-Za-z0-9.+-]+$/.test(block.mimeType) &&
717
+ block.data.length > 0 &&
718
+ block.data.length % 4 === 0 &&
719
+ /^[A-Za-z0-9+/]*={0,2}$/.test(block.data) &&
720
+ decodedBytes > 0 &&
721
+ decodedBytes <= RPC_MAX_ASSISTANT_IMAGE_BYTES);
722
+ }) ||
667
723
  typeof message.provider !== "string" ||
668
724
  typeof message.model !== "string" ||
669
725
  !Number.isFinite(message.timestamp) ||
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/rpc/protocol.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage } from \"@di-code/ai\";\nimport { validateWebManifest } from \"@di-code/plugin-runtime\";\nimport type { AgentSessionEvent } from \"../core/session.ts\";\n\nexport const RPC_PROTOCOL_VERSION = 1 as const;\nexport const RPC_MAX_ID_LENGTH = 128;\nexport const RPC_MAX_PROMPT_LENGTH = 1_000_000;\nexport const RPC_MAX_ATTACHMENTS_PER_REQUEST = 4;\nexport const RPC_MAX_ATTACHMENT_BYTES = 5 * 1024 * 1024;\n/** Allows one JSONL user entry containing a maximum-sized base64 image to be read in a single transcript page. */\nexport const RPC_MAX_TRANSCRIPT_BYTES = 8 * 1024 * 1024;\nconst RPC_MAX_ATTACHMENT_BASE64_LENGTH = Math.ceil(RPC_MAX_ATTACHMENT_BYTES / 3) * 4;\n\n/** v1 grows only by methods and optional fields. Clients must negotiate extended events first. */\nexport const RPC_METHODS = [\n\t\"prompt\",\n\t\"cancel\",\n\t\"get_state\",\n\t\"get_capabilities\",\n\t\"resume_events\",\n\t\"list_sessions\",\n\t\"new_session\",\n\t\"open_session\",\n\t\"inspect_session\",\n\t\"rename_session\",\n\t\"delete_session\",\n\t\"branch_session\",\n\t\"get_transcript\",\n\t\"get_tree\",\n\t\"navigate_tree\",\n\t\"steer\",\n\t\"retry\",\n\t\"get_operation\",\n\t\"get_models\",\n\t\"set_model\",\n\t\"get_runtime\",\n\t\"set_runtime\",\n\t\"set_thinking_level\",\n\t\"compact\",\n\t\"set_compaction_enabled\",\n\t\"get_usage\",\n\t\"list_skills\",\n\t\"get_resources\",\n\t\"get_product_state\",\n\t\"list_providers\",\n\t\"get_settings\",\n\t\"set_default_provider\",\n\t\"set_default_model\",\n\t\"set_locale\",\n\t\"set_permission_mode\",\n\t\"configure_custom_provider\",\n\t\"login\",\n\t\"logout\",\n\t\"get_project_trust\",\n\t\"set_project_trust\",\n\t\"list_context_files\",\n\t\"list_mcp_servers\",\n\t\"configure_mcp_server\",\n\t\"remove_mcp_server\",\n\t\"reconnect_mcp_server\",\n\t\"list_plugins\",\n\t\"list_web_contributions\",\n\t\"list_commands\",\n\t\"run_command\",\n\t\"set_plugin_enabled\",\n\t\"create_attachment\",\n\t\"approve_tool\",\n] as const;\nexport type RpcMethod = (typeof RPC_METHODS)[number];\n\nexport interface RpcRequest {\n\treadonly version: typeof RPC_PROTOCOL_VERSION;\n\treadonly kind: \"request\";\n\treadonly id: string;\n\treadonly method: RpcMethod;\n\treadonly params: Record<string, unknown>;\n}\n\nexport interface RpcSessionState {\n\treadonly sessionId: string;\n\treadonly modelId: string;\n\treadonly isStreaming: boolean;\n\treadonly messageCount: number;\n\treadonly sequence?: number;\n}\n\n/** Metadata for an opaque attachment handle kept only by its live RPC actor. */\nexport interface RpcAttachmentInfo {\n\treadonly id: string;\n\treadonly name: string;\n\treadonly contentType: \"image/png\" | \"image/jpeg\" | \"image/webp\" | \"image/gif\";\n\treadonly bytes: number;\n}\n\nexport interface RpcCapabilities {\n\treadonly methods: readonly RpcMethod[];\n\treadonly events: readonly RpcExtendedEventName[];\n\treadonly eventBufferSize: number;\n}\n\nexport type RpcExtendedEventName =\n\t| \"sequence\"\n\t| \"operation_update\"\n\t| \"snapshot_required\"\n\t| \"session_changed\"\n\t| \"tool_approval\"\n\t| \"product_audit\";\n\nexport interface RpcProductState {\n\treadonly projectTrusted: boolean;\n}\n\nexport interface RpcProviderSummary {\n\treadonly id: string;\n\treadonly name: string;\n\treadonly models: readonly {\n\t\treadonly id: string;\n\t\treadonly name: string;\n\t\treadonly input: readonly string[];\n\t\t/** Omitted when the model does not expose selectable reasoning levels. */\n\t\treadonly reasoningEfforts?: readonly (\"low\" | \"medium\" | \"high\" | \"max\")[];\n\t}[];\n\treadonly configured: boolean;\n}\n\nexport interface RpcSettingsSnapshot {\n\treadonly providers: readonly (RpcProviderSummary & {\n\t\treadonly api: string;\n\t\treadonly baseUrl?: string;\n\t\treadonly apiKeySource: \"environment\" | \"settings\" | \"missing\";\n\t})[];\n\treadonly defaults: { readonly providerId?: string; readonly modelId?: string };\n\treadonly runtime: { readonly providerId: string; readonly modelId: string; readonly thinkingLevel?: string };\n\treadonly locale?: \"en\" | \"zh-CN\";\n\treadonly permissionMode: \"ask\" | \"allow\" | \"deny\";\n\treadonly sources: Readonly<Record<string, \"environment\" | \"settings\" | \"default\" | \"runtime\">>;\n}\n\nexport interface RpcContextFileInfo {\n\treadonly path: string;\n\treadonly scope: string;\n\treadonly bytes: number;\n}\n\n/** A user-invocable command projected from the active composition or Skill catalog. */\nexport interface RpcCommandInfo {\n\treadonly name: string;\n\treadonly description: string;\n\treadonly kind: \"command\" | \"skill\";\n}\n\n/** A WebUI operation requested by a registered command. */\nexport interface RpcCommandAction {\n\treadonly command: string;\n\treadonly args: string;\n}\n\nexport interface RpcMcpServerInfo {\n\treadonly id: string;\n\treadonly scope?: string;\n\treadonly state: \"configured\" | \"connected\" | \"failed\" | \"disconnected\";\n\treadonly tools: number;\n\treadonly resources: number;\n\treadonly prompts: number;\n\treadonly diagnostic?: string;\n}\n\nexport type OperationStatus = \"queued\" | \"running\" | \"completed\" | \"failed\" | \"cancelled\" | \"crashed\";\nexport interface OperationState {\n\treadonly requestId: string;\n\treadonly kind: RpcMethod;\n\treadonly status: OperationStatus;\n\treadonly sessionId?: string;\n\treadonly message?: AssistantMessage;\n\treadonly error?: { readonly code: RpcErrorCode; readonly message: string };\n}\n\n/** Method-specific result fields are validated at the wire boundary. */\nexport type RpcSuccessResult = { readonly method: RpcMethod; readonly [key: string]: unknown };\n\nexport type RpcErrorCode =\n\t| \"PARSE_ERROR\"\n\t| \"INVALID_REQUEST\"\n\t| \"UNSUPPORTED_VERSION\"\n\t| \"METHOD_NOT_FOUND\"\n\t| \"INVALID_PARAMS\"\n\t| \"BUSY\"\n\t| \"NOT_FOUND\"\n\t| \"CANCELLED\"\n\t| \"DISPOSED\"\n\t| \"SESSION_IN_USE\"\n\t| \"INVALID_WORKSPACE\"\n\t| \"UNAUTHORIZED\"\n\t| \"INTERNAL_ERROR\"\n\t| \"PROCESS_EXIT\";\n\nconst RPC_ERROR_CODES: ReadonlySet<RpcErrorCode> = new Set([\n\t\"PARSE_ERROR\",\n\t\"INVALID_REQUEST\",\n\t\"UNSUPPORTED_VERSION\",\n\t\"METHOD_NOT_FOUND\",\n\t\"INVALID_PARAMS\",\n\t\"BUSY\",\n\t\"NOT_FOUND\",\n\t\"CANCELLED\",\n\t\"DISPOSED\",\n\t\"SESSION_IN_USE\",\n\t\"INVALID_WORKSPACE\",\n\t\"UNAUTHORIZED\",\n\t\"INTERNAL_ERROR\",\n\t\"PROCESS_EXIT\",\n]);\nconst LEGACY_EVENT_TYPES: ReadonlySet<AgentSessionEvent[\"type\"]> = new Set([\n\t\"agent_start\",\n\t\"turn_start\",\n\t\"message_start\",\n\t\"message_update\",\n\t\"message_end\",\n\t\"turn_end\",\n\t\"tool_execution_start\",\n\t\"tool_execution_end\",\n\t\"agent_end\",\n\t\"compaction_start\",\n\t\"compaction_end\",\n\t\"queue_update\",\n\t\"tree_navigated\",\n\t\"usage_update\",\n]);\nconst EXTENDED_EVENT_TYPES = new Set([\n\t\"snapshot_required\",\n\t\"operation_update\",\n\t\"session_changed\",\n\t\"tool_approval\",\n\t\"product_audit\",\n]);\nconst EXTENDED_EVENT_NAMES: ReadonlySet<RpcExtendedEventName> = new Set([\n\t\"sequence\",\n\t\"operation_update\",\n\t\"snapshot_required\",\n\t\"session_changed\",\n\t\"tool_approval\",\n\t\"product_audit\",\n]);\nconst ASSISTANT_STOP_REASONS = new Set([\"stop\", \"length\", \"tool_use\", \"error\", \"aborted\"]);\n\nexport interface RpcSuccessResponse {\n\treadonly version: typeof RPC_PROTOCOL_VERSION;\n\treadonly kind: \"response\";\n\treadonly id: string;\n\treadonly ok: true;\n\treadonly result: RpcSuccessResult;\n}\nexport interface RpcErrorResponse {\n\treadonly version: typeof RPC_PROTOCOL_VERSION;\n\treadonly kind: \"response\";\n\treadonly id?: string;\n\treadonly ok: false;\n\treadonly error: { readonly code: RpcErrorCode; readonly message: string };\n}\nexport interface RpcEventRecord {\n\treadonly version: typeof RPC_PROTOCOL_VERSION;\n\treadonly kind: \"event\";\n\treadonly requestId: string;\n\treadonly event:\n\t\t| AgentSessionEvent\n\t\t| {\n\t\t\t\treadonly type: \"product_audit\";\n\t\t\t\treadonly action:\n\t\t\t\t\t| \"login\"\n\t\t\t\t\t| \"logout\"\n\t\t\t\t\t| \"set_project_trust\"\n\t\t\t\t\t| \"configure_mcp_server\"\n\t\t\t\t\t| \"remove_mcp_server\"\n\t\t\t\t\t| \"reconnect_mcp_server\";\n\t\t\t\treadonly target?: string;\n\t\t\t\treadonly projectTrusted?: boolean;\n\t\t }\n\t\t| {\n\t\t\t\treadonly type: \"snapshot_required\" | \"operation_update\" | \"session_changed\" | \"tool_approval\";\n\t\t\t\treadonly [key: string]: unknown;\n\t\t };\n\treadonly sessionId?: string;\n\treadonly sequence?: number;\n}\nexport type RpcResponse = RpcSuccessResponse | RpcErrorResponse;\nexport type RpcServerMessage = RpcResponse | RpcEventRecord;\n\nexport class RpcProtocolError extends Error {\n\treadonly code: RpcErrorCode;\n\treadonly requestId?: string;\n\n\tconstructor(code: RpcErrorCode, message: string, requestId?: string) {\n\t\tsuper(message);\n\t\tthis.name = \"RpcProtocolError\";\n\t\tthis.code = code;\n\t\tthis.requestId = requestId;\n\t}\n}\n\nfunction objectRecord(value: unknown): Record<string, unknown> | undefined {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: undefined;\n}\nfunction requiredId(value: unknown, field: string, requestId?: string): string {\n\tif (typeof value !== \"string\" || value.length === 0 || value.length > RPC_MAX_ID_LENGTH)\n\t\tthrow new RpcProtocolError(\n\t\t\t\"INVALID_REQUEST\",\n\t\t\t`${field} must be a non-empty string of at most ${RPC_MAX_ID_LENGTH} characters.`,\n\t\t\trequestId,\n\t\t);\n\treturn value;\n}\nfunction parseJsonObject(line: string): Record<string, unknown> {\n\ttry {\n\t\tconst result = objectRecord(JSON.parse(line));\n\t\tif (!result) throw new RpcProtocolError(\"INVALID_REQUEST\", \"RPC input must be a JSON object.\");\n\t\treturn result;\n\t} catch (cause) {\n\t\tif (cause instanceof RpcProtocolError) throw cause;\n\t\tthrow new RpcProtocolError(\"PARSE_ERROR\", \"RPC input must be valid JSON.\");\n\t}\n}\nfunction assertVersion(record: Record<string, unknown>, requestId?: string): void {\n\tif (record.version !== RPC_PROTOCOL_VERSION)\n\t\tthrow new RpcProtocolError(\n\t\t\t\"UNSUPPORTED_VERSION\",\n\t\t\t`Unsupported RPC protocol version; expected ${RPC_PROTOCOL_VERSION}.`,\n\t\t\trequestId,\n\t\t);\n}\nfunction stringParam(params: Record<string, unknown>, name: string, id: string, optional = false): void {\n\tconst value = params[name];\n\tif (optional && value === undefined) return;\n\tif (typeof value !== \"string\" || value.length === 0 || value.length > RPC_MAX_PROMPT_LENGTH)\n\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", `${name} must be a non-empty string.`, id);\n}\nfunction booleanParam(params: Record<string, unknown>, name: string, id: string): void {\n\tif (typeof params[name] !== \"boolean\") throw new RpcProtocolError(\"INVALID_PARAMS\", `${name} must be a boolean.`, id);\n}\nfunction attachmentIdsParam(params: Record<string, unknown>, id: string): void {\n\tif (params.attachmentIds === undefined) return;\n\tif (\n\t\t!Array.isArray(params.attachmentIds) ||\n\t\tparams.attachmentIds.length > RPC_MAX_ATTACHMENTS_PER_REQUEST ||\n\t\t!params.attachmentIds.every(\n\t\t\t(value) => typeof value === \"string\" && value.length > 0 && value.length <= RPC_MAX_ID_LENGTH,\n\t\t)\n\t)\n\t\tthrow new RpcProtocolError(\n\t\t\t\"INVALID_PARAMS\",\n\t\t\t`attachmentIds must contain at most ${RPC_MAX_ATTACHMENTS_PER_REQUEST} attachment IDs.`,\n\t\t\tid,\n\t\t);\n}\nfunction attachmentDataParam(params: Record<string, unknown>, id: string): void {\n\tconst data = params.data;\n\tif (typeof data !== \"string\" || data.length === 0 || data.length > RPC_MAX_ATTACHMENT_BASE64_LENGTH)\n\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"Attachment data exceeds the permitted size.\", id);\n}\n\n/** Parses every public v1 method before any dispatcher or transport observes it. */\nexport function parseRpcRequest(line: string): RpcRequest {\n\tconst record = parseJsonObject(line);\n\tconst candidateId = typeof record.id === \"string\" ? record.id : undefined;\n\tassertVersion(record, candidateId);\n\tif (record.kind !== \"request\")\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", 'RPC request kind must be \"request\".', candidateId);\n\tconst id = requiredId(record.id, \"id\", candidateId);\n\tconst params = objectRecord(record.params);\n\tif (!params) throw new RpcProtocolError(\"INVALID_PARAMS\", \"RPC params must be an object.\", id);\n\tif (typeof record.method !== \"string\" || !RPC_METHODS.includes(record.method as RpcMethod))\n\t\tthrow new RpcProtocolError(\"METHOD_NOT_FOUND\", \"Unknown RPC method.\", id);\n\tconst method = record.method as RpcMethod;\n\tswitch (method) {\n\t\tcase \"prompt\":\n\t\tcase \"steer\":\n\t\t\tstringParam(params, \"message\", id);\n\t\t\tattachmentIdsParam(params, id);\n\t\t\tbreak;\n\t\tcase \"cancel\":\n\t\tcase \"get_operation\":\n\t\tcase \"open_session\":\n\t\tcase \"inspect_session\":\n\t\tcase \"rename_session\":\n\t\tcase \"delete_session\":\n\t\tcase \"navigate_tree\":\n\t\tcase \"set_model\":\n\t\tcase \"logout\":\n\t\tcase \"reconnect_mcp_server\":\n\t\t\tstringParam(\n\t\t\t\tparams,\n\t\t\t\tmethod === \"cancel\" || method === \"get_operation\"\n\t\t\t\t\t? \"requestId\"\n\t\t\t\t\t: method === \"open_session\"\n\t\t\t\t\t\t? \"sessionId\"\n\t\t\t\t\t\t: method === \"inspect_session\" || method === \"rename_session\" || method === \"delete_session\"\n\t\t\t\t\t\t\t? \"sessionId\"\n\t\t\t\t\t\t\t: method === \"navigate_tree\"\n\t\t\t\t\t\t\t\t? \"entryId\"\n\t\t\t\t\t\t\t\t: method === \"set_model\"\n\t\t\t\t\t\t\t\t\t? \"modelId\"\n\t\t\t\t\t\t\t\t\t: method === \"logout\"\n\t\t\t\t\t\t\t\t\t\t? \"providerId\"\n\t\t\t\t\t\t\t\t\t\t: \"serverId\",\n\t\t\t\tid,\n\t\t\t);\n\t\t\tif (method === \"rename_session\") stringParam(params, \"label\", id);\n\t\t\tif (method === \"delete_session\") stringParam(params, \"confirmation\", id);\n\t\t\tbreak;\n\t\tcase \"branch_session\":\n\t\t\tif (params.sessionId !== undefined) stringParam(params, \"sessionId\", id, true);\n\t\t\tif (params.entryId !== undefined) stringParam(params, \"entryId\", id, true);\n\t\t\tbreak;\n\t\tcase \"set_runtime\":\n\t\t\tstringParam(params, \"providerId\", id);\n\t\t\tstringParam(params, \"modelId\", id);\n\t\t\tbreak;\n\t\tcase \"run_command\":\n\t\t\tstringParam(params, \"name\", id);\n\t\t\tif (!/^[a-z][a-z0-9-]*(?::[a-z][a-z0-9-]*)?$/.test(params.name as string))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"run_command.name is invalid.\", id);\n\t\t\tif (params.args !== undefined && (typeof params.args !== \"string\" || params.args.length > RPC_MAX_PROMPT_LENGTH))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"args must be a string of at most 1,000,000 characters.\", id);\n\t\t\tbreak;\n\t\tcase \"set_default_provider\":\n\t\tcase \"set_default_model\":\n\t\tcase \"set_locale\":\n\t\tcase \"set_permission_mode\":\n\t\t\tstringParam(\n\t\t\t\tparams,\n\t\t\t\tmethod === \"set_default_provider\"\n\t\t\t\t\t? \"providerId\"\n\t\t\t\t\t: method === \"set_default_model\"\n\t\t\t\t\t\t? \"modelId\"\n\t\t\t\t\t\t: method === \"set_locale\"\n\t\t\t\t\t\t\t? \"locale\"\n\t\t\t\t\t\t\t: \"permissionMode\",\n\t\t\t\tid,\n\t\t\t);\n\t\t\tif (method === \"set_locale\" && params.locale !== \"en\" && params.locale !== \"zh-CN\")\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"locale must be en or zh-CN.\", id);\n\t\t\tif (\n\t\t\t\tmethod === \"set_permission_mode\" &&\n\t\t\t\tparams.permissionMode !== \"ask\" &&\n\t\t\t\tparams.permissionMode !== \"allow\" &&\n\t\t\t\tparams.permissionMode !== \"deny\"\n\t\t\t)\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"permissionMode must be ask, allow, or deny.\", id);\n\t\t\tbreak;\n\t\tcase \"configure_custom_provider\":\n\t\t\tfor (const name of [\"api\", \"baseUrl\", \"apiKey\", \"modelId\"]) stringParam(params, name, id);\n\t\t\tif (![\"openai-responses\", \"openai-chat-completions\", \"anthropic-messages\"].includes(params.api as string))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"Unsupported custom Provider API.\", id);\n\t\t\tbreak;\n\t\tcase \"set_thinking_level\":\n\t\t\tif (\n\t\t\t\tparams.level !== undefined &&\n\t\t\t\tparams.level !== \"low\" &&\n\t\t\t\tparams.level !== \"medium\" &&\n\t\t\t\tparams.level !== \"high\" &&\n\t\t\t\tparams.level !== \"max\"\n\t\t\t)\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"set_thinking_level.level must be a valid thinking level.\", id);\n\t\t\tbreak;\n\t\tcase \"retry\":\n\t\t\tstringParam(params, \"targetRequestId\", id);\n\t\t\tbreak;\n\t\tcase \"login\":\n\t\t\tstringParam(params, \"providerId\", id);\n\t\t\tstringParam(params, \"apiKey\", id);\n\t\t\tif (params.modelId !== undefined) stringParam(params, \"modelId\", id, true);\n\t\t\tif (params.api !== undefined) stringParam(params, \"api\", id, true);\n\t\t\tbreak;\n\t\tcase \"configure_mcp_server\":\n\t\t\tstringParam(params, \"serverId\", id);\n\t\t\tstringParam(params, \"scope\", id);\n\t\t\tif (!objectRecord(params.config)) throw new RpcProtocolError(\"INVALID_PARAMS\", \"config must be an object.\", id);\n\t\t\tbreak;\n\t\tcase \"remove_mcp_server\":\n\t\t\tstringParam(params, \"serverId\", id);\n\t\t\tif (params.scope !== undefined) stringParam(params, \"scope\", id, true);\n\t\t\tbreak;\n\t\tcase \"set_plugin_enabled\":\n\t\t\tstringParam(params, \"pluginId\", id);\n\t\t\tbooleanParam(params, \"enabled\", id);\n\t\t\tbreak;\n\t\tcase \"set_compaction_enabled\":\n\t\tcase \"set_project_trust\":\n\t\t\tbooleanParam(params, method === \"set_compaction_enabled\" ? \"enabled\" : \"trusted\", id);\n\t\t\tbreak;\n\t\tcase \"get_capabilities\":\n\t\t\tif (\n\t\t\t\tparams.events !== undefined &&\n\t\t\t\t(!Array.isArray(params.events) || !params.events.every((item) => typeof item === \"string\"))\n\t\t\t)\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"get_capabilities.events must be a string array.\", id);\n\t\t\tbreak;\n\t\tcase \"resume_events\":\n\t\t\tif (\n\t\t\t\tparams.lastSequence !== undefined &&\n\t\t\t\t(!Number.isSafeInteger(params.lastSequence) || (params.lastSequence as number) < 0)\n\t\t\t)\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"resume_events.lastSequence must be a non-negative integer.\", id);\n\t\t\tbreak;\n\t\tcase \"create_attachment\":\n\t\t\tstringParam(params, \"name\", id);\n\t\t\tstringParam(params, \"contentType\", id);\n\t\t\tattachmentDataParam(params, id);\n\t\t\tif (![\"image/png\", \"image/jpeg\", \"image/webp\", \"image/gif\"].includes(params.contentType as string))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"Attachment contentType is unsupported.\", id);\n\t\t\tbreak;\n\t\tcase \"get_transcript\":\n\t\t\tif (params.pageToken !== undefined) stringParam(params, \"pageToken\", id, true);\n\t\t\tif (\n\t\t\t\tparams.pageSize !== undefined &&\n\t\t\t\t(!Number.isSafeInteger(params.pageSize) || (params.pageSize as number) < 1 || (params.pageSize as number) > 200)\n\t\t\t)\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"pageSize must be an integer between 1 and 200.\", id);\n\t\t\tif (\n\t\t\t\tparams.maxBytes !== undefined &&\n\t\t\t\t(!Number.isSafeInteger(params.maxBytes) ||\n\t\t\t\t\t(params.maxBytes as number) < 1024 ||\n\t\t\t\t\t(params.maxBytes as number) > RPC_MAX_TRANSCRIPT_BYTES)\n\t\t\t)\n\t\t\t\tthrow new RpcProtocolError(\n\t\t\t\t\t\"INVALID_PARAMS\",\n\t\t\t\t\t`maxBytes must be between 1024 and ${RPC_MAX_TRANSCRIPT_BYTES}.`,\n\t\t\t\t\tid,\n\t\t\t\t);\n\t\t\tbreak;\n\t\tcase \"approve_tool\":\n\t\t\tstringParam(params, \"approvalId\", id);\n\t\t\tbooleanParam(params, \"approved\", id);\n\t\t\tbreak;\n\t}\n\treturn { version: RPC_PROTOCOL_VERSION, kind: \"request\", id, method, params };\n}\n\nexport function parseRpcServerMessage(line: string): RpcServerMessage {\n\tconst record = parseJsonObject(line);\n\tassertVersion(record);\n\tif (record.kind === \"event\") {\n\t\trequiredId(record.requestId, \"requestId\");\n\t\tconst event = objectRecord(record.event);\n\t\tconst type = event?.type;\n\t\tif (\n\t\t\ttypeof type !== \"string\" ||\n\t\t\t(!LEGACY_EVENT_TYPES.has(type as AgentSessionEvent[\"type\"]) && !EXTENDED_EVENT_TYPES.has(type))\n\t\t)\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC event must contain a typed event object.\");\n\t\tif (!event) throw new RpcProtocolError(\"INVALID_REQUEST\", \"RPC event must contain a typed event object.\");\n\t\tif (record.sequence !== undefined && (!Number.isSafeInteger(record.sequence) || (record.sequence as number) < 0))\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC event sequence is invalid.\");\n\t\tassertEvent(event, type);\n\t\treturn record as unknown as RpcEventRecord;\n\t}\n\tif (record.kind !== \"response\")\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", 'RPC server message kind must be \"response\" or \"event\".');\n\tif (record.ok === false) {\n\t\tconst error = objectRecord(record.error);\n\t\tif (\n\t\t\t!error ||\n\t\t\ttypeof error.code !== \"string\" ||\n\t\t\t!RPC_ERROR_CODES.has(error.code as RpcErrorCode) ||\n\t\t\ttypeof error.message !== \"string\"\n\t\t)\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC error response has an invalid error object.\");\n\t\tif (record.id !== undefined) requiredId(record.id, \"id\");\n\t\treturn record as unknown as RpcErrorResponse;\n\t}\n\tif (record.ok !== true) throw new RpcProtocolError(\"INVALID_REQUEST\", \"RPC response ok must be a boolean.\");\n\trequiredId(record.id, \"id\");\n\tconst result = objectRecord(record.result);\n\tif (!result || typeof result.method !== \"string\" || !RPC_METHODS.includes(result.method as RpcMethod))\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC success response has an unknown method.\");\n\tassertSuccessResult(result);\n\treturn record as unknown as RpcSuccessResponse;\n}\nfunction assertSuccessResult(result: Record<string, unknown>): void {\n\tswitch (result.method as RpcMethod) {\n\t\tcase \"prompt\":\n\t\tcase \"retry\":\n\t\t\tassertAssistantMessage(result.message);\n\t\t\treturn;\n\t\tcase \"cancel\":\n\t\t\tif (typeof result.cancelled !== \"boolean\")\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC cancel result is invalid.\");\n\t\t\treturn;\n\t\tcase \"get_state\":\n\t\t\tassertState(result.state);\n\t\t\treturn;\n\t\tcase \"get_capabilities\":\n\t\t\tassertCapabilities(result);\n\t\t\treturn;\n\t\tcase \"resume_events\":\n\t\t\tif (typeof result.snapshotRequired !== \"boolean\")\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC resume_events result is invalid.\");\n\t\t\treturn;\n\t\tcase \"get_operation\":\n\t\t\tassertOperationState(result.operation);\n\t\t\treturn;\n\t\tcase \"create_attachment\":\n\t\t\tassertAttachmentInfo(result.attachment);\n\t\t\treturn;\n\t\tcase \"get_product_state\":\n\t\t\tassertProductState(result.state);\n\t\t\treturn;\n\t\tcase \"get_project_trust\":\n\t\t\tif (typeof result.trusted !== \"boolean\")\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC get_project_trust result is invalid.\");\n\t\t\treturn;\n\t\tcase \"list_sessions\":\n\t\t\tif (!Array.isArray(result.sessions))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC list_sessions result is invalid.\");\n\t\t\tfor (const session of result.sessions) assertSessionInfo(session);\n\t\t\treturn;\n\t\tcase \"new_session\":\n\t\tcase \"open_session\":\n\t\tcase \"rename_session\":\n\t\tcase \"branch_session\":\n\t\t\tassertSessionInfo(result.session);\n\t\t\treturn;\n\t\tcase \"inspect_session\":\n\t\t\tif (!objectRecord(result.snapshot))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC Session snapshot is invalid.\");\n\t\t\treturn;\n\t\tcase \"list_providers\":\n\t\t\tif (!Array.isArray(result.providers))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC providers result is invalid.\");\n\t\t\treturn;\n\t\tcase \"list_context_files\":\n\t\t\tif (!Array.isArray(result.files))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC context files result is invalid.\");\n\t\t\treturn;\n\t\tcase \"list_mcp_servers\":\n\t\t\tif (!Array.isArray(result.servers)) throw new RpcProtocolError(\"INVALID_REQUEST\", \"RPC MCP result is invalid.\");\n\t\t\treturn;\n\t\tcase \"list_web_contributions\":\n\t\t\t{\n\t\t\t\tconst manifest = objectRecord(result.manifest);\n\t\t\t\tif (!manifest || !validateWebManifest(manifest))\n\t\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC Web contribution manifest is invalid.\");\n\t\t\t}\n\t\t\treturn;\n\t\tcase \"list_commands\":\n\t\t\tif (!Array.isArray(result.commands))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC commands result is invalid.\");\n\t\t\tfor (const command of result.commands) assertCommandInfo(command);\n\t\t\treturn;\n\t\tcase \"run_command\":\n\t\t\tif (typeof result.command !== \"string\" || !result.command)\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC command result is invalid.\");\n\t\t\tif (result.action !== undefined) assertCommandAction(result.action);\n\t\t\treturn;\n\t\tcase \"configure_mcp_server\":\n\t\tcase \"reconnect_mcp_server\":\n\t\t\tif (!objectRecord(result.server)) throw new RpcProtocolError(\"INVALID_REQUEST\", \"RPC MCP result is invalid.\");\n\t\t\treturn;\n\t\tcase \"login\":\n\t\t\tif (!objectRecord(result.provider)) throw new RpcProtocolError(\"INVALID_REQUEST\", \"RPC login result is invalid.\");\n\t\t\treturn;\n\t\tcase \"set_project_trust\":\n\t\t\tif (typeof result.trusted !== \"boolean\")\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC trust result is invalid.\");\n\t\t\treturn;\n\t\tcase \"logout\":\n\t\tcase \"remove_mcp_server\":\n\t\t\treturn;\n\t\tcase \"get_settings\":\n\t\t\tif (!objectRecord(result.settings))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC settings result is invalid.\");\n\t\t\treturn;\n\t\tcase \"set_default_provider\":\n\t\tcase \"set_default_model\":\n\t\tcase \"set_locale\":\n\t\tcase \"set_permission_mode\":\n\t\tcase \"configure_custom_provider\":\n\t\t\treturn;\n\t}\n}\nfunction assertCapabilities(result: Record<string, unknown>): void {\n\tif (\n\t\t!Array.isArray(result.methods) ||\n\t\t!result.methods.every((method) => typeof method === \"string\" && RPC_METHODS.includes(method as RpcMethod)) ||\n\t\t!Array.isArray(result.events) ||\n\t\t!result.events.every(\n\t\t\t(event) => typeof event === \"string\" && EXTENDED_EVENT_NAMES.has(event as RpcExtendedEventName),\n\t\t) ||\n\t\t!Number.isSafeInteger(result.eventBufferSize) ||\n\t\t(result.eventBufferSize as number) < 0\n\t)\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC get_capabilities result is invalid.\");\n}\nfunction assertSessionInfo(value: unknown): void {\n\tconst session = objectRecord(value);\n\tif (!session || typeof session.id !== \"string\" || !session.id || typeof session.label !== \"string\")\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC Session result is invalid.\");\n\tif (session.modifiedAt !== undefined && !Number.isFinite(session.modifiedAt))\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC Session modifiedAt is invalid.\");\n}\nfunction assertCommandInfo(value: unknown): void {\n\tconst command = objectRecord(value);\n\tif (\n\t\t!command ||\n\t\ttypeof command.name !== \"string\" ||\n\t\t!command.name ||\n\t\ttypeof command.description !== \"string\" ||\n\t\t(command.kind !== \"command\" && command.kind !== \"skill\")\n\t)\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC command info is invalid.\");\n}\nfunction assertCommandAction(value: unknown): void {\n\tconst action = objectRecord(value);\n\tif (!action || typeof action.command !== \"string\" || !action.command || typeof action.args !== \"string\")\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC command action is invalid.\");\n}\nfunction assertOperationState(value: unknown): void {\n\tconst operation = objectRecord(value);\n\tif (\n\t\t!operation ||\n\t\ttypeof operation.requestId !== \"string\" ||\n\t\t!operation.requestId ||\n\t\ttypeof operation.kind !== \"string\" ||\n\t\t!RPC_METHODS.includes(operation.kind as RpcMethod) ||\n\t\ttypeof operation.status !== \"string\" ||\n\t\t![\"queued\", \"running\", \"completed\", \"failed\", \"cancelled\", \"crashed\"].includes(operation.status)\n\t)\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC operation state is invalid.\");\n\tif (operation.sessionId !== undefined && typeof operation.sessionId !== \"string\")\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC operation session ID is invalid.\");\n\tif (operation.message !== undefined) assertAssistantMessage(operation.message);\n\tif (operation.error !== undefined) assertError(operation.error);\n}\nfunction assertAttachmentInfo(value: unknown): void {\n\tconst attachment = objectRecord(value);\n\tif (\n\t\t!attachment ||\n\t\ttypeof attachment.id !== \"string\" ||\n\t\t!attachment.id ||\n\t\ttypeof attachment.name !== \"string\" ||\n\t\t!attachment.name ||\n\t\ttypeof attachment.contentType !== \"string\" ||\n\t\t![\"image/png\", \"image/jpeg\", \"image/webp\", \"image/gif\"].includes(attachment.contentType) ||\n\t\t!Number.isSafeInteger(attachment.bytes) ||\n\t\t(attachment.bytes as number) < 0\n\t)\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC attachment result is invalid.\");\n}\nfunction assertProductState(value: unknown): void {\n\tconst state = objectRecord(value);\n\tif (!state || typeof state.projectTrusted !== \"boolean\")\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC product state is invalid.\");\n}\nfunction assertError(value: unknown): void {\n\tconst error = objectRecord(value);\n\tif (\n\t\t!error ||\n\t\ttypeof error.code !== \"string\" ||\n\t\t!RPC_ERROR_CODES.has(error.code as RpcErrorCode) ||\n\t\ttypeof error.message !== \"string\"\n\t)\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC error result is invalid.\");\n}\nfunction assertEvent(event: Record<string, unknown>, type: string): void {\n\tif (type === \"operation_update\") {\n\t\tassertOperationState(event.operation);\n\t\treturn;\n\t}\n\tif (type === \"session_changed\") {\n\t\tif (event.session !== undefined) assertSessionInfo(event.session);\n\t\treturn;\n\t}\n\tif (type === \"snapshot_required\") return;\n\tif (type === \"tool_approval\") {\n\t\tif (typeof event.approvalId !== \"string\")\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC tool_approval event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"product_audit\") {\n\t\tif (\n\t\t\ttypeof event.action !== \"string\" ||\n\t\t\t![\n\t\t\t\t\"login\",\n\t\t\t\t\"logout\",\n\t\t\t\t\"set_project_trust\",\n\t\t\t\t\"configure_mcp_server\",\n\t\t\t\t\"remove_mcp_server\",\n\t\t\t\t\"reconnect_mcp_server\",\n\t\t\t].includes(event.action) ||\n\t\t\t(event.target !== undefined && typeof event.target !== \"string\") ||\n\t\t\t(event.projectTrusted !== undefined && typeof event.projectTrusted !== \"boolean\")\n\t\t)\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC product_audit event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"tool_execution_start\") {\n\t\tif (typeof event.toolCallId !== \"string\" || typeof event.toolName !== \"string\" || !objectRecord(event.arguments))\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC tool event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"tool_execution_end\") {\n\t\tif (typeof event.toolCallId !== \"string\" || typeof event.toolName !== \"string\" || !objectRecord(event.result))\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC tool event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"message_start\" || type === \"message_end\") {\n\t\tif (!objectRecord(event.message)) throw new RpcProtocolError(\"INVALID_REQUEST\", \"RPC message event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"message_update\") {\n\t\tconst update = objectRecord(event.event);\n\t\tif (!update || typeof update.type !== \"string\")\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC message update event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"turn_end\") {\n\t\tif (!objectRecord(event.message) || !Array.isArray(event.toolResults))\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC turn event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"agent_end\") {\n\t\tif (!Array.isArray(event.messages)) throw new RpcProtocolError(\"INVALID_REQUEST\", \"RPC agent event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"compaction_start\") {\n\t\tif (event.reason !== \"threshold\" && event.reason !== \"manual\")\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC compaction event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"compaction_end\") {\n\t\tif (\n\t\t\t(event.reason !== \"threshold\" && event.reason !== \"manual\") ||\n\t\t\ttypeof event.success !== \"boolean\" ||\n\t\t\t(event.errorMessage !== undefined && typeof event.errorMessage !== \"string\")\n\t\t)\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC compaction event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"queue_update\") {\n\t\tif (!Array.isArray(event.steering) || !event.steering.every((item) => typeof item === \"string\"))\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC queue event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"tree_navigated\") {\n\t\tif (\n\t\t\ttypeof event.oldLeafId !== \"string\" ||\n\t\t\ttypeof event.newLeafId !== \"string\" ||\n\t\t\ttypeof event.selectedEntryId !== \"string\" ||\n\t\t\ttypeof event.restoredEditorText !== \"boolean\"\n\t\t)\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC tree event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"usage_update\" && !objectRecord(event.usage)) {\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC usage event is invalid.\");\n\t}\n}\nfunction assertState(value: unknown): void {\n\tconst state = objectRecord(value);\n\tif (\n\t\t!state ||\n\t\ttypeof state.sessionId !== \"string\" ||\n\t\t!state.sessionId ||\n\t\ttypeof state.modelId !== \"string\" ||\n\t\t!state.modelId ||\n\t\ttypeof state.isStreaming !== \"boolean\" ||\n\t\t!Number.isInteger(state.messageCount) ||\n\t\t(state.messageCount as number) < 0\n\t)\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC get_state response has an invalid state.\");\n}\nfunction assertAssistantMessage(value: unknown): void {\n\tconst message = objectRecord(value);\n\tif (\n\t\t!message ||\n\t\tmessage.role !== \"assistant\" ||\n\t\t!Array.isArray(message.content) ||\n\t\ttypeof message.provider !== \"string\" ||\n\t\ttypeof message.model !== \"string\" ||\n\t\t!Number.isFinite(message.timestamp) ||\n\t\ttypeof message.stopReason !== \"string\" ||\n\t\t!ASSISTANT_STOP_REASONS.has(message.stopReason)\n\t)\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC prompt response has an invalid message.\");\n}\nexport function rpcErrorResponse(error: RpcProtocolError): RpcErrorResponse {\n\treturn {\n\t\tversion: RPC_PROTOCOL_VERSION,\n\t\tkind: \"response\",\n\t\t...(error.requestId === undefined ? {} : { id: error.requestId }),\n\t\tok: false,\n\t\terror: { code: error.code, message: error.message },\n\t};\n}\n"]}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/rpc/protocol.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAU,CAAC;AAC/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAC/C,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC;AACjD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AACxD,MAAM,6BAA6B,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AACtD,kHAAkH;AAClH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AACxD,MAAM,gCAAgC,GAAG,IAAI,CAAC,IAAI,CAAC,wBAAwB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAErF,kGAAkG;AAClG,MAAM,CAAC,MAAM,WAAW,GAAG;IAC1B,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,kBAAkB;IAClB,eAAe;IACf,eAAe;IACf,aAAa;IACb,cAAc;IACd,iBAAiB;IACjB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,UAAU;IACV,eAAe;IACf,OAAO;IACP,OAAO;IACP,eAAe;IACf,YAAY;IACZ,WAAW;IACX,aAAa;IACb,aAAa;IACb,oBAAoB;IACpB,SAAS;IACT,wBAAwB;IACxB,WAAW;IACX,aAAa;IACb,eAAe;IACf,mBAAmB;IACnB,gBAAgB;IAChB,cAAc;IACd,sBAAsB;IACtB,mBAAmB;IACnB,YAAY;IACZ,qBAAqB;IACrB,2BAA2B;IAC3B,OAAO;IACP,QAAQ;IACR,mBAAmB;IACnB,mBAAmB;IACnB,oBAAoB;IACpB,kBAAkB;IAClB,sBAAsB;IACtB,mBAAmB;IACnB,sBAAsB;IACtB,cAAc;IACd,wBAAwB;IACxB,eAAe;IACf,aAAa;IACb,oBAAoB;IACpB,mBAAmB;IACnB,cAAc;IACd,qBAAqB;CACZ,CAAC;AA4IX,MAAM,eAAe,GAA8B,IAAI,GAAG,CAAC;IAC1D,aAAa;IACb,iBAAiB;IACjB,qBAAqB;IACrB,kBAAkB;IAClB,gBAAgB;IAChB,MAAM;IACN,WAAW;IACX,WAAW;IACX,UAAU;IACV,gBAAgB;IAChB,mBAAmB;IACnB,cAAc;IACd,gBAAgB;IAChB,cAAc;IACd,yBAAyB;CACzB,CAAC,CAAC;AACH,MAAM,kBAAkB,GAA2C,IAAI,GAAG,CAAC;IAC1E,aAAa;IACb,YAAY;IACZ,eAAe;IACf,gBAAgB;IAChB,aAAa;IACb,UAAU;IACV,sBAAsB;IACtB,oBAAoB;IACpB,WAAW;IACX,kBAAkB;IAClB,gBAAgB;IAChB,cAAc;IACd,gBAAgB;IAChB,cAAc;CACd,CAAC,CAAC;AACH,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACpC,mBAAmB;IACnB,kBAAkB;IAClB,iBAAiB;IACjB,eAAe;IACf,qBAAqB;IACrB,eAAe;IACf,YAAY;CACZ,CAAC,CAAC;AACH,MAAM,oBAAoB,GAAsC,IAAI,GAAG,CAAC;IACvE,UAAU;IACV,kBAAkB;IAClB,mBAAmB;IACnB,iBAAiB;IACjB,eAAe;IACf,qBAAqB;IACrB,eAAe;IACf,YAAY;CACZ,CAAC,CAAC;AACH,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;AAkD3F,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACjC,IAAI,CAAe;IACnB,SAAS,CAAU;IAE5B,YAAY,IAAkB,EAAE,OAAe,EAAE,SAAkB;QAClE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;CACD;AAED,SAAS,YAAY,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAC1E,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,SAAS,CAAC;AACd,CAAC;AACD,SAAS,UAAU,CAAC,KAAc,EAAE,KAAa,EAAE,SAAkB;IACpE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,iBAAiB;QACtF,MAAM,IAAI,gBAAgB,CACzB,iBAAiB,EACjB,GAAG,KAAK,0CAA0C,iBAAiB,cAAc,EACjF,SAAS,CACT,CAAC;IACH,OAAO,KAAK,CAAC;AACd,CAAC;AACD,SAAS,eAAe,CAAC,IAAY;IACpC,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,kCAAkC,CAAC,CAAC;QAC/F,OAAO,MAAM,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,KAAK,YAAY,gBAAgB;YAAE,MAAM,KAAK,CAAC;QACnD,MAAM,IAAI,gBAAgB,CAAC,aAAa,EAAE,+BAA+B,CAAC,CAAC;IAC5E,CAAC;AACF,CAAC;AACD,SAAS,aAAa,CAAC,MAA+B,EAAE,SAAkB;IACzE,IAAI,MAAM,CAAC,OAAO,KAAK,oBAAoB;QAC1C,MAAM,IAAI,gBAAgB,CACzB,qBAAqB,EACrB,8CAA8C,oBAAoB,GAAG,EACrE,SAAS,CACT,CAAC;AACJ,CAAC;AACD,SAAS,WAAW,CAAC,MAA+B,EAAE,IAAY,EAAE,EAAU,EAAE,QAAQ,GAAG,KAAK;IAC/F,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,QAAQ,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,qBAAqB;QAC1F,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,GAAG,IAAI,8BAA8B,EAAE,EAAE,CAAC,CAAC;AAC1F,CAAC;AACD,SAAS,YAAY,CAAC,MAA+B,EAAE,IAAY,EAAE,EAAU;IAC9E,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS;QAAE,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,GAAG,IAAI,qBAAqB,EAAE,EAAE,CAAC,CAAC;AACvH,CAAC;AACD,SAAS,kBAAkB,CAAC,MAA+B,EAAE,EAAU;IACtE,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS;QAAE,OAAO;IAC/C,IACC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;QACpC,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,+BAA+B;QAC7D,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAC1B,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,iBAAiB,CAC7F;QAED,MAAM,IAAI,gBAAgB,CACzB,gBAAgB,EAChB,sCAAsC,+BAA+B,kBAAkB,EACvF,EAAE,CACF,CAAC;AACJ,CAAC;AACD,SAAS,mBAAmB,CAAC,MAA+B,EAAE,EAAU;IACvE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,gCAAgC;QAClG,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,6CAA6C,EAAE,EAAE,CAAC,CAAC;AAClG,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,eAAe,CAAC,IAAY;IAC3C,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACnC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAC5B,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,qCAAqC,EAAE,WAAW,CAAC,CAAC;IACnG,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,+BAA+B,EAAE,EAAE,CAAC,CAAC;IAC/F,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAmB,CAAC;QACzF,MAAM,IAAI,gBAAgB,CAAC,kBAAkB,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAmB,CAAC;IAC1C,QAAQ,MAAM,EAAE,CAAC;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO;YACX,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YACnC,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC/B,MAAM;QACP,KAAK,QAAQ,CAAC;QACd,KAAK,eAAe,CAAC;QACrB,KAAK,cAAc,CAAC;QACpB,KAAK,iBAAiB,CAAC;QACvB,KAAK,gBAAgB,CAAC;QACtB,KAAK,gBAAgB,CAAC;QACtB,KAAK,eAAe,CAAC;QACrB,KAAK,WAAW,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,sBAAsB;YAC1B,WAAW,CACV,MAAM,EACN,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,eAAe;gBAChD,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,MAAM,KAAK,cAAc;oBAC1B,CAAC,CAAC,WAAW;oBACb,CAAC,CAAC,MAAM,KAAK,iBAAiB,IAAI,MAAM,KAAK,gBAAgB,IAAI,MAAM,KAAK,gBAAgB;wBAC3F,CAAC,CAAC,WAAW;wBACb,CAAC,CAAC,MAAM,KAAK,eAAe;4BAC3B,CAAC,CAAC,SAAS;4BACX,CAAC,CAAC,MAAM,KAAK,WAAW;gCACvB,CAAC,CAAC,SAAS;gCACX,CAAC,CAAC,MAAM,KAAK,QAAQ;oCACpB,CAAC,CAAC,YAAY;oCACd,CAAC,CAAC,UAAU,EAClB,EAAE,CACF,CAAC;YACF,IAAI,MAAM,KAAK,gBAAgB;gBAAE,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;YAClE,IAAI,MAAM,KAAK,gBAAgB;gBAAE,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;YACzE,MAAM;QACP,KAAK,gBAAgB;YACpB,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;gBAAE,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAC/E,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;gBAAE,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAC3E,MAAM;QACP,KAAK,aAAa;YACjB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;YACtC,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YACnC,MAAM;QACP,KAAK,aAAa;YACjB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,CAAC,wCAAwC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAc,CAAC;gBACxE,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,8BAA8B,EAAE,EAAE,CAAC,CAAC;YAClF,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAC;gBAC/G,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,wDAAwD,EAAE,EAAE,CAAC,CAAC;YAC5G,MAAM;QACP,KAAK,sBAAsB,CAAC;QAC5B,KAAK,mBAAmB,CAAC;QACzB,KAAK,YAAY,CAAC;QAClB,KAAK,qBAAqB;YACzB,WAAW,CACV,MAAM,EACN,MAAM,KAAK,sBAAsB;gBAChC,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,MAAM,KAAK,mBAAmB;oBAC/B,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,MAAM,KAAK,YAAY;wBACxB,CAAC,CAAC,QAAQ;wBACV,CAAC,CAAC,gBAAgB,EACrB,EAAE,CACF,CAAC;YACF,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO;gBACjF,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,6BAA6B,EAAE,EAAE,CAAC,CAAC;YACjF,IACC,MAAM,KAAK,qBAAqB;gBAChC,MAAM,CAAC,cAAc,KAAK,KAAK;gBAC/B,MAAM,CAAC,cAAc,KAAK,OAAO;gBACjC,MAAM,CAAC,cAAc,KAAK,MAAM;gBAEhC,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,6CAA6C,EAAE,EAAE,CAAC,CAAC;YACjG,MAAM;QACP,KAAK,2BAA2B;YAC/B,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC;gBAAE,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YAC1F,IAAI,CAAC,CAAC,kBAAkB,EAAE,yBAAyB,EAAE,oBAAoB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAa,CAAC;gBACxG,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,kCAAkC,EAAE,EAAE,CAAC,CAAC;YACtF,MAAM;QACP,KAAK,oBAAoB;YACxB,IACC,MAAM,CAAC,KAAK,KAAK,SAAS;gBAC1B,MAAM,CAAC,KAAK,KAAK,KAAK;gBACtB,MAAM,CAAC,KAAK,KAAK,QAAQ;gBACzB,MAAM,CAAC,KAAK,KAAK,MAAM;gBACvB,MAAM,CAAC,KAAK,KAAK,KAAK;gBAEtB,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,0DAA0D,EAAE,EAAE,CAAC,CAAC;YAC9G,MAAM;QACP,KAAK,OAAO;YACX,WAAW,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;YAC3C,MAAM;QACP,KAAK,OAAO;YACX,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;YACtC,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;YAClC,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;gBAAE,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAC3E,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS;gBAAE,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YACnE,MAAM;QACP,KAAK,sBAAsB;YAC1B,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;YACpC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,2BAA2B,EAAE,EAAE,CAAC,CAAC;YAChH,MAAM;QACP,KAAK,mBAAmB;YACvB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;YACpC,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;gBAAE,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YACvE,MAAM;QACP,KAAK,oBAAoB;YACxB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;YACpC,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YACpC,MAAM;QACP,KAAK,wBAAwB,CAAC;QAC9B,KAAK,mBAAmB;YACvB,YAAY,CAAC,MAAM,EAAE,MAAM,KAAK,wBAAwB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACtF,MAAM;QACP,KAAK,kBAAkB;YACtB,IACC,MAAM,CAAC,MAAM,KAAK,SAAS;gBAC3B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;gBAE3F,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,iDAAiD,EAAE,EAAE,CAAC,CAAC;YACrG,MAAM;QACP,KAAK,eAAe;YACnB,IACC,MAAM,CAAC,YAAY,KAAK,SAAS;gBACjC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,IAAK,MAAM,CAAC,YAAuB,GAAG,CAAC,CAAC;gBAEnF,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,4DAA4D,EAAE,EAAE,CAAC,CAAC;YAChH,MAAM;QACP,KAAK,mBAAmB;YACvB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YAChC,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;YACvC,mBAAmB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAqB,CAAC;gBACjG,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,wCAAwC,EAAE,EAAE,CAAC,CAAC;YAC5F,MAAM;QACP,KAAK,gBAAgB;YACpB,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;gBAAE,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAC/E,IACC,MAAM,CAAC,QAAQ,KAAK,SAAS;gBAC7B,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAK,MAAM,CAAC,QAAmB,GAAG,CAAC,IAAK,MAAM,CAAC,QAAmB,GAAG,GAAG,CAAC;gBAEhH,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,gDAAgD,EAAE,EAAE,CAAC,CAAC;YACpG,IACC,MAAM,CAAC,QAAQ,KAAK,SAAS;gBAC7B,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC;oBACrC,MAAM,CAAC,QAAmB,GAAG,IAAI;oBACjC,MAAM,CAAC,QAAmB,GAAG,wBAAwB,CAAC;gBAExD,MAAM,IAAI,gBAAgB,CACzB,gBAAgB,EAChB,qCAAqC,wBAAwB,GAAG,EAChE,EAAE,CACF,CAAC;YACH,MAAM;QACP,KAAK,cAAc;YAClB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;YACtC,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;YACrC,MAAM;QACP,KAAK,qBAAqB;YACzB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;YACrC,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;gBACrG,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,wCAAwC,EAAE,EAAE,CAAC,CAAC;YAC5F,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,SAAS;gBACxE,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,+CAA+C,EAAE,EAAE,CAAC,CAAC;YACnG,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;gBAAE,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YACvE,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;gBAAE,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAC7E,MAAM;IACR,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY;IACjD,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACrC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtB,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC7B,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC;QACzB,IACC,OAAO,IAAI,KAAK,QAAQ;YACxB,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAiC,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAE/F,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,8CAA8C,CAAC,CAAC;QAC/F,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,8CAA8C,CAAC,CAAC;QAC1G,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAK,MAAM,CAAC,QAAmB,GAAG,CAAC,CAAC;YAC/G,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,gCAAgC,CAAC,CAAC;QACjF,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACzB,OAAO,MAAmC,CAAC;IAC5C,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;QAC7B,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,wDAAwD,CAAC,CAAC;IACzG,IAAI,MAAM,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzC,IACC,CAAC,KAAK;YACN,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAC9B,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAoB,CAAC;YAChD,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;YAEjC,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,iDAAiD,CAAC,CAAC;QAClG,IAAI,MAAM,CAAC,EAAE,KAAK,SAAS;YAAE,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACzD,OAAO,MAAqC,CAAC;IAC9C,CAAC;IACD,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI;QAAE,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,oCAAoC,CAAC,CAAC;IAC5G,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAmB,CAAC;QACpG,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,6CAA6C,CAAC,CAAC;IAC9F,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,MAAuC,CAAC;AAChD,CAAC;AACD,SAAS,mBAAmB,CAAC,MAA+B;IAC3D,QAAQ,MAAM,CAAC,MAAmB,EAAE,CAAC;QACpC,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO;YACX,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACvC,OAAO;QACR,KAAK,QAAQ;YACZ,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,SAAS;gBACxC,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,+BAA+B,CAAC,CAAC;YAChF,OAAO;QACR,KAAK,WAAW;YACf,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,OAAO;QACR,KAAK,kBAAkB;YACtB,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC3B,OAAO;QACR,KAAK,eAAe;YACnB,IAAI,OAAO,MAAM,CAAC,gBAAgB,KAAK,SAAS;gBAC/C,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,sCAAsC,CAAC,CAAC;YACvF,OAAO;QACR,KAAK,eAAe;YACnB,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACvC,OAAO;QACR,KAAK,mBAAmB;YACvB,oBAAoB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACxC,OAAO;QACR,KAAK,mBAAmB;YACvB,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACjC,OAAO;QACR,KAAK,mBAAmB;YACvB,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,SAAS;gBACtC,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,0CAA0C,CAAC,CAAC;YAC3F,OAAO;QACR,KAAK,eAAe;YACnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAClC,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,sCAAsC,CAAC,CAAC;YACvF,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ;gBAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAClE,OAAO;QACR,KAAK,aAAa,CAAC;QACnB,KAAK,cAAc,CAAC;QACpB,KAAK,gBAAgB,CAAC;QACtB,KAAK,gBAAgB;YACpB,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAClC,OAAO;QACR,KAAK,iBAAiB;YACrB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACjC,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,kCAAkC,CAAC,CAAC;YACnF,OAAO;QACR,KAAK,gBAAgB;YACpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;gBACnC,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,kCAAkC,CAAC,CAAC;YACnF,OAAO;QACR,KAAK,oBAAoB;YACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC/B,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,sCAAsC,CAAC,CAAC;YACvF,OAAO;QACR,KAAK,kBAAkB;YACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;gBAAE,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,4BAA4B,CAAC,CAAC;YAChH,OAAO;QACR,KAAK,wBAAwB;YAC5B,CAAC;gBACA,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC/C,IAAI,CAAC,QAAQ,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;oBAC9C,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,2CAA2C,CAAC,CAAC;YAC7F,CAAC;YACD,OAAO;QACR,KAAK,eAAe;YACnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAClC,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,iCAAiC,CAAC,CAAC;YAClF,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ;gBAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAClE,OAAO;QACR,KAAK,aAAa;YACjB,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO;gBACxD,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,gCAAgC,CAAC,CAAC;YACjF,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;gBAAE,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACpE,OAAO;QACR,KAAK,sBAAsB,CAAC;QAC5B,KAAK,sBAAsB;YAC1B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,4BAA4B,CAAC,CAAC;YAC9G,OAAO;QACR,KAAK,OAAO;YACX,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAAE,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,8BAA8B,CAAC,CAAC;YAClH,OAAO;QACR,KAAK,mBAAmB;YACvB,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,SAAS;gBACtC,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,8BAA8B,CAAC,CAAC;YAC/E,OAAO;QACR,KAAK,QAAQ,CAAC;QACd,KAAK,mBAAmB;YACvB,OAAO;QACR,KAAK,cAAc;YAClB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACjC,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,iCAAiC,CAAC,CAAC;YAClF,OAAO;QACR,KAAK,sBAAsB,CAAC;QAC5B,KAAK,mBAAmB,CAAC;QACzB,KAAK,YAAY,CAAC;QAClB,KAAK,qBAAqB,CAAC;QAC3B,KAAK,2BAA2B,CAAC;QACjC,KAAK,qBAAqB;YACzB,OAAO;IACT,CAAC;AACF,CAAC;AACD,SAAS,kBAAkB,CAAC,MAA+B;IAC1D,IACC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QAC9B,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAmB,CAAC,CAAC;QAC1G,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CACnB,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,oBAAoB,CAAC,GAAG,CAAC,KAA6B,CAAC,CAC/F;QACD,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,eAAe,CAAC;QAC5C,MAAM,CAAC,eAA0B,GAAG,CAAC;QAEtC,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,yCAAyC,CAAC,CAAC;AAC3F,CAAC;AACD,SAAS,iBAAiB,CAAC,KAAc;IACxC,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;QACjG,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,gCAAgC,CAAC,CAAC;IACjF,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;QAC3E,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,oCAAoC,CAAC,CAAC;AACtF,CAAC;AACD,SAAS,iBAAiB,CAAC,KAAc;IACxC,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,IACC,CAAC,OAAO;QACR,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;QAChC,CAAC,OAAO,CAAC,IAAI;QACb,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ;QACvC,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC;QAExD,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,8BAA8B,CAAC,CAAC;AAChF,CAAC;AACD,SAAS,mBAAmB,CAAC,KAAc;IAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;QACtG,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,gCAAgC,CAAC,CAAC;AAClF,CAAC;AACD,SAAS,oBAAoB,CAAC,KAAc;IAC3C,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACtC,IACC,CAAC,SAAS;QACV,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ;QACvC,CAAC,SAAS,CAAC,SAAS;QACpB,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ;QAClC,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAiB,CAAC;QAClD,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ;QACpC,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC;QAEhG,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,iCAAiC,CAAC,CAAC;IAClF,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ;QAC/E,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,sCAAsC,CAAC,CAAC;IACvF,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS;QAAE,sBAAsB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC/E,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS;QAAE,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC;AACD,SAAS,oBAAoB,CAAC,KAAc;IAC3C,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACvC,IACC,CAAC,UAAU;QACX,OAAO,UAAU,CAAC,EAAE,KAAK,QAAQ;QACjC,CAAC,UAAU,CAAC,EAAE;QACd,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ;QACnC,CAAC,UAAU,CAAC,IAAI;QAChB,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ;QAC1C,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;QACxF,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC;QACtC,UAAU,CAAC,KAAgB,GAAG,CAAC;QAEhC,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,mCAAmC,CAAC,CAAC;AACrF,CAAC;AACD,SAAS,kBAAkB,CAAC,KAAc;IACzC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,cAAc,KAAK,SAAS;QACtD,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,+BAA+B,CAAC,CAAC;AACjF,CAAC;AACD,SAAS,WAAW,CAAC,KAAc;IAClC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAClC,IACC,CAAC,KAAK;QACN,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAoB,CAAC;QAChD,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QAEjC,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,8BAA8B,CAAC,CAAC;AAChF,CAAC;AACD,SAAS,WAAW,CAAC,KAA8B,EAAE,IAAY;IAChE,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;QACjC,oBAAoB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACtC,OAAO;IACR,CAAC;IACD,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;YAAE,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAClE,OAAO;IACR,CAAC;IACD,IAAI,IAAI,KAAK,mBAAmB;QAAE,OAAO;IACzC,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;QAC9B,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;YACvC,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,qCAAqC,CAAC,CAAC;QACtF,OAAO;IACR,CAAC;IACD,IAAI,IAAI,KAAK,qBAAqB,EAAE,CAAC;QACpC,IACC,OAAO,KAAK,CAAC,oBAAoB,KAAK,QAAQ;YAC9C,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAC9B,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;YAEhC,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,2CAA2C,CAAC,CAAC;QAC5F,OAAO;IACR,CAAC;IACD,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;QAC9B,IACC,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;YAChC,CAAC;gBACA,OAAO;gBACP,QAAQ;gBACR,mBAAmB;gBACnB,sBAAsB;gBACtB,mBAAmB;gBACnB,sBAAsB;aACtB,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;YACxB,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC;YAChE,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,cAAc,KAAK,SAAS,CAAC;YAEjF,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,qCAAqC,CAAC,CAAC;QACtF,OAAO;IACR,CAAC;IACD,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC3B,IACC,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;YACnC,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ;YACxC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;YACnC,KAAK,CAAC,OAAkB,GAAG,CAAC;YAC7B,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC;YAEnB,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,kCAAkC,CAAC,CAAC;QACnF,OAAO;IACR,CAAC;IACD,IAAI,IAAI,KAAK,sBAAsB,EAAE,CAAC;QACrC,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;YAC/G,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,4BAA4B,CAAC,CAAC;QAC7E,OAAO;IACR,CAAC;IACD,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;QACnC,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC;YAC5G,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,4BAA4B,CAAC,CAAC;QAC7E,OAAO;IACR,CAAC;IACD,IAAI,IAAI,KAAK,eAAe,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QACxD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,+BAA+B,CAAC,CAAC;QACjH,OAAO;IACR,CAAC;IACD,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAC7C,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,sCAAsC,CAAC,CAAC;QACvF,OAAO;IACR,CAAC;IACD,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;YACpE,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,4BAA4B,CAAC,CAAC;QAC7E,OAAO;IACR,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,6BAA6B,CAAC,CAAC;QACjH,OAAO;IACR,CAAC;IACD,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;YAC5D,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,kCAAkC,CAAC,CAAC;QACnF,OAAO;IACR,CAAC;IACD,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAC/B,IACC,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC;YAC3D,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS;YAClC,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,CAAC;YAE5E,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,kCAAkC,CAAC,CAAC;QACnF,OAAO;IACR,CAAC;IACD,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;YAC9F,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,6BAA6B,CAAC,CAAC;QAC9E,OAAO;IACR,CAAC;IACD,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAC/B,IACC,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;YACnC,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;YACnC,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ;YACzC,OAAO,KAAK,CAAC,kBAAkB,KAAK,SAAS;YAE7C,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,4BAA4B,CAAC,CAAC;QAC7E,OAAO;IACR,CAAC;IACD,IAAI,IAAI,KAAK,cAAc,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,6BAA6B,CAAC,CAAC;IAC9E,CAAC;AACF,CAAC;AACD,SAAS,WAAW,CAAC,KAAc;IAClC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAClC,IACC,CAAC,KAAK;QACN,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QACnC,CAAC,KAAK,CAAC,SAAS;QAChB,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QACjC,CAAC,KAAK,CAAC,OAAO;QACd,OAAO,KAAK,CAAC,WAAW,KAAK,SAAS;QACtC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC;QACpC,KAAK,CAAC,YAAuB,GAAG,CAAC;QAElC,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,8CAA8C,CAAC,CAAC;AAChG,CAAC;AACD,SAAS,sBAAsB,CAAC,KAAc;IAC7C,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,IACC,CAAC,OAAO;QACR,OAAO,CAAC,IAAI,KAAK,WAAW;QAC5B,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAC/B,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE;YAClC,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAC3D,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;gBAAE,OAAO,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;YACjE,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;gBAAE,OAAO,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC;YACzE,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;gBAC7B,OAAO,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACxG,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YACjH,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;YACvE,OAAO,CACN,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC/C,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBACrB,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;gBAC3B,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACzC,YAAY,GAAG,CAAC;gBAChB,YAAY,IAAI,6BAA6B,CAC7C,CAAC;QACH,CAAC,CAAC;QACF,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ;QACpC,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;QACjC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;QACnC,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ;QACtC,CAAC,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;QAE/C,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,6CAA6C,CAAC,CAAC;AAC/F,CAAC;AACD,MAAM,UAAU,gBAAgB,CAAC,KAAuB;IACvD,OAAO;QACN,OAAO,EAAE,oBAAoB;QAC7B,IAAI,EAAE,UAAU;QAChB,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;QACjE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;KACnD,CAAC;AACH,CAAC","sourcesContent":["import type { AssistantMessage } from \"@di-code/ai\";\nimport { validateWebManifest } from \"@di-code/plugin-runtime\";\nimport type { AgentSessionEvent } from \"../core/session.ts\";\n\nexport const RPC_PROTOCOL_VERSION = 1 as const;\nexport const RPC_MAX_ID_LENGTH = 128;\nexport const RPC_MAX_PROMPT_LENGTH = 1_000_000;\nexport const RPC_MAX_ATTACHMENTS_PER_REQUEST = 4;\nexport const RPC_MAX_ATTACHMENT_BYTES = 5 * 1024 * 1024;\nconst RPC_MAX_ASSISTANT_IMAGE_BYTES = 5 * 1024 * 1024;\n/** Allows one JSONL user entry containing a maximum-sized base64 image to be read in a single transcript page. */\nexport const RPC_MAX_TRANSCRIPT_BYTES = 8 * 1024 * 1024;\nconst RPC_MAX_ATTACHMENT_BASE64_LENGTH = Math.ceil(RPC_MAX_ATTACHMENT_BYTES / 3) * 4;\n\n/** v1 grows only by methods and optional fields. Clients must negotiate extended events first. */\nexport const RPC_METHODS = [\n\t\"prompt\",\n\t\"cancel\",\n\t\"get_state\",\n\t\"get_capabilities\",\n\t\"resume_events\",\n\t\"list_sessions\",\n\t\"new_session\",\n\t\"open_session\",\n\t\"inspect_session\",\n\t\"rename_session\",\n\t\"delete_session\",\n\t\"branch_session\",\n\t\"get_transcript\",\n\t\"get_tree\",\n\t\"navigate_tree\",\n\t\"steer\",\n\t\"retry\",\n\t\"get_operation\",\n\t\"get_models\",\n\t\"set_model\",\n\t\"get_runtime\",\n\t\"set_runtime\",\n\t\"set_thinking_level\",\n\t\"compact\",\n\t\"set_compaction_enabled\",\n\t\"get_usage\",\n\t\"list_skills\",\n\t\"get_resources\",\n\t\"get_product_state\",\n\t\"list_providers\",\n\t\"get_settings\",\n\t\"set_default_provider\",\n\t\"set_default_model\",\n\t\"set_locale\",\n\t\"set_permission_mode\",\n\t\"configure_custom_provider\",\n\t\"login\",\n\t\"logout\",\n\t\"get_project_trust\",\n\t\"set_project_trust\",\n\t\"list_context_files\",\n\t\"list_mcp_servers\",\n\t\"configure_mcp_server\",\n\t\"remove_mcp_server\",\n\t\"reconnect_mcp_server\",\n\t\"list_plugins\",\n\t\"list_web_contributions\",\n\t\"list_commands\",\n\t\"run_command\",\n\t\"set_plugin_enabled\",\n\t\"create_attachment\",\n\t\"approve_tool\",\n\t\"respond_interaction\",\n] as const;\nexport type RpcMethod = (typeof RPC_METHODS)[number];\n\nexport interface RpcRequest {\n\treadonly version: typeof RPC_PROTOCOL_VERSION;\n\treadonly kind: \"request\";\n\treadonly id: string;\n\treadonly method: RpcMethod;\n\treadonly params: Record<string, unknown>;\n}\n\nexport interface RpcSessionState {\n\treadonly sessionId: string;\n\treadonly modelId: string;\n\treadonly isStreaming: boolean;\n\treadonly messageCount: number;\n\treadonly sequence?: number;\n}\n\n/** Metadata for an opaque attachment handle kept only by its live RPC actor. */\nexport interface RpcAttachmentInfo {\n\treadonly id: string;\n\treadonly name: string;\n\treadonly contentType: \"image/png\" | \"image/jpeg\" | \"image/webp\" | \"image/gif\";\n\treadonly bytes: number;\n}\n\nexport interface RpcCapabilities {\n\treadonly methods: readonly RpcMethod[];\n\treadonly events: readonly RpcExtendedEventName[];\n\treadonly eventBufferSize: number;\n}\n\nexport type RpcExtendedEventName =\n\t| \"sequence\"\n\t| \"operation_update\"\n\t| \"snapshot_required\"\n\t| \"session_changed\"\n\t| \"tool_approval\"\n\t| \"interaction_request\"\n\t| \"product_audit\"\n\t| \"projection\";\n\nexport interface RpcProjectionEvent {\n\treadonly type: \"projection\";\n\treadonly namespace: string;\n\treadonly projectionName: string;\n\treadonly version: number;\n\treadonly state: unknown;\n}\n\nexport interface RpcProductState {\n\treadonly projectTrusted: boolean;\n}\n\nexport interface RpcProviderSummary {\n\treadonly id: string;\n\treadonly name: string;\n\treadonly models: readonly {\n\t\treadonly id: string;\n\t\treadonly name: string;\n\t\treadonly input: readonly string[];\n\t\t/** Omitted when the model does not expose selectable reasoning levels. */\n\t\treadonly reasoningEfforts?: readonly (\"low\" | \"medium\" | \"high\" | \"max\")[];\n\t}[];\n\treadonly configured: boolean;\n}\n\nexport interface RpcSettingsSnapshot {\n\treadonly providers: readonly (RpcProviderSummary & {\n\t\treadonly api: string;\n\t\treadonly baseUrl?: string;\n\t\treadonly apiKeySource: \"environment\" | \"settings\" | \"missing\";\n\t})[];\n\treadonly defaults: { readonly providerId?: string; readonly modelId?: string };\n\treadonly runtime: { readonly providerId: string; readonly modelId: string; readonly thinkingLevel?: string };\n\treadonly locale?: \"en\" | \"zh-CN\";\n\treadonly permissionMode: \"ask\" | \"allow\" | \"deny\";\n\treadonly sources: Readonly<Record<string, \"environment\" | \"settings\" | \"default\" | \"runtime\">>;\n}\n\nexport interface RpcContextFileInfo {\n\treadonly path: string;\n\treadonly scope: string;\n\treadonly bytes: number;\n}\n\n/** A user-invocable command projected from the active composition or Skill catalog. */\nexport interface RpcCommandInfo {\n\treadonly name: string;\n\treadonly description: string;\n\treadonly kind: \"command\" | \"skill\";\n}\n\n/** A WebUI operation requested by a registered command. */\nexport interface RpcCommandAction {\n\treadonly command: string;\n\treadonly args: string;\n}\n\nexport interface RpcMcpServerInfo {\n\treadonly id: string;\n\treadonly scope?: string;\n\treadonly state: \"configured\" | \"connected\" | \"failed\" | \"disconnected\";\n\treadonly tools: number;\n\treadonly resources: number;\n\treadonly prompts: number;\n\treadonly diagnostic?: string;\n}\n\nexport type OperationStatus = \"queued\" | \"running\" | \"completed\" | \"failed\" | \"cancelled\" | \"crashed\";\nexport interface OperationState {\n\treadonly requestId: string;\n\treadonly kind: RpcMethod;\n\treadonly status: OperationStatus;\n\treadonly sessionId?: string;\n\treadonly message?: AssistantMessage;\n\treadonly error?: { readonly code: RpcErrorCode; readonly message: string };\n}\n\n/** Method-specific result fields are validated at the wire boundary. */\nexport type RpcSuccessResult = { readonly method: RpcMethod; readonly [key: string]: unknown };\n\nexport type RpcErrorCode =\n\t| \"PARSE_ERROR\"\n\t| \"INVALID_REQUEST\"\n\t| \"UNSUPPORTED_VERSION\"\n\t| \"METHOD_NOT_FOUND\"\n\t| \"INVALID_PARAMS\"\n\t| \"BUSY\"\n\t| \"NOT_FOUND\"\n\t| \"CANCELLED\"\n\t| \"DISPOSED\"\n\t| \"SESSION_IN_USE\"\n\t| \"INVALID_WORKSPACE\"\n\t| \"UNAUTHORIZED\"\n\t| \"INTERNAL_ERROR\"\n\t| \"PROCESS_EXIT\"\n\t| \"INTERACTION_UNAVAILABLE\";\n\nconst RPC_ERROR_CODES: ReadonlySet<RpcErrorCode> = new Set([\n\t\"PARSE_ERROR\",\n\t\"INVALID_REQUEST\",\n\t\"UNSUPPORTED_VERSION\",\n\t\"METHOD_NOT_FOUND\",\n\t\"INVALID_PARAMS\",\n\t\"BUSY\",\n\t\"NOT_FOUND\",\n\t\"CANCELLED\",\n\t\"DISPOSED\",\n\t\"SESSION_IN_USE\",\n\t\"INVALID_WORKSPACE\",\n\t\"UNAUTHORIZED\",\n\t\"INTERNAL_ERROR\",\n\t\"PROCESS_EXIT\",\n\t\"INTERACTION_UNAVAILABLE\",\n]);\nconst LEGACY_EVENT_TYPES: ReadonlySet<AgentSessionEvent[\"type\"]> = new Set([\n\t\"agent_start\",\n\t\"turn_start\",\n\t\"message_start\",\n\t\"message_update\",\n\t\"message_end\",\n\t\"turn_end\",\n\t\"tool_execution_start\",\n\t\"tool_execution_end\",\n\t\"agent_end\",\n\t\"compaction_start\",\n\t\"compaction_end\",\n\t\"queue_update\",\n\t\"tree_navigated\",\n\t\"usage_update\",\n]);\nconst EXTENDED_EVENT_TYPES = new Set([\n\t\"snapshot_required\",\n\t\"operation_update\",\n\t\"session_changed\",\n\t\"tool_approval\",\n\t\"interaction_request\",\n\t\"product_audit\",\n\t\"projection\",\n]);\nconst EXTENDED_EVENT_NAMES: ReadonlySet<RpcExtendedEventName> = new Set([\n\t\"sequence\",\n\t\"operation_update\",\n\t\"snapshot_required\",\n\t\"session_changed\",\n\t\"tool_approval\",\n\t\"interaction_request\",\n\t\"product_audit\",\n\t\"projection\",\n]);\nconst ASSISTANT_STOP_REASONS = new Set([\"stop\", \"length\", \"tool_use\", \"error\", \"aborted\"]);\n\nexport interface RpcSuccessResponse {\n\treadonly version: typeof RPC_PROTOCOL_VERSION;\n\treadonly kind: \"response\";\n\treadonly id: string;\n\treadonly ok: true;\n\treadonly result: RpcSuccessResult;\n}\nexport interface RpcErrorResponse {\n\treadonly version: typeof RPC_PROTOCOL_VERSION;\n\treadonly kind: \"response\";\n\treadonly id?: string;\n\treadonly ok: false;\n\treadonly error: { readonly code: RpcErrorCode; readonly message: string };\n}\nexport interface RpcEventRecord {\n\treadonly version: typeof RPC_PROTOCOL_VERSION;\n\treadonly kind: \"event\";\n\treadonly requestId: string;\n\treadonly event:\n\t\t| AgentSessionEvent\n\t\t| {\n\t\t\t\treadonly type: \"product_audit\";\n\t\t\t\treadonly action:\n\t\t\t\t\t| \"login\"\n\t\t\t\t\t| \"logout\"\n\t\t\t\t\t| \"set_project_trust\"\n\t\t\t\t\t| \"configure_mcp_server\"\n\t\t\t\t\t| \"remove_mcp_server\"\n\t\t\t\t\t| \"reconnect_mcp_server\";\n\t\t\t\treadonly target?: string;\n\t\t\t\treadonly projectTrusted?: boolean;\n\t\t }\n\t\t| {\n\t\t\t\treadonly type:\n\t\t\t\t\t| \"snapshot_required\"\n\t\t\t\t\t| \"operation_update\"\n\t\t\t\t\t| \"session_changed\"\n\t\t\t\t\t| \"tool_approval\"\n\t\t\t\t\t| \"interaction_request\";\n\t\t\t\treadonly [key: string]: unknown;\n\t\t }\n\t\t| RpcProjectionEvent;\n\treadonly sessionId?: string;\n\treadonly sequence?: number;\n}\nexport type RpcResponse = RpcSuccessResponse | RpcErrorResponse;\nexport type RpcServerMessage = RpcResponse | RpcEventRecord;\n\nexport class RpcProtocolError extends Error {\n\treadonly code: RpcErrorCode;\n\treadonly requestId?: string;\n\n\tconstructor(code: RpcErrorCode, message: string, requestId?: string) {\n\t\tsuper(message);\n\t\tthis.name = \"RpcProtocolError\";\n\t\tthis.code = code;\n\t\tthis.requestId = requestId;\n\t}\n}\n\nfunction objectRecord(value: unknown): Record<string, unknown> | undefined {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: undefined;\n}\nfunction requiredId(value: unknown, field: string, requestId?: string): string {\n\tif (typeof value !== \"string\" || value.length === 0 || value.length > RPC_MAX_ID_LENGTH)\n\t\tthrow new RpcProtocolError(\n\t\t\t\"INVALID_REQUEST\",\n\t\t\t`${field} must be a non-empty string of at most ${RPC_MAX_ID_LENGTH} characters.`,\n\t\t\trequestId,\n\t\t);\n\treturn value;\n}\nfunction parseJsonObject(line: string): Record<string, unknown> {\n\ttry {\n\t\tconst result = objectRecord(JSON.parse(line));\n\t\tif (!result) throw new RpcProtocolError(\"INVALID_REQUEST\", \"RPC input must be a JSON object.\");\n\t\treturn result;\n\t} catch (cause) {\n\t\tif (cause instanceof RpcProtocolError) throw cause;\n\t\tthrow new RpcProtocolError(\"PARSE_ERROR\", \"RPC input must be valid JSON.\");\n\t}\n}\nfunction assertVersion(record: Record<string, unknown>, requestId?: string): void {\n\tif (record.version !== RPC_PROTOCOL_VERSION)\n\t\tthrow new RpcProtocolError(\n\t\t\t\"UNSUPPORTED_VERSION\",\n\t\t\t`Unsupported RPC protocol version; expected ${RPC_PROTOCOL_VERSION}.`,\n\t\t\trequestId,\n\t\t);\n}\nfunction stringParam(params: Record<string, unknown>, name: string, id: string, optional = false): void {\n\tconst value = params[name];\n\tif (optional && value === undefined) return;\n\tif (typeof value !== \"string\" || value.length === 0 || value.length > RPC_MAX_PROMPT_LENGTH)\n\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", `${name} must be a non-empty string.`, id);\n}\nfunction booleanParam(params: Record<string, unknown>, name: string, id: string): void {\n\tif (typeof params[name] !== \"boolean\") throw new RpcProtocolError(\"INVALID_PARAMS\", `${name} must be a boolean.`, id);\n}\nfunction attachmentIdsParam(params: Record<string, unknown>, id: string): void {\n\tif (params.attachmentIds === undefined) return;\n\tif (\n\t\t!Array.isArray(params.attachmentIds) ||\n\t\tparams.attachmentIds.length > RPC_MAX_ATTACHMENTS_PER_REQUEST ||\n\t\t!params.attachmentIds.every(\n\t\t\t(value) => typeof value === \"string\" && value.length > 0 && value.length <= RPC_MAX_ID_LENGTH,\n\t\t)\n\t)\n\t\tthrow new RpcProtocolError(\n\t\t\t\"INVALID_PARAMS\",\n\t\t\t`attachmentIds must contain at most ${RPC_MAX_ATTACHMENTS_PER_REQUEST} attachment IDs.`,\n\t\t\tid,\n\t\t);\n}\nfunction attachmentDataParam(params: Record<string, unknown>, id: string): void {\n\tconst data = params.data;\n\tif (typeof data !== \"string\" || data.length === 0 || data.length > RPC_MAX_ATTACHMENT_BASE64_LENGTH)\n\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"Attachment data exceeds the permitted size.\", id);\n}\n\n/** Parses every public v1 method before any dispatcher or transport observes it. */\nexport function parseRpcRequest(line: string): RpcRequest {\n\tconst record = parseJsonObject(line);\n\tconst candidateId = typeof record.id === \"string\" ? record.id : undefined;\n\tassertVersion(record, candidateId);\n\tif (record.kind !== \"request\")\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", 'RPC request kind must be \"request\".', candidateId);\n\tconst id = requiredId(record.id, \"id\", candidateId);\n\tconst params = objectRecord(record.params);\n\tif (!params) throw new RpcProtocolError(\"INVALID_PARAMS\", \"RPC params must be an object.\", id);\n\tif (typeof record.method !== \"string\" || !RPC_METHODS.includes(record.method as RpcMethod))\n\t\tthrow new RpcProtocolError(\"METHOD_NOT_FOUND\", \"Unknown RPC method.\", id);\n\tconst method = record.method as RpcMethod;\n\tswitch (method) {\n\t\tcase \"prompt\":\n\t\tcase \"steer\":\n\t\t\tstringParam(params, \"message\", id);\n\t\t\tattachmentIdsParam(params, id);\n\t\t\tbreak;\n\t\tcase \"cancel\":\n\t\tcase \"get_operation\":\n\t\tcase \"open_session\":\n\t\tcase \"inspect_session\":\n\t\tcase \"rename_session\":\n\t\tcase \"delete_session\":\n\t\tcase \"navigate_tree\":\n\t\tcase \"set_model\":\n\t\tcase \"logout\":\n\t\tcase \"reconnect_mcp_server\":\n\t\t\tstringParam(\n\t\t\t\tparams,\n\t\t\t\tmethod === \"cancel\" || method === \"get_operation\"\n\t\t\t\t\t? \"requestId\"\n\t\t\t\t\t: method === \"open_session\"\n\t\t\t\t\t\t? \"sessionId\"\n\t\t\t\t\t\t: method === \"inspect_session\" || method === \"rename_session\" || method === \"delete_session\"\n\t\t\t\t\t\t\t? \"sessionId\"\n\t\t\t\t\t\t\t: method === \"navigate_tree\"\n\t\t\t\t\t\t\t\t? \"entryId\"\n\t\t\t\t\t\t\t\t: method === \"set_model\"\n\t\t\t\t\t\t\t\t\t? \"modelId\"\n\t\t\t\t\t\t\t\t\t: method === \"logout\"\n\t\t\t\t\t\t\t\t\t\t? \"providerId\"\n\t\t\t\t\t\t\t\t\t\t: \"serverId\",\n\t\t\t\tid,\n\t\t\t);\n\t\t\tif (method === \"rename_session\") stringParam(params, \"label\", id);\n\t\t\tif (method === \"delete_session\") stringParam(params, \"confirmation\", id);\n\t\t\tbreak;\n\t\tcase \"branch_session\":\n\t\t\tif (params.sessionId !== undefined) stringParam(params, \"sessionId\", id, true);\n\t\t\tif (params.entryId !== undefined) stringParam(params, \"entryId\", id, true);\n\t\t\tbreak;\n\t\tcase \"set_runtime\":\n\t\t\tstringParam(params, \"providerId\", id);\n\t\t\tstringParam(params, \"modelId\", id);\n\t\t\tbreak;\n\t\tcase \"run_command\":\n\t\t\tstringParam(params, \"name\", id);\n\t\t\tif (!/^[a-z][a-z0-9-]*(?::[a-z][a-z0-9-]*)?$/.test(params.name as string))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"run_command.name is invalid.\", id);\n\t\t\tif (params.args !== undefined && (typeof params.args !== \"string\" || params.args.length > RPC_MAX_PROMPT_LENGTH))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"args must be a string of at most 1,000,000 characters.\", id);\n\t\t\tbreak;\n\t\tcase \"set_default_provider\":\n\t\tcase \"set_default_model\":\n\t\tcase \"set_locale\":\n\t\tcase \"set_permission_mode\":\n\t\t\tstringParam(\n\t\t\t\tparams,\n\t\t\t\tmethod === \"set_default_provider\"\n\t\t\t\t\t? \"providerId\"\n\t\t\t\t\t: method === \"set_default_model\"\n\t\t\t\t\t\t? \"modelId\"\n\t\t\t\t\t\t: method === \"set_locale\"\n\t\t\t\t\t\t\t? \"locale\"\n\t\t\t\t\t\t\t: \"permissionMode\",\n\t\t\t\tid,\n\t\t\t);\n\t\t\tif (method === \"set_locale\" && params.locale !== \"en\" && params.locale !== \"zh-CN\")\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"locale must be en or zh-CN.\", id);\n\t\t\tif (\n\t\t\t\tmethod === \"set_permission_mode\" &&\n\t\t\t\tparams.permissionMode !== \"ask\" &&\n\t\t\t\tparams.permissionMode !== \"allow\" &&\n\t\t\t\tparams.permissionMode !== \"deny\"\n\t\t\t)\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"permissionMode must be ask, allow, or deny.\", id);\n\t\t\tbreak;\n\t\tcase \"configure_custom_provider\":\n\t\t\tfor (const name of [\"api\", \"baseUrl\", \"apiKey\", \"modelId\"]) stringParam(params, name, id);\n\t\t\tif (![\"openai-responses\", \"openai-chat-completions\", \"anthropic-messages\"].includes(params.api as string))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"Unsupported custom Provider API.\", id);\n\t\t\tbreak;\n\t\tcase \"set_thinking_level\":\n\t\t\tif (\n\t\t\t\tparams.level !== undefined &&\n\t\t\t\tparams.level !== \"low\" &&\n\t\t\t\tparams.level !== \"medium\" &&\n\t\t\t\tparams.level !== \"high\" &&\n\t\t\t\tparams.level !== \"max\"\n\t\t\t)\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"set_thinking_level.level must be a valid thinking level.\", id);\n\t\t\tbreak;\n\t\tcase \"retry\":\n\t\t\tstringParam(params, \"targetRequestId\", id);\n\t\t\tbreak;\n\t\tcase \"login\":\n\t\t\tstringParam(params, \"providerId\", id);\n\t\t\tstringParam(params, \"apiKey\", id);\n\t\t\tif (params.modelId !== undefined) stringParam(params, \"modelId\", id, true);\n\t\t\tif (params.api !== undefined) stringParam(params, \"api\", id, true);\n\t\t\tbreak;\n\t\tcase \"configure_mcp_server\":\n\t\t\tstringParam(params, \"serverId\", id);\n\t\t\tstringParam(params, \"scope\", id);\n\t\t\tif (!objectRecord(params.config)) throw new RpcProtocolError(\"INVALID_PARAMS\", \"config must be an object.\", id);\n\t\t\tbreak;\n\t\tcase \"remove_mcp_server\":\n\t\t\tstringParam(params, \"serverId\", id);\n\t\t\tif (params.scope !== undefined) stringParam(params, \"scope\", id, true);\n\t\t\tbreak;\n\t\tcase \"set_plugin_enabled\":\n\t\t\tstringParam(params, \"pluginId\", id);\n\t\t\tbooleanParam(params, \"enabled\", id);\n\t\t\tbreak;\n\t\tcase \"set_compaction_enabled\":\n\t\tcase \"set_project_trust\":\n\t\t\tbooleanParam(params, method === \"set_compaction_enabled\" ? \"enabled\" : \"trusted\", id);\n\t\t\tbreak;\n\t\tcase \"get_capabilities\":\n\t\t\tif (\n\t\t\t\tparams.events !== undefined &&\n\t\t\t\t(!Array.isArray(params.events) || !params.events.every((item) => typeof item === \"string\"))\n\t\t\t)\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"get_capabilities.events must be a string array.\", id);\n\t\t\tbreak;\n\t\tcase \"resume_events\":\n\t\t\tif (\n\t\t\t\tparams.lastSequence !== undefined &&\n\t\t\t\t(!Number.isSafeInteger(params.lastSequence) || (params.lastSequence as number) < 0)\n\t\t\t)\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"resume_events.lastSequence must be a non-negative integer.\", id);\n\t\t\tbreak;\n\t\tcase \"create_attachment\":\n\t\t\tstringParam(params, \"name\", id);\n\t\t\tstringParam(params, \"contentType\", id);\n\t\t\tattachmentDataParam(params, id);\n\t\t\tif (![\"image/png\", \"image/jpeg\", \"image/webp\", \"image/gif\"].includes(params.contentType as string))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"Attachment contentType is unsupported.\", id);\n\t\t\tbreak;\n\t\tcase \"get_transcript\":\n\t\t\tif (params.pageToken !== undefined) stringParam(params, \"pageToken\", id, true);\n\t\t\tif (\n\t\t\t\tparams.pageSize !== undefined &&\n\t\t\t\t(!Number.isSafeInteger(params.pageSize) || (params.pageSize as number) < 1 || (params.pageSize as number) > 200)\n\t\t\t)\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"pageSize must be an integer between 1 and 200.\", id);\n\t\t\tif (\n\t\t\t\tparams.maxBytes !== undefined &&\n\t\t\t\t(!Number.isSafeInteger(params.maxBytes) ||\n\t\t\t\t\t(params.maxBytes as number) < 1024 ||\n\t\t\t\t\t(params.maxBytes as number) > RPC_MAX_TRANSCRIPT_BYTES)\n\t\t\t)\n\t\t\t\tthrow new RpcProtocolError(\n\t\t\t\t\t\"INVALID_PARAMS\",\n\t\t\t\t\t`maxBytes must be between 1024 and ${RPC_MAX_TRANSCRIPT_BYTES}.`,\n\t\t\t\t\tid,\n\t\t\t\t);\n\t\t\tbreak;\n\t\tcase \"approve_tool\":\n\t\t\tstringParam(params, \"approvalId\", id);\n\t\t\tbooleanParam(params, \"approved\", id);\n\t\t\tbreak;\n\t\tcase \"respond_interaction\":\n\t\t\tstringParam(params, \"requestId\", id);\n\t\t\tif (typeof params.status !== \"string\" || ![\"answered\", \"cancelled\", \"timeout\"].includes(params.status))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"respond_interaction.status is invalid.\", id);\n\t\t\tif (params.approved !== undefined && typeof params.approved !== \"boolean\")\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_PARAMS\", \"respond_interaction.approved must be boolean.\", id);\n\t\t\tif (params.value !== undefined) stringParam(params, \"value\", id, true);\n\t\t\tif (params.feedback !== undefined) stringParam(params, \"feedback\", id, true);\n\t\t\tbreak;\n\t}\n\treturn { version: RPC_PROTOCOL_VERSION, kind: \"request\", id, method, params };\n}\n\nexport function parseRpcServerMessage(line: string): RpcServerMessage {\n\tconst record = parseJsonObject(line);\n\tassertVersion(record);\n\tif (record.kind === \"event\") {\n\t\trequiredId(record.requestId, \"requestId\");\n\t\tconst event = objectRecord(record.event);\n\t\tconst type = event?.type;\n\t\tif (\n\t\t\ttypeof type !== \"string\" ||\n\t\t\t(!LEGACY_EVENT_TYPES.has(type as AgentSessionEvent[\"type\"]) && !EXTENDED_EVENT_TYPES.has(type))\n\t\t)\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC event must contain a typed event object.\");\n\t\tif (!event) throw new RpcProtocolError(\"INVALID_REQUEST\", \"RPC event must contain a typed event object.\");\n\t\tif (record.sequence !== undefined && (!Number.isSafeInteger(record.sequence) || (record.sequence as number) < 0))\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC event sequence is invalid.\");\n\t\tassertEvent(event, type);\n\t\treturn record as unknown as RpcEventRecord;\n\t}\n\tif (record.kind !== \"response\")\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", 'RPC server message kind must be \"response\" or \"event\".');\n\tif (record.ok === false) {\n\t\tconst error = objectRecord(record.error);\n\t\tif (\n\t\t\t!error ||\n\t\t\ttypeof error.code !== \"string\" ||\n\t\t\t!RPC_ERROR_CODES.has(error.code as RpcErrorCode) ||\n\t\t\ttypeof error.message !== \"string\"\n\t\t)\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC error response has an invalid error object.\");\n\t\tif (record.id !== undefined) requiredId(record.id, \"id\");\n\t\treturn record as unknown as RpcErrorResponse;\n\t}\n\tif (record.ok !== true) throw new RpcProtocolError(\"INVALID_REQUEST\", \"RPC response ok must be a boolean.\");\n\trequiredId(record.id, \"id\");\n\tconst result = objectRecord(record.result);\n\tif (!result || typeof result.method !== \"string\" || !RPC_METHODS.includes(result.method as RpcMethod))\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC success response has an unknown method.\");\n\tassertSuccessResult(result);\n\treturn record as unknown as RpcSuccessResponse;\n}\nfunction assertSuccessResult(result: Record<string, unknown>): void {\n\tswitch (result.method as RpcMethod) {\n\t\tcase \"prompt\":\n\t\tcase \"retry\":\n\t\t\tassertAssistantMessage(result.message);\n\t\t\treturn;\n\t\tcase \"cancel\":\n\t\t\tif (typeof result.cancelled !== \"boolean\")\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC cancel result is invalid.\");\n\t\t\treturn;\n\t\tcase \"get_state\":\n\t\t\tassertState(result.state);\n\t\t\treturn;\n\t\tcase \"get_capabilities\":\n\t\t\tassertCapabilities(result);\n\t\t\treturn;\n\t\tcase \"resume_events\":\n\t\t\tif (typeof result.snapshotRequired !== \"boolean\")\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC resume_events result is invalid.\");\n\t\t\treturn;\n\t\tcase \"get_operation\":\n\t\t\tassertOperationState(result.operation);\n\t\t\treturn;\n\t\tcase \"create_attachment\":\n\t\t\tassertAttachmentInfo(result.attachment);\n\t\t\treturn;\n\t\tcase \"get_product_state\":\n\t\t\tassertProductState(result.state);\n\t\t\treturn;\n\t\tcase \"get_project_trust\":\n\t\t\tif (typeof result.trusted !== \"boolean\")\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC get_project_trust result is invalid.\");\n\t\t\treturn;\n\t\tcase \"list_sessions\":\n\t\t\tif (!Array.isArray(result.sessions))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC list_sessions result is invalid.\");\n\t\t\tfor (const session of result.sessions) assertSessionInfo(session);\n\t\t\treturn;\n\t\tcase \"new_session\":\n\t\tcase \"open_session\":\n\t\tcase \"rename_session\":\n\t\tcase \"branch_session\":\n\t\t\tassertSessionInfo(result.session);\n\t\t\treturn;\n\t\tcase \"inspect_session\":\n\t\t\tif (!objectRecord(result.snapshot))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC Session snapshot is invalid.\");\n\t\t\treturn;\n\t\tcase \"list_providers\":\n\t\t\tif (!Array.isArray(result.providers))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC providers result is invalid.\");\n\t\t\treturn;\n\t\tcase \"list_context_files\":\n\t\t\tif (!Array.isArray(result.files))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC context files result is invalid.\");\n\t\t\treturn;\n\t\tcase \"list_mcp_servers\":\n\t\t\tif (!Array.isArray(result.servers)) throw new RpcProtocolError(\"INVALID_REQUEST\", \"RPC MCP result is invalid.\");\n\t\t\treturn;\n\t\tcase \"list_web_contributions\":\n\t\t\t{\n\t\t\t\tconst manifest = objectRecord(result.manifest);\n\t\t\t\tif (!manifest || !validateWebManifest(manifest))\n\t\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC Web contribution manifest is invalid.\");\n\t\t\t}\n\t\t\treturn;\n\t\tcase \"list_commands\":\n\t\t\tif (!Array.isArray(result.commands))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC commands result is invalid.\");\n\t\t\tfor (const command of result.commands) assertCommandInfo(command);\n\t\t\treturn;\n\t\tcase \"run_command\":\n\t\t\tif (typeof result.command !== \"string\" || !result.command)\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC command result is invalid.\");\n\t\t\tif (result.action !== undefined) assertCommandAction(result.action);\n\t\t\treturn;\n\t\tcase \"configure_mcp_server\":\n\t\tcase \"reconnect_mcp_server\":\n\t\t\tif (!objectRecord(result.server)) throw new RpcProtocolError(\"INVALID_REQUEST\", \"RPC MCP result is invalid.\");\n\t\t\treturn;\n\t\tcase \"login\":\n\t\t\tif (!objectRecord(result.provider)) throw new RpcProtocolError(\"INVALID_REQUEST\", \"RPC login result is invalid.\");\n\t\t\treturn;\n\t\tcase \"set_project_trust\":\n\t\t\tif (typeof result.trusted !== \"boolean\")\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC trust result is invalid.\");\n\t\t\treturn;\n\t\tcase \"logout\":\n\t\tcase \"remove_mcp_server\":\n\t\t\treturn;\n\t\tcase \"get_settings\":\n\t\t\tif (!objectRecord(result.settings))\n\t\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC settings result is invalid.\");\n\t\t\treturn;\n\t\tcase \"set_default_provider\":\n\t\tcase \"set_default_model\":\n\t\tcase \"set_locale\":\n\t\tcase \"set_permission_mode\":\n\t\tcase \"configure_custom_provider\":\n\t\tcase \"respond_interaction\":\n\t\t\treturn;\n\t}\n}\nfunction assertCapabilities(result: Record<string, unknown>): void {\n\tif (\n\t\t!Array.isArray(result.methods) ||\n\t\t!result.methods.every((method) => typeof method === \"string\" && RPC_METHODS.includes(method as RpcMethod)) ||\n\t\t!Array.isArray(result.events) ||\n\t\t!result.events.every(\n\t\t\t(event) => typeof event === \"string\" && EXTENDED_EVENT_NAMES.has(event as RpcExtendedEventName),\n\t\t) ||\n\t\t!Number.isSafeInteger(result.eventBufferSize) ||\n\t\t(result.eventBufferSize as number) < 0\n\t)\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC get_capabilities result is invalid.\");\n}\nfunction assertSessionInfo(value: unknown): void {\n\tconst session = objectRecord(value);\n\tif (!session || typeof session.id !== \"string\" || !session.id || typeof session.label !== \"string\")\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC Session result is invalid.\");\n\tif (session.modifiedAt !== undefined && !Number.isFinite(session.modifiedAt))\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC Session modifiedAt is invalid.\");\n}\nfunction assertCommandInfo(value: unknown): void {\n\tconst command = objectRecord(value);\n\tif (\n\t\t!command ||\n\t\ttypeof command.name !== \"string\" ||\n\t\t!command.name ||\n\t\ttypeof command.description !== \"string\" ||\n\t\t(command.kind !== \"command\" && command.kind !== \"skill\")\n\t)\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC command info is invalid.\");\n}\nfunction assertCommandAction(value: unknown): void {\n\tconst action = objectRecord(value);\n\tif (!action || typeof action.command !== \"string\" || !action.command || typeof action.args !== \"string\")\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC command action is invalid.\");\n}\nfunction assertOperationState(value: unknown): void {\n\tconst operation = objectRecord(value);\n\tif (\n\t\t!operation ||\n\t\ttypeof operation.requestId !== \"string\" ||\n\t\t!operation.requestId ||\n\t\ttypeof operation.kind !== \"string\" ||\n\t\t!RPC_METHODS.includes(operation.kind as RpcMethod) ||\n\t\ttypeof operation.status !== \"string\" ||\n\t\t![\"queued\", \"running\", \"completed\", \"failed\", \"cancelled\", \"crashed\"].includes(operation.status)\n\t)\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC operation state is invalid.\");\n\tif (operation.sessionId !== undefined && typeof operation.sessionId !== \"string\")\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC operation session ID is invalid.\");\n\tif (operation.message !== undefined) assertAssistantMessage(operation.message);\n\tif (operation.error !== undefined) assertError(operation.error);\n}\nfunction assertAttachmentInfo(value: unknown): void {\n\tconst attachment = objectRecord(value);\n\tif (\n\t\t!attachment ||\n\t\ttypeof attachment.id !== \"string\" ||\n\t\t!attachment.id ||\n\t\ttypeof attachment.name !== \"string\" ||\n\t\t!attachment.name ||\n\t\ttypeof attachment.contentType !== \"string\" ||\n\t\t![\"image/png\", \"image/jpeg\", \"image/webp\", \"image/gif\"].includes(attachment.contentType) ||\n\t\t!Number.isSafeInteger(attachment.bytes) ||\n\t\t(attachment.bytes as number) < 0\n\t)\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC attachment result is invalid.\");\n}\nfunction assertProductState(value: unknown): void {\n\tconst state = objectRecord(value);\n\tif (!state || typeof state.projectTrusted !== \"boolean\")\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC product state is invalid.\");\n}\nfunction assertError(value: unknown): void {\n\tconst error = objectRecord(value);\n\tif (\n\t\t!error ||\n\t\ttypeof error.code !== \"string\" ||\n\t\t!RPC_ERROR_CODES.has(error.code as RpcErrorCode) ||\n\t\ttypeof error.message !== \"string\"\n\t)\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC error result is invalid.\");\n}\nfunction assertEvent(event: Record<string, unknown>, type: string): void {\n\tif (type === \"operation_update\") {\n\t\tassertOperationState(event.operation);\n\t\treturn;\n\t}\n\tif (type === \"session_changed\") {\n\t\tif (event.session !== undefined) assertSessionInfo(event.session);\n\t\treturn;\n\t}\n\tif (type === \"snapshot_required\") return;\n\tif (type === \"tool_approval\") {\n\t\tif (typeof event.approvalId !== \"string\")\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC tool_approval event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"interaction_request\") {\n\t\tif (\n\t\t\ttypeof event.interactionRequestId !== \"string\" ||\n\t\t\ttypeof event.kind !== \"string\" ||\n\t\t\ttypeof event.prompt !== \"string\"\n\t\t)\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC interaction_request event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"product_audit\") {\n\t\tif (\n\t\t\ttypeof event.action !== \"string\" ||\n\t\t\t![\n\t\t\t\t\"login\",\n\t\t\t\t\"logout\",\n\t\t\t\t\"set_project_trust\",\n\t\t\t\t\"configure_mcp_server\",\n\t\t\t\t\"remove_mcp_server\",\n\t\t\t\t\"reconnect_mcp_server\",\n\t\t\t].includes(event.action) ||\n\t\t\t(event.target !== undefined && typeof event.target !== \"string\") ||\n\t\t\t(event.projectTrusted !== undefined && typeof event.projectTrusted !== \"boolean\")\n\t\t)\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC product_audit event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"projection\") {\n\t\tif (\n\t\t\ttypeof event.namespace !== \"string\" ||\n\t\t\ttypeof event.projectionName !== \"string\" ||\n\t\t\t!Number.isSafeInteger(event.version) ||\n\t\t\t(event.version as number) < 0 ||\n\t\t\t!(\"state\" in event)\n\t\t)\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC projection event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"tool_execution_start\") {\n\t\tif (typeof event.toolCallId !== \"string\" || typeof event.toolName !== \"string\" || !objectRecord(event.arguments))\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC tool event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"tool_execution_end\") {\n\t\tif (typeof event.toolCallId !== \"string\" || typeof event.toolName !== \"string\" || !objectRecord(event.result))\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC tool event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"message_start\" || type === \"message_end\") {\n\t\tif (!objectRecord(event.message)) throw new RpcProtocolError(\"INVALID_REQUEST\", \"RPC message event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"message_update\") {\n\t\tconst update = objectRecord(event.event);\n\t\tif (!update || typeof update.type !== \"string\")\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC message update event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"turn_end\") {\n\t\tif (!objectRecord(event.message) || !Array.isArray(event.toolResults))\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC turn event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"agent_end\") {\n\t\tif (!Array.isArray(event.messages)) throw new RpcProtocolError(\"INVALID_REQUEST\", \"RPC agent event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"compaction_start\") {\n\t\tif (event.reason !== \"threshold\" && event.reason !== \"manual\")\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC compaction event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"compaction_end\") {\n\t\tif (\n\t\t\t(event.reason !== \"threshold\" && event.reason !== \"manual\") ||\n\t\t\ttypeof event.success !== \"boolean\" ||\n\t\t\t(event.errorMessage !== undefined && typeof event.errorMessage !== \"string\")\n\t\t)\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC compaction event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"queue_update\") {\n\t\tif (!Array.isArray(event.steering) || !event.steering.every((item) => typeof item === \"string\"))\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC queue event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"tree_navigated\") {\n\t\tif (\n\t\t\ttypeof event.oldLeafId !== \"string\" ||\n\t\t\ttypeof event.newLeafId !== \"string\" ||\n\t\t\ttypeof event.selectedEntryId !== \"string\" ||\n\t\t\ttypeof event.restoredEditorText !== \"boolean\"\n\t\t)\n\t\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC tree event is invalid.\");\n\t\treturn;\n\t}\n\tif (type === \"usage_update\" && !objectRecord(event.usage)) {\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC usage event is invalid.\");\n\t}\n}\nfunction assertState(value: unknown): void {\n\tconst state = objectRecord(value);\n\tif (\n\t\t!state ||\n\t\ttypeof state.sessionId !== \"string\" ||\n\t\t!state.sessionId ||\n\t\ttypeof state.modelId !== \"string\" ||\n\t\t!state.modelId ||\n\t\ttypeof state.isStreaming !== \"boolean\" ||\n\t\t!Number.isInteger(state.messageCount) ||\n\t\t(state.messageCount as number) < 0\n\t)\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC get_state response has an invalid state.\");\n}\nfunction assertAssistantMessage(value: unknown): void {\n\tconst message = objectRecord(value);\n\tif (\n\t\t!message ||\n\t\tmessage.role !== \"assistant\" ||\n\t\t!Array.isArray(message.content) ||\n\t\t!message.content.every((content) => {\n\t\t\tconst block = objectRecord(content);\n\t\t\tif (!block || typeof block.type !== \"string\") return false;\n\t\t\tif (block.type === \"text\") return typeof block.text === \"string\";\n\t\t\tif (block.type === \"thinking\") return typeof block.thinking === \"string\";\n\t\t\tif (block.type === \"tool_call\")\n\t\t\t\treturn typeof block.id === \"string\" && typeof block.name === \"string\" && objectRecord(block.arguments);\n\t\t\tif (block.type !== \"image\" || typeof block.data !== \"string\" || typeof block.mimeType !== \"string\") return false;\n\t\t\tconst padding = block.data.endsWith(\"==\") ? 2 : block.data.endsWith(\"=\") ? 1 : 0;\n\t\t\tconst decodedBytes = Math.floor((block.data.length * 3) / 4) - padding;\n\t\t\treturn (\n\t\t\t\t/^image\\/[A-Za-z0-9.+-]+$/.test(block.mimeType) &&\n\t\t\t\tblock.data.length > 0 &&\n\t\t\t\tblock.data.length % 4 === 0 &&\n\t\t\t\t/^[A-Za-z0-9+/]*={0,2}$/.test(block.data) &&\n\t\t\t\tdecodedBytes > 0 &&\n\t\t\t\tdecodedBytes <= RPC_MAX_ASSISTANT_IMAGE_BYTES\n\t\t\t);\n\t\t}) ||\n\t\ttypeof message.provider !== \"string\" ||\n\t\ttypeof message.model !== \"string\" ||\n\t\t!Number.isFinite(message.timestamp) ||\n\t\ttypeof message.stopReason !== \"string\" ||\n\t\t!ASSISTANT_STOP_REASONS.has(message.stopReason)\n\t)\n\t\tthrow new RpcProtocolError(\"INVALID_REQUEST\", \"RPC prompt response has an invalid message.\");\n}\nexport function rpcErrorResponse(error: RpcProtocolError): RpcErrorResponse {\n\treturn {\n\t\tversion: RPC_PROTOCOL_VERSION,\n\t\tkind: \"response\",\n\t\t...(error.requestId === undefined ? {} : { id: error.requestId }),\n\t\tok: false,\n\t\terror: { code: error.code, message: error.message },\n\t};\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import type { Readable, Writable } from "node:stream";
2
+ import type { UserInteractionInput, UserInteractionResult } from "@di-code/plugin-sdk";
2
3
  import { type RpcDispatcherOptions } from "./dispatcher.ts";
3
4
  export type { RpcMethodCatalog, RpcSession } from "./dispatcher.ts";
4
5
  /** JSONL process adapter. Protocol dispatch belongs to RpcDispatcher and is transport independent. */
@@ -23,6 +24,10 @@ export declare class RpcServer {
23
24
  private writeChain;
24
25
  constructor(options: RpcServerOptions);
25
26
  finished(): Promise<void>;
27
+ /** Forwards a structured interaction request to the negotiated RPC client. */
28
+ requestInteraction(input: Omit<UserInteractionInput, "requestId"> & {
29
+ readonly requestId?: string;
30
+ }, signal?: AbortSignal): Promise<UserInteractionResult>;
26
31
  start(): void;
27
32
  stop(): void;
28
33
  shutdown(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/rpc/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAI3E,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEpE,sGAAsG;AACtG,MAAM,WAAW,gBAAiB,SAAQ,oBAAoB;IAC7D,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAC/B;AAMD,qBAAa,SAAS;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgB;IAChD,OAAO,CAAC,eAAe,CAAC,CAAa;IACrC,OAAO,CAAC,WAAW,CAAC,CAAa;IACjC,OAAO,CAAC,eAAe,CAAC,CAAgB;IACxC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAqB;gBAE3B,OAAO,EAAE,gBAAgB;IAWrC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAGzB,KAAK,IAAI,IAAI;IAUb,IAAI,IAAI,IAAI;IAGZ,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAYX,cAAc;IAU5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CASzB;IACF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAOxB;IACF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAG/B;IACF,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,UAAU;IAGlB,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,KAAK;CAKb"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/rpc/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAI3E,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEpE,sGAAsG;AACtG,MAAM,WAAW,gBAAiB,SAAQ,oBAAoB;IAC7D,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAC/B;AAMD,qBAAa,SAAS;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgB;IAChD,OAAO,CAAC,eAAe,CAAC,CAAa;IACrC,OAAO,CAAC,WAAW,CAAC,CAAa;IACjC,OAAO,CAAC,eAAe,CAAC,CAAgB;IACxC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAqB;gBAE3B,OAAO,EAAE,gBAAgB;IAWrC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAGzB,8EAA8E;IAC9E,kBAAkB,CACjB,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,GAAG;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,EAChF,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,qBAAqB,CAAC;IAGjC,KAAK,IAAI,IAAI;IAUb,IAAI,IAAI,IAAI;IAGZ,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAYX,cAAc;IAU5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CASzB;IACF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAOxB;IACF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAG/B;IACF,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,UAAU;IAGlB,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,KAAK;CAKb"}
@@ -31,6 +31,10 @@ export class RpcServer {
31
31
  finished() {
32
32
  return this.finishedPromise;
33
33
  }
34
+ /** Forwards a structured interaction request to the negotiated RPC client. */
35
+ requestInteraction(input, signal) {
36
+ return this.dispatcher.requestInteraction(input, signal);
37
+ }
34
38
  start() {
35
39
  if (this.started)
36
40
  throw new Error("RPC server is already started.");
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/rpc/server.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Readable, Writable } from \"node:stream\";\nimport { RpcDispatcher, type RpcDispatcherOptions } from \"./dispatcher.ts\";\nimport { JsonlLineDecoder, serializeJsonLine } from \"./jsonl.ts\";\nimport { parseRpcRequest, RpcProtocolError, type RpcServerMessage, rpcErrorResponse } from \"./protocol.ts\";\n\nexport type { RpcMethodCatalog, RpcSession } from \"./dispatcher.ts\";\n\n/** JSONL process adapter. Protocol dispatch belongs to RpcDispatcher and is transport independent. */\nexport interface RpcServerOptions extends RpcDispatcherOptions {\n\treadonly input: Readable;\n\treadonly output: Writable;\n\treadonly maxLineBytes?: number;\n}\n\nfunction errorFrom(cause: unknown): Error {\n\treturn cause instanceof Error ? cause : new Error(String(cause));\n}\n\nexport class RpcServer {\n\tprivate readonly input: Readable;\n\tprivate readonly output: Writable;\n\tprivate readonly onError: (error: Error) => void;\n\tprivate readonly decoder: JsonlLineDecoder;\n\tprivate readonly dispatcher: RpcDispatcher;\n\tprivate readonly requests = new Set<Promise<void>>();\n\tprivate readonly finishedPromise: Promise<void>;\n\tprivate resolveFinished?: () => void;\n\tprivate unsubscribe?: () => void;\n\tprivate shutdownPromise?: Promise<void>;\n\tprivate started = false;\n\tprivate shuttingDown = false;\n\tprivate writeChain = Promise.resolve();\n\n\tconstructor(options: RpcServerOptions) {\n\t\tthis.input = options.input;\n\t\tthis.output = options.output;\n\t\tthis.onError = options.onError ?? (() => undefined);\n\t\tthis.dispatcher = new RpcDispatcher(options);\n\t\tthis.decoder = new JsonlLineDecoder((line) => this.acceptLine(line), { maxLineBytes: options.maxLineBytes });\n\t\tthis.finishedPromise = new Promise((resolve) => {\n\t\t\tthis.resolveFinished = resolve;\n\t\t});\n\t}\n\n\tfinished(): Promise<void> {\n\t\treturn this.finishedPromise;\n\t}\n\tstart(): void {\n\t\tif (this.started) throw new Error(\"RPC server is already started.\");\n\t\tthis.started = true;\n\t\tthis.unsubscribe = this.dispatcher.subscribe((message) => {\n\t\t\tif (!this.shuttingDown) void this.write(message).catch(this.onError);\n\t\t});\n\t\tthis.input.on(\"data\", this.handleData);\n\t\tthis.input.once(\"end\", this.handleEnd);\n\t\tthis.input.once(\"error\", this.handleInputError);\n\t}\n\tstop(): void {\n\t\tvoid this.shutdown().catch(this.onError);\n\t}\n\tshutdown(): Promise<void> {\n\t\tif (this.shutdownPromise) return this.shutdownPromise;\n\t\tthis.shuttingDown = true;\n\t\tthis.started = false;\n\t\tthis.input.off(\"data\", this.handleData);\n\t\tthis.input.off(\"end\", this.handleEnd);\n\t\tthis.input.off(\"error\", this.handleInputError);\n\t\tthis.unsubscribe?.();\n\t\tthis.unsubscribe = undefined;\n\t\tthis.shutdownPromise = this.finishShutdown();\n\t\treturn this.shutdownPromise;\n\t}\n\tprivate async finishShutdown(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.dispatcher.dispose();\n\t\t\tawait Promise.allSettled([...this.requests]);\n\t\t\tawait this.flush();\n\t\t} finally {\n\t\t\tthis.resolveFinished?.();\n\t\t\tthis.resolveFinished = undefined;\n\t\t}\n\t}\n\tprivate readonly handleData = (chunk: string | Buffer): void => {\n\t\ttry {\n\t\t\tthis.decoder.push(chunk);\n\t\t} catch (cause) {\n\t\t\tconst error = errorFrom(cause);\n\t\t\tthis.onError(error);\n\t\t\tvoid this.writeError(undefined, \"INVALID_REQUEST\", error.message);\n\t\t\tthis.stop();\n\t\t}\n\t};\n\tprivate readonly handleEnd = (): void => {\n\t\ttry {\n\t\t\tthis.decoder.end();\n\t\t} catch (cause) {\n\t\t\tthis.onError(errorFrom(cause));\n\t\t}\n\t\tvoid this.shutdown().catch(this.onError);\n\t};\n\tprivate readonly handleInputError = (cause: Error): void => {\n\t\tthis.onError(cause);\n\t\tvoid this.shutdown().catch(this.onError);\n\t};\n\tprivate acceptLine(line: string): void {\n\t\tif (this.shuttingDown) return;\n\t\tlet request: import(\"./protocol.ts\").RpcRequest;\n\t\ttry {\n\t\t\trequest = parseRpcRequest(line);\n\t\t} catch (cause) {\n\t\t\tconst error =\n\t\t\t\tcause instanceof RpcProtocolError\n\t\t\t\t\t? cause\n\t\t\t\t\t: new RpcProtocolError(\"INVALID_REQUEST\", \"RPC request validation failed.\");\n\t\t\tvoid this.write(rpcErrorResponse(error)).catch(this.onError);\n\t\t\treturn;\n\t\t}\n\t\tconst work = this.dispatcher\n\t\t\t.dispatch(request)\n\t\t\t.then((response) => this.write(response))\n\t\t\t.catch((cause) => this.onError(errorFrom(cause)))\n\t\t\t.finally(() => this.requests.delete(work));\n\t\tthis.requests.add(work);\n\t}\n\tprivate writeError(id: string | undefined, code: \"INVALID_REQUEST\", message: string): Promise<void> {\n\t\treturn this.write({ version: 1, kind: \"response\", ...(id ? { id } : {}), ok: false, error: { code, message } });\n\t}\n\tprivate write(message: RpcServerMessage): Promise<void> {\n\t\tconst write = this.writeChain.then(\n\t\t\t() =>\n\t\t\t\tnew Promise<void>((resolve, reject) =>\n\t\t\t\t\tthis.output.write(serializeJsonLine(message), (error) => (error ? reject(error) : resolve())),\n\t\t\t\t),\n\t\t);\n\t\tthis.writeChain = write.catch(() => undefined);\n\t\treturn write;\n\t}\n\tprivate flush(): Promise<void> {\n\t\treturn this.writeChain.then(\n\t\t\t() => new Promise((resolve, reject) => this.output.write(\"\", (error) => (error ? reject(error) : resolve()))),\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/rpc/server.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Readable, Writable } from \"node:stream\";\nimport type { UserInteractionInput, UserInteractionResult } from \"@di-code/plugin-sdk\";\nimport { RpcDispatcher, type RpcDispatcherOptions } from \"./dispatcher.ts\";\nimport { JsonlLineDecoder, serializeJsonLine } from \"./jsonl.ts\";\nimport { parseRpcRequest, RpcProtocolError, type RpcServerMessage, rpcErrorResponse } from \"./protocol.ts\";\n\nexport type { RpcMethodCatalog, RpcSession } from \"./dispatcher.ts\";\n\n/** JSONL process adapter. Protocol dispatch belongs to RpcDispatcher and is transport independent. */\nexport interface RpcServerOptions extends RpcDispatcherOptions {\n\treadonly input: Readable;\n\treadonly output: Writable;\n\treadonly maxLineBytes?: number;\n}\n\nfunction errorFrom(cause: unknown): Error {\n\treturn cause instanceof Error ? cause : new Error(String(cause));\n}\n\nexport class RpcServer {\n\tprivate readonly input: Readable;\n\tprivate readonly output: Writable;\n\tprivate readonly onError: (error: Error) => void;\n\tprivate readonly decoder: JsonlLineDecoder;\n\tprivate readonly dispatcher: RpcDispatcher;\n\tprivate readonly requests = new Set<Promise<void>>();\n\tprivate readonly finishedPromise: Promise<void>;\n\tprivate resolveFinished?: () => void;\n\tprivate unsubscribe?: () => void;\n\tprivate shutdownPromise?: Promise<void>;\n\tprivate started = false;\n\tprivate shuttingDown = false;\n\tprivate writeChain = Promise.resolve();\n\n\tconstructor(options: RpcServerOptions) {\n\t\tthis.input = options.input;\n\t\tthis.output = options.output;\n\t\tthis.onError = options.onError ?? (() => undefined);\n\t\tthis.dispatcher = new RpcDispatcher(options);\n\t\tthis.decoder = new JsonlLineDecoder((line) => this.acceptLine(line), { maxLineBytes: options.maxLineBytes });\n\t\tthis.finishedPromise = new Promise((resolve) => {\n\t\t\tthis.resolveFinished = resolve;\n\t\t});\n\t}\n\n\tfinished(): Promise<void> {\n\t\treturn this.finishedPromise;\n\t}\n\t/** Forwards a structured interaction request to the negotiated RPC client. */\n\trequestInteraction(\n\t\tinput: Omit<UserInteractionInput, \"requestId\"> & { readonly requestId?: string },\n\t\tsignal?: AbortSignal,\n\t): Promise<UserInteractionResult> {\n\t\treturn this.dispatcher.requestInteraction(input, signal);\n\t}\n\tstart(): void {\n\t\tif (this.started) throw new Error(\"RPC server is already started.\");\n\t\tthis.started = true;\n\t\tthis.unsubscribe = this.dispatcher.subscribe((message) => {\n\t\t\tif (!this.shuttingDown) void this.write(message).catch(this.onError);\n\t\t});\n\t\tthis.input.on(\"data\", this.handleData);\n\t\tthis.input.once(\"end\", this.handleEnd);\n\t\tthis.input.once(\"error\", this.handleInputError);\n\t}\n\tstop(): void {\n\t\tvoid this.shutdown().catch(this.onError);\n\t}\n\tshutdown(): Promise<void> {\n\t\tif (this.shutdownPromise) return this.shutdownPromise;\n\t\tthis.shuttingDown = true;\n\t\tthis.started = false;\n\t\tthis.input.off(\"data\", this.handleData);\n\t\tthis.input.off(\"end\", this.handleEnd);\n\t\tthis.input.off(\"error\", this.handleInputError);\n\t\tthis.unsubscribe?.();\n\t\tthis.unsubscribe = undefined;\n\t\tthis.shutdownPromise = this.finishShutdown();\n\t\treturn this.shutdownPromise;\n\t}\n\tprivate async finishShutdown(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.dispatcher.dispose();\n\t\t\tawait Promise.allSettled([...this.requests]);\n\t\t\tawait this.flush();\n\t\t} finally {\n\t\t\tthis.resolveFinished?.();\n\t\t\tthis.resolveFinished = undefined;\n\t\t}\n\t}\n\tprivate readonly handleData = (chunk: string | Buffer): void => {\n\t\ttry {\n\t\t\tthis.decoder.push(chunk);\n\t\t} catch (cause) {\n\t\t\tconst error = errorFrom(cause);\n\t\t\tthis.onError(error);\n\t\t\tvoid this.writeError(undefined, \"INVALID_REQUEST\", error.message);\n\t\t\tthis.stop();\n\t\t}\n\t};\n\tprivate readonly handleEnd = (): void => {\n\t\ttry {\n\t\t\tthis.decoder.end();\n\t\t} catch (cause) {\n\t\t\tthis.onError(errorFrom(cause));\n\t\t}\n\t\tvoid this.shutdown().catch(this.onError);\n\t};\n\tprivate readonly handleInputError = (cause: Error): void => {\n\t\tthis.onError(cause);\n\t\tvoid this.shutdown().catch(this.onError);\n\t};\n\tprivate acceptLine(line: string): void {\n\t\tif (this.shuttingDown) return;\n\t\tlet request: import(\"./protocol.ts\").RpcRequest;\n\t\ttry {\n\t\t\trequest = parseRpcRequest(line);\n\t\t} catch (cause) {\n\t\t\tconst error =\n\t\t\t\tcause instanceof RpcProtocolError\n\t\t\t\t\t? cause\n\t\t\t\t\t: new RpcProtocolError(\"INVALID_REQUEST\", \"RPC request validation failed.\");\n\t\t\tvoid this.write(rpcErrorResponse(error)).catch(this.onError);\n\t\t\treturn;\n\t\t}\n\t\tconst work = this.dispatcher\n\t\t\t.dispatch(request)\n\t\t\t.then((response) => this.write(response))\n\t\t\t.catch((cause) => this.onError(errorFrom(cause)))\n\t\t\t.finally(() => this.requests.delete(work));\n\t\tthis.requests.add(work);\n\t}\n\tprivate writeError(id: string | undefined, code: \"INVALID_REQUEST\", message: string): Promise<void> {\n\t\treturn this.write({ version: 1, kind: \"response\", ...(id ? { id } : {}), ok: false, error: { code, message } });\n\t}\n\tprivate write(message: RpcServerMessage): Promise<void> {\n\t\tconst write = this.writeChain.then(\n\t\t\t() =>\n\t\t\t\tnew Promise<void>((resolve, reject) =>\n\t\t\t\t\tthis.output.write(serializeJsonLine(message), (error) => (error ? reject(error) : resolve())),\n\t\t\t\t),\n\t\t);\n\t\tthis.writeChain = write.catch(() => undefined);\n\t\treturn write;\n\t}\n\tprivate flush(): Promise<void> {\n\t\treturn this.writeChain.then(\n\t\t\t() => new Promise((resolve, reject) => this.output.write(\"\", (error) => (error ? reject(error) : resolve()))),\n\t\t);\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-server-entry.d.ts","sourceRoot":"","sources":["../src/rpc-server-entry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAOhE,OAAO,EAAE,KAAK,gBAAgB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE9E,qGAAqG;AACrG,eAAO,MAAM,UAAU,EAAG,CAAU,CAAC;AACrC,eAAO,MAAM,IAAI,eAAe,CAAC;AACjC,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAwD3C,CAAC"}
1
+ {"version":3,"file":"rpc-server-entry.d.ts","sourceRoot":"","sources":["../src/rpc-server-entry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAQhE,OAAO,EAAE,KAAK,gBAAgB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE9E,qGAAqG;AACrG,eAAO,MAAM,UAAU,EAAG,CAAU,CAAC;AACrC,eAAO,MAAM,IAAI,eAAe,CAAC;AACjC,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAoE3C,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { homedir } from "node:os";
2
2
  import { join } from "node:path";
3
3
  import { modeRegistryKey, rpcMethodRegistryKey, runtimeSelectionKey, workspaceCapabilityKey } from "@di-code/builtins";
4
+ import { createUserInteraction } from "@di-code/plugin-sdk";
4
5
  import { RpcServer } from "./rpc/server.js";
5
6
  import { rpcServerKey } from "./rpc/server-service.js";
6
7
  import { createProductHost } from "./runtime/product-host.js";
@@ -13,11 +14,23 @@ export const name = "rpc-server";
13
14
  export const version = "0.1.7";
14
15
  export const apply = async (context, _config, fiber) => {
15
16
  const selection = context.require(runtimeSelectionKey).selected();
17
+ let server;
18
+ const interaction = createUserInteraction({
19
+ request: async (input, signal) => {
20
+ if (!server)
21
+ throw new Error("RPC server is not ready.");
22
+ return await server.requestInteraction(input, signal);
23
+ },
24
+ });
16
25
  const session = await createSessionHost(context, {
17
26
  cwd: context.require(workspaceCapabilityKey).allowedRoot,
18
27
  agentDir: join(homedir(), ".di-code"),
19
28
  provider: selection.provider,
20
29
  model: selection.model,
30
+ planMode: {
31
+ section: "You are in plan mode. Explore and design before presenting the complete plan through exit_plan_mode.",
32
+ },
33
+ interaction,
21
34
  });
22
35
  const product = createProductHost({
23
36
  context,
@@ -47,7 +60,7 @@ export const apply = async (context, _config, fiber) => {
47
60
  });
48
61
  if (!session.state().activeSession)
49
62
  await session.createSession();
50
- const server = new RpcServer({
63
+ server = new RpcServer({
51
64
  session,
52
65
  methods: context.require(rpcMethodRegistryKey),
53
66
  productState: { projectTrusted: context.capabilities.trustedProject },
@@ -60,6 +73,7 @@ export const apply = async (context, _config, fiber) => {
60
73
  context.set(rpcServerKey, { shutdown: () => server.shutdown(), finished: () => server.finished() });
61
74
  fiber.addDisposer(async () => {
62
75
  await server.shutdown();
76
+ await interaction.dispose();
63
77
  await product.dispose();
64
78
  await session.dispose();
65
79
  });