@intentic/sandbox-contract 1.247.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 (883) 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 +13 -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 +39 -4
  69. package/dist/contracts/personas.contract.d.ts.map +1 -1
  70. package/dist/contracts/personas.contract.js +10 -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 +6 -80
  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 +10 -10
  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 +464 -447
  146. package/dist/index.d.ts.map +1 -1
  147. package/dist/index.js +54 -47
  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} +2 -4
  160. package/dist/models/model-pins.d.ts.map +1 -0
  161. package/dist/models/model-pins.js +22 -0
  162. package/dist/models/model-pins.js.map +1 -0
  163. package/dist/{model-roles.d.ts → models/model-roles.d.ts} +25 -30
  164. package/dist/models/model-roles.d.ts.map +1 -0
  165. package/dist/{model-roles.js → models/model-roles.js} +30 -27
  166. package/dist/models/model-roles.js.map +1 -0
  167. package/dist/{plan-pools.d.ts → models/plan-pools.d.ts} +1 -1
  168. package/dist/models/plan-pools.d.ts.map +1 -0
  169. package/dist/models/plan-pools.js.map +1 -0
  170. package/dist/models/prompt-complexity.d.ts.map +1 -0
  171. package/dist/models/prompt-complexity.js.map +1 -0
  172. package/dist/models/provider-specs.d.ts.map +1 -0
  173. package/dist/models/provider-specs.js.map +1 -0
  174. package/dist/policy/approvals-execution.d.ts.map +1 -0
  175. package/dist/policy/approvals-execution.js.map +1 -0
  176. package/dist/{batch-runs.d.ts → policy/batch-runs.d.ts} +5 -1
  177. package/dist/policy/batch-runs.d.ts.map +1 -0
  178. package/dist/{batch-runs.js → policy/batch-runs.js} +10 -7
  179. package/dist/policy/batch-runs.js.map +1 -0
  180. package/dist/policy/capability-env.d.ts.map +1 -0
  181. package/dist/policy/capability-env.js.map +1 -0
  182. package/dist/policy/capability-secrets.d.ts.map +1 -0
  183. package/dist/policy/capability-secrets.js.map +1 -0
  184. package/dist/{card-status.d.ts → policy/card-status.d.ts} +2 -2
  185. package/dist/policy/card-status.d.ts.map +1 -0
  186. package/dist/{card-status.js → policy/card-status.js} +1 -5
  187. package/dist/policy/card-status.js.map +1 -0
  188. package/dist/{command-classes.d.ts → policy/command-classes.d.ts} +6 -2
  189. package/dist/policy/command-classes.d.ts.map +1 -0
  190. package/dist/{command-classes.js → policy/command-classes.js} +48 -11
  191. package/dist/policy/command-classes.js.map +1 -0
  192. package/dist/{command-run.d.ts → policy/command-run.d.ts} +1 -1
  193. package/dist/policy/command-run.d.ts.map +1 -0
  194. package/dist/policy/command-run.js.map +1 -0
  195. package/dist/policy/control-scopes.d.ts +16 -0
  196. package/dist/policy/control-scopes.d.ts.map +1 -0
  197. package/dist/policy/control-scopes.js +26 -0
  198. package/dist/policy/control-scopes.js.map +1 -0
  199. package/dist/policy/credential-material.d.ts.map +1 -0
  200. package/dist/policy/credential-material.js.map +1 -0
  201. package/dist/policy/needs-action.d.ts.map +1 -0
  202. package/dist/policy/needs-action.js.map +1 -0
  203. package/dist/policy/output-fields.d.ts.map +1 -0
  204. package/dist/policy/output-fields.js.map +1 -0
  205. package/dist/policy/overlay-lint.d.ts.map +1 -0
  206. package/dist/policy/overlay-lint.js.map +1 -0
  207. package/dist/policy/owner-ticket.d.ts.map +1 -0
  208. package/dist/{owner-ticket.js → policy/owner-ticket.js} +1 -1
  209. package/dist/policy/owner-ticket.js.map +1 -0
  210. package/dist/{safety-policy.d.ts → policy/safety-policy.d.ts} +6 -5
  211. package/dist/policy/safety-policy.d.ts.map +1 -0
  212. package/dist/{safety-policy.js → policy/safety-policy.js} +12 -12
  213. package/dist/policy/safety-policy.js.map +1 -0
  214. package/dist/policy/search-globs.d.ts.map +1 -0
  215. package/dist/policy/search-globs.js.map +1 -0
  216. package/dist/protocol/container-requirements.d.ts +20 -0
  217. package/dist/protocol/container-requirements.d.ts.map +1 -0
  218. package/dist/protocol/container-requirements.js +23 -0
  219. package/dist/protocol/container-requirements.js.map +1 -0
  220. package/dist/{host-protocol.d.ts → protocol/host-protocol.d.ts} +1 -0
  221. package/dist/protocol/host-protocol.d.ts.map +1 -0
  222. package/dist/{host-protocol.js → protocol/host-protocol.js} +1 -0
  223. package/dist/protocol/host-protocol.js.map +1 -0
  224. package/dist/protocol/ingress-contract.d.ts.map +1 -0
  225. package/dist/{ingress-contract.js → protocol/ingress-contract.js} +1 -1
  226. package/dist/protocol/ingress-contract.js.map +1 -0
  227. package/dist/protocol/ingress-protocol.d.ts.map +1 -0
  228. package/dist/protocol/ingress-protocol.js.map +1 -0
  229. package/dist/protocol/listener-protocol.d.ts.map +1 -0
  230. package/dist/{listener-protocol.js → protocol/listener-protocol.js} +1 -1
  231. package/dist/protocol/listener-protocol.js.map +1 -0
  232. package/dist/{peer-dial.d.ts → protocol/peer-dial.d.ts} +4 -1
  233. package/dist/protocol/peer-dial.d.ts.map +1 -0
  234. package/dist/{peer-dial.js → protocol/peer-dial.js} +51 -10
  235. package/dist/protocol/peer-dial.js.map +1 -0
  236. package/dist/protocol/peer-mcp-server.d.ts.map +1 -0
  237. package/dist/protocol/peer-mcp-server.js.map +1 -0
  238. package/dist/protocol/request-id.d.ts.map +1 -0
  239. package/dist/protocol/request-id.js.map +1 -0
  240. package/dist/protocol/routes.d.ts.map +1 -0
  241. package/dist/protocol/routes.js.map +1 -0
  242. package/dist/{runner-protocol.d.ts → protocol/runner-protocol.d.ts} +1 -0
  243. package/dist/protocol/runner-protocol.d.ts.map +1 -0
  244. package/dist/{runner-protocol.js → protocol/runner-protocol.js} +2 -1
  245. package/dist/protocol/runner-protocol.js.map +1 -0
  246. package/dist/protocol/sse.d.ts.map +1 -0
  247. package/dist/protocol/sse.js.map +1 -0
  248. package/dist/{terminal-protocol.d.ts → protocol/terminal-protocol.d.ts} +1 -3
  249. package/dist/protocol/terminal-protocol.d.ts.map +1 -0
  250. package/dist/protocol/terminal-protocol.js.map +1 -0
  251. package/dist/protocol/webext-links.d.ts.map +1 -0
  252. package/dist/protocol/webext-links.js.map +1 -0
  253. package/dist/{webext-protocol.d.ts → protocol/webext-protocol.d.ts} +1 -0
  254. package/dist/protocol/webext-protocol.d.ts.map +1 -0
  255. package/dist/{webext-protocol.js → protocol/webext-protocol.js} +1 -0
  256. package/dist/protocol/webext-protocol.js.map +1 -0
  257. package/dist/schemas/activity.d.ts +2 -0
  258. package/dist/schemas/activity.d.ts.map +1 -1
  259. package/dist/schemas/activity.js +4 -0
  260. package/dist/schemas/activity.js.map +1 -1
  261. package/dist/schemas/agent.d.ts +17 -4
  262. package/dist/schemas/agent.d.ts.map +1 -1
  263. package/dist/schemas/agent.js +21 -4
  264. package/dist/schemas/agent.js.map +1 -1
  265. package/dist/schemas/agents.d.ts +17 -4
  266. package/dist/schemas/agents.d.ts.map +1 -1
  267. package/dist/schemas/agents.js +15 -4
  268. package/dist/schemas/agents.js.map +1 -1
  269. package/dist/schemas/approvals.d.ts.map +1 -1
  270. package/dist/schemas/approvals.js.map +1 -1
  271. package/dist/schemas/automations.d.ts +54 -28
  272. package/dist/schemas/automations.d.ts.map +1 -1
  273. package/dist/schemas/automations.js +26 -8
  274. package/dist/schemas/automations.js.map +1 -1
  275. package/dist/schemas/capabilities.d.ts +0 -8
  276. package/dist/schemas/capabilities.d.ts.map +1 -1
  277. package/dist/schemas/capabilities.js +0 -4
  278. package/dist/schemas/capabilities.js.map +1 -1
  279. package/dist/schemas/ci.d.ts +10 -0
  280. package/dist/schemas/ci.d.ts.map +1 -1
  281. package/dist/schemas/ci.js +9 -1
  282. package/dist/schemas/ci.js.map +1 -1
  283. package/dist/schemas/codebase-health.d.ts.map +1 -1
  284. package/dist/schemas/codebase-health.js.map +1 -1
  285. package/dist/schemas/devices.d.ts +90 -0
  286. package/dist/schemas/devices.d.ts.map +1 -1
  287. package/dist/schemas/devices.js +10 -1
  288. package/dist/schemas/devices.js.map +1 -1
  289. package/dist/schemas/engines.d.ts.map +1 -1
  290. package/dist/schemas/engines.js.map +1 -1
  291. package/dist/schemas/environment.d.ts.map +1 -1
  292. package/dist/schemas/environment.js.map +1 -1
  293. package/dist/schemas/exit.d.ts.map +1 -1
  294. package/dist/schemas/exit.js.map +1 -1
  295. package/dist/schemas/extension-updates.d.ts.map +1 -1
  296. package/dist/schemas/extension-updates.js.map +1 -1
  297. package/dist/schemas/git-history.d.ts.map +1 -1
  298. package/dist/schemas/git-history.js.map +1 -1
  299. package/dist/schemas/git.d.ts +80 -16
  300. package/dist/schemas/git.d.ts.map +1 -1
  301. package/dist/schemas/git.js +37 -25
  302. package/dist/schemas/git.js.map +1 -1
  303. package/dist/schemas/history.d.ts.map +1 -1
  304. package/dist/schemas/history.js.map +1 -1
  305. package/dist/schemas/hosts.d.ts.map +1 -1
  306. package/dist/schemas/hosts.js.map +1 -1
  307. package/dist/schemas/inventory.d.ts.map +1 -1
  308. package/dist/schemas/inventory.js.map +1 -1
  309. package/dist/schemas/issues.d.ts +0 -1
  310. package/dist/schemas/issues.d.ts.map +1 -1
  311. package/dist/schemas/issues.js +0 -1
  312. package/dist/schemas/issues.js.map +1 -1
  313. package/dist/schemas/logs.d.ts.map +1 -1
  314. package/dist/schemas/logs.js.map +1 -1
  315. package/dist/schemas/loops.d.ts.map +1 -1
  316. package/dist/schemas/loops.js +1 -1
  317. package/dist/schemas/loops.js.map +1 -1
  318. package/dist/schemas/maintenance.d.ts.map +1 -1
  319. package/dist/schemas/maintenance.js.map +1 -1
  320. package/dist/schemas/marketplace.d.ts +0 -4
  321. package/dist/schemas/marketplace.d.ts.map +1 -1
  322. package/dist/schemas/panels.d.ts.map +1 -1
  323. package/dist/schemas/panels.js.map +1 -1
  324. package/dist/schemas/personas.d.ts +49 -4
  325. package/dist/schemas/personas.d.ts.map +1 -1
  326. package/dist/schemas/personas.js +32 -5
  327. package/dist/schemas/personas.js.map +1 -1
  328. package/dist/schemas/plan-limits.d.ts +2 -4
  329. package/dist/schemas/plan-limits.d.ts.map +1 -1
  330. package/dist/schemas/plan-limits.js +5 -8
  331. package/dist/schemas/plan-limits.js.map +1 -1
  332. package/dist/schemas/ports.d.ts.map +1 -1
  333. package/dist/schemas/ports.js.map +1 -1
  334. package/dist/schemas/provider-oauth.d.ts.map +1 -1
  335. package/dist/schemas/provider-oauth.js.map +1 -1
  336. package/dist/schemas/provider-subscriptions.d.ts +1 -1
  337. package/dist/schemas/provider-subscriptions.d.ts.map +1 -1
  338. package/dist/schemas/provider-subscriptions.js +1 -1
  339. package/dist/schemas/provider-subscriptions.js.map +1 -1
  340. package/dist/schemas/public.d.ts.map +1 -1
  341. package/dist/schemas/public.js.map +1 -1
  342. package/dist/schemas/push.d.ts.map +1 -1
  343. package/dist/schemas/push.js.map +1 -1
  344. package/dist/schemas/secrets.d.ts.map +1 -1
  345. package/dist/schemas/secrets.js.map +1 -1
  346. package/dist/schemas/settings.d.ts +7 -5
  347. package/dist/schemas/settings.d.ts.map +1 -1
  348. package/dist/schemas/settings.js +18 -8
  349. package/dist/schemas/settings.js.map +1 -1
  350. package/dist/schemas/share.d.ts.map +1 -1
  351. package/dist/schemas/share.js.map +1 -1
  352. package/dist/schemas/shared.d.ts +4 -0
  353. package/dist/schemas/shared.d.ts.map +1 -1
  354. package/dist/schemas/shared.js +3 -0
  355. package/dist/schemas/shared.js.map +1 -1
  356. package/dist/schemas/system.d.ts +6 -0
  357. package/dist/schemas/system.d.ts.map +1 -1
  358. package/dist/schemas/system.js +10 -0
  359. package/dist/schemas/system.js.map +1 -1
  360. package/dist/schemas/terminal.d.ts.map +1 -1
  361. package/dist/schemas/terminal.js.map +1 -1
  362. package/dist/schemas/usage.d.ts.map +1 -1
  363. package/dist/schemas/usage.js.map +1 -1
  364. package/dist/schemas/vpn.d.ts.map +1 -1
  365. package/dist/schemas/vpn.js.map +1 -1
  366. package/dist/schemas/webext.d.ts.map +1 -1
  367. package/dist/schemas/webext.js.map +1 -1
  368. package/dist/schemas/workflows.d.ts +66 -9
  369. package/dist/schemas/workflows.d.ts.map +1 -1
  370. package/dist/schemas/workflows.js +6 -5
  371. package/dist/schemas/workflows.js.map +1 -1
  372. package/dist/schemas/workspace-repos.d.ts.map +1 -1
  373. package/dist/schemas/workspace-repos.js.map +1 -1
  374. package/dist/schemas/workspace-search.d.ts.map +1 -1
  375. package/dist/schemas/workspace-search.js.map +1 -1
  376. package/dist/schemas/workspace-setup.d.ts.map +1 -1
  377. package/dist/schemas/workspace-setup.js.map +1 -1
  378. package/dist/schemas/workspace-tree.d.ts.map +1 -1
  379. package/dist/schemas/workspace-tree.js.map +1 -1
  380. package/dist/state/arrival.d.ts.map +1 -0
  381. package/dist/{arrival.js → state/arrival.js} +1 -1
  382. package/dist/state/arrival.js.map +1 -0
  383. package/dist/state/contract-lock.d.ts.map +1 -0
  384. package/dist/{contract-lock.js → state/contract-lock.js} +1 -1
  385. package/dist/state/contract-lock.js.map +1 -0
  386. package/dist/{definition.d.ts → state/definition.d.ts} +21 -17
  387. package/dist/state/definition.d.ts.map +1 -0
  388. package/dist/{definition.js → state/definition.js} +4 -4
  389. package/dist/state/definition.js.map +1 -0
  390. package/dist/state/history-state.d.ts.map +1 -0
  391. package/dist/{history-state.js → state/history-state.js} +1 -0
  392. package/dist/state/history-state.js.map +1 -0
  393. package/dist/state/runtime-state.d.ts.map +1 -0
  394. package/dist/state/runtime-state.js.map +1 -0
  395. package/dist/state/starter.d.ts.map +1 -0
  396. package/dist/state/starter.js.map +1 -0
  397. package/dist/state/state-portability.d.ts.map +1 -0
  398. package/dist/state/state-portability.js.map +1 -0
  399. package/dist/state/versions.d.ts.map +1 -0
  400. package/dist/state/versions.js.map +1 -0
  401. package/dist/{workspace-state.d.ts → state/workspace-state.d.ts} +8 -5
  402. package/dist/state/workspace-state.d.ts.map +1 -0
  403. package/dist/{workspace-state.js → state/workspace-state.js} +25 -1
  404. package/dist/state/workspace-state.js.map +1 -0
  405. package/dist/{documents.d.ts → text/documents.d.ts} +1 -1
  406. package/dist/text/documents.d.ts.map +1 -0
  407. package/dist/{documents.js → text/documents.js} +1 -1
  408. package/dist/text/documents.js.map +1 -0
  409. package/dist/text/embed.d.ts.map +1 -0
  410. package/dist/text/embed.js.map +1 -0
  411. package/dist/text/mentions.d.ts.map +1 -0
  412. package/dist/text/mentions.js.map +1 -0
  413. package/dist/text/model-answer.d.ts +3 -0
  414. package/dist/text/model-answer.d.ts.map +1 -0
  415. package/dist/text/model-answer.js +3 -0
  416. package/dist/text/model-answer.js.map +1 -0
  417. package/dist/text/path-refs.d.ts.map +1 -0
  418. package/dist/text/path-refs.js.map +1 -0
  419. package/dist/{shell-regions.d.ts → text/shell-regions.d.ts} +1 -1
  420. package/dist/text/shell-regions.d.ts.map +1 -0
  421. package/dist/text/shell-regions.js.map +1 -0
  422. package/dist/text/title.d.ts.map +1 -0
  423. package/dist/text/title.js.map +1 -0
  424. package/dist/{transcript-fold.d.ts → text/transcript-fold.d.ts} +2 -1
  425. package/dist/text/transcript-fold.d.ts.map +1 -0
  426. package/dist/{transcript-fold.js → text/transcript-fold.js} +2 -16
  427. package/dist/text/transcript-fold.js.map +1 -0
  428. package/dist/text/whisper.d.ts +3 -0
  429. package/dist/text/whisper.d.ts.map +1 -0
  430. package/dist/text/whisper.js +11 -0
  431. package/dist/text/whisper.js.map +1 -0
  432. package/dist/{workflow-faults.d.ts → text/workflow-faults.d.ts} +1 -1
  433. package/dist/text/workflow-faults.d.ts.map +1 -0
  434. package/dist/{workflow-faults.js → text/workflow-faults.js} +1 -1
  435. package/dist/text/workflow-faults.js.map +1 -0
  436. package/package.json +70 -70
  437. package/src/chores/chores.test.ts +4 -10
  438. package/src/chores/chores.ts +148 -392
  439. package/src/chores/digest.ts +8 -28
  440. package/src/chores/extension-update.ts +3 -8
  441. package/src/chores/fix-deps.ts +4 -18
  442. package/src/chores/index.ts +2 -2
  443. package/src/chores/probes.test.ts +7 -43
  444. package/src/chores/probes.ts +62 -167
  445. package/src/chores/prompt.ts +10 -34
  446. package/src/chores/stack.test.ts +6 -45
  447. package/src/chores/stack.ts +27 -118
  448. package/src/chores/verdict.test.ts +101 -80
  449. package/src/chores/verdict.ts +54 -99
  450. package/src/contracts/accounts.contract.ts +4 -19
  451. package/src/contracts/agent.contract.ts +7 -22
  452. package/src/contracts/agents.contract.ts +25 -71
  453. package/src/contracts/automations.contract.ts +14 -30
  454. package/src/contracts/capabilities.contract.ts +8 -35
  455. package/src/contracts/chores.contract.ts +4 -15
  456. package/src/contracts/endpoints.contract.ts +5 -22
  457. package/src/contracts/exit.contract.ts +7 -30
  458. package/src/contracts/extensions.contract.ts +8 -30
  459. package/src/contracts/git.contract.ts +25 -49
  460. package/src/contracts/host.contract.ts +9 -44
  461. package/src/contracts/intentic.contract.ts +1 -1
  462. package/src/contracts/logs.contract.ts +3 -13
  463. package/src/contracts/loops.contract.ts +9 -40
  464. package/src/contracts/personas.contract.ts +22 -30
  465. package/src/contracts/providers.contract.ts +4 -17
  466. package/src/contracts/runner.contract.ts +12 -39
  467. package/src/contracts/safety.contract.ts +5 -14
  468. package/src/contracts/secrets.contract.ts +4 -22
  469. package/src/contracts/sessions.contract.ts +1 -1
  470. package/src/contracts/settings.contract.ts +4 -10
  471. package/src/contracts/share.contract.ts +3 -9
  472. package/src/contracts/skills.contract.ts +4 -15
  473. package/src/contracts/system.contract.ts +26 -52
  474. package/src/contracts/usage.contract.ts +7 -21
  475. package/src/contracts/vpn.contract.ts +9 -16
  476. package/src/contracts/webext.contract.ts +9 -25
  477. package/src/contracts/workflows.contract.ts +34 -58
  478. package/src/contracts/workspace.contract.ts +19 -50
  479. package/src/events/agent-events.ts +345 -0
  480. package/src/events/cards.ts +286 -0
  481. package/src/{events.test.ts → events/resume.test.ts} +4 -19
  482. package/src/events/resume.ts +60 -0
  483. package/src/events/system-events.ts +139 -0
  484. package/src/events/transcript.ts +320 -0
  485. package/src/{conversation-ids.test.ts → ids/conversation-ids.test.ts} +25 -13
  486. package/src/ids/conversation-ids.ts +178 -0
  487. package/src/ids/hostnames.ts +129 -0
  488. package/src/ids/session-names.ts +29 -0
  489. package/src/ids/share-paths.ts +43 -0
  490. package/src/{tunnel-ids.test.ts → ids/tunnel-ids.test.ts} +1 -14
  491. package/src/ids/tunnel-ids.ts +29 -0
  492. package/src/index.ts +71 -88
  493. package/src/{agent-catalog.test.ts → models/agent-catalog.test.ts} +19 -93
  494. package/src/models/agent-catalog.ts +174 -0
  495. package/src/models/agent-runtimes.ts +201 -0
  496. package/src/models/capability-ledger.test.ts +84 -0
  497. package/src/{fast-tier.test.ts → models/fast-tier.test.ts} +7 -18
  498. package/src/models/fast-tier.ts +36 -0
  499. package/src/{model-order.test.ts → models/model-order.test.ts} +19 -40
  500. package/src/models/model-order.ts +163 -0
  501. package/src/models/model-pins.test.ts +87 -0
  502. package/src/models/model-pins.ts +57 -0
  503. package/src/models/model-roles.test.ts +38 -0
  504. package/src/models/model-roles.ts +180 -0
  505. package/src/{plan-pools.test.ts → models/plan-pools.test.ts} +6 -11
  506. package/src/models/plan-pools.ts +65 -0
  507. package/src/{prompt-complexity.test.ts → models/prompt-complexity.test.ts} +8 -60
  508. package/src/models/prompt-complexity.ts +215 -0
  509. package/src/{provider-specs.test.ts → models/provider-specs.test.ts} +18 -47
  510. package/src/models/provider-specs.ts +272 -0
  511. package/src/policy/approvals-execution.ts +58 -0
  512. package/src/{batch-runs.test.ts → policy/batch-runs.test.ts} +4 -20
  513. package/src/policy/batch-runs.ts +137 -0
  514. package/src/policy/capability-secrets.ts +5 -0
  515. package/src/{card-status.ts → policy/card-status.ts} +11 -26
  516. package/src/{command-classes.test.ts → policy/command-classes.test.ts} +11 -118
  517. package/src/policy/command-classes.ts +395 -0
  518. package/src/policy/command-run.ts +65 -0
  519. package/src/policy/control-scopes.ts +38 -0
  520. package/src/{credential-material.test.ts → policy/credential-material.test.ts} +4 -26
  521. package/src/policy/credential-material.ts +91 -0
  522. package/src/policy/needs-action.ts +5 -0
  523. package/src/policy/output-fields.ts +86 -0
  524. package/src/policy/overlay-lint.ts +100 -0
  525. package/src/{owner-ticket.test.ts → policy/owner-ticket.test.ts} +1 -1
  526. package/src/{owner-ticket.ts → policy/owner-ticket.ts} +9 -31
  527. package/src/policy/safety-policy.test.ts +84 -0
  528. package/src/policy/safety-policy.ts +142 -0
  529. package/src/policy/search-globs.ts +60 -0
  530. package/src/protocol/container-requirements.test.ts +72 -0
  531. package/src/protocol/container-requirements.ts +58 -0
  532. package/src/protocol/host-protocol.ts +29 -0
  533. package/src/protocol/ingress-contract.ts +103 -0
  534. package/src/{ingress-protocol.test.ts → protocol/ingress-protocol.test.ts} +25 -90
  535. package/src/protocol/ingress-protocol.ts +441 -0
  536. package/src/protocol/listener-protocol.ts +75 -0
  537. package/src/{peer-dial.test.ts → protocol/peer-dial.test.ts} +52 -1
  538. package/src/protocol/peer-dial.ts +207 -0
  539. package/src/{peer-mcp-server.ts → protocol/peer-mcp-server.ts} +16 -41
  540. package/src/protocol/request-id.ts +5 -0
  541. package/src/{routes.test.ts → protocol/routes.test.ts} +14 -22
  542. package/src/protocol/routes.ts +159 -0
  543. package/src/protocol/runner-protocol.ts +197 -0
  544. package/src/protocol/terminal-protocol.ts +13 -0
  545. package/src/protocol/webext-links.ts +50 -0
  546. package/src/protocol/webext-protocol.ts +24 -0
  547. package/src/schemas/activity.ts +22 -30
  548. package/src/schemas/agent.ts +130 -238
  549. package/src/schemas/agents.ts +165 -483
  550. package/src/schemas/approvals.ts +23 -71
  551. package/src/schemas/automations.ts +145 -249
  552. package/src/schemas/capabilities.ts +127 -414
  553. package/src/schemas/ci.ts +56 -108
  554. package/src/schemas/codebase-health.ts +7 -11
  555. package/src/schemas/devices.ts +98 -321
  556. package/src/schemas/engines.ts +16 -44
  557. package/src/schemas/environment.ts +41 -91
  558. package/src/schemas/exit.ts +24 -81
  559. package/src/schemas/extension-updates.ts +42 -87
  560. package/src/schemas/git-history.ts +30 -84
  561. package/src/schemas/git.ts +141 -256
  562. package/src/schemas/history.ts +14 -40
  563. package/src/schemas/hosts.ts +9 -15
  564. package/src/schemas/inventory.ts +8 -10
  565. package/src/schemas/issues.ts +66 -134
  566. package/src/schemas/logs.ts +15 -34
  567. package/src/schemas/loops.ts +46 -163
  568. package/src/schemas/maintenance.ts +47 -172
  569. package/src/schemas/panels.ts +20 -45
  570. package/src/schemas/personas.ts +85 -168
  571. package/src/schemas/plan-limits.ts +58 -197
  572. package/src/schemas/ports.ts +14 -32
  573. package/src/schemas/provider-oauth.ts +23 -76
  574. package/src/schemas/provider-subscriptions.ts +4 -13
  575. package/src/schemas/public.ts +4 -15
  576. package/src/schemas/push.ts +8 -36
  577. package/src/schemas/secrets.ts +20 -64
  578. package/src/schemas/settings.ts +177 -597
  579. package/src/schemas/share.ts +14 -32
  580. package/src/schemas/shared.ts +14 -13
  581. package/src/schemas/system.ts +46 -78
  582. package/src/schemas/terminal.ts +41 -120
  583. package/src/schemas/usage.ts +44 -233
  584. package/src/schemas/version-seam.test.ts +9 -26
  585. package/src/schemas/vpn.ts +27 -64
  586. package/src/schemas/webext.ts +22 -53
  587. package/src/schemas/workflows.ts +57 -183
  588. package/src/schemas/workspace-repos.ts +12 -24
  589. package/src/schemas/workspace-search.ts +17 -35
  590. package/src/schemas/workspace-setup.ts +4 -11
  591. package/src/schemas/workspace-tree.ts +32 -91
  592. package/src/state/arrival.ts +109 -0
  593. package/src/state/contract-lock.test.ts +17 -0
  594. package/src/state/contract-lock.ts +49 -0
  595. package/src/state/definition.ts +143 -0
  596. package/src/state/history-state.ts +103 -0
  597. package/src/{runtime-state.test.ts → state/runtime-state.test.ts} +3 -10
  598. package/src/state/runtime-state.ts +62 -0
  599. package/src/state/starter.ts +5 -0
  600. package/src/state/state-portability.ts +27 -0
  601. package/src/state/versions.ts +26 -0
  602. package/src/{workspace-state.test.ts → state/workspace-state.test.ts} +65 -173
  603. package/src/state/workspace-state.ts +669 -0
  604. package/src/{documents.test.ts → text/documents.test.ts} +1 -1
  605. package/src/text/documents.ts +42 -0
  606. package/src/text/embed.ts +132 -0
  607. package/src/text/mentions.ts +21 -0
  608. package/src/text/model-answer.ts +9 -0
  609. package/src/text/path-refs.ts +39 -0
  610. package/src/text/shell-regions.ts +224 -0
  611. package/src/{title.test.ts → text/title.test.ts} +13 -32
  612. package/src/text/title.ts +202 -0
  613. package/src/{transcript-fold.test.ts → text/transcript-fold.test.ts} +5 -83
  614. package/src/{transcript-fold.ts → text/transcript-fold.ts} +65 -170
  615. package/src/text/whisper.test.ts +19 -0
  616. package/src/text/whisper.ts +17 -0
  617. package/src/{workflow-faults.test.ts → text/workflow-faults.test.ts} +6 -24
  618. package/src/{workflow-faults.ts → text/workflow-faults.ts} +20 -60
  619. package/dist/agent-catalog.d.ts.map +0 -1
  620. package/dist/agent-catalog.js.map +0 -1
  621. package/dist/agent-runtimes.d.ts.map +0 -1
  622. package/dist/agent-runtimes.js.map +0 -1
  623. package/dist/approvals-execution.d.ts.map +0 -1
  624. package/dist/approvals-execution.js.map +0 -1
  625. package/dist/arrival.d.ts.map +0 -1
  626. package/dist/arrival.js.map +0 -1
  627. package/dist/batch-runs.d.ts.map +0 -1
  628. package/dist/batch-runs.js.map +0 -1
  629. package/dist/capability-env.d.ts.map +0 -1
  630. package/dist/capability-env.js.map +0 -1
  631. package/dist/capability-secrets.d.ts.map +0 -1
  632. package/dist/capability-secrets.js.map +0 -1
  633. package/dist/card-status.d.ts.map +0 -1
  634. package/dist/card-status.js.map +0 -1
  635. package/dist/command-classes.d.ts.map +0 -1
  636. package/dist/command-classes.js.map +0 -1
  637. package/dist/command-run.d.ts.map +0 -1
  638. package/dist/command-run.js.map +0 -1
  639. package/dist/contract-lock.d.ts.map +0 -1
  640. package/dist/contract-lock.js.map +0 -1
  641. package/dist/conversation-ids.d.ts +0 -4
  642. package/dist/conversation-ids.d.ts.map +0 -1
  643. package/dist/conversation-ids.js.map +0 -1
  644. package/dist/credential-material.d.ts.map +0 -1
  645. package/dist/credential-material.js.map +0 -1
  646. package/dist/definition.d.ts.map +0 -1
  647. package/dist/definition.js.map +0 -1
  648. package/dist/documents.d.ts.map +0 -1
  649. package/dist/documents.js.map +0 -1
  650. package/dist/embed.d.ts.map +0 -1
  651. package/dist/embed.js.map +0 -1
  652. package/dist/events.d.ts +0 -4336
  653. package/dist/events.d.ts.map +0 -1
  654. package/dist/events.js +0 -725
  655. package/dist/events.js.map +0 -1
  656. package/dist/fast-tier.d.ts.map +0 -1
  657. package/dist/fast-tier.js.map +0 -1
  658. package/dist/history-state.d.ts.map +0 -1
  659. package/dist/history-state.js.map +0 -1
  660. package/dist/host-protocol.d.ts.map +0 -1
  661. package/dist/host-protocol.js.map +0 -1
  662. package/dist/hostnames.d.ts.map +0 -1
  663. package/dist/hostnames.js.map +0 -1
  664. package/dist/ingress-contract.d.ts.map +0 -1
  665. package/dist/ingress-contract.js.map +0 -1
  666. package/dist/ingress-protocol.d.ts.map +0 -1
  667. package/dist/ingress-protocol.js.map +0 -1
  668. package/dist/listener-protocol.d.ts.map +0 -1
  669. package/dist/listener-protocol.js.map +0 -1
  670. package/dist/mentions.d.ts.map +0 -1
  671. package/dist/mentions.js.map +0 -1
  672. package/dist/model-order.d.ts.map +0 -1
  673. package/dist/model-order.js.map +0 -1
  674. package/dist/model-pins.d.ts.map +0 -1
  675. package/dist/model-pins.js +0 -45
  676. package/dist/model-pins.js.map +0 -1
  677. package/dist/model-roles.d.ts.map +0 -1
  678. package/dist/model-roles.js.map +0 -1
  679. package/dist/needs-action.d.ts.map +0 -1
  680. package/dist/needs-action.js.map +0 -1
  681. package/dist/output-fields.d.ts.map +0 -1
  682. package/dist/output-fields.js.map +0 -1
  683. package/dist/overlay-lint.d.ts.map +0 -1
  684. package/dist/overlay-lint.js.map +0 -1
  685. package/dist/owner-ticket.d.ts.map +0 -1
  686. package/dist/owner-ticket.js.map +0 -1
  687. package/dist/path-refs.d.ts.map +0 -1
  688. package/dist/path-refs.js.map +0 -1
  689. package/dist/peer-dial.d.ts.map +0 -1
  690. package/dist/peer-dial.js.map +0 -1
  691. package/dist/peer-mcp-server.d.ts.map +0 -1
  692. package/dist/peer-mcp-server.js.map +0 -1
  693. package/dist/plan-pools.d.ts.map +0 -1
  694. package/dist/plan-pools.js.map +0 -1
  695. package/dist/prompt-complexity.d.ts.map +0 -1
  696. package/dist/prompt-complexity.js.map +0 -1
  697. package/dist/provider-specs.d.ts.map +0 -1
  698. package/dist/provider-specs.js.map +0 -1
  699. package/dist/request-id.d.ts.map +0 -1
  700. package/dist/request-id.js.map +0 -1
  701. package/dist/routes.d.ts.map +0 -1
  702. package/dist/routes.js.map +0 -1
  703. package/dist/runner-protocol.d.ts.map +0 -1
  704. package/dist/runner-protocol.js.map +0 -1
  705. package/dist/runtime-state.d.ts.map +0 -1
  706. package/dist/runtime-state.js.map +0 -1
  707. package/dist/safety-policy.d.ts.map +0 -1
  708. package/dist/safety-policy.js.map +0 -1
  709. package/dist/schemas/context.d.ts +0 -30
  710. package/dist/schemas/context.d.ts.map +0 -1
  711. package/dist/schemas/context.js +0 -34
  712. package/dist/schemas/context.js.map +0 -1
  713. package/dist/search-globs.d.ts.map +0 -1
  714. package/dist/search-globs.js.map +0 -1
  715. package/dist/session-names.d.ts.map +0 -1
  716. package/dist/session-names.js.map +0 -1
  717. package/dist/share-paths.d.ts.map +0 -1
  718. package/dist/share-paths.js.map +0 -1
  719. package/dist/shell-regions.d.ts.map +0 -1
  720. package/dist/shell-regions.js.map +0 -1
  721. package/dist/sse.d.ts.map +0 -1
  722. package/dist/sse.js.map +0 -1
  723. package/dist/starter.d.ts.map +0 -1
  724. package/dist/starter.js.map +0 -1
  725. package/dist/state-portability.d.ts.map +0 -1
  726. package/dist/state-portability.js.map +0 -1
  727. package/dist/terminal-protocol.d.ts.map +0 -1
  728. package/dist/terminal-protocol.js.map +0 -1
  729. package/dist/title.d.ts.map +0 -1
  730. package/dist/title.js.map +0 -1
  731. package/dist/transcript-fold.d.ts.map +0 -1
  732. package/dist/transcript-fold.js.map +0 -1
  733. package/dist/tunnel-ids.d.ts.map +0 -1
  734. package/dist/tunnel-ids.js.map +0 -1
  735. package/dist/versions.d.ts.map +0 -1
  736. package/dist/versions.js.map +0 -1
  737. package/dist/webext-links.d.ts.map +0 -1
  738. package/dist/webext-links.js.map +0 -1
  739. package/dist/webext-protocol.d.ts.map +0 -1
  740. package/dist/webext-protocol.js.map +0 -1
  741. package/dist/workflow-faults.d.ts.map +0 -1
  742. package/dist/workflow-faults.js.map +0 -1
  743. package/dist/workspace-state.d.ts.map +0 -1
  744. package/dist/workspace-state.js.map +0 -1
  745. package/src/agent-catalog.ts +0 -316
  746. package/src/agent-runtimes.ts +0 -419
  747. package/src/approvals-execution.ts +0 -96
  748. package/src/arrival.ts +0 -160
  749. package/src/batch-runs.ts +0 -188
  750. package/src/capability-ledger.test.ts +0 -140
  751. package/src/capability-secrets.ts +0 -20
  752. package/src/command-classes.ts +0 -617
  753. package/src/command-run.ts +0 -78
  754. package/src/contract-lock.test.ts +0 -23
  755. package/src/contract-lock.ts +0 -66
  756. package/src/conversation-ids.ts +0 -207
  757. package/src/credential-material.ts +0 -181
  758. package/src/definition.ts +0 -207
  759. package/src/documents.ts +0 -67
  760. package/src/embed.ts +0 -164
  761. package/src/events.ts +0 -1870
  762. package/src/fast-tier.ts +0 -72
  763. package/src/history-state.ts +0 -174
  764. package/src/host-protocol.ts +0 -36
  765. package/src/hostnames.ts +0 -180
  766. package/src/ingress-contract.ts +0 -157
  767. package/src/ingress-protocol.ts +0 -625
  768. package/src/listener-protocol.ts +0 -96
  769. package/src/mentions.ts +0 -25
  770. package/src/model-order.ts +0 -262
  771. package/src/model-pins.test.ts +0 -202
  772. package/src/model-pins.ts +0 -183
  773. package/src/model-roles.ts +0 -224
  774. package/src/needs-action.ts +0 -14
  775. package/src/output-fields.ts +0 -111
  776. package/src/overlay-lint.ts +0 -116
  777. package/src/path-refs.ts +0 -59
  778. package/src/peer-dial.ts +0 -163
  779. package/src/plan-pools.ts +0 -92
  780. package/src/prompt-complexity.ts +0 -334
  781. package/src/provider-specs.ts +0 -432
  782. package/src/request-id.ts +0 -41
  783. package/src/routes.ts +0 -219
  784. package/src/runner-protocol.ts +0 -239
  785. package/src/runtime-state.ts +0 -140
  786. package/src/safety-policy.test.ts +0 -88
  787. package/src/safety-policy.ts +0 -258
  788. package/src/schemas/context.ts +0 -87
  789. package/src/search-globs.ts +0 -76
  790. package/src/session-names.ts +0 -44
  791. package/src/share-paths.ts +0 -68
  792. package/src/shell-regions.ts +0 -289
  793. package/src/starter.ts +0 -13
  794. package/src/state-portability.ts +0 -56
  795. package/src/terminal-protocol.ts +0 -16
  796. package/src/title.ts +0 -267
  797. package/src/tunnel-ids.ts +0 -57
  798. package/src/versions.ts +0 -48
  799. package/src/webext-links.ts +0 -90
  800. package/src/webext-protocol.ts +0 -27
  801. package/src/workspace-state.ts +0 -1096
  802. /package/dist/{hostnames.d.ts → ids/hostnames.d.ts} +0 -0
  803. /package/dist/{hostnames.js → ids/hostnames.js} +0 -0
  804. /package/dist/{session-names.d.ts → ids/session-names.d.ts} +0 -0
  805. /package/dist/{session-names.js → ids/session-names.js} +0 -0
  806. /package/dist/{share-paths.d.ts → ids/share-paths.d.ts} +0 -0
  807. /package/dist/{share-paths.js → ids/share-paths.js} +0 -0
  808. /package/dist/{agent-catalog.js → models/agent-catalog.js} +0 -0
  809. /package/dist/{agent-runtimes.d.ts → models/agent-runtimes.d.ts} +0 -0
  810. /package/dist/{agent-runtimes.js → models/agent-runtimes.js} +0 -0
  811. /package/dist/{fast-tier.js → models/fast-tier.js} +0 -0
  812. /package/dist/{model-order.d.ts → models/model-order.d.ts} +0 -0
  813. /package/dist/{model-order.js → models/model-order.js} +0 -0
  814. /package/dist/{plan-pools.js → models/plan-pools.js} +0 -0
  815. /package/dist/{prompt-complexity.d.ts → models/prompt-complexity.d.ts} +0 -0
  816. /package/dist/{prompt-complexity.js → models/prompt-complexity.js} +0 -0
  817. /package/dist/{provider-specs.d.ts → models/provider-specs.d.ts} +0 -0
  818. /package/dist/{provider-specs.js → models/provider-specs.js} +0 -0
  819. /package/dist/{approvals-execution.d.ts → policy/approvals-execution.d.ts} +0 -0
  820. /package/dist/{approvals-execution.js → policy/approvals-execution.js} +0 -0
  821. /package/dist/{capability-env.d.ts → policy/capability-env.d.ts} +0 -0
  822. /package/dist/{capability-env.js → policy/capability-env.js} +0 -0
  823. /package/dist/{capability-secrets.d.ts → policy/capability-secrets.d.ts} +0 -0
  824. /package/dist/{capability-secrets.js → policy/capability-secrets.js} +0 -0
  825. /package/dist/{command-run.js → policy/command-run.js} +0 -0
  826. /package/dist/{credential-material.d.ts → policy/credential-material.d.ts} +0 -0
  827. /package/dist/{credential-material.js → policy/credential-material.js} +0 -0
  828. /package/dist/{needs-action.d.ts → policy/needs-action.d.ts} +0 -0
  829. /package/dist/{needs-action.js → policy/needs-action.js} +0 -0
  830. /package/dist/{output-fields.d.ts → policy/output-fields.d.ts} +0 -0
  831. /package/dist/{output-fields.js → policy/output-fields.js} +0 -0
  832. /package/dist/{overlay-lint.d.ts → policy/overlay-lint.d.ts} +0 -0
  833. /package/dist/{overlay-lint.js → policy/overlay-lint.js} +0 -0
  834. /package/dist/{owner-ticket.d.ts → policy/owner-ticket.d.ts} +0 -0
  835. /package/dist/{search-globs.d.ts → policy/search-globs.d.ts} +0 -0
  836. /package/dist/{search-globs.js → policy/search-globs.js} +0 -0
  837. /package/dist/{ingress-contract.d.ts → protocol/ingress-contract.d.ts} +0 -0
  838. /package/dist/{ingress-protocol.d.ts → protocol/ingress-protocol.d.ts} +0 -0
  839. /package/dist/{ingress-protocol.js → protocol/ingress-protocol.js} +0 -0
  840. /package/dist/{listener-protocol.d.ts → protocol/listener-protocol.d.ts} +0 -0
  841. /package/dist/{peer-mcp-server.d.ts → protocol/peer-mcp-server.d.ts} +0 -0
  842. /package/dist/{peer-mcp-server.js → protocol/peer-mcp-server.js} +0 -0
  843. /package/dist/{request-id.d.ts → protocol/request-id.d.ts} +0 -0
  844. /package/dist/{request-id.js → protocol/request-id.js} +0 -0
  845. /package/dist/{routes.d.ts → protocol/routes.d.ts} +0 -0
  846. /package/dist/{routes.js → protocol/routes.js} +0 -0
  847. /package/dist/{sse.d.ts → protocol/sse.d.ts} +0 -0
  848. /package/dist/{sse.js → protocol/sse.js} +0 -0
  849. /package/dist/{terminal-protocol.js → protocol/terminal-protocol.js} +0 -0
  850. /package/dist/{webext-links.d.ts → protocol/webext-links.d.ts} +0 -0
  851. /package/dist/{webext-links.js → protocol/webext-links.js} +0 -0
  852. /package/dist/{arrival.d.ts → state/arrival.d.ts} +0 -0
  853. /package/dist/{contract-lock.d.ts → state/contract-lock.d.ts} +0 -0
  854. /package/dist/{history-state.d.ts → state/history-state.d.ts} +0 -0
  855. /package/dist/{runtime-state.d.ts → state/runtime-state.d.ts} +0 -0
  856. /package/dist/{runtime-state.js → state/runtime-state.js} +0 -0
  857. /package/dist/{starter.d.ts → state/starter.d.ts} +0 -0
  858. /package/dist/{starter.js → state/starter.js} +0 -0
  859. /package/dist/{state-portability.d.ts → state/state-portability.d.ts} +0 -0
  860. /package/dist/{state-portability.js → state/state-portability.js} +0 -0
  861. /package/dist/{versions.d.ts → state/versions.d.ts} +0 -0
  862. /package/dist/{versions.js → state/versions.js} +0 -0
  863. /package/dist/{embed.d.ts → text/embed.d.ts} +0 -0
  864. /package/dist/{embed.js → text/embed.js} +0 -0
  865. /package/dist/{mentions.d.ts → text/mentions.d.ts} +0 -0
  866. /package/dist/{mentions.js → text/mentions.js} +0 -0
  867. /package/dist/{path-refs.d.ts → text/path-refs.d.ts} +0 -0
  868. /package/dist/{path-refs.js → text/path-refs.js} +0 -0
  869. /package/dist/{shell-regions.js → text/shell-regions.js} +0 -0
  870. /package/dist/{title.d.ts → text/title.d.ts} +0 -0
  871. /package/dist/{title.js → text/title.js} +0 -0
  872. /package/src/{hostnames.test.ts → ids/hostnames.test.ts} +0 -0
  873. /package/src/{share-paths.test.ts → ids/share-paths.test.ts} +0 -0
  874. /package/src/{capability-env.ts → policy/capability-env.ts} +0 -0
  875. /package/src/{overlay-lint.test.ts → policy/overlay-lint.test.ts} +0 -0
  876. /package/src/{search-globs.test.ts → policy/search-globs.test.ts} +0 -0
  877. /package/src/{ingress-contract.test.ts → protocol/ingress-contract.test.ts} +0 -0
  878. /package/src/{peer-mcp-server.test.ts → protocol/peer-mcp-server.test.ts} +0 -0
  879. /package/src/{sse.ts → protocol/sse.ts} +0 -0
  880. /package/src/{versions.test.ts → state/versions.test.ts} +0 -0
  881. /package/src/{embed.test.ts → text/embed.test.ts} +0 -0
  882. /package/src/{mentions.test.ts → text/mentions.test.ts} +0 -0
  883. /package/src/{path-refs.test.ts → text/path-refs.test.ts} +0 -0
