@intentic/sandbox-contract 1.248.0 → 1.249.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (877) hide show
  1. package/README.md +18 -15
  2. package/dist/chores/chores.d.ts.map +1 -1
  3. package/dist/chores/chores.js.map +1 -1
  4. package/dist/chores/digest.d.ts.map +1 -1
  5. package/dist/chores/digest.js.map +1 -1
  6. package/dist/chores/extension-update.d.ts.map +1 -1
  7. package/dist/chores/extension-update.js.map +1 -1
  8. package/dist/chores/fix-deps.d.ts.map +1 -1
  9. package/dist/chores/fix-deps.js.map +1 -1
  10. package/dist/chores/index.d.ts +2 -2
  11. package/dist/chores/index.d.ts.map +1 -1
  12. package/dist/chores/index.js +1 -1
  13. package/dist/chores/index.js.map +1 -1
  14. package/dist/chores/probes.d.ts.map +1 -1
  15. package/dist/chores/probes.js.map +1 -1
  16. package/dist/chores/prompt.d.ts.map +1 -1
  17. package/dist/chores/prompt.js.map +1 -1
  18. package/dist/chores/stack.d.ts.map +1 -1
  19. package/dist/chores/stack.js.map +1 -1
  20. package/dist/chores/verdict.d.ts +7 -1
  21. package/dist/chores/verdict.d.ts.map +1 -1
  22. package/dist/chores/verdict.js +8 -0
  23. package/dist/chores/verdict.js.map +1 -1
  24. package/dist/contracts/accounts.contract.d.ts.map +1 -1
  25. package/dist/contracts/accounts.contract.js.map +1 -1
  26. package/dist/contracts/activity.contract.d.ts +1 -0
  27. package/dist/contracts/activity.contract.d.ts.map +1 -1
  28. package/dist/contracts/agent.contract.d.ts +12 -205
  29. package/dist/contracts/agent.contract.d.ts.map +1 -1
  30. package/dist/contracts/agent.contract.js +2 -1
  31. package/dist/contracts/agent.contract.js.map +1 -1
  32. package/dist/contracts/agents.contract.d.ts +228 -54
  33. package/dist/contracts/agents.contract.d.ts.map +1 -1
  34. package/dist/contracts/agents.contract.js +11 -2
  35. package/dist/contracts/agents.contract.js.map +1 -1
  36. package/dist/contracts/automations.contract.d.ts +35 -17
  37. package/dist/contracts/automations.contract.d.ts.map +1 -1
  38. package/dist/contracts/automations.contract.js +10 -1
  39. package/dist/contracts/automations.contract.js.map +1 -1
  40. package/dist/contracts/capabilities.contract.d.ts +0 -12
  41. package/dist/contracts/capabilities.contract.d.ts.map +1 -1
  42. package/dist/contracts/capabilities.contract.js +1 -1
  43. package/dist/contracts/capabilities.contract.js.map +1 -1
  44. package/dist/contracts/chores.contract.d.ts.map +1 -1
  45. package/dist/contracts/chores.contract.js.map +1 -1
  46. package/dist/contracts/ci.contract.d.ts +9 -0
  47. package/dist/contracts/ci.contract.d.ts.map +1 -1
  48. package/dist/contracts/endpoints.contract.d.ts.map +1 -1
  49. package/dist/contracts/endpoints.contract.js.map +1 -1
  50. package/dist/contracts/exit.contract.d.ts.map +1 -1
  51. package/dist/contracts/exit.contract.js +1 -1
  52. package/dist/contracts/exit.contract.js.map +1 -1
  53. package/dist/contracts/extensions.contract.d.ts.map +1 -1
  54. package/dist/contracts/extensions.contract.js.map +1 -1
  55. package/dist/contracts/git.contract.d.ts +45 -6
  56. package/dist/contracts/git.contract.d.ts.map +1 -1
  57. package/dist/contracts/git.contract.js +9 -9
  58. package/dist/contracts/git.contract.js.map +1 -1
  59. package/dist/contracts/host.contract.d.ts +2 -0
  60. package/dist/contracts/host.contract.d.ts.map +1 -1
  61. package/dist/contracts/host.contract.js.map +1 -1
  62. package/dist/contracts/intentic.contract.js +1 -1
  63. package/dist/contracts/intentic.contract.js.map +1 -1
  64. package/dist/contracts/logs.contract.d.ts.map +1 -1
  65. package/dist/contracts/logs.contract.js.map +1 -1
  66. package/dist/contracts/loops.contract.d.ts.map +1 -1
  67. package/dist/contracts/loops.contract.js.map +1 -1
  68. package/dist/contracts/personas.contract.d.ts +1 -0
  69. package/dist/contracts/personas.contract.d.ts.map +1 -1
  70. package/dist/contracts/personas.contract.js +1 -1
  71. package/dist/contracts/personas.contract.js.map +1 -1
  72. package/dist/contracts/providers.contract.d.ts.map +1 -1
  73. package/dist/contracts/providers.contract.js.map +1 -1
  74. package/dist/contracts/runner.contract.d.ts +97 -171
  75. package/dist/contracts/runner.contract.d.ts.map +1 -1
  76. package/dist/contracts/runner.contract.js +2 -2
  77. package/dist/contracts/runner.contract.js.map +1 -1
  78. package/dist/contracts/safety.contract.d.ts.map +1 -1
  79. package/dist/contracts/safety.contract.js +1 -1
  80. package/dist/contracts/safety.contract.js.map +1 -1
  81. package/dist/contracts/secrets.contract.d.ts.map +1 -1
  82. package/dist/contracts/secrets.contract.js.map +1 -1
  83. package/dist/contracts/sessions.contract.d.ts +2 -41
  84. package/dist/contracts/sessions.contract.d.ts.map +1 -1
  85. package/dist/contracts/sessions.contract.js +1 -1
  86. package/dist/contracts/sessions.contract.js.map +1 -1
  87. package/dist/contracts/settings.contract.d.ts +8 -18
  88. package/dist/contracts/settings.contract.d.ts.map +1 -1
  89. package/dist/contracts/settings.contract.js.map +1 -1
  90. package/dist/contracts/share.contract.d.ts.map +1 -1
  91. package/dist/contracts/share.contract.js.map +1 -1
  92. package/dist/contracts/skills.contract.d.ts.map +1 -1
  93. package/dist/contracts/skills.contract.js.map +1 -1
  94. package/dist/contracts/system.contract.d.ts +49 -73
  95. package/dist/contracts/system.contract.d.ts.map +1 -1
  96. package/dist/contracts/system.contract.js +12 -2
  97. package/dist/contracts/system.contract.js.map +1 -1
  98. package/dist/contracts/usage.contract.d.ts.map +1 -1
  99. package/dist/contracts/usage.contract.js.map +1 -1
  100. package/dist/contracts/vpn.contract.d.ts.map +1 -1
  101. package/dist/contracts/vpn.contract.js +1 -1
  102. package/dist/contracts/vpn.contract.js.map +1 -1
  103. package/dist/contracts/webext.contract.d.ts.map +1 -1
  104. package/dist/contracts/webext.contract.js.map +1 -1
  105. package/dist/contracts/workflows.contract.d.ts +7 -6
  106. package/dist/contracts/workflows.contract.d.ts.map +1 -1
  107. package/dist/contracts/workflows.contract.js +12 -3
  108. package/dist/contracts/workflows.contract.js.map +1 -1
  109. package/dist/contracts/workspace.contract.d.ts.map +1 -1
  110. package/dist/contracts/workspace.contract.js.map +1 -1
  111. package/dist/events/agent-events.d.ts +1237 -0
  112. package/dist/events/agent-events.d.ts.map +1 -0
  113. package/dist/events/agent-events.js +226 -0
  114. package/dist/events/agent-events.js.map +1 -0
  115. package/dist/events/cards.d.ts +404 -0
  116. package/dist/events/cards.d.ts.map +1 -0
  117. package/dist/events/cards.js +179 -0
  118. package/dist/events/cards.js.map +1 -0
  119. package/dist/events/resume.d.ts +23 -0
  120. package/dist/events/resume.d.ts.map +1 -0
  121. package/dist/events/resume.js +31 -0
  122. package/dist/events/resume.js.map +1 -0
  123. package/dist/events/system-events.d.ts +615 -0
  124. package/dist/events/system-events.d.ts.map +1 -0
  125. package/dist/events/system-events.js +64 -0
  126. package/dist/events/system-events.js.map +1 -0
  127. package/dist/events/transcript.d.ts +1755 -0
  128. package/dist/events/transcript.d.ts.map +1 -0
  129. package/dist/events/transcript.js +205 -0
  130. package/dist/events/transcript.js.map +1 -0
  131. package/dist/ids/conversation-ids.d.ts +8 -0
  132. package/dist/ids/conversation-ids.d.ts.map +1 -0
  133. package/dist/{conversation-ids.js → ids/conversation-ids.js} +13 -0
  134. package/dist/ids/conversation-ids.js.map +1 -0
  135. package/dist/ids/hostnames.d.ts.map +1 -0
  136. package/dist/ids/hostnames.js.map +1 -0
  137. package/dist/ids/session-names.d.ts.map +1 -0
  138. package/dist/ids/session-names.js.map +1 -0
  139. package/dist/ids/share-paths.d.ts.map +1 -0
  140. package/dist/ids/share-paths.js.map +1 -0
  141. package/dist/{tunnel-ids.d.ts → ids/tunnel-ids.d.ts} +1 -0
  142. package/dist/ids/tunnel-ids.d.ts.map +1 -0
  143. package/dist/{tunnel-ids.js → ids/tunnel-ids.js} +1 -0
  144. package/dist/ids/tunnel-ids.js.map +1 -0
  145. package/dist/index.d.ts +423 -450
  146. package/dist/index.d.ts.map +1 -1
  147. package/dist/index.js +54 -46
  148. package/dist/index.js.map +1 -1
  149. package/dist/{agent-catalog.d.ts → models/agent-catalog.d.ts} +2 -2
  150. package/dist/models/agent-catalog.d.ts.map +1 -0
  151. package/dist/models/agent-catalog.js.map +1 -0
  152. package/dist/models/agent-runtimes.d.ts.map +1 -0
  153. package/dist/models/agent-runtimes.js.map +1 -0
  154. package/dist/{fast-tier.d.ts → models/fast-tier.d.ts} +1 -1
  155. package/dist/models/fast-tier.d.ts.map +1 -0
  156. package/dist/models/fast-tier.js.map +1 -0
  157. package/dist/models/model-order.d.ts.map +1 -0
  158. package/dist/models/model-order.js.map +1 -0
  159. package/dist/{model-pins.d.ts → models/model-pins.d.ts} +1 -1
  160. package/dist/models/model-pins.d.ts.map +1 -0
  161. package/dist/models/model-pins.js.map +1 -0
  162. package/dist/{model-roles.d.ts → models/model-roles.d.ts} +0 -33
  163. package/dist/models/model-roles.d.ts.map +1 -0
  164. package/dist/{model-roles.js → models/model-roles.js} +0 -35
  165. package/dist/models/model-roles.js.map +1 -0
  166. package/dist/{plan-pools.d.ts → models/plan-pools.d.ts} +1 -1
  167. package/dist/models/plan-pools.d.ts.map +1 -0
  168. package/dist/models/plan-pools.js.map +1 -0
  169. package/dist/models/prompt-complexity.d.ts.map +1 -0
  170. package/dist/models/prompt-complexity.js.map +1 -0
  171. package/dist/models/provider-specs.d.ts.map +1 -0
  172. package/dist/models/provider-specs.js.map +1 -0
  173. package/dist/policy/approvals-execution.d.ts.map +1 -0
  174. package/dist/policy/approvals-execution.js.map +1 -0
  175. package/dist/{batch-runs.d.ts → policy/batch-runs.d.ts} +5 -1
  176. package/dist/policy/batch-runs.d.ts.map +1 -0
  177. package/dist/{batch-runs.js → policy/batch-runs.js} +10 -7
  178. package/dist/policy/batch-runs.js.map +1 -0
  179. package/dist/policy/capability-env.d.ts.map +1 -0
  180. package/dist/policy/capability-env.js.map +1 -0
  181. package/dist/policy/capability-secrets.d.ts.map +1 -0
  182. package/dist/policy/capability-secrets.js.map +1 -0
  183. package/dist/{card-status.d.ts → policy/card-status.d.ts} +2 -2
  184. package/dist/policy/card-status.d.ts.map +1 -0
  185. package/dist/{card-status.js → policy/card-status.js} +1 -5
  186. package/dist/policy/card-status.js.map +1 -0
  187. package/dist/{command-classes.d.ts → policy/command-classes.d.ts} +6 -2
  188. package/dist/policy/command-classes.d.ts.map +1 -0
  189. package/dist/{command-classes.js → policy/command-classes.js} +48 -11
  190. package/dist/policy/command-classes.js.map +1 -0
  191. package/dist/{command-run.d.ts → policy/command-run.d.ts} +1 -1
  192. package/dist/policy/command-run.d.ts.map +1 -0
  193. package/dist/policy/command-run.js.map +1 -0
  194. package/dist/policy/control-scopes.d.ts +16 -0
  195. package/dist/policy/control-scopes.d.ts.map +1 -0
  196. package/dist/policy/control-scopes.js +26 -0
  197. package/dist/policy/control-scopes.js.map +1 -0
  198. package/dist/policy/credential-material.d.ts.map +1 -0
  199. package/dist/policy/credential-material.js.map +1 -0
  200. package/dist/policy/needs-action.d.ts.map +1 -0
  201. package/dist/policy/needs-action.js.map +1 -0
  202. package/dist/policy/output-fields.d.ts.map +1 -0
  203. package/dist/policy/output-fields.js.map +1 -0
  204. package/dist/policy/overlay-lint.d.ts.map +1 -0
  205. package/dist/policy/overlay-lint.js.map +1 -0
  206. package/dist/policy/owner-ticket.d.ts.map +1 -0
  207. package/dist/{owner-ticket.js → policy/owner-ticket.js} +1 -1
  208. package/dist/policy/owner-ticket.js.map +1 -0
  209. package/dist/{safety-policy.d.ts → policy/safety-policy.d.ts} +6 -5
  210. package/dist/policy/safety-policy.d.ts.map +1 -0
  211. package/dist/{safety-policy.js → policy/safety-policy.js} +12 -12
  212. package/dist/policy/safety-policy.js.map +1 -0
  213. package/dist/policy/search-globs.d.ts.map +1 -0
  214. package/dist/policy/search-globs.js.map +1 -0
  215. package/dist/protocol/container-requirements.d.ts +20 -0
  216. package/dist/protocol/container-requirements.d.ts.map +1 -0
  217. package/dist/protocol/container-requirements.js +23 -0
  218. package/dist/protocol/container-requirements.js.map +1 -0
  219. package/dist/{host-protocol.d.ts → protocol/host-protocol.d.ts} +1 -0
  220. package/dist/protocol/host-protocol.d.ts.map +1 -0
  221. package/dist/{host-protocol.js → protocol/host-protocol.js} +1 -0
  222. package/dist/protocol/host-protocol.js.map +1 -0
  223. package/dist/protocol/ingress-contract.d.ts.map +1 -0
  224. package/dist/{ingress-contract.js → protocol/ingress-contract.js} +1 -1
  225. package/dist/protocol/ingress-contract.js.map +1 -0
  226. package/dist/protocol/ingress-protocol.d.ts.map +1 -0
  227. package/dist/protocol/ingress-protocol.js.map +1 -0
  228. package/dist/protocol/listener-protocol.d.ts.map +1 -0
  229. package/dist/{listener-protocol.js → protocol/listener-protocol.js} +1 -1
  230. package/dist/protocol/listener-protocol.js.map +1 -0
  231. package/dist/{peer-dial.d.ts → protocol/peer-dial.d.ts} +4 -1
  232. package/dist/protocol/peer-dial.d.ts.map +1 -0
  233. package/dist/{peer-dial.js → protocol/peer-dial.js} +51 -10
  234. package/dist/protocol/peer-dial.js.map +1 -0
  235. package/dist/protocol/peer-mcp-server.d.ts.map +1 -0
  236. package/dist/protocol/peer-mcp-server.js.map +1 -0
  237. package/dist/protocol/request-id.d.ts.map +1 -0
  238. package/dist/protocol/request-id.js.map +1 -0
  239. package/dist/protocol/routes.d.ts.map +1 -0
  240. package/dist/protocol/routes.js.map +1 -0
  241. package/dist/{runner-protocol.d.ts → protocol/runner-protocol.d.ts} +1 -0
  242. package/dist/protocol/runner-protocol.d.ts.map +1 -0
  243. package/dist/{runner-protocol.js → protocol/runner-protocol.js} +2 -1
  244. package/dist/protocol/runner-protocol.js.map +1 -0
  245. package/dist/protocol/sse.d.ts.map +1 -0
  246. package/dist/protocol/sse.js.map +1 -0
  247. package/dist/{terminal-protocol.d.ts → protocol/terminal-protocol.d.ts} +1 -3
  248. package/dist/protocol/terminal-protocol.d.ts.map +1 -0
  249. package/dist/protocol/terminal-protocol.js.map +1 -0
  250. package/dist/protocol/webext-links.d.ts.map +1 -0
  251. package/dist/protocol/webext-links.js.map +1 -0
  252. package/dist/{webext-protocol.d.ts → protocol/webext-protocol.d.ts} +1 -0
  253. package/dist/protocol/webext-protocol.d.ts.map +1 -0
  254. package/dist/{webext-protocol.js → protocol/webext-protocol.js} +1 -0
  255. package/dist/protocol/webext-protocol.js.map +1 -0
  256. package/dist/schemas/activity.d.ts +2 -0
  257. package/dist/schemas/activity.d.ts.map +1 -1
  258. package/dist/schemas/activity.js +4 -0
  259. package/dist/schemas/activity.js.map +1 -1
  260. package/dist/schemas/agent.d.ts +16 -4
  261. package/dist/schemas/agent.d.ts.map +1 -1
  262. package/dist/schemas/agent.js +21 -4
  263. package/dist/schemas/agent.js.map +1 -1
  264. package/dist/schemas/agents.d.ts +17 -4
  265. package/dist/schemas/agents.d.ts.map +1 -1
  266. package/dist/schemas/agents.js +15 -4
  267. package/dist/schemas/agents.js.map +1 -1
  268. package/dist/schemas/approvals.d.ts.map +1 -1
  269. package/dist/schemas/approvals.js.map +1 -1
  270. package/dist/schemas/automations.d.ts +54 -28
  271. package/dist/schemas/automations.d.ts.map +1 -1
  272. package/dist/schemas/automations.js +26 -8
  273. package/dist/schemas/automations.js.map +1 -1
  274. package/dist/schemas/capabilities.d.ts +0 -8
  275. package/dist/schemas/capabilities.d.ts.map +1 -1
  276. package/dist/schemas/capabilities.js +0 -4
  277. package/dist/schemas/capabilities.js.map +1 -1
  278. package/dist/schemas/ci.d.ts +10 -0
  279. package/dist/schemas/ci.d.ts.map +1 -1
  280. package/dist/schemas/ci.js +9 -1
  281. package/dist/schemas/ci.js.map +1 -1
  282. package/dist/schemas/codebase-health.d.ts.map +1 -1
  283. package/dist/schemas/codebase-health.js.map +1 -1
  284. package/dist/schemas/devices.d.ts +90 -0
  285. package/dist/schemas/devices.d.ts.map +1 -1
  286. package/dist/schemas/devices.js +10 -1
  287. package/dist/schemas/devices.js.map +1 -1
  288. package/dist/schemas/engines.d.ts.map +1 -1
  289. package/dist/schemas/engines.js.map +1 -1
  290. package/dist/schemas/environment.d.ts.map +1 -1
  291. package/dist/schemas/environment.js.map +1 -1
  292. package/dist/schemas/exit.d.ts.map +1 -1
  293. package/dist/schemas/exit.js.map +1 -1
  294. package/dist/schemas/extension-updates.d.ts.map +1 -1
  295. package/dist/schemas/extension-updates.js.map +1 -1
  296. package/dist/schemas/git-history.d.ts.map +1 -1
  297. package/dist/schemas/git-history.js.map +1 -1
  298. package/dist/schemas/git.d.ts +80 -16
  299. package/dist/schemas/git.d.ts.map +1 -1
  300. package/dist/schemas/git.js +37 -25
  301. package/dist/schemas/git.js.map +1 -1
  302. package/dist/schemas/history.d.ts.map +1 -1
  303. package/dist/schemas/history.js.map +1 -1
  304. package/dist/schemas/hosts.d.ts.map +1 -1
  305. package/dist/schemas/hosts.js.map +1 -1
  306. package/dist/schemas/inventory.d.ts.map +1 -1
  307. package/dist/schemas/inventory.js.map +1 -1
  308. package/dist/schemas/issues.d.ts +0 -1
  309. package/dist/schemas/issues.d.ts.map +1 -1
  310. package/dist/schemas/issues.js +0 -1
  311. package/dist/schemas/issues.js.map +1 -1
  312. package/dist/schemas/logs.d.ts.map +1 -1
  313. package/dist/schemas/logs.js.map +1 -1
  314. package/dist/schemas/loops.d.ts.map +1 -1
  315. package/dist/schemas/loops.js +1 -1
  316. package/dist/schemas/loops.js.map +1 -1
  317. package/dist/schemas/maintenance.d.ts.map +1 -1
  318. package/dist/schemas/maintenance.js.map +1 -1
  319. package/dist/schemas/marketplace.d.ts +0 -4
  320. package/dist/schemas/marketplace.d.ts.map +1 -1
  321. package/dist/schemas/panels.d.ts.map +1 -1
  322. package/dist/schemas/panels.js.map +1 -1
  323. package/dist/schemas/personas.d.ts +2 -1
  324. package/dist/schemas/personas.d.ts.map +1 -1
  325. package/dist/schemas/personas.js +6 -2
  326. package/dist/schemas/personas.js.map +1 -1
  327. package/dist/schemas/plan-limits.d.ts +2 -4
  328. package/dist/schemas/plan-limits.d.ts.map +1 -1
  329. package/dist/schemas/plan-limits.js +5 -8
  330. package/dist/schemas/plan-limits.js.map +1 -1
  331. package/dist/schemas/ports.d.ts.map +1 -1
  332. package/dist/schemas/ports.js.map +1 -1
  333. package/dist/schemas/provider-oauth.d.ts.map +1 -1
  334. package/dist/schemas/provider-oauth.js.map +1 -1
  335. package/dist/schemas/provider-subscriptions.d.ts +1 -1
  336. package/dist/schemas/provider-subscriptions.d.ts.map +1 -1
  337. package/dist/schemas/provider-subscriptions.js +1 -1
  338. package/dist/schemas/provider-subscriptions.js.map +1 -1
  339. package/dist/schemas/public.d.ts.map +1 -1
  340. package/dist/schemas/public.js.map +1 -1
  341. package/dist/schemas/push.d.ts.map +1 -1
  342. package/dist/schemas/push.js.map +1 -1
  343. package/dist/schemas/secrets.d.ts.map +1 -1
  344. package/dist/schemas/secrets.js.map +1 -1
  345. package/dist/schemas/settings.d.ts +6 -9
  346. package/dist/schemas/settings.d.ts.map +1 -1
  347. package/dist/schemas/settings.js +16 -5
  348. package/dist/schemas/settings.js.map +1 -1
  349. package/dist/schemas/share.d.ts.map +1 -1
  350. package/dist/schemas/share.js.map +1 -1
  351. package/dist/schemas/shared.d.ts +4 -0
  352. package/dist/schemas/shared.d.ts.map +1 -1
  353. package/dist/schemas/shared.js +3 -0
  354. package/dist/schemas/shared.js.map +1 -1
  355. package/dist/schemas/system.d.ts +6 -0
  356. package/dist/schemas/system.d.ts.map +1 -1
  357. package/dist/schemas/system.js +10 -0
  358. package/dist/schemas/system.js.map +1 -1
  359. package/dist/schemas/terminal.d.ts.map +1 -1
  360. package/dist/schemas/terminal.js.map +1 -1
  361. package/dist/schemas/usage.d.ts.map +1 -1
  362. package/dist/schemas/usage.js.map +1 -1
  363. package/dist/schemas/vpn.d.ts.map +1 -1
  364. package/dist/schemas/vpn.js.map +1 -1
  365. package/dist/schemas/webext.d.ts.map +1 -1
  366. package/dist/schemas/webext.js.map +1 -1
  367. package/dist/schemas/workflows.d.ts +66 -9
  368. package/dist/schemas/workflows.d.ts.map +1 -1
  369. package/dist/schemas/workflows.js +6 -5
  370. package/dist/schemas/workflows.js.map +1 -1
  371. package/dist/schemas/workspace-repos.d.ts.map +1 -1
  372. package/dist/schemas/workspace-repos.js.map +1 -1
  373. package/dist/schemas/workspace-search.d.ts.map +1 -1
  374. package/dist/schemas/workspace-search.js.map +1 -1
  375. package/dist/schemas/workspace-setup.d.ts.map +1 -1
  376. package/dist/schemas/workspace-setup.js.map +1 -1
  377. package/dist/schemas/workspace-tree.d.ts.map +1 -1
  378. package/dist/schemas/workspace-tree.js.map +1 -1
  379. package/dist/state/arrival.d.ts.map +1 -0
  380. package/dist/{arrival.js → state/arrival.js} +1 -1
  381. package/dist/state/arrival.js.map +1 -0
  382. package/dist/state/contract-lock.d.ts.map +1 -0
  383. package/dist/{contract-lock.js → state/contract-lock.js} +1 -1
  384. package/dist/state/contract-lock.js.map +1 -0
  385. package/dist/{definition.d.ts → state/definition.d.ts} +21 -17
  386. package/dist/state/definition.d.ts.map +1 -0
  387. package/dist/{definition.js → state/definition.js} +4 -4
  388. package/dist/state/definition.js.map +1 -0
  389. package/dist/state/history-state.d.ts.map +1 -0
  390. package/dist/{history-state.js → state/history-state.js} +1 -0
  391. package/dist/state/history-state.js.map +1 -0
  392. package/dist/state/runtime-state.d.ts.map +1 -0
  393. package/dist/state/runtime-state.js.map +1 -0
  394. package/dist/state/starter.d.ts.map +1 -0
  395. package/dist/state/starter.js.map +1 -0
  396. package/dist/state/state-portability.d.ts.map +1 -0
  397. package/dist/state/state-portability.js.map +1 -0
  398. package/dist/state/versions.d.ts.map +1 -0
  399. package/dist/state/versions.js.map +1 -0
  400. package/dist/{workspace-state.d.ts → state/workspace-state.d.ts} +8 -0
  401. package/dist/state/workspace-state.d.ts.map +1 -0
  402. package/dist/{workspace-state.js → state/workspace-state.js} +25 -0
  403. package/dist/state/workspace-state.js.map +1 -0
  404. package/dist/{documents.d.ts → text/documents.d.ts} +1 -1
  405. package/dist/text/documents.d.ts.map +1 -0
  406. package/dist/{documents.js → text/documents.js} +1 -1
  407. package/dist/text/documents.js.map +1 -0
  408. package/dist/text/embed.d.ts.map +1 -0
  409. package/dist/text/embed.js.map +1 -0
  410. package/dist/text/mentions.d.ts.map +1 -0
  411. package/dist/text/mentions.js.map +1 -0
  412. package/dist/text/model-answer.d.ts +3 -0
  413. package/dist/text/model-answer.d.ts.map +1 -0
  414. package/dist/text/model-answer.js +3 -0
  415. package/dist/text/model-answer.js.map +1 -0
  416. package/dist/text/path-refs.d.ts.map +1 -0
  417. package/dist/text/path-refs.js.map +1 -0
  418. package/dist/{shell-regions.d.ts → text/shell-regions.d.ts} +1 -1
  419. package/dist/text/shell-regions.d.ts.map +1 -0
  420. package/dist/text/shell-regions.js.map +1 -0
  421. package/dist/text/title.d.ts.map +1 -0
  422. package/dist/text/title.js.map +1 -0
  423. package/dist/{transcript-fold.d.ts → text/transcript-fold.d.ts} +2 -1
  424. package/dist/text/transcript-fold.d.ts.map +1 -0
  425. package/dist/{transcript-fold.js → text/transcript-fold.js} +2 -16
  426. package/dist/text/transcript-fold.js.map +1 -0
  427. package/dist/text/whisper.d.ts +3 -0
  428. package/dist/text/whisper.d.ts.map +1 -0
  429. package/dist/text/whisper.js +11 -0
  430. package/dist/text/whisper.js.map +1 -0
  431. package/dist/{workflow-faults.d.ts → text/workflow-faults.d.ts} +1 -1
  432. package/dist/text/workflow-faults.d.ts.map +1 -0
  433. package/dist/{workflow-faults.js → text/workflow-faults.js} +1 -1
  434. package/dist/text/workflow-faults.js.map +1 -0
  435. package/package.json +70 -70
  436. package/src/chores/chores.test.ts +4 -10
  437. package/src/chores/chores.ts +148 -392
  438. package/src/chores/digest.ts +8 -28
  439. package/src/chores/extension-update.ts +3 -8
  440. package/src/chores/fix-deps.ts +4 -18
  441. package/src/chores/index.ts +2 -2
  442. package/src/chores/probes.test.ts +7 -43
  443. package/src/chores/probes.ts +62 -167
  444. package/src/chores/prompt.ts +10 -34
  445. package/src/chores/stack.test.ts +6 -45
  446. package/src/chores/stack.ts +27 -118
  447. package/src/chores/verdict.test.ts +101 -80
  448. package/src/chores/verdict.ts +54 -99
  449. package/src/contracts/accounts.contract.ts +4 -19
  450. package/src/contracts/agent.contract.ts +7 -22
  451. package/src/contracts/agents.contract.ts +25 -71
  452. package/src/contracts/automations.contract.ts +14 -30
  453. package/src/contracts/capabilities.contract.ts +8 -35
  454. package/src/contracts/chores.contract.ts +4 -15
  455. package/src/contracts/endpoints.contract.ts +5 -22
  456. package/src/contracts/exit.contract.ts +7 -30
  457. package/src/contracts/extensions.contract.ts +8 -30
  458. package/src/contracts/git.contract.ts +25 -49
  459. package/src/contracts/host.contract.ts +9 -44
  460. package/src/contracts/intentic.contract.ts +1 -1
  461. package/src/contracts/logs.contract.ts +3 -13
  462. package/src/contracts/loops.contract.ts +9 -40
  463. package/src/contracts/personas.contract.ts +10 -35
  464. package/src/contracts/providers.contract.ts +4 -17
  465. package/src/contracts/runner.contract.ts +12 -39
  466. package/src/contracts/safety.contract.ts +5 -14
  467. package/src/contracts/secrets.contract.ts +4 -22
  468. package/src/contracts/sessions.contract.ts +1 -1
  469. package/src/contracts/settings.contract.ts +4 -10
  470. package/src/contracts/share.contract.ts +3 -9
  471. package/src/contracts/skills.contract.ts +4 -15
  472. package/src/contracts/system.contract.ts +26 -52
  473. package/src/contracts/usage.contract.ts +7 -21
  474. package/src/contracts/vpn.contract.ts +9 -16
  475. package/src/contracts/webext.contract.ts +9 -25
  476. package/src/contracts/workflows.contract.ts +34 -58
  477. package/src/contracts/workspace.contract.ts +19 -50
  478. package/src/events/agent-events.ts +345 -0
  479. package/src/events/cards.ts +286 -0
  480. package/src/{events.test.ts → events/resume.test.ts} +4 -19
  481. package/src/events/resume.ts +60 -0
  482. package/src/events/system-events.ts +139 -0
  483. package/src/events/transcript.ts +320 -0
  484. package/src/{conversation-ids.test.ts → ids/conversation-ids.test.ts} +25 -13
  485. package/src/ids/conversation-ids.ts +178 -0
  486. package/src/ids/hostnames.ts +129 -0
  487. package/src/ids/session-names.ts +29 -0
  488. package/src/ids/share-paths.ts +43 -0
  489. package/src/{tunnel-ids.test.ts → ids/tunnel-ids.test.ts} +1 -14
  490. package/src/ids/tunnel-ids.ts +29 -0
  491. package/src/index.ts +71 -87
  492. package/src/{agent-catalog.test.ts → models/agent-catalog.test.ts} +19 -93
  493. package/src/models/agent-catalog.ts +174 -0
  494. package/src/models/agent-runtimes.ts +201 -0
  495. package/src/models/capability-ledger.test.ts +84 -0
  496. package/src/{fast-tier.test.ts → models/fast-tier.test.ts} +7 -18
  497. package/src/models/fast-tier.ts +36 -0
  498. package/src/{model-order.test.ts → models/model-order.test.ts} +19 -40
  499. package/src/models/model-order.ts +163 -0
  500. package/src/{model-pins.test.ts → models/model-pins.test.ts} +12 -46
  501. package/src/models/model-pins.ts +57 -0
  502. package/src/models/model-roles.test.ts +38 -0
  503. package/src/models/model-roles.ts +180 -0
  504. package/src/{plan-pools.test.ts → models/plan-pools.test.ts} +6 -11
  505. package/src/models/plan-pools.ts +65 -0
  506. package/src/{prompt-complexity.test.ts → models/prompt-complexity.test.ts} +8 -60
  507. package/src/models/prompt-complexity.ts +215 -0
  508. package/src/{provider-specs.test.ts → models/provider-specs.test.ts} +18 -47
  509. package/src/models/provider-specs.ts +272 -0
  510. package/src/policy/approvals-execution.ts +58 -0
  511. package/src/{batch-runs.test.ts → policy/batch-runs.test.ts} +4 -20
  512. package/src/policy/batch-runs.ts +137 -0
  513. package/src/policy/capability-secrets.ts +5 -0
  514. package/src/{card-status.ts → policy/card-status.ts} +11 -26
  515. package/src/{command-classes.test.ts → policy/command-classes.test.ts} +11 -118
  516. package/src/policy/command-classes.ts +395 -0
  517. package/src/policy/command-run.ts +65 -0
  518. package/src/policy/control-scopes.ts +38 -0
  519. package/src/{credential-material.test.ts → policy/credential-material.test.ts} +4 -26
  520. package/src/policy/credential-material.ts +91 -0
  521. package/src/policy/needs-action.ts +5 -0
  522. package/src/policy/output-fields.ts +86 -0
  523. package/src/policy/overlay-lint.ts +100 -0
  524. package/src/{owner-ticket.test.ts → policy/owner-ticket.test.ts} +1 -1
  525. package/src/{owner-ticket.ts → policy/owner-ticket.ts} +9 -31
  526. package/src/policy/safety-policy.test.ts +84 -0
  527. package/src/policy/safety-policy.ts +142 -0
  528. package/src/policy/search-globs.ts +60 -0
  529. package/src/protocol/container-requirements.test.ts +72 -0
  530. package/src/protocol/container-requirements.ts +58 -0
  531. package/src/protocol/host-protocol.ts +29 -0
  532. package/src/protocol/ingress-contract.ts +103 -0
  533. package/src/{ingress-protocol.test.ts → protocol/ingress-protocol.test.ts} +25 -90
  534. package/src/protocol/ingress-protocol.ts +441 -0
  535. package/src/protocol/listener-protocol.ts +75 -0
  536. package/src/{peer-dial.test.ts → protocol/peer-dial.test.ts} +52 -1
  537. package/src/protocol/peer-dial.ts +207 -0
  538. package/src/{peer-mcp-server.ts → protocol/peer-mcp-server.ts} +16 -41
  539. package/src/protocol/request-id.ts +5 -0
  540. package/src/{routes.test.ts → protocol/routes.test.ts} +14 -22
  541. package/src/protocol/routes.ts +159 -0
  542. package/src/protocol/runner-protocol.ts +197 -0
  543. package/src/protocol/terminal-protocol.ts +13 -0
  544. package/src/protocol/webext-links.ts +50 -0
  545. package/src/protocol/webext-protocol.ts +24 -0
  546. package/src/schemas/activity.ts +22 -30
  547. package/src/schemas/agent.ts +130 -238
  548. package/src/schemas/agents.ts +165 -483
  549. package/src/schemas/approvals.ts +23 -71
  550. package/src/schemas/automations.ts +142 -250
  551. package/src/schemas/capabilities.ts +127 -414
  552. package/src/schemas/ci.ts +56 -108
  553. package/src/schemas/codebase-health.ts +7 -11
  554. package/src/schemas/devices.ts +98 -321
  555. package/src/schemas/engines.ts +16 -44
  556. package/src/schemas/environment.ts +41 -91
  557. package/src/schemas/exit.ts +24 -81
  558. package/src/schemas/extension-updates.ts +42 -87
  559. package/src/schemas/git-history.ts +30 -84
  560. package/src/schemas/git.ts +141 -256
  561. package/src/schemas/history.ts +14 -40
  562. package/src/schemas/hosts.ts +9 -15
  563. package/src/schemas/inventory.ts +8 -10
  564. package/src/schemas/issues.ts +66 -134
  565. package/src/schemas/logs.ts +15 -34
  566. package/src/schemas/loops.ts +46 -163
  567. package/src/schemas/maintenance.ts +47 -172
  568. package/src/schemas/panels.ts +20 -45
  569. package/src/schemas/personas.ts +50 -200
  570. package/src/schemas/plan-limits.ts +58 -197
  571. package/src/schemas/ports.ts +14 -32
  572. package/src/schemas/provider-oauth.ts +23 -76
  573. package/src/schemas/provider-subscriptions.ts +4 -13
  574. package/src/schemas/public.ts +4 -15
  575. package/src/schemas/push.ts +8 -36
  576. package/src/schemas/secrets.ts +20 -64
  577. package/src/schemas/settings.ts +175 -600
  578. package/src/schemas/share.ts +14 -32
  579. package/src/schemas/shared.ts +14 -13
  580. package/src/schemas/system.ts +46 -78
  581. package/src/schemas/terminal.ts +41 -120
  582. package/src/schemas/usage.ts +44 -233
  583. package/src/schemas/version-seam.test.ts +9 -26
  584. package/src/schemas/vpn.ts +27 -64
  585. package/src/schemas/webext.ts +22 -53
  586. package/src/schemas/workflows.ts +57 -183
  587. package/src/schemas/workspace-repos.ts +12 -24
  588. package/src/schemas/workspace-search.ts +17 -35
  589. package/src/schemas/workspace-setup.ts +4 -11
  590. package/src/schemas/workspace-tree.ts +32 -91
  591. package/src/state/arrival.ts +109 -0
  592. package/src/state/contract-lock.test.ts +17 -0
  593. package/src/state/contract-lock.ts +49 -0
  594. package/src/state/definition.ts +143 -0
  595. package/src/state/history-state.ts +103 -0
  596. package/src/{runtime-state.test.ts → state/runtime-state.test.ts} +3 -10
  597. package/src/state/runtime-state.ts +62 -0
  598. package/src/state/starter.ts +5 -0
  599. package/src/state/state-portability.ts +27 -0
  600. package/src/state/versions.ts +26 -0
  601. package/src/{workspace-state.test.ts → state/workspace-state.test.ts} +65 -172
  602. package/src/state/workspace-state.ts +669 -0
  603. package/src/{documents.test.ts → text/documents.test.ts} +1 -1
  604. package/src/text/documents.ts +42 -0
  605. package/src/text/embed.ts +132 -0
  606. package/src/text/mentions.ts +21 -0
  607. package/src/text/model-answer.ts +9 -0
  608. package/src/text/path-refs.ts +39 -0
  609. package/src/text/shell-regions.ts +224 -0
  610. package/src/{title.test.ts → text/title.test.ts} +13 -32
  611. package/src/text/title.ts +202 -0
  612. package/src/{transcript-fold.test.ts → text/transcript-fold.test.ts} +5 -83
  613. package/src/{transcript-fold.ts → text/transcript-fold.ts} +65 -170
  614. package/src/text/whisper.test.ts +19 -0
  615. package/src/text/whisper.ts +17 -0
  616. package/src/{workflow-faults.test.ts → text/workflow-faults.test.ts} +6 -24
  617. package/src/{workflow-faults.ts → text/workflow-faults.ts} +20 -60
  618. package/dist/agent-catalog.d.ts.map +0 -1
  619. package/dist/agent-catalog.js.map +0 -1
  620. package/dist/agent-runtimes.d.ts.map +0 -1
  621. package/dist/agent-runtimes.js.map +0 -1
  622. package/dist/approvals-execution.d.ts.map +0 -1
  623. package/dist/approvals-execution.js.map +0 -1
  624. package/dist/arrival.d.ts.map +0 -1
  625. package/dist/arrival.js.map +0 -1
  626. package/dist/batch-runs.d.ts.map +0 -1
  627. package/dist/batch-runs.js.map +0 -1
  628. package/dist/capability-env.d.ts.map +0 -1
  629. package/dist/capability-env.js.map +0 -1
  630. package/dist/capability-secrets.d.ts.map +0 -1
  631. package/dist/capability-secrets.js.map +0 -1
  632. package/dist/card-status.d.ts.map +0 -1
  633. package/dist/card-status.js.map +0 -1
  634. package/dist/command-classes.d.ts.map +0 -1
  635. package/dist/command-classes.js.map +0 -1
  636. package/dist/command-run.d.ts.map +0 -1
  637. package/dist/command-run.js.map +0 -1
  638. package/dist/contract-lock.d.ts.map +0 -1
  639. package/dist/contract-lock.js.map +0 -1
  640. package/dist/conversation-ids.d.ts +0 -4
  641. package/dist/conversation-ids.d.ts.map +0 -1
  642. package/dist/conversation-ids.js.map +0 -1
  643. package/dist/credential-material.d.ts.map +0 -1
  644. package/dist/credential-material.js.map +0 -1
  645. package/dist/definition.d.ts.map +0 -1
  646. package/dist/definition.js.map +0 -1
  647. package/dist/documents.d.ts.map +0 -1
  648. package/dist/documents.js.map +0 -1
  649. package/dist/embed.d.ts.map +0 -1
  650. package/dist/embed.js.map +0 -1
  651. package/dist/events.d.ts +0 -4336
  652. package/dist/events.d.ts.map +0 -1
  653. package/dist/events.js +0 -725
  654. package/dist/events.js.map +0 -1
  655. package/dist/fast-tier.d.ts.map +0 -1
  656. package/dist/fast-tier.js.map +0 -1
  657. package/dist/history-state.d.ts.map +0 -1
  658. package/dist/history-state.js.map +0 -1
  659. package/dist/host-protocol.d.ts.map +0 -1
  660. package/dist/host-protocol.js.map +0 -1
  661. package/dist/hostnames.d.ts.map +0 -1
  662. package/dist/hostnames.js.map +0 -1
  663. package/dist/ingress-contract.d.ts.map +0 -1
  664. package/dist/ingress-contract.js.map +0 -1
  665. package/dist/ingress-protocol.d.ts.map +0 -1
  666. package/dist/ingress-protocol.js.map +0 -1
  667. package/dist/listener-protocol.d.ts.map +0 -1
  668. package/dist/listener-protocol.js.map +0 -1
  669. package/dist/mentions.d.ts.map +0 -1
  670. package/dist/mentions.js.map +0 -1
  671. package/dist/model-order.d.ts.map +0 -1
  672. package/dist/model-order.js.map +0 -1
  673. package/dist/model-pins.d.ts.map +0 -1
  674. package/dist/model-pins.js.map +0 -1
  675. package/dist/model-roles.d.ts.map +0 -1
  676. package/dist/model-roles.js.map +0 -1
  677. package/dist/needs-action.d.ts.map +0 -1
  678. package/dist/needs-action.js.map +0 -1
  679. package/dist/output-fields.d.ts.map +0 -1
  680. package/dist/output-fields.js.map +0 -1
  681. package/dist/overlay-lint.d.ts.map +0 -1
  682. package/dist/overlay-lint.js.map +0 -1
  683. package/dist/owner-ticket.d.ts.map +0 -1
  684. package/dist/owner-ticket.js.map +0 -1
  685. package/dist/path-refs.d.ts.map +0 -1
  686. package/dist/path-refs.js.map +0 -1
  687. package/dist/peer-dial.d.ts.map +0 -1
  688. package/dist/peer-dial.js.map +0 -1
  689. package/dist/peer-mcp-server.d.ts.map +0 -1
  690. package/dist/peer-mcp-server.js.map +0 -1
  691. package/dist/plan-pools.d.ts.map +0 -1
  692. package/dist/plan-pools.js.map +0 -1
  693. package/dist/prompt-complexity.d.ts.map +0 -1
  694. package/dist/prompt-complexity.js.map +0 -1
  695. package/dist/provider-specs.d.ts.map +0 -1
  696. package/dist/provider-specs.js.map +0 -1
  697. package/dist/request-id.d.ts.map +0 -1
  698. package/dist/request-id.js.map +0 -1
  699. package/dist/routes.d.ts.map +0 -1
  700. package/dist/routes.js.map +0 -1
  701. package/dist/runner-protocol.d.ts.map +0 -1
  702. package/dist/runner-protocol.js.map +0 -1
  703. package/dist/runtime-state.d.ts.map +0 -1
  704. package/dist/runtime-state.js.map +0 -1
  705. package/dist/safety-policy.d.ts.map +0 -1
  706. package/dist/safety-policy.js.map +0 -1
  707. package/dist/search-globs.d.ts.map +0 -1
  708. package/dist/search-globs.js.map +0 -1
  709. package/dist/session-names.d.ts.map +0 -1
  710. package/dist/session-names.js.map +0 -1
  711. package/dist/share-paths.d.ts.map +0 -1
  712. package/dist/share-paths.js.map +0 -1
  713. package/dist/shell-regions.d.ts.map +0 -1
  714. package/dist/shell-regions.js.map +0 -1
  715. package/dist/sse.d.ts.map +0 -1
  716. package/dist/sse.js.map +0 -1
  717. package/dist/starter.d.ts.map +0 -1
  718. package/dist/starter.js.map +0 -1
  719. package/dist/state-portability.d.ts.map +0 -1
  720. package/dist/state-portability.js.map +0 -1
  721. package/dist/terminal-protocol.d.ts.map +0 -1
  722. package/dist/terminal-protocol.js.map +0 -1
  723. package/dist/title.d.ts.map +0 -1
  724. package/dist/title.js.map +0 -1
  725. package/dist/transcript-fold.d.ts.map +0 -1
  726. package/dist/transcript-fold.js.map +0 -1
  727. package/dist/tunnel-ids.d.ts.map +0 -1
  728. package/dist/tunnel-ids.js.map +0 -1
  729. package/dist/versions.d.ts.map +0 -1
  730. package/dist/versions.js.map +0 -1
  731. package/dist/webext-links.d.ts.map +0 -1
  732. package/dist/webext-links.js.map +0 -1
  733. package/dist/webext-protocol.d.ts.map +0 -1
  734. package/dist/webext-protocol.js.map +0 -1
  735. package/dist/workflow-faults.d.ts.map +0 -1
  736. package/dist/workflow-faults.js.map +0 -1
  737. package/dist/workspace-state.d.ts.map +0 -1
  738. package/dist/workspace-state.js.map +0 -1
  739. package/src/agent-catalog.ts +0 -316
  740. package/src/agent-runtimes.ts +0 -419
  741. package/src/approvals-execution.ts +0 -96
  742. package/src/arrival.ts +0 -160
  743. package/src/batch-runs.ts +0 -188
  744. package/src/capability-ledger.test.ts +0 -140
  745. package/src/capability-secrets.ts +0 -20
  746. package/src/command-classes.ts +0 -617
  747. package/src/command-run.ts +0 -78
  748. package/src/contract-lock.test.ts +0 -23
  749. package/src/contract-lock.ts +0 -66
  750. package/src/conversation-ids.ts +0 -207
  751. package/src/credential-material.ts +0 -181
  752. package/src/definition.ts +0 -207
  753. package/src/documents.ts +0 -67
  754. package/src/embed.ts +0 -164
  755. package/src/events.ts +0 -1870
  756. package/src/fast-tier.ts +0 -72
  757. package/src/history-state.ts +0 -174
  758. package/src/host-protocol.ts +0 -36
  759. package/src/hostnames.ts +0 -180
  760. package/src/ingress-contract.ts +0 -157
  761. package/src/ingress-protocol.ts +0 -625
  762. package/src/listener-protocol.ts +0 -96
  763. package/src/mentions.ts +0 -25
  764. package/src/model-order.ts +0 -262
  765. package/src/model-pins.ts +0 -132
  766. package/src/model-roles.test.ts +0 -52
  767. package/src/model-roles.ts +0 -320
  768. package/src/needs-action.ts +0 -14
  769. package/src/output-fields.ts +0 -111
  770. package/src/overlay-lint.ts +0 -116
  771. package/src/path-refs.ts +0 -59
  772. package/src/peer-dial.ts +0 -163
  773. package/src/plan-pools.ts +0 -92
  774. package/src/prompt-complexity.ts +0 -334
  775. package/src/provider-specs.ts +0 -432
  776. package/src/request-id.ts +0 -41
  777. package/src/routes.ts +0 -219
  778. package/src/runner-protocol.ts +0 -239
  779. package/src/runtime-state.ts +0 -140
  780. package/src/safety-policy.test.ts +0 -88
  781. package/src/safety-policy.ts +0 -258
  782. package/src/search-globs.ts +0 -76
  783. package/src/session-names.ts +0 -44
  784. package/src/share-paths.ts +0 -68
  785. package/src/shell-regions.ts +0 -289
  786. package/src/starter.ts +0 -13
  787. package/src/state-portability.ts +0 -56
  788. package/src/terminal-protocol.ts +0 -16
  789. package/src/title.ts +0 -267
  790. package/src/tunnel-ids.ts +0 -57
  791. package/src/versions.ts +0 -48
  792. package/src/webext-links.ts +0 -90
  793. package/src/webext-protocol.ts +0 -27
  794. package/src/workspace-state.ts +0 -1090
  795. /package/dist/{hostnames.d.ts → ids/hostnames.d.ts} +0 -0
  796. /package/dist/{hostnames.js → ids/hostnames.js} +0 -0
  797. /package/dist/{session-names.d.ts → ids/session-names.d.ts} +0 -0
  798. /package/dist/{session-names.js → ids/session-names.js} +0 -0
  799. /package/dist/{share-paths.d.ts → ids/share-paths.d.ts} +0 -0
  800. /package/dist/{share-paths.js → ids/share-paths.js} +0 -0
  801. /package/dist/{agent-catalog.js → models/agent-catalog.js} +0 -0
  802. /package/dist/{agent-runtimes.d.ts → models/agent-runtimes.d.ts} +0 -0
  803. /package/dist/{agent-runtimes.js → models/agent-runtimes.js} +0 -0
  804. /package/dist/{fast-tier.js → models/fast-tier.js} +0 -0
  805. /package/dist/{model-order.d.ts → models/model-order.d.ts} +0 -0
  806. /package/dist/{model-order.js → models/model-order.js} +0 -0
  807. /package/dist/{model-pins.js → models/model-pins.js} +0 -0
  808. /package/dist/{plan-pools.js → models/plan-pools.js} +0 -0
  809. /package/dist/{prompt-complexity.d.ts → models/prompt-complexity.d.ts} +0 -0
  810. /package/dist/{prompt-complexity.js → models/prompt-complexity.js} +0 -0
  811. /package/dist/{provider-specs.d.ts → models/provider-specs.d.ts} +0 -0
  812. /package/dist/{provider-specs.js → models/provider-specs.js} +0 -0
  813. /package/dist/{approvals-execution.d.ts → policy/approvals-execution.d.ts} +0 -0
  814. /package/dist/{approvals-execution.js → policy/approvals-execution.js} +0 -0
  815. /package/dist/{capability-env.d.ts → policy/capability-env.d.ts} +0 -0
  816. /package/dist/{capability-env.js → policy/capability-env.js} +0 -0
  817. /package/dist/{capability-secrets.d.ts → policy/capability-secrets.d.ts} +0 -0
  818. /package/dist/{capability-secrets.js → policy/capability-secrets.js} +0 -0
  819. /package/dist/{command-run.js → policy/command-run.js} +0 -0
  820. /package/dist/{credential-material.d.ts → policy/credential-material.d.ts} +0 -0
  821. /package/dist/{credential-material.js → policy/credential-material.js} +0 -0
  822. /package/dist/{needs-action.d.ts → policy/needs-action.d.ts} +0 -0
  823. /package/dist/{needs-action.js → policy/needs-action.js} +0 -0
  824. /package/dist/{output-fields.d.ts → policy/output-fields.d.ts} +0 -0
  825. /package/dist/{output-fields.js → policy/output-fields.js} +0 -0
  826. /package/dist/{overlay-lint.d.ts → policy/overlay-lint.d.ts} +0 -0
  827. /package/dist/{overlay-lint.js → policy/overlay-lint.js} +0 -0
  828. /package/dist/{owner-ticket.d.ts → policy/owner-ticket.d.ts} +0 -0
  829. /package/dist/{search-globs.d.ts → policy/search-globs.d.ts} +0 -0
  830. /package/dist/{search-globs.js → policy/search-globs.js} +0 -0
  831. /package/dist/{ingress-contract.d.ts → protocol/ingress-contract.d.ts} +0 -0
  832. /package/dist/{ingress-protocol.d.ts → protocol/ingress-protocol.d.ts} +0 -0
  833. /package/dist/{ingress-protocol.js → protocol/ingress-protocol.js} +0 -0
  834. /package/dist/{listener-protocol.d.ts → protocol/listener-protocol.d.ts} +0 -0
  835. /package/dist/{peer-mcp-server.d.ts → protocol/peer-mcp-server.d.ts} +0 -0
  836. /package/dist/{peer-mcp-server.js → protocol/peer-mcp-server.js} +0 -0
  837. /package/dist/{request-id.d.ts → protocol/request-id.d.ts} +0 -0
  838. /package/dist/{request-id.js → protocol/request-id.js} +0 -0
  839. /package/dist/{routes.d.ts → protocol/routes.d.ts} +0 -0
  840. /package/dist/{routes.js → protocol/routes.js} +0 -0
  841. /package/dist/{sse.d.ts → protocol/sse.d.ts} +0 -0
  842. /package/dist/{sse.js → protocol/sse.js} +0 -0
  843. /package/dist/{terminal-protocol.js → protocol/terminal-protocol.js} +0 -0
  844. /package/dist/{webext-links.d.ts → protocol/webext-links.d.ts} +0 -0
  845. /package/dist/{webext-links.js → protocol/webext-links.js} +0 -0
  846. /package/dist/{arrival.d.ts → state/arrival.d.ts} +0 -0
  847. /package/dist/{contract-lock.d.ts → state/contract-lock.d.ts} +0 -0
  848. /package/dist/{history-state.d.ts → state/history-state.d.ts} +0 -0
  849. /package/dist/{runtime-state.d.ts → state/runtime-state.d.ts} +0 -0
  850. /package/dist/{runtime-state.js → state/runtime-state.js} +0 -0
  851. /package/dist/{starter.d.ts → state/starter.d.ts} +0 -0
  852. /package/dist/{starter.js → state/starter.js} +0 -0
  853. /package/dist/{state-portability.d.ts → state/state-portability.d.ts} +0 -0
  854. /package/dist/{state-portability.js → state/state-portability.js} +0 -0
  855. /package/dist/{versions.d.ts → state/versions.d.ts} +0 -0
  856. /package/dist/{versions.js → state/versions.js} +0 -0
  857. /package/dist/{embed.d.ts → text/embed.d.ts} +0 -0
  858. /package/dist/{embed.js → text/embed.js} +0 -0
  859. /package/dist/{mentions.d.ts → text/mentions.d.ts} +0 -0
  860. /package/dist/{mentions.js → text/mentions.js} +0 -0
  861. /package/dist/{path-refs.d.ts → text/path-refs.d.ts} +0 -0
  862. /package/dist/{path-refs.js → text/path-refs.js} +0 -0
  863. /package/dist/{shell-regions.js → text/shell-regions.js} +0 -0
  864. /package/dist/{title.d.ts → text/title.d.ts} +0 -0
  865. /package/dist/{title.js → text/title.js} +0 -0
  866. /package/src/{hostnames.test.ts → ids/hostnames.test.ts} +0 -0
  867. /package/src/{share-paths.test.ts → ids/share-paths.test.ts} +0 -0
  868. /package/src/{capability-env.ts → policy/capability-env.ts} +0 -0
  869. /package/src/{overlay-lint.test.ts → policy/overlay-lint.test.ts} +0 -0
  870. /package/src/{search-globs.test.ts → policy/search-globs.test.ts} +0 -0
  871. /package/src/{ingress-contract.test.ts → protocol/ingress-contract.test.ts} +0 -0
  872. /package/src/{peer-mcp-server.test.ts → protocol/peer-mcp-server.test.ts} +0 -0
  873. /package/src/{sse.ts → protocol/sse.ts} +0 -0
  874. /package/src/{versions.test.ts → state/versions.test.ts} +0 -0
  875. /package/src/{embed.test.ts → text/embed.test.ts} +0 -0
  876. /package/src/{mentions.test.ts → text/mentions.test.ts} +0 -0
  877. /package/src/{path-refs.test.ts → text/path-refs.test.ts} +0 -0
