@intentic/sandbox-contract 1.248.0 → 1.250.0

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 (879) hide show
  1. package/README.md +18 -15
  2. package/dist/chores/chores.d.ts.map +1 -1
  3. package/dist/chores/chores.js.map +1 -1
  4. package/dist/chores/digest.d.ts.map +1 -1
  5. package/dist/chores/digest.js.map +1 -1
  6. package/dist/chores/extension-update.d.ts.map +1 -1
  7. package/dist/chores/extension-update.js.map +1 -1
  8. package/dist/chores/fix-deps.d.ts.map +1 -1
  9. package/dist/chores/fix-deps.js.map +1 -1
  10. package/dist/chores/index.d.ts +2 -2
  11. package/dist/chores/index.d.ts.map +1 -1
  12. package/dist/chores/index.js +1 -1
  13. package/dist/chores/index.js.map +1 -1
  14. package/dist/chores/probes.d.ts.map +1 -1
  15. package/dist/chores/probes.js.map +1 -1
  16. package/dist/chores/prompt.d.ts.map +1 -1
  17. package/dist/chores/prompt.js.map +1 -1
  18. package/dist/chores/stack.d.ts.map +1 -1
  19. package/dist/chores/stack.js.map +1 -1
  20. package/dist/chores/verdict.d.ts +7 -1
  21. package/dist/chores/verdict.d.ts.map +1 -1
  22. package/dist/chores/verdict.js +8 -0
  23. package/dist/chores/verdict.js.map +1 -1
  24. package/dist/contracts/accounts.contract.d.ts.map +1 -1
  25. package/dist/contracts/accounts.contract.js.map +1 -1
  26. package/dist/contracts/activity.contract.d.ts +1 -0
  27. package/dist/contracts/activity.contract.d.ts.map +1 -1
  28. package/dist/contracts/agent.contract.d.ts +12 -205
  29. package/dist/contracts/agent.contract.d.ts.map +1 -1
  30. package/dist/contracts/agent.contract.js +2 -1
  31. package/dist/contracts/agent.contract.js.map +1 -1
  32. package/dist/contracts/agents.contract.d.ts +228 -54
  33. package/dist/contracts/agents.contract.d.ts.map +1 -1
  34. package/dist/contracts/agents.contract.js +11 -2
  35. package/dist/contracts/agents.contract.js.map +1 -1
  36. package/dist/contracts/automations.contract.d.ts +35 -17
  37. package/dist/contracts/automations.contract.d.ts.map +1 -1
  38. package/dist/contracts/automations.contract.js +10 -1
  39. package/dist/contracts/automations.contract.js.map +1 -1
  40. package/dist/contracts/capabilities.contract.d.ts +0 -12
  41. package/dist/contracts/capabilities.contract.d.ts.map +1 -1
  42. package/dist/contracts/capabilities.contract.js +1 -1
  43. package/dist/contracts/capabilities.contract.js.map +1 -1
  44. package/dist/contracts/chores.contract.d.ts.map +1 -1
  45. package/dist/contracts/chores.contract.js.map +1 -1
  46. package/dist/contracts/ci.contract.d.ts +9 -0
  47. package/dist/contracts/ci.contract.d.ts.map +1 -1
  48. package/dist/contracts/endpoints.contract.d.ts.map +1 -1
  49. package/dist/contracts/endpoints.contract.js.map +1 -1
  50. package/dist/contracts/exit.contract.d.ts.map +1 -1
  51. package/dist/contracts/exit.contract.js +1 -1
  52. package/dist/contracts/exit.contract.js.map +1 -1
  53. package/dist/contracts/extensions.contract.d.ts.map +1 -1
  54. package/dist/contracts/extensions.contract.js.map +1 -1
  55. package/dist/contracts/git.contract.d.ts +45 -6
  56. package/dist/contracts/git.contract.d.ts.map +1 -1
  57. package/dist/contracts/git.contract.js +9 -9
  58. package/dist/contracts/git.contract.js.map +1 -1
  59. package/dist/contracts/host.contract.d.ts +2 -0
  60. package/dist/contracts/host.contract.d.ts.map +1 -1
  61. package/dist/contracts/host.contract.js.map +1 -1
  62. package/dist/contracts/intentic.contract.js +1 -1
  63. package/dist/contracts/intentic.contract.js.map +1 -1
  64. package/dist/contracts/logs.contract.d.ts.map +1 -1
  65. package/dist/contracts/logs.contract.js.map +1 -1
  66. package/dist/contracts/loops.contract.d.ts.map +1 -1
  67. package/dist/contracts/loops.contract.js.map +1 -1
  68. package/dist/contracts/personas.contract.d.ts +1 -0
  69. package/dist/contracts/personas.contract.d.ts.map +1 -1
  70. package/dist/contracts/personas.contract.js +1 -1
  71. package/dist/contracts/personas.contract.js.map +1 -1
  72. package/dist/contracts/providers.contract.d.ts.map +1 -1
  73. package/dist/contracts/providers.contract.js.map +1 -1
  74. package/dist/contracts/runner.contract.d.ts +97 -171
  75. package/dist/contracts/runner.contract.d.ts.map +1 -1
  76. package/dist/contracts/runner.contract.js +2 -2
  77. package/dist/contracts/runner.contract.js.map +1 -1
  78. package/dist/contracts/safety.contract.d.ts.map +1 -1
  79. package/dist/contracts/safety.contract.js +1 -1
  80. package/dist/contracts/safety.contract.js.map +1 -1
  81. package/dist/contracts/secrets.contract.d.ts.map +1 -1
  82. package/dist/contracts/secrets.contract.js.map +1 -1
  83. package/dist/contracts/sessions.contract.d.ts +2 -41
  84. package/dist/contracts/sessions.contract.d.ts.map +1 -1
  85. package/dist/contracts/sessions.contract.js +1 -1
  86. package/dist/contracts/sessions.contract.js.map +1 -1
  87. package/dist/contracts/settings.contract.d.ts +8 -18
  88. package/dist/contracts/settings.contract.d.ts.map +1 -1
  89. package/dist/contracts/settings.contract.js.map +1 -1
  90. package/dist/contracts/share.contract.d.ts.map +1 -1
  91. package/dist/contracts/share.contract.js.map +1 -1
  92. package/dist/contracts/skills.contract.d.ts +6 -0
  93. package/dist/contracts/skills.contract.d.ts.map +1 -1
  94. package/dist/contracts/skills.contract.js +13 -4
  95. package/dist/contracts/skills.contract.js.map +1 -1
  96. package/dist/contracts/system.contract.d.ts +49 -73
  97. package/dist/contracts/system.contract.d.ts.map +1 -1
  98. package/dist/contracts/system.contract.js +12 -2
  99. package/dist/contracts/system.contract.js.map +1 -1
  100. package/dist/contracts/usage.contract.d.ts.map +1 -1
  101. package/dist/contracts/usage.contract.js.map +1 -1
  102. package/dist/contracts/vpn.contract.d.ts.map +1 -1
  103. package/dist/contracts/vpn.contract.js +1 -1
  104. package/dist/contracts/vpn.contract.js.map +1 -1
  105. package/dist/contracts/webext.contract.d.ts.map +1 -1
  106. package/dist/contracts/webext.contract.js.map +1 -1
  107. package/dist/contracts/workflows.contract.d.ts +7 -6
  108. package/dist/contracts/workflows.contract.d.ts.map +1 -1
  109. package/dist/contracts/workflows.contract.js +12 -3
  110. package/dist/contracts/workflows.contract.js.map +1 -1
  111. package/dist/contracts/workspace.contract.d.ts.map +1 -1
  112. package/dist/contracts/workspace.contract.js.map +1 -1
  113. package/dist/events/agent-events.d.ts +1237 -0
  114. package/dist/events/agent-events.d.ts.map +1 -0
  115. package/dist/events/agent-events.js +226 -0
  116. package/dist/events/agent-events.js.map +1 -0
  117. package/dist/events/cards.d.ts +404 -0
  118. package/dist/events/cards.d.ts.map +1 -0
  119. package/dist/events/cards.js +179 -0
  120. package/dist/events/cards.js.map +1 -0
  121. package/dist/events/resume.d.ts +23 -0
  122. package/dist/events/resume.d.ts.map +1 -0
  123. package/dist/events/resume.js +31 -0
  124. package/dist/events/resume.js.map +1 -0
  125. package/dist/events/system-events.d.ts +615 -0
  126. package/dist/events/system-events.d.ts.map +1 -0
  127. package/dist/events/system-events.js +64 -0
  128. package/dist/events/system-events.js.map +1 -0
  129. package/dist/events/transcript.d.ts +1755 -0
  130. package/dist/events/transcript.d.ts.map +1 -0
  131. package/dist/events/transcript.js +205 -0
  132. package/dist/events/transcript.js.map +1 -0
  133. package/dist/ids/conversation-ids.d.ts +8 -0
  134. package/dist/ids/conversation-ids.d.ts.map +1 -0
  135. package/dist/{conversation-ids.js → ids/conversation-ids.js} +13 -0
  136. package/dist/ids/conversation-ids.js.map +1 -0
  137. package/dist/ids/hostnames.d.ts.map +1 -0
  138. package/dist/ids/hostnames.js.map +1 -0
  139. package/dist/ids/session-names.d.ts.map +1 -0
  140. package/dist/ids/session-names.js.map +1 -0
  141. package/dist/ids/share-paths.d.ts.map +1 -0
  142. package/dist/ids/share-paths.js.map +1 -0
  143. package/dist/{tunnel-ids.d.ts → ids/tunnel-ids.d.ts} +1 -0
  144. package/dist/ids/tunnel-ids.d.ts.map +1 -0
  145. package/dist/{tunnel-ids.js → ids/tunnel-ids.js} +1 -0
  146. package/dist/ids/tunnel-ids.js.map +1 -0
  147. package/dist/index.d.ts +429 -450
  148. package/dist/index.d.ts.map +1 -1
  149. package/dist/index.js +54 -46
  150. package/dist/index.js.map +1 -1
  151. package/dist/{agent-catalog.d.ts → models/agent-catalog.d.ts} +2 -2
  152. package/dist/models/agent-catalog.d.ts.map +1 -0
  153. package/dist/models/agent-catalog.js.map +1 -0
  154. package/dist/models/agent-runtimes.d.ts.map +1 -0
  155. package/dist/models/agent-runtimes.js.map +1 -0
  156. package/dist/{fast-tier.d.ts → models/fast-tier.d.ts} +1 -1
  157. package/dist/models/fast-tier.d.ts.map +1 -0
  158. package/dist/models/fast-tier.js.map +1 -0
  159. package/dist/models/model-order.d.ts.map +1 -0
  160. package/dist/{model-order.js → models/model-order.js} +2 -0
  161. package/dist/models/model-order.js.map +1 -0
  162. package/dist/{model-pins.d.ts → models/model-pins.d.ts} +1 -1
  163. package/dist/models/model-pins.d.ts.map +1 -0
  164. package/dist/models/model-pins.js.map +1 -0
  165. package/dist/{model-roles.d.ts → models/model-roles.d.ts} +0 -33
  166. package/dist/models/model-roles.d.ts.map +1 -0
  167. package/dist/{model-roles.js → models/model-roles.js} +0 -35
  168. package/dist/models/model-roles.js.map +1 -0
  169. package/dist/{plan-pools.d.ts → models/plan-pools.d.ts} +1 -1
  170. package/dist/models/plan-pools.d.ts.map +1 -0
  171. package/dist/models/plan-pools.js.map +1 -0
  172. package/dist/models/prompt-complexity.d.ts.map +1 -0
  173. package/dist/models/prompt-complexity.js.map +1 -0
  174. package/dist/models/provider-specs.d.ts.map +1 -0
  175. package/dist/models/provider-specs.js.map +1 -0
  176. package/dist/policy/approvals-execution.d.ts.map +1 -0
  177. package/dist/policy/approvals-execution.js.map +1 -0
  178. package/dist/{batch-runs.d.ts → policy/batch-runs.d.ts} +5 -1
  179. package/dist/policy/batch-runs.d.ts.map +1 -0
  180. package/dist/{batch-runs.js → policy/batch-runs.js} +10 -7
  181. package/dist/policy/batch-runs.js.map +1 -0
  182. package/dist/policy/capability-env.d.ts.map +1 -0
  183. package/dist/policy/capability-env.js.map +1 -0
  184. package/dist/policy/capability-secrets.d.ts.map +1 -0
  185. package/dist/policy/capability-secrets.js.map +1 -0
  186. package/dist/{card-status.d.ts → policy/card-status.d.ts} +2 -2
  187. package/dist/policy/card-status.d.ts.map +1 -0
  188. package/dist/{card-status.js → policy/card-status.js} +1 -5
  189. package/dist/policy/card-status.js.map +1 -0
  190. package/dist/{command-classes.d.ts → policy/command-classes.d.ts} +6 -2
  191. package/dist/policy/command-classes.d.ts.map +1 -0
  192. package/dist/{command-classes.js → policy/command-classes.js} +48 -11
  193. package/dist/policy/command-classes.js.map +1 -0
  194. package/dist/{command-run.d.ts → policy/command-run.d.ts} +1 -1
  195. package/dist/policy/command-run.d.ts.map +1 -0
  196. package/dist/policy/command-run.js.map +1 -0
  197. package/dist/policy/control-scopes.d.ts +16 -0
  198. package/dist/policy/control-scopes.d.ts.map +1 -0
  199. package/dist/policy/control-scopes.js +26 -0
  200. package/dist/policy/control-scopes.js.map +1 -0
  201. package/dist/policy/credential-material.d.ts.map +1 -0
  202. package/dist/policy/credential-material.js.map +1 -0
  203. package/dist/policy/needs-action.d.ts.map +1 -0
  204. package/dist/policy/needs-action.js.map +1 -0
  205. package/dist/policy/output-fields.d.ts.map +1 -0
  206. package/dist/policy/output-fields.js.map +1 -0
  207. package/dist/policy/overlay-lint.d.ts.map +1 -0
  208. package/dist/policy/overlay-lint.js.map +1 -0
  209. package/dist/policy/owner-ticket.d.ts.map +1 -0
  210. package/dist/{owner-ticket.js → policy/owner-ticket.js} +1 -1
  211. package/dist/policy/owner-ticket.js.map +1 -0
  212. package/dist/{safety-policy.d.ts → policy/safety-policy.d.ts} +6 -5
  213. package/dist/policy/safety-policy.d.ts.map +1 -0
  214. package/dist/{safety-policy.js → policy/safety-policy.js} +12 -12
  215. package/dist/policy/safety-policy.js.map +1 -0
  216. package/dist/policy/search-globs.d.ts.map +1 -0
  217. package/dist/policy/search-globs.js.map +1 -0
  218. package/dist/protocol/container-requirements.d.ts +20 -0
  219. package/dist/protocol/container-requirements.d.ts.map +1 -0
  220. package/dist/protocol/container-requirements.js +23 -0
  221. package/dist/protocol/container-requirements.js.map +1 -0
  222. package/dist/{host-protocol.d.ts → protocol/host-protocol.d.ts} +1 -0
  223. package/dist/protocol/host-protocol.d.ts.map +1 -0
  224. package/dist/{host-protocol.js → protocol/host-protocol.js} +1 -0
  225. package/dist/protocol/host-protocol.js.map +1 -0
  226. package/dist/protocol/ingress-contract.d.ts.map +1 -0
  227. package/dist/{ingress-contract.js → protocol/ingress-contract.js} +1 -1
  228. package/dist/protocol/ingress-contract.js.map +1 -0
  229. package/dist/protocol/ingress-protocol.d.ts.map +1 -0
  230. package/dist/protocol/ingress-protocol.js.map +1 -0
  231. package/dist/protocol/listener-protocol.d.ts.map +1 -0
  232. package/dist/{listener-protocol.js → protocol/listener-protocol.js} +1 -1
  233. package/dist/protocol/listener-protocol.js.map +1 -0
  234. package/dist/{peer-dial.d.ts → protocol/peer-dial.d.ts} +4 -1
  235. package/dist/protocol/peer-dial.d.ts.map +1 -0
  236. package/dist/{peer-dial.js → protocol/peer-dial.js} +51 -10
  237. package/dist/protocol/peer-dial.js.map +1 -0
  238. package/dist/protocol/peer-mcp-server.d.ts.map +1 -0
  239. package/dist/protocol/peer-mcp-server.js.map +1 -0
  240. package/dist/protocol/request-id.d.ts.map +1 -0
  241. package/dist/protocol/request-id.js.map +1 -0
  242. package/dist/protocol/routes.d.ts.map +1 -0
  243. package/dist/protocol/routes.js.map +1 -0
  244. package/dist/{runner-protocol.d.ts → protocol/runner-protocol.d.ts} +1 -0
  245. package/dist/protocol/runner-protocol.d.ts.map +1 -0
  246. package/dist/{runner-protocol.js → protocol/runner-protocol.js} +2 -1
  247. package/dist/protocol/runner-protocol.js.map +1 -0
  248. package/dist/protocol/sse.d.ts.map +1 -0
  249. package/dist/protocol/sse.js.map +1 -0
  250. package/dist/{terminal-protocol.d.ts → protocol/terminal-protocol.d.ts} +1 -3
  251. package/dist/protocol/terminal-protocol.d.ts.map +1 -0
  252. package/dist/protocol/terminal-protocol.js.map +1 -0
  253. package/dist/protocol/webext-links.d.ts.map +1 -0
  254. package/dist/protocol/webext-links.js.map +1 -0
  255. package/dist/{webext-protocol.d.ts → protocol/webext-protocol.d.ts} +1 -0
  256. package/dist/protocol/webext-protocol.d.ts.map +1 -0
  257. package/dist/{webext-protocol.js → protocol/webext-protocol.js} +1 -0
  258. package/dist/protocol/webext-protocol.js.map +1 -0
  259. package/dist/schemas/activity.d.ts +2 -0
  260. package/dist/schemas/activity.d.ts.map +1 -1
  261. package/dist/schemas/activity.js +4 -0
  262. package/dist/schemas/activity.js.map +1 -1
  263. package/dist/schemas/agent.d.ts +16 -4
  264. package/dist/schemas/agent.d.ts.map +1 -1
  265. package/dist/schemas/agent.js +21 -4
  266. package/dist/schemas/agent.js.map +1 -1
  267. package/dist/schemas/agents.d.ts +17 -4
  268. package/dist/schemas/agents.d.ts.map +1 -1
  269. package/dist/schemas/agents.js +15 -4
  270. package/dist/schemas/agents.js.map +1 -1
  271. package/dist/schemas/approvals.d.ts.map +1 -1
  272. package/dist/schemas/approvals.js.map +1 -1
  273. package/dist/schemas/automations.d.ts +54 -28
  274. package/dist/schemas/automations.d.ts.map +1 -1
  275. package/dist/schemas/automations.js +26 -8
  276. package/dist/schemas/automations.js.map +1 -1
  277. package/dist/schemas/capabilities.d.ts +0 -8
  278. package/dist/schemas/capabilities.d.ts.map +1 -1
  279. package/dist/schemas/capabilities.js +0 -4
  280. package/dist/schemas/capabilities.js.map +1 -1
  281. package/dist/schemas/ci.d.ts +10 -0
  282. package/dist/schemas/ci.d.ts.map +1 -1
  283. package/dist/schemas/ci.js +9 -1
  284. package/dist/schemas/ci.js.map +1 -1
  285. package/dist/schemas/codebase-health.d.ts.map +1 -1
  286. package/dist/schemas/codebase-health.js.map +1 -1
  287. package/dist/schemas/devices.d.ts +92 -0
  288. package/dist/schemas/devices.d.ts.map +1 -1
  289. package/dist/schemas/devices.js +12 -1
  290. package/dist/schemas/devices.js.map +1 -1
  291. package/dist/schemas/engines.d.ts.map +1 -1
  292. package/dist/schemas/engines.js.map +1 -1
  293. package/dist/schemas/environment.d.ts.map +1 -1
  294. package/dist/schemas/environment.js.map +1 -1
  295. package/dist/schemas/exit.d.ts.map +1 -1
  296. package/dist/schemas/exit.js.map +1 -1
  297. package/dist/schemas/extension-updates.d.ts.map +1 -1
  298. package/dist/schemas/extension-updates.js.map +1 -1
  299. package/dist/schemas/git-history.d.ts.map +1 -1
  300. package/dist/schemas/git-history.js.map +1 -1
  301. package/dist/schemas/git.d.ts +80 -16
  302. package/dist/schemas/git.d.ts.map +1 -1
  303. package/dist/schemas/git.js +37 -25
  304. package/dist/schemas/git.js.map +1 -1
  305. package/dist/schemas/history.d.ts.map +1 -1
  306. package/dist/schemas/history.js.map +1 -1
  307. package/dist/schemas/hosts.d.ts.map +1 -1
  308. package/dist/schemas/hosts.js.map +1 -1
  309. package/dist/schemas/inventory.d.ts.map +1 -1
  310. package/dist/schemas/inventory.js.map +1 -1
  311. package/dist/schemas/issues.d.ts +0 -1
  312. package/dist/schemas/issues.d.ts.map +1 -1
  313. package/dist/schemas/issues.js +0 -1
  314. package/dist/schemas/issues.js.map +1 -1
  315. package/dist/schemas/logs.d.ts.map +1 -1
  316. package/dist/schemas/logs.js.map +1 -1
  317. package/dist/schemas/loops.d.ts.map +1 -1
  318. package/dist/schemas/loops.js +1 -1
  319. package/dist/schemas/loops.js.map +1 -1
  320. package/dist/schemas/maintenance.d.ts.map +1 -1
  321. package/dist/schemas/maintenance.js.map +1 -1
  322. package/dist/schemas/marketplace.d.ts +0 -4
  323. package/dist/schemas/marketplace.d.ts.map +1 -1
  324. package/dist/schemas/panels.d.ts.map +1 -1
  325. package/dist/schemas/panels.js.map +1 -1
  326. package/dist/schemas/personas.d.ts +2 -1
  327. package/dist/schemas/personas.d.ts.map +1 -1
  328. package/dist/schemas/personas.js +6 -2
  329. package/dist/schemas/personas.js.map +1 -1
  330. package/dist/schemas/plan-limits.d.ts +2 -4
  331. package/dist/schemas/plan-limits.d.ts.map +1 -1
  332. package/dist/schemas/plan-limits.js +5 -8
  333. package/dist/schemas/plan-limits.js.map +1 -1
  334. package/dist/schemas/ports.d.ts.map +1 -1
  335. package/dist/schemas/ports.js.map +1 -1
  336. package/dist/schemas/provider-oauth.d.ts.map +1 -1
  337. package/dist/schemas/provider-oauth.js.map +1 -1
  338. package/dist/schemas/provider-subscriptions.d.ts +1 -1
  339. package/dist/schemas/provider-subscriptions.d.ts.map +1 -1
  340. package/dist/schemas/provider-subscriptions.js +1 -1
  341. package/dist/schemas/provider-subscriptions.js.map +1 -1
  342. package/dist/schemas/public.d.ts.map +1 -1
  343. package/dist/schemas/public.js.map +1 -1
  344. package/dist/schemas/push.d.ts.map +1 -1
  345. package/dist/schemas/push.js.map +1 -1
  346. package/dist/schemas/secrets.d.ts.map +1 -1
  347. package/dist/schemas/secrets.js.map +1 -1
  348. package/dist/schemas/settings.d.ts +11 -9
  349. package/dist/schemas/settings.d.ts.map +1 -1
  350. package/dist/schemas/settings.js +22 -7
  351. package/dist/schemas/settings.js.map +1 -1
  352. package/dist/schemas/share.d.ts.map +1 -1
  353. package/dist/schemas/share.js.map +1 -1
  354. package/dist/schemas/shared.d.ts +4 -0
  355. package/dist/schemas/shared.d.ts.map +1 -1
  356. package/dist/schemas/shared.js +3 -0
  357. package/dist/schemas/shared.js.map +1 -1
  358. package/dist/schemas/system.d.ts +6 -0
  359. package/dist/schemas/system.d.ts.map +1 -1
  360. package/dist/schemas/system.js +10 -0
  361. package/dist/schemas/system.js.map +1 -1
  362. package/dist/schemas/terminal.d.ts.map +1 -1
  363. package/dist/schemas/terminal.js.map +1 -1
  364. package/dist/schemas/usage.d.ts.map +1 -1
  365. package/dist/schemas/usage.js.map +1 -1
  366. package/dist/schemas/vpn.d.ts.map +1 -1
  367. package/dist/schemas/vpn.js.map +1 -1
  368. package/dist/schemas/webext.d.ts.map +1 -1
  369. package/dist/schemas/webext.js.map +1 -1
  370. package/dist/schemas/workflows.d.ts +66 -9
  371. package/dist/schemas/workflows.d.ts.map +1 -1
  372. package/dist/schemas/workflows.js +6 -5
  373. package/dist/schemas/workflows.js.map +1 -1
  374. package/dist/schemas/workspace-repos.d.ts.map +1 -1
  375. package/dist/schemas/workspace-repos.js.map +1 -1
  376. package/dist/schemas/workspace-search.d.ts.map +1 -1
  377. package/dist/schemas/workspace-search.js.map +1 -1
  378. package/dist/schemas/workspace-setup.d.ts.map +1 -1
  379. package/dist/schemas/workspace-setup.js.map +1 -1
  380. package/dist/schemas/workspace-tree.d.ts.map +1 -1
  381. package/dist/schemas/workspace-tree.js.map +1 -1
  382. package/dist/state/arrival.d.ts.map +1 -0
  383. package/dist/{arrival.js → state/arrival.js} +1 -1
  384. package/dist/state/arrival.js.map +1 -0
  385. package/dist/state/contract-lock.d.ts.map +1 -0
  386. package/dist/{contract-lock.js → state/contract-lock.js} +1 -1
  387. package/dist/state/contract-lock.js.map +1 -0
  388. package/dist/{definition.d.ts → state/definition.d.ts} +21 -17
  389. package/dist/state/definition.d.ts.map +1 -0
  390. package/dist/{definition.js → state/definition.js} +4 -4
  391. package/dist/state/definition.js.map +1 -0
  392. package/dist/state/history-state.d.ts.map +1 -0
  393. package/dist/{history-state.js → state/history-state.js} +1 -0
  394. package/dist/state/history-state.js.map +1 -0
  395. package/dist/state/runtime-state.d.ts.map +1 -0
  396. package/dist/state/runtime-state.js.map +1 -0
  397. package/dist/state/starter.d.ts.map +1 -0
  398. package/dist/state/starter.js.map +1 -0
  399. package/dist/state/state-portability.d.ts.map +1 -0
  400. package/dist/state/state-portability.js.map +1 -0
  401. package/dist/state/versions.d.ts.map +1 -0
  402. package/dist/state/versions.js.map +1 -0
  403. package/dist/{workspace-state.d.ts → state/workspace-state.d.ts} +8 -0
  404. package/dist/state/workspace-state.d.ts.map +1 -0
  405. package/dist/{workspace-state.js → state/workspace-state.js} +25 -0
  406. package/dist/state/workspace-state.js.map +1 -0
  407. package/dist/{documents.d.ts → text/documents.d.ts} +1 -1
  408. package/dist/text/documents.d.ts.map +1 -0
  409. package/dist/{documents.js → text/documents.js} +1 -1
  410. package/dist/text/documents.js.map +1 -0
  411. package/dist/text/embed.d.ts.map +1 -0
  412. package/dist/text/embed.js.map +1 -0
  413. package/dist/text/mentions.d.ts.map +1 -0
  414. package/dist/text/mentions.js.map +1 -0
  415. package/dist/text/model-answer.d.ts +3 -0
  416. package/dist/text/model-answer.d.ts.map +1 -0
  417. package/dist/text/model-answer.js +3 -0
  418. package/dist/text/model-answer.js.map +1 -0
  419. package/dist/text/path-refs.d.ts.map +1 -0
  420. package/dist/text/path-refs.js.map +1 -0
  421. package/dist/{shell-regions.d.ts → text/shell-regions.d.ts} +1 -1
  422. package/dist/text/shell-regions.d.ts.map +1 -0
  423. package/dist/text/shell-regions.js.map +1 -0
  424. package/dist/text/title.d.ts.map +1 -0
  425. package/dist/text/title.js.map +1 -0
  426. package/dist/{transcript-fold.d.ts → text/transcript-fold.d.ts} +2 -1
  427. package/dist/text/transcript-fold.d.ts.map +1 -0
  428. package/dist/{transcript-fold.js → text/transcript-fold.js} +2 -16
  429. package/dist/text/transcript-fold.js.map +1 -0
  430. package/dist/text/whisper.d.ts +3 -0
  431. package/dist/text/whisper.d.ts.map +1 -0
  432. package/dist/text/whisper.js +11 -0
  433. package/dist/text/whisper.js.map +1 -0
  434. package/dist/{workflow-faults.d.ts → text/workflow-faults.d.ts} +1 -1
  435. package/dist/text/workflow-faults.d.ts.map +1 -0
  436. package/dist/{workflow-faults.js → text/workflow-faults.js} +1 -1
  437. package/dist/text/workflow-faults.js.map +1 -0
  438. package/package.json +70 -70
  439. package/src/chores/chores.test.ts +4 -10
  440. package/src/chores/chores.ts +148 -392
  441. package/src/chores/digest.ts +8 -28
  442. package/src/chores/extension-update.ts +3 -8
  443. package/src/chores/fix-deps.ts +4 -18
  444. package/src/chores/index.ts +2 -2
  445. package/src/chores/probes.test.ts +7 -43
  446. package/src/chores/probes.ts +62 -167
  447. package/src/chores/prompt.ts +10 -34
  448. package/src/chores/stack.test.ts +6 -45
  449. package/src/chores/stack.ts +27 -118
  450. package/src/chores/verdict.test.ts +101 -80
  451. package/src/chores/verdict.ts +54 -99
  452. package/src/contracts/accounts.contract.ts +4 -19
  453. package/src/contracts/agent.contract.ts +7 -22
  454. package/src/contracts/agents.contract.ts +25 -71
  455. package/src/contracts/automations.contract.ts +14 -30
  456. package/src/contracts/capabilities.contract.ts +8 -35
  457. package/src/contracts/chores.contract.ts +4 -15
  458. package/src/contracts/endpoints.contract.ts +5 -22
  459. package/src/contracts/exit.contract.ts +7 -30
  460. package/src/contracts/extensions.contract.ts +8 -30
  461. package/src/contracts/git.contract.ts +25 -49
  462. package/src/contracts/host.contract.ts +9 -44
  463. package/src/contracts/intentic.contract.ts +1 -1
  464. package/src/contracts/logs.contract.ts +3 -13
  465. package/src/contracts/loops.contract.ts +9 -40
  466. package/src/contracts/personas.contract.ts +10 -35
  467. package/src/contracts/providers.contract.ts +4 -17
  468. package/src/contracts/runner.contract.ts +12 -39
  469. package/src/contracts/safety.contract.ts +5 -14
  470. package/src/contracts/secrets.contract.ts +4 -22
  471. package/src/contracts/sessions.contract.ts +1 -1
  472. package/src/contracts/settings.contract.ts +4 -10
  473. package/src/contracts/share.contract.ts +3 -9
  474. package/src/contracts/skills.contract.ts +21 -19
  475. package/src/contracts/system.contract.ts +26 -52
  476. package/src/contracts/usage.contract.ts +7 -21
  477. package/src/contracts/vpn.contract.ts +9 -16
  478. package/src/contracts/webext.contract.ts +9 -25
  479. package/src/contracts/workflows.contract.ts +34 -58
  480. package/src/contracts/workspace.contract.ts +19 -50
  481. package/src/events/agent-events.ts +345 -0
  482. package/src/events/cards.ts +286 -0
  483. package/src/{events.test.ts → events/resume.test.ts} +4 -19
  484. package/src/events/resume.ts +60 -0
  485. package/src/events/system-events.ts +139 -0
  486. package/src/events/transcript.ts +320 -0
  487. package/src/{conversation-ids.test.ts → ids/conversation-ids.test.ts} +25 -13
  488. package/src/ids/conversation-ids.ts +178 -0
  489. package/src/ids/hostnames.ts +129 -0
  490. package/src/ids/session-names.ts +29 -0
  491. package/src/ids/share-paths.ts +43 -0
  492. package/src/{tunnel-ids.test.ts → ids/tunnel-ids.test.ts} +1 -14
  493. package/src/ids/tunnel-ids.ts +29 -0
  494. package/src/index.ts +71 -87
  495. package/src/{agent-catalog.test.ts → models/agent-catalog.test.ts} +19 -93
  496. package/src/models/agent-catalog.ts +174 -0
  497. package/src/models/agent-runtimes.ts +201 -0
  498. package/src/models/capability-ledger.test.ts +84 -0
  499. package/src/{fast-tier.test.ts → models/fast-tier.test.ts} +7 -18
  500. package/src/models/fast-tier.ts +36 -0
  501. package/src/{model-order.test.ts → models/model-order.test.ts} +54 -40
  502. package/src/models/model-order.ts +171 -0
  503. package/src/{model-pins.test.ts → models/model-pins.test.ts} +12 -46
  504. package/src/models/model-pins.ts +57 -0
  505. package/src/models/model-roles.test.ts +38 -0
  506. package/src/models/model-roles.ts +180 -0
  507. package/src/{plan-pools.test.ts → models/plan-pools.test.ts} +6 -11
  508. package/src/models/plan-pools.ts +65 -0
  509. package/src/{prompt-complexity.test.ts → models/prompt-complexity.test.ts} +8 -60
  510. package/src/models/prompt-complexity.ts +215 -0
  511. package/src/{provider-specs.test.ts → models/provider-specs.test.ts} +18 -47
  512. package/src/models/provider-specs.ts +272 -0
  513. package/src/policy/approvals-execution.ts +58 -0
  514. package/src/{batch-runs.test.ts → policy/batch-runs.test.ts} +4 -20
  515. package/src/policy/batch-runs.ts +137 -0
  516. package/src/policy/capability-secrets.ts +5 -0
  517. package/src/{card-status.ts → policy/card-status.ts} +11 -26
  518. package/src/{command-classes.test.ts → policy/command-classes.test.ts} +11 -118
  519. package/src/policy/command-classes.ts +395 -0
  520. package/src/policy/command-run.ts +65 -0
  521. package/src/policy/control-scopes.ts +38 -0
  522. package/src/{credential-material.test.ts → policy/credential-material.test.ts} +4 -26
  523. package/src/policy/credential-material.ts +91 -0
  524. package/src/policy/needs-action.ts +5 -0
  525. package/src/policy/output-fields.ts +86 -0
  526. package/src/policy/overlay-lint.ts +100 -0
  527. package/src/{owner-ticket.test.ts → policy/owner-ticket.test.ts} +1 -1
  528. package/src/{owner-ticket.ts → policy/owner-ticket.ts} +9 -31
  529. package/src/policy/safety-policy.test.ts +84 -0
  530. package/src/policy/safety-policy.ts +142 -0
  531. package/src/policy/search-globs.ts +60 -0
  532. package/src/protocol/container-requirements.test.ts +72 -0
  533. package/src/protocol/container-requirements.ts +58 -0
  534. package/src/protocol/host-protocol.ts +29 -0
  535. package/src/protocol/ingress-contract.ts +103 -0
  536. package/src/{ingress-protocol.test.ts → protocol/ingress-protocol.test.ts} +25 -90
  537. package/src/protocol/ingress-protocol.ts +441 -0
  538. package/src/protocol/listener-protocol.ts +75 -0
  539. package/src/{peer-dial.test.ts → protocol/peer-dial.test.ts} +52 -1
  540. package/src/protocol/peer-dial.ts +207 -0
  541. package/src/{peer-mcp-server.ts → protocol/peer-mcp-server.ts} +16 -41
  542. package/src/protocol/request-id.ts +5 -0
  543. package/src/{routes.test.ts → protocol/routes.test.ts} +14 -22
  544. package/src/protocol/routes.ts +159 -0
  545. package/src/protocol/runner-protocol.ts +197 -0
  546. package/src/protocol/terminal-protocol.ts +13 -0
  547. package/src/protocol/webext-links.ts +50 -0
  548. package/src/protocol/webext-protocol.ts +24 -0
  549. package/src/schemas/activity.ts +22 -30
  550. package/src/schemas/agent.ts +130 -238
  551. package/src/schemas/agents.ts +165 -483
  552. package/src/schemas/approvals.ts +23 -71
  553. package/src/schemas/automations.ts +142 -250
  554. package/src/schemas/capabilities.ts +127 -414
  555. package/src/schemas/ci.ts +56 -108
  556. package/src/schemas/codebase-health.ts +7 -11
  557. package/src/schemas/devices.ts +103 -321
  558. package/src/schemas/engines.ts +16 -44
  559. package/src/schemas/environment.ts +41 -91
  560. package/src/schemas/exit.ts +24 -81
  561. package/src/schemas/extension-updates.ts +42 -87
  562. package/src/schemas/git-history.ts +30 -84
  563. package/src/schemas/git.ts +141 -256
  564. package/src/schemas/history.ts +14 -40
  565. package/src/schemas/hosts.ts +9 -15
  566. package/src/schemas/inventory.ts +8 -10
  567. package/src/schemas/issues.ts +66 -134
  568. package/src/schemas/logs.ts +15 -34
  569. package/src/schemas/loops.ts +46 -163
  570. package/src/schemas/maintenance.ts +47 -172
  571. package/src/schemas/panels.ts +20 -45
  572. package/src/schemas/personas.ts +50 -200
  573. package/src/schemas/plan-limits.ts +58 -197
  574. package/src/schemas/ports.ts +14 -32
  575. package/src/schemas/provider-oauth.ts +23 -76
  576. package/src/schemas/provider-subscriptions.ts +4 -13
  577. package/src/schemas/public.ts +4 -15
  578. package/src/schemas/push.ts +8 -36
  579. package/src/schemas/secrets.ts +20 -64
  580. package/src/schemas/settings.ts +182 -602
  581. package/src/schemas/share.ts +14 -32
  582. package/src/schemas/shared.ts +14 -13
  583. package/src/schemas/system.ts +46 -78
  584. package/src/schemas/terminal.ts +41 -120
  585. package/src/schemas/usage.ts +44 -233
  586. package/src/schemas/version-seam.test.ts +9 -26
  587. package/src/schemas/vpn.ts +27 -64
  588. package/src/schemas/webext.ts +22 -53
  589. package/src/schemas/workflows.ts +57 -183
  590. package/src/schemas/workspace-repos.ts +12 -24
  591. package/src/schemas/workspace-search.ts +17 -35
  592. package/src/schemas/workspace-setup.ts +4 -11
  593. package/src/schemas/workspace-tree.ts +32 -91
  594. package/src/state/arrival.ts +109 -0
  595. package/src/state/contract-lock.test.ts +17 -0
  596. package/src/state/contract-lock.ts +49 -0
  597. package/src/state/definition.ts +143 -0
  598. package/src/state/history-state.ts +103 -0
  599. package/src/{runtime-state.test.ts → state/runtime-state.test.ts} +3 -10
  600. package/src/state/runtime-state.ts +63 -0
  601. package/src/state/starter.ts +5 -0
  602. package/src/state/state-portability.ts +27 -0
  603. package/src/state/versions.ts +26 -0
  604. package/src/{workspace-state.test.ts → state/workspace-state.test.ts} +65 -172
  605. package/src/state/workspace-state.ts +669 -0
  606. package/src/{documents.test.ts → text/documents.test.ts} +1 -1
  607. package/src/text/documents.ts +42 -0
  608. package/src/text/embed.ts +132 -0
  609. package/src/text/mentions.ts +21 -0
  610. package/src/text/model-answer.ts +9 -0
  611. package/src/text/path-refs.ts +39 -0
  612. package/src/text/shell-regions.ts +224 -0
  613. package/src/{title.test.ts → text/title.test.ts} +13 -32
  614. package/src/text/title.ts +202 -0
  615. package/src/{transcript-fold.test.ts → text/transcript-fold.test.ts} +5 -83
  616. package/src/{transcript-fold.ts → text/transcript-fold.ts} +65 -170
  617. package/src/text/whisper.test.ts +19 -0
  618. package/src/text/whisper.ts +17 -0
  619. package/src/{workflow-faults.test.ts → text/workflow-faults.test.ts} +6 -24
  620. package/src/{workflow-faults.ts → text/workflow-faults.ts} +20 -60
  621. package/dist/agent-catalog.d.ts.map +0 -1
  622. package/dist/agent-catalog.js.map +0 -1
  623. package/dist/agent-runtimes.d.ts.map +0 -1
  624. package/dist/agent-runtimes.js.map +0 -1
  625. package/dist/approvals-execution.d.ts.map +0 -1
  626. package/dist/approvals-execution.js.map +0 -1
  627. package/dist/arrival.d.ts.map +0 -1
  628. package/dist/arrival.js.map +0 -1
  629. package/dist/batch-runs.d.ts.map +0 -1
  630. package/dist/batch-runs.js.map +0 -1
  631. package/dist/capability-env.d.ts.map +0 -1
  632. package/dist/capability-env.js.map +0 -1
  633. package/dist/capability-secrets.d.ts.map +0 -1
  634. package/dist/capability-secrets.js.map +0 -1
  635. package/dist/card-status.d.ts.map +0 -1
  636. package/dist/card-status.js.map +0 -1
  637. package/dist/command-classes.d.ts.map +0 -1
  638. package/dist/command-classes.js.map +0 -1
  639. package/dist/command-run.d.ts.map +0 -1
  640. package/dist/command-run.js.map +0 -1
  641. package/dist/contract-lock.d.ts.map +0 -1
  642. package/dist/contract-lock.js.map +0 -1
  643. package/dist/conversation-ids.d.ts +0 -4
  644. package/dist/conversation-ids.d.ts.map +0 -1
  645. package/dist/conversation-ids.js.map +0 -1
  646. package/dist/credential-material.d.ts.map +0 -1
  647. package/dist/credential-material.js.map +0 -1
  648. package/dist/definition.d.ts.map +0 -1
  649. package/dist/definition.js.map +0 -1
  650. package/dist/documents.d.ts.map +0 -1
  651. package/dist/documents.js.map +0 -1
  652. package/dist/embed.d.ts.map +0 -1
  653. package/dist/embed.js.map +0 -1
  654. package/dist/events.d.ts +0 -4336
  655. package/dist/events.d.ts.map +0 -1
  656. package/dist/events.js +0 -725
  657. package/dist/events.js.map +0 -1
  658. package/dist/fast-tier.d.ts.map +0 -1
  659. package/dist/fast-tier.js.map +0 -1
  660. package/dist/history-state.d.ts.map +0 -1
  661. package/dist/history-state.js.map +0 -1
  662. package/dist/host-protocol.d.ts.map +0 -1
  663. package/dist/host-protocol.js.map +0 -1
  664. package/dist/hostnames.d.ts.map +0 -1
  665. package/dist/hostnames.js.map +0 -1
  666. package/dist/ingress-contract.d.ts.map +0 -1
  667. package/dist/ingress-contract.js.map +0 -1
  668. package/dist/ingress-protocol.d.ts.map +0 -1
  669. package/dist/ingress-protocol.js.map +0 -1
  670. package/dist/listener-protocol.d.ts.map +0 -1
  671. package/dist/listener-protocol.js.map +0 -1
  672. package/dist/mentions.d.ts.map +0 -1
  673. package/dist/mentions.js.map +0 -1
  674. package/dist/model-order.d.ts.map +0 -1
  675. package/dist/model-order.js.map +0 -1
  676. package/dist/model-pins.d.ts.map +0 -1
  677. package/dist/model-pins.js.map +0 -1
  678. package/dist/model-roles.d.ts.map +0 -1
  679. package/dist/model-roles.js.map +0 -1
  680. package/dist/needs-action.d.ts.map +0 -1
  681. package/dist/needs-action.js.map +0 -1
  682. package/dist/output-fields.d.ts.map +0 -1
  683. package/dist/output-fields.js.map +0 -1
  684. package/dist/overlay-lint.d.ts.map +0 -1
  685. package/dist/overlay-lint.js.map +0 -1
  686. package/dist/owner-ticket.d.ts.map +0 -1
  687. package/dist/owner-ticket.js.map +0 -1
  688. package/dist/path-refs.d.ts.map +0 -1
  689. package/dist/path-refs.js.map +0 -1
  690. package/dist/peer-dial.d.ts.map +0 -1
  691. package/dist/peer-dial.js.map +0 -1
  692. package/dist/peer-mcp-server.d.ts.map +0 -1
  693. package/dist/peer-mcp-server.js.map +0 -1
  694. package/dist/plan-pools.d.ts.map +0 -1
  695. package/dist/plan-pools.js.map +0 -1
  696. package/dist/prompt-complexity.d.ts.map +0 -1
  697. package/dist/prompt-complexity.js.map +0 -1
  698. package/dist/provider-specs.d.ts.map +0 -1
  699. package/dist/provider-specs.js.map +0 -1
  700. package/dist/request-id.d.ts.map +0 -1
  701. package/dist/request-id.js.map +0 -1
  702. package/dist/routes.d.ts.map +0 -1
  703. package/dist/routes.js.map +0 -1
  704. package/dist/runner-protocol.d.ts.map +0 -1
  705. package/dist/runner-protocol.js.map +0 -1
  706. package/dist/runtime-state.d.ts.map +0 -1
  707. package/dist/runtime-state.js.map +0 -1
  708. package/dist/safety-policy.d.ts.map +0 -1
  709. package/dist/safety-policy.js.map +0 -1
  710. package/dist/search-globs.d.ts.map +0 -1
  711. package/dist/search-globs.js.map +0 -1
  712. package/dist/session-names.d.ts.map +0 -1
  713. package/dist/session-names.js.map +0 -1
  714. package/dist/share-paths.d.ts.map +0 -1
  715. package/dist/share-paths.js.map +0 -1
  716. package/dist/shell-regions.d.ts.map +0 -1
  717. package/dist/shell-regions.js.map +0 -1
  718. package/dist/sse.d.ts.map +0 -1
  719. package/dist/sse.js.map +0 -1
  720. package/dist/starter.d.ts.map +0 -1
  721. package/dist/starter.js.map +0 -1
  722. package/dist/state-portability.d.ts.map +0 -1
  723. package/dist/state-portability.js.map +0 -1
  724. package/dist/terminal-protocol.d.ts.map +0 -1
  725. package/dist/terminal-protocol.js.map +0 -1
  726. package/dist/title.d.ts.map +0 -1
  727. package/dist/title.js.map +0 -1
  728. package/dist/transcript-fold.d.ts.map +0 -1
  729. package/dist/transcript-fold.js.map +0 -1
  730. package/dist/tunnel-ids.d.ts.map +0 -1
  731. package/dist/tunnel-ids.js.map +0 -1
  732. package/dist/versions.d.ts.map +0 -1
  733. package/dist/versions.js.map +0 -1
  734. package/dist/webext-links.d.ts.map +0 -1
  735. package/dist/webext-links.js.map +0 -1
  736. package/dist/webext-protocol.d.ts.map +0 -1
  737. package/dist/webext-protocol.js.map +0 -1
  738. package/dist/workflow-faults.d.ts.map +0 -1
  739. package/dist/workflow-faults.js.map +0 -1
  740. package/dist/workspace-state.d.ts.map +0 -1
  741. package/dist/workspace-state.js.map +0 -1
  742. package/src/agent-catalog.ts +0 -316
  743. package/src/agent-runtimes.ts +0 -419
  744. package/src/approvals-execution.ts +0 -96
  745. package/src/arrival.ts +0 -160
  746. package/src/batch-runs.ts +0 -188
  747. package/src/capability-ledger.test.ts +0 -140
  748. package/src/capability-secrets.ts +0 -20
  749. package/src/command-classes.ts +0 -617
  750. package/src/command-run.ts +0 -78
  751. package/src/contract-lock.test.ts +0 -23
  752. package/src/contract-lock.ts +0 -66
  753. package/src/conversation-ids.ts +0 -207
  754. package/src/credential-material.ts +0 -181
  755. package/src/definition.ts +0 -207
  756. package/src/documents.ts +0 -67
  757. package/src/embed.ts +0 -164
  758. package/src/events.ts +0 -1870
  759. package/src/fast-tier.ts +0 -72
  760. package/src/history-state.ts +0 -174
  761. package/src/host-protocol.ts +0 -36
  762. package/src/hostnames.ts +0 -180
  763. package/src/ingress-contract.ts +0 -157
  764. package/src/ingress-protocol.ts +0 -625
  765. package/src/listener-protocol.ts +0 -96
  766. package/src/mentions.ts +0 -25
  767. package/src/model-order.ts +0 -262
  768. package/src/model-pins.ts +0 -132
  769. package/src/model-roles.test.ts +0 -52
  770. package/src/model-roles.ts +0 -320
  771. package/src/needs-action.ts +0 -14
  772. package/src/output-fields.ts +0 -111
  773. package/src/overlay-lint.ts +0 -116
  774. package/src/path-refs.ts +0 -59
  775. package/src/peer-dial.ts +0 -163
  776. package/src/plan-pools.ts +0 -92
  777. package/src/prompt-complexity.ts +0 -334
  778. package/src/provider-specs.ts +0 -432
  779. package/src/request-id.ts +0 -41
  780. package/src/routes.ts +0 -219
  781. package/src/runner-protocol.ts +0 -239
  782. package/src/runtime-state.ts +0 -140
  783. package/src/safety-policy.test.ts +0 -88
  784. package/src/safety-policy.ts +0 -258
  785. package/src/search-globs.ts +0 -76
  786. package/src/session-names.ts +0 -44
  787. package/src/share-paths.ts +0 -68
  788. package/src/shell-regions.ts +0 -289
  789. package/src/starter.ts +0 -13
  790. package/src/state-portability.ts +0 -56
  791. package/src/terminal-protocol.ts +0 -16
  792. package/src/title.ts +0 -267
  793. package/src/tunnel-ids.ts +0 -57
  794. package/src/versions.ts +0 -48
  795. package/src/webext-links.ts +0 -90
  796. package/src/webext-protocol.ts +0 -27
  797. package/src/workspace-state.ts +0 -1090
  798. /package/dist/{hostnames.d.ts → ids/hostnames.d.ts} +0 -0
  799. /package/dist/{hostnames.js → ids/hostnames.js} +0 -0
  800. /package/dist/{session-names.d.ts → ids/session-names.d.ts} +0 -0
  801. /package/dist/{session-names.js → ids/session-names.js} +0 -0
  802. /package/dist/{share-paths.d.ts → ids/share-paths.d.ts} +0 -0
  803. /package/dist/{share-paths.js → ids/share-paths.js} +0 -0
  804. /package/dist/{agent-catalog.js → models/agent-catalog.js} +0 -0
  805. /package/dist/{agent-runtimes.d.ts → models/agent-runtimes.d.ts} +0 -0
  806. /package/dist/{agent-runtimes.js → models/agent-runtimes.js} +0 -0
  807. /package/dist/{fast-tier.js → models/fast-tier.js} +0 -0
  808. /package/dist/{model-order.d.ts → models/model-order.d.ts} +0 -0
  809. /package/dist/{model-pins.js → models/model-pins.js} +0 -0
  810. /package/dist/{plan-pools.js → models/plan-pools.js} +0 -0
  811. /package/dist/{prompt-complexity.d.ts → models/prompt-complexity.d.ts} +0 -0
  812. /package/dist/{prompt-complexity.js → models/prompt-complexity.js} +0 -0
  813. /package/dist/{provider-specs.d.ts → models/provider-specs.d.ts} +0 -0
  814. /package/dist/{provider-specs.js → models/provider-specs.js} +0 -0
  815. /package/dist/{approvals-execution.d.ts → policy/approvals-execution.d.ts} +0 -0
  816. /package/dist/{approvals-execution.js → policy/approvals-execution.js} +0 -0
  817. /package/dist/{capability-env.d.ts → policy/capability-env.d.ts} +0 -0
  818. /package/dist/{capability-env.js → policy/capability-env.js} +0 -0
  819. /package/dist/{capability-secrets.d.ts → policy/capability-secrets.d.ts} +0 -0
  820. /package/dist/{capability-secrets.js → policy/capability-secrets.js} +0 -0
  821. /package/dist/{command-run.js → policy/command-run.js} +0 -0
  822. /package/dist/{credential-material.d.ts → policy/credential-material.d.ts} +0 -0
  823. /package/dist/{credential-material.js → policy/credential-material.js} +0 -0
  824. /package/dist/{needs-action.d.ts → policy/needs-action.d.ts} +0 -0
  825. /package/dist/{needs-action.js → policy/needs-action.js} +0 -0
  826. /package/dist/{output-fields.d.ts → policy/output-fields.d.ts} +0 -0
  827. /package/dist/{output-fields.js → policy/output-fields.js} +0 -0
  828. /package/dist/{overlay-lint.d.ts → policy/overlay-lint.d.ts} +0 -0
  829. /package/dist/{overlay-lint.js → policy/overlay-lint.js} +0 -0
  830. /package/dist/{owner-ticket.d.ts → policy/owner-ticket.d.ts} +0 -0
  831. /package/dist/{search-globs.d.ts → policy/search-globs.d.ts} +0 -0
  832. /package/dist/{search-globs.js → policy/search-globs.js} +0 -0
  833. /package/dist/{ingress-contract.d.ts → protocol/ingress-contract.d.ts} +0 -0
  834. /package/dist/{ingress-protocol.d.ts → protocol/ingress-protocol.d.ts} +0 -0
  835. /package/dist/{ingress-protocol.js → protocol/ingress-protocol.js} +0 -0
  836. /package/dist/{listener-protocol.d.ts → protocol/listener-protocol.d.ts} +0 -0
  837. /package/dist/{peer-mcp-server.d.ts → protocol/peer-mcp-server.d.ts} +0 -0
  838. /package/dist/{peer-mcp-server.js → protocol/peer-mcp-server.js} +0 -0
  839. /package/dist/{request-id.d.ts → protocol/request-id.d.ts} +0 -0
  840. /package/dist/{request-id.js → protocol/request-id.js} +0 -0
  841. /package/dist/{routes.d.ts → protocol/routes.d.ts} +0 -0
  842. /package/dist/{routes.js → protocol/routes.js} +0 -0
  843. /package/dist/{sse.d.ts → protocol/sse.d.ts} +0 -0
  844. /package/dist/{sse.js → protocol/sse.js} +0 -0
  845. /package/dist/{terminal-protocol.js → protocol/terminal-protocol.js} +0 -0
  846. /package/dist/{webext-links.d.ts → protocol/webext-links.d.ts} +0 -0
  847. /package/dist/{webext-links.js → protocol/webext-links.js} +0 -0
  848. /package/dist/{arrival.d.ts → state/arrival.d.ts} +0 -0
  849. /package/dist/{contract-lock.d.ts → state/contract-lock.d.ts} +0 -0
  850. /package/dist/{history-state.d.ts → state/history-state.d.ts} +0 -0
  851. /package/dist/{runtime-state.d.ts → state/runtime-state.d.ts} +0 -0
  852. /package/dist/{runtime-state.js → state/runtime-state.js} +0 -0
  853. /package/dist/{starter.d.ts → state/starter.d.ts} +0 -0
  854. /package/dist/{starter.js → state/starter.js} +0 -0
  855. /package/dist/{state-portability.d.ts → state/state-portability.d.ts} +0 -0
  856. /package/dist/{state-portability.js → state/state-portability.js} +0 -0
  857. /package/dist/{versions.d.ts → state/versions.d.ts} +0 -0
  858. /package/dist/{versions.js → state/versions.js} +0 -0
  859. /package/dist/{embed.d.ts → text/embed.d.ts} +0 -0
  860. /package/dist/{embed.js → text/embed.js} +0 -0
  861. /package/dist/{mentions.d.ts → text/mentions.d.ts} +0 -0
  862. /package/dist/{mentions.js → text/mentions.js} +0 -0
  863. /package/dist/{path-refs.d.ts → text/path-refs.d.ts} +0 -0
  864. /package/dist/{path-refs.js → text/path-refs.js} +0 -0
  865. /package/dist/{shell-regions.js → text/shell-regions.js} +0 -0
  866. /package/dist/{title.d.ts → text/title.d.ts} +0 -0
  867. /package/dist/{title.js → text/title.js} +0 -0
  868. /package/src/{hostnames.test.ts → ids/hostnames.test.ts} +0 -0
  869. /package/src/{share-paths.test.ts → ids/share-paths.test.ts} +0 -0
  870. /package/src/{capability-env.ts → policy/capability-env.ts} +0 -0
  871. /package/src/{overlay-lint.test.ts → policy/overlay-lint.test.ts} +0 -0
  872. /package/src/{search-globs.test.ts → policy/search-globs.test.ts} +0 -0
  873. /package/src/{ingress-contract.test.ts → protocol/ingress-contract.test.ts} +0 -0
  874. /package/src/{peer-mcp-server.test.ts → protocol/peer-mcp-server.test.ts} +0 -0
  875. /package/src/{sse.ts → protocol/sse.ts} +0 -0
  876. /package/src/{versions.test.ts → state/versions.test.ts} +0 -0
  877. /package/src/{embed.test.ts → text/embed.test.ts} +0 -0
  878. /package/src/{mentions.test.ts → text/mentions.test.ts} +0 -0
  879. /package/src/{path-refs.test.ts → text/path-refs.test.ts} +0 -0
