@orion-agents/orion-code 0.1.2 → 0.1.4-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (552) hide show
  1. package/README.md +98 -4
  2. package/README.zh-CN.md +116 -5
  3. package/dist/agents/coder.d.ts.map +1 -1
  4. package/dist/agents/coder.js.map +1 -1
  5. package/dist/agents/fork.d.ts +12 -4
  6. package/dist/agents/fork.d.ts.map +1 -1
  7. package/dist/agents/fork.js +28 -32
  8. package/dist/agents/fork.js.map +1 -1
  9. package/dist/agents/leader.d.ts.map +1 -1
  10. package/dist/agents/leader.js.map +1 -1
  11. package/dist/agents/worker-pool.d.ts.map +1 -1
  12. package/dist/agents/worker-pool.js +38 -29
  13. package/dist/agents/worker-pool.js.map +1 -1
  14. package/dist/cli.d.ts +1 -1
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +0 -1
  17. package/dist/cli.js.map +1 -1
  18. package/dist/commands/context-commands.d.ts +4 -0
  19. package/dist/commands/context-commands.d.ts.map +1 -0
  20. package/dist/commands/context-commands.js +52 -0
  21. package/dist/commands/context-commands.js.map +1 -0
  22. package/dist/commands/context-tool-command-handlers.d.ts +13 -0
  23. package/dist/commands/context-tool-command-handlers.d.ts.map +1 -0
  24. package/dist/commands/context-tool-command-handlers.js +573 -0
  25. package/dist/commands/context-tool-command-handlers.js.map +1 -0
  26. package/dist/commands/core-command-handlers.d.ts +12 -0
  27. package/dist/commands/core-command-handlers.d.ts.map +1 -0
  28. package/dist/commands/core-command-handlers.js +798 -0
  29. package/dist/commands/core-command-handlers.js.map +1 -0
  30. package/dist/commands/diagnostic-command-handlers.d.ts +14 -0
  31. package/dist/commands/diagnostic-command-handlers.d.ts.map +1 -0
  32. package/dist/commands/diagnostic-command-handlers.js +1043 -0
  33. package/dist/commands/diagnostic-command-handlers.js.map +1 -0
  34. package/dist/commands/diagnostic-commands.d.ts +4 -0
  35. package/dist/commands/diagnostic-commands.d.ts.map +1 -0
  36. package/dist/commands/diagnostic-commands.js +132 -0
  37. package/dist/commands/diagnostic-commands.js.map +1 -0
  38. package/dist/commands/index.d.ts +7 -8
  39. package/dist/commands/index.d.ts.map +1 -1
  40. package/dist/commands/index.js +34 -3448
  41. package/dist/commands/index.js.map +1 -1
  42. package/dist/commands/legacy-commands.d.ts +4 -0
  43. package/dist/commands/legacy-commands.d.ts.map +1 -0
  44. package/dist/commands/legacy-commands.js +44 -0
  45. package/dist/commands/legacy-commands.js.map +1 -0
  46. package/dist/commands/model-command-handlers.d.ts +13 -0
  47. package/dist/commands/model-command-handlers.d.ts.map +1 -0
  48. package/dist/commands/model-command-handlers.js +314 -0
  49. package/dist/commands/model-command-handlers.js.map +1 -0
  50. package/dist/commands/model-commands.d.ts +4 -0
  51. package/dist/commands/model-commands.d.ts.map +1 -0
  52. package/dist/commands/model-commands.js +52 -0
  53. package/dist/commands/model-commands.js.map +1 -0
  54. package/dist/commands/session-command-handlers.d.ts +9 -0
  55. package/dist/commands/session-command-handlers.d.ts.map +1 -0
  56. package/dist/commands/session-command-handlers.js +566 -0
  57. package/dist/commands/session-command-handlers.js.map +1 -0
  58. package/dist/commands/session-commands.d.ts +4 -0
  59. package/dist/commands/session-commands.d.ts.map +1 -0
  60. package/dist/commands/session-commands.js +78 -0
  61. package/dist/commands/session-commands.js.map +1 -0
  62. package/dist/commands/system-commands.d.ts +4 -0
  63. package/dist/commands/system-commands.d.ts.map +1 -0
  64. package/dist/commands/system-commands.js +92 -0
  65. package/dist/commands/system-commands.js.map +1 -0
  66. package/dist/commands/target-command.d.ts.map +1 -1
  67. package/dist/commands/target-command.js +29 -2
  68. package/dist/commands/target-command.js.map +1 -1
  69. package/dist/commands/tool-commands.d.ts +4 -0
  70. package/dist/commands/tool-commands.d.ts.map +1 -0
  71. package/dist/commands/tool-commands.js +49 -0
  72. package/dist/commands/tool-commands.js.map +1 -0
  73. package/dist/commands/types.d.ts +7 -5
  74. package/dist/commands/types.d.ts.map +1 -1
  75. package/dist/commands/types.js.map +1 -1
  76. package/dist/commands/workflow-command-handlers.d.ts +7 -0
  77. package/dist/commands/workflow-command-handlers.d.ts.map +1 -0
  78. package/dist/commands/workflow-command-handlers.js +35 -0
  79. package/dist/commands/workflow-command-handlers.js.map +1 -0
  80. package/dist/commands/workflow-commands.d.ts +4 -0
  81. package/dist/commands/workflow-commands.d.ts.map +1 -0
  82. package/dist/commands/workflow-commands.js +92 -0
  83. package/dist/commands/workflow-commands.js.map +1 -0
  84. package/dist/core/checkpoint.d.ts +12 -4
  85. package/dist/core/checkpoint.d.ts.map +1 -1
  86. package/dist/core/checkpoint.js +114 -28
  87. package/dist/core/checkpoint.js.map +1 -1
  88. package/dist/core/cost-tracker.d.ts +5 -1
  89. package/dist/core/cost-tracker.d.ts.map +1 -1
  90. package/dist/core/cost-tracker.js +12 -2
  91. package/dist/core/cost-tracker.js.map +1 -1
  92. package/dist/core/warn-dedup.d.ts +3 -0
  93. package/dist/core/warn-dedup.d.ts.map +1 -1
  94. package/dist/core/warn-dedup.js +6 -6
  95. package/dist/core/warn-dedup.js.map +1 -1
  96. package/dist/framework/index.d.ts +1 -1
  97. package/dist/framework/index.d.ts.map +1 -1
  98. package/dist/framework/index.js.map +1 -1
  99. package/dist/framework/prompt.d.ts +2 -2
  100. package/dist/framework/query.d.ts +5 -2
  101. package/dist/framework/query.d.ts.map +1 -1
  102. package/dist/framework/query.js +58 -10
  103. package/dist/framework/query.js.map +1 -1
  104. package/dist/framework/store.d.ts +4 -4
  105. package/dist/framework/tool-scheduler.d.ts +67 -4
  106. package/dist/framework/tool-scheduler.d.ts.map +1 -1
  107. package/dist/framework/tool-scheduler.js +271 -50
  108. package/dist/framework/tool-scheduler.js.map +1 -1
  109. package/dist/framework/tool.d.ts +36 -2
  110. package/dist/framework/tool.d.ts.map +1 -1
  111. package/dist/framework/tool.js +29 -1
  112. package/dist/framework/tool.js.map +1 -1
  113. package/dist/harness/assembler.d.ts.map +1 -1
  114. package/dist/harness/assembler.js +4 -2
  115. package/dist/harness/assembler.js.map +1 -1
  116. package/dist/harness/evidence.d.ts.map +1 -1
  117. package/dist/harness/evidence.js +3 -2
  118. package/dist/harness/evidence.js.map +1 -1
  119. package/dist/harness/safety.d.ts +11 -1
  120. package/dist/harness/safety.d.ts.map +1 -1
  121. package/dist/harness/safety.js +112 -16
  122. package/dist/harness/safety.js.map +1 -1
  123. package/dist/index.d.ts +1 -4
  124. package/dist/index.d.ts.map +1 -1
  125. package/dist/index.js.map +1 -1
  126. package/dist/init.d.ts +4 -8
  127. package/dist/init.d.ts.map +1 -1
  128. package/dist/init.js +4 -4
  129. package/dist/init.js.map +1 -1
  130. package/dist/ink-ui/App.d.ts +2 -2
  131. package/dist/ink-ui/components/Markdown.d.ts.map +1 -1
  132. package/dist/ink-ui/components/Markdown.js.map +1 -1
  133. package/dist/ink-ui/components/PixelHorseBanner.d.ts +2 -2
  134. package/dist/ink-ui/components/StatusLine.d.ts +2 -2
  135. package/dist/ink-ui/launch.d.ts +2 -2
  136. package/dist/ink-ui/screens/ReplScreen.d.ts +3 -2
  137. package/dist/ink-ui/screens/ReplScreen.d.ts.map +1 -1
  138. package/dist/ink-ui/screens/ReplScreen.js +65 -0
  139. package/dist/ink-ui/screens/ReplScreen.js.map +1 -1
  140. package/dist/memory/embeddings.d.ts.map +1 -1
  141. package/dist/memory/embeddings.js +3 -2
  142. package/dist/memory/embeddings.js.map +1 -1
  143. package/dist/memory/relevant-finder.d.ts +2 -1
  144. package/dist/memory/relevant-finder.d.ts.map +1 -1
  145. package/dist/memory/relevant-finder.js +17 -8
  146. package/dist/memory/relevant-finder.js.map +1 -1
  147. package/dist/memory/semantic-config.d.ts +9 -0
  148. package/dist/memory/semantic-config.d.ts.map +1 -0
  149. package/dist/memory/semantic-config.js +16 -0
  150. package/dist/memory/semantic-config.js.map +1 -0
  151. package/dist/memory/semantic-search.d.ts +1 -6
  152. package/dist/memory/semantic-search.d.ts.map +1 -1
  153. package/dist/memory/semantic-search.js +5 -16
  154. package/dist/memory/semantic-search.js.map +1 -1
  155. package/dist/memory/storage.d.ts +23 -0
  156. package/dist/memory/storage.d.ts.map +1 -1
  157. package/dist/memory/storage.js +109 -8
  158. package/dist/memory/storage.js.map +1 -1
  159. package/dist/memory/vector-store.d.ts +12 -0
  160. package/dist/memory/vector-store.d.ts.map +1 -1
  161. package/dist/memory/vector-store.js +139 -18
  162. package/dist/memory/vector-store.js.map +1 -1
  163. package/dist/migration/command.d.ts.map +1 -1
  164. package/dist/migration/command.js +0 -1
  165. package/dist/migration/command.js.map +1 -1
  166. package/dist/migration/migrate.d.ts.map +1 -1
  167. package/dist/migration/migrate.js +43 -109
  168. package/dist/migration/migrate.js.map +1 -1
  169. package/dist/migration/types.d.ts +0 -1
  170. package/dist/migration/types.d.ts.map +1 -1
  171. package/dist/print-ui/launch.d.ts +11 -3
  172. package/dist/print-ui/launch.d.ts.map +1 -1
  173. package/dist/print-ui/launch.js +25 -0
  174. package/dist/print-ui/launch.js.map +1 -1
  175. package/dist/product/environment.d.ts +3 -5
  176. package/dist/product/environment.d.ts.map +1 -1
  177. package/dist/product/environment.js +4 -32
  178. package/dist/product/environment.js.map +1 -1
  179. package/dist/product/index.d.ts +1 -1
  180. package/dist/product/index.d.ts.map +1 -1
  181. package/dist/product/index.js +1 -3
  182. package/dist/product/index.js.map +1 -1
  183. package/dist/product/paths.d.ts.map +1 -1
  184. package/dist/product/paths.js +12 -0
  185. package/dist/product/paths.js.map +1 -1
  186. package/dist/runtime/agent-runtime-controller.d.ts +3 -2
  187. package/dist/runtime/agent-runtime-controller.d.ts.map +1 -1
  188. package/dist/runtime/agent-runtime-controller.js +24 -3
  189. package/dist/runtime/agent-runtime-controller.js.map +1 -1
  190. package/dist/runtime/agent-runtime-protocol.d.ts +16 -1
  191. package/dist/runtime/agent-runtime-protocol.d.ts.map +1 -1
  192. package/dist/runtime/agent-runtime-protocol.js +12 -0
  193. package/dist/runtime/agent-runtime-protocol.js.map +1 -1
  194. package/dist/runtime/chat-checkpoint.d.ts +17 -0
  195. package/dist/runtime/chat-checkpoint.d.ts.map +1 -0
  196. package/dist/runtime/chat-checkpoint.js +108 -0
  197. package/dist/runtime/chat-checkpoint.js.map +1 -0
  198. package/dist/runtime/chat-controller.d.ts +16 -46
  199. package/dist/runtime/chat-controller.d.ts.map +1 -1
  200. package/dist/runtime/chat-controller.js +212 -1051
  201. package/dist/runtime/chat-controller.js.map +1 -1
  202. package/dist/runtime/chat-presentation.d.ts +60 -0
  203. package/dist/runtime/chat-presentation.d.ts.map +1 -0
  204. package/dist/runtime/chat-presentation.js +537 -0
  205. package/dist/runtime/chat-presentation.js.map +1 -0
  206. package/dist/runtime/chat-trace.d.ts +52 -0
  207. package/dist/runtime/chat-trace.d.ts.map +1 -0
  208. package/dist/runtime/chat-trace.js +234 -0
  209. package/dist/runtime/chat-trace.js.map +1 -0
  210. package/dist/runtime/chat-workspace.d.ts +22 -0
  211. package/dist/runtime/chat-workspace.d.ts.map +1 -0
  212. package/dist/runtime/chat-workspace.js +154 -0
  213. package/dist/runtime/chat-workspace.js.map +1 -0
  214. package/dist/runtime/goals/accounting.js +1 -1
  215. package/dist/runtime/goals/accounting.js.map +1 -1
  216. package/dist/runtime/goals/completion-audit.d.ts.map +1 -1
  217. package/dist/runtime/goals/completion-audit.js +5 -4
  218. package/dist/runtime/goals/completion-audit.js.map +1 -1
  219. package/dist/runtime/goals/coordinator.d.ts +3 -0
  220. package/dist/runtime/goals/coordinator.d.ts.map +1 -1
  221. package/dist/runtime/goals/coordinator.js +30 -2
  222. package/dist/runtime/goals/coordinator.js.map +1 -1
  223. package/dist/runtime/goals/prompt.d.ts +1 -1
  224. package/dist/runtime/goals/prompt.d.ts.map +1 -1
  225. package/dist/runtime/goals/prompt.js +3 -2
  226. package/dist/runtime/goals/prompt.js.map +1 -1
  227. package/dist/runtime/goals/tools.d.ts +21 -8
  228. package/dist/runtime/goals/tools.d.ts.map +1 -1
  229. package/dist/runtime/goals/tools.js +152 -21
  230. package/dist/runtime/goals/tools.js.map +1 -1
  231. package/dist/runtime/goals/types.d.ts +6 -0
  232. package/dist/runtime/goals/types.d.ts.map +1 -1
  233. package/dist/runtime/goals/types.js.map +1 -1
  234. package/dist/runtime/loop-budget.d.ts +2 -2
  235. package/dist/runtime/model-coordinator.d.ts.map +1 -1
  236. package/dist/runtime/model-coordinator.js.map +1 -1
  237. package/dist/runtime/subagents/child-executor-guard.d.ts.map +1 -1
  238. package/dist/runtime/subagents/child-executor-guard.js +4 -0
  239. package/dist/runtime/subagents/child-executor-guard.js.map +1 -1
  240. package/dist/runtime/subagents/index.d.ts +10 -3
  241. package/dist/runtime/subagents/index.d.ts.map +1 -1
  242. package/dist/runtime/subagents/index.js +25 -1
  243. package/dist/runtime/subagents/index.js.map +1 -1
  244. package/dist/runtime/subagents/policy.d.ts +1 -1
  245. package/dist/runtime/subagents/policy.d.ts.map +1 -1
  246. package/dist/runtime/subagents/policy.js.map +1 -1
  247. package/dist/runtime/subagents/presets.d.ts +2 -2
  248. package/dist/runtime/subagents/provider-gate.d.ts.map +1 -1
  249. package/dist/runtime/subagents/provider-gate.js +0 -1
  250. package/dist/runtime/subagents/provider-gate.js.map +1 -1
  251. package/dist/runtime/subagents/research-artifact.d.ts +101 -0
  252. package/dist/runtime/subagents/research-artifact.d.ts.map +1 -0
  253. package/dist/runtime/subagents/research-artifact.js +210 -0
  254. package/dist/runtime/subagents/research-artifact.js.map +1 -0
  255. package/dist/runtime/subagents/research-citation.d.ts +66 -0
  256. package/dist/runtime/subagents/research-citation.d.ts.map +1 -0
  257. package/dist/runtime/subagents/research-citation.js +185 -0
  258. package/dist/runtime/subagents/research-citation.js.map +1 -0
  259. package/dist/runtime/subagents/research-contract.d.ts +83 -0
  260. package/dist/runtime/subagents/research-contract.d.ts.map +1 -0
  261. package/dist/runtime/subagents/research-contract.js +337 -0
  262. package/dist/runtime/subagents/research-contract.js.map +1 -0
  263. package/dist/runtime/subagents/research-quality.d.ts +47 -0
  264. package/dist/runtime/subagents/research-quality.d.ts.map +1 -0
  265. package/dist/runtime/subagents/research-quality.js +125 -0
  266. package/dist/runtime/subagents/research-quality.js.map +1 -0
  267. package/dist/runtime/subagents/research-renderer.d.ts +95 -0
  268. package/dist/runtime/subagents/research-renderer.d.ts.map +1 -0
  269. package/dist/runtime/subagents/research-renderer.js +186 -0
  270. package/dist/runtime/subagents/research-renderer.js.map +1 -0
  271. package/dist/runtime/subagents/research-types.d.ts +105 -0
  272. package/dist/runtime/subagents/research-types.d.ts.map +1 -0
  273. package/dist/runtime/subagents/research-types.js +16 -0
  274. package/dist/runtime/subagents/research-types.js.map +1 -0
  275. package/dist/runtime/subagents/result-parser.d.ts +1 -5
  276. package/dist/runtime/subagents/result-parser.d.ts.map +1 -1
  277. package/dist/runtime/subagents/result-parser.js +5 -72
  278. package/dist/runtime/subagents/result-parser.js.map +1 -1
  279. package/dist/runtime/subagents/runtime-integration.d.ts +13 -7
  280. package/dist/runtime/subagents/runtime-integration.d.ts.map +1 -1
  281. package/dist/runtime/subagents/runtime-integration.js +112 -2
  282. package/dist/runtime/subagents/runtime-integration.js.map +1 -1
  283. package/dist/runtime/subagents/supervisor.d.ts +15 -1
  284. package/dist/runtime/subagents/supervisor.d.ts.map +1 -1
  285. package/dist/runtime/subagents/supervisor.js +58 -3
  286. package/dist/runtime/subagents/supervisor.js.map +1 -1
  287. package/dist/runtime/subagents/tool.d.ts +2 -2
  288. package/dist/runtime/subagents/tool.d.ts.map +1 -1
  289. package/dist/runtime/subagents/tool.js +129 -9
  290. package/dist/runtime/subagents/tool.js.map +1 -1
  291. package/dist/runtime/subagents/types.d.ts +20 -0
  292. package/dist/runtime/subagents/types.d.ts.map +1 -1
  293. package/dist/runtime/subagents/types.js.map +1 -1
  294. package/dist/runtime/subagents/web-research-adapter.d.ts +85 -0
  295. package/dist/runtime/subagents/web-research-adapter.d.ts.map +1 -0
  296. package/dist/runtime/subagents/web-research-adapter.js +328 -0
  297. package/dist/runtime/subagents/web-research-adapter.js.map +1 -0
  298. package/dist/runtime/turn-controller.d.ts.map +1 -1
  299. package/dist/runtime/turn-controller.js +3 -1
  300. package/dist/runtime/turn-controller.js.map +1 -1
  301. package/dist/runtime/ui-events.d.ts +25 -8
  302. package/dist/runtime/ui-events.d.ts.map +1 -1
  303. package/dist/runtime/ui-events.js.map +1 -1
  304. package/dist/runtime/ui-view-model.d.ts +40 -0
  305. package/dist/runtime/ui-view-model.d.ts.map +1 -1
  306. package/dist/runtime/ui-view-model.js +126 -0
  307. package/dist/runtime/ui-view-model.js.map +1 -1
  308. package/dist/services/agent-runner.d.ts +5 -2
  309. package/dist/services/agent-runner.d.ts.map +1 -1
  310. package/dist/services/agent-runner.js +18 -18
  311. package/dist/services/agent-runner.js.map +1 -1
  312. package/dist/services/atomic-write.d.ts +9 -1
  313. package/dist/services/atomic-write.d.ts.map +1 -1
  314. package/dist/services/atomic-write.js +55 -2
  315. package/dist/services/atomic-write.js.map +1 -1
  316. package/dist/services/auth/auth.d.ts +11 -7
  317. package/dist/services/auth/auth.d.ts.map +1 -1
  318. package/dist/services/auth/auth.js +133 -34
  319. package/dist/services/auth/auth.js.map +1 -1
  320. package/dist/services/auth/aws.d.ts +2 -0
  321. package/dist/services/auth/aws.d.ts.map +1 -1
  322. package/dist/services/auth/aws.js +126 -12
  323. package/dist/services/auth/aws.js.map +1 -1
  324. package/dist/services/auth/index.d.ts +1 -1
  325. package/dist/services/auth/index.d.ts.map +1 -1
  326. package/dist/services/auth/index.js +2 -1
  327. package/dist/services/auth/index.js.map +1 -1
  328. package/dist/services/auto-fix/autoFixConfig.d.ts +0 -3
  329. package/dist/services/auto-fix/autoFixConfig.d.ts.map +1 -1
  330. package/dist/services/auto-fix/autoFixConfig.js +25 -8
  331. package/dist/services/auto-fix/autoFixConfig.js.map +1 -1
  332. package/dist/services/auto-fix/autoFixHook.d.ts +7 -0
  333. package/dist/services/auto-fix/autoFixHook.d.ts.map +1 -1
  334. package/dist/services/auto-fix/autoFixHook.js +10 -1
  335. package/dist/services/auto-fix/autoFixHook.js.map +1 -1
  336. package/dist/services/compact/auto-compact.d.ts +2 -0
  337. package/dist/services/compact/auto-compact.d.ts.map +1 -1
  338. package/dist/services/compact/auto-compact.js +15 -1
  339. package/dist/services/compact/auto-compact.js.map +1 -1
  340. package/dist/services/compact/compact.d.ts.map +1 -1
  341. package/dist/services/compact/compact.js +9 -11
  342. package/dist/services/compact/compact.js.map +1 -1
  343. package/dist/services/compact/summary-generator.d.ts.map +1 -1
  344. package/dist/services/compact/summary-generator.js +28 -4
  345. package/dist/services/compact/summary-generator.js.map +1 -1
  346. package/dist/services/compact/tool-call-groups.d.ts +19 -0
  347. package/dist/services/compact/tool-call-groups.d.ts.map +1 -0
  348. package/dist/services/compact/tool-call-groups.js +105 -0
  349. package/dist/services/compact/tool-call-groups.js.map +1 -0
  350. package/dist/services/concurrent-sessions.d.ts +4 -0
  351. package/dist/services/concurrent-sessions.d.ts.map +1 -1
  352. package/dist/services/concurrent-sessions.js +76 -21
  353. package/dist/services/concurrent-sessions.js.map +1 -1
  354. package/dist/services/config-dir.d.ts.map +1 -1
  355. package/dist/services/config-dir.js +19 -5
  356. package/dist/services/config-dir.js.map +1 -1
  357. package/dist/services/config.d.ts +6 -4
  358. package/dist/services/config.d.ts.map +1 -1
  359. package/dist/services/config.js +16 -72
  360. package/dist/services/config.js.map +1 -1
  361. package/dist/services/doctor.d.ts +2 -2
  362. package/dist/services/doctor.js.map +1 -1
  363. package/dist/services/file-glob.d.ts.map +1 -1
  364. package/dist/services/file-glob.js +22 -2
  365. package/dist/services/file-glob.js.map +1 -1
  366. package/dist/services/file-lock.d.ts +7 -0
  367. package/dist/services/file-lock.d.ts.map +1 -0
  368. package/dist/services/file-lock.js +139 -0
  369. package/dist/services/file-lock.js.map +1 -0
  370. package/dist/services/global-config.d.ts +33 -0
  371. package/dist/services/global-config.d.ts.map +1 -1
  372. package/dist/services/global-config.js +67 -4
  373. package/dist/services/global-config.js.map +1 -1
  374. package/dist/services/goal-storage.d.ts.map +1 -1
  375. package/dist/services/goal-storage.js +52 -19
  376. package/dist/services/goal-storage.js.map +1 -1
  377. package/dist/services/llm.d.ts +12 -0
  378. package/dist/services/llm.d.ts.map +1 -1
  379. package/dist/services/llm.js +166 -69
  380. package/dist/services/llm.js.map +1 -1
  381. package/dist/services/mcp/transports.d.ts +0 -1
  382. package/dist/services/mcp/transports.d.ts.map +1 -1
  383. package/dist/services/mcp/transports.js +12 -13
  384. package/dist/services/mcp/transports.js.map +1 -1
  385. package/dist/services/model-catalog.d.ts +2 -0
  386. package/dist/services/model-catalog.d.ts.map +1 -1
  387. package/dist/services/model-catalog.js +25 -15
  388. package/dist/services/model-catalog.js.map +1 -1
  389. package/dist/services/model-context.d.ts +8 -0
  390. package/dist/services/model-context.d.ts.map +1 -1
  391. package/dist/services/model-context.js +147 -7
  392. package/dist/services/model-context.js.map +1 -1
  393. package/dist/services/model-registry.d.ts.map +1 -1
  394. package/dist/services/model-registry.js +32 -0
  395. package/dist/services/model-registry.js.map +1 -1
  396. package/dist/services/provider-resilience/coordinator.d.ts +9 -4
  397. package/dist/services/provider-resilience/coordinator.d.ts.map +1 -1
  398. package/dist/services/provider-resilience/coordinator.js +88 -21
  399. package/dist/services/provider-resilience/coordinator.js.map +1 -1
  400. package/dist/services/provider-resilience/error-classifier.d.ts +1 -0
  401. package/dist/services/provider-resilience/error-classifier.d.ts.map +1 -1
  402. package/dist/services/provider-resilience/error-classifier.js +50 -29
  403. package/dist/services/provider-resilience/error-classifier.js.map +1 -1
  404. package/dist/services/provider-resilience/index.d.ts +3 -3
  405. package/dist/services/provider-resilience/index.d.ts.map +1 -1
  406. package/dist/services/provider-resilience/index.js +3 -1
  407. package/dist/services/provider-resilience/index.js.map +1 -1
  408. package/dist/services/provider-resilience/request-gate.d.ts +6 -0
  409. package/dist/services/provider-resilience/request-gate.d.ts.map +1 -1
  410. package/dist/services/provider-resilience/request-gate.js +24 -9
  411. package/dist/services/provider-resilience/request-gate.js.map +1 -1
  412. package/dist/services/provider-resilience/stream-recovery.d.ts +1 -1
  413. package/dist/services/provider-resilience/stream-recovery.d.ts.map +1 -1
  414. package/dist/services/provider-resilience/stream-recovery.js +1 -1
  415. package/dist/services/provider-resilience/stream-recovery.js.map +1 -1
  416. package/dist/services/provider-resilience/types.d.ts +9 -0
  417. package/dist/services/provider-resilience/types.d.ts.map +1 -1
  418. package/dist/services/provider-resilience/types.js.map +1 -1
  419. package/dist/services/redaction.d.ts.map +1 -1
  420. package/dist/services/redaction.js +29 -1
  421. package/dist/services/redaction.js.map +1 -1
  422. package/dist/services/session-index.d.ts.map +1 -1
  423. package/dist/services/session-index.js +75 -44
  424. package/dist/services/session-index.js.map +1 -1
  425. package/dist/services/session-memory/sessionMemory.d.ts.map +1 -1
  426. package/dist/services/session-memory/sessionMemory.js +6 -3
  427. package/dist/services/session-memory/sessionMemory.js.map +1 -1
  428. package/dist/services/session-storage.d.ts +8 -0
  429. package/dist/services/session-storage.d.ts.map +1 -1
  430. package/dist/services/session-storage.js +105 -27
  431. package/dist/services/session-storage.js.map +1 -1
  432. package/dist/services/storage-maintenance.d.ts.map +1 -1
  433. package/dist/services/storage-maintenance.js +62 -9
  434. package/dist/services/storage-maintenance.js.map +1 -1
  435. package/dist/services/task-manager.d.ts +9 -4
  436. package/dist/services/task-manager.d.ts.map +1 -1
  437. package/dist/services/task-manager.js +18 -4
  438. package/dist/services/task-manager.js.map +1 -1
  439. package/dist/services/tool-allowlist.d.ts +100 -0
  440. package/dist/services/tool-allowlist.d.ts.map +1 -0
  441. package/dist/services/tool-allowlist.js +250 -0
  442. package/dist/services/tool-allowlist.js.map +1 -0
  443. package/dist/services/usage-state.d.ts +1 -0
  444. package/dist/services/usage-state.d.ts.map +1 -1
  445. package/dist/services/usage-state.js +81 -45
  446. package/dist/services/usage-state.js.map +1 -1
  447. package/dist/services/verification-profile.d.ts.map +1 -1
  448. package/dist/services/verification-profile.js +23 -3
  449. package/dist/services/verification-profile.js.map +1 -1
  450. package/dist/services/web-search-adapters.d.ts.map +1 -1
  451. package/dist/services/web-search-adapters.js +48 -18
  452. package/dist/services/web-search-adapters.js.map +1 -1
  453. package/dist/services/web-search-mcp.d.ts.map +1 -1
  454. package/dist/services/web-search-mcp.js +27 -11
  455. package/dist/services/web-search-mcp.js.map +1 -1
  456. package/dist/services/workspace-diff.d.ts +14 -0
  457. package/dist/services/workspace-diff.d.ts.map +1 -1
  458. package/dist/services/workspace-diff.js +60 -11
  459. package/dist/services/workspace-diff.js.map +1 -1
  460. package/dist/services/yaml-config.d.ts.map +1 -1
  461. package/dist/services/yaml-config.js +2 -1
  462. package/dist/services/yaml-config.js.map +1 -1
  463. package/dist/skills/loader.d.ts.map +1 -1
  464. package/dist/skills/loader.js +26 -11
  465. package/dist/skills/loader.js.map +1 -1
  466. package/dist/skills/runtime.d.ts +3 -3
  467. package/dist/skills/runtime.d.ts.map +1 -1
  468. package/dist/skills/runtime.js +37 -4
  469. package/dist/skills/runtime.js.map +1 -1
  470. package/dist/skills/types.d.ts +1 -1
  471. package/dist/skills/types.d.ts.map +1 -1
  472. package/dist/terminal-ui/launch.d.ts +36 -8
  473. package/dist/terminal-ui/launch.d.ts.map +1 -1
  474. package/dist/terminal-ui/launch.js +171 -1
  475. package/dist/terminal-ui/launch.js.map +1 -1
  476. package/dist/terminal-ui/raw-editor.js.map +1 -1
  477. package/dist/tools/bash_security.d.ts +58 -18
  478. package/dist/tools/bash_security.d.ts.map +1 -1
  479. package/dist/tools/bash_security.js +587 -80
  480. package/dist/tools/bash_security.js.map +1 -1
  481. package/dist/tools/git.d.ts +8 -4
  482. package/dist/tools/git.d.ts.map +1 -1
  483. package/dist/tools/git.js +518 -18
  484. package/dist/tools/git.js.map +1 -1
  485. package/dist/tools/index.d.ts +14 -4
  486. package/dist/tools/index.d.ts.map +1 -1
  487. package/dist/tools/index.js +292 -49
  488. package/dist/tools/index.js.map +1 -1
  489. package/dist/tools/lsp.d.ts +74 -6
  490. package/dist/tools/lsp.d.ts.map +1 -1
  491. package/dist/tools/lsp.js +24 -5
  492. package/dist/tools/lsp.js.map +1 -1
  493. package/dist/tools/mcp.d.ts +19 -6
  494. package/dist/tools/mcp.d.ts.map +1 -1
  495. package/dist/tools/mcp.js +143 -26
  496. package/dist/tools/mcp.js.map +1 -1
  497. package/dist/tools/plan.d.ts +4 -4
  498. package/dist/tools/sandbox.d.ts +141 -0
  499. package/dist/tools/sandbox.d.ts.map +1 -0
  500. package/dist/tools/sandbox.js +500 -0
  501. package/dist/tools/sandbox.js.map +1 -0
  502. package/dist/tools/todo.d.ts +3 -3
  503. package/dist/tools/web.d.ts +15 -4
  504. package/dist/tools/web.d.ts.map +1 -1
  505. package/dist/tools/web.js +346 -61
  506. package/dist/tools/web.js.map +1 -1
  507. package/dist/tui-core/frame.js.map +1 -1
  508. package/dist/tui-ui/launch.d.ts +3 -3
  509. package/dist/tui-ui/launch.d.ts.map +1 -1
  510. package/dist/tui-ui/launch.js +46 -8
  511. package/dist/tui-ui/launch.js.map +1 -1
  512. package/dist/tui-ui/layout.d.ts.map +1 -1
  513. package/dist/tui-ui/layout.js +64 -0
  514. package/dist/tui-ui/layout.js.map +1 -1
  515. package/dist/tui-ui/runner.d.ts +6 -0
  516. package/dist/tui-ui/runner.d.ts.map +1 -1
  517. package/dist/tui-ui/runner.js +82 -1
  518. package/dist/tui-ui/runner.js.map +1 -1
  519. package/dist/tui-ui/state.d.ts +28 -2
  520. package/dist/tui-ui/state.d.ts.map +1 -1
  521. package/dist/tui-ui/state.js +48 -7
  522. package/dist/tui-ui/state.js.map +1 -1
  523. package/dist/tui-ui/terminal-image.d.ts +3 -13
  524. package/dist/tui-ui/terminal-image.d.ts.map +1 -1
  525. package/dist/tui-ui/terminal-image.js +5 -160
  526. package/dist/tui-ui/terminal-image.js.map +1 -1
  527. package/dist/ui/markdown.js.map +1 -1
  528. package/dist/utils/debug-log.d.ts +52 -0
  529. package/dist/utils/debug-log.d.ts.map +1 -0
  530. package/dist/utils/debug-log.js +94 -0
  531. package/dist/utils/debug-log.js.map +1 -0
  532. package/dist/utils/errors.d.ts +25 -0
  533. package/dist/utils/errors.d.ts.map +1 -0
  534. package/dist/utils/errors.js +47 -0
  535. package/dist/utils/errors.js.map +1 -0
  536. package/dist/utils/json.d.ts +6 -0
  537. package/dist/utils/json.d.ts.map +1 -0
  538. package/dist/utils/json.js +66 -0
  539. package/dist/utils/json.js.map +1 -0
  540. package/dist/utils/mask.d.ts +35 -0
  541. package/dist/utils/mask.d.ts.map +1 -0
  542. package/dist/utils/mask.js +52 -0
  543. package/dist/utils/mask.js.map +1 -0
  544. package/dist/utils/observability.d.ts +22 -0
  545. package/dist/utils/observability.d.ts.map +1 -0
  546. package/dist/utils/observability.js +80 -0
  547. package/dist/utils/observability.js.map +1 -0
  548. package/dist/utils/token-estimate.d.ts +8 -0
  549. package/dist/utils/token-estimate.d.ts.map +1 -1
  550. package/dist/utils/token-estimate.js +30 -17
  551. package/dist/utils/token-estimate.js.map +1 -1
  552. package/package.json +9 -7