@@ -1,53 +1,22 @@
1
- import { cancelledCards, settledCards } from "./card-status.js";
2
- import {
3
- type AgentEvent,
4
- CARD_FIELDS,
5
- holdsCard,
6
- isAwaitingDecision,
7
- type TranscriptCards,
8
- type TranscriptPatch,
9
- type TranscriptRow,
10
- type TranscriptSubagent,
11
- type TranscriptTool,
12
- } from "./events.js";
1
+ import { cancelledCards, settledCards } from "../policy/card-status.js";
2
+ import type { AgentEvent } from "../events/agent-events.js";
3
+ import { CARD_FIELDS, holdsCard, isAwaitingDecision, type TranscriptCards, type TranscriptPatch, type TranscriptRow, type TranscriptSubagent, type TranscriptTool } from "../events/transcript.js";
13
4
  import { mentionedPathTokens } from "./mentions.js";
14
5
 
15
- /* THE FOLD: a turn's frames into the rows a conversation is made of, one rule, applied once.
16
- *
17
- * The daemon runs it live, frame by frame, as the turn streams (turn-runs.ts): what it produces is what every
18
- * attached window draws, patch by patch, and what the record keeps once the turn settles. A reopened chat
19
- * therefore shows what was on screen rather than a second arrangement of it, because there is no second
20
- * arrangement: the row a window watched being typed and the row the record holds are the same row, made by
21
- * the same code at the same moment.
22
- *
23
- * It used to run twice. The browser folded the live frames into its own bubbles, the daemon folded the same
24
- * frames at settlement into the record, and a third pass turned the record back into bubbles on reopen. Each
25
- * grew rules the others lacked, a card the record forgot, a steer the live view placed wrong, a notice only
26
- * the window that watched ever saw, and a change to one was a bug in the other until somebody noticed. This
27
- * is the one copy.
28
- *
29
- * `tag` names which stream of the log is being read: undefined is the main turn, a tool-call id is the
30
- * subagent that call spawned. Frames carrying THAT tag are the stream's own and land at top level; frames
31
- * carrying a different one belong to a child of this stream and nest under the card that spawned it, one
32
- * rule for both, which is what makes depth fall out for free: a subagent that itself delegates nests one
33
- * level further down, on the same pass, whichever level is being read.
34
- *
35
- * Rows are MUTATED in place and every patch carries a COPY of what it names. The mutation is what keeps a
36
- * result that lands turns after its call cheap, no second pass; the copy is what keeps a patch true to the
37
- * moment it was made rather than to whatever the row grew into by the time a slow reader took it. */
6
+ // Folds a turn's frames into rows once, live and for the settled record alike, so a reopened chat matches what was on
7
+ // screen. `tag` selects the stream read: undefined is the main turn, a tool-call id is the subagent it spawned; other
8
+ // frames nest under the card that spawned them. Rows mutate in place; every patch carries a copy of what it names.
38
9
 
