@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,78 +1,47 @@
1
1
  // automations: scheduled agent wake-ups (.intentic/config/automations.json)
2
2
  import { z } from "zod";
3
- import { AgentHarnessSchema, AgentOriginSchema, AgentProviderSchema } from "./agent.js";
3
+ import { AgentOriginSchema, ModelPinSchema } from "./agent.js";
4
4
  import { AgentSummarySchema } from "./agents.js";
5
5
  import { entryId } from "./internal.js";
6
6
  import { IssuesConfigSchema } from "./issues.js";
7
- // An automation wakes the agent autonomously: the daemon's scheduler fires each enabled automation on its
8
- // trigger, runs the optional guard command (a shell command in the workspace; non-zero exit skips the wake),
9
- // then runs one agent turn with the prompt. The manifest is user config; run history is daemon-recorded.
7
+ // An automation wakes the agent: the daemon fires each enabled one on its trigger, runs the optional guard command
8
+ // (non-zero exit skips the wake), then runs one turn with the prompt. The manifest is user config; run history is
9
+ // daemon-recorded.
10
10
 
11
- // `schedule` fires on its cron; `event` fires when an external system POSTs /automations/{id}/fire?token=…
12
- // (a plain Hono route, webhook bodies are arbitrary). The token is the webhook's own auth (senders can't do
13
- // Google ID tokens): optional on input, the daemon generates one on upsert, and always present in stored and
14
- // listed automations, so the owner's UI can render the copyable URL.
15
- // `listener` fires from a realtime source's connection to the provider (an extension's gateway process holds
16
- // it, e.g. Discord), no cron, no token, never reachable via /fire. channelId narrows to one channel; absent ⇒
17
- // every channel the bot can read. eventType narrows to one kind of event (a Discord message, a live voice
18
- // utterance batch, or a finished voice transcript); absent ⇒ all event kinds the source emits. mentioned
19
- // narrows message events to those that @mention one of the workspace's bots or reply to a bot's message;
20
- // absent ⇒ all messages. `provider` and `eventType` are open strings, a realtime source is now extension-
21
- // declared (contributes.listener), so the daemon validates a listener trigger at upsert against `webchat` ∪ the
22
- // installed extensions' declared providers/events rather than a hardcoded enum here.
23
- // `webchat` is the exception: it has no gateway. An embeddable widget POSTs a visitor's message to
24
- // /webchat/<id>/message and the agent's reply streams back over SSE. Its address is the public automation id, so
25
- // allowedOrigins (the widget's embed sites) + a per-conversation rate limit are its abuse boundary, no secret
26
- // token can live in a browser.
27
- // `ci` is the other gateway-less source: the daemon's own pipeline receiver (ci/events.ts) dispatches it from a
28
- // provider webhook, or from the REST poller on a sandbox whose hooks could not be registered. Its channelId is
29
- // the workspace repo, and `branch` is its SECOND narrowing axis, a fleet pushes a branch per agent, so a
30
- // pipeline trigger that can only say "this repo" says "every agent's every failure".
31
- // `workspace` fires from the sandbox's OWN codebase instead of the outside world, see WorkspaceEventKindSchema.
11
+ // schedule: fires on its cron
12
+ // event: fires when an external system POSTs /automations/{id}/fire; its auth token lives outside the manifest
13
+ // (.intentic/secrets/doors.json), never in this versioned, widely-readable file
14
+ // listener: fires from a realtime source's own connection (an extension's gateway), no cron, no token, never reachable
15
+ // via /fire. `channelId`/`eventType`/`mentioned` narrow it; absent means unfiltered. `provider`/`eventType` are open
16
+ // strings validated at upsert against installed extensions' declared vocabulary
17
+ // webchat: the exception with no gateway; a widget POSTs to /webchat/<id>/message, and its abuse boundary is
18
+ // allowedOrigins plus a rate limit, since no secret can live in a browser
19
+ // ci: the daemon's own pipeline receiver; `channelId` is the workspace repo, `branch` narrows further since a fleet
20
+ // pushes one branch per agent
21
+ // workspace: fires from the sandbox's own codebase (WorkspaceEventKindSchema)
32
22
 
33
- // What the daemon emits as the fleet works, and what a `workspace` trigger names. These are the events a code
34
- // CHORE runs on (continuous review, post-land checks): the daemon is both producer and consumer, so unlike
35
- // `event` there is no token and no route, nothing outside the sandbox can reach them.
36
- //
37
- // The two OVERLAP on the common path: a clean turn auto-lands, firing both. A chore should name exactly one.
38
- // `turn.settled` fires once per isolated turn whatever its outcome, so it also covers the errored and
39
- // conflicted turns most worth a second pair of eyes, and it fires while the user is still looking at the diff,
40
- // before they decide to land. `agent.landed` fires only when work actually reached the main tree, including an
41
- // explicit Land from the review panel long after the turn ended.
42
- //
43
- // The `deps.*` pair fires from the dependency verifier (workspace/verify-deps.ts) rather than a turn: after a
44
- // land drifts dependencies, the daemon installs them and runs the tree's own checks, and these are that chain's
45
- // EDGES, `deps.broken` when the checks go red after a landed change, `deps.fixed` when a later land turns them
46
- // green again. Edges, not states, on the ci-events precedent (pipeline_broken): a tree that is red and stays
47
- // red emits nothing, so a fix chore is woken by the breakage, never by the standing colour.
23
+ // What the daemon emits as the fleet works, for a code chore to react to; no token or route, since only the daemon
24
+ // reads these.
25
+ // turn.settled: fires once per isolated turn regardless of outcome, while the diff is still on screen
26
+ // agent.landed: fires only once work reaches the main tree, including a later manual Land
27
+ // deps.broken/deps.fixed: edges from the dependency verifier around a landed change, not standing states, so a chore
28
+ // wakes on the transition, never on a tree that stays red
48
29
  export const WorkspaceEventKindSchema = z.enum(["turn.settled", "agent.landed", "deps.broken", "deps.fixed"]);
