@intentic/sandbox-contract 1.248.0 → 1.249.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 (877) 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.map +1 -1
  93. package/dist/contracts/skills.contract.js.map +1 -1
  94. package/dist/contracts/system.contract.d.ts +49 -73
  95. package/dist/contracts/system.contract.d.ts.map +1 -1
  96. package/dist/contracts/system.contract.js +12 -2
  97. package/dist/contracts/system.contract.js.map +1 -1
  98. package/dist/contracts/usage.contract.d.ts.map +1 -1
  99. package/dist/contracts/usage.contract.js.map +1 -1
  100. package/dist/contracts/vpn.contract.d.ts.map +1 -1
  101. package/dist/contracts/vpn.contract.js +1 -1
  102. package/dist/contracts/vpn.contract.js.map +1 -1
  103. package/dist/contracts/webext.contract.d.ts.map +1 -1
  104. package/dist/contracts/webext.contract.js.map +1 -1
  105. package/dist/contracts/workflows.contract.d.ts +7 -6
  106. package/dist/contracts/workflows.contract.d.ts.map +1 -1
  107. package/dist/contracts/workflows.contract.js +12 -3
  108. package/dist/contracts/workflows.contract.js.map +1 -1
  109. package/dist/contracts/workspace.contract.d.ts.map +1 -1
  110. package/dist/contracts/workspace.contract.js.map +1 -1
  111. package/dist/events/agent-events.d.ts +1237 -0
  112. package/dist/events/agent-events.d.ts.map +1 -0
  113. package/dist/events/agent-events.js +226 -0
  114. package/dist/events/agent-events.js.map +1 -0
  115. package/dist/events/cards.d.ts +404 -0
  116. package/dist/events/cards.d.ts.map +1 -0
  117. package/dist/events/cards.js +179 -0
  118. package/dist/events/cards.js.map +1 -0
  119. package/dist/events/resume.d.ts +23 -0
  120. package/dist/events/resume.d.ts.map +1 -0
  121. package/dist/events/resume.js +31 -0
  122. package/dist/events/resume.js.map +1 -0
  123. package/dist/events/system-events.d.ts +615 -0
  124. package/dist/events/system-events.d.ts.map +1 -0
  125. package/dist/events/system-events.js +64 -0
  126. package/dist/events/system-events.js.map +1 -0
  127. package/dist/events/transcript.d.ts +1755 -0
  128. package/dist/events/transcript.d.ts.map +1 -0
  129. package/dist/events/transcript.js +205 -0
  130. package/dist/events/transcript.js.map +1 -0
  131. package/dist/ids/conversation-ids.d.ts +8 -0
  132. package/dist/ids/conversation-ids.d.ts.map +1 -0
  133. package/dist/{conversation-ids.js → ids/conversation-ids.js} +13 -0
  134. package/dist/ids/conversation-ids.js.map +1 -0
  135. package/dist/ids/hostnames.d.ts.map +1 -0
  136. package/dist/ids/hostnames.js.map +1 -0
  137. package/dist/ids/session-names.d.ts.map +1 -0
  138. package/dist/ids/session-names.js.map +1 -0
  139. package/dist/ids/share-paths.d.ts.map +1 -0
  140. package/dist/ids/share-paths.js.map +1 -0
  141. package/dist/{tunnel-ids.d.ts → ids/tunnel-ids.d.ts} +1 -0
  142. package/dist/ids/tunnel-ids.d.ts.map +1 -0
  143. package/dist/{tunnel-ids.js → ids/tunnel-ids.js} +1 -0
  144. package/dist/ids/tunnel-ids.js.map +1 -0
  145. package/dist/index.d.ts +423 -450
  146. package/dist/index.d.ts.map +1 -1
  147. package/dist/index.js +54 -46
  148. package/dist/index.js.map +1 -1
  149. package/dist/{agent-catalog.d.ts → models/agent-catalog.d.ts} +2 -2
  150. package/dist/models/agent-catalog.d.ts.map +1 -0
  151. package/dist/models/agent-catalog.js.map +1 -0
  152. package/dist/models/agent-runtimes.d.ts.map +1 -0
  153. package/dist/models/agent-runtimes.js.map +1 -0
  154. package/dist/{fast-tier.d.ts → models/fast-tier.d.ts} +1 -1
  155. package/dist/models/fast-tier.d.ts.map +1 -0
  156. package/dist/models/fast-tier.js.map +1 -0
  157. package/dist/models/model-order.d.ts.map +1 -0
  158. package/dist/models/model-order.js.map +1 -0
  159. package/dist/{model-pins.d.ts → models/model-pins.d.ts} +1 -1
  160. package/dist/models/model-pins.d.ts.map +1 -0
  161. package/dist/models/model-pins.js.map +1 -0
  162. package/dist/{model-roles.d.ts → models/model-roles.d.ts} +0 -33
  163. package/dist/models/model-roles.d.ts.map +1 -0
  164. package/dist/{model-roles.js → models/model-roles.js} +0 -35
  165. package/dist/models/model-roles.js.map +1 -0
  166. package/dist/{plan-pools.d.ts → models/plan-pools.d.ts} +1 -1
  167. package/dist/models/plan-pools.d.ts.map +1 -0
  168. package/dist/models/plan-pools.js.map +1 -0
  169. package/dist/models/prompt-complexity.d.ts.map +1 -0
  170. package/dist/models/prompt-complexity.js.map +1 -0
  171. package/dist/models/provider-specs.d.ts.map +1 -0
  172. package/dist/models/provider-specs.js.map +1 -0
  173. package/dist/policy/approvals-execution.d.ts.map +1 -0
  174. package/dist/policy/approvals-execution.js.map +1 -0
  175. package/dist/{batch-runs.d.ts → policy/batch-runs.d.ts} +5 -1
  176. package/dist/policy/batch-runs.d.ts.map +1 -0
  177. package/dist/{batch-runs.js → policy/batch-runs.js} +10 -7
  178. package/dist/policy/batch-runs.js.map +1 -0
  179. package/dist/policy/capability-env.d.ts.map +1 -0
  180. package/dist/policy/capability-env.js.map +1 -0
  181. package/dist/policy/capability-secrets.d.ts.map +1 -0
  182. package/dist/policy/capability-secrets.js.map +1 -0
  183. package/dist/{card-status.d.ts → policy/card-status.d.ts} +2 -2
  184. package/dist/policy/card-status.d.ts.map +1 -0
  185. package/dist/{card-status.js → policy/card-status.js} +1 -5
  186. package/dist/policy/card-status.js.map +1 -0
  187. package/dist/{command-classes.d.ts → policy/command-classes.d.ts} +6 -2
  188. package/dist/policy/command-classes.d.ts.map +1 -0
  189. package/dist/{command-classes.js → policy/command-classes.js} +48 -11
  190. package/dist/policy/command-classes.js.map +1 -0
  191. package/dist/{command-run.d.ts → policy/command-run.d.ts} +1 -1
  192. package/dist/policy/command-run.d.ts.map +1 -0
  193. package/dist/policy/command-run.js.map +1 -0
  194. package/dist/policy/control-scopes.d.ts +16 -0
  195. package/dist/policy/control-scopes.d.ts.map +1 -0
  196. package/dist/policy/control-scopes.js +26 -0
  197. package/dist/policy/control-scopes.js.map +1 -0
  198. package/dist/policy/credential-material.d.ts.map +1 -0
  199. package/dist/policy/credential-material.js.map +1 -0
  200. package/dist/policy/needs-action.d.ts.map +1 -0
  201. package/dist/policy/needs-action.js.map +1 -0
  202. package/dist/policy/output-fields.d.ts.map +1 -0
  203. package/dist/policy/output-fields.js.map +1 -0
  204. package/dist/policy/overlay-lint.d.ts.map +1 -0
  205. package/dist/policy/overlay-lint.js.map +1 -0
  206. package/dist/policy/owner-ticket.d.ts.map +1 -0
  207. package/dist/{owner-ticket.js → policy/owner-ticket.js} +1 -1
  208. package/dist/policy/owner-ticket.js.map +1 -0
  209. package/dist/{safety-policy.d.ts → policy/safety-policy.d.ts} +6 -5
  210. package/dist/policy/safety-policy.d.ts.map +1 -0
  211. package/dist/{safety-policy.js → policy/safety-policy.js} +12 -12
  212. package/dist/policy/safety-policy.js.map +1 -0
  213. package/dist/policy/search-globs.d.ts.map +1 -0
  214. package/dist/policy/search-globs.js.map +1 -0
  215. package/dist/protocol/container-requirements.d.ts +20 -0
  216. package/dist/protocol/container-requirements.d.ts.map +1 -0
  217. package/dist/protocol/container-requirements.js +23 -0
  218. package/dist/protocol/container-requirements.js.map +1 -0
  219. package/dist/{host-protocol.d.ts → protocol/host-protocol.d.ts} +1 -0
  220. package/dist/protocol/host-protocol.d.ts.map +1 -0
  221. package/dist/{host-protocol.js → protocol/host-protocol.js} +1 -0
  222. package/dist/protocol/host-protocol.js.map +1 -0
  223. package/dist/protocol/ingress-contract.d.ts.map +1 -0
  224. package/dist/{ingress-contract.js → protocol/ingress-contract.js} +1 -1
  225. package/dist/protocol/ingress-contract.js.map +1 -0
  226. package/dist/protocol/ingress-protocol.d.ts.map +1 -0
  227. package/dist/protocol/ingress-protocol.js.map +1 -0
  228. package/dist/protocol/listener-protocol.d.ts.map +1 -0
  229. package/dist/{listener-protocol.js → protocol/listener-protocol.js} +1 -1
  230. package/dist/protocol/listener-protocol.js.map +1 -0
  231. package/dist/{peer-dial.d.ts → protocol/peer-dial.d.ts} +4 -1
  232. package/dist/protocol/peer-dial.d.ts.map +1 -0
  233. package/dist/{peer-dial.js → protocol/peer-dial.js} +51 -10
  234. package/dist/protocol/peer-dial.js.map +1 -0
  235. package/dist/protocol/peer-mcp-server.d.ts.map +1 -0
  236. package/dist/protocol/peer-mcp-server.js.map +1 -0
  237. package/dist/protocol/request-id.d.ts.map +1 -0
  238. package/dist/protocol/request-id.js.map +1 -0
  239. package/dist/protocol/routes.d.ts.map +1 -0
  240. package/dist/protocol/routes.js.map +1 -0
  241. package/dist/{runner-protocol.d.ts → protocol/runner-protocol.d.ts} +1 -0
  242. package/dist/protocol/runner-protocol.d.ts.map +1 -0
  243. package/dist/{runner-protocol.js → protocol/runner-protocol.js} +2 -1
  244. package/dist/protocol/runner-protocol.js.map +1 -0
  245. package/dist/protocol/sse.d.ts.map +1 -0
  246. package/dist/protocol/sse.js.map +1 -0
  247. package/dist/{terminal-protocol.d.ts → protocol/terminal-protocol.d.ts} +1 -3
  248. package/dist/protocol/terminal-protocol.d.ts.map +1 -0
  249. package/dist/protocol/terminal-protocol.js.map +1 -0
  250. package/dist/protocol/webext-links.d.ts.map +1 -0
  251. package/dist/protocol/webext-links.js.map +1 -0
  252. package/dist/{webext-protocol.d.ts → protocol/webext-protocol.d.ts} +1 -0
  253. package/dist/protocol/webext-protocol.d.ts.map +1 -0
  254. package/dist/{webext-protocol.js → protocol/webext-protocol.js} +1 -0
  255. package/dist/protocol/webext-protocol.js.map +1 -0
  256. package/dist/schemas/activity.d.ts +2 -0
  257. package/dist/schemas/activity.d.ts.map +1 -1
  258. package/dist/schemas/activity.js +4 -0
  259. package/dist/schemas/activity.js.map +1 -1
  260. package/dist/schemas/agent.d.ts +16 -4
  261. package/dist/schemas/agent.d.ts.map +1 -1
  262. package/dist/schemas/agent.js +21 -4
  263. package/dist/schemas/agent.js.map +1 -1
  264. package/dist/schemas/agents.d.ts +17 -4
  265. package/dist/schemas/agents.d.ts.map +1 -1
  266. package/dist/schemas/agents.js +15 -4
  267. package/dist/schemas/agents.js.map +1 -1
  268. package/dist/schemas/approvals.d.ts.map +1 -1
  269. package/dist/schemas/approvals.js.map +1 -1
  270. package/dist/schemas/automations.d.ts +54 -28
  271. package/dist/schemas/automations.d.ts.map +1 -1
  272. package/dist/schemas/automations.js +26 -8
  273. package/dist/schemas/automations.js.map +1 -1
  274. package/dist/schemas/capabilities.d.ts +0 -8
  275. package/dist/schemas/capabilities.d.ts.map +1 -1
  276. package/dist/schemas/capabilities.js +0 -4
  277. package/dist/schemas/capabilities.js.map +1 -1
  278. package/dist/schemas/ci.d.ts +10 -0
  279. package/dist/schemas/ci.d.ts.map +1 -1
  280. package/dist/schemas/ci.js +9 -1
  281. package/dist/schemas/ci.js.map +1 -1
  282. package/dist/schemas/codebase-health.d.ts.map +1 -1
  283. package/dist/schemas/codebase-health.js.map +1 -1
  284. package/dist/schemas/devices.d.ts +90 -0
  285. package/dist/schemas/devices.d.ts.map +1 -1
  286. package/dist/schemas/devices.js +10 -1
  287. package/dist/schemas/devices.js.map +1 -1
  288. package/dist/schemas/engines.d.ts.map +1 -1
  289. package/dist/schemas/engines.js.map +1 -1
  290. package/dist/schemas/environment.d.ts.map +1 -1
  291. package/dist/schemas/environment.js.map +1 -1
  292. package/dist/schemas/exit.d.ts.map +1 -1
  293. package/dist/schemas/exit.js.map +1 -1
  294. package/dist/schemas/extension-updates.d.ts.map +1 -1
  295. package/dist/schemas/extension-updates.js.map +1 -1
  296. package/dist/schemas/git-history.d.ts.map +1 -1
  297. package/dist/schemas/git-history.js.map +1 -1
  298. package/dist/schemas/git.d.ts +80 -16
  299. package/dist/schemas/git.d.ts.map +1 -1
  300. package/dist/schemas/git.js +37 -25
  301. package/dist/schemas/git.js.map +1 -1
  302. package/dist/schemas/history.d.ts.map +1 -1
  303. package/dist/schemas/history.js.map +1 -1
  304. package/dist/schemas/hosts.d.ts.map +1 -1
  305. package/dist/schemas/hosts.js.map +1 -1
  306. package/dist/schemas/inventory.d.ts.map +1 -1
  307. package/dist/schemas/inventory.js.map +1 -1
  308. package/dist/schemas/issues.d.ts +0 -1
  309. package/dist/schemas/issues.d.ts.map +1 -1
  310. package/dist/schemas/issues.js +0 -1
  311. package/dist/schemas/issues.js.map +1 -1
  312. package/dist/schemas/logs.d.ts.map +1 -1
  313. package/dist/schemas/logs.js.map +1 -1
  314. package/dist/schemas/loops.d.ts.map +1 -1
  315. package/dist/schemas/loops.js +1 -1
  316. package/dist/schemas/loops.js.map +1 -1
  317. package/dist/schemas/maintenance.d.ts.map +1 -1
  318. package/dist/schemas/maintenance.js.map +1 -1
  319. package/dist/schemas/marketplace.d.ts +0 -4
  320. package/dist/schemas/marketplace.d.ts.map +1 -1
  321. package/dist/schemas/panels.d.ts.map +1 -1
  322. package/dist/schemas/panels.js.map +1 -1
  323. package/dist/schemas/personas.d.ts +2 -1
  324. package/dist/schemas/personas.d.ts.map +1 -1
  325. package/dist/schemas/personas.js +6 -2
  326. package/dist/schemas/personas.js.map +1 -1
  327. package/dist/schemas/plan-limits.d.ts +2 -4
  328. package/dist/schemas/plan-limits.d.ts.map +1 -1
  329. package/dist/schemas/plan-limits.js +5 -8
  330. package/dist/schemas/plan-limits.js.map +1 -1
  331. package/dist/schemas/ports.d.ts.map +1 -1
  332. package/dist/schemas/ports.js.map +1 -1
  333. package/dist/schemas/provider-oauth.d.ts.map +1 -1
  334. package/dist/schemas/provider-oauth.js.map +1 -1
  335. package/dist/schemas/provider-subscriptions.d.ts +1 -1
  336. package/dist/schemas/provider-subscriptions.d.ts.map +1 -1
  337. package/dist/schemas/provider-subscriptions.js +1 -1
  338. package/dist/schemas/provider-subscriptions.js.map +1 -1
  339. package/dist/schemas/public.d.ts.map +1 -1
  340. package/dist/schemas/public.js.map +1 -1
  341. package/dist/schemas/push.d.ts.map +1 -1
  342. package/dist/schemas/push.js.map +1 -1
  343. package/dist/schemas/secrets.d.ts.map +1 -1
  344. package/dist/schemas/secrets.js.map +1 -1
  345. package/dist/schemas/settings.d.ts +6 -9
  346. package/dist/schemas/settings.d.ts.map +1 -1
  347. package/dist/schemas/settings.js +16 -5
  348. package/dist/schemas/settings.js.map +1 -1
  349. package/dist/schemas/share.d.ts.map +1 -1
  350. package/dist/schemas/share.js.map +1 -1
  351. package/dist/schemas/shared.d.ts +4 -0
  352. package/dist/schemas/shared.d.ts.map +1 -1
  353. package/dist/schemas/shared.js +3 -0
  354. package/dist/schemas/shared.js.map +1 -1
  355. package/dist/schemas/system.d.ts +6 -0
  356. package/dist/schemas/system.d.ts.map +1 -1
  357. package/dist/schemas/system.js +10 -0
  358. package/dist/schemas/system.js.map +1 -1
  359. package/dist/schemas/terminal.d.ts.map +1 -1
  360. package/dist/schemas/terminal.js.map +1 -1
  361. package/dist/schemas/usage.d.ts.map +1 -1
  362. package/dist/schemas/usage.js.map +1 -1
  363. package/dist/schemas/vpn.d.ts.map +1 -1
  364. package/dist/schemas/vpn.js.map +1 -1
  365. package/dist/schemas/webext.d.ts.map +1 -1
  366. package/dist/schemas/webext.js.map +1 -1
  367. package/dist/schemas/workflows.d.ts +66 -9
  368. package/dist/schemas/workflows.d.ts.map +1 -1
  369. package/dist/schemas/workflows.js +6 -5
  370. package/dist/schemas/workflows.js.map +1 -1
  371. package/dist/schemas/workspace-repos.d.ts.map +1 -1
  372. package/dist/schemas/workspace-repos.js.map +1 -1
  373. package/dist/schemas/workspace-search.d.ts.map +1 -1
  374. package/dist/schemas/workspace-search.js.map +1 -1
  375. package/dist/schemas/workspace-setup.d.ts.map +1 -1
  376. package/dist/schemas/workspace-setup.js.map +1 -1
  377. package/dist/schemas/workspace-tree.d.ts.map +1 -1
  378. package/dist/schemas/workspace-tree.js.map +1 -1
  379. package/dist/state/arrival.d.ts.map +1 -0
  380. package/dist/{arrival.js → state/arrival.js} +1 -1
  381. package/dist/state/arrival.js.map +1 -0
  382. package/dist/state/contract-lock.d.ts.map +1 -0
  383. package/dist/{contract-lock.js → state/contract-lock.js} +1 -1
  384. package/dist/state/contract-lock.js.map +1 -0
  385. package/dist/{definition.d.ts → state/definition.d.ts} +21 -17
  386. package/dist/state/definition.d.ts.map +1 -0
  387. package/dist/{definition.js → state/definition.js} +4 -4
  388. package/dist/state/definition.js.map +1 -0
  389. package/dist/state/history-state.d.ts.map +1 -0
  390. package/dist/{history-state.js → state/history-state.js} +1 -0
  391. package/dist/state/history-state.js.map +1 -0
  392. package/dist/state/runtime-state.d.ts.map +1 -0
  393. package/dist/state/runtime-state.js.map +1 -0
  394. package/dist/state/starter.d.ts.map +1 -0
  395. package/dist/state/starter.js.map +1 -0
  396. package/dist/state/state-portability.d.ts.map +1 -0
  397. package/dist/state/state-portability.js.map +1 -0
  398. package/dist/state/versions.d.ts.map +1 -0
  399. package/dist/state/versions.js.map +1 -0
  400. package/dist/{workspace-state.d.ts → state/workspace-state.d.ts} +8 -0
  401. package/dist/state/workspace-state.d.ts.map +1 -0
  402. package/dist/{workspace-state.js → state/workspace-state.js} +25 -0
  403. package/dist/state/workspace-state.js.map +1 -0
  404. package/dist/{documents.d.ts → text/documents.d.ts} +1 -1
  405. package/dist/text/documents.d.ts.map +1 -0
  406. package/dist/{documents.js → text/documents.js} +1 -1
  407. package/dist/text/documents.js.map +1 -0
  408. package/dist/text/embed.d.ts.map +1 -0
  409. package/dist/text/embed.js.map +1 -0
  410. package/dist/text/mentions.d.ts.map +1 -0
  411. package/dist/text/mentions.js.map +1 -0
  412. package/dist/text/model-answer.d.ts +3 -0
  413. package/dist/text/model-answer.d.ts.map +1 -0
  414. package/dist/text/model-answer.js +3 -0
  415. package/dist/text/model-answer.js.map +1 -0
  416. package/dist/text/path-refs.d.ts.map +1 -0
  417. package/dist/text/path-refs.js.map +1 -0
  418. package/dist/{shell-regions.d.ts → text/shell-regions.d.ts} +1 -1
  419. package/dist/text/shell-regions.d.ts.map +1 -0
  420. package/dist/text/shell-regions.js.map +1 -0
  421. package/dist/text/title.d.ts.map +1 -0
  422. package/dist/text/title.js.map +1 -0
  423. package/dist/{transcript-fold.d.ts → text/transcript-fold.d.ts} +2 -1
  424. package/dist/text/transcript-fold.d.ts.map +1 -0
  425. package/dist/{transcript-fold.js → text/transcript-fold.js} +2 -16
  426. package/dist/text/transcript-fold.js.map +1 -0
  427. package/dist/text/whisper.d.ts +3 -0
  428. package/dist/text/whisper.d.ts.map +1 -0
  429. package/dist/text/whisper.js +11 -0
  430. package/dist/text/whisper.js.map +1 -0
  431. package/dist/{workflow-faults.d.ts → text/workflow-faults.d.ts} +1 -1
  432. package/dist/text/workflow-faults.d.ts.map +1 -0
  433. package/dist/{workflow-faults.js → text/workflow-faults.js} +1 -1
  434. package/dist/text/workflow-faults.js.map +1 -0
  435. package/package.json +70 -70
  436. package/src/chores/chores.test.ts +4 -10
  437. package/src/chores/chores.ts +148 -392
  438. package/src/chores/digest.ts +8 -28
  439. package/src/chores/extension-update.ts +3 -8
  440. package/src/chores/fix-deps.ts +4 -18
  441. package/src/chores/index.ts +2 -2
  442. package/src/chores/probes.test.ts +7 -43
  443. package/src/chores/probes.ts +62 -167
  444. package/src/chores/prompt.ts +10 -34
  445. package/src/chores/stack.test.ts +6 -45
  446. package/src/chores/stack.ts +27 -118
  447. package/src/chores/verdict.test.ts +101 -80
  448. package/src/chores/verdict.ts +54 -99
  449. package/src/contracts/accounts.contract.ts +4 -19
  450. package/src/contracts/agent.contract.ts +7 -22
  451. package/src/contracts/agents.contract.ts +25 -71
  452. package/src/contracts/automations.contract.ts +14 -30
  453. package/src/contracts/capabilities.contract.ts +8 -35
  454. package/src/contracts/chores.contract.ts +4 -15
  455. package/src/contracts/endpoints.contract.ts +5 -22
  456. package/src/contracts/exit.contract.ts +7 -30
  457. package/src/contracts/extensions.contract.ts +8 -30
  458. package/src/contracts/git.contract.ts +25 -49
  459. package/src/contracts/host.contract.ts +9 -44
  460. package/src/contracts/intentic.contract.ts +1 -1
  461. package/src/contracts/logs.contract.ts +3 -13
  462. package/src/contracts/loops.contract.ts +9 -40
  463. package/src/contracts/personas.contract.ts +10 -35
  464. package/src/contracts/providers.contract.ts +4 -17
  465. package/src/contracts/runner.contract.ts +12 -39
  466. package/src/contracts/safety.contract.ts +5 -14
  467. package/src/contracts/secrets.contract.ts +4 -22
  468. package/src/contracts/sessions.contract.ts +1 -1
  469. package/src/contracts/settings.contract.ts +4 -10
  470. package/src/contracts/share.contract.ts +3 -9
  471. package/src/contracts/skills.contract.ts +4 -15
  472. package/src/contracts/system.contract.ts +26 -52
  473. package/src/contracts/usage.contract.ts +7 -21
  474. package/src/contracts/vpn.contract.ts +9 -16
  475. package/src/contracts/webext.contract.ts +9 -25
  476. package/src/contracts/workflows.contract.ts +34 -58
  477. package/src/contracts/workspace.contract.ts +19 -50
  478. package/src/events/agent-events.ts +345 -0
  479. package/src/events/cards.ts +286 -0
  480. package/src/{events.test.ts → events/resume.test.ts} +4 -19
  481. package/src/events/resume.ts +60 -0
  482. package/src/events/system-events.ts +139 -0
  483. package/src/events/transcript.ts +320 -0
  484. package/src/{conversation-ids.test.ts → ids/conversation-ids.test.ts} +25 -13
  485. package/src/ids/conversation-ids.ts +178 -0
  486. package/src/ids/hostnames.ts +129 -0
  487. package/src/ids/session-names.ts +29 -0
  488. package/src/ids/share-paths.ts +43 -0
  489. package/src/{tunnel-ids.test.ts → ids/tunnel-ids.test.ts} +1 -14
  490. package/src/ids/tunnel-ids.ts +29 -0
  491. package/src/index.ts +71 -87
  492. package/src/{agent-catalog.test.ts → models/agent-catalog.test.ts} +19 -93
  493. package/src/models/agent-catalog.ts +174 -0
  494. package/src/models/agent-runtimes.ts +201 -0
  495. package/src/models/capability-ledger.test.ts +84 -0
  496. package/src/{fast-tier.test.ts → models/fast-tier.test.ts} +7 -18
  497. package/src/models/fast-tier.ts +36 -0
  498. package/src/{model-order.test.ts → models/model-order.test.ts} +19 -40
  499. package/src/models/model-order.ts +163 -0
  500. package/src/{model-pins.test.ts → models/model-pins.test.ts} +12 -46
  501. package/src/models/model-pins.ts +57 -0
  502. package/src/models/model-roles.test.ts +38 -0
  503. package/src/models/model-roles.ts +180 -0
  504. package/src/{plan-pools.test.ts → models/plan-pools.test.ts} +6 -11
  505. package/src/models/plan-pools.ts +65 -0
  506. package/src/{prompt-complexity.test.ts → models/prompt-complexity.test.ts} +8 -60
  507. package/src/models/prompt-complexity.ts +215 -0
  508. package/src/{provider-specs.test.ts → models/provider-specs.test.ts} +18 -47
  509. package/src/models/provider-specs.ts +272 -0
  510. package/src/policy/approvals-execution.ts +58 -0
  511. package/src/{batch-runs.test.ts → policy/batch-runs.test.ts} +4 -20
  512. package/src/policy/batch-runs.ts +137 -0
  513. package/src/policy/capability-secrets.ts +5 -0
  514. package/src/{card-status.ts → policy/card-status.ts} +11 -26
  515. package/src/{command-classes.test.ts → policy/command-classes.test.ts} +11 -118
  516. package/src/policy/command-classes.ts +395 -0
  517. package/src/policy/command-run.ts +65 -0
  518. package/src/policy/control-scopes.ts +38 -0
  519. package/src/{credential-material.test.ts → policy/credential-material.test.ts} +4 -26
  520. package/src/policy/credential-material.ts +91 -0
  521. package/src/policy/needs-action.ts +5 -0
  522. package/src/policy/output-fields.ts +86 -0
  523. package/src/policy/overlay-lint.ts +100 -0
  524. package/src/{owner-ticket.test.ts → policy/owner-ticket.test.ts} +1 -1
  525. package/src/{owner-ticket.ts → policy/owner-ticket.ts} +9 -31
  526. package/src/policy/safety-policy.test.ts +84 -0
  527. package/src/policy/safety-policy.ts +142 -0
  528. package/src/policy/search-globs.ts +60 -0
  529. package/src/protocol/container-requirements.test.ts +72 -0
  530. package/src/protocol/container-requirements.ts +58 -0
  531. package/src/protocol/host-protocol.ts +29 -0
  532. package/src/protocol/ingress-contract.ts +103 -0
  533. package/src/{ingress-protocol.test.ts → protocol/ingress-protocol.test.ts} +25 -90
  534. package/src/protocol/ingress-protocol.ts +441 -0
  535. package/src/protocol/listener-protocol.ts +75 -0
  536. package/src/{peer-dial.test.ts → protocol/peer-dial.test.ts} +52 -1
  537. package/src/protocol/peer-dial.ts +207 -0
  538. package/src/{peer-mcp-server.ts → protocol/peer-mcp-server.ts} +16 -41
  539. package/src/protocol/request-id.ts +5 -0
  540. package/src/{routes.test.ts → protocol/routes.test.ts} +14 -22
  541. package/src/protocol/routes.ts +159 -0
  542. package/src/protocol/runner-protocol.ts +197 -0
  543. package/src/protocol/terminal-protocol.ts +13 -0
  544. package/src/protocol/webext-links.ts +50 -0
  545. package/src/protocol/webext-protocol.ts +24 -0
  546. package/src/schemas/activity.ts +22 -30
  547. package/src/schemas/agent.ts +130 -238
  548. package/src/schemas/agents.ts +165 -483
  549. package/src/schemas/approvals.ts +23 -71
  550. package/src/schemas/automations.ts +142 -250
  551. package/src/schemas/capabilities.ts +127 -414
  552. package/src/schemas/ci.ts +56 -108
  553. package/src/schemas/codebase-health.ts +7 -11
  554. package/src/schemas/devices.ts +98 -321
  555. package/src/schemas/engines.ts +16 -44
  556. package/src/schemas/environment.ts +41 -91
  557. package/src/schemas/exit.ts +24 -81
  558. package/src/schemas/extension-updates.ts +42 -87
  559. package/src/schemas/git-history.ts +30 -84
  560. package/src/schemas/git.ts +141 -256
  561. package/src/schemas/history.ts +14 -40
  562. package/src/schemas/hosts.ts +9 -15
  563. package/src/schemas/inventory.ts +8 -10
  564. package/src/schemas/issues.ts +66 -134
  565. package/src/schemas/logs.ts +15 -34
  566. package/src/schemas/loops.ts +46 -163
  567. package/src/schemas/maintenance.ts +47 -172
  568. package/src/schemas/panels.ts +20 -45
  569. package/src/schemas/personas.ts +50 -200
  570. package/src/schemas/plan-limits.ts +58 -197
  571. package/src/schemas/ports.ts +14 -32
  572. package/src/schemas/provider-oauth.ts +23 -76
  573. package/src/schemas/provider-subscriptions.ts +4 -13
  574. package/src/schemas/public.ts +4 -15
  575. package/src/schemas/push.ts +8 -36
  576. package/src/schemas/secrets.ts +20 -64
  577. package/src/schemas/settings.ts +175 -600
  578. package/src/schemas/share.ts +14 -32
  579. package/src/schemas/shared.ts +14 -13
  580. package/src/schemas/system.ts +46 -78
  581. package/src/schemas/terminal.ts +41 -120
  582. package/src/schemas/usage.ts +44 -233
  583. package/src/schemas/version-seam.test.ts +9 -26
  584. package/src/schemas/vpn.ts +27 -64
  585. package/src/schemas/webext.ts +22 -53
  586. package/src/schemas/workflows.ts +57 -183
  587. package/src/schemas/workspace-repos.ts +12 -24
  588. package/src/schemas/workspace-search.ts +17 -35
  589. package/src/schemas/workspace-setup.ts +4 -11
  590. package/src/schemas/workspace-tree.ts +32 -91
  591. package/src/state/arrival.ts +109 -0
  592. package/src/state/contract-lock.test.ts +17 -0
  593. package/src/state/contract-lock.ts +49 -0
  594. package/src/state/definition.ts +143 -0
  595. package/src/state/history-state.ts +103 -0
  596. package/src/{runtime-state.test.ts → state/runtime-state.test.ts} +3 -10
  597. package/src/state/runtime-state.ts +62 -0
  598. package/src/state/starter.ts +5 -0
  599. package/src/state/state-portability.ts +27 -0
  600. package/src/state/versions.ts +26 -0
  601. package/src/{workspace-state.test.ts → state/workspace-state.test.ts} +65 -172
  602. package/src/state/workspace-state.ts +669 -0
  603. package/src/{documents.test.ts → text/documents.test.ts} +1 -1
  604. package/src/text/documents.ts +42 -0
  605. package/src/text/embed.ts +132 -0
  606. package/src/text/mentions.ts +21 -0
  607. package/src/text/model-answer.ts +9 -0
  608. package/src/text/path-refs.ts +39 -0
  609. package/src/text/shell-regions.ts +224 -0
  610. package/src/{title.test.ts → text/title.test.ts} +13 -32
  611. package/src/text/title.ts +202 -0
  612. package/src/{transcript-fold.test.ts → text/transcript-fold.test.ts} +5 -83
  613. package/src/{transcript-fold.ts → text/transcript-fold.ts} +65 -170
  614. package/src/text/whisper.test.ts +19 -0
  615. package/src/text/whisper.ts +17 -0
  616. package/src/{workflow-faults.test.ts → text/workflow-faults.test.ts} +6 -24
  617. package/src/{workflow-faults.ts → text/workflow-faults.ts} +20 -60
  618. package/dist/agent-catalog.d.ts.map +0 -1
  619. package/dist/agent-catalog.js.map +0 -1
  620. package/dist/agent-runtimes.d.ts.map +0 -1
  621. package/dist/agent-runtimes.js.map +0 -1
  622. package/dist/approvals-execution.d.ts.map +0 -1
  623. package/dist/approvals-execution.js.map +0 -1
  624. package/dist/arrival.d.ts.map +0 -1
  625. package/dist/arrival.js.map +0 -1
  626. package/dist/batch-runs.d.ts.map +0 -1
  627. package/dist/batch-runs.js.map +0 -1
  628. package/dist/capability-env.d.ts.map +0 -1
  629. package/dist/capability-env.js.map +0 -1
  630. package/dist/capability-secrets.d.ts.map +0 -1
  631. package/dist/capability-secrets.js.map +0 -1
  632. package/dist/card-status.d.ts.map +0 -1
  633. package/dist/card-status.js.map +0 -1
  634. package/dist/command-classes.d.ts.map +0 -1
  635. package/dist/command-classes.js.map +0 -1
  636. package/dist/command-run.d.ts.map +0 -1
  637. package/dist/command-run.js.map +0 -1
  638. package/dist/contract-lock.d.ts.map +0 -1
  639. package/dist/contract-lock.js.map +0 -1
  640. package/dist/conversation-ids.d.ts +0 -4
  641. package/dist/conversation-ids.d.ts.map +0 -1
  642. package/dist/conversation-ids.js.map +0 -1
  643. package/dist/credential-material.d.ts.map +0 -1
  644. package/dist/credential-material.js.map +0 -1
  645. package/dist/definition.d.ts.map +0 -1
  646. package/dist/definition.js.map +0 -1
  647. package/dist/documents.d.ts.map +0 -1
  648. package/dist/documents.js.map +0 -1
  649. package/dist/embed.d.ts.map +0 -1
  650. package/dist/embed.js.map +0 -1
  651. package/dist/events.d.ts +0 -4336
  652. package/dist/events.d.ts.map +0 -1
  653. package/dist/events.js +0 -725
  654. package/dist/events.js.map +0 -1
  655. package/dist/fast-tier.d.ts.map +0 -1
  656. package/dist/fast-tier.js.map +0 -1
  657. package/dist/history-state.d.ts.map +0 -1
  658. package/dist/history-state.js.map +0 -1
  659. package/dist/host-protocol.d.ts.map +0 -1
  660. package/dist/host-protocol.js.map +0 -1
  661. package/dist/hostnames.d.ts.map +0 -1
  662. package/dist/hostnames.js.map +0 -1
  663. package/dist/ingress-contract.d.ts.map +0 -1
  664. package/dist/ingress-contract.js.map +0 -1
  665. package/dist/ingress-protocol.d.ts.map +0 -1
  666. package/dist/ingress-protocol.js.map +0 -1
  667. package/dist/listener-protocol.d.ts.map +0 -1
  668. package/dist/listener-protocol.js.map +0 -1
  669. package/dist/mentions.d.ts.map +0 -1
  670. package/dist/mentions.js.map +0 -1
  671. package/dist/model-order.d.ts.map +0 -1
  672. package/dist/model-order.js.map +0 -1
  673. package/dist/model-pins.d.ts.map +0 -1
  674. package/dist/model-pins.js.map +0 -1
  675. package/dist/model-roles.d.ts.map +0 -1
  676. package/dist/model-roles.js.map +0 -1
  677. package/dist/needs-action.d.ts.map +0 -1
  678. package/dist/needs-action.js.map +0 -1
  679. package/dist/output-fields.d.ts.map +0 -1
  680. package/dist/output-fields.js.map +0 -1
  681. package/dist/overlay-lint.d.ts.map +0 -1
  682. package/dist/overlay-lint.js.map +0 -1
  683. package/dist/owner-ticket.d.ts.map +0 -1
  684. package/dist/owner-ticket.js.map +0 -1
  685. package/dist/path-refs.d.ts.map +0 -1
  686. package/dist/path-refs.js.map +0 -1
  687. package/dist/peer-dial.d.ts.map +0 -1
  688. package/dist/peer-dial.js.map +0 -1
  689. package/dist/peer-mcp-server.d.ts.map +0 -1
  690. package/dist/peer-mcp-server.js.map +0 -1
  691. package/dist/plan-pools.d.ts.map +0 -1
  692. package/dist/plan-pools.js.map +0 -1
  693. package/dist/prompt-complexity.d.ts.map +0 -1
  694. package/dist/prompt-complexity.js.map +0 -1
  695. package/dist/provider-specs.d.ts.map +0 -1
  696. package/dist/provider-specs.js.map +0 -1
  697. package/dist/request-id.d.ts.map +0 -1
  698. package/dist/request-id.js.map +0 -1
  699. package/dist/routes.d.ts.map +0 -1
  700. package/dist/routes.js.map +0 -1
  701. package/dist/runner-protocol.d.ts.map +0 -1
  702. package/dist/runner-protocol.js.map +0 -1
  703. package/dist/runtime-state.d.ts.map +0 -1
  704. package/dist/runtime-state.js.map +0 -1
  705. package/dist/safety-policy.d.ts.map +0 -1
  706. package/dist/safety-policy.js.map +0 -1
  707. package/dist/search-globs.d.ts.map +0 -1
  708. package/dist/search-globs.js.map +0 -1
  709. package/dist/session-names.d.ts.map +0 -1
  710. package/dist/session-names.js.map +0 -1
  711. package/dist/share-paths.d.ts.map +0 -1
  712. package/dist/share-paths.js.map +0 -1
  713. package/dist/shell-regions.d.ts.map +0 -1
  714. package/dist/shell-regions.js.map +0 -1
  715. package/dist/sse.d.ts.map +0 -1
  716. package/dist/sse.js.map +0 -1
  717. package/dist/starter.d.ts.map +0 -1
  718. package/dist/starter.js.map +0 -1
  719. package/dist/state-portability.d.ts.map +0 -1
  720. package/dist/state-portability.js.map +0 -1
  721. package/dist/terminal-protocol.d.ts.map +0 -1
  722. package/dist/terminal-protocol.js.map +0 -1
  723. package/dist/title.d.ts.map +0 -1
  724. package/dist/title.js.map +0 -1
  725. package/dist/transcript-fold.d.ts.map +0 -1
  726. package/dist/transcript-fold.js.map +0 -1
  727. package/dist/tunnel-ids.d.ts.map +0 -1
  728. package/dist/tunnel-ids.js.map +0 -1
  729. package/dist/versions.d.ts.map +0 -1
  730. package/dist/versions.js.map +0 -1
  731. package/dist/webext-links.d.ts.map +0 -1
  732. package/dist/webext-links.js.map +0 -1
  733. package/dist/webext-protocol.d.ts.map +0 -1
  734. package/dist/webext-protocol.js.map +0 -1
  735. package/dist/workflow-faults.d.ts.map +0 -1
  736. package/dist/workflow-faults.js.map +0 -1
  737. package/dist/workspace-state.d.ts.map +0 -1
  738. package/dist/workspace-state.js.map +0 -1
  739. package/src/agent-catalog.ts +0 -316
  740. package/src/agent-runtimes.ts +0 -419
  741. package/src/approvals-execution.ts +0 -96
  742. package/src/arrival.ts +0 -160
  743. package/src/batch-runs.ts +0 -188
  744. package/src/capability-ledger.test.ts +0 -140
  745. package/src/capability-secrets.ts +0 -20
  746. package/src/command-classes.ts +0 -617
  747. package/src/command-run.ts +0 -78
  748. package/src/contract-lock.test.ts +0 -23
  749. package/src/contract-lock.ts +0 -66
  750. package/src/conversation-ids.ts +0 -207
  751. package/src/credential-material.ts +0 -181
  752. package/src/definition.ts +0 -207
  753. package/src/documents.ts +0 -67
  754. package/src/embed.ts +0 -164
  755. package/src/events.ts +0 -1870
  756. package/src/fast-tier.ts +0 -72
  757. package/src/history-state.ts +0 -174
  758. package/src/host-protocol.ts +0 -36
  759. package/src/hostnames.ts +0 -180
  760. package/src/ingress-contract.ts +0 -157
  761. package/src/ingress-protocol.ts +0 -625
  762. package/src/listener-protocol.ts +0 -96
  763. package/src/mentions.ts +0 -25
  764. package/src/model-order.ts +0 -262
  765. package/src/model-pins.ts +0 -132
  766. package/src/model-roles.test.ts +0 -52
  767. package/src/model-roles.ts +0 -320
  768. package/src/needs-action.ts +0 -14
  769. package/src/output-fields.ts +0 -111
  770. package/src/overlay-lint.ts +0 -116
  771. package/src/path-refs.ts +0 -59
  772. package/src/peer-dial.ts +0 -163
  773. package/src/plan-pools.ts +0 -92
  774. package/src/prompt-complexity.ts +0 -334
  775. package/src/provider-specs.ts +0 -432
  776. package/src/request-id.ts +0 -41
  777. package/src/routes.ts +0 -219
  778. package/src/runner-protocol.ts +0 -239
  779. package/src/runtime-state.ts +0 -140
  780. package/src/safety-policy.test.ts +0 -88
  781. package/src/safety-policy.ts +0 -258
  782. package/src/search-globs.ts +0 -76
  783. package/src/session-names.ts +0 -44
  784. package/src/share-paths.ts +0 -68
  785. package/src/shell-regions.ts +0 -289
  786. package/src/starter.ts +0 -13
  787. package/src/state-portability.ts +0 -56
  788. package/src/terminal-protocol.ts +0 -16
  789. package/src/title.ts +0 -267
  790. package/src/tunnel-ids.ts +0 -57
  791. package/src/versions.ts +0 -48
  792. package/src/webext-links.ts +0 -90
  793. package/src/webext-protocol.ts +0 -27
  794. package/src/workspace-state.ts +0 -1090
  795. /package/dist/{hostnames.d.ts → ids/hostnames.d.ts} +0 -0
  796. /package/dist/{hostnames.js → ids/hostnames.js} +0 -0
  797. /package/dist/{session-names.d.ts → ids/session-names.d.ts} +0 -0
  798. /package/dist/{session-names.js → ids/session-names.js} +0 -0
  799. /package/dist/{share-paths.d.ts → ids/share-paths.d.ts} +0 -0
  800. /package/dist/{share-paths.js → ids/share-paths.js} +0 -0
  801. /package/dist/{agent-catalog.js → models/agent-catalog.js} +0 -0
  802. /package/dist/{agent-runtimes.d.ts → models/agent-runtimes.d.ts} +0 -0
  803. /package/dist/{agent-runtimes.js → models/agent-runtimes.js} +0 -0
  804. /package/dist/{fast-tier.js → models/fast-tier.js} +0 -0
  805. /package/dist/{model-order.d.ts → models/model-order.d.ts} +0 -0
  806. /package/dist/{model-order.js → models/model-order.js} +0 -0
  807. /package/dist/{model-pins.js → models/model-pins.js} +0 -0
  808. /package/dist/{plan-pools.js → models/plan-pools.js} +0 -0
  809. /package/dist/{prompt-complexity.d.ts → models/prompt-complexity.d.ts} +0 -0
  810. /package/dist/{prompt-complexity.js → models/prompt-complexity.js} +0 -0
  811. /package/dist/{provider-specs.d.ts → models/provider-specs.d.ts} +0 -0
  812. /package/dist/{provider-specs.js → models/provider-specs.js} +0 -0
  813. /package/dist/{approvals-execution.d.ts → policy/approvals-execution.d.ts} +0 -0
  814. /package/dist/{approvals-execution.js → policy/approvals-execution.js} +0 -0
  815. /package/dist/{capability-env.d.ts → policy/capability-env.d.ts} +0 -0
  816. /package/dist/{capability-env.js → policy/capability-env.js} +0 -0
  817. /package/dist/{capability-secrets.d.ts → policy/capability-secrets.d.ts} +0 -0
  818. /package/dist/{capability-secrets.js → policy/capability-secrets.js} +0 -0
  819. /package/dist/{command-run.js → policy/command-run.js} +0 -0
  820. /package/dist/{credential-material.d.ts → policy/credential-material.d.ts} +0 -0
  821. /package/dist/{credential-material.js → policy/credential-material.js} +0 -0
  822. /package/dist/{needs-action.d.ts → policy/needs-action.d.ts} +0 -0
  823. /package/dist/{needs-action.js → policy/needs-action.js} +0 -0
  824. /package/dist/{output-fields.d.ts → policy/output-fields.d.ts} +0 -0
  825. /package/dist/{output-fields.js → policy/output-fields.js} +0 -0
  826. /package/dist/{overlay-lint.d.ts → policy/overlay-lint.d.ts} +0 -0
  827. /package/dist/{overlay-lint.js → policy/overlay-lint.js} +0 -0
  828. /package/dist/{owner-ticket.d.ts → policy/owner-ticket.d.ts} +0 -0
  829. /package/dist/{search-globs.d.ts → policy/search-globs.d.ts} +0 -0
  830. /package/dist/{search-globs.js → policy/search-globs.js} +0 -0
  831. /package/dist/{ingress-contract.d.ts → protocol/ingress-contract.d.ts} +0 -0
  832. /package/dist/{ingress-protocol.d.ts → protocol/ingress-protocol.d.ts} +0 -0
  833. /package/dist/{ingress-protocol.js → protocol/ingress-protocol.js} +0 -0
  834. /package/dist/{listener-protocol.d.ts → protocol/listener-protocol.d.ts} +0 -0
  835. /package/dist/{peer-mcp-server.d.ts → protocol/peer-mcp-server.d.ts} +0 -0
  836. /package/dist/{peer-mcp-server.js → protocol/peer-mcp-server.js} +0 -0
  837. /package/dist/{request-id.d.ts → protocol/request-id.d.ts} +0 -0
  838. /package/dist/{request-id.js → protocol/request-id.js} +0 -0
  839. /package/dist/{routes.d.ts → protocol/routes.d.ts} +0 -0
  840. /package/dist/{routes.js → protocol/routes.js} +0 -0
  841. /package/dist/{sse.d.ts → protocol/sse.d.ts} +0 -0
  842. /package/dist/{sse.js → protocol/sse.js} +0 -0
  843. /package/dist/{terminal-protocol.js → protocol/terminal-protocol.js} +0 -0
  844. /package/dist/{webext-links.d.ts → protocol/webext-links.d.ts} +0 -0
  845. /package/dist/{webext-links.js → protocol/webext-links.js} +0 -0
  846. /package/dist/{arrival.d.ts → state/arrival.d.ts} +0 -0
  847. /package/dist/{contract-lock.d.ts → state/contract-lock.d.ts} +0 -0
  848. /package/dist/{history-state.d.ts → state/history-state.d.ts} +0 -0
  849. /package/dist/{runtime-state.d.ts → state/runtime-state.d.ts} +0 -0
  850. /package/dist/{runtime-state.js → state/runtime-state.js} +0 -0
  851. /package/dist/{starter.d.ts → state/starter.d.ts} +0 -0
  852. /package/dist/{starter.js → state/starter.js} +0 -0
  853. /package/dist/{state-portability.d.ts → state/state-portability.d.ts} +0 -0
  854. /package/dist/{state-portability.js → state/state-portability.js} +0 -0
  855. /package/dist/{versions.d.ts → state/versions.d.ts} +0 -0
  856. /package/dist/{versions.js → state/versions.js} +0 -0
  857. /package/dist/{embed.d.ts → text/embed.d.ts} +0 -0
  858. /package/dist/{embed.js → text/embed.js} +0 -0
  859. /package/dist/{mentions.d.ts → text/mentions.d.ts} +0 -0
  860. /package/dist/{mentions.js → text/mentions.js} +0 -0
  861. /package/dist/{path-refs.d.ts → text/path-refs.d.ts} +0 -0
  862. /package/dist/{path-refs.js → text/path-refs.js} +0 -0
  863. /package/dist/{shell-regions.js → text/shell-regions.js} +0 -0
  864. /package/dist/{title.d.ts → text/title.d.ts} +0 -0
  865. /package/dist/{title.js → text/title.js} +0 -0
  866. /package/src/{hostnames.test.ts → ids/hostnames.test.ts} +0 -0
  867. /package/src/{share-paths.test.ts → ids/share-paths.test.ts} +0 -0
  868. /package/src/{capability-env.ts → policy/capability-env.ts} +0 -0
  869. /package/src/{overlay-lint.test.ts → policy/overlay-lint.test.ts} +0 -0
  870. /package/src/{search-globs.test.ts → policy/search-globs.test.ts} +0 -0
  871. /package/src/{ingress-contract.test.ts → protocol/ingress-contract.test.ts} +0 -0
  872. /package/src/{peer-mcp-server.test.ts → protocol/peer-mcp-server.test.ts} +0 -0
  873. /package/src/{sse.ts → protocol/sse.ts} +0 -0
  874. /package/src/{versions.test.ts → state/versions.test.ts} +0 -0
  875. /package/src/{embed.test.ts → text/embed.test.ts} +0 -0
  876. /package/src/{mentions.test.ts → text/mentions.test.ts} +0 -0
  877. /package/src/{path-refs.test.ts → text/path-refs.test.ts} +0 -0