39
10
  export type TurnEnding = "settled" | "stopped";
40
11
 
41
- // Where a tool card lives, for the frames that reach it by id after it was drawn: its row, and the card it
42
- // nests under when it is a helper's own call.
12
+ // Where a tool card lives: its row, and the parent card it nests under when it's a helper's own call.
43
13
  interface CardPlace {
44
14
  readonly tool: TranscriptTool;
45
15
  readonly row: number;
46
16
  readonly parent?: string;
47
17
  }
48
18
 
49
- // The keys a frame actually carries: an optional field a frame left out must not overwrite what an earlier
50
- // frame set, and a spread of the parsed frame would, with `undefined`.
19
+ // Strips undefined fields, so spreading a partial frame never overwrites a field an earlier frame already set.
51
20
  const defined = <T extends object>(value: T): Partial<T> => Object.fromEntries(Object.entries(value).filter(([, field]) => field !== undefined)) as Partial<T>;
52
21
 
53
22
  const cardOf = (event: Extract<AgentEvent, { kind: "tool_call" }>): TranscriptTool => ({
@@ -60,8 +29,7 @@ const cardOf = (event: Extract<AgentEvent, { kind: "tool_call" }>): TranscriptTo
60
29
  ...(event.content !== undefined ? { content: event.content } : {}),
61
30
  });