@@ -1,21 +1,18 @@
1
1
  // logs: daemon-owned debug logs (historyRoot/logs)
2
2
  import { z } from "zod";
3
- // Terminal pipe-pane captures (terminals/), intentic CLI run logs (intentic-runs/), and the daemon's own pino
4
- // file (daemon.log), written by the daemon/tmux only, under historyRoot so the agent can't rewrite them.
3
+ // Terminal pipe-pane captures (terminals/), CLI run logs (intentic-runs/), and the daemon's own pino file (daemon.log);
4
+ // written by the daemon/tmux only, so the agent can't rewrite them.
5
5
 
6
6
  export const LogFileEntrySchema = z.object({
7
- // Path relative to the logs root, e.g. "terminals/web-1-%0.log" or "daemon.log".
7
+ // Relative to the logs root, e.g. "terminals/web-1-%0.log".
8
8
  name: z.string().describe("Its name, which is what the read route takes."),
9
9
  sizeBytes: z.number().describe("Size in bytes."),
10
- // Epoch ms mtime.
11
10
  modifiedAt: z.number().describe("When it last changed, in milliseconds."),
12
11
  });
13
12
  export type LogFileEntry = z.infer<typeof LogFileEntrySchema>;
14
13
  export const LogsListSchema = z.object({
15
14
  files: z.array(LogFileEntrySchema).describe("Every log the sandbox keeps: captured terminal output, command runs, and its own log."),
16
15
  });