@@ -0,0 +1,500 @@
1
+ "use strict";
2
+ /**
3
+ * Orion Code - OS-level sandbox planning for shell command execution.
4
+ *
5
+ * Contract (v0.1.3-2 §1.2 / P1-B / P1-E)
6
+ * ======================================
7
+ *
8
+ * Why this module exists
9
+ * ----------------------
10
+ * `bash_security.wrapForSandbox()` built a *shell string* (`docker exec ... sh -c
11
+ * '<cmd>'`). That is unsafe to claim as isolation: every layer re-parses the
12
+ * command, so quoting bugs become escapes. This module instead produces an
13
+ * **argv array** that is handed straight to `spawn()`, so the user command is a
14
+ * single opaque argument that no intermediate shell re-parses.
15
+ *
16
+ * Profiles (what the user asks for) vs backends (how we deliver it)
17
+ * ----------------------------------------------------------------
18
+ * profile none -> run exactly as before (no wrapper at all)
19
+ * profile read-only -> no filesystem writes anywhere, no network
20
+ * profile workspace-write -> writes confined to the workspace roots + temp,
21
+ * no network unless explicitly allowed
22
+ *
23
+ * backend seatbelt -> macOS `sandbox-exec` with a generated SBPL policy
24
+ * backend bubblewrap -> Linux `bwrap` with read-only binds
25
+ * backend docker -> `docker run --rm` into a configured image
26
+ *
27
+ * Availability must be PROBED, never inferred
28
+ * -------------------------------------------
29
+ * `which sandbox-exec` succeeding proves nothing: when Orion itself runs inside
30
+ * an application sandbox, every nested `sandbox_apply` fails with
31
+ * `Operation not permitted` (exit 71) even for a trivial `(allow default)`
32
+ * policy. Likewise `docker` on PATH says nothing about the daemon. So each
33
+ * backend is validated with a real, cheap execution probe whose result is
34
+ * cached for the process lifetime.
35
+ *
36
+ * Fail closed
37
+ * -----------
38
+ * If a profile other than `none` is requested and no backend passes its probe,
39
+ * {@link planSandboxedCommand} returns a failure. Callers must refuse to run the
40
+ * command. Falling back to an unsandboxed execution would turn a security
41
+ * setting into a silent no-op, which is the exact failure mode this module
42
+ * exists to prevent. An unrecognised profile value (e.g. written by a newer
43
+ * Orion) is also a failure rather than a downgrade to `none`.
44
+ *
45
+ * Configuration ownership (P1-E)
46
+ * ------------------------------
47
+ * GlobalConfig.sandbox user-wide default
48
+ * ProjectConfig.sandbox per-project override, shallow-merged on top
49
+ *
50
+ * Default is `{ profile: 'none' }`, so configs written before this module
51
+ * existed keep their exact previous behaviour. Nothing here is secret, so no
52
+ * redaction is required; rolling back is "delete the `sandbox` key", and an
53
+ * older Orion simply ignores the unknown field.
54
+ *
55
+ * Known limitations (recorded, not hidden)
56
+ * ----------------------------------------
57
+ * - seatbelt cannot be applied from inside another sandbox (see above);
58
+ * - macOS seatbelt is filesystem-only here. Its deprecated network filters are
59
+ * not treated as enforcement, so a network-blocked plan must use another backend;
60
+ * - `docker` runs the command in a *different* process tree, so Orion's
61
+ * process-group SIGTERM/SIGKILL only reaches the client. `--rm` bounds the
62
+ * leak, but abort semantics are weaker than the in-process backends;
63
+ * - none of the backends attempt to constrain CPU/memory.
64
+ */
65
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
66
+ if (k2 === undefined) k2 = k;
67
+ var desc = Object.getOwnPropertyDescriptor(m, k);
68
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
69
+ desc = { enumerable: true, get: function() { return m[k]; } };
70
+ }
71
+ Object.defineProperty(o, k2, desc);
72
+ }) : (function(o, m, k, k2) {
73
+ if (k2 === undefined) k2 = k;
74
+ o[k2] = m[k];
75
+ }));
76
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
77
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
78
+ }) : function(o, v) {
79
+ o["default"] = v;
80
+ });
81
+ var __importStar = (this && this.__importStar) || (function () {
82
+ var ownKeys = function(o) {
83
+ ownKeys = Object.getOwnPropertyNames || function (o) {
84
+ var ar = [];
85
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
86
+ return ar;
87
+ };
88
+ return ownKeys(o);
89
+ };
90
+ return function (mod) {
91
+ if (mod && mod.__esModule) return mod;
92
+ var result = {};
93
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
94
+ __setModuleDefault(result, mod);
95
+ return result;
96
+ };
97
+ })();
98
+ Object.defineProperty(exports, "__esModule", { value: true });
99
+ exports.SANDBOX_BACKENDS = exports.SANDBOX_PROFILES = void 0;
100
+ exports.mergeSandboxConfig = mergeSandboxConfig;
101
+ exports.resolveSandboxSettings = resolveSandboxSettings;
102
+ exports.resetSandboxCapabilityCache = resetSandboxCapabilityCache;
103
+ exports.detectSandboxCapabilities = detectSandboxCapabilities;
104
+ exports.formatSandboxCapabilities = formatSandboxCapabilities;
105
+ exports.buildSeatbeltPolicy = buildSeatbeltPolicy;
106
+ exports.planSandboxedCommand = planSandboxedCommand;
107
+ exports.describeSandboxPlan = describeSandboxPlan;
108
+ const child_process_1 = require("child_process");
109
+ const fs = __importStar(require("fs"));
110
+ const os = __importStar(require("os"));
111
+ const path = __importStar(require("path"));
112
+ const global_config_1 = require("../services/global-config");
113
+ exports.SANDBOX_PROFILES = ['none', 'read-only', 'workspace-write'];
114
+ exports.SANDBOX_BACKENDS = ['seatbelt', 'bubblewrap', 'docker'];
115
+ // ============================================================================
116
+ // Settings resolution
117
+ // ============================================================================
118
+ /** Shell used inside every backend. Kept explicit so policies can reference it. */
119
+ const INNER_SHELL = '/bin/sh';
120
+ function isSandboxProfile(value) {
121
+ return typeof value === 'string' && exports.SANDBOX_PROFILES.includes(value);
122
+ }
123
+ function sanitizeRoots(roots) {
124
+ if (!Array.isArray(roots))
125
+ return undefined;
126
+ const out = roots.filter((r) => typeof r === 'string' && r.trim().length > 0);
127
+ return out.length > 0 ? out : undefined;
128
+ }
129
+ /**
130
+ * Merge global and project sandbox settings.
131
+ * Project keys win individually; absent keys inherit the global value.
132
+ */
133
+ function mergeSandboxConfig(global, project) {
134
+ return {
135
+ profile: project?.profile ?? global?.profile,
136
+ backend: project?.backend ?? global?.backend,
137
+ allowNetwork: project?.allowNetwork ?? global?.allowNetwork,
138
+ writableRoots: sanitizeRoots(project?.writableRoots) ?? sanitizeRoots(global?.writableRoots),
139
+ image: project?.image ?? global?.image,
140
+ };
141
+ }
142
+ /** Read the effective settings for a project path. Never throws. */
143
+ function resolveSandboxSettings(projectPath) {
144
+ let global;
145
+ let project;
146
+ try {
147
+ global = (0, global_config_1.loadGlobalConfig)().sandbox;
148
+ }
149
+ catch {
150
+ global = undefined;
151
+ }
152
+ try {
153
+ project = (0, global_config_1.getProjectConfig)(projectPath).sandbox;
154
+ }
155
+ catch {
156
+ project = undefined;
157
+ }
158
+ return mergeSandboxConfig(global, project);
159
+ }
160
+ // ============================================================================
161
+ // Capability probing
162
+ // ============================================================================
163
+ let capabilityCache;
164
+ /** Drop the cached probe result. Test-only; capabilities do not change at runtime. */
165
+ function resetSandboxCapabilityCache() {
166
+ capabilityCache = undefined;
167
+ }
168
+ function probe(file, args, timeoutMs = 5000) {
169
+ try {
170
+ const res = (0, child_process_1.spawnSync)(file, args, { timeout: timeoutMs, encoding: 'utf8' });
171
+ if (res.error)
172
+ return { ok: false, detail: res.error.message };
173
+ if (res.status !== 0) {
174
+ const stderr = (res.stderr || '').trim().split('\n')[0];
175
+ return { ok: false, detail: stderr || `exit ${res.status}` };
176
+ }
177
+ return { ok: true, detail: (res.stdout || '').trim().split('\n')[0] || undefined };
178
+ }
179
+ catch (err) {
180
+ return { ok: false, detail: err instanceof Error ? err.message : String(err) };
181
+ }
182
+ }
183
+ function probeSeatbelt(platform) {
184
+ if (platform !== 'darwin') {
185
+ return { backend: 'seatbelt', available: false, reason: 'seatbelt requires macOS' };
186
+ }
187
+ // A trivial policy is enough: if `sandbox_apply` is refused (e.g. Orion is
188
+ // itself running inside an app sandbox) it fails here too.
189
+ const res = probe('/usr/bin/sandbox-exec', ['-p', '(version 1)(allow default)', '/usr/bin/true']);
190
+ if (!res.ok) {
191
+ return {
192
+ backend: 'seatbelt',
193
+ available: false,
194
+ reason: `sandbox-exec probe failed: ${res.detail ?? 'unknown error'}`,
195
+ };
196
+ }
197
+ return {
198
+ backend: 'seatbelt',
199
+ available: true,
200
+ detail: '/usr/bin/sandbox-exec (filesystem-only; network isolation unsupported)',
201
+ };
202
+ }
203
+ function probeBubblewrap(platform) {
204
+ if (platform !== 'linux') {
205
+ return { backend: 'bubblewrap', available: false, reason: 'bubblewrap requires Linux' };
206
+ }
207
+ const res = probe('bwrap', ['--version']);
208
+ if (!res.ok) {
209
+ return {
210
+ backend: 'bubblewrap',
211
+ available: false,
212
+ reason: `bwrap unavailable: ${res.detail ?? 'not found'}`,
213
+ };
214
+ }
215
+ return { backend: 'bubblewrap', available: true, detail: res.detail };
216
+ }
217
+ function probeDocker() {
218
+ // `docker` on PATH says nothing about the daemon, so query the daemon.
219
+ const res = probe('docker', ['info', '--format', '{{.ServerVersion}}'], 8000);
220
+ if (!res.ok) {
221
+ return {
222
+ backend: 'docker',
223
+ available: false,
224
+ reason: `docker daemon unreachable: ${res.detail ?? 'not found'}`,
225
+ };
226
+ }
227
+ return { backend: 'docker', available: true, detail: `server ${res.detail ?? 'unknown'}` };
228
+ }
229
+ /** Probe every backend once and cache the matrix for this process. */
230
+ function detectSandboxCapabilities(force = false) {
231
+ if (capabilityCache && !force)
232
+ return capabilityCache;
233
+ const platform = process.platform;
234
+ const backends = [probeSeatbelt(platform), probeBubblewrap(platform), probeDocker()];
235
+ capabilityCache = {
236
+ platform,
237
+ backends,
238
+ preferred: backends.find(b => b.available)?.backend,
239
+ };
240
+ return capabilityCache;
241
+ }
242
+ /** Render the capability matrix for `/config` and diagnostics. */
243
+ function formatSandboxCapabilities(caps) {
244
+ return caps.backends.map(b => b.available
245
+ ? `${b.backend}: available${b.detail ? ` (${b.detail})` : ''}`
246
+ : `${b.backend}: unavailable${b.reason ? ` (${b.reason})` : ''}`);
247
+ }
248
+ // ============================================================================
249
+ // Policy generation
250
+ // ============================================================================
251
+ /** Resolve symlinks so a policy cannot be sidestepped via an aliased path. */
252
+ function realpathOrSelf(p) {
253
+ try {
254
+ return fs.realpathSync(p);
255
+ }
256
+ catch {
257
+ return path.resolve(p);
258
+ }
259
+ }
260
+ function uniquePaths(paths) {
261
+ const seen = new Set();
262
+ const out = [];
263
+ for (const p of paths) {
264
+ if (!p)
265
+ continue;
266
+ const resolved = realpathOrSelf(p);
267
+ if (seen.has(resolved))
268
+ continue;
269
+ seen.add(resolved);
270
+ out.push(resolved);
271
+ }
272
+ return out;
273
+ }
274
+ /** Escape a path for an SBPL string literal. */
275
+ function sbplString(value) {
276
+ return `"${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
277
+ }
278
+ /**
279
+ * Build the seatbelt policy.
280
+ *
281
+ * Uses `(allow default)` plus targeted denies rather than `(deny default)` plus
282
+ * an allow-list: a deny-by-default policy has to enumerate every syscall a
283
+ * developer toolchain needs, and each omission looks like a mysterious crash
284
+ * rather than a security decision.
285
+ */
286
+ function buildSeatbeltPolicy(writableRoots, allowNetwork, projectRoot = process.cwd()) {
287
+ const lines = ['(version 1)', '(allow default)', '(deny file-write*)'];
288
+ for (const root of writableRoots) {
289
+ lines.push(`(allow file-write* (subpath ${sbplString(root)}))`);
290
+ }
291
+ // Writing to the standard character devices is not a filesystem escape and is
292
+ // required for ordinary shell redirection to keep working.
293
+ lines.push('(allow file-write-data (literal "/dev/null") (literal "/dev/stdout") (literal "/dev/stderr") (literal "/dev/tty") (literal "/dev/dtracehelper"))');
294
+ const home = os.homedir();
295
+ for (const sensitive of [
296
+ path.join(home, '.ssh'),
297
+ path.join(home, '.aws'),
298
+ path.join(home, '.gnupg'),
299
+ path.join(home, '.azure'),
300
+ path.join(home, '.config', 'gcloud'),
301
+ path.join(home, 'Library', 'Keychains'),
302
+ ]) {
303
+ lines.push(`(deny file-read* (subpath ${sbplString(sensitive)}))`);
304
+ }
305
+ for (const sensitive of ['.env', '.env.local', '.env.production', '.npmrc', '.netrc']) {
306
+ lines.push(`(deny file-read* (literal ${sbplString(path.join(projectRoot, sensitive))}))`);
307
+ }
308
+ lines.push(allowNetwork ? '(allow network*)' : '(deny network*)');
309
+ return lines.join('\n');
310
+ }
311
+ // ============================================================================
312
+ // Planning
313
+ // ============================================================================
314
+ /**
315
+ * Extra requirements a backend has beyond "the probe passed".
316
+ * Returns the blocking reason, or undefined when the backend is usable as-is.
317
+ */
318
+ function missingRequirement(backend, settings) {
319
+ if (backend === 'docker' && !settings.image?.trim()) {
320
+ return 'the docker sandbox backend requires `sandbox.image` to be configured';
321
+ }
322
+ if (backend === 'seatbelt' && settings.allowNetwork !== true) {
323
+ return 'macOS seatbelt cannot verify network isolation; choose docker or explicitly set sandbox.allowNetwork=true';
324
+ }
325
+ return undefined;
326
+ }
327
+ function selectBackend(settings, caps) {
328
+ const requested = settings.backend;
329
+ if (requested && requested !== 'auto') {
330
+ const status = caps.backends.find(b => b.backend === requested);
331
+ if (!status) {
332
+ return { reason: `unknown sandbox backend "${requested}"` };
333
+ }
334
+ if (!status.available) {
335
+ return { reason: status.reason ?? `sandbox backend "${requested}" is unavailable` };
336
+ }
337
+ // An explicit choice reports its own configuration gap verbatim.
338
+ const missing = missingRequirement(requested, settings);
339
+ return missing ? { reason: missing } : { backend: requested };
340
+ }
341
+ // Auto-selection must skip backends that are installed but not yet usable,
342
+ // otherwise a host with an idle Docker daemon would report "image missing"
343
+ // and hide the real reason the preferred backend was unavailable.
344
+ for (const status of caps.backends) {
345
+ if (!status.available)
346
+ continue;
347
+ if (!missingRequirement(status.backend, settings))
348
+ return { backend: status.backend };
349
+ }
350
+ const detail = caps.backends
351
+ .map(b => {
352
+ if (!b.available)
353
+ return `${b.backend} (${b.reason ?? 'unavailable'})`;
354
+ return `${b.backend} (${missingRequirement(b.backend, settings)})`;
355
+ })
356
+ .join('; ');
357
+ return { reason: `no sandbox backend is available on ${caps.platform}: ${detail}` };
358
+ }
359
+ function plainPlan(command) {
360
+ return {
361
+ ok: true,
362
+ profile: 'none',
363
+ backend: 'none',
364
+ file: 'sh',
365
+ args: ['-c', command],
366
+ network: 'allowed',
367
+ writableRoots: [],
368
+ };
369
+ }
370
+ /**
371
+ * Turn a shell command into a spawnable argv under the configured profile.
372
+ *
373
+ * The returned `args` always end with the untouched user command as one
374
+ * element, so no intermediate shell re-parses it.
375
+ */
376
+ function planSandboxedCommand(command, options) {
377
+ const settings = options.settings ?? {};
378
+ const rawProfile = settings.profile ?? 'none';
379
+ if (!isSandboxProfile(rawProfile)) {
380
+ // Do not silently downgrade: an unknown value most likely comes from a
381
+ // newer Orion that meant something stricter than `none`.
382
+ return {
383
+ ok: false,
384
+ profile: String(rawProfile),
385
+ reason: `unknown sandbox profile "${String(rawProfile)}"; expected one of ${exports.SANDBOX_PROFILES.join(', ')}`,
386
+ capabilities: options.capabilities ?? detectSandboxCapabilities(),
387
+ };
388
+ }
389
+ if (rawProfile === 'none')
390
+ return plainPlan(command);
391
+ const caps = options.capabilities ?? detectSandboxCapabilities();
392
+ const selected = selectBackend(settings, caps);
393
+ if (!selected.backend) {
394
+ return {
395
+ ok: false,
396
+ profile: rawProfile,
397
+ reason: selected.reason ?? 'no sandbox backend available',
398
+ capabilities: caps,
399
+ };
400
+ }
401
+ const allowNetwork = settings.allowNetwork === true;
402
+ const writableRoots = rawProfile === 'workspace-write'
403
+ ? uniquePaths([options.cwd, os.tmpdir(), ...(settings.writableRoots ?? [])])
404
+ : [];
405
+ if (selected.backend === 'seatbelt') {
406
+ const policy = buildSeatbeltPolicy(writableRoots, allowNetwork, options.cwd);
407
+ return {
408
+ ok: true,
409
+ profile: rawProfile,
410
+ backend: 'seatbelt',
411
+ file: '/usr/bin/sandbox-exec',
412
+ args: ['-p', policy, INNER_SHELL, '-c', command],
413
+ network: allowNetwork ? 'allowed' : 'blocked',
414
+ writableRoots,
415
+ policy,
416
+ };
417
+ }
418
+ if (selected.backend === 'bubblewrap') {
419
+ const args = ['--die-with-parent', '--proc', '/proc', '--dev', '/dev'];
420
+ if (!allowNetwork)
421
+ args.push('--unshare-net');
422
+ for (const ro of ['/usr', '/bin', '/sbin', '/lib', '/lib64', '/etc', '/opt']) {
423
+ if (fs.existsSync(ro))
424
+ args.push('--ro-bind', ro, ro);
425
+ }
426
+ // Read-only view of the workspace, upgraded to read-write only when the
427
+ // profile asks for it.
428
+ const workspace = realpathOrSelf(options.cwd);
429
+ args.push(writableRoots.length > 0 ? '--bind' : '--ro-bind', workspace, workspace);
430
+ for (const root of writableRoots) {
431
+ if (root === workspace)
432
+ continue;
433
+ args.push('--bind', root, root);
434
+ }
435
+ args.push('--chdir', workspace, INNER_SHELL, '-c', command);
436
+ return {
437
+ ok: true,
438
+ profile: rawProfile,
439
+ backend: 'bubblewrap',
440
+ file: 'bwrap',
441
+ args,
442
+ network: allowNetwork ? 'allowed' : 'blocked',
443
+ writableRoots,
444
+ };
445
+ }
446
+ // docker
447
+ const image = settings.image?.trim();
448
+ if (!image) {
449
+ return {
450
+ ok: false,
451
+ profile: rawProfile,
452
+ reason: 'the docker sandbox backend requires `sandbox.image` to be configured',
453
+ capabilities: caps,
454
+ };
455
+ }
456
+ // Docker runs in a separate VM (Docker Desktop on macOS). The host path we
457
+ // pass to `-v` must be in the form Docker Desktop actually shares; resolving
458
+ // symlinks (e.g. macOS `/var` -> `/private/var`) points at a path Docker
459
+ // Desktop does not map, so the bind mount silently creates an empty
460
+ // directory and writes land somewhere the caller cannot see. We therefore
461
+ // mount `options.cwd` exactly as supplied. Per-directory write confinement
462
+ // for docker comes from `--read-only` (immutable image rootfs) plus the
463
+ // explicit rw bind mounts below — not from path-text matching.
464
+ const workspace = options.cwd;
465
+ const args = ['run', '--rm', '-i', '--read-only'];
466
+ if (!allowNetwork)
467
+ args.push('--network', 'none');
468
+ if (writableRoots.length > 0) {
469
+ args.push('-v', `${workspace}:${workspace}:rw`);
470
+ const seen = new Set([workspace]);
471
+ // Raw (non-realpathed) extra roots so Docker Desktop can resolve them.
472
+ for (const raw of [os.tmpdir(), ...(settings.writableRoots ?? [])]) {
473
+ if (!raw || seen.has(raw))
474
+ continue;
475
+ seen.add(raw);
476
+ args.push('-v', `${raw}:${raw}:rw`);
477
+ }
478
+ }
479
+ else {
480
+ args.push('-v', `${workspace}:${workspace}:ro`);
481
+ }
482
+ args.push('-w', workspace, image, INNER_SHELL, '-c', command);
483
+ return {
484
+ ok: true,
485
+ profile: rawProfile,
486
+ backend: 'docker',
487
+ file: 'docker',
488
+ args,
489
+ network: allowNetwork ? 'allowed' : 'blocked',
490
+ writableRoots,
491
+ };
492
+ }
493
+ /** One-line audit description of an active plan. */
494
+ function describeSandboxPlan(plan) {
495
+ if (plan.backend === 'none')
496
+ return 'sandbox: none';
497
+ const roots = plan.writableRoots.length > 0 ? plan.writableRoots.join(', ') : '(none)';
498
+ return `sandbox: ${plan.profile} via ${plan.backend}, network ${plan.network}, writable ${roots}`;
499
+ }
500
+ //# sourceMappingURL=sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/tools/sandbox.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2FH,gDAWC;AAGD,wDAcC;AASD,kEAEC;AAkED,8DAUC;AAGD,8DAMC;AAyCD,kDA8BC;AA0ED,oDAwHC;AAGD,kDAIC;AAreD,iDAA0C;AAC1C,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAE7B,6DAA+E;AAWlE,QAAA,gBAAgB,GAA8B,CAAC,MAAM,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;AAEvF,QAAA,gBAAgB,GAA8B,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;AAkDhG,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E,mFAAmF;AACnF,MAAM,WAAW,GAAG,SAAS,CAAC;AAE9B,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,wBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3F,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAChC,MAAiC,EACjC,OAAkC;IAElC,OAAO;QACL,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,OAAO;QAC5C,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,OAAO;QAC5C,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,MAAM,EAAE,YAAY;QAC3D,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC;QAC5F,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK;KACvC,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,SAAgB,sBAAsB,CAAC,WAAmB;IACxD,IAAI,MAAiC,CAAC;IACtC,IAAI,OAAkC,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,IAAA,gCAAgB,GAAE,CAAC,OAAO,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,CAAC;QACH,OAAO,GAAG,IAAA,gCAAgB,EAAC,WAAW,CAAC,CAAC,OAAO,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,SAAS,CAAC;IACtB,CAAC;IACD,OAAO,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,IAAI,eAAgD,CAAC;AAErD,sFAAsF;AACtF,SAAgB,2BAA2B;IACzC,eAAe,GAAG,SAAS,CAAC;AAC9B,CAAC;AAED,SAAS,KAAK,CAAC,IAAY,EAAE,IAAc,EAAE,SAAS,GAAG,IAAI;IAC3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAA,yBAAS,EAAC,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5E,IAAI,GAAG,CAAC,KAAK;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC/D,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;QAC/D,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC;IACrF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACjF,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,QAAyB;IAC9C,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;IACtF,CAAC;IACD,2EAA2E;IAC3E,2DAA2D;IAC3D,MAAM,GAAG,GAAG,KAAK,CAAC,uBAAuB,EAAE,CAAC,IAAI,EAAE,4BAA4B,EAAE,eAAe,CAAC,CAAC,CAAC;IAClG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE,UAAU;YACnB,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,8BAA8B,GAAG,CAAC,MAAM,IAAI,eAAe,EAAE;SACtE,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,wEAAwE;KACjF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,QAAyB;IAChD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC;IAC1F,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE,YAAY;YACrB,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,sBAAsB,GAAG,CAAC,MAAM,IAAI,WAAW,EAAE;SAC1D,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;AACxE,CAAC;AAED,SAAS,WAAW;IAClB,uEAAuE;IACvE,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,oBAAoB,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9E,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE,QAAQ;YACjB,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,8BAA8B,GAAG,CAAC,MAAM,IAAI,WAAW,EAAE;SAClE,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,MAAM,IAAI,SAAS,EAAE,EAAE,CAAC;AAC7F,CAAC;AAED,sEAAsE;AACtE,SAAgB,yBAAyB,CAAC,KAAK,GAAG,KAAK;IACrD,IAAI,eAAe,IAAI,CAAC,KAAK;QAAE,OAAO,eAAe,CAAC;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,QAAQ,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IACrF,eAAe,GAAG;QAChB,QAAQ;QACR,QAAQ;QACR,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,OAAO;KACpD,CAAC;IACF,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,kEAAkE;AAClE,SAAgB,yBAAyB,CAAC,IAAyB;IACjE,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC3B,CAAC,CAAC,SAAS;QACT,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9D,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACnE,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,8EAA8E;AAC9E,SAAS,cAAc,CAAC,CAAS;IAC/B,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAe;IAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,SAAS;QACjC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gDAAgD;AAChD,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;AAClE,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,mBAAmB,CACjC,aAAuB,EACvB,YAAqB,EACrB,cAAsB,OAAO,CAAC,GAAG,EAAE;IAEnC,MAAM,KAAK,GAAG,CAAC,aAAa,EAAE,iBAAiB,EAAE,oBAAoB,CAAC,CAAC;IACvE,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,+BAA+B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC;IACD,8EAA8E;IAC9E,2DAA2D;IAC3D,KAAK,CAAC,IAAI,CACR,kJAAkJ,CACnJ,CAAC;IACF,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,KAAK,MAAM,SAAS,IAAI;QACtB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC;KACxC,EAAE,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,6BAA6B,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC;IACD,KAAK,MAAM,SAAS,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;QACtF,KAAK,CAAC,IAAI,CAAC,6BAA6B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7F,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E;;;GAGG;AACH,SAAS,kBAAkB,CAAC,OAAuB,EAAE,QAAuB;IAC1E,IAAI,OAAO,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;QACpD,OAAO,sEAAsE,CAAC;IAChF,CAAC;IACD,IAAI,OAAO,KAAK,UAAU,IAAI,QAAQ,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;QAC7D,OAAO,2GAA2G,CAAC;IACrH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CACpB,QAAuB,EACvB,IAAyB;IAEzB,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC;IAEnC,IAAI,SAAS,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,MAAM,EAAE,4BAA4B,SAAS,GAAG,EAAE,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,oBAAoB,SAAS,kBAAkB,EAAE,CAAC;QACtF,CAAC;QACD,iEAAiE;QACjE,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACxD,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAChE,CAAC;IAED,2EAA2E;IAC3E,2EAA2E;IAC3E,kEAAkE;IAClE,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,SAAS;QAChC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IACxF,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE;QACP,IAAI,CAAC,CAAC,CAAC,SAAS;YAAE,OAAO,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,IAAI,aAAa,GAAG,CAAC;QACvE,OAAO,GAAG,CAAC,CAAC,OAAO,KAAK,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC;IACrE,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,sCAAsC,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,EAAE,CAAC;AACtF,CAAC;AAED,SAAS,SAAS,CAAC,OAAe;IAChC,OAAO;QACL,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC;QACrB,OAAO,EAAE,SAAS;QAClB,aAAa,EAAE,EAAE;KAClB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,oBAAoB,CAClC,OAAe,EACf,OAA2B;IAE3B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,IAAI,MAAM,CAAC;IAE9C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,uEAAuE;QACvE,yDAAyD;QACzD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC;YAC3B,MAAM,EAAE,4BAA4B,MAAM,CAAC,UAAU,CAAC,sBAAsB,wBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACzG,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,yBAAyB,EAAE;SAClE,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;IAErD,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,IAAI,yBAAyB,EAAE,CAAC;IACjE,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,8BAA8B;YACzD,YAAY,EAAE,IAAI;SACnB,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC;IACpD,MAAM,aAAa,GACjB,UAAU,KAAK,iBAAiB;QAC9B,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAC,EAAE,CAAC;IAET,IAAI,QAAQ,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,mBAAmB,CAAC,aAAa,EAAE,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7E,OAAO;YACL,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,UAAU;YACnB,OAAO,EAAE,UAAU;YACnB,IAAI,EAAE,uBAAuB;YAC7B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC;YAChD,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YAC7C,aAAa;YACb,MAAM;SACP,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;QACtC,MAAM,IAAI,GAAa,CAAC,mBAAmB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACjF,IAAI,CAAC,YAAY;YAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9C,KAAK,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;YAC7E,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,wEAAwE;QACxE,uBAAuB;QACvB,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACnF,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,IAAI,IAAI,KAAK,SAAS;gBAAE,SAAS;YACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5D,OAAO;YACL,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,UAAU;YACnB,OAAO,EAAE,YAAY;YACrB,IAAI,EAAE,OAAO;YACb,IAAI;YACJ,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YAC7C,aAAa;SACd,CAAC;IACJ,CAAC;IAED,SAAS;IACT,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;IACrC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,sEAAsE;YAC9E,YAAY,EAAE,IAAI;SACnB,CAAC;IACJ,CAAC;IACD,2EAA2E;IAC3E,6EAA6E;IAC7E,yEAAyE;IACzE,oEAAoE;IACpE,0EAA0E;IAC1E,2EAA2E;IAC3E,wEAAwE;IACxE,+DAA+D;IAC/D,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;IAC9B,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;IAClD,IAAI,CAAC,YAAY;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAClD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,SAAS,IAAI,SAAS,KAAK,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1C,uEAAuE;QACvE,KAAK,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACnE,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YACpC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,SAAS,IAAI,SAAS,KAAK,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,OAAO;QACL,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,QAAQ;QACd,IAAI;QACJ,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QAC7C,aAAa;KACd,CAAC;AACJ,CAAC;AAED,oDAAoD;AACpD,SAAgB,mBAAmB,CAAC,IAAwB;IAC1D,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM;QAAE,OAAO,eAAe,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACvF,OAAO,YAAY,IAAI,CAAC,OAAO,QAAQ,IAAI,CAAC,OAAO,aAAa,IAAI,CAAC,OAAO,cAAc,KAAK,EAAE,CAAC;AACpG,CAAC"}
@@ -6,13 +6,13 @@
6
6
  * State is held in the shared tool-state module so the CLI can mirror it
7
7
  * into the main Store and render it in the UI.
8
8
  */
9
- import { type OpenHorseTool } from '../framework/tool';
9
+ import { type OrionCodeTool } from '../framework/tool';
10
10
  import { type TodoItem } from '../framework/tool-state';
11
- export declare const todoWriteTool: OpenHorseTool;
11
+ export declare const todoWriteTool: OrionCodeTool;
12
12
  /** Get current todos (for UI display) */
13
13
  export declare function getCurrentTodos(): TodoItem[];
14
14
  /** Format todos for display */
15
15
  export declare function formatTodosForDisplay(todos: TodoItem[]): string;
16
16
  export type { TodoItem };
17
- export declare const TODO_TOOLS: OpenHorseTool[];
17
+ export declare const TODO_TOOLS: OrionCodeTool[];
18
18
  //# sourceMappingURL=todo.d.ts.map
@@ -6,7 +6,15 @@
6
6
  *
7
7
  * Issue #32 #3.7: SSRF 拦截 - 拒绝访问内网地址 + Content-Length 上限
8
8
  */
9
- import { type OpenHorseTool } from '../framework/tool';
9
+ import { type OrionCodeTool } from '../framework/tool';
10
+ import { type Dispatcher } from 'undici';
11
+ interface ResolvedAddress {
12
+ address: string;
13
+ family: number;
14
+ }
15
+ type DnsResolver = (hostname: string) => Promise<ResolvedAddress[]>;
16
+ /** Test seam for deterministic DNS-rebinding and private-address cases. */
17
+ export declare function setWebFetchDnsResolverForTests(resolver?: DnsResolver): void;
10
18
  /**
11
19
  * 检查 URL 是否为内网地址
12
20
  * @param url - 要检查的 URL
@@ -16,11 +24,14 @@ declare function isUrlSafeForSSRF(url: string): {
16
24
  safe: boolean;
17
25
  reason?: string;
18
26
  };
27
+ type PinnedDispatcherBuilder = (hostname: string, addresses: ResolvedAddress[]) => Dispatcher | null;
28
+ /** Test seam: replace the pinned-dispatcher builder (e.g. to capture pinned addresses). */
29
+ export declare function setBuildPinnedDispatcherForTests(builder?: PinnedDispatcherBuilder): void;
19
30
  export { isUrlSafeForSSRF };
20
31
  /** Clear the fetch cache (test helper / debugging) */
21
32
  export declare function clearWebFetchCache(): void;
22
- export declare const webFetchTool: OpenHorseTool;
33
+ export declare const webFetchTool: OrionCodeTool;
23
34
  export declare function resetWebSearchMcpClientForTests(): void;
24
- export declare const webSearchTool: OpenHorseTool;
25
- export declare const WEB_TOOLS: OpenHorseTool[];
35
+ export declare const webSearchTool: OrionCodeTool;
36
+ export declare const WEB_TOOLS: OrionCodeTool[];
26
37
  //# sourceMappingURL=web.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/tools/web.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAqDlE;;;;GAIG;AACH,iBAAS,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAkDzE;AAoED,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAgN5B,sDAAsD;AACtD,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AA0BD,eAAO,MAAM,YAAY,EAAE,aA4GzB,CAAC;AAkCH,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD;AAED,eAAO,MAAM,aAAa,EAAE,aAkI1B,CAAC;AAMH,eAAO,MAAM,SAAS,EAAE,aAAa,EAAkC,CAAC"}
1
+ {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/tools/web.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AA2DhD,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,WAAW,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;AAOpE,2EAA2E;AAC3E,wBAAgB,8BAA8B,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,IAAI,CAE3E;AAmDD;;;;GAIG;AACH,iBAAS,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CA+CzE;AAkHD,KAAK,uBAAuB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,UAAU,GAAG,IAAI,CAAC;AAKrG,2FAA2F;AAC3F,wBAAgB,gCAAgC,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAGxF;AAqED,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAiV5B,sDAAsD;AACtD,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AA0BD,eAAO,MAAM,YAAY,EAAE,aAmHzB,CAAC;AAkCH,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD;AAED,eAAO,MAAM,aAAa,EAAE,aAkI1B,CAAC;AAMH,eAAO,MAAM,SAAS,EAAE,aAAa,EAAkC,CAAC"}