62
31
 
63
- // Whether a bubble has anything in it: text, thinking, tools, a checklist or a card makes a row, and nothing
64
- // makes none.
32
+ // Whether a bubble has any content: text, thinking, tools, todos, usage or a card; empty otherwise.
65
33
  const empty = (row: TranscriptRow): boolean =>
66
34
  row.text.length === 0 &&
67
35
  (row.thinking?.length ?? 0) === 0 &&
@@ -70,14 +38,8 @@ const empty = (row: TranscriptRow): boolean =>
70
38
  row.usage === undefined &&
71
39
  !holdsCard(row);
72
40
 
73
- /* What a landed delta did to the workspace's dependencies, as a clause the landed notice ends with, or nothing
74
- * at all, which is what almost every turn produces and what the reader should therefore never have to skip past.
75
- *
76
- * Written as a REPORT of something already done, not a request. The daemon started the install the moment the
77
- * tree changed (workspace/reconcile-deps.ts), so "installing" is the true tense and there is no decision left
78
- * for the reader to make; the button beside it opens the terminal it is running in, for whoever wants to watch.
79
- * The deferred wording is the one case that names a wait, because a workspace with other agents still running
80
- * genuinely has not started yet and saying otherwise would be a lie the terminal would immediately expose. */
41
+ // Clause appended to the landed notice for a workspace dependency change, or empty when there is none. Reports the
42
+ // install as already started, or queued when other agents are still running; never as a request.
81
43
  const dependencyLine = (deps: { missing: number; started: string[]; deferred: boolean } | undefined): string => {
82
44
  if (deps === undefined || deps.missing === 0) {
83
45
  return ``;
@@ -88,15 +50,8 @@ const dependencyLine = (deps: { missing: number; started: string[]; deferred: bo
88
50
  : ` Installing ${what} it added; the project's checks run when that finishes, and the outcome lands in Activity.`;
89
51
  };
90
52
 
91
- /* WHY THIS AGENT'S BRANCH JUST MOVED, the human's half of the rebase (daemon: agents/sync.ts).
92
- *
93
- * A conversation goes stale while its user commits around it, so the daemon rebases the branch onto the
94
- * current workspace. It is told, not asked: at the moment someone is answering their agent they have nothing
95
- * to decide this with, and the alternative to rebasing is not "stay safe", it is a land conflict half an hour
96
- * later. So this is one muted line with no button on it, the same weight as "Context compacted", and for the
97
- * same reason. The blocked half is the line that earns its keep: a rebase that would not apply was rolled
98
- * back, the agent is working from the older base, and the conflict report at the end of the turn is now
99
- * EXPECTED rather than a surprise. */
53
+ // One line reporting the daemon's rebase of this agent's branch onto the current workspace; `blocked` names repos it
54
+ // couldn't rebase, where the turn ran from an older base.
100
55
  const syncLine = (sync: { commits: number; blocked: readonly string[] }): string => {
101
56
  const moved =
102
57
  sync.commits > 0
@@ -109,17 +64,14 @@ const syncLine = (sync: { commits: number; blocked: readonly string[] }): string
109
64
  return [moved, blocked].filter((line) => line !== undefined).join(` `);
110
65
  };
111
66
 
112
- // End of a clean isolated turn: the delta auto-landed into the main tree as uncommitted changes (review = the
113
- // Changes panel), was HELD on the branch because auto-land is off, or conflicted and stayed safely in the
114
- // worktree. A landed delta that changed what the workspace depends on carries its reconcile too, the one
115
- // consequence of this turn the Changes panel cannot show, because it happened outside the diff.
67
+ // Row for a finished turn: held on its branch, landed automatically, or conflicted. A landed turn that changed
68
+ // dependencies appends dependencyLine, since the Changes diff can't show that.
116
69
  const landedRow = (event: Extract<AgentEvent, { kind: "landed" }>): TranscriptRow => {
117
70
  if (event.held === true) {
118
71
  return { role: "notice", text: `Finished: the work is on this agent's branch, ready to land from its review.` };
119
72
  }
120
73
  if (!event.landed) {
121
- // Named, not explained: the cause is per-FILE (your edits, a moved main line, a binary), and the review
122
- // is where each one is spelled out with the action that fits it.
74
+ // Per-file cause (your edits, a moved main line, a binary) is spelled out in the review, not named here.
123
75
  const conflicts = event.conflicts ?? [];
124
76
  return {
125
77
  role: "notice",
@@ -128,9 +80,7 @@ const landedRow = (event: Extract<AgentEvent, { kind: "landed" }>): TranscriptRo
128
80
  .join(`, `)}. Open the agent's review to see what blocked them and land from there.`,
129
81
  };
130
82
  }
131
- // The moment-of-regret offer, on the LANDED notice only: the automatic behaviour just fired, and "stop
132
- // doing that" is worth one press exactly now. An install that STARTED takes the slot instead: for as long
133
- // as it runs, the one press worth offering is the terminal it is running in.
83
+ // noticeAction fires only here, right as the auto-behavior ran; an active install takes the slot instead.
134
84
  return {
135
85
  role: "notice",
136
86
  text: `Changes landed in your workspace: review them in the Changes panel.${dependencyLine(event.deps)}`,
@@ -138,10 +88,8 @@ const landedRow = (event: Extract<AgentEvent, { kind: "landed" }>): TranscriptRo
138
88
  };
139
89
  };
140
90
 
141
- /* WHAT HAPPENED TO THE TURN, written down: the provider's own sentence, and the one clause the daemon can add
142
- * about what comes next. The wait itself (a countdown to the allowance reopening, an outage's next attempt) is
143
- * the chat's to draw beside the composer, live; this row is the record of the moment, and reads the same live
144
- * and a week later. */
91
+ // Row for a turn-ending error: the provider's own message plus one clause on what happens next. The live wait itself is
92
+ // drawn by the chat, not stored here.
145
93
  const errorRow = (event: Extract<AgentEvent, { kind: "error" }>): TranscriptRow => {
146
94
  const { message, code } = event;
147
95
  switch (code) {
@@ -159,8 +107,7 @@ const errorRow = (event: Extract<AgentEvent, { kind: "error" }>): TranscriptRow
159
107
  : { role: "notice", text: `${message} Reconnect the account to pick this conversation back up.` };
160
108
  case "rate_limit":
161
109
  return { role: "notice", text: event.autoResume === "scheduled" ? `${message} This chat sends it again once the allowance comes back.` : message };
162
- // Refused before anything ran: the words never reached the model, and the chat holds them for the
163
- // user's own next send rather than flushing them into the same refusal.
110
+ // Refused before the model saw it; the composer holds the message so the user can resend it.
164
111
  case "claude-reauth":
165
112
  case "unknown-command":
166
113
  case "context-window-too-small":
@@ -174,13 +121,10 @@ const errorRow = (event: Extract<AgentEvent, { kind: "error" }>): TranscriptRow
174
121
  }
175
122
  };
176
123
 
177
- /* The opening user row of a turn: what was typed, when, with what attached and what the daemon added. Built by
178
- * whoever holds the prompt (the daemon strips its own layers off it first, sessions/turn-transcript.ts), and
179
- * handed to the fold as the row it starts from. */
124
+ // The turn's opening user row: text, timestamp, attachments, and whatever the daemon later stamps onto it (checkpoint,
125
+ // notes).
180
126
  export const userRow = (text: string, sentAt: number, attachments: readonly string[]): TranscriptRow => {
181
- /* Uploads only. A path @-mentioned inline in the text rides the same wire field (the composer sends both
182
- * as attachments), and drawing it as a chip would show the reader the same path twice; an upload that the
183
- * user ALSO happened to type the generated path of keeps its chip, because the chip is the thumbnail. */
127
+ // Drops an attachment already inline as an @-mention, unless it's a generated upload path (its own thumbnail).
184
128
  const inline = new Set(mentionedPathTokens(text));
185
129
  const chips = attachments.filter((path) => !inline.has(path) || path.includes(`/records/artifacts/attachments/`));
186
130
  return { role: "user", text, sentAt, ...(chips.length > 0 ? { attachments: chips } : {}) };
@@ -188,17 +132,14 @@ export const userRow = (text: string, sentAt: number, attachments: readonly stri
188
132
 
189
133
  export class TranscriptFold {
190
134
  readonly rows: TranscriptRow[] = [];
191
- // The rows the user steered into the turn, by position: the daemon files each one's rewind state under it
192
- // once the turn settles (agent/steer-anchors.ts), and only the fold knows where they landed.
135
+ // Row index of each user steer, in order; the daemon anchors rewind state to these once the turn settles.
193
136
  readonly steerRows: number[] = [];
194
- // The open assistant bubble, by index, and it is always the LAST row: every other kind of row closes it
195
- // first (pushRow), so a bubble that ends empty is dropped without moving anything above it.
137
+ // Index of the open assistant bubble; always the last row, since every other row kind closes it first.
196
138
  private bubble: number | undefined;
197
139
  private readonly cards = new Map<string, CardPlace>();
198
- // requestId → the row holding the interactive card it names, for the frames that land on a card after it
199
- // was raised: the reply that released it, a permission's late sentence, an offer's stream and receipt.
140
+ // requestId to the row holding its card, for frames landing on it later (a reply, a late sentence, a receipt).
200
141
  private readonly parked = new Map<string, number>();
201
- // The turn's own opening user row, where the checkpoint and the daemon's notes land.
142
+ // The turn's opening user row, where the checkpoint and daemon notes land.
202
143
  private readonly opener: number | undefined;
203
144
 
204
145
  constructor(
@@ -212,7 +153,7 @@ export class TranscriptFold {
212
153
  this.opener = opener === -1 ? undefined : opener;
213
154
  }
214
155
 
215
- /** Fold one frame in. What changed comes back as patches, in the order it changed. */
156
+ /** Folds one frame in; returns the patches it produced, in order. */
216
157
  apply(event: AgentEvent): TranscriptPatch[] {
217
158
  const parent = "parentToolUseId" in event ? event.parentToolUseId : undefined;
218
159
  if (parent !== this.tag) {
@@ -237,10 +178,7 @@ export class TranscriptFold {
237
178
  return [...opened, { op: "thinking", index, text: event.text }];
238
179
  }
239
180
  case "text_end":
240
- // The agent finished a block of prose: retire the bubble it was writing into, so what comes next,
241
- // the tool calls that block introduced or the next block after they return, opens a fresh one
242
- // below it. A block that wrote no prose has no boundary to draw: retiring on it would split a
243
- // card away from the prose that reported it, which is a shape the user never saw.
181
+ // A block with no prose has no boundary; retiring here would split a card from its report.
244
182
  if (this.bubble !== undefined && this.rows[this.bubble]!.text.length > 0) {
245
183
  this.bubble = undefined;
246
184
  }
@@ -254,9 +192,7 @@ export class TranscriptFold {
254
192
  return [...opened, { op: "tool", index, tool: structuredClone(tool) }];
255
193
  }
256
194
  case "tool_call_update":
257
- // Present fields REPLACE the prior value (snapshot semantics: Codex streams a command's growing
258
- // output as whole snapshots), absent fields leave it unchanged. An update with no matching tool
259
- // is dropped rather than shown loose.
195
+ // Present fields replace the prior value (snapshot semantics); an unmatched update drops.
260
196
  return this.patchCard(event.id, (tool) => {
261
197
  if (event.status !== undefined) {
262
198
  tool.status = event.status;
@@ -269,15 +205,14 @@ export class TranscriptFold {
269
205
  }
270
206
  });
271
207
  case "subagent": {
272
- // The call just started an AGENT. The frame's id IS the spawning call's, so it lands on that card.
208
+ // The frame's id is the spawning call's id, so the subagent record lands on that card.
273
209
  const { kind: _kind, id, subagentKind, ...rest } = event;
274
210
  return this.patchCard(id, (tool) => {
275
211
  tool.subagent = { ...rest, kind: subagentKind, status: "running" };
276
212
  });
277
213
  }
278
214
  case "subagent_update": {
279
- // Present fields REPLACE, absent ones leave the child alone, the same snapshot semantics
280
- // tool_call_update has: progress arrives many times and says only what moved.
215
+ // Present fields replace, absent ones leave the child alone, as in tool_call_update.
281
216
  const { kind: _kind, id, ...patch } = event;
282
217
  return this.patchCard(id, (tool) => {
283
218
  if (tool.subagent !== undefined) {
@@ -291,9 +226,7 @@ export class TranscriptFold {
291
226
  return [...opened, this.replace(index)];
292
227
  }
293
228
  case "usage": {
294
- // End-of-turn accounting: onto the last assistant bubble rather than a fresh one, and the turn
295
- // BOUNDARY, a steered conversation's stream can carry several turns, so the current bubble is
296
- // retired and the next turn's frames open a fresh one below the steered user message.
229
+ // Lands on the last assistant bubble and closes it: a steered turn's stream can carry several turns.
297
230
  const { kind: _kind, account: _account, cacheReadTokens: _read, cacheCreationTokens: _written, ...usage } = event;
298
231
  const index = this.rows.findLastIndex((row) => row.role === "assistant");
299
232
  const closed = this.closeBubble();
@@ -304,11 +237,7 @@ export class TranscriptFold {
304
237
  return [...closed, this.replace(index)];
305
238
  }
306
239
  case "steer": {
307
- /* THE USER SPOKE MID-TURN, their words, at the point in the stream the daemon took them: a row of
308
- * their own AND a boundary. The harness absorbs a steer between tool calls and the model keeps
309
- * writing with no `result` in between, so nothing else in the stream retires the open bubble:
310
- * what the agent says NEXT is its answer to this message, and left in the bubble above it the
311
- * answer printed over the question. */
240
+ // A steer also closes the bubble, or the next answer would print over it mid-call.
312
241
  const patches = this.pushRow({
313
242
  role: "user",
314
243
  text: event.text,
@@ -319,8 +248,7 @@ export class TranscriptFold {
319
248
  return patches;
320
249
  }
321
250
  case "checkpoint":
322
- // The pre-turn workspace state's id, plus where this turn sits in the daemon's transcript, both
323
- // anchored on the turn's user row, which is what the rewind affordance addresses it by.
251
+ // Anchors the pre-turn snapshot id and this turn's transcript position on its user row, for rewind.
324
252
  return this.stampOpener((row) => {
325
253
  row.checkpointId = event.id;
326
254
  if (event.index !== undefined) {
@@ -328,8 +256,7 @@ export class TranscriptFold {
328
256
  }
329
257
  });
330
258
  case "preamble":
331
- // What the daemon put in front of the model, as one collapsed row hung off the user's message.
332
- // A frame with nothing in it is not a disclosure.
259
+ // Collapses the daemon's preamble notes onto the user row; an empty note list is not a disclosure.
333
260
  return event.notes.length === 0 ? [] : this.stampOpener((row) => (row.notes = [...event.notes]));
334
261
  case "worktree":
335
262
  return event.sync === undefined ? [] : this.pushRow({ role: "notice", text: syncLine(event.sync) });
@@ -338,25 +265,15 @@ export class TranscriptFold {
338
265
  case "compact":
339
266
  return this.pushRow({ role: "notice", text: `Context compacted to free up space.` });
340
267
  case "error":
341
- /* WHAT HAPPENED TO THE TURN, kept, and the frame whose absence made a refused session look broken
342
- * rather than refused: a provider that answers "your organization has disabled Claude subscription
343
- * access" sends this and no prose, so a fold of the two speakers alone ends on the user's message. */
268
+ // Keeps a refusal (no prose from the provider) from reading as a session that ended mid-question.
344
269
  return this.pushRow(errorRow(event));
345
270
  case "tier":
346
- /* THIS TURN RAN ON A CHEAPER MODEL THAN THE ONE ASKED FOR, written down for the same reason the
347
- * refusal above is: the answer below it is the cheap rung's answer, and a reader coming back
348
- * tomorrow has no other way to know which of their messages were served that way. Only a turn that
349
- * really moved: a verdict that changed nothing is machinery, not an event. The model is named by
350
- * ID, the only name this side has. `noticeAction` carries the one press the line offers, "keep
351
- * this chat on my pick". */
271
+ // Notes a turn served on a cheaper model than requested, only when it actually routed.
352
272
  return event.routed && event.model !== undefined
353
273
  ? this.pushRow({ role: "notice", text: `This turn looked simple, so it ran on ${event.model} instead of your pick.`, noticeAction: "tierHold" })
354
274
  : [];
355
275
  case "plan": {
356
- /* Current ExitPlanMode has no plan input: the completed prose block immediately before the call IS
357
- * the plan. The daemon repeats it on this frame so the card is self-contained; when that exact
358
- * block is the adjacent retired bubble, reclassify it into the card instead of drawing the same
359
- * markdown once as prose and again as a plan. A distinct intro remains its own bubble. */
276
+ // Folds a plan into an identical retired prose bubble instead of drawing the same markdown twice.
360
277
  const adjacent = this.rows.at(-1);
361
278
  const consumes =
362
279
  this.bubble === undefined &&
@@ -401,8 +318,6 @@ export class TranscriptFold {
401
318
  const { kind: _kind, ...ask } = event;
402
319
  return this.park(event.requestId, { terminalHelp: { ...ask, status: "pending" } });
403
320
  }
404
- case "service_offer":
405
- return this.park(event.requestId, { serviceOffer: { requestId: event.requestId, offer: event.offer, status: "pending" } });
406
321
  case "capability_offer":
407
322
  return this.park(event.requestId, { capabilityOffer: { requestId: event.requestId, offer: event.offer, status: "pending" } });
408
323
  case "payment_offer":
@@ -410,22 +325,8 @@ export class TranscriptFold {
410
325
  case "credential_offer":
411
326
  return this.park(event.requestId, { credentialOffer: { requestId: event.requestId, offer: event.offer, status: "pending" } });
412
327
  case "resolved":
413
- // The card above was released, and the frame says how. The window that answered already froze its
414
- // own card the instant its reply was accepted (card-status.ts, the same derivation), so this is a
415
- // no-op there and earns its keep on every other surface.
328
+ // Releases the card; the answering window already froze it locally, so this is a no-op there.
416
329
  return this.patchParked(event.requestId, (row) => Object.assign(row, settledCards(row, event.reply)));
417
- case "service_event":
418
- return this.patchParked(event.requestId, (row) => {
419
- if (row.serviceOffer !== undefined) {
420
- row.serviceOffer.events = [...(row.serviceOffer.events ?? []), event.event];
421
- }
422
- });
423
- case "service_receipt":
424
- return this.patchParked(event.requestId, (row) => {
425
- if (row.serviceOffer !== undefined) {
426
- row.serviceOffer.receipt = { outcome: event.outcome, credits: event.credits, ...(event.remaining === undefined ? {} : { remaining: event.remaining }) };
427
- }
428
- });
429
330
  case "capability_outcome":
430
331
  return this.patchParked(event.requestId, (row) => {
431
332
  if (row.capabilityOffer !== undefined) {
@@ -452,7 +353,7 @@ export class TranscriptFold {
452
353
  };
453
354
  }
454
355
  });
455
- // Facts about the turn, not rows in it (TURN_FACT_KINDS): the run relays them as themselves.
356
+ // These carry facts about the turn, not rows in it; the run relays them as themselves.
456
357
  case "session":
457
358
  case "init":
458
359
  case "terminal":
@@ -469,15 +370,15 @@ export class TranscriptFold {
469
370
  }
470
371
  }
471
372
 
472
- /** A row the daemon writes on the turn's behalf, a notice about a decision, the feedback that answered a
473
- * card, at the end of what has been said so far. */
373
+ /** Appends a daemon-authored row (a decision notice, card feedback) after everything said so far. */
474
374
  note(row: TranscriptRow): TranscriptPatch[] {
475
375
  return this.pushRow(row);
476
376
  }
477
377
 
478
- /** The turn is over. The open bubble is closed, every card still waiting on an answer is frozen as nobody's
479
- * decision, and a turn the user stopped says so, all of it as rows, because all of it is what the reader
480
- * saw. */
378
+ /**
379
+ * Ends the turn: closes the open bubble, freezes every still-pending card as nobody's decision, and notes a user
380
+ * stop.
381
+ */
481
382
  finish(ending: TurnEnding): TranscriptPatch[] {
482
383
  const patches = this.closeBubble();
483
384
  for (const [index, row] of this.rows.entries()) {
@@ -492,11 +393,9 @@ export class TranscriptFold {
492
393
  return patches;
493
394
  }
494
395
 
495
- /* A CHILD OF THIS STREAM. Its calls and its thinking hang off the card that spawned it; its PROSE does not,
496
- * because a card has no place for prose and the child's report already arrives as that card's result
497
- * content. Read at the child's own level (a fold tagged with its id) that prose is top-level and lands in
498
- * full. A card this stream has never seen means the spawning call is not in the stream being read, so
499
- * there is nothing to hang it off; dropping it is what keeps a nested level out of the level above it. */
396
+ // Routes a frame from a child stream onto the card that spawned it; its prose surfaces only when that child's own
397
+ // stream is read directly. A spawning call absent from this stream means there is nothing to nest under, so the
398
+ // frame is dropped.
500
399
  private applyChild(event: AgentEvent, parent: string | undefined): TranscriptPatch[] {
501
400
  const place = parent === undefined ? undefined : this.cards.get(parent);
502
401
  if (place === undefined || parent === undefined) {
@@ -516,8 +415,7 @@ export class TranscriptFold {
516
415
  return [];
517
416
  }
518
417
 
519
- // The bubble the current frame writes to, allocating a fresh assistant row when the turn's bubble was
520
- // retired (a finished block of prose, a card, the end of a turn).
418
+ // Returns the bubble frames write to, opening a fresh assistant row when the last one was retired.
521
419
  private open(): [number, TranscriptPatch[]] {
522
420
  if (this.bubble !== undefined) {
523
421
  return [this.bubble, []];
@@ -528,8 +426,8 @@ export class TranscriptFold {
528
426
  return [this.bubble, [{ op: "append", row: structuredClone(row) }]];
529
427
  }
530
428
 
531
- // Retire the open bubble. One that ended empty is not a row: the empty text block a model can open before
532
- // going straight to a tool has nothing to keep, and it is always the last row, so dropping it moves nothing.
429
+ // Retires the open bubble; one that ended empty is dropped rather than kept as a row, and it's always last so
430
+ // nothing above shifts.
533
431
  private closeBubble(): TranscriptPatch[] {
534
432
  const index = this.bubble;
535
433
  this.bubble = undefined;
@@ -543,18 +441,15 @@ export class TranscriptFold {
543
441
  return [{ op: "drop", index }];
544
442
  }
545
443
 
546
- // A row that is not the open bubble: the bubble is closed first, so what follows lands BELOW what came
547
- // before, and the new row is the last.
444
+ // Pushes a row that is not the open bubble; closes the bubble first so order stays: what came before, then this.
548
445
  private pushRow(row: TranscriptRow): TranscriptPatch[] {
549
446
  const closed = this.closeBubble();
550
447
  this.rows.push(row);
551
448
  return [...closed, { op: "append", row: structuredClone(row) }];
552
449
  }
553
450
 
554
- /* A card takes the bubble that is open and closes it: the prose that led up to the ask stays above the card,
555
- * and whatever the agent says once answered opens a fresh row beneath it. A bubble holding nothing but the
556
- * card is still a row, where the card IS the bubble. `into` reuses a row already there (the plan's own
557
- * prose) instead of opening one. */
451
+ // A card takes the open bubble and closes it; `into` reuses an existing row (a plan's own prose) instead of opening
452
+ // a new one.
558
453
  private park(requestId: string, cards: TranscriptCards, into?: number): TranscriptPatch[] {
559
454
  const [index, opened] = into === undefined ? this.open() : [into, []];
560
455
  Object.assign(this.rows[index]!, cards);
@@ -594,7 +489,7 @@ export class TranscriptFold {
594
489
  }
595
490
  }
596
491
 
597
- /** A whole turn at once: the opening rows, every frame, and how it ended. What a settled turn reads back as. */
492
+ /** Folds a whole turn at once: opening rows, every frame, and how it ended; what a settled turn reads back as. */
598
493
  export const foldTurn = (opening: readonly TranscriptRow[], events: readonly AgentEvent[], ending: TurnEnding = "settled", tag?: string): TranscriptRow[] => {
599
494
  const fold = new TranscriptFold(opening, tag);
600
495
  for (const event of events) {
@@ -604,9 +499,10 @@ export const foldTurn = (opening: readonly TranscriptRow[], events: readonly Age
604
499
  return fold.rows;
605
500
  };
606
501
 
607
- /** Apply one patch to a list of rows, the client's half of the fold: what a patch names is what moves, and
608
- * nothing else. `tool` upserts by id anywhere in the row's tree, so a helper's nested call and a top-level
609
- * one are placed by the same rule. Returns a new list; the rows it did not touch keep their identity. */
502
+ /**
503
+ * Applies one patch to a row list; only what the patch names moves. `tool` upserts by id anywhere in the tree,
504
+ * top-level or nested alike.
505
+ */
610
506
  export const applyTranscriptPatch = (rows: readonly TranscriptRow[], patch: TranscriptPatch): TranscriptRow[] => {
611
507
  switch (patch.op) {
612
508
  case "append":
@@ -624,9 +520,8 @@ export const applyTranscriptPatch = (rows: readonly TranscriptRow[], patch: Tran
624
520
  }
625
521
  };
626
522
 
627
- // Replace the tool with this id wherever it lives in the tree; failing that, add it under its parent, or at
628
- // the top level when it has none (or its parent is not here, a malformed stream, where dropping the call
629
- // would be worse than showing it loose).
523
+ // Replaces the tool with this id anywhere in the tree, or appends it under `parent`, or at top level with no parent or
524
+ // no match.
630
525
  export const upsertTool = (tools: readonly TranscriptTool[], tool: TranscriptTool, parent: string | undefined): TranscriptTool[] => {
631
526
  const replaced = mapTool(tools, tool.id, () => tool);
632
527
  if (replaced !== tools) {
@@ -641,8 +536,8 @@ export const upsertTool = (tools: readonly TranscriptTool[], tool: TranscriptToo
641
536
  return [...tools, tool];
642
537
  };
643
538
 
644
- // Apply `fn` to the tool with `id` anywhere in a row's tool tree. Returns the SAME array when the id isn't
645
- // present, so an unrelated row keeps its identity (and re-renders nothing).
539
+ // Applies `fn` to the tool with `id` anywhere in the tree; returns the same array when absent, so an unrelated row's
540
+ // identity is unchanged.
646
541
  export const mapTool = (tools: readonly TranscriptTool[], id: string, fn: (tool: TranscriptTool) => TranscriptTool): readonly TranscriptTool[] => {
647
542
  let changed = false;
648
543
  const next = tools.map((tool) => {
@@ -662,5 +557,5 @@ export const mapTool = (tools: readonly TranscriptTool[], id: string, fn: (tool:
662
557
  return changed ? next : tools;
663
558
  };
664
559
 
665
- // Which fields of a row are cards, exported beside the fold for readers that count rows by them.
560
+ // Which row fields are cards, exported for readers that count rows by them.
666
561
  export const cardFieldsOf = (row: TranscriptRow): TranscriptCards => Object.fromEntries(CARD_FIELDS.flatMap((field) => (row[field] === undefined ? [] : [[field, row[field]]])));
@@ -0,0 +1,19 @@
1
+ import { expect, test } from "vitest";
2
+ import { cleanTranscription } from "./whisper.js";
3
+
4
+ test("flattens whisper output onto one line", () => {
5
+ expect(cleanTranscription(" Hello there.\n General Kenobi.\n")).toBe("Hello there. General Kenobi.");
6
+ });
7
+
8
+ // The whole reason this filter exists: whisper narrates silence, and a narration dispatched as speech is a
9
+ // turn nobody asked for.
10
+ test("drops noise-only annotations, in both bracket styles", () => {
11
+ expect(cleanTranscription(" [BLANK_AUDIO]\n")).toBeUndefined();
12
+ expect(cleanTranscription("(wind blowing)")).toBeUndefined();
13
+ expect(cleanTranscription("")).toBeUndefined();
14
+ });
15
+
16
+ // An annotation next to real speech drops the annotation and keeps the speech: the utterance did happen.
17
+ test("keeps speech that arrived alongside an annotation", () => {
18
+ expect(cleanTranscription("[music] \nreal words")).toBe("real words");
19
+ });
@@ -0,0 +1,17 @@
1
+ // Shared reading of whisper.cpp's stdout, used by the daemon's speech route and Discord's voice session, so both filter
2
+ // non-speech annotations the same way.
3
+
4
+ // Hugging Face repo the ggml-*.bin weights pull from on first use; each integration downloads its own size.
5
+ export const WHISPER_MODEL_REPO = "ggerganov/whisper.cpp";
6
+
7
+ // Cleans whisper's stdout to one line of text, or undefined for silence/noise-only output — a line that is entirely a
8
+ // bracketed annotation like `[BLANK_AUDIO]`.
9
+ export const cleanTranscription = (stdout: string): string | undefined => {
10
+ const text = stdout
11
+ .split("\n")
12
+ .map((line) => line.trim())
13
+ .filter((line) => line !== "" && !/^[[(].*[\])]$/.test(line))
14
+ .join(" ")
15
+ .trim();
16
+ return text === "" ? undefined : text;
17
+ };
@@ -1,12 +1,9 @@
1
1
  import { expect, test } from "vitest";
2
- import { type Workflow, WorkflowSchema, type WorkflowStep } from "./schemas/workflows.js";
2
+ import { type Workflow, WorkflowSchema, type WorkflowStep } from "../schemas/workflows.js";
3
3
  import { workflowFaults, workflowRunFaults } from "./workflow-faults.js";
4
4
 
5
- /* The GATE rules. The graph rules beside them are exercised by the scheduler's own integration tests, which
6
- * have a real run to check them against; these have none to check, which is the point: every fault here is one
7
- * the workflow has to be refused for BEFORE a run, because the failure it prevents costs a full fan-out of
8
- * sessions and then reports nothing anybody can act on.
9
- */
5
+ // Gate rules a workflow must be refused for before any run starts; unlike the graph rules, exercised by the scheduler's
6
+ // own integration tests, these have no real run to check against.
10
7
 
11
8
  const judge = (over: Partial<WorkflowStep> = {}): WorkflowStep => ({
12
9
  id: "judge",
@@ -73,55 +70,40 @@ test("a gate on a field the step does not declare is refused", () => {
73
70
  expect(faults).toEqual([`The gate reads "shipit", which "Judge" does not declare.`]);
74
71
  });
75
72
 
76
- // A list has no reading as a release decision, and the one it would fall into (join and compare) is a rule
77
- // nobody wrote down.
78
73
  test("a gate on a list field is refused", () => {
79
74
  const steps = [judge({ output: { kind: "json", fields: [{ name: "release", type: "string[]", description: "the verdicts", required: true }] } })];
80
75
  const faults = workflowFaults(gated({ steps }));
81
76
  expect(faults).toEqual([`The gate reads "release", which is a list: a release decision has to be one value.`]);
82
77
  });
83
78
 
84
- // The expensive one to discover at run time: it passes every save, then blocks a release on the one commit
85
- // where the model decided the field was not worth writing.
86
79
  test("a gate on an optional field is refused", () => {
87
80
  const steps = [judge({ output: { kind: "json", fields: [{ name: "release", type: "string", description: "pass | fail", required: false }] } })];
88
81
  const faults = workflowFaults(gated({ steps }));
89
82
  expect(faults).toEqual([`The gate reads "release", which "Judge" declares optional, it has to be required.`]);
90
83
  });
91
84
 
92
- /* THE RUN-TIME RULE, kept apart from every rule above it because it is not about the graph, and the graph is
93
- * what gets saved. A design whose steps take their goal and instruction from the request is the ordinary shape
94
- * and must save cleanly; it is only unrunnable on the particular run that brought no request.
95
- */
85
+ // Run-time rule, apart from the graph rules above: a design whose steps inherit goal/prompt from the request saves
86
+ // cleanly and is only unrunnable on a run with no request.
96
87
 
97
- // The shape the whole feature is for: a saved design that says nothing about the task, pointed at today's job.
98
88
  test("a design whose steps inherit is a perfectly good design", () => {
99
89
  const inheriting = gated({ steps: [judge({ goal: undefined, prompt: undefined })] });
100
90
  expect(workflowFaults(inheriting)).toEqual([]);
101
91
  expect(workflowRunFaults(inheriting, "make the importer handle empty files")).toEqual([]);
102
92
  });
103
93
 
104
- /* Refused at the door rather than discovered by the first step, because this is the one combination with
105
- * nothing to tell the model at all, and by the time a step found out, the run has already opened a session per
106
- * root and started paying for them.
107
- */
108
94
  test("running an inheriting design with no request is refused", () => {
109
95
  const inheriting = gated({ steps: [judge({ goal: undefined, prompt: undefined })] });
110
96
  expect(workflowRunFaults(inheriting, undefined)).toHaveLength(1);
111
97
  expect(workflowRunFaults(inheriting, undefined)[0]).toContain(`"Judge"`);
112
- // Whitespace is not a request. The composer trims before sending, but the gate's webhook body does not.
98
+ // Whitespace-only requests come from the gate's webhook body, which isn't trimmed like the composer.
113
99
  expect(workflowRunFaults(inheriting, " \n ")).toHaveLength(1);
114
100
  });
115
101
 
116
- // Only half-inheriting is still inheriting: a step with its own instruction but no goal is measured against
117
- // the request, so it needs one just as much.
118
102
  test("a step that declares only one of the two still needs a request", () => {
119
103
  expect(workflowRunFaults(gated({ steps: [judge({ goal: undefined })] }), undefined)).toHaveLength(1);
120
104
  expect(workflowRunFaults(gated({ steps: [judge({ prompt: undefined })] }), undefined)).toHaveLength(1);
121
105
  });
122
106
 
123
- // A design that says everything itself is startable from anywhere, with no composer behind it, which is what
124
- // keeps the gate's webhook and the workflows page working for the designs written that way.
125
107
  test("a design that declares everything runs with no request at all", () => {
126
108
  expect(workflowRunFaults(gated(), undefined)).toEqual([]);
127
109
  });