@@ -1,43 +1,28 @@
1
1
  import { z } from "zod";
2
- import { ModelRoleSchema } from "../model-roles.js";
3
- import { NATIVE_PROVIDERS } from "../provider-specs.js";
4
- import { AgentPlacementSchema } from "../runner-protocol.js";
2
+ import { CONVERSATION_ID } from "../ids/conversation-ids.js";
3
+ import { ModelRoleSchema } from "../models/model-roles.js";
4
+ import { NATIVE_PROVIDERS } from "../models/provider-specs.js";
5
+ import { AgentPlacementSchema } from "../protocol/runner-protocol.js";
5
6
  import { entryId } from "./internal.js";
6
- // The agent runtimes the daemon can serve, the vocabulary every surface that picks an agent shares (chat
7
- // turns, automations). The NATIVE providers have dedicated adapters (and their ids are reserved); an
8
- // `endpoint/<id>` value names an installed `endpoint`-kind capability (a model API the user pointed us at,
9
- // see EndpointConfigSchema); any other value is the id of an installed `agent`-kind capability served over
10
- // ACP (Agent Client Protocol).
11
- // Kept as a bare string on the wire (not an enum) so an unknown id is a clean error frame from the agent
12
- // route, the same bet RepoParamSchema makes, and adding an ACP agent needs no contract change.
13
- //
14
- // NATIVE_PROVIDERS itself is DERIVED from the one row-per-provider table (provider-specs.ts) and imported
15
- // here rather than written out again, so the wire vocabulary cannot name a provider the product does not
16
- // describe, or miss one it does.
7
+ // Agent runtimes the daemon can serve: native providers have dedicated adapters, `endpoint/<id>` names an installed
8
+ // endpoint capability, anything else is an ACP agent capability id. A bare string, not an enum, so an unknown id is a
9
+ // clean error, not a contract change.
17
10
  export const AgentProviderSchema = z.string().min(1);
