@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
@@ -22,10 +22,7 @@ import {
22
22
  WORKSPACE_STATE_FILES,
23
23
  } from "./workspace-state.js";
24
24
 
25
- // What the automations extension declares in its manifest, and what the memory extension WOULD declare if the
26
- // watcher reported its files. Literals rather than the real manifests: an extension package importing this one is
27
- // the dependency direction, so reaching back for them here would invert it. The real manifests are checked
28
- // against this rule where they are loaded: web's fileBindings.test.ts and the daemon's file-bindings.test.ts.
25
+ // What automations declares; literal here to avoid inverting the dependency on a real extension package.
29
26
  const AUTOMATIONS: readonly FileContribution[] = [
30
27
  { path: `${STATE_DIR}/config/automations.json`, invalidates: [`automations`] },
31
28
  { path: `${STATE_DIR}/records/approvals/`, invalidates: [`automation-approvals`] },
@@ -37,9 +34,6 @@ describe(`staleQueryKeys`, () => {
37
34
  });
38
35
 
39
36
  it(`refreshes the unreadable-manifest notice for the three files a person hand-edits`, () => {
40
- // Only these three. Every manifest reports what the daemon could not read in it, but a write to one of
41
- // the twenty-odd DAEMON-written ones cannot introduce a typo, and billing every browser a refetch for
42
- // each of them is the amplification this table exists to avoid.
43
37
  const carries = WORKSPACE_STATE_FILES.filter((file) => file.invalidates.includes(`manifests`)).map((file) => file.path);
44
38
  expect(carries.toSorted()).toEqual([
45
39
  `.intentic/config/capabilities.json`,
@@ -49,27 +43,23 @@ describe(`staleQueryKeys`, () => {
49
43
  });
50
44
 
51
45
  it(`matches a name family and a one-file-per-entry directory through one prefix each`, () => {
52
- // environment.Dockerfile, environment.custom.Dockerfile, environment.approved.Dockerfile: one entry.
46
+ // environment.Dockerfile, environment.custom.Dockerfile and environment.approved.Dockerfile share one entry.
53
47
  expect(staleQueryKeys([`.intentic/config/environment.custom.Dockerfile`], [])).toEqual([`environment`]);
54
48
  expect(staleQueryKeys([`.intentic/config/approvals/post-1.json`], [])).toEqual([`approvals`]);
55
49
  });
56
50
 
57
51
  it(`refreshes the Approvals view when the AGENT writes a proposal`, () => {
58
- // The regression this table was reorganized around: the approvals skill writes these files directly, so
59
- // there is no browser mutation to hang an invalidate on: the watcher push is the only signal, and it
60
- // used to be dropped on the floor.
52
+ // The approvals skill writes these files directly; the watcher push is the only signal available.
61
53
  expect(staleQueryKeys([`.intentic/config/approvals/post-1.json`], [])).toEqual([`approvals`]);
62
54
  });
63
55
 
64
56
  it(`ignores unrelated churn under .intentic/`, () => {
65
- // The amplification that turned an iq index rebuild into an endless request storm: a prefix test on
66
- // `.intentic/` alone would invalidate every one of these queries for each index write.
57
+ // iq's index and a session transcript: frequent enough writes to storm every query under a prefix-only match.
67
58
  expect(staleQueryKeys([`.intentic/local/cache/iq/index.db`, `.intentic/records/sessions/claude/projects/p/session.jsonl`], [])).toEqual([]);
68
59
  });
69
60
 
70
61
  it(`ignores a store's own temp file while it is mid-swap`, () => {
71
- // jsonFile writes `.<name>.<pid>.tmp` beside the target precisely so the atomic rename can't be read as
72
- // a write to the target itself. A trailing-tag temp would prefix-match and bill an extra refetch.
62
+ // jsonFile's atomic-rename temp name: `.<name>.<pid>.tmp` beside the target.
73
63
  expect(staleQueryKeys([`.intentic/.settings.json.42.tmp`], [])).toEqual([]);
74
64
  expect(staleQueryKeys([`.intentic/config/settings.json`], [])).toEqual([`settings`, `manifests`]);
75
65
  });
@@ -79,7 +69,7 @@ describe(`staleQueryKeys`, () => {
79
69
  });
80
70
 
81
71
  it(`dedupes keys across a batch that touches several manifests`, () => {
82
- // A capability add recomposes the overlay, so both entries claim `environment`: one refetch, not two.
72
+ // A capability add recomposes the overlay, so both paths claim environment; one entry, not two.
83
73
  expect(staleQueryKeys([`.intentic/config/capabilities.json`, `.intentic/config/environment.Dockerfile`], [])).toEqual([
84
74
  `capabilities`,
85
75
  `environment`,
@@ -94,19 +84,14 @@ describe(`staleQueryKeys`, () => {
94
84
  });
95
85
 
96
86
  it(`makes nothing stale for an extension that is not running`, () => {
97
- // The reason the live set is passed in rather than read off the installed list: `automations` is the
98
- // extension's query key, so with the extension gone there is no cache entry for it to be about. The core
99
- // table used to carry these two keys itself, and would have kept invalidating them either way.
87
+ // automations is the extension's own query key; with it not running, no cache entry exists for it.
100
88
  expect(staleQueryKeys([`.intentic/config/automations.json`, `.intentic/records/approvals/a1.json`], [])).toEqual([]);
101
89
  });
102
90
 
103
91
  it(`lets an extension claim a path the core table deliberately ignores`, () => {
104
- // The two lists are unioned flat, not layered: a narrow extension entry under a broad core entry that
105
- // invalidates nothing must still fire. Without this, every path beneath one of the daemon's
106
- // machine-state prefixes would be unreachable to extensions.
92
+ // Unioned flat with the core table: a narrow extension entry still fires under an ignored core prefix.
107
93
  const nested: readonly FileContribution[] = [{ path: `${STATE_DIR}/records/sessions/claude/plans/`, invalidates: [`plans`] }];
108
94
  expect(staleQueryKeys([`.intentic/records/sessions/claude/plans/a-plan.md`], nested)).toEqual([`plans`]);
109
- // …and a sibling under the same core prefix stays ignored.
110
95
  expect(staleQueryKeys([`.intentic/records/sessions/claude/projects/p/session.jsonl`], nested)).toEqual([]);
111
96
  });
112
97
 
@@ -119,8 +104,7 @@ describe(`staleQueryKeys`, () => {
119
104
  });
120
105
  });
121
106
 
122
- /* Which broken manifests the owner is actually told about. The pair below is the whole invariant: a file is on
123
- * the card iff a write to it refreshes the card. */
107
+ // A file is on the reported-manifest card iff a write to it refreshes the card.
124
108
  describe(`isReportedManifest`, () => {
125
109
  it(`shows exactly the files whose writes refresh the notice`, () => {
126
110
  expect(REPORTED_MANIFEST_PATHS.toSorted()).toEqual(
@@ -132,10 +116,6 @@ describe(`isReportedManifest`, () => {
132
116
  });
133
117
 
134
118
  it(`stays quiet about daemon-written state the owner cannot repair`, () => {
135
- // The regression this exists for: the workflow ledger's records predated a schema that gained a required
136
- // field, so every read reported the whole file ignored: advice ("fix the file") addressed to nobody,
137
- // about sixty kilobytes of machine JSON, and refreshed by no write because the ledger feeds no query, so
138
- // it sat on the card until the daemon restarted. A ledger recovers on its own next write instead.
139
119
  expect(isReportedManifest(`.intentic/records/workflow-runs.json`)).toBe(false);
140
120
  expect(isReportedManifest(`.intentic/records/loops.json`)).toBe(false);
141
121
  expect(isReportedManifest(`.intentic/records/thread-sessions.json`)).toBe(false);
@@ -146,7 +126,7 @@ describe(`isReportedManifest`, () => {
146
126
  });
147
127
 
148
128
  it(`does not report a file outside the workspace`, () => {
149
- // What `relative` hands the daemon for the manifests it keeps under /history: never nameable on screen.
129
+ // What `relative` gives the daemon for a manifest kept under /history.
150
130
  expect(isReportedManifest(`../../history/settings.json`)).toBe(false);
151
131
  });
152
132
  });
@@ -160,14 +140,9 @@ describe(`WORKSPACE_STATE_FILES`, () => {
160
140
  });
161
141
 
162
142
  it(`states a reason for every entry that invalidates nothing`, () => {
163
- // An empty `invalidates` is a real answer (daemon machine state, a deliberately-polled surface, a path
164
- // whose query keys belong to an extension), but a SILENT one is indistinguishable from the omission this
165
- // table exists to prevent, which is exactly how approvals went missing. Requiring the reason is what makes
166
- // the difference visible at review time.
167
143
  for (const file of WORKSPACE_STATE_FILES) {
168
144
  if (file.invalidates.length === 0) {
169
- // A string with something in it. Truthiness would accept the number 1 or an object, and the
170
- // failure this guards against — a `why` left blank to quiet the check — reads as whitespace.
145
+ // stringMatching(/\S/), not truthiness: a blank `why` left to quiet the check must still fail.
171
146
  expect(file.why, `${file.path} invalidates nothing and must say why`).toEqual(expect.stringMatching(/\S/));
172
147
  } else {
173
148
  expect(file.why, `${file.path} invalidates queries, so \`why\` is dead weight`).toBeUndefined();
@@ -176,21 +151,16 @@ describe(`WORKSPACE_STATE_FILES`, () => {
176
151
  });
177
152
 
178
153
  it(`keeps directory entries slash-terminated so they cannot swallow a sibling`, () => {
179
- // `.intentic/config/approvals` without the slash would also prefix-match a future `.intentic/approvals-archive.json`.
180
154
  for (const file of WORKSPACE_STATE_FILES.filter((entry) => entry.invalidates.length > 0)) {
181
155
  const isFamilyPrefix = file.path.endsWith(`.`);
182
- // `.md` is the safety policy: the one state file whose reader is a model rather than a parser, so
183
- // it is prose on disk rather than JSON.
156
+ // .md is the safety policy: the one state file a model reads as prose rather than a parser reading JSON.
184
157
  const isFile = file.path.endsWith(`.json`) || file.path.endsWith(`.Dockerfile`) || file.path.endsWith(`.md`);
185
158
  expect(isFile || isFamilyPrefix || file.path.endsWith(`/`), file.path).toBe(true);
186
159
  }
187
160
  });
188
161
 
189
162
  it(`only nests under an entry that invalidates nothing, so one write can't be billed twice`, () => {
190
- // Entries may nest when a subtree needs a different portability class: stateFileFor's longest match
191
- // keeps that unambiguous. Invalidation has no longest-match rule: staleQueryKeys unions every
192
- // matching entry, so a nest under an entry that DOES invalidate would bill the outer view's queries for
193
- // a write that belongs to the inner one. Nesting is therefore only legal beneath an empty `invalidates`.
163
+ // Longest-match applies to portability, not invalidation: staleQueryKeys unions every match instead.
194
164
  for (const file of WORKSPACE_STATE_FILES.filter((entry) => entry.invalidates.length > 0)) {
195
165
  const nested = WORKSPACE_STATE_FILES.filter((other) => other !== file && other.path.startsWith(file.path));
196
166
  expect(
@@ -201,8 +171,7 @@ describe(`WORKSPACE_STATE_FILES`, () => {
201
171
  });
202
172
 
203
173
  it(`splits a nested entry from its parent for a reason the parent doesn't already carry`, () => {
204
- // A nest that agrees with the entry it sits under is a duplicate: stateFileFor resolves to the same
205
- // answer either way, so the split is dead weight the next reader has to diff to discover.
174
+ // A nest agreeing with its parent is dead weight: stateFileFor resolves to the same answer either way.
206
175
  for (const file of WORKSPACE_STATE_FILES) {
207
176
  for (const parent of WORKSPACE_STATE_FILES.filter((other) => other !== file && file.path.startsWith(other.path))) {
208
177
  expect(
@@ -214,32 +183,30 @@ describe(`WORKSPACE_STATE_FILES`, () => {
214
183
  });
215
184
  });
216
185
 
217
- /* The rule the daemon enforces and the explorer draws. Both sides read it from here, which is the point: the
218
- * padlock on a row and the refusal behind it can no longer disagree. */
186
+ // The lock rule the daemon enforces and the explorer draws, from one shared list.
219
187
  describe(`isLockedWorkspacePath`, () => {
220
188
  it(`covers the root state dir's credential entries, and their subtrees whole`, () => {
221
189
  expect(isLockedWorkspacePath(`.intentic/config/capabilities.json`)).toBe(true);
222
190
  expect(isLockedWorkspacePath(`.intentic/identity/owner.json`)).toBe(true);
223
- // A whole lifecycle root, so a provider added under it is covered without a second edit.
191
+ // A whole lifecycle root: a new provider under it is covered without a second edit.
224
192
  expect(isLockedWorkspacePath(`.intentic/secrets/auth`)).toBe(true);
225
193
  expect(isLockedWorkspacePath(`.intentic/secrets/auth/codex/auth.json`)).toBe(true);
226
194
  expect(isLockedWorkspacePath(`.intentic/local/browser/Default/Cookies`)).toBe(true);
227
195
  });
228
196
 
229
197
  it(`leaves the state dir's ordinary manifests alone`, () => {
230
- // The dir itself is browsable, and most of what is in it is a file a person may legitimately read.
198
+ // The dir itself is browsable; most of what's in it is fine for a person to read.
231
199
  expect(isLockedWorkspacePath(`.intentic`)).toBe(false);
232
200
  expect(isLockedWorkspacePath(`.intentic/config/settings.json`)).toBe(false);
233
201
  expect(isLockedWorkspacePath(`.intentic/config/approvals/post-1.json`)).toBe(false);
234
202
  });
235
203
 
236
204
  it(`locks the ROOT's own .git and nobody else's`, () => {
237
- // The root's is the pointer to the shadow history repo, kept where the agent cannot rewrite it; a
238
- // repo's own .git is ordinary content that stays browsable.
205
+ // The root's .git points at the shadow history repo, kept where the agent can't rewrite it.
239
206
  expect(isLockedWorkspacePath(`.git`)).toBe(true);
240
207
  expect(isLockedWorkspacePath(`.git/config`)).toBe(true);
241
208
  expect(isLockedWorkspacePath(`myrepo/.git/config`)).toBe(false);
242
- // …and a repo's own nested state dir is its project's, not the daemon's.
209
+ // A repo's own nested .intentic is its project's state, not the daemon's.
243
210
  expect(isLockedWorkspacePath(`myrepo/.intentic/config/capabilities.json`)).toBe(false);
244
211
  });
245
212
 
@@ -249,26 +216,21 @@ describe(`isLockedWorkspacePath`, () => {
249
216
  });
250
217
 
251
218
  it(`lets the plan documents out of the session store around them`, () => {
252
- // The plan a card asks the reader to approve, whose full text that card already renders. Refusing the
253
- // file left the card's one link into the workspace landing on a padlock about the document it was
254
- // asking about; the transcripts it sits beside stay locked.
219
+ // The plan a card asks you to approve, carved out of the transcripts store, which stays locked around it.
255
220
  expect(isLockedWorkspacePath(`${PLAN_DOCUMENTS_DIR}/wiggly-spring.md`)).toBe(false);
256
221
  expect(isLockedWorkspacePath(PLAN_DOCUMENTS_DIR)).toBe(false);
257
222
  expect(isLockedWorkspacePath(`.intentic/records/sessions/claude/projects/x.jsonl`)).toBe(true);
258
223
  expect(isLockedWorkspacePath(`.intentic/records/sessions`)).toBe(true);
259
- // …and it is the directory that is exempt, not the word: a sibling store named for it is not one.
224
+ // The directory is exempt, not the word: a similarly-named sibling store is not.
260
225
  expect(isLockedWorkspacePath(`.intentic/records/sessions/claude/plans-backup/x.md`)).toBe(true);
261
226
  });
262
227
  });
263
228
 
264
- /* WHICH entry a locked path belongs to, which is what the refusal screen says a file holds and where to manage
265
- * it. Split out from the boolean so the browser can key its sentences on the daemon's own list instead of a
266
- * second copy of the rule — the copy it kept drifted through the state regrouping and stranded every locked
267
- * file on the generic sentence. */
229
+ // Which entry a locked path belongs to, for the refusal screen's message; split from the boolean so the browser reads
230
+ // the daemon's own list.
268
231
  describe(`lockedWorkspaceEntry`, () => {
269
232
  it(`names the entry a path matched, not the leaf it ends at`, () => {
270
- // A locked FOLDER is one row in the explorer and never descended, so the name worth reporting is the
271
- // folder's: "Cookies is kept private" is true of something the reader has never heard of.
233
+ // A locked folder is one un-descended row, so the name worth reporting is the folder's.
272
234
  expect(lockedWorkspaceEntry(`.intentic/local/browser/Default/Cookies`)).toBe(`local/browser`);
273
235
  expect(lockedWorkspaceEntry(`.intentic/secrets/auth/codex/auth.json`)).toBe(`secrets/auth`);
274
236
  expect(lockedWorkspaceEntry(`.intentic/config/capabilities.json`)).toBe(`config/capabilities.json`);
@@ -282,21 +244,19 @@ describe(`lockedWorkspaceEntry`, () => {
282
244
  });
283
245
 
284
246
  it(`answers for every entry the lock declares`, () => {
285
- // The set is the daemon's; this is what makes it addressable from the browser. An entry nobody can
286
- // resolve back out is one the refusal screen could only describe generically.
247
+ // Makes the daemon's set addressable from the browser; an unresolvable entry could only get a generic message.
287
248
  for (const entry of LOCKED_STATE_ENTRIES) {
288
249
  expect([entry, lockedWorkspaceEntry(`${STATE_DIR}/${entry}`)]).toEqual([entry, entry]);
289
250
  }
290
251
  });
291
252
  });
292
253
 
293
- /* The carve-out the diff routes ask for, and the reason it is derived: a locked entry the root repo TRACKS has
294
- * a diff by construction, and refusing to serve it made the Changes panel list a row it could not open. */
254
+ // The carve-out diff routes need: a locked entry the root repo tracks has a diff by construction, so refusing to serve
255
+ // it left Changes with an unopenable row.
295
256
  describe(`isReviewableLockedPath`, () => {
296
257
  it(`admits the locked entry the root repo tracks, and nothing else locked`, () => {
297
258
  expect(isReviewableLockedPath(`.intentic/config/capabilities.json`)).toBe(true);
298
- // Every other locked entry is a credential, an identity binding or private runtime state. None is
299
- // versioned, so none is reachable through a diff: the carve-out cannot widen without the flag.
259
+ // None of the rest is versioned, so none is diff-reachable; the carve-out can't widen without that flag.
300
260
  expect(isReviewableLockedPath(`.intentic/identity/owner.json`)).toBe(false);
301
261
  expect(isReviewableLockedPath(`.intentic/identity/members.json`)).toBe(false);
302
262
  expect(isReviewableLockedPath(`.intentic/secrets/ci.json`)).toBe(false);
@@ -307,11 +267,9 @@ describe(`isReviewableLockedPath`, () => {
307
267
  });
308
268
 
309
269
  it(`answers only for the locked set: an ordinary path was never refused to begin with`, () => {
310
- // Tracked, but not locked: the guards never ask this of them, and a `true` here would read as "this
311
- // path needed a carve-out", which is a different and wrong statement.
312
270
  expect(isReviewableLockedPath(`.intentic/config/settings.json`)).toBe(false);
313
271
  expect(isReviewableLockedPath(`src/app.ts`)).toBe(false);
314
- // A repo's own nested state dir is its project's content, exactly as the lock reads it.
272
+ // A repo's own nested state dir is its project's content, same as the lock reads it.
315
273
  expect(isReviewableLockedPath(`myrepo/.intentic/config/capabilities.json`)).toBe(false);
316
274
  });
317
275
 
@@ -321,8 +279,7 @@ describe(`isReviewableLockedPath`, () => {
321
279
  });
322
280
 
323
281
  it(`stays a strict subset of the lock`, () => {
324
- // The carve-out is about which locked paths a DIFF may serve. A path it admits that the lock never
325
- // held would mean the guards had stopped agreeing on what the control plane is.
282
+ // A path admitted here that the lock never held would mean the two guards disagree on what's locked.
326
283
  for (const path of VERSIONED_STATE_PATHS) {
327
284
  expect([path, isReviewableLockedPath(path) && !isLockedWorkspacePath(path)]).toEqual([path, false]);
328
285
  }
@@ -330,27 +287,18 @@ describe(`isReviewableLockedPath`, () => {
330
287
  });
331
288
 
332
289
  describe(`VERSIONED_STATE_PATHS`, () => {
333
- /* THE ONE ASSERTION THAT MUST NEVER GO GREEN BY ACCIDENT.
334
- *
335
- * `versioned` carves an entry out of the root repo's wholesale `.intentic` exclusion, so marking one is the
336
- * difference between a file the owner reviews and a file the next baseline commit publishes into `git log`
337
- * forever. A credential marked by a hurried hand is not recoverable by unmarking it later: the commit is
338
- * already written, which is why the refusal is mechanical here rather than a rule in a comment. */
290
+ // versioned exempts an entry from the `.intentic` exclusion; a mismarked credential can't be unmarked once
291
+ // committed.
339
292
  it(`never tracks a credential or an identity binding`, () => {
340
293
  const leaked = WORKSPACE_STATE_FILES.filter((file) => file.versioned && (file.portability === `secret` || file.portability === `identity`));
341
294
  expect(leaked.map((file) => file.path)).toEqual([]);
342
295
  });
343
296
 
344
- /* Narrower than `carry` ON PURPOSE, and this is where that stays true. The two answer different questions:
345
- * carry is "does it move to a new sandbox", versioned is "should a human review it changing", so the
346
- * ledgers and the bulk are `carry` and deliberately absent: the run ledger is rewritten several times per
347
- * workflow step, the usage batch every few seconds a browser is open, and the transcripts run to hundreds of
348
- * megabytes. Tracking any of them buries the owner's code review under machine noise. */
297
+ // versioned asks if a human should review it; carry asks if it moves. Frequently-rewritten ledgers are carry only.
349
298
  it(`leaves the ledgers and the bulk out even though they travel`, () => {
350
299
  for (const path of [
351
300
  `.intentic/records/workflow-runs.json`,
352
- // Split out of the tracked automations manifest precisely so a fire stops dirtying it: the one
353
- // entry here that would be a REGRESSION rather than an oversight if it ever went tracked.
301
+ // Split from the tracked automations manifest so a run doesn't dirty it.
354
302
  `.intentic/records/automation-runs.json`,
355
303
  `.intentic/records/loops.json`,
356
304
  `.intentic/records/thread-sessions.json`,
@@ -363,69 +311,43 @@ describe(`VERSIONED_STATE_PATHS`, () => {
363
311
  }
364
312
  });
365
313
 
366
- /* Spelled out rather than derived, so ADDING a tracked entry is a visible edit to this list and not a silent
367
- * consequence of editing the table above: the review the flag itself exists to force. */
314
+ // Spelled out rather than derived, so adding a tracked entry is a visible edit here, not a silent side effect.
368
315
  it(`tracks exactly the configuration slice plus the agent's own authored output`, () => {
369
316
  expect(VERSIONED_STATE_PATHS.toSorted()).toEqual([
370
317
  `${STATE_DIR}/config/approvals/`,
371
318
  `${STATE_DIR}/config/automations.json`,
372
- // Which apps the daemon starts at boot: the starter site on a fresh box, and whatever the owner adds.
319
+ // Which apps the daemon starts at boot: the starter site, plus whatever the owner adds.
373
320
  `${STATE_DIR}/config/autostart.json`,
374
- /* The connections themselves, and the entry that took the longest to earn its place: it was classed
375
- * `secret` on the strength of holding each capability's credential, which stopped being true when the
376
- * vault took the values out and left the shape behind. Connecting a deployment orchestrator, or
377
- * granting a connected device shell and screen control, is the largest change made to what this
378
- * sandbox can DO, and it used to leave no diff. */
321
+ // Tracked since credential values moved to the vault, leaving shapes only; connecting something merits
322
+ // review.
379
323
  `${STATE_DIR}/config/capabilities.json`,
380
324
  `${STATE_DIR}/config/capability-dismissals.json`,
381
- // The context shelves: which repositories a conversation opened on one carries. A list of names, and
382
- // the decision about what a session may see, which is what a review is for.
383
- `${STATE_DIR}/config/context/`,
384
- /* The two entries the AGENT authors on its own initiative, and the reason `versioned` is not read as
385
- * config-only. Both are the sandbox acting outward: a draft publishes words under the owner's name,
386
- * a workspace extension is code that runs in the app and can serve HTTP with the workspace under
387
- * node:fs, and both used to reach that far with no diff anywhere. Kept rather than consumed, one
388
- * small file at a time, so tracking them yields a record instead of churn. */
389
- /* Where each agent engine takes its version from. Tracked for the same reason heavy-commands is:
390
- * it is a standing decision about what runs for everyone on this workspace — tracking upstream's
391
- * newest Claude Code, or pinning one while a regression is open — and `git log` is the only thing
392
- * that answers "since when". */
325
+ // Context shelves: which repos a conversation opened; a decision about what a session may see, worth
326
+ // review.
327
+ // Agent-authored: a draft publishes under the owner's name; an extension runs code with node:fs access.
328
+ // Which version each agent engine runs; a standing decision worth a `git log` answer to "since when".
393
329
  `${STATE_DIR}/config/engines.json`,
394
330
  `${STATE_DIR}/config/environment.Dockerfile`,
395
331
  `${STATE_DIR}/config/environment.custom.Dockerfile`,
396
332
  `${STATE_DIR}/config/environment.d/`,
397
333
  `${STATE_DIR}/config/extension-enablement.json`,
398
- /* Its twin, and the pair is the argument: the SWITCH was already tracked while the configuration
399
- * behind it was not, so a commit could record turning an extension on and say nothing about what it
400
- * was told to do. Tracked once its declared-secret values moved to the vault. */
334
+ // Twin of the enablement switch, tracked now that its secret values moved to the vault.
401
335
  `${STATE_DIR}/config/extension-settings.json`,
402
- // The owner's per-extension update posture (notify / agent / auto): a standing decision about
403
- // what may run unattended, which is exactly the kind of edit worth a line in `git log`.
336
+ // Per-extension update posture (notify/agent/auto): a standing decision on what may run unattended.
404
337
  `${STATE_DIR}/config/extension-update-policy.json`,
405
- // Which commands are heavy enough to take turns, and how many may run at once. Tracked because
406
- // raising that limit is a decision about every session sharing the box, and `git log` is the only
407
- // thing that answers "since when have we been allowing four of these at a time".
338
+ // Which commands count as heavy, and how many may run at once; a shared-box decision worth a `git log`
339
+ // line.
408
340
  `${STATE_DIR}/config/heavy-commands.json`,
409
- /* The scripts the rules run. Tracked because the exclude list carves entries out BY NAME, so a
410
- * directory nobody marked is invisible both to `git add -A` and to the land: that is how 559e896
411
- * came to repoint settings.json at two scripts it never staged, and how the pair written in a
412
- * worktree never arrived. What the workspace held from then on was settings naming two hooks that
413
- * did not exist, and every edit for a day firing `node` at a missing file. A rule is reviewable;
414
- * the code it runs on every write has to be. */
341
+ // The exclude list carves entries out by name; an unlisted directory is invisible to git and to land.
415
342
  `${STATE_DIR}/config/hooks/`,
416
343
  `${STATE_DIR}/config/loop-designs.json`,
417
344
  `${STATE_DIR}/config/personas.json`,
418
- // A persona's own kit: the prompt it runs on and the skills only its turns reach. Tracked for the
419
- // reason its card is, one step further: this is the text that decides how that persona behaves.
345
+ // A persona's prompt and reachable skills: the text that decides how it behaves, same reason as its card.
420
346
  `${STATE_DIR}/config/personas/`,
421
- /* The safety policy: prose deciding when an agent stops to ask before running something. Tracked for
422
- * the reason settings.json is, and more sharply — it is the standing answer to "how much may this
423
- * thing do unasked", the agent may edit it on the owner's instruction, and `git log` is the only
424
- * thing that answers "since when did we stop being asked about force-pushes". */
347
+ // Prose deciding when the agent stops to ask; the standing answer to "since when did we allow this".
425
348
  `${STATE_DIR}/config/safety.md`,
426
349
  `${STATE_DIR}/config/settings.json`,
427
- // The skills the owner wrote. Tracked for the reason the rules in settings.json are: text that
428
- // changes how the agent behaves is worth a diff and a line in `git log`.
350
+ // Skills the owner wrote: text that changes agent behavior, worth a diff like the rules in settings.json.
429
351
  `${STATE_DIR}/config/skills/`,
430
352
  `${STATE_DIR}/config/templates.json`,
431
353
  `${STATE_DIR}/config/workflows.json`,
@@ -433,19 +355,14 @@ describe(`VERSIONED_STATE_PATHS`, () => {
433
355
  ]);
434
356
  });
435
357
 
436
- /* THE ASYMMETRY THIS CLOSED, kept as its own assertion because it is the failure rather than a detail of it:
437
- * the switch was tracked and the thing it switched was not, so a commit could record turning on an extension
438
- * whose code nobody else could read, and a workspace extension has no install moment to review at instead. */
358
+ // Both the switch and the code are tracked: an extension has no separate install moment to review.
439
359
  it(`tracks a workspace extension's code, not just the switch that enables it`, () => {
440
360
  expect(VERSIONED_STATE_PATHS).toContain(`.intentic/config/extension-enablement.json`);
441
361
  expect(VERSIONED_STATE_PATHS).toContain(`.intentic/config/workspace-extensions/`);
442
362
  });
443
363
 
444
- /* A QUEUE IS A LEDGER, which is the distinction the two entries above turn on. A draft is kept after it
445
- * settles (`posted`, with postedAt/postedUrl stamped on it), so tracking it leaves a durable record of what
446
- * went out; a held wake is REMOVED once answered, so tracking it would leave an add and a delete describing
447
- * a decision whose outcome lives elsewhere. Same for the staged docs: publishing copies them into the repo,
448
- * where they are tracked as ordinary content, so tracking the staging tree too would double every page. */
364
+ // A settled draft stays as a record; a consumed wake is removed, so tracking it would only log a decision twice.
365
+ // Staged docs are tracked once published; tracking the staging tree too would double every page.
449
366
  it(`leaves the consumed queues and the staging trees out even though they are authored`, () => {
450
367
  for (const path of [`.intentic/records/approvals/`, `.intentic/config/docs/`]) {
451
368
  expect([path, VERSIONED_STATE_PATHS.includes(path)]).toEqual([path, false]);
@@ -457,23 +374,15 @@ describe(`VERSIONED_STATE_PATHS`, () => {
457
374
  }
458
375
  });
459
376
 
460
- /* The composed overlay is `derived`: recomposed on every boot from the custom file that IS tracked, against
461
- * whatever base image this container happens to be on. Tracking it would put a rewritten-at-startup file in
462
- * front of the owner as a change they made. */
377
+ // The composed file is rebuilt every boot; tracking it would show the owner a rewrite as their own edit.
463
378
  it(`tracks the environment overlay's source but not its composed output`, () => {
464
379
  expect(VERSIONED_STATE_PATHS).toContain(`.intentic/config/environment.custom.Dockerfile`);
465
380
  expect(VERSIONED_STATE_PATHS).not.toContain(`.intentic/local/environment.approved.Dockerfile`);
466
381
  });
467
382
  });
468
383
 
469
- /* THE GROUPING, AND THE INVARIANT THAT LETS IT BE DERIVED.
470
- *
471
- * `stateGroupOf` reads three existing answers instead of adding a fourth, which is only sound while those answers
472
- * nest: reviewed and authored entries must all be `carry`, so "did a person write this" never has to be asked of
473
- * a credential. Nothing in the type system says so, `versioned: true` on a `secret` entry compiles, and the
474
- * failure would be quiet in the worst way: the entry would group as `secrets` (correctly kept out of the backup)
475
- * while the git exclude and the search floor, which read `versioned` directly, went on tracking and indexing it.
476
- * A credential in the owner's diff and in the search index, from one plausible-looking flag. */
384
+ // stateGroupOf derives from three existing flags rather than a fourth, sound only because authored/versioned entries
385
+ // are always `carry`. Nothing enforces that: `versioned` on a `secret` entry would compile and misclassify silently.
477
386
  describe(`state groups`, () => {
478
387
  const GROUPS: readonly StateGroup[] = [`config`, `records`, `local`, `identity`, `secrets`];
479
388
 
@@ -492,8 +401,7 @@ describe(`state groups`, () => {
492
401
  });
493
402
 
494
403
  it(`agrees with the two lists that were derived before it`, () => {
495
- // The git exclude reads `versioned` and the search floor reads `versioned || authored`. Both must land
496
- // inside `config`, or the folder a rule points at stops matching the rule.
404
+ // The git exclude reads versioned; the search floor reads versioned||authored. Both must land inside config.
497
405
  const written = stateGroupPaths(`config`);
498
406
  for (const path of VERSIONED_STATE_PATHS) {
499
407
  expect([path, written.includes(path)]).toEqual([path, true]);
@@ -512,14 +420,7 @@ describe(`state groups`, () => {
512
420
  expect(stateGroupPaths(`secrets`)).toContain(`.intentic/secrets/auth/`);
513
421
  });
514
422
 
515
- /* THE LAYOUT GUARD, and the reason the folders can carry the rules at all.
516
- *
517
- * Five prefixes replaced five hand-kept path lists: the git exclude, the search allow-list, the sync backup,
518
- * the watcher skip, the export bundle, and every one of them is now only as true as the claim that an entry
519
- * physically SITS in the folder its class puts it in. Nothing else checks that: the paths are literals, and a
520
- * credential typed into `config/` by mistake would compile, track in git, index in search and copy to the
521
- * owner's laptop, with each of those rules behaving exactly as designed. This is the one assertion standing
522
- * between a mistyped literal and that. */
423
+ // Replaces five hand-kept path lists; a mistyped literal here is the one thing that breaks them all silently.
523
424
  it(`puts every entry physically inside its own group's folder`, () => {
524
425
  for (const file of WORKSPACE_STATE_FILES) {
525
426
  const expected = `${STATE_GROUP_DIR[stateGroupOf(file)]}/`;
@@ -527,11 +428,8 @@ describe(`state groups`, () => {
527
428
  }
528
429
  });
529
430
 
530
- /* The browser profiles' path is copied into @intentic/workspace-ignore (isBrowserProfilePath), which cannot
531
- * import this package: it is the browser-safe half, deliberately free of zod and the contract surface, so
532
- * the platform's web bundle can take it. This is the guard that keeps the copy honest. If it fails, the
533
- * profiles moved and `BROWSER_PROFILE_GROUP` in _sandbox/workspace-ignore/src/constants.ts must move too, or
534
- * the tree will start eagerly walking a Chromium user-data dir and the watcher will report its churn. */
431
+ // The browser-safe copy lives in @intentic/workspace-ignore, which can't import this package; a failure here means
432
+ // that copy has drifted.
535
433
  it(`keeps the browser profiles where workspace-ignore's copy of the path expects them`, () => {
536
434
  expect(WORKSPACE_STATE_FILES.map((file) => file.path)).toContain(`.intentic/local/browser/`);
537
435
  });
@@ -555,10 +453,8 @@ describe(`state groups`, () => {
555
453
  });
556
454
  });
557
455
 
558
- /* THE MOUNT BOUNDARY, and the claim that lets isolation bind by group instead of over the whole state dir: the
559
- * shared prefixes and the tracked entries never overlap. A tracked entry under a shared prefix would be the old
560
- * bug back in one folder, git in a worktree writing through a bind onto the live tree, and an untracked entry
561
- * under no shared prefix is a transcript or a staged doc written into a per-worktree copy nobody reads. */
456
+ // The mount boundary: shared prefixes and tracked entries never overlap, so isolation can bind by group instead of the
457
+ // whole state dir.
562
458
  describe(`SHARED_STATE_PATHS`, () => {
563
459
  const under = (path: string, prefix: string): boolean => path === prefix || path.startsWith(prefix);
564
460
 
@@ -593,9 +489,7 @@ describe(`SHARED_STATE_PATHS`, () => {
593
489
  });
594
490
  });
595
491
 
596
- /* WHAT THE OWNER'S MACHINE KEEPS. The sync ignored the whole state dir, so losing a sandbox lost every persona,
597
- * skill, automation, draft and transcript in it: a backup that held only the source tree. These pin the two
598
- * halves of the fix: the slice that now comes down, and the credentials that still must not. */
492
+ // Pins the split: the authored slice that now backs up, and the credentials that still must not.
599
493
  describe(`BACKED_UP_STATE_PATHS`, () => {
600
494
  it(`splits the table in two with nothing falling between`, () => {
601
495
  expect([...BACKED_UP_STATE_PATHS, ...UNBACKED_STATE_PATHS].toSorted()).toEqual(WORKSPACE_STATE_FILES.map((file) => file.path).toSorted());
@@ -622,9 +516,7 @@ describe(`BACKED_UP_STATE_PATHS`, () => {
622
516
  }
623
517
  });
624
518
 
625
- /* The distinction `portability` alone cannot draw, and the reason the `backup` flag exists. Ownership records
626
- * may never RESTORE into another sandbox: that is what `identity` means, and members.json's own entry argues
627
- * why. None of that stops the owner keeping a copy of who could drive their own machine. */
519
+ // identity means never restoring into another sandbox; that doesn't stop the owner keeping their own copy.
628
520
  it(`copies the ownership records that may never travel`, () => {
629
521
  for (const path of [`.intentic/identity/owner.json`, `.intentic/identity/members.json`, `.intentic/identity/workspace.json`]) {
630
522
  expect([path, BACKED_UP_STATE_PATHS.includes(path)]).toEqual([path, true]);
@@ -633,7 +525,7 @@ describe(`BACKED_UP_STATE_PATHS`, () => {
633
525
 
634
526
  it(`still withholds the tokens that authenticate against this sandbox`, () => {
635
527
  expect(BACKED_UP_STATE_PATHS).not.toContain(`.intentic/identity/control-tokens.json`);
636
- // And it is the ONLY entry that opts out by hand: everything else follows from its class.
528
+ // The only entry that opts out by hand; everything else follows from its class alone.
637
529
  expect(WORKSPACE_STATE_FILES.filter((file) => file.backup === false).map((file) => file.path)).toEqual([
638
530
  `.intentic/identity/control-tokens.json`,
639
531
  ]);