subharness 0.0.4 → 0.0.7

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 (303) hide show
  1. package/README.md +95 -9
  2. package/dist/adapters/claude-process.d.ts +3 -0
  3. package/dist/adapters/claude-process.js +19 -2
  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-tools.d.ts +6 -2
  9. package/dist/adapters/claude-tools.js +14 -12
  10. package/dist/adapters/claude-tools.js.map +1 -1
  11. package/dist/adapters/claude-worker-client.d.ts +49 -0
  12. package/dist/adapters/claude-worker-client.js +359 -0
  13. package/dist/adapters/claude-worker-client.js.map +1 -0
  14. package/dist/adapters/claude-worker-process.d.ts +20 -0
  15. package/dist/adapters/claude-worker-process.js +76 -0
  16. package/dist/adapters/claude-worker-process.js.map +1 -0
  17. package/dist/adapters/claude-worker-protocol.d.ts +38 -0
  18. package/dist/adapters/claude-worker-protocol.js +2 -0
  19. package/dist/adapters/claude-worker-protocol.js.map +1 -0
  20. package/dist/adapters/claude-worker.d.ts +1 -0
  21. package/dist/adapters/claude-worker.js +126 -0
  22. package/dist/adapters/claude-worker.js.map +1 -0
  23. package/dist/adapters/claude.d.ts +16 -6
  24. package/dist/adapters/claude.js +164 -75
  25. package/dist/adapters/claude.js.map +1 -1
  26. package/dist/adapters/codex.js +4 -1
  27. package/dist/adapters/codex.js.map +1 -1
  28. package/dist/adapters/copilot-permissions.d.ts +26 -0
  29. package/dist/adapters/copilot-permissions.js +121 -0
  30. package/dist/adapters/copilot-permissions.js.map +1 -0
  31. package/dist/adapters/copilot-tools.d.ts +12 -0
  32. package/dist/adapters/copilot-tools.js +61 -0
  33. package/dist/adapters/copilot-tools.js.map +1 -0
  34. package/dist/adapters/copilot.d.ts +108 -0
  35. package/dist/adapters/copilot.js +819 -0
  36. package/dist/adapters/copilot.js.map +1 -0
  37. package/dist/adapters/cursor-cli-approvals.d.ts +2 -0
  38. package/dist/adapters/cursor-cli-approvals.js +83 -0
  39. package/dist/adapters/cursor-cli-approvals.js.map +1 -0
  40. package/dist/adapters/cursor-cli-model.d.ts +4 -0
  41. package/dist/adapters/cursor-cli-model.js +64 -0
  42. package/dist/adapters/cursor-cli-model.js.map +1 -0
  43. package/dist/adapters/cursor-cli-session.d.ts +32 -0
  44. package/dist/adapters/cursor-cli-session.js +316 -0
  45. package/dist/adapters/cursor-cli-session.js.map +1 -0
  46. package/dist/adapters/cursor-cli-tools.d.ts +20 -0
  47. package/dist/adapters/cursor-cli-tools.js +181 -0
  48. package/dist/adapters/cursor-cli-tools.js.map +1 -0
  49. package/dist/adapters/cursor-cli.d.ts +2 -0
  50. package/dist/adapters/cursor-cli.js +306 -0
  51. package/dist/adapters/cursor-cli.js.map +1 -0
  52. package/dist/adapters/cursor-model.d.ts +7 -0
  53. package/dist/adapters/cursor-model.js +67 -0
  54. package/dist/adapters/cursor-model.js.map +1 -0
  55. package/dist/adapters/cursor-rpc.d.ts +42 -0
  56. package/dist/adapters/cursor-rpc.js +271 -0
  57. package/dist/adapters/cursor-rpc.js.map +1 -0
  58. package/dist/adapters/cursor-session.d.ts +4 -0
  59. package/dist/adapters/cursor-session.js +327 -0
  60. package/dist/adapters/cursor-session.js.map +1 -0
  61. package/dist/adapters/cursor-startup.d.ts +16 -0
  62. package/dist/adapters/cursor-startup.js +74 -0
  63. package/dist/adapters/cursor-startup.js.map +1 -0
  64. package/dist/adapters/cursor-tools.d.ts +11 -0
  65. package/dist/adapters/cursor-tools.js +49 -0
  66. package/dist/adapters/cursor-tools.js.map +1 -0
  67. package/dist/adapters/cursor.d.ts +6 -0
  68. package/dist/adapters/cursor.js +17 -0
  69. package/dist/adapters/cursor.js.map +1 -0
  70. package/dist/adapters/fx-auth.d.ts +12 -2
  71. package/dist/adapters/fx-auth.js +51 -61
  72. package/dist/adapters/fx-auth.js.map +1 -1
  73. package/dist/adapters/fx-profile.d.ts +8 -0
  74. package/dist/adapters/fx-profile.js +101 -0
  75. package/dist/adapters/fx-profile.js.map +1 -0
  76. package/dist/adapters/fx-rpc.d.ts +2 -0
  77. package/dist/adapters/fx-rpc.js +30 -4
  78. package/dist/adapters/fx-rpc.js.map +1 -1
  79. package/dist/adapters/fx-status.d.ts +2 -0
  80. package/dist/adapters/fx-status.js +96 -0
  81. package/dist/adapters/fx-status.js.map +1 -0
  82. package/dist/adapters/fx.js +28 -12
  83. package/dist/adapters/fx.js.map +1 -1
  84. package/dist/adapters/opencode-access.d.ts +13 -0
  85. package/dist/adapters/opencode-access.js +76 -0
  86. package/dist/adapters/opencode-access.js.map +1 -0
  87. package/dist/adapters/opencode-config.d.ts +11 -0
  88. package/dist/adapters/opencode-config.js +238 -0
  89. package/dist/adapters/opencode-config.js.map +1 -0
  90. package/dist/adapters/opencode-http.d.ts +28 -0
  91. package/dist/adapters/opencode-http.js +297 -0
  92. package/dist/adapters/opencode-http.js.map +1 -0
  93. package/dist/adapters/opencode-tools.d.ts +19 -0
  94. package/dist/adapters/opencode-tools.js +127 -0
  95. package/dist/adapters/opencode-tools.js.map +1 -0
  96. package/dist/adapters/opencode.d.ts +2 -0
  97. package/dist/adapters/opencode.js +569 -0
  98. package/dist/adapters/opencode.js.map +1 -0
  99. package/dist/adapters/rpc.d.ts +3 -0
  100. package/dist/adapters/rpc.js +45 -4
  101. package/dist/adapters/rpc.js.map +1 -1
  102. package/dist/adapters/types.d.ts +5 -0
  103. package/dist/adapters/types.js.map +1 -1
  104. package/dist/approvals/types.d.ts +1 -1
  105. package/dist/approvals/types.js.map +1 -1
  106. package/dist/cli/args.d.ts +1 -1
  107. package/dist/cli/args.js +4 -1
  108. package/dist/cli/args.js.map +1 -1
  109. package/dist/cli/catalog-worker.js.map +1 -1
  110. package/dist/cli/dashboard-client.js +20 -31
  111. package/dist/cli/dashboard-client.js.map +1 -1
  112. package/dist/cli/dashboard-controller.d.ts +7 -0
  113. package/dist/cli/dashboard-controller.js +27 -0
  114. package/dist/cli/dashboard-controller.js.map +1 -0
  115. package/dist/cli/dashboard-detail-view.d.ts +1 -1
  116. package/dist/cli/dashboard-detail-view.js +3 -4
  117. package/dist/cli/dashboard-detail-view.js.map +1 -1
  118. package/dist/cli/dashboard-history-view.js.map +1 -1
  119. package/dist/cli/dashboard-input.d.ts +1 -1
  120. package/dist/cli/dashboard-input.js +11 -1
  121. package/dist/cli/dashboard-input.js.map +1 -1
  122. package/dist/cli/dashboard-layout.js +3 -3
  123. package/dist/cli/dashboard-layout.js.map +1 -1
  124. package/dist/cli/dashboard-renderer.js.map +1 -1
  125. package/dist/cli/dashboard-style.js +2 -2
  126. package/dist/cli/dashboard-style.js.map +1 -1
  127. package/dist/cli/dashboard.d.ts +2 -2
  128. package/dist/cli/dashboard.js +7 -32
  129. package/dist/cli/dashboard.js.map +1 -1
  130. package/dist/cli/help.d.ts +1 -1
  131. package/dist/cli/help.js +30 -12
  132. package/dist/cli/help.js.map +1 -1
  133. package/dist/cli/main.js +55 -43
  134. package/dist/cli/main.js.map +1 -1
  135. package/dist/config/access-provenance.d.ts +10 -0
  136. package/dist/config/access-provenance.js +31 -0
  137. package/dist/config/access-provenance.js.map +1 -0
  138. package/dist/config/access.d.ts +12 -2
  139. package/dist/config/access.js +125 -27
  140. package/dist/config/access.js.map +1 -1
  141. package/dist/config/loader.js +1 -0
  142. package/dist/config/loader.js.map +1 -1
  143. package/dist/config/oidc.js +4 -2
  144. package/dist/config/oidc.js.map +1 -1
  145. package/dist/config/project.js +2 -1
  146. package/dist/config/project.js.map +1 -1
  147. package/dist/config/resolve-access.js +24 -10
  148. package/dist/config/resolve-access.js.map +1 -1
  149. package/dist/errors.d.ts +2 -2
  150. package/dist/errors.js.map +1 -1
  151. package/dist/index.d.ts +8 -2
  152. package/dist/index.js +4 -1
  153. package/dist/index.js.map +1 -1
  154. package/dist/process-diagnostics.d.ts +2 -0
  155. package/dist/process-diagnostics.js +11 -0
  156. package/dist/process-diagnostics.js.map +1 -0
  157. package/dist/runtime/access-errors.d.ts +4 -0
  158. package/dist/runtime/access-errors.js +25 -0
  159. package/dist/runtime/access-errors.js.map +1 -0
  160. package/dist/runtime/approval-registry.d.ts +9 -0
  161. package/dist/runtime/approval-registry.js +144 -5
  162. package/dist/runtime/approval-registry.js.map +1 -1
  163. package/dist/runtime/capture.d.ts +22 -0
  164. package/dist/runtime/capture.js +320 -0
  165. package/dist/runtime/capture.js.map +1 -0
  166. package/dist/runtime/catalog.d.ts +39 -0
  167. package/dist/runtime/catalog.js +84 -0
  168. package/dist/runtime/catalog.js.map +1 -0
  169. package/dist/runtime/client.d.ts +2 -1
  170. package/dist/runtime/client.js +74 -47
  171. package/dist/runtime/client.js.map +1 -1
  172. package/dist/runtime/coordinator.d.ts +44 -7
  173. package/dist/runtime/coordinator.js +265 -31
  174. package/dist/runtime/coordinator.js.map +1 -1
  175. package/dist/runtime/daemon.js +12 -6
  176. package/dist/runtime/daemon.js.map +1 -1
  177. package/dist/runtime/dashboard-sanitize.d.ts +2 -0
  178. package/dist/runtime/dashboard-sanitize.js +7 -0
  179. package/dist/runtime/dashboard-sanitize.js.map +1 -0
  180. package/dist/runtime/dashboard-workspace.js +5 -1
  181. package/dist/runtime/dashboard-workspace.js.map +1 -1
  182. package/dist/runtime/dashboard.d.ts +1 -1
  183. package/dist/runtime/dashboard.js +2 -3
  184. package/dist/runtime/dashboard.js.map +1 -1
  185. package/dist/runtime/definition.d.ts +6 -1
  186. package/dist/runtime/definition.js +42 -2
  187. package/dist/runtime/definition.js.map +1 -1
  188. package/dist/runtime/native-owner.js +7 -1
  189. package/dist/runtime/native-owner.js.map +1 -1
  190. package/dist/runtime/pagination.d.ts +9 -0
  191. package/dist/runtime/pagination.js +36 -0
  192. package/dist/runtime/pagination.js.map +1 -0
  193. package/dist/runtime/sdk-observation.d.ts +8 -0
  194. package/dist/runtime/sdk-observation.js +75 -0
  195. package/dist/runtime/sdk-observation.js.map +1 -0
  196. package/dist/runtime/sdk-projection.d.ts +8 -0
  197. package/dist/runtime/sdk-projection.js +19 -0
  198. package/dist/runtime/sdk-projection.js.map +1 -0
  199. package/dist/runtime/sdk-service.d.ts +11 -0
  200. package/dist/runtime/sdk-service.js +109 -0
  201. package/dist/runtime/sdk-service.js.map +1 -0
  202. package/dist/runtime/select-native.d.ts +4 -1
  203. package/dist/runtime/select-native.js +28 -13
  204. package/dist/runtime/select-native.js.map +1 -1
  205. package/dist/runtime/service.d.ts +11 -1
  206. package/dist/runtime/service.js +178 -3
  207. package/dist/runtime/service.js.map +1 -1
  208. package/dist/runtime/session-launcher.js +1 -1
  209. package/dist/runtime/session-launcher.js.map +1 -1
  210. package/dist/runtime/snapshots.d.ts +103 -0
  211. package/dist/runtime/snapshots.js +124 -0
  212. package/dist/runtime/snapshots.js.map +1 -0
  213. package/dist/runtime/state.d.ts +26 -0
  214. package/dist/runtime/state.js +86 -17
  215. package/dist/runtime/state.js.map +1 -1
  216. package/dist/runtime/task-data.d.ts +38 -0
  217. package/dist/runtime/task-data.js +2 -0
  218. package/dist/runtime/task-data.js.map +1 -0
  219. package/dist/runtime/transport.d.ts +13 -0
  220. package/dist/runtime/transport.js +166 -0
  221. package/dist/runtime/transport.js.map +1 -0
  222. package/dist/runtime/types.d.ts +28 -9
  223. package/dist/runtime/types.js.map +1 -1
  224. package/dist/runtime/worker-client.js +40 -13
  225. package/dist/runtime/worker-client.js.map +1 -1
  226. package/dist/runtime/worker-server.js +105 -24
  227. package/dist/runtime/worker-server.js.map +1 -1
  228. package/dist/sdk/connected-types.d.ts +42 -0
  229. package/dist/sdk/connected-types.js +2 -0
  230. package/dist/sdk/connected-types.js.map +1 -0
  231. package/dist/sdk/connected.d.ts +3 -0
  232. package/dist/sdk/connected.js +232 -0
  233. package/dist/sdk/connected.js.map +1 -0
  234. package/dist/sdk/definitions.d.ts +4 -1
  235. package/dist/sdk/definitions.js +16 -2
  236. package/dist/sdk/definitions.js.map +1 -1
  237. package/dist/sdk/execution-definition.d.ts +3 -0
  238. package/dist/sdk/execution-definition.js +59 -0
  239. package/dist/sdk/execution-definition.js.map +1 -0
  240. package/dist/sdk/execution-driver.d.ts +6 -0
  241. package/dist/sdk/execution-driver.js +86 -0
  242. package/dist/sdk/execution-driver.js.map +1 -0
  243. package/dist/sdk/execution-observation.d.ts +3 -0
  244. package/dist/sdk/execution-observation.js +35 -0
  245. package/dist/sdk/execution-observation.js.map +1 -0
  246. package/dist/sdk/execution-options.d.ts +17 -0
  247. package/dist/sdk/execution-options.js +115 -0
  248. package/dist/sdk/execution-options.js.map +1 -0
  249. package/dist/sdk/execution-types.d.ts +72 -0
  250. package/dist/sdk/execution-types.js +2 -0
  251. package/dist/sdk/execution-types.js.map +1 -0
  252. package/dist/sdk/execution.d.ts +3 -0
  253. package/dist/sdk/execution.js +3 -0
  254. package/dist/sdk/execution.js.map +1 -0
  255. package/dist/sdk/hosted-error.d.ts +3 -0
  256. package/dist/sdk/hosted-error.js +14 -0
  257. package/dist/sdk/hosted-error.js.map +1 -0
  258. package/dist/sdk/hosted.d.ts +23 -0
  259. package/dist/sdk/hosted.js +204 -0
  260. package/dist/sdk/hosted.js.map +1 -0
  261. package/dist/sdk/permission-validation.js +10 -1
  262. package/dist/sdk/permission-validation.js.map +1 -1
  263. package/dist/sdk/runner.d.ts +5 -0
  264. package/dist/sdk/runner.js +107 -0
  265. package/dist/sdk/runner.js.map +1 -0
  266. package/dist/sdk/tools.js +4 -1
  267. package/dist/sdk/tools.js.map +1 -1
  268. package/dist/sdk/types.d.ts +29 -1
  269. package/dist/sdk/types.js.map +1 -1
  270. package/package.json +6 -3
  271. package/sdk/access-config.md +60 -4
  272. package/sdk/adapter-contract.md +13 -3
  273. package/sdk/additional-harnesses.md +43 -0
  274. package/sdk/agent-skill.md +2 -2
  275. package/sdk/agent.md +6 -4
  276. package/sdk/approvals.md +5 -1
  277. package/sdk/authentication.md +1 -1
  278. package/sdk/cli/dashboard-design.md +6 -0
  279. package/sdk/cli/index.md +9 -6
  280. package/sdk/cli/output.md +3 -1
  281. package/sdk/completion-notifications.md +2 -0
  282. package/sdk/config.md +1 -1
  283. package/sdk/copilot.md +53 -0
  284. package/sdk/cursor.md +68 -0
  285. package/sdk/diagnostics.md +29 -0
  286. package/sdk/distribution.md +5 -3
  287. package/sdk/evals.md +1 -1
  288. package/sdk/examples/chat-tool.ts +126 -0
  289. package/sdk/execution.md +743 -0
  290. package/sdk/fx.md +50 -5
  291. package/sdk/harnesses.md +13 -13
  292. package/sdk/index.md +45 -20
  293. package/sdk/message-delivery.md +2 -0
  294. package/sdk/opencode.md +57 -0
  295. package/sdk/permissions.md +6 -2
  296. package/sdk/plugins/sub-agents.md +4 -2
  297. package/sdk/project-team.md +25 -1
  298. package/sdk/sessions.md +2 -0
  299. package/sdk/tools.md +4 -2
  300. package/sdk/v1-runtime.md +8 -6
  301. package/dist/cli/catalog.d.ts +0 -26
  302. package/dist/cli/catalog.js +0 -41
  303. package/dist/cli/catalog.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"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","sourcesContent":["import { access } from \"node:fs/promises\";\nimport { constants } from \"node:fs\";\nimport { delimiter, join } from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport { query, resolveSettings, type AccountInfo, type Options, type SDKMessage, type SDKUserMessage, type Settings, type ModelInfo } from \"@anthropic-ai/claude-agent-sdk\";\nimport { AgentError } from \"../errors.js\";\nimport type { AdapterOptions, NativeSession } from \"./types.js\";\nimport { privateClaudeConfig } from \"./claude-config.js\";\nimport { claudeTools } from \"./claude-tools.js\";\nimport { ClaudeInput } from \"./claude-input.js\";\nimport { claudeDelegationPermissions } from \"./claude-permissions.js\";\nimport { claudeSettings, verifyClaudeAccess, verifyClaudePolicy, verifyClaudeOptions } from \"./claude-auth.js\";\nimport { ClaudeSettingsUnavailable, claudeDefaultUnavailable, readClaudeAppliedSettings, verifyAppliedClaudeEffort } from \"./claude-settings.js\";\nimport { NativeApprovals } from \"./approval-lifetime.js\";\nimport { claudeApproval } from \"./claude-approvals.js\";\nimport { ClaudeProcessOwner } from \"./claude-process.js\";\n\ninterface ClaudeQuery extends AsyncIterable<SDKMessage> {\n accountInfo(): Promise<AccountInfo>;\n supportedModels(): Promise<ModelInfo[]>;\n interrupt(): Promise<unknown>;\n close(): void;\n getSettings?(): Promise<unknown>;\n setModel?(model?: string): Promise<void>;\n}\nexport interface ClaudeDependencies {\n query(args: {prompt: AsyncIterable<SDKUserMessage>; options: Options}): ClaudeQuery;\n executable(env: NodeJS.ProcessEnv): Promise<string>;\n managedSettings(cwd: string): Promise<Settings[]>;\n}\n\nconst dependencies: ClaudeDependencies = {\n query,\n async managedSettings(cwd) {\n const settings = await resolveSettings({cwd, settingSources:[\"user\", \"project\", \"local\"]});\n return settings.sources.filter(source => source.source === \"managed\").map(source => source.settings);\n },\n async executable(env) {\n for (const directory of (env.PATH ?? \"\").split(delimiter)) {\n const file = join(directory, \"claude\");\n try { await access(file, constants.X_OK); return file; } catch { /* Try the next PATH entry. */ }\n }\n throw new AgentError(\"HARNESS_UNAVAILABLE\", \"Install Claude Code and make claude available on PATH.\");\n },\n};\n\nfunction addCatalogEquivalentModels(expected: Set<string>, models: ModelInfo[], selected: string): void {\n expected.add(selected);\n for (const model of models) {\n if (model.value !== selected && model.resolvedModel !== selected) continue;\n expected.add(model.value);\n if (model.resolvedModel) expected.add(model.resolvedModel);\n }\n}\n\nexport const openClaude = createClaudeOpener(dependencies);\n\n/** Dependency injection is internal and replaces only the external SDK boundary in tests. */\nexport function createClaudeOpener(deps: ClaudeDependencies) {\n return async (options: AdapterOptions): Promise<NativeSession> => {\n if (options.harness.kind !== \"claudeCode\") throw new AgentError(\"INVALID_CONFIG\", \"Claude Code received configuration for a different harness.\");\n const permissionMode = options.harness.permissionMode;\n const settings = claudeSettings(options);\n const executable = await deps.executable(options.env);\n verifyClaudePolicy(await deps.managedSettings(options.cwd), settings.settings as Settings);\n const tools = claudeTools(options.agent);\n const allowedTools = [\n ...(options.harness.allowedTools ?? []),\n ...(tools.config.allowedTools ?? []),\n ...claudeDelegationPermissions(options),\n ];\n const config = await privateClaudeConfig(settings.settings as Settings);\n const input = new ClaudeInput<SDKUserMessage>();\n const processOwner = new ClaudeProcessOwner();\n let inputFailure: AgentError | undefined;\n const approvals = new NativeApprovals();\n let acceptingApprovals = false;\n const requireInput = (toolName?: string) => {\n acceptingApprovals = false;\n approvals.clear();\n tools.stopAdmission();\n const subject = toolName && /^[A-Za-z_][A-Za-z0-9_-]{0,127}$/u.test(toolName)\n ? `approval for native tool ${toolName}`\n : \"interactive input\";\n inputFailure = new AgentError(\"INPUT_REQUIRED\", `Claude Code needs ${subject}. Configure its native permissions before retrying.`);\n };\n let native: ClaudeQuery;\n try { native = deps.query({prompt: input, options: {\n pathToClaudeCodeExecutable: executable,\n spawnClaudeCodeProcess: processOwner.spawn,\n cwd: options.cwd,\n ...settings,\n ...tools.config,\n ...(allowedTools.length ? {allowedTools} : {}),\n ...(options.harness.disallowedTools !== undefined ? {disallowedTools:[...options.harness.disallowedTools]} : {}),\n ...(permissionMode !== undefined ? {permissionMode} : {}),\n ...(permissionMode === \"bypassPermissions\" ? {allowDangerouslySkipPermissions:true} : {}),\n settings: config.path,\n stderr: () => {},\n ...(options.harness.model ? {model: options.harness.model} : {}),\n systemPrompt: options.agent.instructions\n ? {type: \"preset\", preset: \"claude_code\", append: options.agent.instructions}\n : {type: \"preset\", preset: \"claude_code\"},\n settingSources: [\"user\", \"project\", \"local\"],\n canUseTool: async (toolName, toolInput, metadata) => {\n if (options.onApproval && acceptingApprovals && toolName !== \"AskUserQuestion\") {\n try {\n const answer = await claudeApproval(approvals, options.onApproval, toolName, toolInput, metadata);\n if (!acceptingApprovals || metadata.signal.aborted) return {behavior:\"deny\",message:\"The permission request is no longer pending.\"};\n return answer;\n }\n catch (error) {\n if (error instanceof AgentError && error.code === \"REQUEST_EXPIRED\") return {behavior:\"deny\",message:\"The permission request is no longer pending.\"};\n }\n }\n requireInput(toolName);\n return {behavior: \"deny\", message: inputFailure!.message, interrupt: true};\n },\n onElicitation: async () => {\n acceptingApprovals = false;\n approvals.clear();\n requireInput();\n try { await native.interrupt(); } catch { native.close(); }\n return {action: \"decline\"};\n },\n }}); }\n catch {\n input.close();\n try { await processOwner.close(); }\n finally { await config.cleanup(); }\n throw new AgentError(\"HARNESS_UNAVAILABLE\", \"Claude Code could not start.\");\n }\n const expectedModels = new Set<string>();\n let retainedModel: string | undefined;\n try {\n verifyClaudeAccess(await native.accountInfo(), options.access);\n const models = await native.supportedModels();\n if (options.harness.model) {\n addCatalogEquivalentModels(expectedModels, models, options.harness.model);\n verifyClaudeOptions(models, options);\n try {\n const applied = await readClaudeAppliedSettings(native);\n if (!expectedModels.has(applied.model)) throw new AgentError(\"INVALID_CONFIG\", \"Claude Code selected a different model than requested.\");\n verifyAppliedClaudeEffort(applied.effort, options.harness.effort);\n retainedModel = applied.model;\n expectedModels.add(applied.model);\n } catch (error) {\n if (!(error instanceof ClaudeSettingsUnavailable)) throw error;\n }\n } else {\n if (!native.getSettings || !native.setModel) throw claudeDefaultUnavailable();\n let selected;\n try { selected = await readClaudeAppliedSettings(native); }\n catch (error) { if (error instanceof ClaudeSettingsUnavailable) throw claudeDefaultUnavailable(); throw error; }\n verifyClaudeOptions(models, options, selected.model);\n verifyAppliedClaudeEffort(selected.effort, options.harness.effort);\n addCatalogEquivalentModels(expectedModels, models, selected.model);\n try { await native.setModel(selected.model); } catch { throw claudeDefaultUnavailable(); }\n let pinned;\n try { pinned = await readClaudeAppliedSettings(native); }\n catch (error) { if (error instanceof ClaudeSettingsUnavailable) throw claudeDefaultUnavailable(); throw error; }\n if (!expectedModels.has(pinned.model)) throw claudeDefaultUnavailable();\n verifyAppliedClaudeEffort(pinned.effort, options.harness.effort);\n retainedModel = pinned.model;\n addCatalogEquivalentModels(expectedModels, models, pinned.model);\n }\n if (inputFailure) throw inputFailure;\n }\n catch (error) {\n input.close();\n native.close();\n try { await processOwner.close(); }\n finally { await config.cleanup(); }\n if (error instanceof AgentError) throw error;\n throw new AgentError(\"ACCESS_UNAVAILABLE\", \"Claude Code authentication could not be verified.\");\n }\n let closed = false;\n let preflight: {\n cancellation: Promise<never>;\n cancel(error: AgentError): void;\n stopped: Promise<void>;\n stop(): void;\n } | undefined;\n let sessionFailure: AgentError | undefined;\n let active: {\n resolve(text: string): void; reject(error: unknown): void;\n stopped: Promise<void>; stop(): void; interrupted: boolean;\n } | undefined;\n const reading = (async () => {\n try {\n for await (const message of native) {\n if (message.type === \"system\" && message.subtype === \"init\") {\n if (!expectedModels.has(message.model)) {\n sessionFailure = new AgentError(\"INVALID_CONFIG\", \"Claude Code selected a different model than requested.\");\n } else if (permissionMode !== undefined && message.permissionMode !== permissionMode) {\n sessionFailure = new AgentError(\"INVALID_CONFIG\", \"Claude Code reported a different permission mode than requested.\");\n }\n if (sessionFailure) {\n tools.stopAdmission();\n native.close();\n break;\n }\n }\n if (message.type !== \"result\" || !active) continue;\n const current = active;\n acceptingApprovals = false;\n approvals.clear();\n await tools.drain();\n active = undefined;\n current.stop();\n if (inputFailure) current.reject(inputFailure);\n else if (current.interrupted) current.reject(new AgentError(\"INTERRUPTED\", \"The native turn was interrupted.\"));\n else if (message.subtype === \"success\" && !message.is_error) {\n if (Buffer.byteLength(message.result, \"utf8\") > 1024 * 1024) {\n current.reject(new AgentError(\"RESPONSE_TOO_LARGE\", \"The Claude Code response exceeds 1 MiB.\"));\n } else current.resolve(message.result);\n }\n else current.reject(new AgentError(\"HARNESS_ERROR\", \"Claude Code could not complete the turn.\"));\n }\n } catch {\n // Native diagnostics may contain credentials; return a stable safe message.\n } finally {\n acceptingApprovals = false;\n approvals.clear();\n const code = closed ? \"SESSION_CLOSED\" : \"HARNESS_ERROR\";\n closed = true;\n input.close();\n await tools.drain();\n active?.reject(sessionFailure ?? inputFailure ?? new AgentError(code, \"The Claude Code process stopped before completing the turn.\"));\n active?.stop();\n active = undefined;\n try { await processOwner.close(); }\n finally { await config.cleanup(); }\n }\n })();\n return {\n async turn(prompt) {\n if (closed) return Promise.reject(sessionFailure ?? new AgentError(\"SESSION_CLOSED\", \"The native session has closed.\"));\n if (active || preflight) return Promise.reject(new AgentError(\"SESSION_BUSY\", \"A native turn is already active.\"));\n let cancel!: (error: AgentError) => void, stop!: () => void;\n const currentPreflight = {\n cancellation: new Promise<never>((_resolve, reject) => { cancel = reject; }),\n cancel(error: AgentError) { cancel(error); },\n stopped: new Promise<void>(resolve => { stop = resolve; }),\n stop() { stop(); },\n };\n preflight = currentPreflight;\n try {\n if (native.getSettings && retainedModel) {\n let applied;\n try { applied = await Promise.race([readClaudeAppliedSettings(native), currentPreflight.cancellation]); }\n catch (error) {\n if (error instanceof ClaudeSettingsUnavailable) throw new AgentError(\"INVALID_CONFIG\", \"Claude Code could not verify the retained session model before submission.\");\n throw error;\n }\n if (!expectedModels.has(applied.model)) throw new AgentError(\"INVALID_CONFIG\", \"Claude Code changed the retained session model before submission.\");\n verifyAppliedClaudeEffort(applied.effort, options.harness.effort);\n }\n if (closed) throw sessionFailure ?? new AgentError(\"SESSION_CLOSED\", \"The native session has closed.\");\n } finally {\n if (preflight === currentPreflight) preflight = undefined;\n currentPreflight.stop();\n }\n return await new Promise((resolve, reject) => {\n inputFailure = undefined;\n tools.start();\n let stop!: () => void;\n const stopped = new Promise<void>(resolve => { stop = resolve; });\n active = {resolve, reject, stopped, stop, interrupted:false};\n acceptingApprovals = true;\n input.push({type:\"user\",message:{role:\"user\",content:prompt},parent_tool_use_id:null,uuid:randomUUID()});\n });\n },\n async steer() { throw new AgentError(\"UNSUPPORTED_DELIVERY\", \"Claude Code does not expose verified active steering.\"); },\n async interrupt() {\n const pending = preflight;\n if (pending) {\n pending.cancel(new AgentError(\"INTERRUPTED\", \"The native turn was interrupted before submission.\"));\n await pending.stopped;\n return;\n }\n const current = active;\n if (!current) return;\n current.interrupted = true;\n acceptingApprovals = false;\n approvals.clear();\n tools.stopAdmission();\n try { await native.interrupt(); }\n catch {\n current.interrupted = false;\n throw new AgentError(\"CANCEL_FAILED\", \"Claude Code did not confirm interruption.\");\n }\n await current.stopped;\n },\n async resume() { throw new AgentError(\"RECOVERY_UNSUPPORTED\", \"Claude Code cannot retry failed execution without replaying input.\"); },\n async close() {\n closed = true;\n acceptingApprovals = false;\n approvals.clear();\n const pending = preflight;\n if (pending) {\n pending.cancel(new AgentError(\"SESSION_CLOSED\", \"The native session closed before submission.\"));\n await pending.stopped;\n }\n tools.stopAdmission();\n input.close();\n native.close();\n const stopping = processOwner.close();\n try { await reading; }\n finally { await stopping; }\n },\n };\n };\n}\n"]}
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC/G,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjJ,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAsB/D,SAAS,0BAA0B,CAAC,QAAqB,EAAE,MAAmB,EAAE,QAAgB;IAC9F,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,aAAa,KAAK,QAAQ;YAAE,SAAS;QAC3E,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,KAAK,CAAC,aAAa;YAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAMD,SAAS,oBAAoB,CAAC,KAA+C;IAC3E,OAAO,OAAO,IAAI,KAAK,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC;AAE/C,8FAA8F;AAC9F,MAAM,UAAU,kBAAkB,CAAC,aAAa,GAA6C,EAAE;IAC7F,IAAI,oBAAoB,CAAC,aAAa,CAAC;QAAE,OAAO,0BAA0B,CAAC,aAAa,CAAC,CAAC;IAC1F,OAAO,KAAK,EAAE,OAAuB,EAA0B,EAAE;QAC/D,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAC,aAAa,CAAC,CAAC;QACjE,IAAI,CAAC;YAAC,OAAO,MAAM,0BAA0B,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QAC9E,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC;gBAAC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YAAC,CAAC;YAC/B,MAAM,CAAC;gBACL,MAAM,OAAO,GAAG,KAAK,YAAY,UAAU,IAAI,KAAK,YAAY,cAAc;oBAC5E,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,gBAAgB,EAAC,6BAA6B,CAAC,CAAC;gBAC3E,MAAM,IAAI,cAAc,CACtB,CAAC,OAAO,EAAC,IAAI,UAAU,CAAC,gBAAgB,EAAC,oCAAoC,CAAC,CAAC,EAC/E,yCAAyC,CAC1C,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAwB;IAC1D,OAAO,KAAK,EAAE,OAAuB,EAA0B,EAAE;QAC/D,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY;YAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,6DAA6D,CAAC,CAAC;QACjJ,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC;QACtD,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtD,kBAAkB,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,QAAoB,CAAC,CAAC;QAC3F,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG;YACnB,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;YACvC,GAAG,KAAK,CAAC,YAAY;YACrB,GAAG,2BAA2B,CAAC,OAAO,CAAC;SACxC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,QAAoB,CAAC,CAAC;QACxE,MAAM,KAAK,GAAG,IAAI,WAAW,EAAkB,CAAC;QAChD,MAAM,YAAY,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAC9C,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,IAAI,cAAyC,CAAC;QAC9C,MAAM,gBAAgB,GAAG,GAAkB,EAAE;YAC3C,IAAI,eAAe;gBAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YAC9C,IAAI,cAAc;gBAAE,OAAO,cAAc,CAAC;YAC1C,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;gBAC3B,MAAM,QAAQ,GAAiB,EAAE,CAAC;gBAClC,IAAI,CAAC;oBAAC,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;gBAAC,CAAC;gBACnC,OAAO,KAAK,EAAE,CAAC;oBAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,gBAAgB,EAAC,qCAAqC,CAAC,CAAC,CAAC;gBAAC,CAAC;gBAC9I,IAAI,CAAC;oBAAC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;gBAAC,CAAC;gBAC/B,MAAM,CAAC;oBAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,gBAAgB,EAAC,mDAAmD,CAAC,CAAC,CAAC;gBAAC,CAAC;gBAC9G,IAAI,CAAC;oBAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;gBAAC,CAAC;gBAC/B,OAAO,KAAK,EAAE,CAAC;oBAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,gBAAgB,EAAC,oCAAoC,CAAC,CAAC,CAAC;gBAAC,CAAC;gBAC7I,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC7C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;oBAAE,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAC,6BAA6B,CAAC,CAAC;gBAC1F,eAAe,GAAG,IAAI,CAAC;YACzB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACjB,cAAc,GAAG,SAAS,CAAC;gBAC3B,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;YACH,OAAO,cAAc,CAAC;QACxB,CAAC,CAAC;QACF,IAAI,YAAoC,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;QACxC,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAC/B,MAAM,YAAY,GAAG,CAAC,QAAiB,EAAE,EAAE;YACzC,kBAAkB,GAAG,KAAK,CAAC;YAC3B,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,CAAC,aAAa,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,QAAQ,IAAI,kCAAkC,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC3E,CAAC,CAAC,4BAA4B,QAAQ,EAAE;gBACxC,CAAC,CAAC,mBAAmB,CAAC;YACxB,YAAY,GAAG,IAAI,UAAU,CAAC,gBAAgB,EAAE,qBAAqB,OAAO,qDAAqD,CAAC,CAAC;QACrI,CAAC,CAAC;QACF,IAAI,MAAmB,CAAC;QACxB,IAAI,CAAC;YAAC,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;oBACvD,0BAA0B,EAAE,UAAU;oBACtC,sBAAsB,EAAE,YAAY,CAAC,KAAK;oBAC1C,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,GAAG,QAAQ;oBACX,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,YAAY,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9C,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAC,eAAe,EAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChH,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAC,cAAc,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzD,GAAG,CAAC,cAAc,KAAK,mBAAmB,CAAC,CAAC,CAAC,EAAC,+BAA+B,EAAC,IAAI,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzF,QAAQ,EAAE,MAAM,CAAC,IAAI;oBACrB,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;oBAChB,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChE,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY;wBACtC,CAAC,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,EAAC;wBAC7E,CAAC,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAC;oBAC3C,cAAc,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;oBAC5C,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;wBAClD,IAAI,OAAO,CAAC,UAAU,IAAI,kBAAkB,IAAI,QAAQ,KAAK,iBAAiB,EAAE,CAAC;4BAC/E,IAAI,CAAC;gCACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;gCAClG,IAAI,CAAC,kBAAkB,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO;oCAAE,OAAO,EAAC,QAAQ,EAAC,MAAM,EAAC,OAAO,EAAC,8CAA8C,EAAC,CAAC;gCACpI,OAAO,MAAM,CAAC;4BAChB,CAAC;4BACD,OAAO,KAAK,EAAE,CAAC;gCACb,IAAI,KAAK,YAAY,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB;oCAAE,OAAO,EAAC,QAAQ,EAAC,MAAM,EAAC,OAAO,EAAC,8CAA8C,EAAC,CAAC;4BACvJ,CAAC;wBACH,CAAC;wBACD,YAAY,CAAC,QAAQ,CAAC,CAAC;wBACvB,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,YAAa,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC;oBAC7E,CAAC;oBACD,aAAa,EAAE,KAAK,IAAI,EAAE;wBACxB,kBAAkB,GAAG,KAAK,CAAC;wBAC3B,SAAS,CAAC,KAAK,EAAE,CAAC;wBAClB,YAAY,EAAE,CAAC;wBACf,IAAI,CAAC;4BAAC,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;wBAAC,CAAC;wBAAC,MAAM,CAAC;4BAAC,MAAM,CAAC,KAAK,EAAE,CAAC;wBAAC,CAAC;wBAC3D,OAAO,EAAC,MAAM,EAAE,SAAS,EAAC,CAAC;oBAC7B,CAAC;iBACF,EAAC,EAAE,EAAC,KAAK,EAAC,YAAY,EAAC,CAAC,CAAC;QAAC,CAAC;QAC5B,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,YAAY,CAAC,eAAe,EAAE,CAAC;YAC5C,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,KAAK,YAAY,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB;gBAC5E,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,qBAAqB,EAAE,8BAA8B,IAAI,GAAG,CAAC,CAAC;YACzF,IAAI,CAAC;gBAAC,MAAM,gBAAgB,EAAE,CAAC;YAAC,CAAC;YACjC,OAAO,YAAY,EAAE,CAAC;gBAAC,MAAM,IAAI,cAAc,CAAC,CAAC,OAAO,EAAC,YAAY,CAAC,EAAC,yCAAyC,CAAC,CAAC;YAAC,CAAC;YACpH,MAAM,OAAO,CAAC;QAChB,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,IAAI,aAAiC,CAAC;QACtC,IAAI,YAAY,GAAmF,oBAAoB,CAAC;QACxH,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;YAC3C,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAC5C,YAAY,GAAG,yBAAyB,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;YAC9C,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC1B,0BAA0B,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC1E,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACrC,YAAY,GAAG,2BAA2B,CAAC;gBAC3C,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC,MAAM,CAAC,CAAC;oBACxD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;wBAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,2FAA2F,CAAC,CAAC;oBAC5K,yBAAyB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAClE,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;oBAC9B,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,CAAC,KAAK,YAAY,yBAAyB,CAAC;wBAAE,MAAM,KAAK,CAAC;gBACjE,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,YAAY,GAAG,2BAA2B,CAAC;gBAC3C,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,QAAQ;oBAAE,MAAM,wBAAwB,EAAE,CAAC;gBAC9E,IAAI,QAAQ,CAAC;gBACb,IAAI,CAAC;oBAAC,QAAQ,GAAG,MAAM,yBAAyB,CAAC,MAAM,CAAC,CAAC;gBAAC,CAAC;gBAC3D,OAAO,KAAK,EAAE,CAAC;oBAAC,IAAI,KAAK,YAAY,yBAAyB;wBAAE,MAAM,wBAAwB,EAAE,CAAC;oBAAC,MAAM,KAAK,CAAC;gBAAC,CAAC;gBAChH,YAAY,GAAG,yBAAyB,CAAC;gBACzC,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACrD,YAAY,GAAG,2BAA2B,CAAC;gBAC3C,yBAAyB,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACnE,YAAY,GAAG,yBAAyB,CAAC;gBACzC,0BAA0B,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACnE,YAAY,GAAG,2BAA2B,CAAC;gBAC3C,IAAI,CAAC;oBAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC;oBAAC,MAAM,wBAAwB,EAAE,CAAC;gBAAC,CAAC;gBAC1F,IAAI,MAAM,CAAC;gBACX,IAAI,CAAC;oBAAC,MAAM,GAAG,MAAM,yBAAyB,CAAC,MAAM,CAAC,CAAC;gBAAC,CAAC;gBACzD,OAAO,KAAK,EAAE,CAAC;oBAAC,IAAI,KAAK,YAAY,yBAAyB;wBAAE,MAAM,wBAAwB,EAAE,CAAC;oBAAC,MAAM,KAAK,CAAC;gBAAC,CAAC;gBAChH,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBACtC,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,6GAA6G,CAAC,CAAC;gBACxJ,CAAC;gBACD,yBAAyB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACjE,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;gBAC7B,YAAY,GAAG,yBAAyB,CAAC;gBACzC,0BAA0B,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACjE,YAAY,GAAG,2BAA2B,CAAC;YAC7C,CAAC;YACD,IAAI,YAAY;gBAAE,MAAM,YAAY,CAAC;QACvC,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,YAAY,CAAC,eAAe,EAAE,CAAC;YAC5C,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK;gBACjD,CAAC,CAAC,IAAI,UAAU,CAAC,gBAAgB,EAAE,eAAe,YAAY,UAAU,IAAI,GAAG,CAAC,CAAC;YACnF,IAAI,CAAC;gBAAC,MAAM,gBAAgB,EAAE,CAAC;YAAC,CAAC;YACjC,OAAO,YAAY,EAAE,CAAC;gBAAC,MAAM,IAAI,cAAc,CAAC,CAAC,OAAO,EAAC,YAAY,CAAC,EAAC,yCAAyC,CAAC,CAAC;YAAC,CAAC;YACpH,MAAM,OAAO,CAAC;QAChB,CAAC;QACD,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,SAKS,CAAC;QACd,IAAI,cAAsC,CAAC;QAC3C,IAAI,uBAA2C,CAAC;QAChD,IAAI,MAGS,CAAC;QACd,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;YAC1B,IAAI,CAAC;gBACH,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;oBACnC,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;wBAC5D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;4BACvC,cAAc,GAAG,IAAI,UAAU,CAAC,gBAAgB,EAAE,qFAAqF,CAAC,CAAC;wBAC3I,CAAC;6BAAM,IAAI,cAAc,KAAK,SAAS,IAAI,OAAO,CAAC,cAAc,KAAK,cAAc,EAAE,CAAC;4BACrF,cAAc,GAAG,IAAI,UAAU,CAAC,gBAAgB,EAAE,kEAAkE,CAAC,CAAC;wBACxH,CAAC;wBACD,IAAI,cAAc,EAAE,CAAC;4BACnB,KAAK,CAAC,aAAa,EAAE,CAAC;4BACtB,MAAM,CAAC,KAAK,EAAE,CAAC;4BACf,MAAM;wBACR,CAAC;oBACH,CAAC;oBACD,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM;wBAAE,SAAS;oBACnD,MAAM,OAAO,GAAG,MAAM,CAAC;oBACvB,kBAAkB,GAAG,KAAK,CAAC;oBAC3B,SAAS,CAAC,KAAK,EAAE,CAAC;oBAClB,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;oBACpB,MAAM,GAAG,SAAS,CAAC;oBACnB,OAAO,CAAC,IAAI,EAAE,CAAC;oBACf,IAAI,YAAY;wBAAE,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;yBAC1C,IAAI,OAAO,CAAC,WAAW;wBAAE,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,aAAa,EAAE,kCAAkC,CAAC,CAAC,CAAC;yBAC3G,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;wBAC5D,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;4BAC5D,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,oBAAoB,EAAE,yCAAyC,CAAC,CAAC,CAAC;wBAClG,CAAC;;4BAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBACzC,CAAC;;wBACI,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;oBAChC,cAAc,GAAG,KAAK,CAAC;gBACzB,CAAC;gBACD,4EAA4E;YAC9E,CAAC;oBAAS,CAAC;gBACT,kBAAkB,GAAG,KAAK,CAAC;gBAC3B,SAAS,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,aAAa,GAAG,uBAAuB,KAAK,SAAS,CAAC;gBAC5D,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC;gBAChE,MAAM,GAAG,IAAI,CAAC;gBACd,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;gBACpB,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;gBACtF,MAAM,MAAM,GAAG,MAAM,CAAC;gBACtB,MAAM,EAAE,MAAM,CAAC,cAAc,IAAI,YAAY,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,kCAAkC,IAAI,8BAA8B,CAAC,CAAC,CAAC;gBAC7I,IAAI,CAAC;oBAAC,MAAM,gBAAgB,EAAE,CAAC;gBAAC,CAAC;wBACzB,CAAC;oBACP,MAAM,EAAE,IAAI,EAAE,CAAC;oBACf,IAAI,MAAM,KAAK,MAAM;wBAAE,MAAM,GAAG,SAAS,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QACL,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,YAAuC,CAAC;QAC5C,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,MAAM,KAAK,GAAG,GAAkB,EAAE;YAChC,IAAI,aAAa;gBAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YAC5C,IAAI,YAAY;gBAAE,OAAO,YAAY,CAAC;YACtC,YAAY,GAAG,CAAC,KAAK,IAAI,EAAE;gBACzB,uBAAuB,KAAK,YAAY,CAAC,eAAe,EAAE,CAAC;gBAC3D,MAAM,GAAG,IAAI,CAAC;gBACd,kBAAkB,GAAG,KAAK,CAAC;gBAC3B,SAAS,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,OAAO,GAAG,SAAS,CAAC;gBAC1B,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,gBAAgB,EAAE,8CAA8C,CAAC,CAAC,CAAC;oBACjG,MAAM,OAAO,CAAC,OAAO,CAAC;gBACxB,CAAC;gBACD,KAAK,CAAC,aAAa,EAAE,CAAC;gBACtB,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,eAAe,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,OAAO,CAAQ,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC;gBACtF,IAAI,cAAuB,CAAC;gBAC5B,IAAI,CAAC;oBAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAC,eAAe,CAAC,CAAC,CAAC;gBAAC,CAAC;gBACtD,OAAO,KAAK,EAAE,CAAC;oBAAC,cAAc,GAAG,KAAK,CAAC;gBAAC,CAAC;gBACzC,IAAI,cAAc,IAAI,mBAAmB,KAAK,CAAC;oBAAE,MAAM,cAAc,CAAC;gBACtE,IAAI,CAAC,eAAe;oBAAE,MAAM,gBAAgB,EAAE,CAAC;gBAC/C,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACjB,mBAAmB,IAAI,CAAC,CAAC;gBACzB,YAAY,GAAG,SAAS,CAAC;gBACzB,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;YACH,OAAO,YAAY,CAAC;QACtB,CAAC,CAAC;QACF,OAAO;YACL,KAAK,CAAC,IAAI,CAAC,MAAM;gBACf,IAAI,MAAM;oBAAE,OAAO,OAAO,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,UAAU,CAAC,gBAAgB,EAAE,gCAAgC,CAAC,CAAC,CAAC;gBACxH,IAAI,MAAM,IAAI,SAAS;oBAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,cAAc,EAAE,kCAAkC,CAAC,CAAC,CAAC;gBACnH,IAAI,MAAoC,EAAE,IAAiB,CAAC;gBAC5D,MAAM,gBAAgB,GAAG;oBACvB,YAAY,EAAE,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC5E,MAAM,CAAC,KAAiB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC5C,OAAO,EAAE,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC1D,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;iBACnB,CAAC;gBACF,SAAS,GAAG,gBAAgB,CAAC;gBAC7B,IAAI,CAAC;oBACH,IAAI,MAAM,CAAC,WAAW,IAAI,aAAa,EAAE,CAAC;wBACxC,IAAI,OAAO,CAAC;wBACZ,IAAI,CAAC;4BAAC,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC;wBAAC,CAAC;wBACzG,OAAO,KAAK,EAAE,CAAC;4BACb,IAAI,KAAK,YAAY,yBAAyB;gCAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,4EAA4E,CAAC,CAAC;4BACrK,MAAM,KAAK,CAAC;wBACd,CAAC;wBACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;4BAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,qFAAqF,CAAC,CAAC;wBACtK,yBAAyB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBACpE,CAAC;oBACD,IAAI,MAAM;wBAAE,MAAM,cAAc,IAAI,IAAI,UAAU,CAAC,gBAAgB,EAAE,gCAAgC,CAAC,CAAC;gBACzG,CAAC;wBAAS,CAAC;oBACT,IAAI,SAAS,KAAK,gBAAgB;wBAAE,SAAS,GAAG,SAAS,CAAC;oBAC1D,gBAAgB,CAAC,IAAI,EAAE,CAAC;gBAC1B,CAAC;gBACD,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBAC3C,YAAY,GAAG,SAAS,CAAC;oBACzB,KAAK,CAAC,KAAK,EAAE,CAAC;oBACd,IAAI,IAAiB,CAAC;oBACtB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClE,MAAM,GAAG,EAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAC,KAAK,EAAC,CAAC;oBAC7D,kBAAkB,GAAG,IAAI,CAAC;oBAC1B,KAAK,CAAC,IAAI,CAAC,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,MAAM,EAAC,EAAC,kBAAkB,EAAC,IAAI,EAAC,IAAI,EAAC,UAAU,EAAE,EAAC,CAAC,CAAC;gBAC3G,CAAC,CAAC,CAAC;YACL,CAAC;YACD,KAAK,CAAC,KAAK,KAAK,MAAM,IAAI,UAAU,CAAC,sBAAsB,EAAE,uDAAuD,CAAC,CAAC,CAAC,CAAC;YACxH,KAAK,CAAC,SAAS;gBACb,MAAM,OAAO,GAAG,SAAS,CAAC;gBAC1B,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,aAAa,EAAE,oDAAoD,CAAC,CAAC,CAAC;oBACpG,MAAM,OAAO,CAAC,OAAO,CAAC;oBACtB,OAAO;gBACT,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,CAAC;gBACvB,IAAI,CAAC,OAAO;oBAAE,OAAO;gBACrB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC3B,kBAAkB,GAAG,KAAK,CAAC;gBAC3B,SAAS,CAAC,KAAK,EAAE,CAAC;gBAClB,KAAK,CAAC,aAAa,EAAE,CAAC;gBACtB,IAAI,CAAC;oBAAC,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;gBAAC,CAAC;gBACjC,OAAO,KAAK,EAAE,CAAC;oBACb,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;oBAC5B,IAAI,KAAK,YAAY,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB;wBAAE,MAAM,KAAK,CAAC;oBAChF,MAAM,IAAI,UAAU,CAAC,eAAe,EAAE,2CAA2C,CAAC,CAAC;gBACrF,CAAC;gBACD,MAAM,OAAO,CAAC,OAAO,CAAC;YACxB,CAAC;YACD,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,UAAU,CAAC,sBAAsB,EAAE,oEAAoE,CAAC,CAAC,CAAC,CAAC;YACtI,KAAK;SACN,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { AccountInfo, Options, SDKMessage, SDKUserMessage, Settings, ModelInfo } from \"@anthropic-ai/claude-agent-sdk\";\nimport { AgentError } from \"../errors.js\";\nimport type { AdapterOptions, NativeSession } from \"./types.js\";\nimport { privateClaudeConfig } from \"./claude-config.js\";\nimport { claudeTools } from \"./claude-tools.js\";\nimport { ClaudeInput } from \"./claude-input.js\";\nimport { claudeDelegationPermissions } from \"./claude-permissions.js\";\nimport { claudeSettings, verifyClaudeAccess, verifyClaudePolicy, verifyClaudeOptions } from \"./claude-auth.js\";\nimport { ClaudeSettingsUnavailable, claudeDefaultUnavailable, readClaudeAppliedSettings, verifyAppliedClaudeEffort } from \"./claude-settings.js\";\nimport { NativeApprovals } from \"./approval-lifetime.js\";\nimport { claudeApproval } from \"./claude-approvals.js\";\nimport { ClaudeProcessOwner } from \"./claude-process.js\";\nimport { claudeResultFailure } from \"./claude-result.js\";\nimport { ClaudeWorkerClient } from \"./claude-worker-client.js\";\nimport type { ClaudeWorkerFactory } from \"./claude-worker-protocol.js\";\n\nexport interface ClaudeQuery extends AsyncIterable<SDKMessage> {\n accountInfo(): Promise<AccountInfo>;\n supportedModels(): Promise<ModelInfo[]>;\n interrupt(): Promise<unknown>;\n close(): void;\n getSettings?(): Promise<unknown>;\n setModel?(model?: string): Promise<void>;\n}\nexport interface ClaudeQueryBridge {\n readonly tools: ReturnType<typeof claudeTools>;\n readonly processOwner: ClaudeProcessOwner;\n}\nexport interface ClaudeDependencies {\n query(args: {prompt: AsyncIterable<SDKUserMessage>; options: Options}, bridge: ClaudeQueryBridge): ClaudeQuery | Promise<ClaudeQuery>;\n executable(env: NodeJS.ProcessEnv): Promise<string>;\n managedSettings(cwd: string): Promise<Settings[]>;\n dispose?(): Promise<void>;\n}\n\nfunction addCatalogEquivalentModels(expected: Set<string>, models: ModelInfo[], selected: string): void {\n expected.add(selected);\n for (const model of models) {\n if (model.value !== selected && model.resolvedModel !== selected) continue;\n expected.add(model.value);\n if (model.resolvedModel) expected.add(model.resolvedModel);\n }\n}\n\nexport interface ClaudeOpenerOptions {\n readonly createWorker?: ClaudeWorkerFactory;\n}\n\nfunction injectedDependencies(value: ClaudeDependencies | ClaudeOpenerOptions): value is ClaudeDependencies {\n return \"query\" in value;\n}\n\nexport const openClaude = createClaudeOpener();\n\n/** Dependency injection is internal and replaces only private process boundaries in tests. */\nexport function createClaudeOpener(configuration: ClaudeDependencies | ClaudeOpenerOptions = {}) {\n if (injectedDependencies(configuration)) return openClaudeWithDependencies(configuration);\n return async (options: AdapterOptions): Promise<NativeSession> => {\n const client = new ClaudeWorkerClient(options.env,configuration);\n try { return await openClaudeWithDependencies(client.dependencies)(options); }\n catch (error) {\n try { await client.dispose(); }\n catch {\n const startup = error instanceof AgentError || error instanceof AggregateError\n ? error : new AgentError(\"HARNESS_FAILED\",\"Claude Code startup failed.\");\n throw new AggregateError(\n [startup,new AgentError(\"HARNESS_FAILED\",\"Claude Code worker cleanup failed.\")],\n \"Claude Code startup and cleanup failed.\",\n );\n }\n throw error;\n }\n };\n}\n\nfunction openClaudeWithDependencies(deps: ClaudeDependencies) {\n return async (options: AdapterOptions): Promise<NativeSession> => {\n if (options.harness.kind !== \"claudeCode\") throw new AgentError(\"INVALID_CONFIG\", \"Claude Code received configuration for a different harness.\");\n const permissionMode = options.harness.permissionMode;\n const settings = claudeSettings(options);\n const executable = await deps.executable(options.env);\n verifyClaudePolicy(await deps.managedSettings(options.cwd), settings.settings as Settings);\n const tools = claudeTools(options.agent);\n const allowedTools = [\n ...(options.harness.allowedTools ?? []),\n ...tools.allowedTools,\n ...claudeDelegationPermissions(options),\n ];\n const config = await privateClaudeConfig(settings.settings as Settings);\n const input = new ClaudeInput<SDKUserMessage>();\n const processOwner = new ClaudeProcessOwner();\n let cleanupComplete = false;\n let cleanupAttempt: Promise<void> | undefined;\n const cleanupResources = (): Promise<void> => {\n if (cleanupComplete) return Promise.resolve();\n if (cleanupAttempt) return cleanupAttempt;\n cleanupAttempt = (async () => {\n const failures: AgentError[] = [];\n try { await processOwner.close(); }\n catch (error) { failures.push(error instanceof AgentError ? error : new AgentError(\"HARNESS_FAILED\",\"Claude Code process cleanup failed.\")); }\n try { await config.cleanup(); }\n catch { failures.push(new AgentError(\"HARNESS_FAILED\",\"Claude Code private configuration cleanup failed.\")); }\n try { await deps.dispose?.(); }\n catch (error) { failures.push(error instanceof AgentError ? error : new AgentError(\"HARNESS_FAILED\",\"Claude Code worker cleanup failed.\")); }\n if (failures.length === 1) throw failures[0];\n if (failures.length > 1) throw new AggregateError(failures,\"Claude Code cleanup failed.\");\n cleanupComplete = true;\n })().catch(error => {\n cleanupAttempt = undefined;\n throw error;\n });\n return cleanupAttempt;\n };\n let inputFailure: AgentError | undefined;\n const approvals = new NativeApprovals();\n let acceptingApprovals = false;\n const requireInput = (toolName?: string) => {\n acceptingApprovals = false;\n approvals.clear();\n tools.stopAdmission();\n const subject = toolName && /^[A-Za-z_][A-Za-z0-9_-]{0,127}$/u.test(toolName)\n ? `approval for native tool ${toolName}`\n : \"interactive input\";\n inputFailure = new AgentError(\"INPUT_REQUIRED\", `Claude Code needs ${subject}. Configure its native permissions before retrying.`);\n };\n let native: ClaudeQuery;\n try { native = await deps.query({prompt: input, options: {\n pathToClaudeCodeExecutable: executable,\n spawnClaudeCodeProcess: processOwner.spawn,\n cwd: options.cwd,\n ...settings,\n ...(allowedTools.length ? {allowedTools} : {}),\n ...(options.harness.disallowedTools !== undefined ? {disallowedTools:[...options.harness.disallowedTools]} : {}),\n ...(permissionMode !== undefined ? {permissionMode} : {}),\n ...(permissionMode === \"bypassPermissions\" ? {allowDangerouslySkipPermissions:true} : {}),\n settings: config.path,\n stderr: () => {},\n ...(options.harness.model ? {model: options.harness.model} : {}),\n systemPrompt: options.agent.instructions\n ? {type: \"preset\", preset: \"claude_code\", append: options.agent.instructions}\n : {type: \"preset\", preset: \"claude_code\"},\n settingSources: [\"user\", \"project\", \"local\"],\n canUseTool: async (toolName, toolInput, metadata) => {\n if (options.onApproval && acceptingApprovals && toolName !== \"AskUserQuestion\") {\n try {\n const answer = await claudeApproval(approvals, options.onApproval, toolName, toolInput, metadata);\n if (!acceptingApprovals || metadata.signal.aborted) return {behavior:\"deny\",message:\"The permission request is no longer pending.\"};\n return answer;\n }\n catch (error) {\n if (error instanceof AgentError && error.code === \"REQUEST_EXPIRED\") return {behavior:\"deny\",message:\"The permission request is no longer pending.\"};\n }\n }\n requireInput(toolName);\n return {behavior: \"deny\", message: inputFailure!.message, interrupt: true};\n },\n onElicitation: async () => {\n acceptingApprovals = false;\n approvals.clear();\n requireInput();\n try { await native.interrupt(); } catch { native.close(); }\n return {action: \"decline\"};\n },\n }}, {tools,processOwner}); }\n catch (error) {\n const exit = processOwner.exitDescription();\n input.close();\n const failure = error instanceof AgentError && error.code === \"HARNESS_FAILED\"\n ? error : new AgentError(\"HARNESS_UNAVAILABLE\", `Claude Code could not start${exit}.`);\n try { await cleanupResources(); }\n catch (cleanupError) { throw new AggregateError([failure,cleanupError],\"Claude Code startup and cleanup failed.\"); }\n throw failure;\n }\n const expectedModels = new Set<string>();\n let retainedModel: string | undefined;\n let startupPhase: \"account inspection\" | \"model catalog retrieval\" | \"model settings validation\" = \"account inspection\";\n try {\n const account = await native.accountInfo();\n verifyClaudeAccess(account, options.access);\n startupPhase = \"model catalog retrieval\";\n const models = await native.supportedModels();\n if (options.harness.model) {\n addCatalogEquivalentModels(expectedModels, models, options.harness.model);\n verifyClaudeOptions(models, options);\n startupPhase = \"model settings validation\";\n try {\n const applied = await readClaudeAppliedSettings(native);\n if (!expectedModels.has(applied.model)) throw new AgentError(\"INVALID_CONFIG\", \"Claude Code selected a different model than requested during startup settings validation.\");\n verifyAppliedClaudeEffort(applied.effort, options.harness.effort);\n retainedModel = applied.model;\n expectedModels.add(applied.model);\n } catch (error) {\n if (!(error instanceof ClaudeSettingsUnavailable)) throw error;\n }\n } else {\n startupPhase = \"model settings validation\";\n if (!native.getSettings || !native.setModel) throw claudeDefaultUnavailable();\n let selected;\n try { selected = await readClaudeAppliedSettings(native); }\n catch (error) { if (error instanceof ClaudeSettingsUnavailable) throw claudeDefaultUnavailable(); throw error; }\n startupPhase = \"model catalog retrieval\";\n verifyClaudeOptions(models, options, selected.model);\n startupPhase = \"model settings validation\";\n verifyAppliedClaudeEffort(selected.effort, options.harness.effort);\n startupPhase = \"model catalog retrieval\";\n addCatalogEquivalentModels(expectedModels, models, selected.model);\n startupPhase = \"model settings validation\";\n try { await native.setModel(selected.model); } catch { throw claudeDefaultUnavailable(); }\n let pinned;\n try { pinned = await readClaudeAppliedSettings(native); }\n catch (error) { if (error instanceof ClaudeSettingsUnavailable) throw claudeDefaultUnavailable(); throw error; }\n if (!expectedModels.has(pinned.model)) {\n throw new AgentError(\"INVALID_CONFIG\", \"Claude Code changed the selected native default during startup settings validation. Supply --model <model>.\");\n }\n verifyAppliedClaudeEffort(pinned.effort, options.harness.effort);\n retainedModel = pinned.model;\n startupPhase = \"model catalog retrieval\";\n addCatalogEquivalentModels(expectedModels, models, pinned.model);\n startupPhase = \"model settings validation\";\n }\n if (inputFailure) throw inputFailure;\n }\n catch (error) {\n const exit = processOwner.exitDescription();\n input.close();\n native.close();\n const failure = error instanceof AgentError ? error\n : new AgentError(\"HARNESS_FAILED\", `Claude Code ${startupPhase} failed${exit}.`);\n try { await cleanupResources(); }\n catch (cleanupError) { throw new AggregateError([failure,cleanupError],\"Claude Code startup and cleanup failed.\"); }\n throw failure;\n }\n let closed = false;\n let preflight: {\n cancellation: Promise<never>;\n cancel(error: AgentError): void;\n stopped: Promise<void>;\n stop(): void;\n } | undefined;\n let sessionFailure: AgentError | undefined;\n let exitObservedBeforeClose: string | undefined;\n let active: {\n resolve(text: string): void; reject(error: unknown): void;\n stopped: Promise<void>; stop(): void; interrupted: boolean;\n } | undefined;\n const reading = (async () => {\n try {\n for await (const message of native) {\n if (message.type === \"system\" && message.subtype === \"init\") {\n if (!expectedModels.has(message.model)) {\n sessionFailure = new AgentError(\"INVALID_CONFIG\", \"Claude Code selected a different model than requested during native initialization.\");\n } else if (permissionMode !== undefined && message.permissionMode !== permissionMode) {\n sessionFailure = new AgentError(\"INVALID_CONFIG\", \"Claude Code reported a different permission mode than requested.\");\n }\n if (sessionFailure) {\n tools.stopAdmission();\n native.close();\n break;\n }\n }\n if (message.type !== \"result\" || !active) continue;\n const current = active;\n acceptingApprovals = false;\n approvals.clear();\n await tools.drain();\n active = undefined;\n current.stop();\n if (inputFailure) current.reject(inputFailure);\n else if (current.interrupted) current.reject(new AgentError(\"INTERRUPTED\", \"The native turn was interrupted.\"));\n else if (message.subtype === \"success\" && !message.is_error) {\n if (Buffer.byteLength(message.result, \"utf8\") > 1024 * 1024) {\n current.reject(new AgentError(\"RESPONSE_TOO_LARGE\", \"The Claude Code response exceeds 1 MiB.\"));\n } else current.resolve(message.result);\n }\n else current.reject(claudeResultFailure(message.subtype));\n }\n } catch (error) {\n if (error instanceof AgentError) {\n sessionFailure = error;\n }\n // Native diagnostics may contain credentials; return a stable safe message.\n } finally {\n acceptingApprovals = false;\n approvals.clear();\n const explicitClose = exitObservedBeforeClose !== undefined;\n const code = explicitClose ? \"SESSION_CLOSED\" : \"HARNESS_ERROR\";\n closed = true;\n input.close();\n await tools.drain();\n const exit = explicitClose ? exitObservedBeforeClose : processOwner.exitDescription();\n const ending = active;\n ending?.reject(sessionFailure ?? inputFailure ?? new AgentError(code, `The Claude Code process stopped${exit} before completing the turn.`));\n try { await cleanupResources(); }\n finally {\n ending?.stop();\n if (active === ending) active = undefined;\n }\n }\n })();\n void reading.catch(() => undefined);\n let closeAttempt: Promise<void> | undefined;\n let closeComplete = false;\n let failedCloseAttempts = 0;\n const close = (): Promise<void> => {\n if (closeComplete) return Promise.resolve();\n if (closeAttempt) return closeAttempt;\n closeAttempt = (async () => {\n exitObservedBeforeClose ??= processOwner.exitDescription();\n closed = true;\n acceptingApprovals = false;\n approvals.clear();\n const pending = preflight;\n if (pending) {\n pending.cancel(new AgentError(\"SESSION_CLOSED\", \"The native session closed before submission.\"));\n await pending.stopped;\n }\n tools.stopAdmission();\n input.close();\n native.close();\n const stoppingFailure = processOwner.close().then(() => new Promise<never>(() => {}));\n let readingFailure: unknown;\n try { await Promise.race([reading,stoppingFailure]); }\n catch (error) { readingFailure = error; }\n if (readingFailure && failedCloseAttempts === 0) throw readingFailure;\n if (!cleanupComplete) await cleanupResources();\n closeComplete = true;\n })().catch(error => {\n failedCloseAttempts += 1;\n closeAttempt = undefined;\n throw error;\n });\n return closeAttempt;\n };\n return {\n async turn(prompt) {\n if (closed) return Promise.reject(sessionFailure ?? new AgentError(\"SESSION_CLOSED\", \"The native session has closed.\"));\n if (active || preflight) return Promise.reject(new AgentError(\"SESSION_BUSY\", \"A native turn is already active.\"));\n let cancel!: (error: AgentError) => void, stop!: () => void;\n const currentPreflight = {\n cancellation: new Promise<never>((_resolve, reject) => { cancel = reject; }),\n cancel(error: AgentError) { cancel(error); },\n stopped: new Promise<void>(resolve => { stop = resolve; }),\n stop() { stop(); },\n };\n preflight = currentPreflight;\n try {\n if (native.getSettings && retainedModel) {\n let applied;\n try { applied = await Promise.race([readClaudeAppliedSettings(native), currentPreflight.cancellation]); }\n catch (error) {\n if (error instanceof ClaudeSettingsUnavailable) throw new AgentError(\"INVALID_CONFIG\", \"Claude Code could not verify the retained session model before submission.\");\n throw error;\n }\n if (!expectedModels.has(applied.model)) throw new AgentError(\"INVALID_CONFIG\", \"Claude Code changed the model during retained-session validation before submission.\");\n verifyAppliedClaudeEffort(applied.effort, options.harness.effort);\n }\n if (closed) throw sessionFailure ?? new AgentError(\"SESSION_CLOSED\", \"The native session has closed.\");\n } finally {\n if (preflight === currentPreflight) preflight = undefined;\n currentPreflight.stop();\n }\n return await new Promise((resolve, reject) => {\n inputFailure = undefined;\n tools.start();\n let stop!: () => void;\n const stopped = new Promise<void>(resolve => { stop = resolve; });\n active = {resolve, reject, stopped, stop, interrupted:false};\n acceptingApprovals = true;\n input.push({type:\"user\",message:{role:\"user\",content:prompt},parent_tool_use_id:null,uuid:randomUUID()});\n });\n },\n async steer() { throw new AgentError(\"UNSUPPORTED_DELIVERY\", \"Claude Code does not expose verified active steering.\"); },\n async interrupt() {\n const pending = preflight;\n if (pending) {\n pending.cancel(new AgentError(\"INTERRUPTED\", \"The native turn was interrupted before submission.\"));\n await pending.stopped;\n return;\n }\n const current = active;\n if (!current) return;\n current.interrupted = true;\n acceptingApprovals = false;\n approvals.clear();\n tools.stopAdmission();\n try { await native.interrupt(); }\n catch (error) {\n current.interrupted = false;\n if (error instanceof AgentError && error.code === \"HARNESS_FAILED\") throw error;\n throw new AgentError(\"CANCEL_FAILED\", \"Claude Code did not confirm interruption.\");\n }\n await current.stopped;\n },\n async resume() { throw new AgentError(\"RECOVERY_UNSUPPORTED\", \"Claude Code cannot retry failed execution without replaying input.\"); },\n close,\n };\n };\n}\n"]}
@@ -90,7 +90,10 @@ class CodexSession {
90
90
  current.items.set(p.item.id, p.item);
91
91
  if (message.method === "item/tool/call" && message.id !== undefined) {
92
92
  if (!current.acceptingTools) {
93
- this.rpc.send({ id: message.id, result: { success: false, contentItems: [{ type: "inputText", text: "The task is not accepting tool calls." }] } });
93
+ try {
94
+ this.rpc.send({ id: message.id, result: { success: false, contentItems: [{ type: "inputText", text: "The task is not accepting tool calls." }] } });
95
+ }
96
+ catch { /* A closing native turn no longer accepts its rejected tool-call result. */ }
94
97
  return;
95
98
  }
96
99
  const call = this.toolCall(message.id, p);
@@ -1 +1 @@
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,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;wBACpJ,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 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":"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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 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":"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","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"]}