@@ -1,45 +1,26 @@
1
1
  // engines: the upstream agent programs this sandbox spawns, and which version of each it runs
2
2
  import { z } from "zod";
3
3
 
4
- /* AN ENGINE IS THE PROGRAM A RUNTIME RIDES ON, which is a different noun from `runtime` and has to stay one.
5
- *
6
- * `runtime` (agent-catalog.ts) is the LOOP: claude-code, codex, opencode, acp, pi, cursor — what shape a turn
7
- * has. An engine is the installed PROGRAM that loop spawns or imports: the `claude` binary and its SDK, the
8
- * `codex` wrapper, `@cursor/sdk`, the `opencode` binary, the `cli-proxy-api` translator. One engine can back
9
- * several runtimes (the translator serves Gemini, Kimi and ChatGPT; Kimi runs under the Claude Code loop), so
10
- * the two lists are neither the same set nor the same question.
11
- *
12
- * The distinction earns its keep because engines have a lifecycle runtimes do not: they are published upstream,
13
- * on somebody else's schedule, and until this existed the only way to move one was to ship a sandbox image.
14
- * That made an ordinary upstream event — Anthropic raising the version floor a model requires — into a support
15
- * problem: every sandbox in the fleet failed every Claude turn until a new image reached it.
16
- *
17
- * So an engine version now comes from a STORE on the daemon volume, and the image's copy is the floor beneath
18
- * it. The blessed list says which version this project has actually run its suite against; an owner who wants
19
- * upstream's newest without waiting for that says so per engine. */
4
+ // An engine is the installed program a runtime (agent-catalog.ts) spawns or imports — the `claude` binary, `codex`
5
+ // wrapper, `@cursor/sdk`, `opencode`, `cli-proxy-api` — not the loop itself; one engine can back several runtimes.
20
6
 