18
11
  export type AgentProvider = z.infer<typeof AgentProviderSchema>;
19
- // The provider naming a catalog in the one route every native provider shares (providers.contract.ts). An ENUM
20
- // rather than the bare-string schema above, and deliberately so: the open vocabulary exists because an ACP agent
21
- // or an endpoint can be added without a contract change, but neither has a daemon-held catalog, this route's
22
- // subjects are exactly the ones the daemon keeps one for. Closing it here is what makes an unknown id a 400 from
23
- // the contract instead of a registry lookup that reads back `undefined` and serves an empty list.
12
+ // Provider naming a catalog in providers.contract.ts; an enum, not the open string above, since only native providers
13
+ // have a daemon-held catalog to look up. An unknown id is a 400 here, not an empty list.
24
14
  export const NativeProviderParamSchema = z.object({ provider: z.enum(NATIVE_PROVIDERS) });
25
- // The provider naming an account on the routes whose sign-in mints the vendor's own key (minted.contract.ts).
26
- // The harness (agentic loop) a turn runs on, orthogonal to the provider. See AgentTurnSchema.harness.
15
+ // The harness (agentic loop) a turn runs on, orthogonal to the provider.
27
16
  export const AgentHarnessSchema = z.enum(["native", "claude-code"]);
28
17
  export type AgentHarness = z.infer<typeof AgentHarnessSchema>;