17
- // `name` rides the query (log names contain slashes, which don't fit a path segment); `bytes` is the tail
18
- // size, the newest bytes win when the file is larger.
19
16
  export const LogReadQuerySchema = z.object({
20
17
  name: z.string().min(1).describe("Which log. It travels in the query rather than the address, because log names contain slashes."),
21
18
  bytes: z.coerce
@@ -28,50 +25,35 @@ export const LogReadQuerySchema = z.object({
28
25
  export const LogReadSchema = z.object({
29
26
  name: z.string().describe("Which log this is from."),
30
27
  sizeBytes: z.number().describe("How large the whole file is."),
31
- // The tail text; truncated when the file holds more than the requested bytes.
32
28
  text: z.string().describe("The end of it, as text."),
33
29
  truncated: z.boolean().describe("There is more before what you got."),
34
30
  });
35
31
  export type LogRead = z.infer<typeof LogReadSchema>;
36
- /* ---- client diagnostics: what the BROWSER saw, landed where the daemon's own records live ----
37
- *
38
- * The one gap no daemon-side record could ever close. Everything the editor measured or caught ended at
39
- * `console.warn`: the perf ring buffer dies on reload, a render error reaches Vue's handler and stops there, and
40
- * the startup self-heal CLEARS this origin's storage and reloads, destroying the evidence for the one class of
41
- * bug that reproduces least often. So when a user hit a bug in their own browser the durable record was
42
- * nothing, and the only way to investigate was to re-drive a browser and hope. Measured over 728 sessions that
43
- * is 1,545 screenshots against 65 console reads, and a quarter of all prompts arriving with a picture attached
44
- * because there was no other channel.
45
- *
46
- * Deliberately NARROW. This is not analytics (PostHog owns product events) and not a log pipe: it carries the
47
- * things a person cannot describe and a screenshot cannot show, which are caught errors, self-heal wipes, and
48
- * spans that blew their frame budget. Everything is capped at the schema so one looping component cannot fill
49
- * the /history volume, and the daemon appends to logs/client.jsonl under the same prune sweep as the rest. */
32
+ // What the browser saw when nothing else could capture it: caught errors, self-heal wipes, spans over budget — not
33
+ // analytics, not a general log pipe. Capped at the schema so one looping component can't fill the volume; appended to
34
+ // logs/client.jsonl under the same prune sweep.
50
35
  export const ClientDiagnosticSchema = z.object({
51
- // When the BROWSER saw it. Distinct from the `time` the daemon stamps on the record, because a batch can
52
- // arrive seconds late and a reader correlating a stutter to a daemon span needs the moment it happened.
36
+ // Distinct from the daemon's own stamp: a batch can arrive seconds late, and a reader correlating a stutter to a
37
+ // daemon span needs the actual moment.
53
38
  seenAt: z.number().describe("When the browser saw it, in milliseconds."),
54
39
  level: z.enum(["warn", "error"]).describe("How bad it was."),
55
- // A stable name, not free text: this is what a reader filters on. e.g. `vue.render`, `window.error`,
56
- // `unhandled.rejection`, `self-heal.wipe`, `perf.slow`.
40
+ // Dotted namespace a reader filters on, e.g. `vue.render`, `self-heal.wipe`, `perf.slow`.
57
41
  event: z.string().min(1).max(100).describe("What kind of thing it was, as a stable name."),
58
42
  message: z.string().max(2_000).describe("What it said."),
59
- // The app route the user was on, which is the single most useful field for reproducing anything.
60
43
  route: z.string().max(300).optional().describe("Which page they were on."),
61
- /* The id this browser put on the daemon call it was making, when there was one. The join key: without it
62
- * "the UI stuttered at 15:22" and "slow http.request at 15:22" can only be matched by eye. */
44
+ // The join key: without it, matching a stutter to a slow daemon call is eyeballing timestamps.
63
45
  requestId: z.string().max(100).optional().describe("Which daemon call it belonged to, when it belonged to one."),
64
- // Which build this browser was running, so a report from a tab nobody has reloaded in a week says so.
46
+ // Flags a report from a tab that has not reloaded in a while.
65
47
  build: z.string().max(100).optional().describe("Which build of the app was running."),
66
- // Bounded and primitive: a stack, an op name, a duration. Kept flat so a line stays greppable.
48
+ // Bounded, primitive values only (stack, op name, duration); flat, so a line stays greppable.
67
49
  fields: z
68
50
  .record(z.string().max(60), z.union([z.string().max(4_000), z.number(), z.boolean()]))
69
51
  .optional()
70
52
  .describe("Whatever else was worth keeping."),
71
53
  });
72
54
  export type ClientDiagnostic = z.infer<typeof ClientDiagnosticSchema>;
73
- // A batch. Capped: the client coalesces and drops on its own side too, and a route that accepts an unbounded
74
- // array is a way to fill a disk with one request.
55
+ // Capped batch: the client already coalesces and drops its own side, and an unbounded array here is a way to fill a
56
+ // disk with one request.
75
57
  export const ClientDiagnosticsReportSchema = z.object({
76
58
  events: z.array(ClientDiagnosticSchema).min(1).max(50).describe("What the browser has to report, oldest first."),
77
59
  });
@@ -79,8 +61,7 @@ export type ClientDiagnosticsReport = z.infer<typeof ClientDiagnosticsReportSche
79
61
  export const ClientDiagnosticsAcceptedSchema = z.object({
80
62
  recorded: z.number().describe("How many were written down."),
81
63
  });
82
- // A tab's self-report of what it is looking at, keyed by its /events connection's clientId. Full replace,
83
- // not a merge, an absent field means "cleared", so a tab leaving a file drops the path with the same report.
64
+ // A tab's self-report, keyed by its /events connection's clientId; full replace, not a merge — absent means cleared.
84
65
  export const PresenceReportSchema = z.object({
85
66
  clientId: z.string().describe("This connection's own id, the same one it gave the event stream."),
86
67
  idle: z.boolean().describe("Whether the person has stopped doing anything."),
@@ -1,47 +1,24 @@
1
1
  // loops: run a conversation again, and again, until a goal is met
2
2
  import { z } from "zod";
3
3
  import { STATE_DIR } from "@intentic/constants";
4
- import { OutputFieldsSchema } from "../output-fields.js";
4
+ import { OutputFieldsSchema } from "../policy/output-fields.js";
5
5
  import { AgentHarnessSchema, AgentProviderSchema, ConversationIdSchema, RepoBaseSchema } from "./agent.js";
6
6
  import { entryId } from "./internal.js";
7
- /* THE RALPH LOOP. An automation answers "run this at 3am"; a loop answers "run this until it is actually done".
8
- * The two are the opposite question and neither substitutes for the other: a schedule repeats on CADENCE and
9
- * never converges, a loop repeats on CONVERGENCE and stops the moment its goal is met.
10
- *
11
- * A loop is an ATTRIBUTE OF A CONVERSATION, not a new kind of object. It drives ordinary turns on an ordinary
12
- * fleet agent, which is what makes the worktree, the cost ledger, the transcript, the /agents card and the Stop
13
- * button work on it without a line of new code, the same bet the acceptance extension makes when it derives
14
- * conversation ids instead of owning session machinery.
15
- */
7
+ // A loop answers "run until actually done" (converges), unlike an automation's cadence ("run at 3am", repeats forever).
8
+ // It's an attribute of an ordinary conversation, not a new object, so the worktree, ledger, transcript and Stop button
9
+ // all just work.
16
10
 
17
- // How the next iteration meets its context, and the single most consequential field here.
18
- //
19
- // `fresh` is the canonical Ralph and the default: each iteration is a NEW provider session against the SAME
20
- // worktree, so the filesystem, not the transcript, is the memory. Immune to context rot, so iteration 20 reads
21
- // the tree as clearly as iteration 1, and it costs a re-read each time. The loop keeps a progress file for it
22
- // (see LOOP_DIR) precisely because nothing else carries forward.
23
- //
24
- // `continue` resumes the provider session, so an iteration is a follow-up prompt. Cheaper (the prefix caches)
25
- // and it keeps the reasoning, which is what a short refine-this loop wants. It degrades on long runs, and it
26
- // degrades in the direction that matters: a session that has spent eleven turns arguing for its own approach is
27
- // the worst available judge of whether that approach is finished.
11
+ // How the next iteration meets its context.
12
+ // fresh (default): a new provider session on the same worktree; immune to context rot, costs a re-read each time.
13
+ // continue: resumes the session; cheaper, keeps reasoning, but degrades on long runs.
28
14
  export const LoopContextSchema = z.enum(["fresh", "continue"]);
29
15
  export type LoopContext = z.infer<typeof LoopContextSchema>;
30
- /* WHAT THE LOOP PRODUCES, asked separately from what ends it, because they are separate questions and
31
- * conflating them is what makes a chain of sessions impossible to build.
32
- *
33
- * `none`, the loop produces nothing but its work. The classic "make the suite green": what it leaves behind
34
- * is a green suite, and asking it to also file a report is asking it to spend a turn on paperwork.
35
- * `claim`, the iteration writes `{done, reason, evidence?}`. Prose, but STRUCTURED prose: `done` is a boolean
36
- * the daemon reads rather than a sentence it has to interpret. Self-assessment, so advisory by construction,
37
- * it exists because plenty of goals have no command that can check them ("the README explains the auth
38
- * flow"), not because a model's word for it is worth much.
39
- * `json`, the iteration writes `{done, reason, data}` where `data` matches a declared field list. This is the
40
- * one that makes a step's output usable as the next step's input: a paragraph mentioning three files cannot
41
- * be fed to anything, `{files: [...]}` can.
42
- *
43
- * All three land in ONE file per iteration, with one shape, differing only in strictness. See LoopDocumentSchema.
44
- */
16
+ // What the loop produces, asked separately from what ends it (see `checks`), since conflating them blocks chaining
17
+ // loops together.
18
+ // none: nothing but the work itself.
19
+ // claim: structured self-report, `{done, reason, evidence?}`.
20
+ // json: a declared shape, `{done, reason, data}`, usable as the next step's input.
21
+ // All three land in one file per iteration (`LoopDocumentSchema`).
45
22
  export const LoopOutputSchema = z.discriminatedUnion("kind", [
46
23
  z.object({
47
24
  kind: z
@@ -67,18 +44,9 @@ export const LoopOutputSchema = z.discriminatedUnion("kind", [
67
44
  }),
68
45
  ]);
69
46
  export type LoopOutput = z.infer<typeof LoopOutputSchema>;
70
- /* WHAT ELSE HAS TO BE TRUE, checks that are not the worker's own word, ANDed with the output above.
71
- *
72
- * `command` is a shell one-liner run in the conversation's tree; exit 0 ⇒ satisfied. Deterministic, free, and
73
- * the only signal here whose answer does not come from a model. It is the automation `guard` with the sign
74
- * flipped, and it runs through the same runner. `pnpm test` passing beats any amount of self-report.
75
- *
76
- * `judge` puts a SEPARATE, tool-less call on the question: it reads the iteration's own report and rules
77
- * against a rubric, having done none of the work and nothing invested in it being finished.
78
- *
79
- * The rule both encode, and the reason they are kept apart from the output: the check must be a DIFFERENT CALL
80
- * from the work, or it is not a check. An output is what the worker says; a check is what someone else says.
81
- */
47
+ // What else has to be true, ANDed with the output above; must be a different call from the work, or it isn't a check.
48
+ // command: a shell one-liner in the tree; exit 0 means satisfied. Deterministic.
49
+ // judge: a separate, tool-less model call rules on the iteration's own report.
82
50
  export const LoopCheckSchema = z.discriminatedUnion("kind", [
83
51
  z.object({
84
52
  kind: z
@@ -88,7 +56,6 @@ export const LoopCheckSchema = z.discriminatedUnion("kind", [
88
56
  ),
89
57
  command: z.string().min(1).describe("The command to run in the conversation's own tree. Exiting cleanly means satisfied."),
90
58
  }),
91
- // The rubric is what the judge is asked; absent `model` runs it on the quick rung the other helpers use.
92
59
  z.object({
93
60
  kind: z
94
61
  .literal("judge")
@@ -100,52 +67,36 @@ export const LoopCheckSchema = z.discriminatedUnion("kind", [
100
67
  }),
101
68
  ]);
102
69
  export type LoopCheck = z.infer<typeof LoopCheckSchema>;
103
- /* THE VERDICT FILE an iteration writes, one shape for all three output kinds, because the loop reads it the
104
- * same way whatever was declared and only the validation of `data` differs.
105
- *
106
- * It is a FILE rather than a sentence in the reply for the reason every structured output in this codebase is
107
- * a file: a reply has to be parsed out of prose the model is simultaneously using to talk to a person, and the
108
- * two demands pull against each other until neither is served. A file has one job.
109
- */
70
+ // The verdict file every iteration writes, one shape for all three output kinds; a file, not a reply sentence, since
71
+ // parsing structure out of prose the model is also using to talk to a person serves neither well.
110
72
  export const LoopDocumentSchema = z.object({
111
- // Whether the goal is met NOW. The loop's own reading of this is the whole point of the file.
112
73
  done: z.boolean().describe("Whether the goal is met. Reading this is the whole point of the file."),
113
- // One line: why it is or is not met. The single most-read string in the feature, it is what the next
114
- // iteration reads first and what the history row shows.
115
74
  reason: z.string().describe("Why, in one line. The most-read sentence in the feature: the next round reads it first and the history shows it."),
116
- // What the iteration checked to know that. Optional because a model with nothing to point at should say so
117
- // by omitting it rather than by inventing a sentence.
118
75
  evidence: z
119
76
  .string()
120
77
  .optional()
121
78
  .describe(
122
79
  "What was checked to know that. Optional, so a round with nothing to point at says so by leaving it out rather than by inventing a sentence.",
123
80
  ),
124
- // The declared fields, present only for a `json` output and validated against them there.
125
81
  data: z
126
82
  .record(z.string(), z.unknown())
127
83
  .optional()
128
84
  .describe("The declared answer, for a loop that asked for one, checked against the shape it declared."),
129
85
  });
130
86
  export type LoopDocument = z.infer<typeof LoopDocumentSchema>;
131
- // Enough iterations for a real convergence, few enough that a misconfigured loop is a bounded mistake. A loop
132
- // that has not converged in 50 turns is not one iteration short of it.
87
+ // Bounds a misconfigured loop; one that hasn't converged in 50 rounds is not one round short of it.
133
88
  const LOOP_ITERATIONS_MAX = 50;
134
89
  export const LoopSchema = z.object({
135
- // The conversation the loop drives, its fleet card, its worktree, its transcript.
90
+ // Brings its fleet card, worktree and transcript for free.
136
91
  conversationId: ConversationIdSchema.describe(
137
92
  "The conversation to loop. It need not exist yet: naming a fresh one opens it, which is what lets run this until it passes be the first thing you ever say.",
138
93
  ),
139
- // What "done" means, in the user's words. Rides into every iteration's prompt (and into the judge's
140
- // question) so the model is told the goal it is being measured against rather than left to infer it.
141
94
  goal: z
142
95
  .string()
143
96
  .min(1)
144
97
  .describe(
145
98
  "What done means, in your words. It goes into every round's instructions and into the judge's question, so the model is told the bar rather than left to infer it.",
146
99
  ),
147
- // What each iteration is asked to DO. Separate from `goal` because they are different sentences: "make the
148
- // suite green" is the goal, "run the tests, pick the top failure, fix it" is the instruction.
149
100
  prompt: z
150
101
  .string()
151
102
  .min(1)
@@ -154,9 +105,6 @@ export const LoopSchema = z.object({
154
105
  "How each round meets the last. Starting fresh makes the files the memory rather than the conversation, so the twentieth round reads the tree as clearly as the first, and costs a re-read each time. Carrying on is cheaper and keeps the reasoning, which suits a short polish-this loop and degrades on long ones: a session that has spent eleven rounds arguing for its own approach is the worst available judge of whether that approach is finished.",
155
106
  ),
156
107
  output: LoopOutputSchema,
157
- /* Everything besides the worker's own word that has to hold before the loop may end. Ordinarily one or
158
- * none; a list because "the suite is green AND the report is written" is a real completion bar and
159
- * expressing it as two loops would run the work twice. */
160
108
  checks: z
161
109
  .array(LoopCheckSchema)
162
110
  .describe(
@@ -168,9 +116,6 @@ export const LoopSchema = z.object({
168
116
  .min(1)
169
117
  .max(LOOP_ITERATIONS_MAX)
170
118
  .describe("How many rounds before it gives up. A loop that has not got there in fifty is not one round short of it."),
171
- // The spend ceiling in USD across the whole loop, summed from the turns' own usage frames. Optional because
172
- // a 3-iteration loop does not need one; strongly wanted on anything unattended, since this is the first
173
- // feature in the sandbox that can spend without a person pressing anything between turns.
174
119
  maxSpendUsd: z
175
120
  .number()
176
121
  .positive()
@@ -178,12 +123,6 @@ export const LoopSchema = z.object({
178
123
  .describe(
179
124
  "A ceiling on what the whole loop may spend, in dollars. Optional for a short loop somebody is watching, and strongly wanted otherwise: this is the first thing here that can keep spending with nobody pressing anything between rounds.",
180
125
  ),
181
- /* Stop after this many CONSECUTIVE iterations that changed nothing in the tree.
182
- *
183
- * The guard that matters most in practice, and the one whose absence is expensive. The failure mode of a
184
- * loop is not runaway success, it is an agent that re-reads the same three files, restates the same plan,
185
- * declares more work remains, and does that eleven times. Nothing about that is an error, every turn
186
- * succeeds, so only "the tree did not move" catches it. */
187
126
  stallLimit: z
188
127
  .number()
189
128
  .int()
@@ -191,32 +130,23 @@ export const LoopSchema = z.object({
191
130
  .describe(
192
131
  "Stop after this many rounds in a row that changed nothing on disk. The guard that matters most: a loop's failure is not runaway success, it is an agent re-reading the same three files, restating the same plan and declaring more work remains, eleven times. Every one of those rounds succeeds, so only the tree not moving catches it.",
193
132
  ),
194
- // Whether the iterations run in the conversation's own worktree or on the shared tree. Recorded on the loop
195
- // rather than read off the conversation because a loop can OPEN one, and because it decides where the stop
196
- // command runs: a check against /work would be testing code an isolated loop has not landed yet.
197
133
  isolated: z
198
134
  .boolean()
199
135
  .describe(
200
136
  "Whether it works in the conversation's own private copy or in the shared tree. It also decides where a check runs: testing the shared tree would be testing code this loop has not merged yet.",
201
137
  ),
202
- // Which provider / harness / model the iterations run on; absent ⇒ the conversation's own last choice, then
203
- // the provider default. The same three passthroughs an automation carries, for the same reason: a headless
204
- // driver has no composer to read them from.
138
+ // Same three passthroughs as an automation: a headless driver has no composer to read them from. Absent falls back
139
+ // to the conversation's last choice, then the provider default.
205
140
  agent: AgentProviderSchema.optional().describe("Which provider the rounds run on. Absent falls back to the conversation's own last choice."),
206
141
  harness: AgentHarnessSchema.optional().describe("Which agentic loop they run on."),
207
142
  account: z.string().optional().describe("Which account pays."),
208
143
  model: z.string().optional().describe("Which model."),
209
- // Which persona the iterations act as (AgentTurnSchema.actsAs, read its note for why this is not spelled
210
- // `account`). The fourth passthrough an automation carries, and it matters here for the automation's
211
- // reason: every iteration is unattended, and an unattended turn with no persona reaches no logged-in
212
- // account at all, pinning a card is the one way a loop gets hands.
213
144
  actsAs: entryId
214
145
  .optional()
215
146
  .describe(
216
147
  "Which persona the rounds act as. It matters here: every round is unwatched, and an unwatched turn naming no persona reaches no signed-in account at all, so pinning one is how a loop gets hands.",
217
148
  ),
218
- // A workflow persists these on its underlying loop so restart recovery cannot silently change the checkout
219
- // or let a candidate inherit the sandbox's global auto-land posture on a later iteration.
149
+ // Also stops a later iteration from inheriting the sandbox's global auto-land posture.
220
150
  worktreeBase: z
221
151
  .array(RepoBaseSchema)
222
152
  .min(1)
@@ -226,22 +156,12 @@ export const LoopSchema = z.object({
226
156
  autoLand: z.boolean().optional().describe("Whether the work merges as it goes."),
227
157
  });
228
158
  export type Loop = z.infer<typeof LoopSchema>;
229
- // Can this loop ever end on its own terms? A loop with nothing to produce and nothing to check runs to its
230
- // iteration ceiling and reports `exhausted`, having been unable to succeed from the moment it was configured.
231
- // A predicate rather than a schema refinement because two routes want it as one, at different moments: `start`
232
- // refuses an ad-hoc loop, and `saveDesign` refuses a SAVED one, which is the more valuable of the two, since a
233
- // saved loop that cannot converge is a trap everyone who picks it afterwards pays a full run to discover.
159
+ // A loop with nothing to produce and nothing to check can only run to `exhausted`. A predicate, not a schema
160
+ // refinement, since both `start` and `saveDesign` need it at different moments.
234
161
  export const loopCanConverge = (loop: Pick<Loop, "output" | "checks">): boolean => loop.output.kind !== "none" || loop.checks.length > 0;
235
- /* Where a loop keeps what it must not lose between iterations: <workspace>/.intentic/records/artifacts/loops/<conversationId>/.
236
- *
237
- * Under `.intentic` for the reason the acceptance runs are, it is outside every repo and bound back SHARED
238
- * into an isolated turn's worktree, so the agent writes and the browser reads the same tree, with nothing to
239
- * land and no git noise. `progress.md` is the loop's memory in `fresh` mode and its audit trail in `continue`
240
- * mode; `iteration-<n>.json` is the verdict a `claim` stop reads. */
162
+ // Shared into an isolated turn's worktree (outside every repo, no git noise). `progress.md` is the loop's memory in
163
+ // `fresh` mode, its audit trail in `continue`; `iteration-<n>.json` is the verdict a `claim` stop reads.
241
164
  export const LOOP_DIR = `${STATE_DIR}/records/artifacts/loops`;
242
- // Why an iteration ended, which is not the same question as how the LOOP ended. `continue` is the ordinary
243
- // "not done yet"; `error` is a turn that surfaced an error frame, which does NOT end the loop by itself, a
244
- // failing turn is often exactly what the next iteration is supposed to fix.
245
165
  export const LoopIterationSchema = z.object({
246
166
  n: z.number().int().min(1).describe("Which round this was."),
247
167
  at: z.number().describe("When it ran, in milliseconds."),
@@ -250,31 +170,22 @@ export const LoopIterationSchema = z.object({
250
170
  .describe(
251
171
  "How the round ended, which is not the same question as how the loop did. A round that errored does not end the loop by itself: a failing turn is often exactly what the next round is meant to fix.",
252
172
  ),
253
- // The stop check's own words, the guard's output tail, the claim's reason, the judge's verdict. What the
254
- // run history is actually read for: "why did it keep going" and "why did it stop".
255
173
  detail: z
256
174
  .string()
257
175
  .optional()
258
176
  .describe("What the check said, in its own words. What a run history is actually read for: why it kept going, and why it stopped."),
259
177
  costUsd: z.number().optional().describe("What the round cost, in dollars."),
260
- // Whether the tree moved this iteration. Feeds the stall detector, and is worth showing per row: three
261
- // unchanged iterations in a history is the shape of a loop that is not working.
262
178
  changed: z.boolean().describe("Whether anything on disk moved. Three unchanged rounds in a row is the shape of a loop that is not working."),
263
- // The provider session this iteration ran on, the door from a history row to a readable transcript.
264
179
  sessionId: z.string().optional().describe("The session it ran on, and the way from a history row to a readable record."),
265
180
  });
266
181
  export type LoopIteration = z.infer<typeof LoopIterationSchema>;
267
- /* How a loop ended, and every one of these is a distinct thing to tell the user.
268
- *
269
- * `done`, the stop condition was met. The only success.
270
- * `exhausted`, maxIterations ran out with the goal unmet.
271
- * `stalled`, stallLimit consecutive iterations changed nothing. Reported apart from `exhausted` because the
272
- * remedy is different: exhausted says "give it more room", stalled says "it is not making progress and more
273
- * room will not help".
274
- * `overspent`, maxSpendUsd was reached.
275
- * `stopped`, the user pressed Stop.
276
- * `error`, the loop itself failed (not a turn inside it; see LoopIteration.outcome).
277
- */
182
+ // How a loop ended:
183
+ // done: the stop condition was met.
184
+ // exhausted: maxIterations ran out, goal unmet.
185
+ // stalled: stallLimit consecutive no-op iterations — more room won't help, unlike exhausted.
186
+ // overspent: maxSpendUsd reached.
187
+ // stopped: the user pressed Stop.
188
+ // error: the loop itself failed, not a turn inside it (see `LoopIteration.outcome`).
278
189
  export const LoopStateSchema = z.enum(["running", "done", "exhausted", "stalled", "overspent", "stopped", "error"]);
279
190
  export type LoopState = z.infer<typeof LoopStateSchema>;
280
191
  export const LoopRecordSchema = LoopSchema.extend({
@@ -283,13 +194,7 @@ export const LoopRecordSchema = LoopSchema.extend({
283
194
  ),
284
195
  startedAt: z.number().describe("When it began, in milliseconds."),
285
196
  endedAt: z.number().optional().describe("When it ended, in milliseconds."),
286
- /* How many times a daemon BOOT has picked this loop back up. The record is its own journal: a loop still
287
- * marked `running` at boot is exactly one the daemon died under, which is the same trick turn-journal.ts
288
- * plays with its files and needs no second store to play it.
289
- *
290
- * Counted, not just flagged, for the reason the turn journal counts its attempts, a loop whose iteration
291
- * reliably kills the daemon (an OOM in a test it keeps running) would otherwise be resurrected on every
292
- * boot forever, and the container is recreated on every sandbox update. */
197
+ // The record is its own boot journal; still `running` at boot means the daemon died mid-loop.
293
198
  resumed: z
294
199
  .number()
295
200
  .int()
@@ -297,8 +202,7 @@ export const LoopRecordSchema = LoopSchema.extend({
297
202
  .describe(
298
203
  "How many times the sandbox restarted under it and picked it back up. Counted rather than flagged, so a loop whose round reliably kills the sandbox is not resurrected on every boot for ever.",
299
204
  ),
300
- // Why the loop ended, for the states whose reason isn't in their name (`error`, and a `done` whose stop
301
- // check said something worth keeping).
205
+ // Mainly `error`, and a `done` whose check said something worth keeping.
302
206
  detail: z.string().optional().describe("Why it ended, for the endings whose reason is not in their name."),
303
207
  iterations: z
304
208
  .array(LoopIterationSchema)
@@ -309,33 +213,14 @@ export const LoopsListSchema = z.object({
309
213
  loops: z.array(LoopRecordSchema).describe("Every loop this workspace has run, newest first, kept after they end."),
310
214
  });
311
215
  export const LoopIdParamSchema = z.object({ conversationId: ConversationIdSchema.describe("Which conversation's loop.") });
312
- /* ---- saved loops: the machinery, kept; the job, typed fresh each time ----
313
- *
314
- * A SAVED LOOP IS A LOOP WITH ITS GOAL TAKEN OUT, and that subtraction is the whole idea. Everything a loop
315
- * needs besides "what are we doing" is the same every time somebody sets one up, end on `pnpm test`, fresh
316
- * context, eight rounds, five dollars, stop after two idle ones, and every one of those was being retyped, in
317
- * a modal, before any work could begin. The goal is the only field that is genuinely new each time, and it is
318
- * the one field the user has ALREADY WRITTEN: it is sitting in the composer.
319
- *
320
- * So this holds the machinery and the composer holds the job, which makes a loop the same gesture as a
321
- * workflow, pick the shape, type the request, send. `WorkflowSchema` and this are deliberately siblings: both
322
- * are designs, both are picked from the composer, both leave the sentence to the message. What a workflow
323
- * spreads across sessions, a loop repeats in one.
324
- *
325
- * NO `conversationId` AND NO `isolated`, unlike the Loop this becomes. Both are facts about the agent the loop
326
- * is aimed at, decided at the moment of sending and unknowable when the design is written, a saved loop that
327
- * remembered a conversation would be a loop that could only ever be run once.
328
- */
216
+ // A saved loop is a loop with its goal removed: the machinery (checks, output, limits) is reused, the composer supplies
217
+ // the goal at send time, the same relationship `WorkflowSchema` has to a workflow. No `conversationId`/`isolated`: both
218
+ // are facts about the agent aimed at, unknowable when the design is written.
329
219
  export const LoopDesignSchema = z.object({
330
220
  id: entryId.describe("The design's id."),
331
- // What it is called on the composer badge and in the picker, so it has to survive being read at pill width.
332
221
  name: z.string().min(1).max(60).describe("What to call it. Short, because it has to be readable on a small badge."),
333
- // One line: what this loop is FOR. Optional, because a well-named loop has already said it.
334
222
  description: z.string().max(280).optional().describe("What it is for, in one line. Optional, because a well-named loop has already said it."),
335
- /* What each iteration is asked to do, when that is worth saying twice. Optional for the reason the ad-hoc
336
- * form made it optional: `goal` and `prompt` are different sentences, but making somebody write both before
337
- * anything runs doubles the cost of trying a loop at all. Absent ⇒ the iteration works towards the goal
338
- * however it sees fit. */
223
+ // Optional so trying a loop doesn't require writing two sentences before anything runs.
339
224
  prompt: z
340
225
  .string()
341
226
  .optional()
@@ -355,8 +240,8 @@ export const LoopDesignsListSchema = z.object({
355
240
  .array(LoopDesignSchema)
356
241
  .describe("Saved loops: the machinery with the goal left out, so one design can be pointed at a different job every time."),
357
242
  });
358
- // Create and update on one route with the intent spelled out, exactly as a workflow saves, so an id collision
359
- // cannot silently turn "new loop" into "replace the one you had".
243
+ // One route for create and update, like a workflow save, with intent spelled out rather than inferred from an id
244
+ // collision.
360
245
  export const LoopDesignSaveSchema = z.object({
361
246
  design: LoopDesignSchema.describe("The design to write."),
362
247
  create: z
@@ -366,9 +251,8 @@ export const LoopDesignSaveSchema = z.object({
366
251
  ),
367
252
  });
368
253
  export const LoopDesignIdParamSchema = z.object({ id: entryId.describe("Which saved loop.") });
369
- /* The design, aimed at an agent, the one conversion in the feature, kept here so the composer and anything
370
- * else that starts a saved loop cannot disagree about what a saved loop MEANS. The goal is the message the user
371
- * typed; `isolated` is a fact about the agent it is aimed at. */
254
+ // Turns a design into a runnable loop; kept here so nothing that starts a saved loop can disagree about what one means.
255
+ // `goal` is the user's message; `isolated` is a fact about the agent aimed at.
372
256
  export const loopFromDesign = (design: LoopDesign, aim: { conversationId: string; goal: string; isolated: boolean }): Loop => ({
373
257
  conversationId: aim.conversationId,
374
258
  goal: aim.goal,
@@ -381,9 +265,8 @@ export const loopFromDesign = (design: LoopDesign, aim: { conversationId: string
381
265
  stallLimit: design.stallLimit,
382
266
  isolated: aim.isolated,
383
267
  });
384
- /* HOW A SAVED LOOP ENDS, IN ONE LINE, the sentence under its name in the picker and on its card, computed
385
- * rather than stored so the two can never describe the same loop differently. Ordered as it is read: the bar it
386
- * has to clear first, then how far it may go trying. */
268
+ // One-line summary for the picker/card, computed rather than stored so the two can't disagree; ordered as read: the bar
269
+ // first, then how far it may try.
387
270
  export const loopDesignLine = (design: LoopDesign): string => {
388
271
  const command = design.checks.find((check) => check.kind === "command");
389
272
  const ends =