21
7
  export const ENGINE_IDS = ["claude", "codex", "cursor", "opencode", "translator"] as const;
22
8
  export type EngineId = (typeof ENGINE_IDS)[number];
23
9
  export const EngineIdSchema = z.enum(ENGINE_IDS);
24
10
 
25
- /* THE OWNER'S STANDING ANSWER for one engine, and the whole of the version policy.
26
- *
27
- * blessed , the default: whatever the blessed list names, which is a version this project's CI has run
28
- * against. Data, not an image, so blessing a version reaches a running sandbox in seconds.
29
- * latest , upstream's newest published version, taken without waiting for anyone to bless it. The opt-in
30
- * for an owner who would rather have the fix than the assurance.
31
- * pinned , exactly this version, until they say otherwise. What a revert leaves behind, and what somebody
32
- * debugging a regression wants.
33
- * image , do not use the store at all: run what the image bakes. The way back to a stock sandbox. */
11
+ // The owner's standing answer for one engine, the whole version policy:
12
+ // blessed (default): whatever the blessed list names, a version this project's CI has run against.
13
+ // latest: upstream's newest published version, without waiting for it to be blessed.
14
+ // pinned: exactly this version until changed.
15
+ // image: ignore the store; run what the image bakes.
34
16
  export const EngineChannelSchema = z.object({
35
17
  kind: z.enum(["blessed", "latest", "pinned", "image"]).describe("Where this engine's version comes from."),
36
18
  version: z.string().optional().describe("Which version, when it is pinned to one."),
37
19
  });