29
- // One repository at one immutable commit. Workflow runs use this both as the checkout instruction for every
30
- // candidate and as the comparison base written into handoffs, so a multi-repo run has one provenance record
31
- // rather than a hard-coded branch name that only happens to work in the root repository.
18
+ // One repo at one immutable commit; used both as the checkout instruction and as handoffs' comparison base, so a
19
+ // multi-repo run has one provenance record instead of a hard-coded branch name.
32
20
  export const RepoBaseSchema = z.object({ repo: z.string(), base: z.string().min(1) });
33
21
  export type RepoBase = z.infer<typeof RepoBaseSchema>;
34
- // What the user is looking at in the editor, attached to a turn only when they explicitly opt in (the
35
- // composer chip, off by default). The daemon folds it into the prompt as a context note, so deictic
36
- // prompts ("fix this") resolve without an @-mention. Selection is bounded, it's context, not an upload.
22
+ // What the user has open in the editor, attached only when they opt in (composer chip, off by default); folded into the
23
+ // prompt so deictic prompts ("fix this") resolve.
37
24
  export const EditorContextSchema = z.object({
38
- // Workspace-relative path of the file open in the editor.
39
25
  file: z.string().min(1).describe("The file open in the editor, as a workspace path."),
40
- // 1-based line range of the selection; absent when the whole file is the context.
41
26
  startLine: z
42
27
  .number()
43
28
  .int()
@@ -45,7 +30,7 @@ export const EditorContextSchema = z.object({
45
30
  .optional()
46
31
  .describe("First line of the selection, counting from one. Leave both out when the whole file is the context."),
47
32
  endLine: z.number().int().min(1).optional().describe("Last line of the selection, counting from one."),
48
- // The selected text itself, truncated client-side to the cap.
33
+ // Truncated client-side to the cap before it's sent.
49
34
  selection: z
50
35
  .string()
51
36
  .max(20_000)
@@ -53,48 +38,33 @@ export const EditorContextSchema = z.object({
53
38
  .describe("The selected text itself. Cut it down before sending if it is long: this is context, not an upload."),
54
39
  });
55
40
  export type EditorContext = z.infer<typeof EditorContextSchema>;
56
- // The client-minted stable conversation identity. Constrained because isolated conversations also use it in
57
- // branch names (agent/<id>) and filesystem paths, the regex is the injection guard. Shared by turn + attach,
58
- // and by the workspace scope (WorkspaceScopeSchema), which names a conversation to read a file tree AS.
59
- export const ConversationIdSchema = z.string().regex(/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$/);
60
- // Where a conversation came from when nobody typed it into the browser: an automation wake carrying a message
61
- // from OUTSIDE the sandbox (a Discord mention, a web-chat visitor, a webhook). Such a wake runs as an ordinary
62
- // isolated conversation, registry entry, worktree, chat tab, land flow, and this is the only thing that
63
- // distinguishes it on the surface: the card's provenance line and the reason its first prompt is not the
64
- // user's. Set daemon-side by the dispatcher that received the message; the browser never sends one.
41
+ // Client-minted stable conversation id; the regex is an injection guard, since isolated conversations also use it in
42
+ // branch names and filesystem paths.
43
+ export const ConversationIdSchema = z.string().regex(CONVERSATION_ID);
44
+ // Where a conversation came from when nobody typed it into the browser: an automation wake carrying an outside message.
45
+ // Set daemon-side by the receiving dispatcher; the browser never sends one.
65
46
  export const AgentOriginSchema = z.object({
66
47
  // The automation whose configured prompt opened the conversation.
67
48
  automationId: z.string(),
68
- // The listener provider that received the message ("discord", "webchat", …) or "webhook" for an event
69
- // trigger. An open string for the same reason Trigger.provider is: sources are extension-declared.
49
+ // Listener provider that received the message, or "webhook" for an event trigger; open string, sources are
50
+ // extension-declared.
70
51
  provider: z.string(),
71
- // The external thread it arrived on, a Discord channel id, a widget conversation id. Absent for webhooks.
52
+ // External thread it arrived on (Discord channel id, widget conversation id); absent for webhooks.
72
53
  channelId: z.string().optional(),
73
54
  // Who sent it, as the source names them.
74
55
  author: z.string().optional(),
75
56
  });
76
57
  export type AgentOrigin = z.infer<typeof AgentOriginSchema>;
77
- /* The class of thing asking to START a session, the admission policy's key space. Derived daemon-side from
78
- * the automation's trigger (guard/actions.ts wakeSourceOf) or named by the door itself (the workflow release
79
- * gate); never sent by a client. Chat and loops are absent deliberately: both begin with the owner's own
80
- * click, and holding the owner's work in their own queue is a queue entry that says nothing (the same argument
81
- * fireAutomation's `cleared` makes about a by-hand fire). */
58
+ // The class of thing asking to start a session, the admission policy's key space; derived daemon-side, never sent by a
59
+ // client. Chat and loops are absent since both begin with the owner's own click.
82
60
  export const WakeSourceSchema = z.enum(["schedule", "event", "listener", "webchat", "issues", "workspace", "workflow"]);
83
61
  export type WakeSource = z.infer<typeof WakeSourceSchema>;
84
62
  // One admission verdict the owner can configure: let it run, hold it for approval, or refuse it outright.
85
63
  export const AdmissionRuleSchema = z.enum(["allow", "hold", "deny"]);
86
64
  export type AdmissionRule = z.infer<typeof AdmissionRuleSchema>;
87
- /* WHERE A COMMAND WOULD RUN, and it changes what half of these classes MEAN.
88
- *
89
- * The same string is two different acts depending on which machine reads it. `rm -rf /usr` inside this
90
- * container deletes files that come back with the image; on somebody's laptop it ends the laptop. A named
91
- * Docker volume here is a dev database the agent created three commands ago; there it is whatever they run.
92
- * `/work` and `/history` are this product's own trees and mean nothing on a device; `/Users` and `C:` are a
93
- * device's and never appear here.
94
- *
95
- * So the catalog is read with a locus (command-classes.ts CommandContext), and the classes below are the
96
- * answer to "what would this DO", asked of a stated place. Callers do not get to omit it: a default would be
97
- * one of these two answers applied silently to the other machine, which is the bug this type exists to end. */
65
+ // Where a command would run; the same string means different things on each machine (rm -rf /usr is recoverable here,
66
+ // fatal on a laptop). Read with a locus (command-classes.ts CommandContext); callers must state one rather than
67
+ // default.
98
68
  export const CommandLocusSchema = z.enum([
99
69
  // This sandbox's own shell: a disposable container, /work a git worktree, /history every other agent's.
100
70
  "sandbox",
@@ -102,42 +72,18 @@ export const CommandLocusSchema = z.enum([
102
72
  "device",
103
73
  ]);
104
74
  export type CommandLocus = z.infer<typeof CommandLocusSchema>;
105
- /* WHAT KIND OF THING A SHELL COMMAND IS, the command gate's key space, the second layer under the admission
106
- * floor above. The floor decides whether a session may START; these decide whether one PARTICULAR command
107
- * inside a running session may go ahead, which is the only question left once the agent is already working.
108
- *
109
- * Six, chosen for one property: everything in them is hard or impossible to take back SOMEWHERE, so a person
110
- * seeing it once beats an audit trail read afterwards. Everything else an agent runs, builds, tests, greps,
111
- * edits, is recoverable in a container that is itself disposable, and gating it would be friction bought with
112
- * nothing. "Somewhere" is the locus above: which class a command lands in is asked of a place. */
75
+ // What kind of thing a shell command is, the command gate's key space under the admission floor; gates one command
76
+ // inside an already-running session. Six classes, chosen because each is hard or impossible to undo somewhere.
113
77
  export const CommandClassSchema = z.enum([
114
78
  // Rewrites or discards committed work: force-push, hard reset, force-delete a branch, clean -f, filter-branch.
115
79
  "git.destructive",
116
80
  // Recursive-force deletion (`rm -rf`), and its spelling in a script (`fs.rm(p, { recursive: true })`).
117
81
  "files.destructive",
118
- /* State nothing brings back AT THIS LOCUS: a formatted or overwritten disk, and a recursive delete aimed
119
- * at a root rather than at something inside one. The class the daemon holds where the owner wrote no rule,
120
- * which is why it is separate from files.destructive rather than a shade of it: `rm -rf build` is ordinary
121
- * work in a disposable container and `rm -rf /` is the end of the machine.
122
- *
123
- * WHICH ROOTS COUNT IS THE LOCUS'S ANSWER, not a constant. In the sandbox it is `/` and `/history` — the
124
- * filesystem itself, and the one tree holding work this turn cannot recreate because it is other
125
- * conversations'. `/usr`, `/etc`, `/work` are NOT roots here: the container comes back from its image and
126
- * the worktree's delta is uncommitted changes, both of which cost an afternoon rather than everything. On a
127
- * device the full list applies, because nothing there is rebuilt from an image. */
82
+ // State nothing recovers at this locus; which roots count (/, /history in the sandbox) depends on the locus.
128
83
  "system.destructive",
129
- /* A CONTAINER VOLUME OR THE DATA IN IT: `docker volume rm`, `system prune`, `compose down -v`. Split out of
130
- * system.destructive because the two loci disagree about it more sharply than about anything else in this
131
- * enum. In the sandbox these reach the NESTED engine (the host's socket is never mounted, see
132
- * capabilities/handlers/docker.ts), so the blast radius is dev databases the agent has been working
133
- * against, and tearing down a smoke-test stack is ordinary work. Sent to somebody's own computer it is
134
- * whatever they run on it, and their policy says never. */
84
+ // A container volume or its data; the sandbox's blast radius (nested engine) differs sharply from a device's.
135
85
  "container.state",
136
- /* READS credential material: a `{{secret:NAME}}` reference (which becomes the value on the way into the
137
- * process), or a file that actually holds one — a dotenv, a private key, ~/.aws/credentials, an npmrc.
138
- * "Actually" is load-bearing and is checked rather than assumed where the caller can open the file: an
139
- * npmrc with no token in it, a dotenv of ports, a public key, a path that is not there, are none of them
140
- * this class, however much they look like it from the command line. See command-classes.ts. */
86
+ // Reads credential material: a secret reference, or a file confirmed to actually hold one.
141
87
  "secrets.access",
142
88
  // Publishes outward and irreversibly: npm/pnpm/yarn/cargo publish, gh release create, docker push.
143
89
  "package.publish",
@@ -145,112 +91,80 @@ export const CommandClassSchema = z.enum([
145
91
  "network.outbound",
146
92
  ]);
147
93
  export type CommandClass = z.infer<typeof CommandClassSchema>;
148
- /* THE ADMISSION FLOOR, the workspace-wide rule per wake source, consulted by the session.start guard on every
149
- * outside-driven wake. Per-automation `requireApproval` / `holdForSeconds` remain the per-object override; the
150
- * floor composes with them most-restrictive-wins, so "hold every webchat session" needs no edit to each
151
- * automation. `workflow` is allow|deny only: the release gate answers a CI runner holding a connection with a
152
- * deadline, so a hold there is indistinguishable from a timeout, deny is the honest refusal. */
94
+ // Workspace-wide admission floor per wake source, consulted on every outside-driven wake; composes with per-automation
95
+ // overrides most-restrictive-wins. `workflow` is allow|deny only, since a hold there is indistinguishable from a CI
96
+ // runner's timeout.
153
97
  export const AdmissionPolicySchema = z.object({
154
98
  schedule: AdmissionRuleSchema.default("allow"),
155
99
  event: AdmissionRuleSchema.default("allow"),
156
100
  listener: AdmissionRuleSchema.default("allow"),
157
101
  webchat: AdmissionRuleSchema.default("allow"),
158
- /* THE ONE SOURCE THAT HOLDS BY DEFAULT, and the exception is argued rather than assumed. A Front Desk wake
159
- * runs the read-only Front Desk persona: a stranger drives the prompt and the toolbox is a shelf of two.
160
- * A bug-report wake is the opposite on both counts, it is pointed at the repository with the powers to
161
- * change it, and the brief is a stack trace and a sentence somebody else's browser wrote.
162
- *
163
- * Held is not blocked: the wake sits in the same approvals queue every other hold uses, with the issue's
164
- * own title on the card, and one click runs it. An owner who wants their crashes fixed while they sleep
165
- * sets this to `allow` deliberately, which is the direction that decision should have to be made in. */
102
+ // Defaults to hold, unlike the others: a bug-report wake has full repo powers and a stranger's stack trace as its
103
+ // brief.
166
104
  issues: AdmissionRuleSchema.default("hold"),
167
105
  workspace: AdmissionRuleSchema.default("allow"),
168
106
  workflow: z.enum(["allow", "deny"]).default("allow"),
169
107
  });
170
108
  export type AdmissionPolicy = z.infer<typeof AdmissionPolicySchema>;
171
- // How tool calls are gated, the Claude Agent SDK's PermissionMode, narrowed to the four the composer offers
172
- // (the SDK also has 'dontAsk'/'auto', which have no UI here). The user picks one per turn AND the agent can
173
- // move itself between them mid-turn, so this is both a turn input and the payload of the `mode` frame.
109
+ // How tool calls are gated, the Claude Agent SDK's PermissionMode narrowed to the four the composer offers. Both a turn
110
+ // input and the payload of the `mode` frame, since the agent can move itself between them mid-turn.
174
111
  export const PermissionModeSchema = z.enum(["default", "acceptEdits", "plan", "bypassPermissions"]);
175
112
  export type PermissionMode = z.infer<typeof PermissionModeSchema>;
176
- /* WHERE A CONVERSATION WAS CUT FROM, the durable half of a fork, carried on the registry entry so both ends
177
- * can find each other. `index` is the message the cut sat above in the SOURCE, which is what lets the source's
178
- * transcript put the mark back in the right gap. */
113
+ // Where a conversation was cut from, the durable half of a fork, carried on the registry entry. `index` is the message
114
+ // the cut sat above in the source, so its transcript can put the mark back.
179
115
  export const ForkedFromSchema = z.object({
180
116
  conversationId: ConversationIdSchema,
181
117
  index: z.number().int().nonnegative(),
182
- // Which files this fork opened on, the half of the choice that used to be silent, kept so the fork can
183
- // still say it tomorrow rather than only in the seconds after the click.
118
+ // Which files this fork opened on; kept so the fork can still say it later, not only right after the click.
184
119
  files: z.enum(["then", "now"]),
185
120
  });
186
121
  export type ForkedFrom = z.infer<typeof ForkedFromSchema>;
187
122
  export const AgentTurnSchema = z
188
123
  .object({
189
124
  prompt: z.string().describe("What to say to the agent. May be empty if you are only attaching files."),
190
- // The client's display title for the conversation, seeds a FRESH registry entry (so a renamed draft's
191
- // first turn keeps its user-chosen title); an existing entry's title always wins.
125
+ // Seeds a fresh registry entry's title; an existing entry's title always wins over this.
192
126
  title: z
193
127
  .string()
194
128
  .max(80)
195
129
  .optional()
196
130
  .describe("A title for a conversation this turn is opening. Ignored for a conversation that already has one."),
197
- // Workspace-relative paths of files the user attached, already uploaded via /workspace/upload
198
- // (the browser puts them under .intentic/records/artifacts/attachments/<uuid>/<name>). The daemon hands them to the
199
- // provider: Claude reads them from disk via its Read tool; Codex gets images as native inputs.
131
+ // Already uploaded via /workspace/upload; Claude reads them via Read, Codex gets images as native input.
200
132
  attachments: z
201
133
  .array(z.string().min(1))
202
134
  .max(20)
203
135
  .optional()
204
136
  .describe("Files to hand the agent along with the prompt, as workspace paths. Upload them first."),
205
- // Which provider (model + account) serves the turn; absent = claude. A sessionId only resumes on the
206
- // provider that minted it (Claude Code sessions vs Codex threads vs Grok/OpenCode sessions are separate
207
- // stores), a mid-conversation provider/account/harness switch sends `history` instead of resuming.
137
+ // Which provider serves the turn, absent = claude; a sessionId resumes only on the provider that minted it.
208
138
  agent: AgentProviderSchema.optional().describe("Which model provider serves this turn. Leave it out for Claude."),
209
- // Which harness (agentic loop) runs the turn, orthogonal to the provider above. Absent = "native": each
210
- // provider on its own runtime (Claude Code SDK / Codex CLI / opencode) with its subscription OAuth.
211
- // "claude-code" forces the Claude Code Agent SDK loop for ANY provider, codex/grok then drive their model
212
- // through the sandbox's bundled Anthropic↔OpenAI translator, which needs that provider's API key (its
213
- // subscription OAuth can't reach a gateway). For the claude provider the two are identical.
139
+ // Which agentic loop runs the turn, absent = provider's own; "claude-code" forces the SDK loop for any
140
+ // provider.
214
141
  harness: AgentHarnessSchema.optional().describe("Which agentic loop runs the turn. Leave it out to use each provider's own."),
215
142
  // Which connected account of that provider serves the turn; absent = the provider's first account.
216
143
  account: z.string().optional().describe("Which of that provider's connected accounts pays for the turn. Leave it out for the first one."),
217
- /* WHICH PERSONA THE TURN SHOWS THE OUTSIDE WORLD, a PersonaSchema id, deliberately NOT the `account`
218
- * directly above it. The two words are one letter apart in meaning and a world apart in consequence:
219
- * `account` is which subscription PAYS for the turn, `actsAs` is whose name is on what the turn posts.
220
- * Naming both "account" is how someone eventually pins a nightly job to the right billing and the wrong
221
- * Reddit.
222
- *
223
- * Absent means opposite things either side of the "is anyone watching" line, which is the owner's chosen
224
- * posture and the reason this is resolved in one place (turnPersona): an ordinary chat with no persona
225
- * keeps every connected account, because a person is there to catch a mistake; an `unattended` turn with
226
- * no persona gets NONE, because at 3am the prompt's wording is the only thing left and that is not
227
- * enough to bet an unrepeatable post on. */
144
+ // Distinct from `account` (who pays): whose name the turn posts as; absent means something different for each
145
+ // mode.
228
146
  actsAs: entryId.optional().describe("Which persona the turn speaks as out in the world. Not the same as which account pays for it."),
229
147
  sessionId: z.string().optional().describe("Resume this provider session instead of starting a fresh one."),
230
- // The client-minted stable conversation identity (survives provider/account/harness switches, which
231
- // retire sessions). Keys the fleet registry entry and turn run, plus the worktree when isolated.
148
+ // Stable id surviving provider/account/harness switches; keys the registry entry, the turn run, and the
149
+ // worktree when isolated.
232
150
  conversationId: ConversationIdSchema.optional().describe(
233
151
  "The conversation this turn belongs to. You choose it, it survives model switches, and it is how you address the conversation later. Naming one that does not exist opens it.",
234
152
  ),
235
- // When true, the turn runs in the conversation's isolated git worktree (created lazily on first use)
236
- // instead of the shared /work tree, the parallel-agents mode. Requires conversationId.
153
+ // Runs in the conversation's own git worktree (created lazily) instead of shared /work; requires
154
+ // conversationId.
237
155
  isolated: z
238
156
  .boolean()
239
157
  .optional()
240
158
  .describe(
241
159
  "Work in this conversation's own private copy of the repos rather than the shared tree, so several agents can work at once. Needs a conversation id.",
242
160
  ),
243
- /* WHERE the conversation executes, decided like `isolated` directly above: the request's choice on the
244
- * first turn, the registry entry's on every turn after. `runner` implies isolation (the branch is what
245
- * moves between machines) and needs a conversation id for the same reason `isolated` does. Absent =
246
- * local. Design: docs/remote-runners-plan.md; refused until runners ship. */
161
+ // Decided like `isolated`: the request's choice on the first turn, the registry's after. `runner` implies
162
+ // isolation; absent means local.
247
163
  placement: AgentPlacementSchema.optional().describe(
248
164
  "Where this conversation runs: this sandbox (leave it out), or a paired runner by id. Decided on the first turn; later turns follow the conversation.",
249
165
  ),
250
- /* Pin a NEW isolated conversation's worktree composition to these repository commits. Daemon-owned:
251
- * ordinary chats omit it and keep rebasing onto the current workspace; a workflow supplies the one
252
- * snapshot all of its candidates must share. Repeated iterations carry it too, which suppresses the
253
- * ordinary pre-turn rebase for the lifetime of that workflow step. */
166
+ // Pins a new isolated conversation's worktree to these commits; a workflow step's candidates share one snapshot
167
+ // and skip the ordinary rebase.
254
168
  worktreeBase: z
255
169
  .array(RepoBaseSchema)
256
170
  .min(1)
@@ -259,55 +173,27 @@ export const AgentTurnSchema = z
259
173
  .describe(
260
174
  "Pin a new private copy to these exact commits instead of today's workspace. Used when several agents must start from identical files.",
261
175
  ),
262
- // Override landing for this turn only. Workflow steps set false so candidate branches cannot leak into
263
- // the workspace before the synthesis step has compared them; ordinary turns inherit agent/workspace
264
- // posture exactly as before.
176
+ // Overrides landing for this turn only; a workflow step sets false so candidates can't leak in before synthesis
177
+ // compares them.
265
178
  autoLand: z
266
179
  .boolean()
267
180
  .optional()
268
181
  .describe(
269
182
  "Whether this turn's work merges into the workspace when it finishes. Overrides the conversation's own setting for this turn only.",
270
183
  ),
271
- /* WHAT STARTED THIS TURN, when it was not a person at a composer, and therefore which of the owner's
272
- * model lists answers for it (settings.modelRoles, model-roles.ts declares the roles).
273
- *
274
- * IT NAMES THE JOB, NOT THE TIER. Before this field there was one list for every unattended turn, so a
275
- * production incident and a documentation sweep were configured together, and a surface added tomorrow
276
- * inherited that tier by saying nothing. Now a starter says what it IS, and the owner gets to answer
277
- * per job: cheap for the sweep, frontier for the incident.
278
- *
279
- * ONLY FILLS A SILENCE. The daemon applies the role's list to a turn that named no model AND no
280
- * provider (turn-resume.ts): a caret pick, an acceptance run's own choice, a workflow step pinned to a
281
- * provider — all of those already answered the question, and this must not overrule them.
282
- *
283
- * A `run` role, always. The `helper` roles never reach here: a one-shot is not a turn, it has no
284
- * conversation and no worktree, and it asks its own role directly at the seam that spends it. */
184
+ // Which per-job model list answers when nobody named a model or provider (turn-resume.ts); names the job, not a
185
+ // tier, and never overrides an explicit pick.
285
186
  runRole: ModelRoleSchema.optional().describe(
286
187
  "What started this turn, when it was not a person typing: which of the sandbox's per-job model lists answers for it. Only used when the turn names no model of its own.",
287
188
  ),
288
- // Set ONLY by the daemon's own automation dispatchers: this turn opens a conversation on behalf of an
289
- // outside message rather than a user. Recorded on the registry entry so the fleet can say where the
290
- // agent came from. Requires conversationId, there is nothing to record it on otherwise.
189
+ // Set only by the daemon's own dispatchers, never a client; requires conversationId to record it on.
291
190
  origin: AgentOriginSchema.optional().describe(
292
191
  "Set by the sandbox alone: this turn opened a conversation on behalf of a message from outside rather than a person.",
293
192
  ),
294
- // No `history` field: a turn that switched provider/account/harness carries no transcript up the wire.
295
- // The daemon seeds the replacement session from its OWN record of the conversation, which is keyed by
296
- // conversationId and outlives every session (sessions/turn-transcript.ts → handoffHistory).
297
- /* WHERE A FORK WAS CUT FROM, on its first turn, the one case the daemon cannot work out for itself,
298
- * because a fork is a NEW conversation whose record is empty and the cut is a gesture only the client
299
- * saw. `keep` counts the source's RECORD rows to copy, not its bubbles (see the web transcript's
300
- * recordedRows). The daemon copies that prefix into the new conversation's record before the turn runs,
301
- * after which a fork is an ordinary conversation: it seeds like any other and reads back in full.
302
- * Requires conversationId, the fork it describes IS that conversation.
303
- *
304
- * `files` is the half the user actually chooses between, and the half that used to be silent. "now"
305
- * inherits the workspace as it stands (the fork is a fresh line of conversation over today's files);
306
- * "then" puts the fork on the files as they were AT THE CUT, which it can only do in a checkout of its
307
- * own, so it implies `isolated`, and the daemon resolves the cut's per-repo commits from the source's
308
- * own turn anchors rather than trusting the client with shas. A "then" fork of a conversation that has
309
- * no anchor at that index falls back to "now" and says so on the turn, because silently starting from
310
- * the wrong files is the failure this whole field exists to prevent. */
193
+ // No `history` field: a provider/account/harness switch carries no transcript over the wire; the daemon seeds
194
+ // the new session from its own conversationId-keyed record.
195
+ // Where a fork was cut from, on its first turn only; requires conversationId, and files:"then" implies
196
+ // isolated.
311
197
  forkOf: z
312
198
  .object({
313
199
  conversationId: ConversationIdSchema.describe("The conversation this one was cut from."),
@@ -322,33 +208,15 @@ export const AgentTurnSchema = z
322
208
  .describe("Where this conversation was cut from, on its first turn only. Only the client knows this, so only the client can say it."),
323
209
  // The browser sends the chosen model per turn; the provider token is the sandbox's own stored credential.
324
210
  model: z.string().optional().describe("Which model to use. Leave it out for the provider's default."),
325
- /* NOBODY PICKED A MODEL FOR THIS TURN, a surface started it (Fix with agent, a Maintenance chore, a
326
- * Documentation or Acceptance run, the fix a failed pre-push check proposes) rather than a person at a
327
- * composer. That is the whole distinction the flag carries, and it is why it cannot be inferred: a chat
328
- * turn ALSO arrives with no `model` whenever the live catalog hasn't loaded yet, and the two want
329
- * opposite defaults, the chat wants the provider's own catalog default, an unattended run wants the
330
- * tier its owner chose for work that spends money while they are not watching.
331
- *
332
- * The daemon fills `agent`/`model` and the pinned entry's own knobs from the turn's own role list for any turn that says
333
- * this and names none of them (startConversationTurn), walking that list until one can actually be
334
- * started. Naming one still wins: every surface-started run now carries a caret that overrides the list
335
- * for that run alone, and Acceptance picks per run because it fans a session out per story. Either way
336
- * the pick is the user's, made a second ago. */
211
+ // True when a surface started the turn, not a person; the sandbox then fills the model from the owner's role
212
+ // list for unwatched work.
337
213
  unattended: z
338
214
  .boolean()
339
215
  .optional()
340
216
  .describe(
341
217
  "Nobody chose a model for this turn because a screen started it rather than a person. The sandbox then fills in the model its owner picked for unwatched work.",
342
218
  ),
343
- /* OUTSIDE CONTENT CAUSED THIS TURN, and what to call the source, "discord", "webchat", whichever
344
- * listener provider carried the message. Set by the dispatchers that wake an agent on somebody else's
345
- * words; absent for a turn the owner started, a schedule, or a workspace event.
346
- *
347
- * It is the birth half of the turn's taint (guard/turn-taint.ts). The other half marks itself as the
348
- * turn works, a fetched page, a foreign MCP server's answer, and together they are what the command
349
- * gate reads before letting a command read credential material unasked. Distinct from `unattended`,
350
- * which is about whether anyone is WATCHING: a Front Desk wake is both, an owner asking the agent to read
351
- * a web page is neither, and each flag governs a different decision. */
219
+ // Outside content caused this turn, naming the source; distinct from `unattended` (whether anyone is watching).
352
220
  outsideWake: z
353
221
  .string()
354
222
  .min(1)
@@ -356,18 +224,17 @@ export const AgentTurnSchema = z
356
224
  .describe(
357
225
  "Content from outside caused this turn, and what to call the source. It is what makes the sandbox treat the turn as carrying somebody else's words.",
358
226
  ),
359
- // How tool calls are gated for this turn (the SDK's permissionMode, verbatim). 'plan' runs the
360
- // propose → approve → execute flow; 'default' prompts per tool on the permission side channel;
361
- // 'acceptEdits' auto-accepts file edits; 'bypassPermissions' runs everything. The agent can move
362
- // itself between modes mid-turn (EnterPlanMode/ExitPlanMode), which rides back as a `mode` frame.
227
+ // How tool calls are gated for this turn (the SDK's permissionMode, verbatim):
228
+ // plan: propose → approve → execute
229
+ // default: prompts per tool on the permission side channel
230
+ // acceptEdits: auto-accepts file edits
231
+ // bypassPermissions: runs everything
232
+ // The agent can move itself between modes mid-turn, riding back as a `mode` frame.
363
233
  permissionMode: PermissionModeSchema.optional().describe(
364
234
  "How tool calls are gated: ask each time, accept file edits, propose a plan first, or run everything. The agent can move itself between these mid-turn.",
365
235
  ),
366
- /* Narrows the turn to these tool names (the SDK option of the same name, not to be confused with the
367
- * daemon's MCP `tools`, which are servers). Absent ⇒ every tool the runtime has, which is what an
368
- * owner-driven chat wants. Set by the automation dispatchers from Automation.allowedTools: a wake driven
369
- * by an OUTSIDE message runs bypassPermissions like any other automation turn, so for a public Front Desk
370
- * this list is the actual boundary, prompt wording is advice, an empty toolbox is not. */
236
+ // Narrows the turn to these tool names (the SDK option, not the daemon's MCP `tools`/servers); absent means
237
+ // everything the runtime has.
371
238
  allowedTools: z
372
239
  .array(z.string().min(1))
373
240
  .optional()
@@ -376,25 +243,16 @@ export const AgentTurnSchema = z
376
243
  ),
377
244
  effort: z.string().optional().describe("How hard the model should think, where the provider offers a choice."),
378
245
  thinking: z.boolean().optional().describe("Whether to show the model's reasoning as it works."),
379
- /* Ask the harness to serve this turn at fast speed, the same tokens at a higher rate, for a higher
380
- * per-token price. A REQUEST, never a promise: the harness answers it against the plan, the model and
381
- * the endpoint, and reports what it actually did on the `fast_mode` frame. Absent/false ⇒ standard
382
- * speed, which is also what a runtime that doesn't declare the capability gets (turn-plan drops it).
383
- *
384
- * Not a sandbox setting, for the same reason effort isn't: it changes what a turn COSTS, so it belongs
385
- * to the turn that spends it rather than to the workspace it ran in. */
246
+ // Requests the harness serve this turn faster at a higher price; a request, not a promise, the `fast_mode`
247
+ // frame reports what happened.
386
248
  fast: z
387
249
  .boolean()
388
250
  .optional()
389
251
  .describe(
390
252
  "Ask for the same work at a higher rate for a higher price. A request rather than a promise: the answer says what actually happened.",
391
253
  ),
392
- /* KEEP THIS TURN ON THE MODEL I PICKED: the user's veto over automatic tier selection, riding the turn
393
- * like `fast` does because it changes what the turn costs and so belongs to the turn rather than to the
394
- * workspace. The judge still runs and the verdict is still recorded — a deny is the strongest label the
395
- * calibration ledger ever gets (UsageTurn.tierDenied) — but nothing is substituted. The composer sends
396
- * its conversation-level toggle here every turn, and the registry persists it beside `fast`, so the
397
- * choice survives reopening the tab. Absent ⇒ no opinion, routing follows settings.autoTier. */
254
+ // Vetoes automatic tier selection for this turn; the judge still runs and records its verdict, but nothing is
255
+ // substituted.
398
256
  tierHold: z
399
257
  .boolean()
400
258
  .optional()
@@ -422,8 +280,7 @@ export const AgentTurnSchema = z
422
280
  .refine((turn) => turn.forkOf === undefined || turn.conversationId !== undefined, {
423
281
  message: "forkOf requires conversationId",
424
282
  })
425
- // A fork that wants the files as they were needs a checkout of its own to put them in, the shared tree is
426
- // everyone else's too, and rolling it back under them is what `files: "then"` must never mean.
283
+ // "then" needs a checkout of its own; rolling back the shared tree under everyone else is what it must never mean.
427
284
  .refine((turn) => turn.forkOf?.files !== "then" || turn.isolated === true, {
428
285
  message: 'forkOf.files "then" requires isolated',
429
286
  });
@@ -440,12 +297,18 @@ export type AgentTurn = z.infer<typeof AgentTurnSchema>;
440
297
  * would send a Codex model id to Claude. Routes that accept this pass it through verbatim; a model this build
441
298
  * has never heard of is a supported pick, since the picker offers a custom-id escape hatch.
442
299
  *
443
- * AND THE TIER IT RUNS AT, because naming a model is only half of what the standing setting says. A pinned
444
- * entry carries its own effort (ModelPinSchema), and the daemon applies the pin's knobs ONLY to a turn that
445
- * named no model (turn-resume.ts): so a caret that could re-point the model but not the tier moved every
446
- * override onto the provider's own default effort, and the one moment somebody reaches for the caret is the
447
- * failure that just beat the standing order. Optional, and absent means absent, the turn goes out without an
448
- * effort and the model's own answers. */
300
+ * AND EVERYTHING ELSE THE PANEL CAN SET, which is the half this schema used to drop on the floor. A pinned entry
301
+ * carries its own account, harness, effort, thinking and speed (ModelPinSchema), the daemon applies a pin's
302
+ * knobs ONLY to a turn that named no model (turn-resume.ts), and the picker the caret opens offers every one of
303
+ * them — so a pick that carried the pair alone moved each override onto the provider's own defaults for the
304
+ * rest. That is worst exactly where the caret gets reached for: the one moment somebody opens it is the failure
305
+ * that just beat the standing order, and a run re-pointed at a frontier model but not at the tier, the loop or
306
+ * the account that model was pinned under is not the run they configured.
307
+ *
308
+ * The fields are AgentTurn's own (it carries all five already), so a route that accepts this spreads it onto
309
+ * the turn verbatim. Every one is optional and absent means absent: the turn goes out without the field and the
310
+ * model's own default answers. `thinking: false` is therefore a different statement from no thinking at all,
311
+ * which is the distinction Claude's own refusal of `max` beside disabled thinking turns on. */
449
312
  export const AgentRunPickSchema = z
450
313
  .object({
451
314
  agent: z.string().min(1).describe("Which provider."),
@@ -453,13 +316,44 @@ export const AgentRunPickSchema = z
453
316
  .string()
454
317
  .min(1)
455
318
  .describe("Which of its models. Both or neither, because a model name only means anything to the provider that serves it."),
319
+ account: z
320
+ .string()
321
+ .optional()
322
+ .describe("Which connected account of that provider pays, by its daemon-minted id. Leave it out for whichever has headroom."),
323
+ harness: AgentHarnessSchema.optional().describe("Which agentic loop runs it. Leave it out to use the provider's own."),
456
324
  effort: z
457
325
  .string()
458
326
  .optional()
459
327
  .describe("How hard that model should think, where it offers a choice. Leave it out to take the model's own default."),
328
+ thinking: z.boolean().optional().describe("Whether this model reasons before it answers, where that is a choice it offers."),
329
+ fast: z.boolean().optional().describe("Ask for this model's work at a higher rate for a higher price. A request rather than a promise."),
460
330
  })
461
331
  .optional();
462
332
  export type AgentRunPick = z.infer<typeof AgentRunPickSchema>;
333
+ /* THE PICK A RUN BUTTON HOLDS, AS THE WIRE SPELLS IT. The picker answers in the shell's own vocabulary
334
+ * (`provider`, the kit's AgentRunChoice) and a turn calls the same field `agent`, so every surface that starts
335
+ * an agent had this translation written out by hand — seven of them, each re-deciding which fields to carry,
336
+ * which is exactly how the tier came to travel from four of them and the account from none.
337
+ *
338
+ * ABSENT STAYS ABSENT, field by field: `undefined` means the turn goes out without it and the model's own
339
+ * default answers, which is not the same as any value this could invent. */
340
+ export const runPickOf = (choice: {
341
+ readonly provider: string;
342
+ readonly model: string;
343
+ readonly account?: string | undefined;
344
+ readonly harness?: string | undefined;
345
+ readonly effort?: string | undefined;
346
+ readonly thinking?: boolean | undefined;
347
+ readonly fast?: boolean | undefined;
348
+ }): NonNullable<AgentRunPick> => ({
349
+ agent: choice.provider,
350
+ model: choice.model,
351
+ ...(choice.account === undefined ? {} : { account: choice.account }),
352
+ ...(choice.harness === undefined ? {} : { harness: choice.harness as AgentHarness }),
353
+ ...(choice.effort === undefined ? {} : { effort: choice.effort }),
354
+ ...(choice.thinking === undefined ? {} : { thinking: choice.thinking }),
355
+ ...(choice.fast === undefined ? {} : { fast: choice.fast }),
356
+ });
463
357
  /* ONE ENTRY OF ONE ROLE'S MODEL LIST (settings.modelRoles): the standing version of the pick above, and not
464
358
  * merely which model but HOW it is to be run.
465
359
  *
@@ -500,16 +394,14 @@ export const ModelPinSchema = z.object({
500
394
  harness: AgentHarnessSchema.optional().describe("Which agentic loop runs it. Leave it out to use the provider's own."),
501
395
  });
502
396
  export type ModelPin = z.infer<typeof ModelPinSchema>;
503
- // POST /agent's ack: the daemon-minted id of the detached turn run it started. The turn executes daemon-side
504
- // regardless of any client connection; every window, the initiator included, renders it via /agent/attach.
397
+ // POST /agent's ack: the daemon-minted id of the detached run it started. The turn runs daemon-side regardless of any
398
+ // client connection; every window renders it via /agent/attach.
505
399
  export const StartedTurnSchema = z.object({
506
400
  run: z.string().describe("The id of the run that just started. Hand it back when you attach, so the stream resumes rather than replaying."),
507
401
  });
508
402
  export type StartedTurn = z.infer<typeof StartedTurnSchema>;
509
- // Attach to a conversation's turn run (live, or finished within the retention window). The head carries the
510
- // run's rows whole, so there is no cursor to resume from: a client that reconnects takes the rows again and
511
- // applies what follows. `run` names the run the client was watching, so the head's own id tells it whether a
512
- // newer turn has started meanwhile.
403
+ // Attaches to a conversation's run (live, or finished within retention); no cursor to resume from, the head carries all
404
+ // rows. `run` names what the client was watching, so a newer run's head id tells it to catch up.
513
405
  export const AttachTurnSchema = z.object({
514
406
  conversationId: ConversationIdSchema.describe("Which conversation to watch."),
515
407
  run: z