@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
package/src/model-pins.ts DELETED
@@ -1,183 +0,0 @@
1
- import { accessFor, modelsFor, PROVIDERS } from "./agent-catalog.js";
2
- import { ACCESS_COST } from "./provider-specs.js";
3
- import { compareCheapestFirst, familyOf, tierRankOf } from "./model-order.js";
4
- import { type ModelRole, modelRole } from "./model-roles.js";
5
- import type { AgentProvider, ModelPin } from "./schemas/agent.js";
6
-
7
- /* WHICH MODELS A ROLE MAY RUN, IN THE ORDER TO TRY THEM. One resolver over every list in
8
- * settings.modelRoles, and the browser and the daemon both read it.
9
- *
10
- * IT IS AN ORDER, NOT A MODEL, and that is the shape of every list this file answers for. A single pick is a
11
- * single point of failure: the account it names spends its allowance on the chat all morning, and the role
12
- * fails on a limit for the rest of the day while three other connected providers sit idle. So a setting is a
13
- * LIST read top to bottom, this hands back the whole ladder, and the caller walks it until one answers. Nothing
14
- * here decides WHICH failures are worth stepping over — only the runner has made the call and seen it fail —
15
- * this side says what the running order is.
16
- *
17
- * THE RULE LIVES IN THE CONTRACT because both sides need the same answer for different jobs: the daemon runs
18
- * the model, and the browser has to NAME it, in the settings row's "Auto: …" line, before anything has run. Two
19
- * implementations would drift precisely where it matters most, since a row promising Haiku while the daemon
20
- * bills Opus is worse than no row at all.
21
- *
22
- * WHAT AN EMPTY LIST MEANS IS THE ROLE'S OWN ANSWER (model-roles.ts): a `helper` role derives the Auto ladder
23
- * from whatever is connected, a `run` role resolves to nothing and lets the caller's floor answer. That fork
24
- * used to be two near-identical files; it is one line here because it was always one difference. */
25
-
26
- /* One provider's standing in the decision: whether a turn on it can be sent at all, and what its catalog holds.
27
- *
28
- * ACP agents are deliberately not expressible here — an ACP row's model id is empty because the agent owns its
29
- * own model, so there is no rung to point it at. `endpoint/<id>` providers ARE, and have to be: their models
30
- * appear in the same picker the settings rows build their options from, so a pin naming one has to hold rather
31
- * than fall silently back to Auto and spend an account the user was deliberately steering away from. */
32
- export interface ModelSource {
33
- // AgentProvider, not NativeProvider: an endpoint's id is user-created and cannot be in a fixed union. Auto's
34
- // ranking degrades gracefully for one, costOf falls to the metered rung and an id with no tier word is
35
- // UNRANKED, which is genuine last place, so an endpoint effectively only wins Auto when nothing else is
36
- // connected, while a PIN on one holds. Both are the right answers: what a turn on someone's own model server
37
- // costs is not a fact this repo can know, so it is not one Auto should be asserting.
38
- readonly provider: AgentProvider;
39
- // The same connection predicate every other surface gates on (access.ts web-side, the daemon's own account
40
- // stores daemon-side). A catalog is never empty by construction, so "has rows" says nothing about "can send".
41
- readonly ready: boolean;
42
- readonly models: readonly string[];
43
- }
44
-
45
- export interface ModelChoice {
46
- readonly provider: AgentProvider;
47
- readonly model: string;
48
- }
49
-
50
- // A (provider, model) pair on the wire: `${provider}:${modelId}`, the same key shape the model picker mints for
51
- // its entries (PickerEntry.key). Every role list stores PINS rather than these keys — an entry says how it runs
52
- // as well as which model it is — but the key is still how two entries are compared, how a role list dedupes,
53
- // and how `autoFastModels` (which pins no knobs, see its own note in settings.ts) is stored.
54
- export const modelPinKey = (choice: ModelChoice): string => `${choice.provider}:${choice.model}`;
55
-
56
- /* Split on the FIRST colon only: a provider id never contains one and a model id might. Exported because
57
- * `autoFastModels` stores these keys, and because a session composed from a pin travels as one
58
- * (composeSession). */
59
- export const parsePinned = (pinned: string): ModelChoice | undefined => {
60
- const separator = pinned.indexOf(`:`);
61
- if (separator <= 0 || separator === pinned.length - 1) {
62
- return undefined;
63
- }
64
- return { provider: pinned.slice(0, separator), model: pinned.slice(separator + 1) };
65
- };
66
-
67
- /* A pin as a person reads it: the catalog's own label for the id, or the id itself for one the static catalog
68
- * has not caught up with (the picker offers a custom-id escape hatch, so this is a real case rather than a
69
- * defensive branch). Beside parsePinned because the two are always wanted together, by any surface that has to
70
- * name what a click is about to spend BEFORE it spends it, and the two loudest of those are extensions that
71
- * share no other code with each other. */
72
- export const pinnedModelLabel = (choice: ModelChoice): string =>
73
- modelsFor(choice.provider).find((option) => option.value === choice.model)?.label ?? choice.model;
74
-
75
- // The cheapest row a provider publishes, its whole catalog read from the cheap end. Undefined for a catalog
76
- // that hasn't loaded yet, which is a real state: every provider serves a floor, but only once something has
77
- // asked it.
78
- const cheapestOf = (source: ModelSource): string | undefined => source.models.toSorted(compareCheapestFirst)[0];
79
-
80
- // Where a provider's cheapest row sits on the shared tier scale, and therefore how well it answers the question
81
- // Auto asks. UNRANKED (-1) is a genuine last place: it means the id carries no tier word we know, so the row is
82
- // the provider's base line rather than its budget one.
83
- const tierOf = (model: string): number => tierRankOf(familyOf(model));
84
-
85
- // PROVIDERS order, as the final tiebreak. Arbitrary, but the SAME arbitrary answer on every read, the property
86
- // compareUnrankedModelIds exists to guarantee, and the one a default actually needs. An endpoint is in no fixed
87
- // list, so it reads -1 and leads the tiebreak; unreachable in practice, since it can never tie on cost.
88
- const providerOrder = (provider: AgentProvider): number => PROVIDERS.findIndex((entry) => entry.value === provider);
89
-
90
- /* WHAT AN ENDPOINT COSTS, one rung past every provider's, and the reason it is a number here rather than a
91
- * member of AccessKind. That axis describes the providers this repo ships, and every one of them is unlocked by
92
- * signing in to something the user already holds, so none of them is metered per call. An endpoint is the
93
- * opposite: whatever gateway somebody pointed us at, whose bill this repo cannot see. Reading it as dearer than
94
- * anything on the table is the conservative answer, and it is what keeps Auto from reaching for a paid gateway
95
- * on its own initiative. */
96
- const METERED_COST = Math.max(...Object.values(ACCESS_COST)) + 1;
97
-
98
- // How much a call on this provider costs at the margin. Every native provider declares an access kind; an
99
- // endpoint declares none, and takes the metered rung above.
100
- const costOf = (provider: AgentProvider): number => {
101
- const access = accessFor(provider);
102
- return access === undefined ? METERED_COST : ACCESS_COST[access.kind];
103
- };
104
-
105
- /* AUTO, every connected provider's cheapest row, best-first, as a ladder rather than a winner. The floor under
106
- * every `helper` role, and under nothing else.
107
- *
108
- * Ranked on TIER FIRST, then cost. That order is the point: a helper's Auto exists to not be the frontier
109
- * model, so a free flagship is still the wrong tool, while a free Haiku-class row and a subscription
110
- * Haiku-class row differ only in whose quota they spend. Cost then breaks that tie towards the channel the user
111
- * is not paying per token for, and against the one they are.
112
- *
113
- * NOTE WHAT AUTO IS AND IS NOT AN ARGUMENT FOR. It is the answer for an owner who has said nothing, not a claim
114
- * that cheap is right: an owner who pins Opus to commit messages is not being talked out of it, which is the
115
- * whole reason these lists are per role. Auto is what a row says while it is empty.
116
- *
117
- * The whole ladder, not just its head, because the same ranking that picks the best answer also states the best
118
- * SECOND answer, and a sandbox with three accounts connected should not lose its commit messages for six hours
119
- * because one of them is spent. */
120
- export const autoLadder = (sources: readonly ModelSource[]): readonly ModelPin[] =>
121
- sources
122
- .filter((source) => source.ready)
123
- .flatMap((source) => {
124
- const model = cheapestOf(source);
125
- return model === undefined ? [] : [{ provider: source.provider, model }];
126
- })
127
- .toSorted(
128
- (left, right) =>
129
- tierOf(right.model) - tierOf(left.model) ||
130
- costOf(left.provider) - costOf(right.provider) ||
131
- providerOrder(left.provider) - providerOrder(right.provider),
132
- );
133
-
134
- /* WHICH MODELS THIS ROLE MAY RUN, IN THE ORDER TO TRY THEM, given what this sandbox has connected.
135
- * `pinned` is the stored setting: settings.modelRoles[role], an ordered list of pins, empty for the role's own
136
- * floor.
137
- *
138
- * A pin only holds while its provider is READY: an account the user disconnected would otherwise sit at the
139
- * head of the chain failing on a credential error, when the sandbox can plainly still answer. Dropping it is
140
- * the same move the composer already makes when a live catalog stops offering the selected model. It stays on
141
- * SCREEN, greyed — the settings row renders the stored list, not this one — because a setting that vanished
142
- * from view would look like the app had eaten it.
143
- *
144
- * THE PINNED LIST IS THE WHOLE ANSWER whenever any of it survives that filter. The floor is NOT appended
145
- * underneath, and that is deliberate: a user who writes down three models has said which accounts this job may
146
- * spend, and quietly reaching for a fourth when all three are out is exactly the "spend an account they were
147
- * steering away from" failure a pin exists to prevent. When NONE of the pins is connected any more the list has
148
- * stopped saying anything about this sandbox, so the floor takes over rather than leaving a dead button.
149
- *
150
- * THE WHOLE PIN SURVIVES, not the pair inside it: an entry's effort, thinking, speed and harness are what the
151
- * work is composed from, so a resolver handing back a bare (provider, model) would silently run the head of the
152
- * list at the provider's defaults. Nothing here reads or judges those fields, which is the point of carrying
153
- * them whole.
154
- *
155
- * Empty out means the role has nothing it can reach. For a `helper` that is a sandbox with nothing connected at
156
- * all, and the caller renders a control that says so rather than a live button that fails on click; for a `run`
157
- * it is the ordinary state of an unpinned role, and the caller's own floor answers. */
158
- export const resolveRoleModels = (sources: readonly ModelSource[], pinned: readonly ModelPin[], role: ModelRole): readonly ModelPin[] => {
159
- const ready = new Set(sources.filter((source) => source.ready).map((source) => source.provider));
160
- // Taken verbatim, unvalidated against the catalog on purpose: the picker offers a custom-id escape hatch for
161
- // a model a catalog hasn't caught up with, and second-guessing the user's own id here would silently run a
162
- // different model than the settings row names.
163
- const requested = pinned.filter((pin) => ready.has(pin.provider));
164
- /* The same model twice would spend two attempts proving one account is out — a real state, since the list is
165
- * hand-edited and Auto's ladder can rank a provider the user has also pinned.
166
- *
167
- * THE FIRST OF A PAIR WINS, WHOLE. Two entries can name one model and differ in their knobs (the same Sonnet
168
- * at Max and again at Low, written while reordering the list), and the one the user reads first is the one
169
- * they meant; keeping the earlier position with the later entry's effort would run a tier that appears
170
- * nowhere the pin does. */
171
- const chain: ModelPin[] = [];
172
- for (const pin of requested) {
173
- if (!chain.some((held) => modelPinKey(held) === modelPinKey(pin))) {
174
- chain.push(pin);
175
- }
176
- }
177
- if (chain.length > 0) {
178
- return chain;
179
- }
180
- // The floor, which the role declares. An id outside the table has no floor to fall to, and answering with
181
- // the cheapest connected model for it would be this file inventing a job.
182
- return modelRole(role)?.kind === `helper` ? autoLadder(sources) : [];
183
- };
@@ -1,224 +0,0 @@
1
- import { z } from "zod";
2
-
3
- /* EVERY JOB IN THIS SANDBOX THAT PICKS A MODEL, LISTED BY THE JOB IT IS, one row per answer the owner is
4
- * entitled to give differently.
5
- *
6
- * WHAT THIS REPLACED, and why it had to go. Model settings used to be grouped by how HARD the work was assumed
7
- * to be: a "quick model" for the small automatic jobs, an "agent runs" tier for the big ones. Both names
8
- * described an intensity rather than a job, and an intensity is a guess somebody else made about work the owner
9
- * knows better. A commit message written by a frontier model is not a mistake, it is a preference, and the
10
- * grouping made it unsayable: pinning Opus to get better commit subjects also pinned it to session titles, to
11
- * every loop verdict, and to the safety judge. One bundled row could not say the thing anyone actually wanted
12
- * to say.
13
- *
14
- * SO THE UNIT IS THE ROLE. Each entry here is one place a model gets chosen, and each gets its own ordered list
15
- * in settings.modelRoles. Seventeen rows is more than four, and that is the point rather than a cost being
16
- * absorbed: the configuration and the UI both already existed per use-case, and collapsing them was the only
17
- * thing standing between the owner and a choice the machinery could already honour. A simpler face over this
18
- * (presets: "cheap everywhere", "frontier everywhere") is a thing that can be built ON TOP of a true model, and
19
- * cannot be unpicked from a lossy one.
20
- *
21
- * EVERY LIST IS AN ORDERED LADDER, whatever the role, and for one reason: the interesting failure of a pinned
22
- * model is not that it is wrong, it is that it is CONNECTED AND WILL NOT ANSWER TODAY. The account's allowance
23
- * went on the chat this morning, and one spent provider takes the role down for hours while three others sit
24
- * idle. Written in order, the next entry catches it.
25
- *
26
- * TWO KINDS, and the only thing that separates them is what an EMPTY list means. That is a real fork rather
27
- * than a leftover of the old grouping, and it is declared per role because it is a property of the job:
28
- *
29
- * helper — a one-shot. One prompt, no tools, one string back, and it is over. An empty list resolves to the
30
- * AUTO LADDER: every connected provider's cheapest row, best-first (model-pins.ts). Deriving is the
31
- * right default here because the job is small and repeatable, so the cost of a wrong guess is one
32
- * cheap call, and because a derived answer improves by itself when an account is connected tomorrow.
33
- *
34
- * run — a whole session with tools and a worktree, started by a surface rather than by a person at a
35
- * composer. An empty list resolves to NOTHING, and the caller's own floor answers: the model the
36
- * owner picked for their chat. Nothing here can judge whether a job is worth the frontier tier, and
37
- * a wrong guess is billed in whole sessions rather than in tokens, so the honest fallback is a
38
- * choice they made rather than one this table invented.
39
- *
40
- * EVERY ENTRY IS A FULL PIN (ModelPinSchema): which model, and how it runs — effort, thinking, speed, harness.
41
- * The helper roles carry them too, which they did not use to: a one-shot ran with reasoning forcibly off, so
42
- * pinning a reasoning model to commit messages bought the price of one and the behaviour of neither. The knobs
43
- * now ride through the one-shot path (the daemon's role-model.ts), so an entry means what it says wherever it
44
- * is written.
45
- *
46
- * ADDING A ROLE IS ONE ROW HERE. The settings key, the resolver's floor, the daemon's lookup and the settings
47
- * page's row all read this table, so a job that starts picking a model tomorrow becomes configurable by saying
48
- * what it is. That is the property the old grouping cost: a new surface inherited "agent runs" by being
49
- * unattended, which is how a documentation sweep and a production incident came to share one tier. */
50
-
51
- export const ModelRoleKindSchema = z.enum(["helper", "run"]);
52
- export type ModelRoleKind = z.infer<typeof ModelRoleKindSchema>;
53
-
54
- /* The shape of a row. `id` is a bare string HERE and narrowed on the exported type below, because the id union
55
- * is derived from this very table: a self-referential `satisfies` would be a type that has to know its own
56
- * answer before it can check it. */
57
- interface ModelRoleRow {
58
- readonly id: string;
59
- // What the settings row is called. A JOB, in the owner's words, never a tier.
60
- readonly label: string;
61
- // The row's one line: what this model is asked to do. Read beside the label, so it says what the label
62
- // cannot rather than restating it.
63
- readonly blurb: string;
64
- readonly kind: ModelRoleKind;
65
- // The row's glyph, from the shared icon set. Here rather than in a web-side map because the whole value of
66
- // this table is that a role is declared ONCE; a second table keyed by the same ids is the drift this
67
- // replaced, moved one layer up.
68
- readonly icon: string;
69
- }
70
-
71
- /* THE TABLE. Ordered as the settings page draws it, and the order is an argument about reach: the one-shots
72
- * first, because nobody chose a model for them and they run constantly; then the runs somebody's click starts;
73
- * then the runs that start themselves, which are the ones an owner is least likely to be watching and most
74
- * likely to want held to a budget.
75
- *
76
- * The ids are the wire vocabulary: a turn carries one (AgentTurn.runRole), so they are kebab-case and stable,
77
- * and renaming one is a breaking change to the setting rather than a cosmetic edit. */
78
- export const MODEL_ROLES = [
79
- {
80
- id: "commit-message",
81
- label: "Commit messages",
82
- blurb: "The subject written when an agent's work lands, and the release note under it.",
83
- kind: "helper",
84
- icon: "file-edit",
85
- },
86
- {
87
- id: "session-title",
88
- label: "Session titles",
89
- blurb: "The name a conversation wears on the board, written a second into its first turn.",
90
- kind: "helper",
91
- icon: "pencil",
92
- },
93
- {
94
- /* THE ONE HELPER WHOSE INPUT IS ADVERSARIAL, and the reason the old bundling was worst here. Its prompt
95
- * contains a command the agent is about to run, which may have arrived from a stranger's web page, and a
96
- * small model can be talked round by it. Being wrong is expensive in both directions: a needless card
97
- * teaches the owner to click through the next one. */
98
- id: "safety-judge",
99
- label: "Safety judge",
100
- blurb: "Which model reads your safety policy before a flagged command runs.",
101
- kind: "helper",
102
- icon: "shield",
103
- },
104
- {
105
- id: "loop-verdict",
106
- label: "Loop verdicts",
107
- blurb: "Whether a loop's iteration met the goal, or the loop goes round again.",
108
- kind: "helper",
109
- icon: "check-square",
110
- },
111
- {
112
- id: "pipeline-fix",
113
- label: "Pipeline fixes",
114
- blurb: "The agent started by Fix on a red pipeline.",
115
- kind: "run",
116
- icon: "wave-pulse",
117
- },
118
- {
119
- id: "deployment-fix",
120
- label: "Deployment fixes",
121
- blurb: "The agent started by Fix on a deployment that is down.",
122
- kind: "run",
123
- icon: "server",
124
- },
125
- {
126
- id: "maintenance-chore",
127
- label: "Maintenance chores",
128
- blurb: "A chore run started from the Maintenance board.",
129
- kind: "run",
130
- icon: "wrench",
131
- },
132
- {
133
- id: "documentation-run",
134
- label: "Documentation runs",
135
- blurb: "A pass over a repo's own documentation.",
136
- kind: "run",
137
- icon: "book",
138
- },
139
- {
140
- id: "acceptance-run",
141
- label: "Acceptance runs",
142
- blurb: "One session per story in an acceptance fan-out.",
143
- kind: "run",
144
- icon: "list-check",
145
- },
146
- {
147
- id: "pre-push-fix",
148
- label: "Pre-push fixes",
149
- blurb: "The fix proposed when a check fails on the way to a push.",
150
- kind: "run",
151
- icon: "cloud-upload",
152
- },
153
- {
154
- id: "automation-wake",
155
- label: "Automation wakes",
156
- blurb: "A turn an automation fires: a schedule, a webhook, a message from outside.",
157
- kind: "run",
158
- icon: "clock",
159
- },
160
- {
161
- id: "approval-queue",
162
- label: "Approvals queue",
163
- blurb: "The turn that publishes or acts on what you approved.",
164
- kind: "run",
165
- icon: "check-circle",
166
- },
167
- {
168
- id: "extension-review",
169
- label: "Extension update reviews",
170
- blurb: "The agent that reads an extension update before it is applied.",
171
- kind: "run",
172
- icon: "box",
173
- },
174
- {
175
- id: "loop-iteration",
176
- label: "Loop iterations",
177
- blurb: "Each round of a loop working towards its goal.",
178
- kind: "run",
179
- icon: "repeat",
180
- },
181
- {
182
- id: "watch-wake",
183
- label: "Watch wakes",
184
- blurb: "The turn a watch starts when the thing it was watching happens.",
185
- kind: "run",
186
- icon: "eye",
187
- },
188
- {
189
- id: "verify-nudge",
190
- label: "Verify nudges",
191
- blurb: "The follow-up turn sent when work was left unverified.",
192
- kind: "run",
193
- icon: "search",
194
- },
195
- {
196
- /* THE ONE ROLE THAT ANSWERS A CHOICE RATHER THAN FILLING A SILENCE. A spawning agent may name its
197
- * child's provider, and when it does that wins, exactly as a caret pick wins on every other run role.
198
- * This is what answers when it names none, which used to be a hardcoded "claude". */
199
- id: "child-agent",
200
- label: "Child agents",
201
- blurb: "What an agent's own subagents run on when it names no model for them.",
202
- kind: "run",
203
- icon: "users",
204
- },
205
- ] as const satisfies readonly ModelRoleRow[];
206
-
207
- export type ModelRole = (typeof MODEL_ROLES)[number]["id"];
208
- export type ModelRoleSpec = ModelRoleRow & { readonly id: ModelRole };
209
-
210
- export const MODEL_ROLE_IDS = MODEL_ROLES.map((role) => role.id) as readonly ModelRole[];
211
-
212
- /* The wire form. An enum rather than a string, unlike most ids in this contract, because there is no case for
213
- * an unknown one: a role is a place in THIS codebase where a model gets chosen, so a value outside the table
214
- * names nothing, and a settings file or a turn carrying one is a typo worth a clean error rather than a list
215
- * silently ignored. */
216
- export const ModelRoleSchema = z.enum(MODEL_ROLE_IDS as [ModelRole, ...ModelRole[]]);
217
-
218
- const BY_ID = new Map<string, ModelRoleSpec>(MODEL_ROLES.map((role) => [role.id, role]));
219
-
220
- /** What this role is, or undefined for an id no build of this table declares. */
221
- export const modelRole = (id: string): ModelRoleSpec | undefined => BY_ID.get(id);
222
-
223
- /** The roles of one kind, in table order: the two blocks the settings page draws. */
224
- export const modelRolesOfKind = (kind: ModelRoleKind): readonly ModelRoleSpec[] => MODEL_ROLES.filter((role) => role.kind === kind);
@@ -1,14 +0,0 @@
1
- import { z } from "zod";
2
-
3
- /* ONE "DO THIS BY HAND" LINE, the honesty unit three surfaces share: what an arrival could not do for the
4
- * owner (arrival.ts), what a derived definition could not express (definition.ts), and where a runner has
5
- * drifted from its parent (runner-protocol.ts). A subject the UI bolds, a detail written as an instruction.
6
- *
7
- * It lives in its own leaf module because runner-protocol.ts speaks it, and THAT file is imported by
8
- * schemas/agent.ts, which definition.ts imports — the schema living in definition.ts made a cycle that left
9
- * schemas half-initialized under module-eval.
10
- *
11
- * The name says the FIELD it fills (`needsAction`) rather than any one surface, because naming it for the
12
- * definition is what let the arrival surfaces drift apart in the first place. */
13
- export const NeedsActionSchema = z.object({ subject: z.string(), detail: z.string() });
14
- export type NeedsAction = z.infer<typeof NeedsActionSchema>;
@@ -1,111 +0,0 @@
1
- import { z } from "zod";
2
-
3
- /* A DECLARED OUTPUT SHAPE, the answer to "what does this session produce?", written once and used three ways.
4
- *
5
- * An agentic session's natural output is prose, and prose is unusable as an input to the next session: a step
6
- * that must hand "the three files worth changing" to the step after it cannot hand over a paragraph that
7
- * mentions them. So a session that feeds another one declares its shape here, and that one declaration
8
- * becomes: the sentence in the prompt that tells the model what to write, the validator that decides whether
9
- * it complied, and the table the run view renders. Written once because the three drift apart the moment they
10
- * are written twice, a prompt asking for `files` and a validator wanting `paths` fails on every iteration and
11
- * says nothing useful about why.
12
- *
13
- * WHY A FIELD LIST AND NOT JSON SCHEMA. JSON Schema is strictly more expressive and completely unauthorable in
14
- * a form: nobody designing a workflow is going to hand-write `{"type":"object","properties":{...}}`, and a UI
15
- * that generates it becomes a schema editor, which is a product of its own. Four scalar types plus a string
16
- * list covers what one session actually hands another, a verdict, a count, a list of paths, a summary, and
17
- * anything past that is better carried as a file the next step reads.
18
- *
19
- * `description` IS REQUIRED, and that is the field that decides whether this works at all. `{name: "risk"}`
20
- * gets you the model's guess at what risk means; `{name: "risk", description: "high | medium | low, how
21
- * likely this change is to break something at runtime"}` gets you the answer to the question you asked.
22
- */
23
-
24
- // Restricted to a JS-identifier-ish shape: these become object keys the prompt spells out literally, and a
25
- // name with a quote or a newline in it produces a prompt that cannot be complied with.
26
- const FIELD_NAME = /^[a-zA-Z_][a-zA-Z0-9_]{0,39}$/;
27
-
28
- export const OutputFieldSchema = z.object({
29
- name: z.string().regex(FIELD_NAME),
30
- type: z.enum(["string", "number", "boolean", "string[]"]),
31
- // What the field means, in the words the model is given. Not optional, see the note above.
32
- description: z.string().min(1),
33
- // An absent optional field validates; an absent required one does not, and the iteration is told which.
34
- required: z.boolean(),
35
- });
36
- export type OutputField = z.infer<typeof OutputFieldSchema>;
37
-
38
- // How many fields one output may declare. A shape past this is not a handoff, it is a report, and a report is
39
- // what the prose half of the document is for.
40
- export const OUTPUT_FIELDS_MAX = 16;
41
-
42
- /* Repeated names make the declaration internally contradictory: object validation can only keep one rule for
43
- * a key, while a consumer looking the field up sees whichever copy it happens to ask for first. Reject them at
44
- * the declaration boundary, before either interpretation gets a chance to exist. Exported because graph-level
45
- * validation uses the same fact to explain the fault in the designer before a save is attempted. */
46
- export const duplicateOutputFieldNames = (fields: readonly Pick<OutputField, "name">[]): string[] => {
47
- const seen = new Set<string>();
48
- const repeated = new Set<string>();
49
- for (const field of fields) {
50
- if (seen.has(field.name)) {
51
- repeated.add(field.name);
52
- }
53
- seen.add(field.name);
54
- }
55
- return [...repeated];
56
- };
57
-
58
- export const OutputFieldsSchema = z
59
- .array(OutputFieldSchema)
60
- .min(1)
61
- .max(OUTPUT_FIELDS_MAX)
62
- .superRefine((fields, context) => {
63
- for (const name of duplicateOutputFieldNames(fields)) {
64
- context.addIssue({ code: "custom", message: `Output field names must be unique; "${name}" is repeated.` });
65
- }
66
- });
67
-
68
- const validatorFor = (field: OutputField): z.ZodType => {
69
- if (field.type === "number") {
70
- return z.number();
71
- }
72
- if (field.type === "boolean") {
73
- return z.boolean();
74
- }
75
- if (field.type === "string[]") {
76
- return z.array(z.string());
77
- }
78
- return z.string();
79
- };
80
-
81
- /* The declared shape as a validator. Unknown keys are ALLOWED THROUGH: a model that answered everything asked
82
- * of it and then added a `notes` key has complied, and failing it there would burn an iteration teaching it to
83
- * write less. What is enforced is that every required field is present and every present field has the
84
- * declared type, the two things the reader downstream is entitled to assume.
85
- */
86
- export const fieldsValidator = (fields: readonly OutputField[]): z.ZodType =>
87
- z.looseObject(Object.fromEntries(fields.map((field) => [field.name, field.required ? validatorFor(field) : validatorFor(field).optional()])));
88
-
89
- // A worked example of the declared shape, so the prompt can show rather than describe. Values are the field's
90
- // own description, a model copying the example's structure has the description in front of it as it fills each
91
- // slot, which is where it is needed rather than in a legend three lines up.
92
- export const fieldsExample = (fields: readonly OutputField[]): Record<string, unknown> =>
93
- Object.fromEntries(
94
- fields.map((field) => {
95
- const hint = `${field.description}${field.required ? "" : " (optional, omit if it does not apply)"}`;
96
- if (field.type === "number") {
97
- return [field.name, 0];
98
- }
99
- if (field.type === "boolean") {
100
- return [field.name, false];
101
- }
102
- if (field.type === "string[]") {
103
- return [field.name, [hint]];
104
- }
105
- return [field.name, hint];
106
- }),
107
- );
108
-
109
- // One line per field, for surfaces with no room to render an example: "risk (string, required), how likely …".
110
- export const describeFields = (fields: readonly OutputField[]): string =>
111
- fields.map((field) => `- \`${field.name}\` (${field.type}${field.required ? ", required" : ", optional"}), ${field.description}`).join(`\n`);
@@ -1,116 +0,0 @@
1
- /* WHAT AN ENVIRONMENT OVERLAY MAY SAY, read the same way by everyone who handles one.
2
- *
3
- * An overlay is the Dockerfile that extends the sandbox image for one sandbox: a pinned FROM, the enabled
4
- * capabilities' fragments, and the custom section the owner approved. Three readers apply the same grammar
5
- * at three trust levels, and none of them may trust the one before:
6
- * • the daemon admits an EXTENSION's fragment only if it is RUN/ENV (capabilities/handlers/extension.ts at
7
- * install, environment/fragment-sources.ts again at compose, in case the checkout changed);
8
- * • the daemon pins the composed file's first instruction to the official image (environment.ts);
9
- * • the platform builds a HOSTED sandbox's overlay on a machine of its own, from content that reached it
10
- * through an agent-writable volume and a browser, so it re-checks all of it before any machine exists.
11
- * Text in, verdict out. No filesystem and no services, so the platform imports this the way it imports
12
- * tunnel-ids, and the ic binary's Rust twin (recreate.rs `overlay_base`, runner.rs) reads the same shape. */
13
-
14
- // The marker the rebuild executors read runtime privileges from (`# intentic:runtime --privileged`, the
15
- // docker run flag it becomes is allowlisted there). A fragment that can be written by anything but the
16
- // daemon's own code must not carry it, in a comment or anywhere else.
17
- const RUNTIME_DIRECTIVE = "intentic:runtime";
18
-
19
- const OFFICIAL_SANDBOX_IMAGE = /^ghcr\.io\/intentic\/sandbox:\S+$/;
20
-
21
- // The published sandbox image under any tag, the only base an overlay may extend.
22
- export const isOfficialSandboxImage = (ref: string): boolean => OFFICIAL_SANDBOX_IMAGE.test(ref);
23
-
24
- interface OverlayLine {
25
- readonly raw: string;
26
- // `body` is a line inside a `\`-continued instruction, which carries no keyword of its own.
27
- readonly kind: "blank" | "comment" | "instruction" | "body";
28
- }
29
-
30
- // Continuation-aware: a `\` at the end of any line, comments included, makes the next line a body line.
31
- const overlayLines = (content: string): OverlayLine[] => {
32
- let continued = false;
33
- return content.split("\n").map((raw) => {
34
- const line = raw.trim();
35
- const wasContinued = continued;
36
- continued = line.endsWith("\\");
37
- const kind = line === "" ? "blank" : line.startsWith("#") ? "comment" : wasContinued ? "body" : "instruction";
38
- return { raw, kind };
39
- });
40
- };
41
-
42
- const FROM = /^from\s+(\S+)/i;
43
- const RUN_OR_ENV = /^(run|env)\s/i;
44
-
45
- /* An extension fragment may install and set variables, and nothing else. FROM is refused because the daemon
46
- * owns the base pin; every other instruction because there is no build context to COPY from and nothing an
47
- * extension has any business doing to USER, ENTRYPOINT or EXPOSE; and the runtime directive anywhere,
48
- * because an out-of-band executor greps for it and a comment is exactly where it would hide. Answers the
49
- * offending line, or undefined when the fragment is clean. */
50
- export const invalidExtensionFragment = (content: string): string | undefined => {
51
- for (const { raw, kind } of overlayLines(content)) {
52
- if (raw.includes(RUNTIME_DIRECTIVE)) {
53
- return raw;
54
- }
55
- if (kind === "instruction" && !RUN_OR_ENV.test(raw.trim())) {
56
- return raw;
57
- }
58
- }
59
- return undefined;
60
- };
61
-
62
- // The image a composed overlay extends: the first instruction, when it is a FROM.
63
- export const overlayBase = (content: string): string | undefined => {
64
- const first = overlayLines(content).find((line) => line.kind === "instruction");
65
- return first === undefined ? undefined : FROM.exec(first.raw.trim())?.[1];
66
- };
67
-
68
- // Whether the overlay's first instruction pins it to the official sandbox image.
69
- export const hasOfficialBase = (content: string): boolean => {
70
- const base = overlayBase(content);
71
- return base !== undefined && isOfficialSandboxImage(base);
72
- };
73
-
74
- /* A whole composed overlay, as an executor that did not compose it must read it: one leading FROM on the
75
- * official image, then RUN and ENV only. Comments pass, the runtime directive included, since a composed
76
- * overlay is where the daemon's own capability fragments put it and the executor that honours it (ic) reads
77
- * it from there; an executor that cannot honour it (a VM is already privileged) ignores it. Answers the
78
- * offending line, or undefined. An overlay with no instruction at all is refused: there is nothing to build. */
79
- export const lintOverlay = (content: string): string | undefined => {
80
- let first = true;
81
- for (const { raw, kind } of overlayLines(content)) {
82
- if (kind !== "instruction") {
83
- continue;
84
- }
85
- const line = raw.trim();
86
- if (first) {
87
- first = false;
88
- const base = FROM.exec(line)?.[1];
89
- if (base === undefined || !isOfficialSandboxImage(base)) {
90
- return raw;
91
- }
92
- continue;
93
- }
94
- if (!RUN_OR_ENV.test(line)) {
95
- return raw;
96
- }
97
- }
98
- return first ? "" : undefined;
99
- };
100
-
101
- /* The same overlay on a different base: the first FROM rewritten, everything else byte-identical. An
102
- * executor applies an approved recipe on the base IT runs (a newer release than the one the daemon composed
103
- * against, a rollback pin), and hashes the content the owner approved rather than this rewrite, so the
104
- * environment hash stays the reviewed one. Content whose first instruction is not a FROM is returned as is. */
105
- export const rewriteOverlayBase = (content: string, base: string): string => {
106
- let done = false;
107
- return overlayLines(content)
108
- .map(({ raw, kind }) => {
109
- if (done || kind !== "instruction") {
110
- return raw;
111
- }
112
- done = true;
113
- return FROM.test(raw.trim()) ? raw.replace(FROM, `FROM ${base}`) : raw;
114
- })
115
- .join("\n");
116
- };