38
20
  export type EngineChannel = z.infer<typeof EngineChannelSchema>;
39
21
 
40
- // A version the store installed and then refused, with the reason it was refused. Kept per engine so a bad
41
- // publish is not retried on a timer forever, and so the card can say why the sandbox is back on the image's
42
- // copy rather than leaving that as an unexplained downgrade.
22
+ // A version the store installed and then refused; kept per engine so a bad publish is not retried forever and the card
23
+ // can explain a downgrade.
43
24
  export const EngineQuarantineSchema = z.object({
44
25
  version: z.string().describe("Which version was refused."),
45
26
  reason: z.string().describe("What was wrong with it: it would not launch, or it did not export what the daemon calls."),
@@ -53,9 +34,7 @@ export const EngineRowSchema = z.object({
53
34
  label: z.string().describe("What it is called on screen."),
54
35
  running: z
55
36
  .object({
56
- // Absent means this sandbox has no copy of the engine at all: a core image bakes no provider packs,
57
- // and until the store installs one, a turn on that provider cannot start. Different from "running
58
- // the image's copy", and the card says so rather than drawing a blank version.
37
+ // Different from running the image's copy: absent means no copy of the engine exists here at all.
59
38
  version: z.string().optional().describe("The version a turn would use right now. Absent means there is no copy of this engine here yet."),
60
39
  source: z
61
40
  .enum(["image", "store"])
@@ -67,8 +46,7 @@ export const EngineRowSchema = z.object({
67
46
  .optional()
68
47
  .describe("The version the image bakes, which is the floor everything else falls back to. Absent on an image that carries no copy of it."),
69
48
  channel: EngineChannelSchema.describe("The owner's standing answer for this engine."),
70
- // What the channel would move to, absent when the running version is already it. Carries whether the
71
- // blessed list names it, because on `latest` the answer is routinely no and the row has to say so.
49
+ // On the `latest` channel, `blessed` is routinely false; the row must still say so.
72
50
  offered: z
73
51
  .object({
74
52
  version: z.string().describe("The version this engine would move to."),
@@ -77,8 +55,7 @@ export const EngineRowSchema = z.object({
77
55
  .optional()
78
56
  .describe("A newer version waiting, absent when the running one is already what the channel asks for."),
79
57
  blessed: z.string().optional().describe("What the blessed list names for this engine, when the list has been read."),
80
- // The store keeps one version back so a revert is a pointer move rather than a download. Absent on an
81
- // engine that has only ever run the image's copy.
58
+ // Store keeps one version back so a revert is a pointer move; absent if only the image's copy ever ran.
82
59
  previous: z.string().optional().describe("The version kept one step back, which is what going back means."),
83
60
  quarantined: z.array(EngineQuarantineSchema).describe("Versions the store installed and then refused, with the reason."),
84
61
  diskBytes: z.number().int().nonnegative().describe("What this engine's kept versions cost on the daemon's volume."),
@@ -100,19 +77,15 @@ export const EngineChannelInputSchema = z.object({
100
77
  version: z.string().optional().describe("Which version, required when pinning and ignored otherwise."),
101
78
  });
102
79
 
103
- /* Install and activate a version now. `version` absent means what the channel offers, which is the button on
104
- * the row. Naming one explicitly is the "update anyway" path: it installs a version the blessed list does not
105
- * name, which is how a sandbox gets past an upstream version floor that the list has not caught up with. */
80
+ // Install and activate a version now; absent `version` means whatever the channel offers. Naming one explicitly is
81
+ // "update anyway": a version the blessed list does not (yet) name.
106
82
  export const EngineUpdateInputSchema = z.object({
107
83
  id: EngineIdSchema.describe("Which engine."),
108
84
  version: z
109
85
  .string()
110
86
  .optional()
111
87
  .describe("Which version. Leave it out for whatever the channel offers; naming one takes a version nobody has blessed, deliberately."),
112
- /* The other half of the update-anyway path: a turn that died on an upstream version floor knows the floor
113
- * and not which published version satisfies it. Sending the floor lets the daemon answer that — it takes
114
- * the LOWEST version at or above it, the smallest step that works — rather than making a browser walk a
115
- * registry to fill in a version number. */
88
+ // Daemon installs the lowest published version at or above this floor, the smallest step that satisfies it.
116
89
  floor: z
117
90
  .string()
118
91
  .optional()
@@ -124,7 +97,6 @@ export const EngineAppliedSchema = z.object({
124
97
  ok: z.literal(true).describe("It went through."),
125
98
  version: z.string().describe("Which version is now active."),
126
99
  source: z.enum(["image", "store"]).describe("Whether that is the image's copy or the store's."),
127
- // An engine loaded in-process (the Claude SDK's JavaScript half, @cursor/sdk) is picked up by the NEXT
128
- // turn rather than by the one that pressed the button: a turn already running holds the module it loaded.
100
+ // An in-process engine (`@cursor/sdk`) is picked up by the next turn; a running turn keeps its module.
129
101
  fromNextTurn: z.boolean().describe("Whether the change reaches turns already in flight, or only the next one."),
130
102
  });
@@ -1,27 +1,16 @@
1
1
  // environment: the overlay Dockerfile extending the sandbox image
2
2
  import { z } from "zod";
3
- // The approved file is DAEMON-COMPOSED: pinned FROM + capability fragments + the owner-approved custom section.
4
- // The agent drafts one file per thing it needs (.intentic/config/environment.d/<tool>.Dockerfile, custom-section
5
- // content only, no FROM) with its normal file tools, and the daemon folds those into the single proposal file
6
- // (.intentic/config/environment.Dockerfile) the owner reads. The owner approves it in the browser, which stores it as
7
- // the custom file and recomposes the approved artifact whose sha256 the rebuild executor pins. Both composed
8
- // files are written only when the composition CHANGES, see writeComposed, and the read loop it exists to end.
9
- // Status is derived, never stored:
10
- // applied = sha256(approved) === appliedHash; pending rebuild = approved present but hashes differ; proposed =
11
- // proposal present with a hash different from custom's.
3
+ // The approved file is daemon-composed (pinned FROM + capability fragments + the owner-approved custom section). Status
4
+ // is derived, never stored:
5
+ // applied: sha256(approved) === appliedHash.
6
+ // pending rebuild: approved present but hashes differ.
7
+ // proposed: proposal present with a hash different from custom's.
12
8
 
13
9
  const environmentFileSchema = z.object({ content: z.string(), hash: z.string() });
14
- /* ---- environment DRIFT: what the live container has that the image did not put there ----
15
- *
16
- * Anything installed outside /work dies with the container, and transcript mining showed the same tools being
17
- * reinstalled session after session (cargo-xwin six times, a Windows rustup target eight) before anyone thought
18
- * to bake them. Drift is the daemon OBSERVING that gap rather than trusting the model to report it: apt installs
19
- * read from dpkg's own log, everything else from system paths newer than the container itself. Two channels
20
- * because they are disjoint by construction — dpkg unpacks files with their archive mtimes, so an mtime sweep
21
- * cannot see apt, and nothing apt does lands under the swept prefixes' hand-installed corners. */
10
+ // What the live container has that the image did not put there; anything outside /work dies with the container. Two
11
+ // channels, apt's own log and an mtime sweep, because dpkg-unpacked files keep archive mtimes invisible to the sweep.
22
12
  export const EnvironmentDriftSchema = z.object({
23
- // When this container was created (PID 1's start). A snapshot whose bornAt is not the running container's
24
- // describes a container that no longer exists, and every reader must treat it as no drift at all.
13
+ // PID 1's start; a snapshot whose bornAt differs from the running container's means no drift, not stale drift.
25
14
  bornAt: z.number(),
26
15
  // When the probe ran.
27
16
  at: z.number(),
@@ -31,15 +20,12 @@ export const EnvironmentDriftSchema = z.object({
31
20
  paths: z.array(z.string()),
32
21
  });
33
22
  export type EnvironmentDrift = z.infer<typeof EnvironmentDriftSchema>;
34
- // How a runtime install was made, which decides whether the daemon can draft a Dockerfile step for it
35
- // mechanically (apt/cargo/npm/rustup-target) or only surface it for a person to route (pip belongs in a venv or
36
- // a Debian package, "other" is a curl|sh whose replay could embed anything).
23
+ // How a runtime install was made; decides whether the daemon can draft a Dockerfile step mechanically
24
+ // (apt/cargo/npm/rustup-target) or must surface it for a person (pip, or "other": a curl|sh that could embed anything).
37
25
  export const RuntimeInstallKindSchema = z.enum(["apt", "pip", "cargo", "npm", "rustup-target", "playwright", "gem", "pipx", "go", "other"]);
38
26
  export type RuntimeInstallKind = z.infer<typeof RuntimeInstallKindSchema>;
39
- /* One tool's runtime-install history across sessions: the ledger entry behind the recurrence signal. Sessions
40
- * are the unit of recurrence — a session that retries an install five times needed it once — and the entry
41
- * survives container recreates (the file lives under /work), which is exactly what makes "installed again in a
42
- * fresh container" observable at all. */
27
+ // One tool's install history across sessions: a session that retries an install needed it once (the unit of
28
+ // recurrence). Persisted under /work so it survives container recreates.
43
29
  export const RuntimeInstallSchema = z.object({
44
30
  tool: z.string(),
45
31
  kind: RuntimeInstallKindSchema,
@@ -60,8 +46,8 @@ export const RuntimeInstallsFileSchema = z.object({
60
46
  drift: EnvironmentDriftSchema.optional(),
61
47
  });
62
48
  export type RuntimeInstallsFile = z.infer<typeof RuntimeInstallsFileSchema>;
63
- // A ledger entry as the Environment card shows it: recurrence joined with whether the install is present in the
64
- // LIVE container (drift-corroborated), already drafted for approval, or previously declined.
49
+ // Ledger entry as the Environment card shows it: recurrence joined with whether it's present in the live container
50
+ // (drift-corroborated), drafted, or declined.
65
51
  export const EnvironmentRecurringSchema = z.object({
66
52
  tool: z.string(),
67
53
  kind: RuntimeInstallKindSchema,
@@ -70,17 +56,14 @@ export const EnvironmentRecurringSchema = z.object({
70
56
  live: z.boolean(),
71
57
  drafted: z.boolean().optional(),
72
58
  declined: z.boolean().optional(),
73
- /* The Dockerfile step that would bake this tool, when its ecosystem has one that follows from the name
74
- * alone (auto-drafts.ts `stepFor`). Sent rather than re-derived in the browser because it is the SAME string
75
- * the owner would approve, and because its presence is the honest answer to "can this be fixed by pressing a
76
- * button?": absent means the fix is a judgement call (which pip package, replaying which installer) and the
77
- * card offers an agent instead. */
59
+ // Step that would bake this tool; absent means the fix needs judgement and the card offers an agent instead.
78
60
  step: z.string().optional(),
79
61
  });
80
62
  export type EnvironmentRecurring = z.infer<typeof EnvironmentRecurringSchema>;
81
- /* The owner's answer to ONE line of that list. `adopt` writes the tool's overlay draft now, without waiting for
82
- * the sweep to re-earn it; `dismiss` tombstones it so nothing proposes it again; `restore` undoes a dismissal.
83
- * One route rather than three because it is one decision surface about one ledger entry. */
63
+ // Owner's decision on one recurring-install entry:
64
+ // adopt: writes the tool's overlay draft now.
65
+ // dismiss: tombstones it so nothing proposes it again.
66
+ // restore: undoes a dismissal.
84
67
  export const EnvironmentRuntimeDecisionSchema = z.object({
85
68
  tool: z.string().min(1),
86
69
  decision: z.enum(["adopt", "dismiss", "restore"]),
@@ -95,28 +78,15 @@ export const EnvironmentSchema = z.object({
95
78
  appliedHash: z.string().optional(),
96
79
  // config.sandbox.name, the UI derives the rebuild one-liner's slug from it.
97
80
  container: z.string().optional(),
98
- // What the live container has that the image did not put there; absent until the first sweep of this container.
81
+ // What the live container has beyond the image; absent until this container's first sweep.
99
82
  drift: EnvironmentDriftSchema.optional(),
100
83
  // Runtime installs worth the owner's attention: recurring across sessions, or present-and-doomed right now.
101
84
  recurring: z.array(EnvironmentRecurringSchema).optional(),
102
85
  });
103
86
  export type Environment = z.infer<typeof EnvironmentSchema>;
104
87
  export const EnvironmentApproveSchema = z.object({ hash: z.string().min(1) });
105
- /* ---- environment CONTENTS: what the sandbox has, as opposed to how it was built ----
106
- *
107
- * The overlay above answers "what was added on top, and do you approve it?". Nobody opens the Environment tab
108
- * asking that, they ask "can this sandbox compile my Rust app / transcode a video / drive a browser?", and a
109
- * build recipe is a bad answer to it: it is install plumbing, it names packages rather than abilities, and it is
110
- * only the DELTA, so an inventory read off it alone would claim a sandbox has ffmpeg and no Node.
111
- *
112
- * So this is a second read of the same sandbox, and its authority is different in a way that matters: NAMES,
113
- * GROUPING and RATIONALE come from the recipe (which is where the agent wrote them), while PRESENCE and VERSION
114
- * come from asking the environment itself. That split is what makes it honest. A version is never parsed out of
115
- * an install line, half the entries pin nothing, and a pinned number is a lie the moment something is approved
116
- * but not yet rebuilt, so an item whose tools cannot be probed carries no version at all rather than a guess.
117
- * And presence is OBSERVED, which is what makes per-item state exact without diffing anything: an item the
118
- * recipe contains and the probe cannot find is precisely one that arrives with the next rebuild.
119
- */
88
+ // What the sandbox has, not how it was built. Names, grouping and rationale come from the recipe; presence and version
89
+ // come from probing the sandbox itself, so a version is never guessed, only reported when probed.
120
90
 
121
91
  const environmentToolSchema = z.object({
122
92
  // The binary as it is invoked (`rustc`, `ffmpeg`), because that is what somebody types next.
@@ -128,27 +98,25 @@ export const EnvironmentItemSchema = z.object({
128
98
  id: z.string(),
129
99
  // The block's own name, how the thing is referred to, not the packages it happens to install.
130
100
  name: z.string(),
131
- /* WHY IT IS HERE, which is also whether the reader may remove it: `custom` is what an agent asked for and the
132
- * owner approved for this workspace, `capability` is the cost of a capability they turned on, `base` comes
133
- * with every sandbox and is nobody's decision. */
101
+ // Why it is here, and whether the reader may remove it:
102
+ // custom: an agent asked for it and the owner approved it for this workspace.
103
+ // capability: the cost of a capability the owner turned on.
104
+ // base: comes with every sandbox; nobody's decision.
134
105
  origin: z.enum(["custom", "capability", "base"]),
135
- // Which capability/extension/pack pulled it in, the answer to "why do I have this?" for an origin the
136
- // reader did not choose item by item.
106
+ // Which capability/extension/pack pulled it in, for an origin the reader did not choose item by item.
137
107
  originLabel: z.string().optional(),
138
- // Observed, not inferred: `active` means the probe found it, `after-rebuild` that the recipe has it and the
139
- // container does not, `awaiting-approval` that it is in a proposal nobody has approved yet.
108
+ // Observed, not inferred:
109
+ // active: the probe found it.
110
+ // after-rebuild: the recipe has it, the container does not yet.
111
+ // awaiting-approval: it is in a proposal nobody has approved yet.
140
112
  state: z.enum(["active", "after-rebuild", "awaiting-approval"]),
141
- // Every binary this one block puts on PATH, with the version each reports. Usually one; a toolchain is several.
113
+ // Every binary this block puts on PATH, with its version. Usually one; a toolchain is several.
142
114
  tools: z.array(environmentToolSchema),
143
- // How many further packages the block installs that are not commands anyone runs (libraries, headers). A
144
- // count rather than a list: eleven rows of `libssl-dev` is noise, "+11 packages" is the same fact.
115
+ // Further packages the block installs with no command (libraries, headers); a count, not a list.
145
116
  extras: z.number().optional(),
146
117
  // One standalone line, from the block's opening comment, the part everyone reads.
147
118
  purpose: z.string().optional(),
148
- /* That comment in full, as prose, absent when the line above already is the whole of it. NOT the remainder
149
- * after the line: `purpose` is a summary of this (a parenthetical dropped, an over-long sentence cut back to
150
- * its claim), so the two overlap by design and it is the reader's view that picks one. Long, the rationale
151
- * for a toolchain runs to paragraphs, so it lives behind a disclosure rather than on the row. */
119
+ // Full comment as prose, overlapping `purpose` by design rather than continuing past it.
152
120
  detail: z.string().optional(),
153
121
  // The block's own instruction lines, for the reader who wants to see exactly what runs.
154
122
  commands: z.string().optional(),
@@ -156,33 +124,15 @@ export const EnvironmentItemSchema = z.object({
156
124
  export type EnvironmentItem = z.infer<typeof EnvironmentItemSchema>;
157
125
  export const EnvironmentContentsSchema = z.object({ items: z.array(EnvironmentItemSchema) });
158
126
  export type EnvironmentContents = z.infer<typeof EnvironmentContentsSchema>;
159
- /* ---- portability: exporting a sandbox's environment ----
160
- *
161
- * A sandbox is four stores, not one: `/work` (the workspace and the daemon's manifests), `/history` (every
162
- * repo's real git dir, the fleet registry, the ledgers), the CONTAINER (the built overlay image plus the env
163
- * the run contract replays) and the AI-provider credential root. A bundle carries the first two, declared entry
164
- * by entry in WORKSPACE_STATE_FILES / HISTORY_STATE_FILES. It cannot carry the other two, and the honest
165
- * consequence is that taking one in ends in a REPORT rather than a claim of equivalence, the container has no
166
- * docker socket, so only the host can rebuild the image the overlay describes.
167
- *
168
- * The bundle's manifest (BundleManifestSchema) lives in definition.ts beside the sandbox DEFINITION it embeds:
169
- * a bundle is definition + state, and keeping the two schemas together is what keeps the two export doors from
170
- * drifting into different answers about what an environment is.
171
- *
172
- * ONLY THE OUTBOUND HALF IS HERE. Taking a bundle IN is not a surface of its own any more: it is one of the
173
- * four sources the arrival pipeline reads (arrival.ts), beside a definition and the two foreign assistants,
174
- * because all four answer the same question and used to answer it three different ways. */
127
+ // A sandbox is four stores: /work, /history, the container, and the AI-provider credential root. A bundle carries only
128
+ // the first two (WORKSPACE_STATE_FILES/HISTORY_STATE_FILES); it cannot rebuild the container or credentials, so
129
+ // importing one is a report, not a claim of equivalence. Only the outbound half is here; inbound is one of arrival.ts's
130
+ // four sources.
175
131
 
176
- /* One export sitting in the daemon's export directory, the ARTIFACT a bundle is, rather than the request that
177
- * produced it. Packing takes minutes over a real workspace, so tying it to a response made it a property of one
178
- * browser tab: a refresh abandoned the work and left nothing to come back to. It is a file now, and every field
179
- * below is read off that file rather than remembered anywhere.
180
- *
181
- * `status` is derived from the extension (.part / .tar.gz / .failed) and `bytes` is the file's own size, which
182
- * is what makes a live pack's progress free to report. */
132
+ // One export in the daemon's export directory, the artifact a bundle is, not the request that made it; every field is
133
+ // read off that file. `status` comes from its extension (.part/.tar.gz/.failed), `bytes` from its own size.
183
134
  export const BundleExportSchema = z.object({
184
- // The finished bundle's filename, which is the id in every route, and, once downloaded, the name the owner
185
- // sees on disk. Carries its own timestamp and a `-with-secrets` marker so it stays self-describing there.
135
+ // Finished filename: the id in every route, timestamped, marked `-with-secrets` when relevant.
186
136
  name: z.string(),
187
137
  status: z.enum(["packing", "ready", "failed"]),
188
138
  // Bytes written so far while packing; the finished size once ready.
@@ -1,44 +1,22 @@
1
- // Geo exits: somewhere the agent's traffic can LEAVE from, so a page fetches as if read elsewhere. Its own
2
- // capability kind rather than a fourth `vpn` provider — an exit routes NOTHING into the main table.
1
+ // Geo exits: somewhere the agent's traffic can leave from, so a page fetches as if read elsewhere.
3
2
  import { z } from "zod";
4
3
  import { autoStart } from "./internal.js";
5
- /* A GEO EXIT: somewhere the agent's traffic can LEAVE from, so a page fetches as if read in Berlin or Osaka.
6
- * Its own kind rather than a fourth `vpn` provider, and the distinction is the whole reason this works:
7
- *
8
- * a `vpn` REACHES a private network , one stored gateway, dialled, pushing its routes into the main table.
9
- * an `exit` LEAVES from somewhere else, a POOL with a catalog, switched at runtime, routing NOTHING into
10
- * the main table.
11
- *
12
- * That last clause is load-bearing. An exit is a full tunnel by definition, and a full tunnel on the main
13
- * table swallows the sandbox's own uplink, the model endpoint and the tunnel that makes this sandbox
14
- * reachable, which reads to a user as the agent breaking mid-turn (see IpsecVpnConfigSchema.routedNetworks
15
- * for the same trap on the vpn kind). So an exit never touches the default route. It publishes a local SOCKS
16
- * proxy and callers opt in: a browser account naming it, `curl --proxy`, and nothing else. The side benefit
17
- * is trust, a volunteer relay carries only what was pointed at it, never the agent's own working traffic.
18
- *
19
- * Three providers, chosen because each is reachable with no paid account:
20
- * tor , the Tor network. ~52 exit countries, no account, no credentials, no privileges: it is a SOCKS
21
- * proxy already. Country is a torrc line, a new IP is a control-port signal. The free default.
22
- * vpngate , the University of Tsukuba's volunteer relay pool. No account; its public CSV IS the catalog,
23
- * so servers auto-fill. Overwhelmingly Japan/Korea in practice, which is the half of the map Tor
24
- * covers worst, so the two complement rather than duplicate.
25
- * wireguard, bring your own .conf files, one per country, from a provider's dashboard (Proton VPN's free
26
- * tier, Mullvad, anything). The catalog is built by parsing what was pasted.
27
- * Starting, switching country and rotating are LIVE operations (see exit.contract.ts), never config, so an
28
- * exit's real state is read off the machine. `country` is the resting preference and `autoStart` the only
29
- * other persisted intent. */
4
+ // An exit never touches the default route: it publishes a local SOCKS proxy callers opt into (a browser account, `curl
5
+ // --proxy`); a `vpn` capability instead pushes routes into the main table.
6
+ // tor: the Tor network, already a SOCKS proxy, no account needed.
7
+ // vpngate: University of Tsukuba's volunteer pool; its public CSV is the catalog.
8
+ // wireguard: user-supplied .conf files from any provider, one pool per country.
30
9
  export const ExitProviderSchema = z.enum(["tor", "vpngate", "wireguard"]);
31
10
  export type ExitProvider = z.infer<typeof ExitProviderSchema>;
32
- // An ISO 3166-1 alpha-2 code, normalised up so "de", "DE" and "De" are one country rather than three. The
33
- // catalogs, the CLI and the manifest all speak this one spelling.
11
+ // ISO 3166-1 alpha-2 code, normalised to uppercase so "de"/"DE"/"De" are one country; catalogs, CLI and manifest all
12
+ // speak this spelling.
34
13
  export const CountryCodeSchema = z
35
14
  .string()
36
15
  .regex(/^[A-Za-z]{2}$/, "A country is its two-letter code, like DE, US or JP.")
37
16
  .transform((value) => value.toUpperCase());
38
17
  export const TorExitConfigSchema = z.object({
39
18
  provider: z.literal("tor"),
40
- // Where to come out, when nothing has asked for somewhere else. Absent ⇒ let Tor choose, which is both
41
- // faster and kinder to the network.
19
+ // Absent means let Tor choose its own exit, which is faster and kinder to the network.
42
20
  country: CountryCodeSchema.optional(),
43
21
  autoStart,
44
22
  });
@@ -48,14 +26,7 @@ export const VpngateExitConfigSchema = z.object({
48
26
  autoStart,
49
27
  });
50
28
  export const WireguardExitConfigSchema = z.object({
51
- /* One or more WireGuard .conf files in one field, pasted back to back. One field rather than one
52
- * capability per country because they are one POOL: the whole point is switching between them under a
53
- * proxy port that never moves, and a user with five Proton free countries should not add five capabilities
54
- * to get five countries out of one account.
55
- *
56
- * Country per conf comes from an optional `# country: DE` line, else from the provider's own naming
57
- * convention in the Endpoint host (Proton's `de-free-01.protonvpn.net`, Mullvad's `de-ber-wg-001`), else
58
- * from a lookup through the tunnel once it is up. Whole thing is the secret: each conf holds a private key. */
29
+ // One or more WireGuard .conf files pasted back to back; each holds a private key, so the field is a secret.
59
30
  provider: z.literal("wireguard"),
60
31
  config: z.string().min(1),
61
32
  country: CountryCodeSchema.optional(),
@@ -66,9 +37,8 @@ export type TorExitConfig = z.infer<typeof TorExitConfigSchema>;
66
37
  export type VpngateExitConfig = z.infer<typeof VpngateExitConfigSchema>;
67
38
  export type WireguardExitConfig = z.infer<typeof WireguardExitConfigSchema>;
68
39
  export type ExitConfig = z.infer<typeof ExitConfigSchema>;
69
- // The manifest says which exits EXIST; this says which are up, where they come out, and what the world sees.
70
- // Read off the machine and off the wire, never remembered: an exit the agent stopped from a shell and one the
71
- // UI stopped read identically, and a daemon restart observes the truth rather than a stale guess.
40
+ // Manifest says which exits exist; this says which are up, where, and what the world sees — read off the machine and
41
+ // wire, never remembered, so a restart observes the truth rather than a stale guess.
72
42
 
73
43
  export const ExitStateSchema = z.enum([
74
44
  // Carrying traffic: the proxy is listening and the last check came out where it was asked to.
@@ -83,14 +53,10 @@ export const ExitStateSchema = z.enum([
83
53
  "failed",
84
54
  ]);
85
55
  export type ExitState = z.infer<typeof ExitStateSchema>;
86
- /* WHAT THE WORLD SEES, fetched THROUGH the exit's own proxy. This is the load-bearing type of the whole
87
- * feature: "switch to Germany" is worth nothing as a report that a tunnel came up, and worth everything as a
88
- * report that the egress address is now German. Every start, use and rotate ends by producing one of these,
89
- * and a switch that cannot produce one fails instead of quietly leaving traffic where it was. */
56
+ // What the world sees, fetched through the exit's own proxy. Every start, use and rotate ends by producing one; a
57
+ // switch that cannot produce one fails rather than silently leaving traffic where it was.
90
58
  export const ExitObservationSchema = z.object({
91
59
  ip: z.string().describe("The address the world sees, looked up through the exit's own proxy rather than assumed."),
92
- // Absent when the lookup answered with an address but no country: a switch is judged on the country when
93
- // one is known, and on the address having CHANGED when it is not.
94
60
  country: z
95
61
  .string()
96
62
  .optional()
@@ -100,16 +66,13 @@ export const ExitObservationSchema = z.object({
100
66
  countryName: z.string().optional().describe("That country's name, spelled out."),
101
67
  });
102
68
  export type ExitObservation = z.infer<typeof ExitObservationSchema>;
103
- /* One country an exit can come out of, as the picker and `exit countries` render it. `servers` and `share`
104
- * are what stop a country list being a lie: Tor lists 52 countries and a third of them are one underpowered
105
- * relay, so the ranking has to carry how much is actually there, not just that the flag exists. */
69
+ // One country an exit can come out of. `servers` and `share` keep the list honest: many listed countries are one
70
+ // underpowered relay, not real capacity.
106
71
  export const ExitPointSchema = z.object({
107
72
  country: z.string().describe("The country's code."),
108
73
  countryName: z.string().describe("Its name, spelled out."),
109
- // How many relays/servers this provider has there right now.
110
74
  servers: z.number().describe("How many servers this provider has there."),
111
- // This country's share of the provider's total exit capacity, 0..1. Used to sort and to grey out the
112
- // countries that technically exist and practically do not.
75
+ // Also used to grey out countries that technically exist but carry no real capacity.
113
76
  share: z
114
77
  .number()
115
78
  .optional()
@@ -120,8 +83,7 @@ export const ExitPointSchema = z.object({
120
83
  export type ExitPoint = z.infer<typeof ExitPointSchema>;
121
84
  export const ExitCountriesSchema = z.object({
122
85
  countries: z.array(ExitPointSchema).describe("Where this exit can put you, best-supplied first."),
123
- // Whether this list came off the provider live or out of the baked fallback (no network, or the provider
124
- // is down). The picker says so rather than presenting a stale list as current.
86
+ // True from a live fetch, false from the baked fallback (no network, or the provider is down).
125
87
  live: z
126
88
  .boolean()
127
89
  .describe("Whether the provider answered, or this came from a built-in list. Said out loud rather than presenting an old list as current."),
@@ -132,17 +94,13 @@ export const ExitLinkSchema = z.object({
132
94
  state: ExitStateSchema.describe(
133
95
  "Whether it is carrying traffic, coming up, resting, failed, or not installable yet because its client needs a rebuild to arrive.",
134
96
  ),
135
- // The SOCKS endpoint callers point at. Fixed per exit and stable across country switches, which is what
136
- // lets a long task change country halfway without reconfiguring anything downstream.
137
97
  proxy: z
138
98
  .string()
139
99
  .describe(
140
100
  "Where to point traffic that should go through it. Fixed per exit and unchanged by a country switch, which is what lets a long job move country halfway through without reconfiguring anything.",
141
101
  ),
142
- // The country ASKED for (manifest preference, or the last `use`). Absent = provider's choice.
102
+ // Manifest preference, or the last `use` call.
143
103
  country: z.string().optional().describe("Where it was asked to come out. Absent means the provider chose."),
144
- // The country actually OBSERVED at the last check, and the address behind it. These two disagreeing is
145
- // the single most useful fault signal this feature has, so they are separate fields, never merged.
146
104
  observedCountry: z
147
105
  .string()
148
106
  .optional()
@@ -150,9 +108,8 @@ export const ExitLinkSchema = z.object({
150
108
  "Where it actually comes out, as last checked. Kept separate from what was asked for, because those two disagreeing is the most useful fault signal this whole feature has.",
151
109
  ),
152
110
  ip: z.string().optional().describe("The address behind that observation."),
153
- // Epoch ms of the observation above, so a stale reading can be rendered as stale.
154
111
  checkedAt: z.number().optional().describe("When that was checked, in milliseconds, so an old reading can be shown as old."),
155
- // The tunnel interface, for the providers that have one (vpngate, wireguard). Tor has none by design.
112
+ // vpngate and wireguard have one; Tor has none by design.
156
113
  interface: z.string().optional().describe("The network interface, for the kinds that have one."),
157
114
  since: z.number().optional().describe("When it came up, in milliseconds."),
158
115
  autoStart: z.boolean().describe("Whether it starts itself when the sandbox does."),
@@ -162,19 +119,8 @@ export type ExitLink = z.infer<typeof ExitLinkSchema>;
162
119
  export const ExitListSchema = z.object({
163
120
  links: z.array(ExitLinkSchema).describe("Every configured exit, with where it was asked to come out and where it actually does."),
164
121
  });
165
- /* WHERE EACH FREE PROVIDER CAN ACTUALLY COME OUT, as measured, and the reason it lives in the contract rather
166
- * than in the daemon: two consumers need the same answer and must not drift. The daemon uses it as the
167
- * FALLBACK catalog when a provider's own list cannot be fetched; the add form uses it to fill the country
168
- * picker, so a user chooses from a list instead of guessing a code and finding out later that nothing serves
169
- * it. A second copy of these numbers would let the picker offer a country the driver cannot dial.
170
- *
171
- * `share` is the country's slice of the provider's exit capacity, and it is the number that matters. A third
172
- * of Tor's fifty-two countries are one overloaded relay behind a flag; ranking by relay COUNT alone would put
173
- * the United States first on 1,171 slow relays when the Netherlands carries three times the traffic on half as
174
- * many. Both surfaces sort on this so the top of the list is the part that works.
175
- *
176
- * Measured 2026-08-21 from onionoo.torproject.org and vpngate.net's public CSV. Stale by construction, which
177
- * is exactly why the daemon prefers a live fetch and labels this one as not-live when it falls back to it. */
122
+ // Shared fallback catalog for the daemon and the add-form picker, so the two cannot drift. Ranked by `share`, not
123
+ // server count, since count alone misrepresents real capacity; stale by construction, always marked not-live when used.
178
124
  export const TOR_EXIT_COUNTRIES: readonly ExitPoint[] = [
179
125
  { country: "NL", countryName: "Netherlands", servers: 607, share: 0.304 },
180
126
  { country: "DE", countryName: "Germany", servers: 415, share: 0.242 },
@@ -196,9 +142,7 @@ export const TOR_EXIT_COUNTRIES: readonly ExitPoint[] = [
196
142
  { country: "GB", countryName: "United Kingdom", servers: 8, share: 0.002 },
197
143
  { country: "FI", countryName: "Finland", servers: 13, share: 0.002 },
198
144
  ];
199
- // VPN Gate, and its shape is the honest headline: 87% of its pool is Japan and Korea. That is not a defect to
200
- // hide behind a long country list, it is the reason to have it, Tor's Asian exit capacity is close to nothing,
201
- // so the two providers cover each other rather than overlapping.
145
+ // Skewed to Japan/Korea by design, complementing Tor's weak Asian coverage rather than duplicating it.
202
146
  export const VPNGATE_EXIT_COUNTRIES: readonly ExitPoint[] = [
203
147
  { country: "JP", countryName: "Japan", servers: 46, share: 0.48 },
204
148
  { country: "KR", countryName: "Korea, South", servers: 37, share: 0.39 },
@@ -212,8 +156,7 @@ export const VPNGATE_EXIT_COUNTRIES: readonly ExitPoint[] = [
212
156
  { country: "BY", countryName: "Belarus", servers: 1, share: 0.01 },
213
157
  ];
214
158
  export const ExitIdParamSchema = z.object({ id: z.string().describe("Which exit.") });
215
- // POST /exit/{id}/use body. An absent country means "let the provider choose", the same thing an absent
216
- // `country` in the manifest means, so clearing a country is expressible rather than only setting one.
159
+ // POST /exit/{id}/use body; absent `country` matches what an absent one means in the manifest.
217
160
  export const ExitUseInputSchema = z.object({
218
161
  id: z.string().describe("Which exit."),
219
162
  country: CountryCodeSchema.optional().describe(