subharness 0.0.4 → 0.0.5

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 (188) hide show
  1. package/README.md +36 -6
  2. package/dist/adapters/claude-process.d.ts +3 -0
  3. package/dist/adapters/claude-process.js +11 -1
  4. package/dist/adapters/claude-process.js.map +1 -1
  5. package/dist/adapters/claude-result.d.ts +2 -0
  6. package/dist/adapters/claude-result.js +22 -0
  7. package/dist/adapters/claude-result.js.map +1 -0
  8. package/dist/adapters/claude.js +30 -11
  9. package/dist/adapters/claude.js.map +1 -1
  10. package/dist/adapters/codex.js +4 -1
  11. package/dist/adapters/codex.js.map +1 -1
  12. package/dist/adapters/copilot-permissions.d.ts +26 -0
  13. package/dist/adapters/copilot-permissions.js +121 -0
  14. package/dist/adapters/copilot-permissions.js.map +1 -0
  15. package/dist/adapters/copilot-tools.d.ts +12 -0
  16. package/dist/adapters/copilot-tools.js +61 -0
  17. package/dist/adapters/copilot-tools.js.map +1 -0
  18. package/dist/adapters/copilot.d.ts +108 -0
  19. package/dist/adapters/copilot.js +819 -0
  20. package/dist/adapters/copilot.js.map +1 -0
  21. package/dist/adapters/cursor-cli-approvals.d.ts +2 -0
  22. package/dist/adapters/cursor-cli-approvals.js +83 -0
  23. package/dist/adapters/cursor-cli-approvals.js.map +1 -0
  24. package/dist/adapters/cursor-cli-model.d.ts +4 -0
  25. package/dist/adapters/cursor-cli-model.js +64 -0
  26. package/dist/adapters/cursor-cli-model.js.map +1 -0
  27. package/dist/adapters/cursor-cli-session.d.ts +32 -0
  28. package/dist/adapters/cursor-cli-session.js +316 -0
  29. package/dist/adapters/cursor-cli-session.js.map +1 -0
  30. package/dist/adapters/cursor-cli-tools.d.ts +20 -0
  31. package/dist/adapters/cursor-cli-tools.js +181 -0
  32. package/dist/adapters/cursor-cli-tools.js.map +1 -0
  33. package/dist/adapters/cursor-cli.d.ts +2 -0
  34. package/dist/adapters/cursor-cli.js +306 -0
  35. package/dist/adapters/cursor-cli.js.map +1 -0
  36. package/dist/adapters/cursor-model.d.ts +7 -0
  37. package/dist/adapters/cursor-model.js +67 -0
  38. package/dist/adapters/cursor-model.js.map +1 -0
  39. package/dist/adapters/cursor-rpc.d.ts +42 -0
  40. package/dist/adapters/cursor-rpc.js +271 -0
  41. package/dist/adapters/cursor-rpc.js.map +1 -0
  42. package/dist/adapters/cursor-session.d.ts +4 -0
  43. package/dist/adapters/cursor-session.js +327 -0
  44. package/dist/adapters/cursor-session.js.map +1 -0
  45. package/dist/adapters/cursor-startup.d.ts +16 -0
  46. package/dist/adapters/cursor-startup.js +74 -0
  47. package/dist/adapters/cursor-startup.js.map +1 -0
  48. package/dist/adapters/cursor-tools.d.ts +11 -0
  49. package/dist/adapters/cursor-tools.js +49 -0
  50. package/dist/adapters/cursor-tools.js.map +1 -0
  51. package/dist/adapters/cursor.d.ts +6 -0
  52. package/dist/adapters/cursor.js +17 -0
  53. package/dist/adapters/cursor.js.map +1 -0
  54. package/dist/adapters/fx-auth.d.ts +12 -2
  55. package/dist/adapters/fx-auth.js +51 -61
  56. package/dist/adapters/fx-auth.js.map +1 -1
  57. package/dist/adapters/fx-profile.d.ts +8 -0
  58. package/dist/adapters/fx-profile.js +101 -0
  59. package/dist/adapters/fx-profile.js.map +1 -0
  60. package/dist/adapters/fx-rpc.d.ts +2 -0
  61. package/dist/adapters/fx-rpc.js +30 -4
  62. package/dist/adapters/fx-rpc.js.map +1 -1
  63. package/dist/adapters/fx-status.d.ts +2 -0
  64. package/dist/adapters/fx-status.js +96 -0
  65. package/dist/adapters/fx-status.js.map +1 -0
  66. package/dist/adapters/fx.js +28 -12
  67. package/dist/adapters/fx.js.map +1 -1
  68. package/dist/adapters/opencode-access.d.ts +13 -0
  69. package/dist/adapters/opencode-access.js +76 -0
  70. package/dist/adapters/opencode-access.js.map +1 -0
  71. package/dist/adapters/opencode-config.d.ts +11 -0
  72. package/dist/adapters/opencode-config.js +238 -0
  73. package/dist/adapters/opencode-config.js.map +1 -0
  74. package/dist/adapters/opencode-http.d.ts +28 -0
  75. package/dist/adapters/opencode-http.js +297 -0
  76. package/dist/adapters/opencode-http.js.map +1 -0
  77. package/dist/adapters/opencode-tools.d.ts +19 -0
  78. package/dist/adapters/opencode-tools.js +127 -0
  79. package/dist/adapters/opencode-tools.js.map +1 -0
  80. package/dist/adapters/opencode.d.ts +2 -0
  81. package/dist/adapters/opencode.js +569 -0
  82. package/dist/adapters/opencode.js.map +1 -0
  83. package/dist/adapters/rpc.d.ts +3 -0
  84. package/dist/adapters/rpc.js +45 -4
  85. package/dist/adapters/rpc.js.map +1 -1
  86. package/dist/adapters/types.d.ts +5 -0
  87. package/dist/adapters/types.js.map +1 -1
  88. package/dist/approvals/types.d.ts +1 -1
  89. package/dist/approvals/types.js.map +1 -1
  90. package/dist/cli/args.d.ts +1 -1
  91. package/dist/cli/args.js +4 -1
  92. package/dist/cli/args.js.map +1 -1
  93. package/dist/cli/dashboard-client.js +1 -1
  94. package/dist/cli/dashboard-client.js.map +1 -1
  95. package/dist/cli/dashboard-controller.d.ts +7 -0
  96. package/dist/cli/dashboard-controller.js +27 -0
  97. package/dist/cli/dashboard-controller.js.map +1 -0
  98. package/dist/cli/dashboard-detail-view.d.ts +1 -1
  99. package/dist/cli/dashboard-detail-view.js +3 -4
  100. package/dist/cli/dashboard-detail-view.js.map +1 -1
  101. package/dist/cli/dashboard-history-view.js.map +1 -1
  102. package/dist/cli/dashboard-input.d.ts +1 -1
  103. package/dist/cli/dashboard-input.js +11 -1
  104. package/dist/cli/dashboard-input.js.map +1 -1
  105. package/dist/cli/dashboard-layout.js +3 -3
  106. package/dist/cli/dashboard-layout.js.map +1 -1
  107. package/dist/cli/dashboard-renderer.js.map +1 -1
  108. package/dist/cli/dashboard-style.js +2 -2
  109. package/dist/cli/dashboard-style.js.map +1 -1
  110. package/dist/cli/dashboard.d.ts +2 -2
  111. package/dist/cli/dashboard.js +7 -32
  112. package/dist/cli/dashboard.js.map +1 -1
  113. package/dist/cli/help.d.ts +1 -1
  114. package/dist/cli/help.js +30 -12
  115. package/dist/cli/help.js.map +1 -1
  116. package/dist/cli/main.js +5 -1
  117. package/dist/cli/main.js.map +1 -1
  118. package/dist/config/access-provenance.d.ts +10 -0
  119. package/dist/config/access-provenance.js +31 -0
  120. package/dist/config/access-provenance.js.map +1 -0
  121. package/dist/config/access.d.ts +12 -2
  122. package/dist/config/access.js +125 -27
  123. package/dist/config/access.js.map +1 -1
  124. package/dist/config/loader.js +1 -0
  125. package/dist/config/loader.js.map +1 -1
  126. package/dist/config/oidc.js +4 -2
  127. package/dist/config/oidc.js.map +1 -1
  128. package/dist/config/project.js +2 -1
  129. package/dist/config/project.js.map +1 -1
  130. package/dist/config/resolve-access.js +24 -10
  131. package/dist/config/resolve-access.js.map +1 -1
  132. package/dist/index.d.ts +2 -2
  133. package/dist/index.js +1 -1
  134. package/dist/index.js.map +1 -1
  135. package/dist/process-diagnostics.d.ts +2 -0
  136. package/dist/process-diagnostics.js +11 -0
  137. package/dist/process-diagnostics.js.map +1 -0
  138. package/dist/runtime/access-errors.d.ts +4 -0
  139. package/dist/runtime/access-errors.js +25 -0
  140. package/dist/runtime/access-errors.js.map +1 -0
  141. package/dist/runtime/approval-registry.js +1 -1
  142. package/dist/runtime/approval-registry.js.map +1 -1
  143. package/dist/runtime/client.js +54 -14
  144. package/dist/runtime/client.js.map +1 -1
  145. package/dist/runtime/dashboard-sanitize.d.ts +2 -0
  146. package/dist/runtime/dashboard-sanitize.js +7 -0
  147. package/dist/runtime/dashboard-sanitize.js.map +1 -0
  148. package/dist/runtime/dashboard.d.ts +1 -1
  149. package/dist/runtime/dashboard.js +2 -3
  150. package/dist/runtime/dashboard.js.map +1 -1
  151. package/dist/runtime/definition.js +11 -1
  152. package/dist/runtime/definition.js.map +1 -1
  153. package/dist/runtime/select-native.js +26 -8
  154. package/dist/runtime/select-native.js.map +1 -1
  155. package/dist/runtime/worker-client.js +38 -13
  156. package/dist/runtime/worker-client.js.map +1 -1
  157. package/dist/sdk/definitions.d.ts +4 -1
  158. package/dist/sdk/definitions.js +16 -2
  159. package/dist/sdk/definitions.js.map +1 -1
  160. package/dist/sdk/permission-validation.js +10 -1
  161. package/dist/sdk/permission-validation.js.map +1 -1
  162. package/dist/sdk/types.d.ts +29 -1
  163. package/dist/sdk/types.js.map +1 -1
  164. package/package.json +4 -1
  165. package/sdk/access-config.md +58 -4
  166. package/sdk/adapter-contract.md +5 -3
  167. package/sdk/additional-harnesses.md +43 -0
  168. package/sdk/agent-skill.md +2 -2
  169. package/sdk/agent.md +5 -3
  170. package/sdk/approvals.md +3 -1
  171. package/sdk/authentication.md +1 -1
  172. package/sdk/cli/dashboard-design.md +6 -0
  173. package/sdk/cli/index.md +9 -6
  174. package/sdk/cli/output.md +3 -1
  175. package/sdk/config.md +1 -1
  176. package/sdk/copilot.md +53 -0
  177. package/sdk/cursor.md +68 -0
  178. package/sdk/diagnostics.md +29 -0
  179. package/sdk/distribution.md +1 -1
  180. package/sdk/evals.md +1 -1
  181. package/sdk/fx.md +50 -5
  182. package/sdk/harnesses.md +13 -13
  183. package/sdk/index.md +3 -2
  184. package/sdk/opencode.md +57 -0
  185. package/sdk/permissions.md +4 -2
  186. package/sdk/project-team.md +2 -0
  187. package/sdk/tools.md +1 -1
  188. package/sdk/v1-runtime.md +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"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","sourcesContent":["import { AgentError } from \"../errors.js\";\nimport { executeTool, toolJsonSchema } from \"../sdk/tools.js\";\nimport type { ExecutedToolResult } from \"../sdk/tool-result.js\";\nimport { NativeRpc } from \"./rpc.js\";\nimport { codexEnvironment, codexConfiguration, validateCodexModel } from \"./codex-config.js\";\nimport { NativeApprovals } from \"./approval-lifetime.js\";\nimport { codexApproval } from \"./codex-approvals.js\";\nimport { codexInputRequired } from \"./codex-input.js\";\nimport { codexPermissionSettings, verifyCodexPermissionSettings } from \"./codex-permissions.js\";\nimport type { AdapterOptions, NativeSession } from \"./types.js\";\n\ntype ActiveTurn = {\n id?: string;\n messages: Map<string, { text: string; final: boolean }>;\n resolve(text: string): void;\n reject(error: Error): void;\n completion: Promise<string>;\n started?: Promise<void>;\n failure?: AgentError;\n tools: Set<Promise<void>>;\n terminal?: boolean;\n acceptingTools: boolean;\n approvals: NativeApprovals;\n items: Map<string, unknown>;\n withdrawnApprovals: Set<string | number>;\n};\n\nexport async function openCodex(options: AdapterOptions): Promise<NativeSession> {\n const env = codexEnvironment(options);\n const rpc = new NativeRpc(\"codex\", [\"app-server\", \"--stdio\"], options.cwd, env);\n rpc.onMessage = message => {\n if (message.id !== undefined) rpc.abort(codexInputRequired(message.method));\n };\n try {\n await rpc.request(\"initialize\", { clientInfo: { name: \"subharness\", version: \"0.1.0\" }, capabilities: { experimentalApi: true } });\n rpc.send({ method: \"initialized\", params: {} });\n const configuration = await codexConfiguration(rpc, options);\n if (options.harness.kind !== \"codex\") throw new AgentError(\"INVALID_CONFIG\", \"Codex received a configuration for another harness.\");\n const permissions = codexPermissionSettings(options.harness);\n const result = await rpc.request(\"thread/start\", {\n ...(options.harness.model ? { model: options.harness.model } : {}), ...configuration, ...permissions.thread, allowProviderModelFallback: false,\n config: { ...configuration.config, ...permissions.config, ...(options.harness.effort ? { model_reasoning_effort: options.harness.effort } : {}), \"features.fast_mode\": options.harness.fast },\n dynamicTools: Object.keys(options.agent.tools ?? {}).length ? [{\n type: \"namespace\", name: \"subharness\", description: \"Tools declared by this agent.\",\n tools: Object.entries(options.agent.tools ?? {}).map(([name, definition]) => ({ type: \"function\", name, description: definition.description, inputSchema: toolJsonSchema(definition) })),\n }] : [],\n cwd: options.cwd, serviceTier: options.harness.fast ? \"fast\" : null,\n });\n if (typeof result.thread?.id !== \"string\") throw new AgentError(\"PROTOCOL_ERROR\", \"Codex did not return a native thread identifier.\");\n if (typeof result.model !== \"string\" || result.model.length === 0) {\n throw new AgentError(\"INVALID_CONFIG\", \"Codex could not select a native default for this connection. Supply --model <model>.\");\n }\n if ((options.harness.model && result.model !== options.harness.model) || result.modelProvider !== configuration.modelProvider) {\n throw new AgentError(\"INVALID_CONFIG\", options.harness.model\n ? \"Codex changed the explicitly selected model or provider.\"\n : \"Codex could not select a verifiable native default for this connection. Supply --model <model>.\");\n }\n if (options.harness.effort && result.reasoningEffort !== options.harness.effort) {\n throw new AgentError(\"INVALID_CONFIG\", \"Codex did not apply the explicitly selected effort.\");\n }\n verifyCodexPermissionSettings(options.harness, result);\n await validateCodexModel(rpc, options, result.model);\n const requestedTier = options.harness.fast ? \"fast\" : \"default\";\n if ((options.harness.fast && result.serviceTier !== \"fast\") || (result.serviceTier != null && result.serviceTier !== requestedTier)) throw new AgentError(\"INVALID_CONFIG\", \"Codex did not accept the requested speed setting.\");\n return new CodexSession(rpc, result.thread.id, result.model, options);\n } catch (error) { await rpc.close(); throw error; }\n}\n\nclass CodexSession implements NativeSession {\n private active?: ActiveTurn;\n\n constructor(private rpc: NativeRpc, private threadId: string, private model: string, private options: AdapterOptions) {\n rpc.onFailure = error => {\n const active = this.active;\n if (active) void this.finish(active, undefined, error);\n };\n rpc.onMessage = message => {\n const p = message.params;\n const current = this.active;\n if (p?.threadId !== this.threadId || !current) return;\n void Promise.resolve(current.started).then(() => {\n if (this.active !== current || current.terminal) return;\n const turnId = p.turnId ?? p.turn?.id;\n if (turnId && turnId !== current.id) return;\n if (message.method === \"serverRequest/resolved\") {\n current.withdrawnApprovals.add(p.requestId);\n current.approvals.withdraw(p.requestId);\n return;\n }\n if (message.method === \"item/started\" && p.item?.type === \"fileChange\") current.items.set(p.item.id, p.item);\n if (message.method === \"item/tool/call\" && message.id !== undefined) {\n if (!current.acceptingTools) {\n this.rpc.send({ id: message.id, result: { success: false, contentItems: [{ type: \"inputText\", text: \"The task is not accepting tool calls.\" }] } });\n return;\n }\n const call = this.toolCall(message.id, p);\n current.tools.add(call);\n void call.finally(() => current.tools.delete(call));\n return;\n }\n if (message.id !== undefined) {\n if (this.options.onApproval && current.acceptingTools) {\n try {\n const approval = codexApproval(message.method, p, current.items.get(p.itemId));\n if (approval) {\n void current.approvals.request(message.id, approval.request, this.options.onApproval).then(content => {\n if (this.active === current && !current.terminal && current.acceptingTools && !current.withdrawnApprovals.has(message.id!)) this.rpc.send({id:message.id,result:approval.response(content)});\n }).catch(error => {\n if (!(error instanceof AgentError && error.code === \"REQUEST_EXPIRED\")) this.stopForInput(message.method);\n });\n return;\n }\n } catch { /* Unsupported native requests use the explicit input failure path. */ }\n }\n this.stopForInput(message.method);\n return;\n }\n if (message.method === \"item/completed\" && p.item?.type === \"agentMessage\") {\n if (typeof p.item.id !== \"string\" || typeof p.item.text !== \"string\") {\n current.failure = new AgentError(\"PROTOCOL_ERROR\", \"Codex sent an invalid turn event.\");\n void this.finish(current, undefined, current.failure);\n return;\n }\n current.messages.set(p.item.id, { text: p.item.text, final: p.item.phase === \"final_answer\" });\n }\n if (message.method === \"turn/completed\") void this.finish(current, p.turn);\n }).catch(() => {\n void this.finish(current, undefined, new AgentError(\"PROTOCOL_ERROR\", \"Codex sent an invalid turn event.\"));\n });\n };\n }\n\n private async finish(active: ActiveTurn, turn?: any, failure?: AgentError): Promise<void> {\n if (active.terminal) return;\n active.terminal = true;\n active.approvals.clear();\n active.acceptingTools = false;\n await Promise.allSettled([...active.tools]);\n if (this.active === active) this.active = undefined;\n if (failure) return active.reject(failure);\n if (active.failure) return active.reject(active.failure);\n if (typeof turn !== \"object\" || turn === null || !Array.isArray(turn.items)) {\n return active.reject(new AgentError(\"PROTOCOL_ERROR\", \"Codex sent an invalid turn event.\"));\n }\n for (const item of turn.items) {\n if (item?.type !== \"agentMessage\") continue;\n if (typeof item.id !== \"string\" || typeof item.text !== \"string\") {\n return active.reject(new AgentError(\"PROTOCOL_ERROR\", \"Codex sent an invalid turn event.\"));\n }\n active.messages.set(item.id, { text: item.text, final: item.phase === \"final_answer\" });\n }\n const messages = [...active.messages.values()].reverse();\n const text = messages.find(m => m.final)?.text ?? messages[0]?.text ?? \"\";\n if (Buffer.byteLength(text, \"utf8\") > 1024 * 1024) active.reject(new AgentError(\"RESPONSE_TOO_LARGE\", \"Codex response exceeds 1 MiB.\"));\n else if (turn?.status === \"completed\") active.resolve(text);\n else active.reject(new AgentError(turn?.status === \"interrupted\" ? \"INTERRUPTED\" : \"HARNESS_FAILED\", \"Codex did not complete the turn successfully.\"));\n }\n\n private stopForInput(method: unknown): void {\n const active = this.active;\n if (!active || active.failure) return;\n active.acceptingTools = false;\n active.approvals.clear();\n active.failure = codexInputRequired(method);\n void (async () => {\n try {\n await active.started;\n if (this.active === active) await this.rpc.request(\"turn/interrupt\", { threadId: this.threadId, turnId: active.id });\n } catch {\n const stopping = this.finish(active, undefined, new AgentError(\"CANCELLATION_FAILED\", \"Codex could not confirm interruption after requesting input.\"));\n await this.rpc.close();\n await stopping;\n }\n })();\n }\n\n private async toolCall(id: string | number, params: any): Promise<void> {\n let result: ExecutedToolResult, success = false;\n try {\n const tools = this.options.agent.tools ?? {};\n if (params.namespace !== \"subharness\" || !Object.hasOwn(tools, params.tool)) throw new AgentError(\"TOOL_UNKNOWN\", \"Unknown tool.\");\n result = await executeTool(tools[params.tool]!, params.arguments);\n success = true;\n } catch (error) {\n result = error instanceof AgentError ? `Tool failed (${error.code}).` : \"Tool execution failed.\";\n }\n try { this.rpc.send({ id, result: { contentItems: codexContent(result), success } }); } catch { /* A cancelled native turn no longer accepts its tool result. */ }\n }\n\n async turn(prompt: string): Promise<string> {\n if (this.active) throw new AgentError(\"SESSION_BUSY\", \"Codex already has an active turn.\");\n let resolve!: (text: string) => void, reject!: (error: Error) => void;\n const completion = new Promise<string>((a, b) => { resolve = a; reject = b; });\n const active: ActiveTurn = { messages: new Map(), tools: new Set(), approvals: new NativeApprovals(), items: new Map(), withdrawnApprovals: new Set(), acceptingTools: true, resolve, reject, completion };\n this.active = active;\n void completion.catch(() => {});\n try {\n active.started = this.rpc.request(\"turn/start\", {\n threadId: this.threadId, input: [{ type: \"text\", text: prompt }], effort: this.options.harness.effort,\n model: this.model,\n serviceTierForTurn: this.options.harness.fast ? \"fast\" : \"default\",\n }).then(result => { active.id = result.turn.id; });\n await active.started;\n return await completion;\n } catch (error) { if (this.active === active) this.active = undefined; throw error; }\n }\n\n async steer(prompt: string): Promise<void> {\n const active = this.active;\n await active?.started;\n if (!active?.id || this.active !== active) throw new AgentError(\"UNSUPPORTED_DELIVERY\", \"Codex has no active turn to steer.\");\n await this.rpc.request(\"turn/steer\", { threadId: this.threadId, expectedTurnId: active.id, input: [{ type: \"text\", text: prompt }] });\n }\n\n async interrupt(): Promise<void> {\n const active = this.active;\n if (!active) return;\n active.acceptingTools = false;\n active.approvals.clear();\n await active.started;\n if (this.active !== active) return;\n if (!active.terminal) await this.rpc.request(\"turn/interrupt\", { threadId: this.threadId, turnId: active.id });\n try { await active.completion; } catch (error) {\n if (!(error instanceof AgentError) || error.code !== \"INTERRUPTED\") throw error;\n }\n }\n\n async resume(): Promise<string> { throw new AgentError(\"RECOVERY_UNSUPPORTED\", \"Codex does not expose retry of a failed turn without replay.\"); }\n async close(): Promise<void> {\n const active = this.active;\n if (active) { active.acceptingTools = false; active.approvals.clear(); }\n await this.rpc.close();\n if (active) await Promise.allSettled([...active.tools]);\n }\n}\n\nfunction codexContent(result: ExecutedToolResult) {\n if (typeof result === \"string\") return [{ type: \"inputText\" as const, text: result }];\n return result.content.map(block => block.type === \"text\"\n ? { type: \"inputText\" as const, text: block.text }\n : { type: \"inputImage\" as const, imageUrl: `data:${block.mimeType};base64,${block.data}` });\n}\n"]}
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAmBhG,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAuB;IACrD,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAChF,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,EAAE;QACxB,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS;YAAE,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC;IACF,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACnI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7D,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO;YAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,qDAAqD,CAAC,CAAC;QACpI,MAAM,WAAW,GAAG,uBAAuB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE;YAC/C,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,aAAa,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,0BAA0B,EAAE,KAAK;YAC9I,MAAM,EAAE,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,oBAAoB,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;YAC7L,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC7D,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,+BAA+B;oBACnF,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;iBACzL,CAAC,CAAC,CAAC,CAAC,EAAE;YACP,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;SACpE,CAAC,CAAC;QACH,IAAI,OAAO,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,QAAQ;YAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,kDAAkD,CAAC,CAAC;QACtI,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,sFAAsF,CAAC,CAAC;QACjI,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,aAAa,KAAK,aAAa,CAAC,aAAa,EAAE,CAAC;YAC9H,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;gBAC1D,CAAC,CAAC,0DAA0D;gBAC5D,CAAC,CAAC,iGAAiG,CAAC,CAAC;QACzG,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAChF,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,qDAAqD,CAAC,CAAC;QAChG,CAAC;QACD,6BAA6B,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvD,MAAM,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,WAAW,KAAK,aAAa,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,mDAAmD,CAAC,CAAC;QACjO,OAAO,IAAI,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAAC,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QAAC,MAAM,KAAK,CAAC;IAAC,CAAC;AACrD,CAAC;AAED,MAAM,YAAY;IAGI,GAAG;IAAqB,QAAQ;IAAkB,KAAK;IAAkB,OAAO;IAF5F,MAAM,CAAc;IAE5B,YAAoB,GAAc,EAAU,QAAgB,EAAU,KAAa,EAAU,OAAuB;mBAAhG,GAAG;wBAAqB,QAAQ;qBAAkB,KAAK;uBAAkB,OAAO;QAClG,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE;YACtB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,IAAI,MAAM;gBAAE,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC,CAAC;QACF,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,EAAE;YACxB,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;YAC5B,IAAI,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO;gBAAE,OAAO;YACtD,KAAK,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,QAAQ;oBAAE,OAAO;gBACxD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBACtC,IAAI,MAAM,IAAI,MAAM,KAAK,OAAO,CAAC,EAAE;oBAAE,OAAO;gBAC5C,IAAI,OAAO,CAAC,MAAM,KAAK,wBAAwB,EAAE,CAAC;oBAChD,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBAC5C,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBACxC,OAAO;gBACT,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,YAAY;oBAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC7G,IAAI,OAAO,CAAC,MAAM,KAAK,gBAAgB,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;oBACpE,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;wBAC5B,IAAI,CAAC;4BACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,uCAAuC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;wBACtJ,CAAC;wBAAC,MAAM,CAAC,CAAC,4EAA4E,CAAC,CAAC;wBACxF,OAAO;oBACT,CAAC;oBACD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAC1C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACxB,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;oBACpD,OAAO;gBACT,CAAC;gBACD,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;oBAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;wBACtD,IAAI,CAAC;4BACH,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;4BAC/E,IAAI,QAAQ,EAAE,CAAC;gCACb,KAAK,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;oCACnG,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAG,CAAC;wCAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAC,EAAE,EAAC,OAAO,CAAC,EAAE,EAAC,MAAM,EAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAC,CAAC,CAAC;gCAC/L,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oCACf,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC;wCAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gCAC5G,CAAC,CAAC,CAAC;gCACH,OAAO;4BACT,CAAC;wBACH,CAAC;wBAAC,MAAM,CAAC,CAAC,sEAAsE,CAAC,CAAC;oBACpF,CAAC;oBACD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAClC,OAAO;gBACT,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,KAAK,gBAAgB,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,cAAc,EAAE,CAAC;oBAC3E,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBACrE,OAAO,CAAC,OAAO,GAAG,IAAI,UAAU,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAAC;wBACxF,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;wBACtD,OAAO;oBACT,CAAC;oBACD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC,CAAC;gBACjG,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,KAAK,gBAAgB;oBAAE,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7E,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACZ,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,UAAU,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAAC,CAAC;YAC9G,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,MAAkB,EAAE,IAAU,EAAE,OAAoB;QACvE,IAAI,MAAM,CAAC,QAAQ;YAAE,OAAO;QAC5B,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC;QAC9B,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACpD,IAAI,OAAO;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5E,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAAC,CAAC;QAC9F,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,IAAI,EAAE,IAAI,KAAK,cAAc;gBAAE,SAAS;YAC5C,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACjE,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAAC,CAAC;YAC9F,CAAC;YACD,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;QAC1E,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI;YAAE,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,oBAAoB,EAAE,+BAA+B,CAAC,CAAC,CAAC;aACnI,IAAI,IAAI,EAAE,MAAM,KAAK,WAAW;YAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;YACvD,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,EAAE,+CAA+C,CAAC,CAAC,CAAC;IACzJ,CAAC;IAEO,YAAY,CAAC,MAAe;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO;QACtC,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC;QAC9B,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC5C,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,OAAO,CAAC;gBACrB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;oBAAE,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YACvH,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,UAAU,CAAC,qBAAqB,EAAE,8DAA8D,CAAC,CAAC,CAAC;gBACvJ,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;gBACvB,MAAM,QAAQ,CAAC;YACjB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,EAAmB,EAAE,MAAW;QACrD,IAAI,MAA0B,EAAE,OAAO,GAAG,KAAK,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YAC7C,IAAI,MAAM,CAAC,SAAS,KAAK,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,UAAU,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;YACnI,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAE,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAClE,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC;QACnG,CAAC;QACD,IAAI,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,gEAAgE,CAAC,CAAC;IACpK,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc;QACvB,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,UAAU,CAAC,cAAc,EAAE,mCAAmC,CAAC,CAAC;QAC3F,IAAI,OAAgC,EAAE,MAA+B,CAAC;QACtE,MAAM,UAAU,GAAG,IAAI,OAAO,CAAS,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAe,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,kBAAkB,EAAE,IAAI,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC3M,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE;gBAC9C,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM;gBACrG,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;aACnE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,MAAM,MAAM,CAAC,OAAO,CAAC;YACrB,OAAO,MAAM,UAAU,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;gBAAE,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YAAC,MAAM,KAAK,CAAC;QAAC,CAAC;IACvF,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAc;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,MAAM,EAAE,OAAO,CAAC;QACtB,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;YAAE,MAAM,IAAI,UAAU,CAAC,sBAAsB,EAAE,oCAAoC,CAAC,CAAC;QAC9H,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IACxI,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC;QAC9B,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,CAAC,OAAO,CAAC;QACrB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO;QACnC,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/G,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,UAAU,CAAC;QAAC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAC9C,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;gBAAE,MAAM,KAAK,CAAC;QAClF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,KAAsB,MAAM,IAAI,UAAU,CAAC,sBAAsB,EAAE,8DAA8D,CAAC,CAAC,CAAC,CAAC;IACjJ,KAAK,CAAC,KAAK;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,MAAM,EAAE,CAAC;YAAC,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC;YAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;QACxE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,MAAM;YAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC;CACF;AAED,SAAS,YAAY,CAAC,MAA0B;IAC9C,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,CAAC,EAAE,IAAI,EAAE,WAAoB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACtF,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM;QACtD,CAAC,CAAC,EAAE,IAAI,EAAE,WAAoB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;QAClD,CAAC,CAAC,EAAE,IAAI,EAAE,YAAqB,EAAE,QAAQ,EAAE,QAAQ,KAAK,CAAC,QAAQ,WAAW,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAChG,CAAC","sourcesContent":["import { AgentError } from \"../errors.js\";\nimport { executeTool, toolJsonSchema } from \"../sdk/tools.js\";\nimport type { ExecutedToolResult } from \"../sdk/tool-result.js\";\nimport { NativeRpc } from \"./rpc.js\";\nimport { codexEnvironment, codexConfiguration, validateCodexModel } from \"./codex-config.js\";\nimport { NativeApprovals } from \"./approval-lifetime.js\";\nimport { codexApproval } from \"./codex-approvals.js\";\nimport { codexInputRequired } from \"./codex-input.js\";\nimport { codexPermissionSettings, verifyCodexPermissionSettings } from \"./codex-permissions.js\";\nimport type { AdapterOptions, NativeSession } from \"./types.js\";\n\ntype ActiveTurn = {\n id?: string;\n messages: Map<string, { text: string; final: boolean }>;\n resolve(text: string): void;\n reject(error: Error): void;\n completion: Promise<string>;\n started?: Promise<void>;\n failure?: AgentError;\n tools: Set<Promise<void>>;\n terminal?: boolean;\n acceptingTools: boolean;\n approvals: NativeApprovals;\n items: Map<string, unknown>;\n withdrawnApprovals: Set<string | number>;\n};\n\nexport async function openCodex(options: AdapterOptions): Promise<NativeSession> {\n const env = codexEnvironment(options);\n const rpc = new NativeRpc(\"codex\", [\"app-server\", \"--stdio\"], options.cwd, env);\n rpc.onMessage = message => {\n if (message.id !== undefined) rpc.abort(codexInputRequired(message.method));\n };\n try {\n await rpc.request(\"initialize\", { clientInfo: { name: \"subharness\", version: \"0.1.0\" }, capabilities: { experimentalApi: true } });\n rpc.send({ method: \"initialized\", params: {} });\n const configuration = await codexConfiguration(rpc, options);\n if (options.harness.kind !== \"codex\") throw new AgentError(\"INVALID_CONFIG\", \"Codex received a configuration for another harness.\");\n const permissions = codexPermissionSettings(options.harness);\n const result = await rpc.request(\"thread/start\", {\n ...(options.harness.model ? { model: options.harness.model } : {}), ...configuration, ...permissions.thread, allowProviderModelFallback: false,\n config: { ...configuration.config, ...permissions.config, ...(options.harness.effort ? { model_reasoning_effort: options.harness.effort } : {}), \"features.fast_mode\": options.harness.fast },\n dynamicTools: Object.keys(options.agent.tools ?? {}).length ? [{\n type: \"namespace\", name: \"subharness\", description: \"Tools declared by this agent.\",\n tools: Object.entries(options.agent.tools ?? {}).map(([name, definition]) => ({ type: \"function\", name, description: definition.description, inputSchema: toolJsonSchema(definition) })),\n }] : [],\n cwd: options.cwd, serviceTier: options.harness.fast ? \"fast\" : null,\n });\n if (typeof result.thread?.id !== \"string\") throw new AgentError(\"PROTOCOL_ERROR\", \"Codex did not return a native thread identifier.\");\n if (typeof result.model !== \"string\" || result.model.length === 0) {\n throw new AgentError(\"INVALID_CONFIG\", \"Codex could not select a native default for this connection. Supply --model <model>.\");\n }\n if ((options.harness.model && result.model !== options.harness.model) || result.modelProvider !== configuration.modelProvider) {\n throw new AgentError(\"INVALID_CONFIG\", options.harness.model\n ? \"Codex changed the explicitly selected model or provider.\"\n : \"Codex could not select a verifiable native default for this connection. Supply --model <model>.\");\n }\n if (options.harness.effort && result.reasoningEffort !== options.harness.effort) {\n throw new AgentError(\"INVALID_CONFIG\", \"Codex did not apply the explicitly selected effort.\");\n }\n verifyCodexPermissionSettings(options.harness, result);\n await validateCodexModel(rpc, options, result.model);\n const requestedTier = options.harness.fast ? \"fast\" : \"default\";\n if ((options.harness.fast && result.serviceTier !== \"fast\") || (result.serviceTier != null && result.serviceTier !== requestedTier)) throw new AgentError(\"INVALID_CONFIG\", \"Codex did not accept the requested speed setting.\");\n return new CodexSession(rpc, result.thread.id, result.model, options);\n } catch (error) { await rpc.close(); throw error; }\n}\n\nclass CodexSession implements NativeSession {\n private active?: ActiveTurn;\n\n constructor(private rpc: NativeRpc, private threadId: string, private model: string, private options: AdapterOptions) {\n rpc.onFailure = error => {\n const active = this.active;\n if (active) void this.finish(active, undefined, error);\n };\n rpc.onMessage = message => {\n const p = message.params;\n const current = this.active;\n if (p?.threadId !== this.threadId || !current) return;\n void Promise.resolve(current.started).then(() => {\n if (this.active !== current || current.terminal) return;\n const turnId = p.turnId ?? p.turn?.id;\n if (turnId && turnId !== current.id) return;\n if (message.method === \"serverRequest/resolved\") {\n current.withdrawnApprovals.add(p.requestId);\n current.approvals.withdraw(p.requestId);\n return;\n }\n if (message.method === \"item/started\" && p.item?.type === \"fileChange\") current.items.set(p.item.id, p.item);\n if (message.method === \"item/tool/call\" && message.id !== undefined) {\n if (!current.acceptingTools) {\n try {\n this.rpc.send({ id: message.id, result: { success: false, contentItems: [{ type: \"inputText\", text: \"The task is not accepting tool calls.\" }] } });\n } catch { /* A closing native turn no longer accepts its rejected tool-call result. */ }\n return;\n }\n const call = this.toolCall(message.id, p);\n current.tools.add(call);\n void call.finally(() => current.tools.delete(call));\n return;\n }\n if (message.id !== undefined) {\n if (this.options.onApproval && current.acceptingTools) {\n try {\n const approval = codexApproval(message.method, p, current.items.get(p.itemId));\n if (approval) {\n void current.approvals.request(message.id, approval.request, this.options.onApproval).then(content => {\n if (this.active === current && !current.terminal && current.acceptingTools && !current.withdrawnApprovals.has(message.id!)) this.rpc.send({id:message.id,result:approval.response(content)});\n }).catch(error => {\n if (!(error instanceof AgentError && error.code === \"REQUEST_EXPIRED\")) this.stopForInput(message.method);\n });\n return;\n }\n } catch { /* Unsupported native requests use the explicit input failure path. */ }\n }\n this.stopForInput(message.method);\n return;\n }\n if (message.method === \"item/completed\" && p.item?.type === \"agentMessage\") {\n if (typeof p.item.id !== \"string\" || typeof p.item.text !== \"string\") {\n current.failure = new AgentError(\"PROTOCOL_ERROR\", \"Codex sent an invalid turn event.\");\n void this.finish(current, undefined, current.failure);\n return;\n }\n current.messages.set(p.item.id, { text: p.item.text, final: p.item.phase === \"final_answer\" });\n }\n if (message.method === \"turn/completed\") void this.finish(current, p.turn);\n }).catch(() => {\n void this.finish(current, undefined, new AgentError(\"PROTOCOL_ERROR\", \"Codex sent an invalid turn event.\"));\n });\n };\n }\n\n private async finish(active: ActiveTurn, turn?: any, failure?: AgentError): Promise<void> {\n if (active.terminal) return;\n active.terminal = true;\n active.approvals.clear();\n active.acceptingTools = false;\n await Promise.allSettled([...active.tools]);\n if (this.active === active) this.active = undefined;\n if (failure) return active.reject(failure);\n if (active.failure) return active.reject(active.failure);\n if (typeof turn !== \"object\" || turn === null || !Array.isArray(turn.items)) {\n return active.reject(new AgentError(\"PROTOCOL_ERROR\", \"Codex sent an invalid turn event.\"));\n }\n for (const item of turn.items) {\n if (item?.type !== \"agentMessage\") continue;\n if (typeof item.id !== \"string\" || typeof item.text !== \"string\") {\n return active.reject(new AgentError(\"PROTOCOL_ERROR\", \"Codex sent an invalid turn event.\"));\n }\n active.messages.set(item.id, { text: item.text, final: item.phase === \"final_answer\" });\n }\n const messages = [...active.messages.values()].reverse();\n const text = messages.find(m => m.final)?.text ?? messages[0]?.text ?? \"\";\n if (Buffer.byteLength(text, \"utf8\") > 1024 * 1024) active.reject(new AgentError(\"RESPONSE_TOO_LARGE\", \"Codex response exceeds 1 MiB.\"));\n else if (turn?.status === \"completed\") active.resolve(text);\n else active.reject(new AgentError(turn?.status === \"interrupted\" ? \"INTERRUPTED\" : \"HARNESS_FAILED\", \"Codex did not complete the turn successfully.\"));\n }\n\n private stopForInput(method: unknown): void {\n const active = this.active;\n if (!active || active.failure) return;\n active.acceptingTools = false;\n active.approvals.clear();\n active.failure = codexInputRequired(method);\n void (async () => {\n try {\n await active.started;\n if (this.active === active) await this.rpc.request(\"turn/interrupt\", { threadId: this.threadId, turnId: active.id });\n } catch {\n const stopping = this.finish(active, undefined, new AgentError(\"CANCELLATION_FAILED\", \"Codex could not confirm interruption after requesting input.\"));\n await this.rpc.close();\n await stopping;\n }\n })();\n }\n\n private async toolCall(id: string | number, params: any): Promise<void> {\n let result: ExecutedToolResult, success = false;\n try {\n const tools = this.options.agent.tools ?? {};\n if (params.namespace !== \"subharness\" || !Object.hasOwn(tools, params.tool)) throw new AgentError(\"TOOL_UNKNOWN\", \"Unknown tool.\");\n result = await executeTool(tools[params.tool]!, params.arguments);\n success = true;\n } catch (error) {\n result = error instanceof AgentError ? `Tool failed (${error.code}).` : \"Tool execution failed.\";\n }\n try { this.rpc.send({ id, result: { contentItems: codexContent(result), success } }); } catch { /* A cancelled native turn no longer accepts its tool result. */ }\n }\n\n async turn(prompt: string): Promise<string> {\n if (this.active) throw new AgentError(\"SESSION_BUSY\", \"Codex already has an active turn.\");\n let resolve!: (text: string) => void, reject!: (error: Error) => void;\n const completion = new Promise<string>((a, b) => { resolve = a; reject = b; });\n const active: ActiveTurn = { messages: new Map(), tools: new Set(), approvals: new NativeApprovals(), items: new Map(), withdrawnApprovals: new Set(), acceptingTools: true, resolve, reject, completion };\n this.active = active;\n void completion.catch(() => {});\n try {\n active.started = this.rpc.request(\"turn/start\", {\n threadId: this.threadId, input: [{ type: \"text\", text: prompt }], effort: this.options.harness.effort,\n model: this.model,\n serviceTierForTurn: this.options.harness.fast ? \"fast\" : \"default\",\n }).then(result => { active.id = result.turn.id; });\n await active.started;\n return await completion;\n } catch (error) { if (this.active === active) this.active = undefined; throw error; }\n }\n\n async steer(prompt: string): Promise<void> {\n const active = this.active;\n await active?.started;\n if (!active?.id || this.active !== active) throw new AgentError(\"UNSUPPORTED_DELIVERY\", \"Codex has no active turn to steer.\");\n await this.rpc.request(\"turn/steer\", { threadId: this.threadId, expectedTurnId: active.id, input: [{ type: \"text\", text: prompt }] });\n }\n\n async interrupt(): Promise<void> {\n const active = this.active;\n if (!active) return;\n active.acceptingTools = false;\n active.approvals.clear();\n await active.started;\n if (this.active !== active) return;\n if (!active.terminal) await this.rpc.request(\"turn/interrupt\", { threadId: this.threadId, turnId: active.id });\n try { await active.completion; } catch (error) {\n if (!(error instanceof AgentError) || error.code !== \"INTERRUPTED\") throw error;\n }\n }\n\n async resume(): Promise<string> { throw new AgentError(\"RECOVERY_UNSUPPORTED\", \"Codex does not expose retry of a failed turn without replay.\"); }\n async close(): Promise<void> {\n const active = this.active;\n if (active) { active.acceptingTools = false; active.approvals.clear(); }\n await this.rpc.close();\n if (active) await Promise.allSettled([...active.tools]);\n }\n}\n\nfunction codexContent(result: ExecutedToolResult) {\n if (typeof result === \"string\") return [{ type: \"inputText\" as const, text: result }];\n return result.content.map(block => block.type === \"text\"\n ? { type: \"inputText\" as const, text: block.text }\n : { type: \"inputImage\" as const, imageUrl: `data:${block.mimeType};base64,${block.data}` });\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import type { PermissionRequest } from "@github/copilot-sdk";
2
+ import { AgentError } from "../errors.js";
3
+ import type { ApprovalHandler } from "../approvals/types.js";
4
+ type NativePermissionRpc = {
5
+ handlePendingPermissionRequest(params: {
6
+ requestId: string;
7
+ result: {
8
+ kind: string;
9
+ };
10
+ }): Promise<unknown>;
11
+ };
12
+ export declare class CopilotPermissions {
13
+ private readonly handler;
14
+ private readonly fail;
15
+ private readonly approvals;
16
+ constructor(handler: ApprovalHandler | undefined, fail: (error: AgentError) => void);
17
+ handle(rpc: NativePermissionRpc, data: {
18
+ requestId: string;
19
+ permissionRequest: PermissionRequest;
20
+ resolvedByHook?: boolean;
21
+ }): void;
22
+ withdraw(requestId: string): void;
23
+ clear(): void;
24
+ private answer;
25
+ }
26
+ export {};
@@ -0,0 +1,121 @@
1
+ import { AgentError } from "../errors.js";
2
+ import { approvalContext } from "./approval-context.js";
3
+ import { NativeApprovals } from "./approval-lifetime.js";
4
+ export class CopilotPermissions {
5
+ handler;
6
+ fail;
7
+ approvals = new NativeApprovals();
8
+ constructor(handler, fail) {
9
+ this.handler = handler;
10
+ this.fail = fail;
11
+ }
12
+ handle(rpc, data) {
13
+ if (data.resolvedByHook)
14
+ return;
15
+ void this.answer(rpc, data);
16
+ }
17
+ withdraw(requestId) { this.approvals.withdraw(requestId); }
18
+ clear() { this.approvals.clear(); }
19
+ async answer(rpc, data) {
20
+ let decision;
21
+ try {
22
+ if (!this.handler)
23
+ throw unsupported("Copilot requested native permission but no approval handler is available.");
24
+ const request = approvalRequest(data.permissionRequest);
25
+ const content = await this.approvals.request(data.requestId, request, this.handler);
26
+ decision = content.decision;
27
+ }
28
+ catch (error) {
29
+ if (error instanceof AgentError && error.code === "REQUEST_EXPIRED")
30
+ return;
31
+ const safe = error instanceof AgentError
32
+ ? error
33
+ : unsupported("Copilot requested a permission that could not be handled safely.");
34
+ this.fail(safe);
35
+ try {
36
+ await rpc.handlePendingPermissionRequest({
37
+ requestId: data.requestId,
38
+ result: { kind: "user-not-available" },
39
+ });
40
+ }
41
+ catch { }
42
+ return;
43
+ }
44
+ try {
45
+ await rpc.handlePendingPermissionRequest({
46
+ requestId: data.requestId,
47
+ result: { kind: decision },
48
+ });
49
+ }
50
+ catch {
51
+ this.fail(new AgentError("HARNESS_ERROR", "Copilot could not apply the native permission response."));
52
+ }
53
+ }
54
+ }
55
+ function approvalRequest(request) {
56
+ if (request.managedApprovalRequired === true) {
57
+ throw unsupported("Copilot requires a verified human response for this permission request.");
58
+ }
59
+ if ("requestSandboxBypass" in request && request.requestSandboxBypass === true) {
60
+ throw unsupported("Copilot requested an unsupported sandbox-bypass permission.");
61
+ }
62
+ const context = permissionContext(request);
63
+ const message = permissionMessage(request);
64
+ return {
65
+ kind: "permission",
66
+ harness: "copilot",
67
+ message,
68
+ requestedSchema: {
69
+ type: "object",
70
+ properties: {
71
+ decision: {
72
+ type: "string",
73
+ oneOf: [
74
+ { const: "approve-once", title: "Allow once" },
75
+ { const: "reject", title: "Deny" },
76
+ ],
77
+ },
78
+ },
79
+ required: ["decision"],
80
+ additionalProperties: false,
81
+ },
82
+ context,
83
+ };
84
+ }
85
+ function permissionContext(request) {
86
+ const source = request;
87
+ switch (request.kind) {
88
+ case "shell":
89
+ return approvalContext(source, ["kind", "toolCallId", "intention", "fullCommandText", "commands", "possiblePaths", "possibleUrls", "hasWriteFileRedirection", "warning"]);
90
+ case "write":
91
+ return approvalContext(source, ["kind", "toolCallId", "intention", "fileName", "diff", "newFileContents"]);
92
+ case "read":
93
+ return approvalContext(source, ["kind", "toolCallId", "intention", "path"]);
94
+ case "mcp":
95
+ return approvalContext(source, ["kind", "toolCallId", "serverName", "toolName", "toolTitle", "readOnly", "args"]);
96
+ case "url":
97
+ return approvalContext(source, ["kind", "toolCallId", "intention", "url", "redirectedFrom"]);
98
+ case "custom-tool":
99
+ return approvalContext(source, ["kind", "toolCallId", "toolName", "toolDescription", "args"]);
100
+ case "hook":
101
+ return approvalContext(source, ["kind", "toolCallId", "toolName", "hookMessage", "toolArgs"]);
102
+ default:
103
+ throw unsupported("Copilot requested a native permission that cannot be represented safely.");
104
+ }
105
+ }
106
+ function permissionMessage(request) {
107
+ switch (request.kind) {
108
+ case "shell": return request.intention || "Allow Copilot to run the requested shell command?";
109
+ case "write": return request.intention || `Allow Copilot to write ${request.fileName}?`;
110
+ case "read": return request.intention || `Allow Copilot to read ${request.path}?`;
111
+ case "mcp": return request.toolTitle || `Allow Copilot to call ${request.toolName}?`;
112
+ case "url": return request.intention || `Allow Copilot to access ${request.url}?`;
113
+ case "custom-tool": return `Allow Copilot to call ${request.toolName}?`;
114
+ case "hook": return request.hookMessage || `Allow Copilot to run the hook for ${request.toolName}?`;
115
+ default: throw unsupported("Copilot requested a native permission that cannot be represented safely.");
116
+ }
117
+ }
118
+ function unsupported(message) {
119
+ return new AgentError("INPUT_REQUIRED", message);
120
+ }
121
+ //# sourceMappingURL=copilot-permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-permissions.js","sourceRoot":"","sources":["../../src/adapters/copilot-permissions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAMzD,MAAM,OAAO,kBAAkB;IAIV,OAAO;IACP,IAAI;IAJN,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;IAEnD,YACmB,OAAoC,EACpC,IAAiC;uBADjC,OAAO;oBACP,IAAI;IACpB,CAAC;IAEJ,MAAM,CAAC,GAAwB,EAAE,IAIhC;QACC,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO;QAChC,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,QAAQ,CAAC,SAAiB,IAAU,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACzE,KAAK,KAAW,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAEjC,KAAK,CAAC,MAAM,CAAC,GAAwB,EAAE,IAG9C;QACC,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,MAAM,WAAW,CAAC,2EAA2E,CAAC,CAAC;YAClH,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACpF,QAAQ,GAAG,OAAO,CAAC,QAAkB,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB;gBAAE,OAAO;YAC5E,MAAM,IAAI,GAAG,KAAK,YAAY,UAAU;gBACtC,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,WAAW,CAAC,kEAAkE,CAAC,CAAC;YACpF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,8BAA8B,CAAC;oBACvC,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,MAAM,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE;iBACvC,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,8BAA8B,CAAC;gBACvC,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAC3B,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,eAAe,EAAE,yDAAyD,CAAC,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;CACF;AAED,SAAS,eAAe,CAAC,OAA0B;IACjD,IAAI,OAAO,CAAC,uBAAuB,KAAK,IAAI,EAAE,CAAC;QAC7C,MAAM,WAAW,CAAC,yEAAyE,CAAC,CAAC;IAC/F,CAAC;IACD,IAAI,sBAAsB,IAAI,OAAO,IAAI,OAAO,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;QAC/E,MAAM,WAAW,CAAC,6DAA6D,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,SAAS;QAClB,OAAO;QACP,eAAe,EAAE;YACf,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE;wBACL,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE;wBAC9C,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;qBACnC;iBACF;aACF;YACD,QAAQ,EAAE,CAAC,UAAU,CAAC;YACtB,oBAAoB,EAAE,KAAK;SAC5B;QACD,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,OAA0B;IACnD,MAAM,MAAM,GAAG,OAA6C,CAAC;IAC7D,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,OAAO;YACV,OAAO,eAAe,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,yBAAyB,EAAE,SAAS,CAAC,CAAC,CAAC;QAC5K,KAAK,OAAO;YACV,OAAO,eAAe,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC7G,KAAK,MAAM;YACT,OAAO,eAAe,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9E,KAAK,KAAK;YACR,OAAO,eAAe,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QACpH,KAAK,KAAK;YACR,OAAO,eAAe,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC/F,KAAK,aAAa;YAChB,OAAO,eAAe,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;QAChG,KAAK,MAAM;YACT,OAAO,eAAe,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;QAChG;YACE,MAAM,WAAW,CAAC,0EAA0E,CAAC,CAAC;IAClG,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,OAA0B;IACnD,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,OAAO,EAAE,OAAO,OAAO,CAAC,SAAS,IAAI,mDAAmD,CAAC;QAC9F,KAAK,OAAO,EAAE,OAAO,OAAO,CAAC,SAAS,IAAI,0BAA0B,OAAO,CAAC,QAAQ,GAAG,CAAC;QACxF,KAAK,MAAM,EAAE,OAAO,OAAO,CAAC,SAAS,IAAI,yBAAyB,OAAO,CAAC,IAAI,GAAG,CAAC;QAClF,KAAK,KAAK,EAAE,OAAO,OAAO,CAAC,SAAS,IAAI,yBAAyB,OAAO,CAAC,QAAQ,GAAG,CAAC;QACrF,KAAK,KAAK,EAAE,OAAO,OAAO,CAAC,SAAS,IAAI,2BAA2B,OAAO,CAAC,GAAG,GAAG,CAAC;QAClF,KAAK,aAAa,EAAE,OAAO,yBAAyB,OAAO,CAAC,QAAQ,GAAG,CAAC;QACxE,KAAK,MAAM,EAAE,OAAO,OAAO,CAAC,WAAW,IAAI,qCAAqC,OAAO,CAAC,QAAQ,GAAG,CAAC;QACpG,SAAS,MAAM,WAAW,CAAC,0EAA0E,CAAC,CAAC;IACzG,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,IAAI,UAAU,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC","sourcesContent":["import type { PermissionRequest } from \"@github/copilot-sdk\";\nimport { AgentError } from \"../errors.js\";\nimport type { ApprovalHandler, NativeApprovalRequest } from \"../approvals/types.js\";\nimport { approvalContext } from \"./approval-context.js\";\nimport { NativeApprovals } from \"./approval-lifetime.js\";\n\ntype NativePermissionRpc = {\n handlePendingPermissionRequest(params: { requestId: string; result: { kind: string } }): Promise<unknown>;\n};\n\nexport class CopilotPermissions {\n private readonly approvals = new NativeApprovals();\n\n constructor(\n private readonly handler: ApprovalHandler | undefined,\n private readonly fail: (error: AgentError) => void,\n ) {}\n\n handle(rpc: NativePermissionRpc, data: {\n requestId: string;\n permissionRequest: PermissionRequest;\n resolvedByHook?: boolean;\n }): void {\n if (data.resolvedByHook) return;\n void this.answer(rpc, data);\n }\n\n withdraw(requestId: string): void { this.approvals.withdraw(requestId); }\n clear(): void { this.approvals.clear(); }\n\n private async answer(rpc: NativePermissionRpc, data: {\n requestId: string;\n permissionRequest: PermissionRequest;\n }): Promise<void> {\n let decision: string;\n try {\n if (!this.handler) throw unsupported(\"Copilot requested native permission but no approval handler is available.\");\n const request = approvalRequest(data.permissionRequest);\n const content = await this.approvals.request(data.requestId, request, this.handler);\n decision = content.decision as string;\n } catch (error) {\n if (error instanceof AgentError && error.code === \"REQUEST_EXPIRED\") return;\n const safe = error instanceof AgentError\n ? error\n : unsupported(\"Copilot requested a permission that could not be handled safely.\");\n this.fail(safe);\n try {\n await rpc.handlePendingPermissionRequest({\n requestId: data.requestId,\n result: { kind: \"user-not-available\" },\n });\n } catch {}\n return;\n }\n\n try {\n await rpc.handlePendingPermissionRequest({\n requestId: data.requestId,\n result: { kind: decision },\n });\n } catch {\n this.fail(new AgentError(\"HARNESS_ERROR\", \"Copilot could not apply the native permission response.\"));\n }\n }\n}\n\nfunction approvalRequest(request: PermissionRequest): NativeApprovalRequest {\n if (request.managedApprovalRequired === true) {\n throw unsupported(\"Copilot requires a verified human response for this permission request.\");\n }\n if (\"requestSandboxBypass\" in request && request.requestSandboxBypass === true) {\n throw unsupported(\"Copilot requested an unsupported sandbox-bypass permission.\");\n }\n\n const context = permissionContext(request);\n const message = permissionMessage(request);\n return {\n kind: \"permission\",\n harness: \"copilot\",\n message,\n requestedSchema: {\n type: \"object\",\n properties: {\n decision: {\n type: \"string\",\n oneOf: [\n { const: \"approve-once\", title: \"Allow once\" },\n { const: \"reject\", title: \"Deny\" },\n ],\n },\n },\n required: [\"decision\"],\n additionalProperties: false,\n },\n context,\n };\n}\n\nfunction permissionContext(request: PermissionRequest): Record<string, unknown> {\n const source = request as unknown as Record<string, unknown>;\n switch (request.kind) {\n case \"shell\":\n return approvalContext(source, [\"kind\", \"toolCallId\", \"intention\", \"fullCommandText\", \"commands\", \"possiblePaths\", \"possibleUrls\", \"hasWriteFileRedirection\", \"warning\"]);\n case \"write\":\n return approvalContext(source, [\"kind\", \"toolCallId\", \"intention\", \"fileName\", \"diff\", \"newFileContents\"]);\n case \"read\":\n return approvalContext(source, [\"kind\", \"toolCallId\", \"intention\", \"path\"]);\n case \"mcp\":\n return approvalContext(source, [\"kind\", \"toolCallId\", \"serverName\", \"toolName\", \"toolTitle\", \"readOnly\", \"args\"]);\n case \"url\":\n return approvalContext(source, [\"kind\", \"toolCallId\", \"intention\", \"url\", \"redirectedFrom\"]);\n case \"custom-tool\":\n return approvalContext(source, [\"kind\", \"toolCallId\", \"toolName\", \"toolDescription\", \"args\"]);\n case \"hook\":\n return approvalContext(source, [\"kind\", \"toolCallId\", \"toolName\", \"hookMessage\", \"toolArgs\"]);\n default:\n throw unsupported(\"Copilot requested a native permission that cannot be represented safely.\");\n }\n}\n\nfunction permissionMessage(request: PermissionRequest): string {\n switch (request.kind) {\n case \"shell\": return request.intention || \"Allow Copilot to run the requested shell command?\";\n case \"write\": return request.intention || `Allow Copilot to write ${request.fileName}?`;\n case \"read\": return request.intention || `Allow Copilot to read ${request.path}?`;\n case \"mcp\": return request.toolTitle || `Allow Copilot to call ${request.toolName}?`;\n case \"url\": return request.intention || `Allow Copilot to access ${request.url}?`;\n case \"custom-tool\": return `Allow Copilot to call ${request.toolName}?`;\n case \"hook\": return request.hookMessage || `Allow Copilot to run the hook for ${request.toolName}?`;\n default: throw unsupported(\"Copilot requested a native permission that cannot be represented safely.\");\n }\n}\n\nfunction unsupported(message: string): AgentError {\n return new AgentError(\"INPUT_REQUIRED\", message);\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import type { Tool } from "@github/copilot-sdk";
2
+ import type { ExecutionDefinition } from "./types.js";
3
+ /** Owns SDK callback admission independently from native turn acknowledgement. */
4
+ export declare function copilotTools(agent: Pick<ExecutionDefinition, "tools">): {
5
+ config: {} | {
6
+ tools: Tool<unknown>[];
7
+ };
8
+ names: string[];
9
+ start(): void;
10
+ stopAdmission(): void;
11
+ drain(): Promise<void>;
12
+ };
@@ -0,0 +1,61 @@
1
+ import { AgentError } from "../errors.js";
2
+ import { executeTool, toolJsonSchema } from "../sdk/tools.js";
3
+ /** Owns SDK callback admission independently from native turn acknowledgement. */
4
+ export function copilotTools(agent) {
5
+ const pending = new Set();
6
+ let accepting = false;
7
+ const tools = Object.entries(agent.tools ?? {}).map(([name, definition]) => ({
8
+ name,
9
+ description: definition.description,
10
+ parameters: toolJsonSchema(definition),
11
+ skipPermission: true,
12
+ defer: "never",
13
+ handler(args) {
14
+ if (!accepting)
15
+ return toolFailure("The task is not accepting tool calls.");
16
+ const execution = runTool(definition, args);
17
+ pending.add(execution);
18
+ void execution.finally(() => pending.delete(execution));
19
+ return execution;
20
+ },
21
+ }));
22
+ return {
23
+ config: tools.length === 0 ? {} : { tools },
24
+ names: tools.map(tool => tool.name),
25
+ start() { accepting = true; },
26
+ stopAdmission() { accepting = false; },
27
+ async drain() {
28
+ accepting = false;
29
+ await Promise.allSettled([...pending]);
30
+ },
31
+ };
32
+ }
33
+ async function runTool(definition, args) {
34
+ try {
35
+ return nativeResult(await executeTool(definition, args));
36
+ }
37
+ catch (error) {
38
+ return toolFailure(error instanceof AgentError ? `Tool failed (${error.code}).` : "The custom tool failed.");
39
+ }
40
+ }
41
+ function nativeResult(result) {
42
+ if (typeof result === "string")
43
+ return { resultType: "success", textResultForLlm: result };
44
+ const text = [];
45
+ const images = [];
46
+ for (const block of result.content) {
47
+ if (block.type === "text")
48
+ text.push(block.text);
49
+ else
50
+ images.push({ type: "image", mimeType: block.mimeType, data: block.data });
51
+ }
52
+ return {
53
+ resultType: "success",
54
+ textResultForLlm: text.join("\n"),
55
+ ...(images.length > 0 ? { binaryResultsForLlm: images } : {}),
56
+ };
57
+ }
58
+ function toolFailure(text) {
59
+ return { resultType: "failure", textResultForLlm: text, error: text };
60
+ }
61
+ //# sourceMappingURL=copilot-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-tools.js","sourceRoot":"","sources":["../../src/adapters/copilot-tools.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Tool, ToolResultObject } from \"@github/copilot-sdk\";\nimport { AgentError } from \"../errors.js\";\nimport { executeTool, toolJsonSchema } from \"../sdk/tools.js\";\nimport type { ExecutedToolResult } from \"../sdk/tool-result.js\";\nimport type { ToolDefinition } from \"../sdk/types.js\";\nimport type { ExecutionDefinition } from \"./types.js\";\n\n/** Owns SDK callback admission independently from native turn acknowledgement. */\nexport function copilotTools(agent: Pick<ExecutionDefinition, \"tools\">) {\n const pending = new Set<Promise<unknown>>();\n let accepting = false;\n const tools: Tool[] = Object.entries(agent.tools ?? {}).map(([name, definition]) => ({\n name,\n description: definition.description,\n parameters: toolJsonSchema(definition),\n skipPermission: true,\n defer: \"never\",\n handler(args) {\n if (!accepting) return toolFailure(\"The task is not accepting tool calls.\");\n const execution = runTool(definition, args);\n pending.add(execution);\n void execution.finally(() => pending.delete(execution));\n return execution;\n },\n }));\n\n return {\n config: tools.length === 0 ? {} : { tools },\n names: tools.map(tool => tool.name),\n start() { accepting = true; },\n stopAdmission() { accepting = false; },\n async drain() {\n accepting = false;\n await Promise.allSettled([...pending]);\n },\n };\n}\n\nasync function runTool(definition: ToolDefinition, args: unknown): Promise<ToolResultObject> {\n try {\n return nativeResult(await executeTool(definition, args));\n } catch (error) {\n return toolFailure(error instanceof AgentError ? `Tool failed (${error.code}).` : \"The custom tool failed.\");\n }\n}\n\nfunction nativeResult(result: ExecutedToolResult): ToolResultObject {\n if (typeof result === \"string\") return { resultType: \"success\", textResultForLlm: result };\n const text: string[] = [];\n const images: NonNullable<ToolResultObject[\"binaryResultsForLlm\"]> = [];\n for (const block of result.content) {\n if (block.type === \"text\") text.push(block.text);\n else images.push({ type: \"image\", mimeType: block.mimeType, data: block.data });\n }\n return {\n resultType: \"success\",\n textResultForLlm: text.join(\"\\n\"),\n ...(images.length > 0 ? { binaryResultsForLlm: images } : {}),\n };\n}\n\nfunction toolFailure(text: string): ToolResultObject {\n return { resultType: \"failure\", textResultForLlm: text, error: text };\n}\n"]}
@@ -0,0 +1,108 @@
1
+ import type { CopilotClientOptions, CurrentModel, GetAuthStatusResponse, ModelInfo, SessionConfig, SessionEvent } from "@github/copilot-sdk";
2
+ import type { AdapterOptions, NativeSession } from "./types.js";
3
+ type PermissionResult = {
4
+ readonly kind: string;
5
+ };
6
+ type AllowedModels = {
7
+ readonly allowedModels?: string[];
8
+ readonly effectiveAllowedModels?: string[];
9
+ readonly fallbackModel?: string;
10
+ readonly modelId?: string;
11
+ };
12
+ type CopilotEndpoint = {
13
+ readonly type: string;
14
+ readonly wireApi?: string;
15
+ readonly transport?: string;
16
+ readonly baseUrl: string;
17
+ readonly apiKey?: string;
18
+ readonly headers: Record<string, string | undefined>;
19
+ readonly sessionToken?: unknown;
20
+ };
21
+ export interface CopilotNativeSession {
22
+ readonly sessionId: string;
23
+ readonly rpc: {
24
+ readonly model: {
25
+ getCurrent(): Promise<CurrentModel>;
26
+ setAllowedModels(params: {
27
+ allowedModels: string[];
28
+ }): Promise<AllowedModels>;
29
+ };
30
+ readonly provider: {
31
+ getEndpoint(params?: {
32
+ modelId?: string;
33
+ }): Promise<CopilotEndpoint>;
34
+ };
35
+ readonly permissions: {
36
+ setMode(params: {
37
+ mode: "manual";
38
+ }): Promise<{
39
+ success: boolean;
40
+ mode: string;
41
+ }>;
42
+ setRequired(params: {
43
+ required: boolean;
44
+ }): Promise<{
45
+ success: boolean;
46
+ }>;
47
+ handlePendingPermissionRequest(params: {
48
+ requestId: string;
49
+ result: {
50
+ kind: string;
51
+ };
52
+ }): Promise<PermissionResult>;
53
+ };
54
+ readonly metadata: {
55
+ isProcessing(): Promise<{
56
+ processing: boolean;
57
+ }>;
58
+ activity(): Promise<{
59
+ abortable: boolean;
60
+ hasActiveWork: boolean;
61
+ }>;
62
+ };
63
+ readonly tools: {
64
+ getBuiltinDescriptors(params: Record<string, never>): Promise<{
65
+ tools: Array<{
66
+ name: string;
67
+ }>;
68
+ }>;
69
+ initializeAndValidate(): Promise<Record<string, never>>;
70
+ getCurrentMetadata(): Promise<{
71
+ tools: Array<{
72
+ name: string;
73
+ }> | null;
74
+ }>;
75
+ };
76
+ abort(params?: Record<string, never>): Promise<{
77
+ success: boolean;
78
+ }>;
79
+ };
80
+ on(handler: (event: SessionEvent) => void): () => void;
81
+ send(options: unknown): Promise<string>;
82
+ disconnect(): Promise<void>;
83
+ }
84
+ export interface CopilotNativeClient {
85
+ start(): Promise<void>;
86
+ createSession(config: SessionConfig): Promise<CopilotNativeSession>;
87
+ deleteSession(sessionId: string): Promise<void>;
88
+ stop(): Promise<Error[]>;
89
+ forceStop(): Promise<void>;
90
+ ping(message?: string): Promise<{
91
+ message: string;
92
+ timestamp: string;
93
+ protocolVersion?: number;
94
+ }>;
95
+ getAuthStatus(): Promise<GetAuthStatusResponse>;
96
+ listModels(): Promise<ModelInfo[]>;
97
+ }
98
+ export interface CopilotDependencies {
99
+ createClient(options: CopilotClientOptions): CopilotNativeClient;
100
+ cancellationTimeoutMs?: number;
101
+ cleanupTimeoutMs?: number;
102
+ healthIntervalMs?: number;
103
+ healthTimeoutMs?: number;
104
+ }
105
+ export declare const openCopilot: (options: AdapterOptions) => Promise<NativeSession>;
106
+ /** Dependency injection replaces only the native SDK/runtime boundary in tests. */
107
+ export declare function createCopilotOpener(deps: CopilotDependencies): (options: AdapterOptions) => Promise<NativeSession>;
108
+ export {};