49
30
  export type WorkspaceEventKind = z.infer<typeof WorkspaceEventKindSchema>;
50
- // The payload a workspace-triggered wake carries: one JSON object, in $AUTOMATION_PAYLOAD for the guard and
51
- // appended to the prompt for the turn.
52
- //
53
- // `repos` names the change to look at as an OPEN span, `git -C <dir> diff <from>`, with no upper bound. Each
54
- // `from` is where that repo stood before the turn (its last landed tip, or the base it branched from); the
55
- // other end is deliberately the working tree rather than a sha, because a turn that ERRORED left its work
56
- // uncommitted in the worktree and a commit-to-commit span would report it as nothing at all. `dir` is that
57
- // repo's dir inside the agent's own checkout, so a chore reads the agent's work without touching /work.
58
- //
59
- // No diffstat rides along on purpose: the registry's counts are refreshed at land, so an errored or conflicted
60
- // turn would carry stale numbers, and a guard that wants a size threshold gets the true one from
61
- // `git -C <dir> diff --numstat <from>` for the price of one spawn.
31
+ // Payload of a workspace-triggered wake, delivered as JSON in $AUTOMATION_PAYLOAD and appended to the prompt.
32
+ // `repos[].from` is each repo's state before the turn; the span runs to the working tree, not a commit, so an errored
33
+ // turn's uncommitted work still shows.
62
34
  export const WorkspaceEventSchema = z.object({
63
35
  event: WorkspaceEventKindSchema,
64
36
  agentId: z.string(),
65
37
  title: z.string().optional(),
66
38
  branch: z.string(),
67
- // `ready` is a clean turn whose delta was HELD on the branch (auto-land off), for a chore, the moment
68
- // before the user's deliberate Land, which is exactly when a pre-land review wants to run.
39
+ // `ready` is a clean turn held on the branch (auto-land off): the moment right before a deliberate Land, when a
40
+ // pre-land review wants to run.
69
41
  outcome: z.enum(["landed", "conflict", "ready", "idle", "error"]),
70
42
  repos: z.array(z.object({ repo: z.string(), from: z.string(), dir: z.string() })),
71
- /* The `deps.*` events' own facts, absent on every turn-borne event. What a fix chore needs to start
72
- * without rediscovering it: which project broke, the exact command that judged it, how it exited, and the
73
- * tail of its output, bounded, because the payload rides a prompt and a guard's environment, and the full
74
- * log is one attach away in the project's `--verify` terminal panel. `attempt` counts consecutive red
75
- * verifies since the last green, so a guard can cap retries in one visible line of shell. */
43
+ // Present only for `deps.*` events: which project broke, the command and exit code, a bounded log tail, and
44
+ // `attempt` counting consecutive reds since the last green.
76
45
  deps: z
77
46
  .object({
78
47
  project: z.string(),
@@ -88,14 +57,24 @@ export const TriggerSchema = z.discriminatedUnion("kind", [
88
57
  z.object({
89
58
  kind: z.literal("schedule").describe("On a clock."),
90
59
  cron: z.string().min(1).describe("When, in cron notation."),
60
+ // Fires only once at least this many other sessions have started since this automation's last wake; a due run
61
+ // short of that is recorded as skipped.
62
+ afterSessions: z
63
+ .number()
64
+ .int()
65
+ .positive()
66
+ .optional()
67
+ .describe("Fire only once at least this many new sessions have been run since the last wake. A due run short of that is skipped, and says how far off it is."),
91
68
  }),
92
69
  z.object({
93
70
  kind: z.literal("event").describe("When something calls its webhook."),
94
- token: z
95
- .string()
96
- .min(1)
71
+ // Calls per UTC day across every caller; absent falls back to FIRE_DAILY_MAX_DEFAULT, never uncapped.
72
+ dailyMax: z
73
+ .number()
74
+ .int()
75
+ .positive()
97
76
  .optional()
98
- .describe("The credential a caller presents. It is the only one in the exchange, because an outside sender has no identity here."),
77
+ .describe("How many webhook calls a day may wake the agent, across every caller. Absent is a modest default rather than unlimited."),
99
78
  }),
100
79
  z.object({
101
80
  kind: z.literal("listener").describe("When a message arrives from somewhere outside."),
@@ -109,10 +88,8 @@ export const TriggerSchema = z.discriminatedUnion("kind", [
109
88
  .min(1)
110
89
  .optional()
111
90
  .describe("Narrow it to one branch, for the sources that have branches. Absent means every branch of the repositories it matches."),
112
- /* The two gateway-less browser sources, `webchat` and `issues`: the website origins allowed to POST to
113
- * the public endpoint. Absent/empty ⇒ none admitted, on both. One field rather than one per source,
114
- * because it is the same question asked of the same header by the same kind of caller, and an intake
115
- * whose allowlist lived somewhere else would be a second gate to keep in step with the first. */
91
+ // Shared by webchat and issues, the two gateway-less browser sources; one field since both ask the same
92
+ // question of the same header.
116
93
  allowedOrigins: z
117
94
  .array(z.string())
118
95
  .optional()
@@ -126,33 +103,24 @@ export const TriggerSchema = z.discriminatedUnion("kind", [
126
103
  }),
127
104
  ]);
128
105
  export type Trigger = z.infer<typeof TriggerSchema>;
129
- /* The Front Desk widget's settings, everything about the embeddable chat that isn't the automation's prompt.
130
- * Present only on `webchat` listener automations; the trigger keeps `allowedOrigins` because that one is the
131
- * admission gate the message route reads, not a rendering choice.
132
- *
133
- * Split deliberately into what the WIDGET may read (title/greeting/accent/position/access/googleClientId/
134
- * turnstileSiteKey, all public by construction, they ship to a stranger's browser) and what only the daemon
135
- * may read (turnstileSecret). GET /webchat/<id>/config serves the first group by naming it, never by omitting
136
- * the second: a field added here is invisible to the widget until it is listed there. */
106
+ // The Front Desk widget's settings, present only on `webchat` listener automations. Split into what the widget itself
107
+ // may read (public by construction) and what only the daemon may (turnstileSecret); GET /webchat/<id>/config serves the
108
+ // first group by naming it, never by omitting the second.
137
109
  export const WebchatConfigSchema = z.object({
138
- // `public` admits anyone; `google` refuses a message that carries no verifiable Google ID token. Absent ⇒
139
- // public, a Front Desk with no access setting is the anonymous support box it looks like.
110
+ // `public` admits anyone; `google` requires a verifiable Google ID token. Absent means public.
140
111
  access: z
141
112
  .enum(["public", "google"])
142
113
  .optional()
143
114
  .describe("Who may write to it. Absent means anyone, which is the anonymous support box it looks like."),
144
- // Ask an anonymous visitor for a display name before the first message. Cosmetic: the name is typed, so it
145
- // reaches the model as untrusted `displayName`, never as identity.
115
+ // Cosmetic: the typed name reaches the model as untrusted `displayName`, never as identity.
146
116
  requireName: z
147
117
  .boolean()
148
118
  .optional()
149
119
  .describe(
150
120
  "Ask a visitor for a name first. Cosmetic: the name is typed, so it reaches the model as something a stranger said, never as identity.",
151
121
  ),
152
- /* The bot ceiling. `turnstile` is Cloudflare's (invisible, needs the site's own keys); `pow` is a
153
- * hashcash-style challenge the daemon issues and the widget solves in a worker, so a site with no
154
- * Cloudflare account still has something. Absent ⇒ off: the origin allowlist and the rate limit are then
155
- * the whole boundary, which is the right default for an internal or invite-only page. */
122
+ // `turnstile` needs Cloudflare's own keys; `pow` is a hashcash puzzle the daemon issues itself. Absent leaves the
123
+ // origin allowlist and rate limit as the whole boundary.
156
124
  antiBot: z
157
125
  .enum(["turnstile", "pow"])
158
126
  .optional()
@@ -161,20 +129,16 @@ export const WebchatConfigSchema = z.object({
161
129
  ),
162
130
  turnstileSiteKey: z.string().optional().describe("The public half of those keys, which ships to the visitor's browser."),
163
131
  turnstileSecret: z.string().optional().describe("The private half, which the sandbox keeps and the widget never sees."),
164
- // The site's OWN Google OAuth web client id. It cannot be intentic's: Google Identity Services only issues
165
- // a token to an authorized JavaScript origin, and intentic's client can't list every customer domain.
132
+ // The site's own client id, not ours: Google only issues a token to an authorized origin, and no client can list
133
+ // every customer's domain.
166
134
  googleClientId: z
167
135
  .string()
168
136
  .optional()
169
137
  .describe(
170
138
  "The site's own sign-in client id. It cannot be ours: a sign-in is only issued to an approved origin, and no single client can list every customer's domain.",
171
139
  ),
172
- /* Widget chrome. `position` picks the launcher corner.
173
- *
174
- * `accent` is a HEX colour, not any CSS colour, because the widget derives values from its channels rather
175
- * than just painting it: a glyph step for the scheme, a 14% wash for the send button, a bubble edge, a focus
176
- * ring, and the label that goes on top (see webchat-widget's styles.ts). A colour we cannot read is a widget
177
- * with half its accent silently missing, so the unreadable case is rejected here instead. */
140
+ // Widget chrome; `accent` must be a hex colour, not any CSS colour, since the widget derives a scheme, a button
141
+ // wash and a focus ring from its channels, and an unreadable value would leave half the accent missing.
178
142
  title: z.string().max(80).optional(),
179
143
  greeting: z.string().max(500).optional(),
180
144
  accent: z
@@ -182,42 +146,25 @@ export const WebchatConfigSchema = z.object({
182
146
  .regex(/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/, "accent must be a hex colour, e.g. #e47100")
183
147
  .optional(),
184
148
  position: z.enum(["top-right", "top-left", "bottom-right", "bottom-left"]).optional(),
185
- /* Two ceilings on top of the route's fixed per-minute window, because a public endpoint's real exposure is
186
- * cost, not request rate: `dailyMessageMax` caps the whole automation per UTC day, `conversationMessageMax`
187
- * caps one visitor thread for its lifetime.
188
- *
189
- * `dailyMessageMax` absent ⇒ WEBCHAT_DAILY_MAX_DEFAULT, not uncapped. Every message here is an agent turn
190
- * billed to the owner, and the per-minute window bounds the RATE without bounding the DAY, twenty a minute,
191
- * sustained, is tens of thousands of turns before anyone notices. A Front Desk nobody configured should not be
192
- * able to spend that, so the safe number is the one you get for free and the owner raises it deliberately.
193
- * `conversationMessageMax` stays optional-means-uncapped: it is per visitor thread, which the daily ceiling
194
- * already bounds in aggregate. */
149
+ // Two ceilings beyond the route's per-minute window, since a public endpoint's real exposure is cost, not rate:
150
+ // `dailyMessageMax` (absent falls back to WEBCHAT_DAILY_MAX_DEFAULT) caps the automation per UTC day,
151
+ // `conversationMessageMax` caps one visitor thread and stays uncapped by default.
195
152
  dailyMessageMax: z.number().int().positive().optional(),
196
153
  conversationMessageMax: z.number().int().positive().optional(),
197
- // (WEBCHAT_DAILY_MAX_DEFAULT, below the schema, is the number `dailyMessageMax` falls back to.)
198
- // How long a visitor thread keeps resuming the same conversation before the next message starts a fresh
199
- // one. Absent ⇒ WEBCHAT_SESSION_TTL_MS (the daemon's default).
154
+ // How long a visitor thread resumes the same conversation before a new message starts a fresh one; absent uses the
155
+ // daemon's own default.
200
156
  sessionTtlMinutes: z.number().int().positive().optional(),
201
157
  });
202
158
  export type WebchatConfig = z.infer<typeof WebchatConfigSchema>;
203
- /* The daily agent-turn ceiling a Front Desk gets when its owner sets none. Lives here rather than beside the
204
- * route that enforces it because both ends need the number: the daemon to apply it, and the automation editor
205
- * to show the owner what they are already protected by (an invisible limit is one people hit and file as a bug).
206
- *
207
- * 200 is chosen to be irrelevant to real support traffic and decisive against a script. A Front Desk answering
208
- * two hundred questions in one UTC day is a busy one; a scripted flood reaches that in ten seconds and then
209
- * stops costing anything. */
159
+ // Default daily agent-turn ceiling for an unconfigured Front Desk; high enough for real traffic, low enough to blunt a
160
+ // script.
210
161
  export const WEBCHAT_DAILY_MAX_DEFAULT = 200;
211
- /* ---- the widget wire: three shapes GET /webchat/<id>/config, GET …/challenge and POST …/message speak ----
212
- *
213
- * They live here, beside the stored config they derive from, because the Front Desk widget is a SECOND client of
214
- * this daemon, a bundle running on a stranger's page, and the reason this package exists is that both ends of
215
- * a wire read one definition. The widget imports these as types only (`import type`), so zod never reaches a
216
- * visitor's browser. */
162
+ // The widget wire: the shapes GET /webchat/<id>/config, GET .../challenge and POST .../message speak, living beside the
163
+ // config they derive from since the widget is a second client of this daemon. Imported as types only, so zod never
164
+ // reaches a visitor's browser.
217
165
 
218
- // What the widget is told about itself. Fully RESOLVED, every default is applied daemon-side, so the widget
219
- // carries no fallback logic and one place decides what an unset field means. Everything here is public by
220
- // construction: it ships to any browser that can reach the endpoint from an allowed origin.
166
+ // What the widget is told about itself, fully resolved daemon-side so it carries no fallback logic. Everything here is
167
+ // public by construction: it ships to any browser reaching the endpoint from an allowed origin.
221
168
  export const WebchatPublicConfigSchema = z.object({
222
169
  automationId: z.string(),
223
170
  title: z.string(),
@@ -226,35 +173,29 @@ export const WebchatPublicConfigSchema = z.object({
226
173
  position: z.enum(["top-right", "top-left", "bottom-right", "bottom-left"]),
227
174
  access: z.enum(["public", "google"]),
228
175
  requireName: z.boolean(),
229
- // "off" is spelled out rather than left absent: the widget branches on this, and a missing field that means
230
- // "no challenge" is the kind of default that turns one serialization bug into an open door.
176
+ // "off" is spelled out, not left absent, so a serialization bug can't silently read as "no challenge".
231
177
  antiBot: z.enum(["turnstile", "pow", "off"]),
232
178
  turnstileSiteKey: z.string().optional(),
233
179
  googleClientId: z.string().optional(),
234
180
  });
235
181
  export type WebchatPublicConfig = z.infer<typeof WebchatPublicConfigSchema>;
236
- /* A proof-of-work challenge: find a nonce whose SHA-256 of `${salt}:${nonce}` starts with `difficulty` zero
237
- * bits. ONE shape for every public door (the Front Desk issues it per visitor conversation and spends it on the
238
- * first message; the bug intake per reporter, on a written report), and one solver on the embeds' side
239
- * (embed.ts, which declares the same two fields without zod). */
182
+ // A proof-of-work challenge: find a nonce whose SHA-256 of `${salt}:${nonce}` starts with `difficulty` zero bits. One
183
+ // shape for every public door (Front Desk, bug intake), and one matching solver, embed.ts.
240
184
  export const PowChallengeSchema = z.object({ salt: z.string(), difficulty: z.number().int().positive() });
241
185
  export type PowChallenge = z.infer<typeof PowChallengeSchema>;
242
- // One visitor message. `conversationId` is the widget's own localStorage id, it threads the visitor's messages
243
- // into ONE sandbox conversation, so it is the thread key, not a secret (anyone can mint one; the origin
244
- // allowlist, the challenge and the rate limit are the gate).
186
+ // One visitor message; `conversationId` is the widget's own localStorage id, a thread key rather than a secret — the
187
+ // origin allowlist, challenge and rate limit are the gate.
245
188
  export const WebchatMessageSchema = z.object({
246
189
  conversationId: z.string().min(1).max(200),
247
190
  content: z.string().min(1),
248
- // What the visitor TYPED as their name. Never identity, it reaches the model tagged as unverified, and a
249
- // signed-in visitor's verified name comes from the ID token instead.
191
+ // What the visitor typed as a name; never identity, tagged unverified for the model.
250
192
  displayName: z.string().max(200).optional(),
251
193
  // A Google ID token from the site's own client id, verified daemon-side against Google's JWKS.
252
194
  idToken: z.string().optional(),
253
195
  // The anti-bot answer, whichever kind the config asked for. Checked once per conversation, not per message.
254
196
  turnstileToken: z.string().optional(),
255
197
  powNonce: z.string().optional(),
256
- // The widget's own transcript, sent ONLY on the first message of a thread, after that the sandbox
257
- // conversation resumes and carries its own context.
198
+ // Sent only on a thread's first message; after that the sandbox's own conversation carries context.
258
199
  history: z
259
200
  .array(z.object({ author: z.string().optional(), content: z.string() }))
260
201
  .max(50)
@@ -264,7 +205,8 @@ export type WebchatMessage = z.infer<typeof WebchatMessageSchema>;
264
205
  export const AutomationSchema = z.object({
265
206
  id: entryId.describe("The automation's id."),
266
207
  trigger: TriggerSchema.describe("What sets it off: a schedule, an event in the workspace, a message arriving from outside, or a webhook."),
267
- // Shell command run in the workspace root before waking; exit 0 ⇒ wake, non-zero ⇒ the run is "skipped".
208
+ // Runs in the workspace root before waking; exit 0 wakes, non-zero is recorded as "skipped". Sees
209
+ // `AUTOMATION_PAYLOAD` when the trigger carried one.
268
210
  guard: z
269
211
  .string()
270
212
  .min(1)
@@ -275,61 +217,42 @@ export const AutomationSchema = z.object({
275
217
  prompt: z.string().min(1).describe("What the woken agent is told."),
276
218
  // The Front Desk widget's settings, `webchat` listener automations only, ignored on every other trigger.
277
219
  webchat: WebchatConfigSchema.optional().describe("Settings for the public chat widget, for an automation that answers visitors."),
278
- // The bug intake's settings, `issues` listener automations only, ignored on every other trigger. Its own
279
- // field rather than a shared "public endpoint" bag: the two sources answer different questions (a chat's
280
- // greeting and access model, an intake's dedup ceiling and ingest key) and a union of both would be a
281
- // schema where most fields are wrong for whichever source is reading it.
282
- issues: IssuesConfigSchema.optional().describe("Settings for the bug reporter, for an automation that takes crash reports from your own sites and apps."),
283
- /* NARROW THIS ONE JOB FURTHER than the persona it runs as, raw tool names, and the escape hatch under the
284
- * shelves rather than the way anyone is expected to answer this question.
285
- *
286
- * The persona (`actsAs` below) is where a session's toolbox is decided now, because the answer is worth
287
- * reusing: the same bounds apply to the chat, the workflow and the Front Desk that name the same card. This
288
- * stays for the job that needs LESS than its persona allows, and only less, which is a rule the composer
289
- * enforces rather than a convention: an edit here can never hand back a shelf the persona switched off. */
220
+ // Bug intake settings, `issues` triggers only; its own field rather than a shared bag, since a chat's and an
221
+ // intake's fields mostly don't overlap.
222
+ issues: IssuesConfigSchema.optional().describe(
223
+ "Settings for the bug reporter, for an automation that takes crash reports from your own sites and apps.",
224
+ ),
225
+ // Narrows this job's toolbox further than its persona allows; the composer enforces that it can only remove, never
226
+ // restore, a shelf the persona switched off.
290
227
  allowedTools: z
291
228
  .array(z.string().min(1))
292
229
  .optional()
293
230
  .describe(
294
231
  "Narrow the woken turn to these tools. For one driven by an outside message this list is the real boundary, because prompt wording is only advice and an empty toolbox is not.",
295
232
  ),
296
- // Which provider adapter serves the wake; absent ⇒ claude. Same dispatch as a chat turn (AgentTurnSchema.agent).
297
- agent: AgentProviderSchema.optional().describe("Which provider serves the wake."),
298
- /* Which connected account of that provider serves the wake; absent ⇒ the provider's first account, exactly
299
- * as for a chat turn (AgentTurnSchema.account).
300
- *
301
- * An automation needs this more than a chat does, and for a reason a chat never meets: nobody is watching.
302
- * A sandbox holds several accounts side by side, and when the first one is out of headroom, or belongs to
303
- * an organization that has disabled the plan, every fire of every automation errors against it until a
304
- * human happens to read the row. Pinning the wake to an account that can actually run is the difference
305
- * between "my nightly sweep is quiet" and a Front Desk that turns visitors away all day. */
233
+ // Required ordered ladder (replaces separate agent/harness/model fields): an automation spends real money
234
+ // unwatched, so it must name what it spends rather than inherit a chat's default. Walked in order at fire time to
235
+ // the first rung that can start; each rung is a whole pin (provider+model+effort+harness together).
236
+ models: z
237
+ .array(ModelPinSchema)
238
+ .min(1)
239
+ .max(10)
240
+ .describe(
241
+ "Which models this automation may run on, best first. Required, and nothing is chosen for you: work that fires while nobody is watching spends a real allowance, so it names the models it spends rather than inheriting one. Tried in order, so a spent account does not silently stop the job.",
242
+ ),
243
+ // Absent means the provider's first account; pinning matters more here than for a chat, since nobody is watching to
244
+ // notice a stuck one.
306
245
  account: z.string().optional().describe("Which account pays for it."),
307
- /* WHICH FACE THE WAKE SHOWS THE OUTSIDE WORLD (AgentTurnSchema.actsAs, read its note for why this is not
308
- * spelled `account`, which is the field directly above and means who PAYS).
309
- *
310
- * Absent ⇒ the wake reaches NO logged-in account at all. That is the one place this whole layer stops being
311
- * a convenience and becomes a boundary, and it is deliberately the strictest default in the schema: an
312
- * automation fires with nobody at the composer, on a prompt that, for a Front Desk, a stranger helped write.
313
- * `allowedTools` above already carries this exact reasoning for tools; an unrepeatable public post deserves
314
- * it at least as much. An automation that genuinely means "post as us" says so, once, in a field a reviewer
315
- * can see. */
246
+ // Absent means the wake reaches no logged-in account at all, the strictest default here, since nobody is at the
247
+ // composer when it fires.
316
248
  actsAs: entryId.optional().describe("Which persona it speaks as. An unwatched turn naming none reaches no signed-in account at all."),
317
- // Which harness (agentic loop) runs the wake; absent ⇒ native. Same semantics as AgentTurnSchema.harness.
318
- harness: AgentHarnessSchema.optional().describe("Which agentic loop runs it."),
319
- // Which model the wake runs on (see agent-catalog.ts modelsFor); absent ⇒ the provider's default.
320
- model: z.string().optional().describe("Which model runs it."),
321
- // When true, a fire doesn't wake the agent, it's held in the approvals queue until the owner approves.
249
+ // Held in the approvals queue rather than run; only a person releases it.
322
250
  requireApproval: z.boolean().optional().describe("Hold every fire for a person instead of running it. Only a person can release one of those."),
323
- /* The middle ground between firing instantly and requiring a click: the fire is held in the same approvals
324
- * queue, visibly, and the daemon runs it ITSELF once the hold has elapsed AND no agent turn is live, the
325
- * owner's window to cancel or start it early, with silence as consent. What a fix chore wants: time to see
326
- * "checks broke, a fix is about to start" without a standing decision to make. `requireApproval` wins when
327
- * both are set, an explicit "ask me" must never quietly become "unless I'm slow". */
251
+ // Held visibly in the approvals queue and run by the daemon itself once the hold elapses with no live turn;
252
+ // `requireApproval`, if also set, always wins.
328
253
  holdForSeconds: z.number().optional().describe("Hold each fire this long before running it anyway, which is a delay rather than a decision."),
329
- // A code CHORE: maintenance of THIS codebase rather than a reaction to the outside world. Purely a
330
- // classification, the daemon fires a chore exactly like any other automation, but it cannot be derived
331
- // from the trigger, which is why it is stored: a nightly `pnpm audit` sweep and a nightly Stripe poll are
332
- // both `schedule`, and belong on different shelves. Absent ⇒ an ordinary automation.
254
+ // Pure classification: the trigger alone can't tell a code chore from an ordinary schedule, so this is stored
255
+ // rather than derived.
333
256
  chore: z
334
257
  .boolean()
335
258
  .optional()
@@ -337,9 +260,8 @@ export const AutomationSchema = z.object({
337
260
  enabled: z.boolean().describe("Whether it fires at all."),
338
261
  });
339
262
  export type Automation = z.infer<typeof AutomationSchema>;
340
- // A wake held for owner approval (.intentic/records/approvals/<id>.json, one file per held wake). It snapshots the
341
- // trigger payload so an approved run replays exactly what fired, even across a daemon restart. The id is minted
342
- // by the daemon (an entryId-safe filename).
263
+ // A wake held for owner approval (.intentic/records/approvals/<id>.json); snapshots the trigger payload so an approved
264
+ // run replays exactly what fired, even across a daemon restart.
343
265
  export const AutomationApprovalSchema = z.object({
344
266
  id: entryId.describe("This waiting item's own id, which approving and rejecting take."),
345
267
  automationId: z.string().describe("Which automation it came from."),
@@ -350,20 +272,13 @@ export const AutomationApprovalSchema = z.object({
350
272
  .describe(
351
273
  "What set it off, kept whole so an approved wake carries the same thing it would have had. Absent for one on a schedule, which carries nothing.",
352
274
  ),
353
- // The provenance + title the held wake would have opened its conversation with, snapshotted alongside the
354
- // payload so an approved external wake surfaces on the fleet exactly as an auto one would have.
275
+ // Snapshotted alongside the payload so an approved wake surfaces on the fleet exactly as an automatic one would.
355
276
  origin: AgentOriginSchema.optional().describe(
356
277
  "Where the message came from, kept alongside the payload so an approved wake appears on the board exactly as an automatic one would have.",
357
278
  ),
358
279
  title: z.string().optional().describe("What the conversation would be called."),
359
- /* The CONTINUING THREAD this wake belonged to, when it had one, the conversation the dispatcher had
360
- * already opened for it and the provider session that conversation last ran on.
361
- *
362
- * Snapshotted for the same reason the payload is, and it is the half that was missing: without it an
363
- * approved wake fell through to minting a fresh conversation, so a Front Desk visitor's chat became one card
364
- * per approved message instead of the single thread the dispatcher had opened for them, a second worktree
365
- * each time, and an agent that met the visitor again on every turn. Absent for a schedule or a webhook,
366
- * which own no thread. */
280
+ // The thread this wake belongs to, so approving continues it rather than minting a fresh conversation per approved
281
+ // message.
367
282
  conversationId: z
368
283
  .string()
369
284
  .optional()
@@ -372,9 +287,8 @@ export const AutomationApprovalSchema = z.object({
372
287
  ),
373
288
  sessionId: z.string().optional().describe("The provider session that thread last ran on."),
374
289
  createdAt: z.number().describe("When it started waiting, in milliseconds."),
375
- /* Epoch ms after which the daemon may run this wake itself (a `holdForSeconds` hold), the countdown the
376
- * row renders, and the deadline the scheduler's tick checks against. Absent on a `requireApproval` hold,
377
- * which only the owner may release. */
290
+ // When the daemon may run this itself, for a `holdForSeconds` hold; absent for a `requireApproval` hold, which only
291
+ // the owner releases.
378
292
  autoRunAt: z
379
293
  .number()
380
294
  .optional()
@@ -383,13 +297,9 @@ export const AutomationApprovalSchema = z.object({
383
297
  ),
384
298
  });
385
299
  export type AutomationApproval = z.infer<typeof AutomationApprovalSchema>;
386
- // `rev` is the registry revision this roster was read at, a counter the daemon bumps on every registry change.
387
- // It is what makes the browser's optimistic writes safe: the fleet is published as full snapshots (last frame
388
- // wins), so without an ordering stamp a roster READ before a mutation but delivered after it silently puts the
389
- // mutated agents back. The browser drops any roster older than the newest it has applied, and holds its own
390
- // pending change until a roster at or past the revision that applied it arrives. See useAgents.ts.
391
- // `held` is the approvals queue projected onto the board, the wakes waiting at the door, so "needs you" sits
392
- // beside "running" instead of in a page nobody opens. Defaulted so an older daemon's roster still parses.
300
+ // `rev` is the registry revision this roster was read at: fleet snapshots are last-frame-wins, so the browser drops any
301
+ // roster older than the newest it applied and holds a pending change until a roster past `rev` arrives. `held` is the
302
+ // approvals queue projected onto the board, defaulted for an older daemon's roster.
393
303
  export const AgentsListSchema = z.object({
394
304
  agents: z.array(AgentSummarySchema).describe("The conversations."),
395
305
  rev: z
@@ -409,49 +319,44 @@ export const AutomationApprovalsListSchema = z.object({ approvals: z.array(Autom
409
319
  export const AutomationApprovalIdParamSchema = z.object({ id: z.string().describe("Which waiting item.") });
410
320
  export const AutomationRunSchema = z.object({
411
321
  at: z.number(),
412
- // skipped = the guard said no; error = the guard passed but the agent turn surfaced an error; interrupted =
413
- // the daemon died mid-wake, so the run reached no outcome of its own (see agent/turn-journal.ts). Without
414
- // that last one an interrupted fire records NOTHING and simply vanishes from the row's history, which reads
415
- // as "it never fired", the one reading a 3 a.m. automation must not be given.
322
+ // skipped: the guard said no
323
+ // error: the guard passed but the turn errored
324
+ // interrupted: the daemon died mid-wake; without this value an interrupted fire vanishes from history and reads as
325
+ // never having fired
416
326
  outcome: z.enum(["completed", "skipped", "error", "interrupted"]),
417
327
  detail: z.string().optional(),
418
- // The stable conversation opened by the wake, so the row can open the provider-neutral agent transcript.
419
328
  // Absent only for a run skipped before a conversation was needed.
420
329
  conversationId: z.string().optional(),
421
330
  });
422
331
  export type AutomationRun = z.infer<typeof AutomationRunSchema>;
423
- // The list row: the stored automation + its recent runs + the next scheduled fire (absent when disabled).
332
+ // The list row: the stored automation plus its recent runs and next scheduled fire (absent when disabled). Default
333
+ // daily ceiling for an event trigger naming none: generous for a busy monitor, small enough that a leak is a bad day,
334
+ // not a bad month.
335
+ export const FIRE_DAILY_MAX_DEFAULT = 200;
424
336
  export const AutomationSummarySchema = AutomationSchema.extend({
425
337
  runs: z.array(AutomationRunSchema),
426
338
  nextRun: z.number().optional(),
339
+ // Door credentials, attached for a maintainer or owner only, never a viewer or a control-token program; kept in the
340
+ // secrets store, not the manifest.
341
+ webhookToken: z
342
+ .string()
343
+ .optional()
344
+ .describe("What a caller presents at /automations/{id}/fire, for an event automation. Shown to a maintainer or the owner only."),
345
+ ingestKey: z
346
+ .string()
347
+ .optional()
348
+ .describe("What a client with no website origin presents to a bug intake. Shown to a maintainer or the owner only."),
427
349
  });
428
350
  export type AutomationSummary = z.infer<typeof AutomationSummarySchema>;
429
351
  export const AutomationsListSchema = z.object({ automations: z.array(AutomationSummarySchema) });
430
352
  export const AutomationIdParamSchema = z.object({ id: z.string() });
431
353
  export const AutomationEnabledInputSchema = z.object({ id: z.string(), enabled: z.boolean() });
432
- /* ---- the automation catalogue: everything that can wake an agent here, and what to start from ----
433
- *
434
- * ONE ANSWER TO ONE QUESTION, and that is the whole reason it exists. The composer used to carry a hand-written
435
- * list of every source and every template. CI, Komodo, Sentry, Stripe, email, the website widget, the chore
436
- * book, while the daemon's upsert carried a SECOND hand-written list of the providers it would accept. Two
437
- * lists, edited in different packages, disagreeing was a matter of time; and every area that gained something
438
- * worth waking on had to edit the automations surface to say so, which is the dependency pointing backwards.
439
- *
440
- * Now the daemon merges what IT emits with what every installed extension declares, and serves the result. The
441
- * composer draws whatever comes back and knows the name of nothing; `upsert` validates against the same merge.
442
- * An area gains a trigger by declaring it, and the surface it appears on does not change.
443
- *
444
- * WHERE A SOURCE IS DECLARED IS WHERE ITS EVENTS COME FROM, `webchat` and `ci` are the daemon's own (it holds
445
- * the widget endpoint and the pipeline webhook receiver), every other one belongs to the extension whose
446
- * gateway or backend dispatches it.
447
- *
448
- * A TEMPLATE SITS BESIDE THE SOURCE IT FIRES ON, because the source's starter and the template's prompt
449
- * describe the same payload, and one payload described in two packages is two descriptions to keep in step. A
450
- * template on the generic `event` webhook has no source to sit beside, so it goes with the pack carrying the
451
- * capability card it names, which is the same pack the user connected to make it work at all. */
354
+ // The automation catalogue: everything that can wake an agent, and what to start from. The daemon merges what it emits
355
+ // with what every installed extension declares, so an area gains a trigger by declaring it rather than editing this
356
+ // surface. `webchat`/`ci` are the daemon's own sources; a template sits beside the source whose payload it describes,
357
+ // or beside its capability's pack if it fires on the generic `event` webhook.
452
358
 
453
- // A source's per-source narrowing field, as the generic editor draws it. Absent ⇒ the editor offers no such
454
- // filter rather than inventing one the provider has no meaning for.
359
+ // Absent means the editor offers no such filter, rather than inventing one meaningless to the provider.
455
360
  const TriggerFieldSchema = z.object({ label: z.string().min(1), placeholder: z.string().min(1), hint: z.string().min(1).optional() });
456
361
  export const TriggerSourceSchema = z.object({
457
362
  // The slug a listener trigger fires on (Trigger.provider).
@@ -468,24 +373,18 @@ export const TriggerSourceSchema = z.object({
468
373
  mentionLabel: z.string().min(1).optional(),
469
374
  // The provider owns the payload vocabulary, so it owns the first prompt that explains that payload.
470
375
  starterPrompt: z.string().min(1).optional(),
471
- /* Capability providers that make this source WORK, any one of them connected is enough (a CI trigger rides
472
- * github or gitlab). Empty ⇒ nothing to connect, the source is usable as it stands. Availability is computed
473
- * in the browser rather than served, because the browser's capability facts are pushed live and a served
474
- * boolean would be stale between polls. */
376
+ // Any one connected capability is enough; computed client-side, since capability facts are pushed live and a served
377
+ // boolean would go stale between polls.
475
378
  requires: z.array(z.string().min(1)).default([]),
476
- /* Whether the extension declaring this is switched ON. Disabled ones are still listed, and that is the
477
- * point: a stored automation must stay readable and editable while the pack that supplied its provider is
478
- * off, showing the real label instead of degrading to a bare slug. */
379
+ // Whether the declaring extension is on; disabled ones stay listed so a stored automation using it stays readable
380
+ // and editable.
479
381
  enabled: z.boolean(),
480
382
  });
481
383
  export type TriggerSource = z.infer<typeof TriggerSourceSchema>;
482
- /* HOW A TEMPLATE IS OFFERED. Absent ⇒ it lives in the create dialog's gallery, where you go once you know what
483
- * you want. The two named forms are for what a user would never think to go looking for:
484
- * create , a shelf card on the page that makes the automation in one click, switched off, ready to read.
485
- * The chores are all of these: upkeep nobody opens an automations page hunting for.
486
- * configure, a shelf card that opens the dialog PREFILLED, for a template that cannot work unconfigured (a
487
- * Front Desk with no allowed sites admits nobody, and a row that silently does nothing is worse
488
- * than a form). */
384
+ // Absent means it lives in the create dialog's gallery. The two named forms are for what a user wouldn't think to look
385
+ // for:
386
+ // create: a shelf card that makes the automation in one click, switched off, ready to read (every chore is this)
387
+ // configure: a shelf card that opens the dialog prefilled, for a template that can't work unconfigured
489
388
  export const TemplateOfferSchema = z.enum(["create", "configure"]);
490
389
  export const AutomationTemplateSchema = z.object({
491
390
  // Prefills the automation name, so it is also what "does one of these already exist" is asked by.
@@ -509,11 +408,8 @@ export const AutomationTemplateSchema = z.object({
509
408
  // trigger beside it for context.
510
409
  description: z.string().min(1).optional(),
511
410
  offer: TemplateOfferSchema.optional(),
512
- /* WHETHER THE AUTOMATION THIS MAKES WATCHES THIS CODEBASE, the flag the created record stores, which is
513
- * what puts its row on the chores shelf rather than among the integrations.
514
- *
515
- * Carried rather than inferred from the trigger, because a nightly dependency sweep and a nightly Stripe
516
- * poll are both `schedule` and only one of them is about your code. */
411
+ // Whether the created automation watches this codebase, carried since the trigger alone can't distinguish a chore
412
+ // from an ordinary schedule.
517
413
  chore: z.boolean().optional(),
518
414
  });
519
415
  export type AutomationTemplate = z.infer<typeof AutomationTemplateSchema>;