@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
@@ -12,26 +12,11 @@ import {
12
12
  } from "./stack.js";
13
13
  import { WORKSPACE_ROOT_JSCPD_EXCLUDE_ARG, WORKSPACE_ROOT_RG_EXCLUDE_ARG } from "./workspace-scope.js";
14
14
 
15
- /* THE PROBES, the measurements that cost a subprocess, declared once so the daemon that runs them and the panel
16
- * that explains them cannot disagree about what "outdated" meant.
17
- *
18
- * A spec is a shell command and a parser, deliberately in that order of trust: the command is whatever the tool's
19
- * own maintainers publish as its machine-readable output, and the parser is written to be DISAPPOINTED. Every one
20
- * of these tools has changed its JSON shape at least once, they are run against whatever version the repo pinned,
21
- * and a probe that throws on an unexpected field would take the whole maintenance surface down with it. So each
22
- * parser walks the structure defensively and returns `undefined` when it cannot recognise what it got, which the
23
- * runner records as a failed probe with the output attached, rather than as a clean repository.
24
- *
25
- * TIERS ARE ABOUT COST, and the cost is what sets the cadence. Tier 1 reads metadata that already exists (a
26
- * lockfile, a registry's version list) and finishes in seconds, so the background runner refreshes it daily. Tier
27
- * 2 reads the whole tree, knip type-checks it, jscpd tokenizes every file, and can run for minutes on a large
28
- * repo, so it refreshes weekly and says how long it took, because a reader deciding whether to force a refresh
29
- * deserves to know what they are asking for.
30
- *
31
- * THE `available` COMMAND IS NOT AN AFTERTHOUGHT. "knip is not a devDependency of this repo" and "knip found no
32
- * dead code" are opposite facts that a bare exit code cannot tell apart, and collapsing them is how a maintenance
33
- * panel ends up reporting a green repository it has never measured. Non-zero here means unmeasured, and an
34
- * unmeasured chore renders greyed and can never light the rail. */
15
+ // Probe specs (command + parser) shared by the daemon and the panel so both agree on what each measurement means.
16
+ // Parsers return `undefined` rather than throw on an unrecognized shape, since a tool's JSON output can drift between
17
+ // versions; the runner records that as a failed probe, not a clean repo.
18
+ // Tier sets refresh cadence by cost (tier 1 daily, tier 2 weekly); a non-zero `available` means unmeasured, never a
19
+ // false-clean result.
35
20
 
36
21
  const HOUR_MS = 3_600_000;
37
22
  const DAY_MS = 24 * HOUR_MS;
@@ -39,29 +24,23 @@ const DAY_MS = 24 * HOUR_MS;
39
24
  export interface ProbeSpec {
40
25
  readonly id: ProbeId;
41
26
  readonly title: string;
42
- // What the reader is told this measures, in the panel, next to its age.
27
+ // Shown to the reader in the panel, next to the probe's age.
43
28
  readonly measures: string;
44
29
  readonly tier: 1 | 2;
45
- // How long a result stays fresh. The background runner refreshes anything older; the panel's per-probe
46
- // refresh button ignores it.
30
+ // How long a result stays fresh; the background runner refreshes past it, manual refresh ignores it.
47
31
  readonly ttlMs: number;
48
32
  readonly timeoutMs: number;
49
- // Exit 0 ⇒ this repo can be measured. Runs in the repo's own directory, like the command.
33
+ // Exit 0 means this repo can be measured; runs in the repo's own directory, like `command`.
50
34
  readonly available: string;
51
- /* What is MISSING when `available` says no, named here rather than derived from the title. The obvious
52
- * derivation, "this repository has no security advisories to measure", states the one thing an unmeasured
53
- * probe must never claim, that there are none, and it is the same conflation the block above exists to
54
- * prevent. Phrased as a bare clause ("no lockfile"), because the panel groups these under its own lead-in. */
35
+ // What's missing, as a bare clause; must never imply the repo has zero findings (unmeasured is not clean).
55
36
  readonly unavailable: string;
56
- // `sh -c`, in the repo's directory. Stdout is the parser's input; a non-zero exit is NOT a failure by itself
57
- // (pnpm outdated and pnpm audit both exit non-zero precisely when they have something to report), so the
58
- // runner judges by whether the parser recognised the output.
37
+ // Runs via `sh -c` in the repo dir; non-zero exit isn't failure, the runner judges by whether parse succeeded.
59
38
  readonly command: string;
60
39
  readonly parse: (stdout: string) => ProbeFacts | undefined;
61
40
  }
62
41
 
63
- // A parsed JSON object, or undefined for anything else. Every parser starts here, so "the tool printed a warning
64
- // before its JSON" and "the tool printed nothing" both land on the same honest answer instead of throwing.
42
+ // Parses the first `{...}` found as JSON, or returns undefined; tolerates leading warnings or empty stdout without
43
+ // throwing.
65
44
  const asObject = (text: string): Record<string, unknown> | undefined => {
66
45
  const start = text.indexOf(`{`);
67
46
  if (start === -1) {
@@ -78,8 +57,8 @@ const asObject = (text: string): Record<string, unknown> | undefined => {
78
57
  const asString = (value: unknown): string | undefined => (typeof value === `string` && value !== `` ? value : undefined);
79
58
  const countOf = (value: unknown): number => (Array.isArray(value) ? value.length : 0);
80
59
 
81
- // Which semver step separates two versions. Compared as leading integers rather than by a semver library: the
82
- // only question is which position first differs, and prerelease/build metadata cannot change that answer.
60
+ // Leading-integer parts of a version, compared positionally rather than via full semver; prerelease/build metadata
61
+ // can't change which position differs first.
83
62
  const versionParts = (version: string): number[] =>
84
63
  version
85
64
  .replace(/^[^\d]*/, ``)
@@ -95,11 +74,9 @@ const semverKind = (current: string, latest: string): OutdatedPackage["kind"] =>
95
74
  return latestMinor !== currentMinor ? `minor` : `patch`;
96
75
  };
97
76
 
98
- /* `pnpm outdated --json` prints a map of package name → { current, latest, dependencyType }. In a workspace the
99
- * recursive form merges every package's entries into the same map and adds `dependentPackages`, which is why this
100
- * reads the map rather than expecting a list: one shape covers both, and a field we don't use appearing is not a
101
- * parse failure. Entries missing `current` or `latest` are skipped, that is how pnpm reports a package it could
102
- * not resolve against the registry, and it is not evidence of anything. */
77
+ // `pnpm outdated --json` prints a name→{current,latest,dependencyType} map; the recursive workspace form merges into
78
+ // the same shape.
79
+ // Entries missing `current` or `latest` are skipped: pnpm could not resolve them against the registry.
103
80
  const parseOutdated = (stdout: string): ProbeFacts | undefined => {
104
81
  const root = asObject(stdout);
105
82
  if (root === undefined) {
@@ -123,20 +100,17 @@ const parseOutdated = (stdout: string): ProbeFacts | undefined => {
123
100
 
124
101
  const SEVERITIES = new Set([`critical`, `high`, `moderate`, `low`, `info`]);
125
102
 
126
- /* `pnpm audit --json` prints `{ advisories: { <id>: {...} }, metadata: {...} }`. The metadata's counts are
127
- * deliberately ignored: they are a tally, and this surface needs the advisories themselves, which package, and
128
- * whether a patched range exists, because "there is a fix that is a version bump" and "there is no patch yet"
129
- * lead to completely different turns, and a count cannot tell them apart.
130
- *
131
- * `dev` comes off the findings' own flag rather than being inferred. A build-time-only advisory is real but it is
132
- * not the same risk as one in a running service, and the chore's prompt says so instead of treating them alike. */
103
+ // `pnpm audit --json` prints {advisories, metadata}; metadata's tally is ignored since the chore needs which package
104
+ // and whether a patch exists.
105
+ // `dev` is read from the findings' own flag: a build-time-only advisory is a different risk than one in a running
106
+ // service.
133
107
  const parseAudit = (stdout: string): ProbeFacts | undefined => {
134
108
  const root = asObject(stdout);
135
109
  if (root === undefined) {
136
110
  return undefined;
137
111
  }
138
112
  const raw = root[`advisories`];
139
- // No `advisories` key at all is pnpm's clean report, an empty list, not an unrecognisable one.
113
+ // No `advisories` key is pnpm's clean report (empty list), not an unrecognized shape.
140
114
  if (raw === undefined) {
141
115
  return { id: `audit`, advisories: [] };
142
116
  }
@@ -160,8 +134,7 @@ const parseAudit = (stdout: string): ProbeFacts | undefined => {
160
134
  name,
161
135
  severity: severity as Advisory["severity"],
162
136
  title: asString(entry[`title`]) ?? name,
163
- // "<0.0.0" is npm's spelling of "no patch exists", and treating it as a fixing range would have the
164
- // chore promise a bump that cannot be made.
137
+ // `<0.0.0` is npm's spelling of "no patch exists"; treated as absent rather than a fixable range.
165
138
  ...(patched === undefined || patched === `<0.0.0` ? {} : { patched }),
166
139
  dev: findings.length > 0 && findings.every((finding) => finding[`dev`] === true),
167
140
  });
@@ -169,17 +142,12 @@ const parseAudit = (stdout: string): ProbeFacts | undefined => {
169
142
  return { id: `audit`, advisories };
170
143
  };
171
144
 
172
- /* knip's JSON reporter prints `{ issues: [...] }`, one row per file that has findings, carrying a per-kind array
173
- * of what it found there. A wholly unreferenced file is a row whose own `files` array names it, which is why that
174
- * count is a sum like every other kind rather than a list of its own. Counts plus a sample of the file paths, not
175
- * the full list: the agent re-runs knip itself against the live tree (a list from a probe hours old would send it
176
- * at files that are already gone), so what travels here only has to be enough to decide whether the turn is worth
177
- * starting. */
145
+ // Sample of paths only; the agent re-runs knip live, so a full list would already be stale.
178
146
  const DEAD_CODE_SAMPLE = 8;
179
147
 
180
148
  const parseKnip = (stdout: string): ProbeFacts | undefined => {
181
149
  const raw = asObject(stdout)?.[`issues`];
182
- // `issues` is the whole report in this reporter, so its absence means we are not reading knip's output at all.
150
+ // `issues` is the whole report; its absence means this isn't knip's output at all.
183
151
  if (!Array.isArray(raw)) {
184
152
  return undefined;
185
153
  }
@@ -196,10 +164,7 @@ const parseKnip = (stdout: string): ProbeFacts | undefined => {
196
164
  return { id: `knip`, deadCode };
197
165
  };
198
166
 
199
- /* jscpd writes its JSON to a file rather than stdout, which is why the command below ends in a `cat`. The report
200
- * carries `statistics[`total`].percentage` (of scanned lines) and a `duplicates` array; the percentage is what a
201
- * threshold is worth setting against, because a clone COUNT grows with the repository and would mean something
202
- * different every quarter. */
167
+ // jscpd writes JSON to a file, not stdout; percentage of scanned lines is stable, unlike a raw clone count.
203
168
  const DUPLICATION_SAMPLE = 5;
204
169
 
205
170
  const parseJscpd = (stdout: string): ProbeFacts | undefined => {
@@ -228,28 +193,15 @@ const parseJscpd = (stdout: string): ProbeFacts | undefined => {
228
193
  return { id: `jscpd`, duplication };
229
194
  };
230
195
 
231
- /* WHAT THE SUITE WOULD NOTICE IF THE CODE BROKE, from Stryker's report.
232
- *
233
- * The report is the cross-tool "mutation testing report schema": `files` maps a path to `{ mutants: [{ mutatorName,
234
- * replacement, location.start.line, status }] }`. Statuses are Killed, Survived, NoCoverage, Timeout, CompileError,
235
- * RuntimeError, Ignored, Pending.
236
- *
237
- * THE ARITHMETIC IS STRYKER'S, NOT OURS, and that is a deliberate constraint rather than laziness. A timeout counts
238
- * as DETECTED (a mutant that hangs the suite is one the suite noticed) and NoCoverage counts as UNDETECTED (nothing
239
- * ran, so nothing could have caught it). Both are counter-intuitive enough to be worth restating here, and both are
240
- * what the tool's own score means — a row that recomputed them differently would be quietly arguing with the
241
- * evidence printed underneath it.
242
- *
243
- * `Pending` is treated as inconclusive rather than dropped: an interrupted incremental run leaves them, and
244
- * counting them either way would move the score for a reason that has nothing to do with the tests. */
196
+ // Timeout counts as DETECTED, NoCoverage as UNDETECTED; Pending is inconclusive, not dropped either way.
245
197
  const SURVIVOR_SAMPLE = 8;
246
198
  const DETECTED = new Set([`Killed`, `Timeout`]);
247
199
  const UNDETECTED = new Set([`Survived`, `NoCoverage`]);
248
200
 
249
201
  type Survivor = MutationScore["survivors"][number];
250
202
 
251
- // One file's mutant list, or nothing. Every shape this cannot recognise reads as "no mutants here" rather than
252
- // throwing: a report with one malformed entry is still worth the rest of its numbers.
203
+ // One file's mutant list, or empty for any shape that doesn't match; a malformed entry doesn't invalidate the rest of
204
+ // the report.
253
205
  const mutantsOf = (raw: unknown): readonly Record<string, unknown>[] => {
254
206
  if (typeof raw !== `object` || raw === null) {
255
207
  return [];
@@ -269,8 +221,7 @@ const survivorOf = (file: string, mutant: Record<string, unknown>): Survivor =>
269
221
  file,
270
222
  line: lineOf(mutant),
271
223
  mutator: asString(mutant[`mutatorName`]) ?? `?`,
272
- // An empty replacement is meaningful — the mutator deleted the expression — so it is rendered as the removal
273
- // it is rather than left blank for a reader to puzzle over.
224
+ // Empty replacement means the mutator deleted the expression; rendered as `(removed)` rather than blank.
274
225
  replacement: asString(mutant[`replacement`]) ?? `(removed)`,
275
226
  });
276
227
 
@@ -290,9 +241,8 @@ const tallyMutants = (files: Record<string, unknown>): Tally => {
290
241
  tally.killed++;
291
242
  continue;
292
243
  }
293
- // Anything that is neither detected nor undetected never got a verdict — it would not compile, or the
294
- // configuration ignored it. Counting it either way would move the score for a reason that has nothing
295
- // to do with the tests.
244
+ // Neither detected nor undetected got a verdict; it didn't compile or was ignored, and doesn't move the
245
+ // score.
296
246
  if (!UNDETECTED.has(status)) {
297
247
  tally.inconclusive++;
298
248
  continue;
@@ -306,16 +256,14 @@ const tallyMutants = (files: Record<string, unknown>): Tally => {
306
256
 
307
257
  const parseMutation = (stdout: string): ProbeFacts | undefined => {
308
258
  const files = asObject(stdout)?.[`files`];
309
- // No `files` key at all means this is not a mutation report. An EMPTY one is a real answer (nothing was
310
- // mutated) and a missing one is a parse failure, and the runner has to be able to tell them apart.
259
+ // Missing `files` means this isn't a mutation report; an empty one is honest (nothing was mutated).
311
260
  if (typeof files !== `object` || files === null || Array.isArray(files)) {
312
261
  return undefined;
313
262
  }
314
263
  const tally = tallyMutants(files as Record<string, unknown>);
315
264
  const valid = tally.killed + tally.survived;
316
265
  const mutation: MutationScore = {
317
- // Nothing to mutate scores 100 rather than NaN: there is no undetected fault in it, which is the honest
318
- // reading and the one that keeps the chore quiet instead of dividing by zero.
266
+ // Nothing to mutate scores 100, not NaN: no undetected fault exists, and it avoids dividing by zero.
319
267
  score: valid === 0 ? 100 : Math.round((tally.killed / valid) * 100),
320
268
  killed: tally.killed,
321
269
  survived: tally.survived,
@@ -325,35 +273,20 @@ const parseMutation = (stdout: string): ProbeFacts | undefined => {
325
273
  return { id: `mutation`, mutation };
326
274
  };
327
275
 
328
- /* THE UI SWEEP. The only probe here whose command is COMPOSED rather than written out, because its subject is a
329
- * table (stack.ts) that will grow and a hand-written command would be a second copy of it going stale.
330
- *
331
- * Everything it emits is a labelled, tab-separated line, and the first line is always the bare marker `UI`. That
332
- * marker is the whole reason this parser can tell "the sweep ran and this repository is clean" from "the sweep
333
- * never ran": every other line is optional, so without it an empty stdout and a spotless codebase are the same
334
- * string, and reporting the second when it was the first is the one thing probes.ts exists to prevent. */
276
+ // First output line is always literal marker `UI`: distinguishes a clean sweep from one that never ran.
335
277
  const UI_MARKER = `UI`;
336
- // Caps, applied after `sort` so truncation is alphabetical and therefore identical between runs, an unsorted
337
- // truncation would mint a new digest on every sweep and badge forever. What is dropped is genuinely dropped: a
338
- // component past the cap cannot join a family, and the chore says so rather than implying it saw everything.
278
+ // Caps apply after `sort`: truncation is alphabetical and stable between runs; anything past the cap is dropped.
339
279
  const COMPONENT_LIMIT = 2000;
340
280
  const RULE_FILE_LIMIT = 500;
341
281
 
342
- /* THE `.` IS LOAD-BEARING, and leaving it off cost this probe every finding it will ever have. Given no path,
343
- * ripgrep searches the tree only when stdin is a TTY, otherwise it reads STDIN, which is exactly how the runner
344
- * spawns a probe. The sweep therefore ran, exited 0, printed its marker and matched nothing, in every repository,
345
- * forever: the precise failure the marker line was introduced to make impossible, arriving through the one door it
346
- * does not cover. It reproduces from Node and not from an interactive shell, which is why it survived being read.
347
- *
348
- * The prefix that comes back with it (`./src/Button.vue`) is normalised away at the parse, so one spelling of a
349
- * path reaches the chores no matter which tool produced it. */
282
+ // Required: without a path, ripgrep reads stdin instead of the tree when run non-interactively, as here.
350
283
  const SCAN_ROOT = `.`;
351
284
 
352
285
  const globArgs = (globs: readonly string[]): string =>
353
286
  [...[...globs, ...SCAN_IGNORES].map((glob) => `-g '${glob}'`), WORKSPACE_ROOT_RG_EXCLUDE_ARG].join(` `);
354
287
 
355
- // `path:count` from `rg --count-matches`, normalised. Split at the LAST colon: a path may contain one, a count is
356
- // always the digits at the end.
288
+ // `path:count` from `rg --count-matches`; splits at the last colon since a path may contain one but the count is always
289
+ // trailing digits.
357
290
  const splitCount = (text: string): { path: string; count: number } | undefined => {
358
291
  const at = text.lastIndexOf(`:`);
359
292
  if (at <= 0) {
@@ -363,10 +296,8 @@ const splitCount = (text: string): { path: string; count: number } | undefined =
363
296
  return Number.isNaN(count) || count <= 0 ? undefined : { path: normalizePath(text.slice(0, at)), count };
364
297
  };
365
298
 
366
- /* An idiom's line is a PATH AND NOTHING ELSE, which is what lets one line shape carry both kinds of rule. A
367
- * present rule asks ripgrep which files match (`-l`); an absent one asks which files do not (`--files-without-
368
- * match`), and neither has a count to report. Nothing downstream ever wanted one: a file is on the old idiom or
369
- * it is not, and how many times it says so within itself is not a fact anyone would act on differently. */
299
+ // Emits a bare path per match: `-l` for a present rule, `--files-without-match` for an absent one; no count is ever
300
+ // needed downstream.
370
301
  const idiomCommand = (rule: IdiomRule): string =>
371
302
  `rg --no-messages ${rule.absent === undefined ? `-l` : `--files-without-match`} -e '${rule.pattern}' ${globArgs(rule.globs)} ${SCAN_ROOT} 2>/dev/null ` +
372
303
  `| sort | head -n ${RULE_FILE_LIMIT} | awk '{print "IDIOM\\t${rule.id}\\t" $0}'`;
@@ -378,8 +309,7 @@ const scanCommand = (): string =>
378
309
  `rg --no-messages --count-matches -e '${BYPASS_PATTERN}' ${globArgs(MARKUP_GLOBS)} ${SCAN_ROOT} 2>/dev/null ` +
379
310
  `| sort | head -n ${RULE_FILE_LIMIT} | awk '{print "BYPASS\\t" $0}'`,
380
311
  ...IDIOM_RULES.map(idiomCommand),
381
- // Every rg above exits 1 when it matches nothing, which is the healthy case and must not read as a broken
382
- // command. The runner judges by the parse, but leaving the script's own status at 1 would be a lie.
312
+ // Resets exit status to 0: an rg above exiting 1 (no matches) is the healthy case, not a broken command.
383
313
  `true`,
384
314
  ].join(`; `);
385
315
 
@@ -411,13 +341,10 @@ const parseUi = (stdout: string): ProbeFacts | undefined => {
411
341
  return { id: `ui`, scan };
412
342
  };
413
343
 
414
- /* THE BUILD OUTPUT, measured where it already is. See BundleSchema for why this never runs the build; the
415
- * consequence here is that `available` is a question about the filesystem rather than about the toolchain, and a
416
- * repository whose only builds happen in CI reports `unavailable` rather than a wrong number. */
344
+ // Checks disk, not the toolchain: a CI-only build reports unavailable, not a wrong number.
417
345
  const BUILD_DIRS = [`dist`, `build`, `out`, `public/build`];
418
346
  const BUNDLE_MARKER = `DIR`;
419
- // Enough of the ranking to see the shape of a build. Past this the assets are the long tail of lazy chunks, and
420
- // carrying four hundred of them on a route the rail badge polls would cost more than the finding is worth.
347
+ // Ranking cutoff; past this are long-tail lazy chunks not worth the badge route's cost to carry.
421
348
  const ASSET_LIMIT = 40;
422
349
 
423
350
  const bundleCommand = (): string =>
@@ -426,9 +353,8 @@ const bundleCommand = (): string =>
426
353
  `for d in ${BUILD_DIRS.join(` `)}; do if [ -d "$d" ]; then dir="$d"; break; fi; done`,
427
354
  `[ -n "$dir" ] || exit 0`,
428
355
  `printf '${BUNDLE_MARKER}\\t%s\\n' "$dir"`,
429
- // `-exec ... {} +` rather than a `for` over command substitution: a hashed asset name will not contain a
430
- // space, but a build that copies user content into the output can, and a probe is not the place to find
431
- // out. Sorted by raw bytes so the head is the ranking rather than whatever order the walk returned.
356
+ // `-exec ... {} +`, not a `for` loop: an asset path can contain a space; sorted by bytes so head is the
357
+ // ranking.
432
358
  `find "$dir" -type f \\( -name '*.js' -o -name '*.mjs' -o -name '*.cjs' -o -name '*.css' \\) ` +
433
359
  `-exec sh -c 'for f; do printf "ASSET\\t%s\\t%s\\t%s\\n" "$(wc -c <"$f")" "$(gzip -c "$f" | wc -c)" "$f"; done' _ {} + ` +
434
360
  `2>/dev/null | sort -k2 -rn | head -n ${ASSET_LIMIT}`,
@@ -455,9 +381,7 @@ const parseBundle = (stdout: string): ProbeFacts | undefined => {
455
381
  }
456
382
  const bundle: Bundle = {
457
383
  dir: dirLine.slice(BUNDLE_MARKER.length + 1),
458
- // Of the assets CARRIED, which is the top of the ranking rather than the whole build. The chore says so
459
- // when it quotes the number: a total that silently excluded the tail would be the more misleading of the
460
- // two, and re-walking the tree to sum it would double the probe's cost for a figure nobody splits on.
384
+ // Sum of the assets carried (the ranking), not the whole build; avoids a second walk to total the rest.
461
385
  totalBytes: assets.reduce((sum, asset) => sum + asset.bytes, 0),
462
386
  totalGzip: assets.reduce((sum, asset) => sum + asset.gzip, 0),
463
387
  assets,
@@ -465,12 +389,9 @@ const parseBundle = (stdout: string): ProbeFacts | undefined => {
465
389
  return { id: `bundle`, bundle };
466
390
  };
467
391
 
468
- // Where the tier-2 tools leave their reports. Under /tmp because they are inputs to a parse that happens
469
- // immediately after, never something to keep, the cached ProbeResult is the artefact that survives. The same
470
- // path the scheduled form of this chore uses (chores.ts), so a workspace running both keeps one copy.
392
+ // jscpd report dir under /tmp, read immediately then discarded; same path chores.ts uses.
471
393
  const JSCPD_DIR = `/tmp/intentic-chore-jscpd`;
472
- // Where Stryker's json reporter writes, which is its own default and not configurable per run on the CLI. Read
473
- // from the repo directory the probe runs in, like jscpd's report above.
394
+ // Stryker's own default json-report path, not configurable per run; read from the repo dir the probe runs in.
474
395
  const MUTATION_REPORT = `reports/mutation/mutation.json`;
475
396
 
476
397
  export const PROBES: readonly ProbeSpec[] = [
@@ -483,8 +404,8 @@ export const PROBES: readonly ProbeSpec[] = [
483
404
  timeoutMs: 5 * 60_000,
484
405
  available: `test -f package.json`,
485
406
  unavailable: `no package.json`,
486
- // `-r` so a monorepo reports every workspace package, not just the root's own handful. `|| true` because
487
- // pnpm exits non-zero exactly when it HAS findings, and the runner judges by whether the parse succeeded.
407
+ // `-r` reports every workspace package, not just root; `|| true` since pnpm exits non-zero when it has
408
+ // findings.
488
409
  command: `pnpm outdated -r --json 2>/dev/null || true`,
489
410
  parse: parseOutdated,
490
411
  },
@@ -495,8 +416,7 @@ export const PROBES: readonly ProbeSpec[] = [
495
416
  tier: 1,
496
417
  ttlMs: DAY_MS,
497
418
  timeoutMs: 5 * 60_000,
498
- // A lockfile, not a package.json: auditing resolves the actual installed tree, and without one pnpm
499
- // reports against nothing.
419
+ // A lockfile, not package.json: audit resolves the installed tree, and without one pnpm has nothing to check.
500
420
  available: `test -f pnpm-lock.yaml || test -f package-lock.json`,
501
421
  unavailable: `no lockfile`,
502
422
  command: `pnpm audit --json 2>/dev/null || true`,
@@ -509,8 +429,7 @@ export const PROBES: readonly ProbeSpec[] = [
509
429
  tier: 2,
510
430
  ttlMs: 7 * DAY_MS,
511
431
  timeoutMs: 15 * 60_000,
512
- // The repo's OWN knip, never a floating one: `pnpm dlx knip` would download a version that disagrees with
513
- // the repo's knip.json about what counts as an entry point, and then report its whole public API as dead.
432
+ // The repo's own knip, never a floating one: a mismatched version can call its own live API dead code.
514
433
  available: `pnpm exec knip --version >/dev/null 2>&1`,
515
434
  unavailable: `knip is not a devDependency`,
516
435
  command: `pnpm exec knip --reporter json --no-exit-code 2>/dev/null || true`,
@@ -525,8 +444,7 @@ export const PROBES: readonly ProbeSpec[] = [
525
444
  timeoutMs: 20 * 60_000,
526
445
  available: `test -f package.json`,
527
446
  unavailable: `no package.json`,
528
- // `--threshold 100` so jscpd never fails the command on its own opinion of what is too much duplication,
529
- // that judgement is the chore's, made from the percentage, not the tool's exit code.
447
+ // `--threshold 100` stops jscpd failing on its own opinion; the chore judges duplication from the percentage.
530
448
  command:
531
449
  `pnpm dlx jscpd ${WORKSPACE_ROOT_JSCPD_EXCLUDE_ARG} --reporters json --output ${JSCPD_DIR} --min-lines 12 --threshold 100 . >/dev/null 2>&1; ` +
532
450
  `cat ${JSCPD_DIR}/jscpd-report.json 2>/dev/null`,
@@ -536,31 +454,14 @@ export const PROBES: readonly ProbeSpec[] = [
536
454
  id: `mutation`,
537
455
  title: `Test strength`,
538
456
  measures: `how much of the code could break with every test still green`,
539
- /* THE MOST EXPENSIVE PROBE HERE, and the tier does not really capture it: this runs the suite once per
540
- * injected fault. `--incremental` is what makes it liveable — Stryker keeps a result file and re-runs only
541
- * the mutants whose code or tests changed, so the first run costs what a full run costs and every one
542
- * after it costs the diff. The monthly TTL is set against the FIRST run, not the incremental ones.
543
- *
544
- * Opt-in per repository, by the presence of a `stryker.conf.json`, and that is the load-bearing part of
545
- * the design rather than a convenience. This monorepo has 65 packages with their own vitest configs and no
546
- * root suite; mutating all of them unasked would be hours of CPU nobody agreed to spend. A repo says which
547
- * code is worth the measurement by writing that file, which is also where `mutate` narrows the scope. */
457
+ // `--incremental` reruns only changed mutants; the 30-day TTL targets that costly first full run.
548
458
  tier: 2,
549
459
  ttlMs: 30 * DAY_MS,
550
460
  timeoutMs: 90 * 60_000,
551
- /* Two conditions, and the config is the one that matters: Stryker being installed says the tool COULD run,
552
- * the config says somebody decided it should. Without the second this would report "unavailable" on every
553
- * repo that merely shares this monorepo's lockfile.
554
- *
555
- * The repo's OWN Stryker, never a floating one, for a reason measured rather than assumed: under
556
- * `pnpm dlx` the plugin loader resolves from the working directory and finds nothing — "Cannot find
557
- * TestRunner plugin \"vitest\". In fact, no TestRunner plugins were loaded" — and the runner has to agree
558
- * with the vitest the repo actually runs. Same argument as knip above. */
461
+ // Config presence means the repo opted in, not just having Stryker; must use the repo's own stryker, not `dlx`.
559
462
  available: `{ test -f stryker.conf.mjs || test -f stryker.conf.json; } && pnpm exec stryker --version >/dev/null 2>&1`,
560
463
  unavailable: `no stryker config in this repo`,
561
- // `|| true` for the same reason the others carry it: Stryker exits non-zero when the score is under its
562
- // own threshold, which is an opinion about the number, not a failure to produce one. The judgement is the
563
- // chore's, made from the score, and the runner decides by whether the parser recognised the report.
464
+ // `|| true`: Stryker exits non-zero under its own score threshold; the parser decides if the run was valid.
564
465
  command: `pnpm exec stryker run --reporters json --incremental >/dev/null 2>&1 || true; cat ${MUTATION_REPORT} 2>/dev/null`,
565
466
  parse: parseMutation,
566
467
  },
@@ -568,15 +469,12 @@ export const PROBES: readonly ProbeSpec[] = [
568
469
  id: `ui`,
569
470
  title: `Front-end source`,
570
471
  measures: `components, hard-coded styles and idioms the framework has replaced`,
571
- /* Tier 1 despite reading the whole tree, and the placement is a judgement rather than an oversight. The
572
- * tier is about COST: this is a dozen ripgrep walks, seconds on a large monorepo, against knip
573
- * type-checking the tree and jscpd tokenizing every file for minutes. A weekly TTL would also make it the
574
- * wrong shape, its findings move whenever someone writes a component, which is daily. */
472
+ // Tier 1 despite scanning the tree: ripgrep walks cost seconds, and findings move daily as components change.
575
473
  tier: 1,
576
474
  ttlMs: DAY_MS,
577
475
  timeoutMs: 5 * 60_000,
578
- // Any manifest in the repo declaring a UI framework or Tailwind, not just the root's, a monorepo keeps
579
- // React in the app package and the root manifest is a handful of build tools.
476
+ // Any manifest declaring a framework or Tailwind, not just root's; monorepos often keep React in an app
477
+ // package.
580
478
  available:
581
479
  `rg -l --no-messages -g '**/package.json' -g '!**/node_modules/**' ${WORKSPACE_ROOT_RG_EXCLUDE_ARG} ` +
582
480
  `-e '[\\x22](${[...UI_FRAMEWORKS.flatMap((framework) => framework.packages), ...TAILWIND_PACKAGES].join(`|`)})[\\x22]\\s*:' . >/dev/null`,
@@ -591,12 +489,9 @@ export const PROBES: readonly ProbeSpec[] = [
591
489
  tier: 1,
592
490
  ttlMs: DAY_MS,
593
491
  timeoutMs: 5 * 60_000,
594
- // A build directory that actually contains something a browser would download. `-d` alone would pass on
595
- // the empty `dist/` a cleaned checkout leaves behind, and the measurement would report a zero-byte bundle
596
- // as a fact about the application.
492
+ // Must contain an actual asset file: `-d` alone would pass an empty `dist/` left by a cleaned checkout.
597
493
  available: `find ${BUILD_DIRS.join(` `)} -maxdepth 4 -type f \\( -name '*.js' -o -name '*.mjs' -o -name '*.css' \\) 2>/dev/null | head -n 1 | grep -q .`,
598
- // Says what is missing AND that this never builds, because the obvious reading of "no build output" is
599
- // that we tried and it failed. The owner running their own build once is the whole fix.
494
+ // States it never builds, only reads the last one: "no output" would otherwise read as "the build failed".
600
495
  unavailable: `no build output on disk, this reads the last build, it never runs one`,
601
496
  command: bundleCommand(),
602
497
  parse: parseBundle,
@@ -1,19 +1,9 @@
1
- /* HOW WE ASK. Every prompt this workspace generates from a measurement, a hotspot's refactor, a chore's sweep,
2
- * has the same four parts, in the same order, for the same reasons:
3
- *
4
- * subject the one line that says what is being worked on. First, because a model that reads the rationale
5
- * before the target starts planning against a subject it has not been told yet.
6
- * why the NUMBERS, quoted exactly as the panel shows them, then what they mean. Exact so the agent and
7
- * the person are arguing about one set of facts; the agent can and should recount them.
8
- * goal what shape to move towards, never a design. Whoever generated this prompt has not read the code,
9
- * so a prescribed solution from out here is a guess wearing an instruction's clothes.
10
- * done falsifiable, and checkable by the agent itself. The same resident engine that produced the
11
- * measurement answers `iq` in the agent's own worktree, so "run it again and see" is available and
12
- * "I have finished" is not something it has to be taken at its word on.
13
- *
14
- * The invariants sit between goal and done because they are the constraints on HOW, and they are stated in full
15
- * every time rather than assumed. Each one is a specific way the turn fails without it, they are here because
16
- * they were each learned from a diff nobody could review. */
1
+ // Every generated prompt has four parts, in this order:
2
+ // subject — what is being worked on.
3
+ // why — the measurement's numbers, quoted exactly, then what they mean.
4
+ // goal — a direction to move in, not a prescribed design.
5
+ // done — falsifiable; checkable via `iq` in the agent's own worktree.
6
+ // Invariants sit between goal and done: constraints on how, restated in full each time.
17
7
 
18
8
  export interface Ask {
19
9
  readonly subject: string;
@@ -27,38 +17,24 @@ export interface Ask {
27
17
  export const composeAsk = ({ subject, why, diagnosis, goal, invariants, done }: Ask): string =>
28
18
  [subject, `Why: ${why} ${diagnosis}`, goal, `${invariants} ${done}`].join(`\n\n`);
29
19
 
30
- /* Said to every turn a TOOL woke, and the reason the maintenance surface can point agents at tool output at all.
31
- * A tool reporting N findings is not reporting N problems: knip is confidently wrong about anything reachable
32
- * from outside the repo, jscpd counts generated files, an advisory in a build-time dependency is not the same
33
- * risk as one in a running service. A chore that mechanically actions the whole list is worse than no chore,
34
- * it makes noisy, confident, wrong changes at three in the morning, and the next person has to review a diff
35
- * whose author had no opinion about it. */
20
+ // Findings are claims to verify, not tasks to execute; acting on all of them is worse than acting on none.
36
21
  export const TRIAGE_NOTE =
37
22
  `The measurement woke you; it did not decide anything. Read the repository before you touch it, and treat every ` +
38
23
  `finding as a claim to verify rather than a task to execute. If a finding is wrong, say why in one line and leave ` +
39
24
  `it. A run that verifies ten and fixes two is a good run.`;
40
25
 
41
- /* The invariants for a turn that CHANGES things. Whatever it does lands as uncommitted work in the owner's
42
- * workspace, so it is reviewed as one diff by someone who did not watch it happen, which is what every clause
43
- * here is protecting.
44
- *
45
- * "Separately explainable" is doing the most work: a chore that fixes its findings AND tidies what it passed on
46
- * the way produces a diff whose reviewer cannot tell which changes were the point. */
26
+ // Constraints for a change-making turn: every change must be explainable on its own line of the summary.
47
27
  export const CHORE_INVARIANTS =
48
28
  `Keep it mechanical and separately explainable: nothing lands that you could not justify on its own line of the ` +
49
29
  `summary. Do not reformat, rename or "while I was in here" anything the finding did not name. Run the repository's ` +
50
30
  `own type-check and tests before you finish, and if you cannot make them pass, leave the change out and say so.`;
51
31
 
52
- // The invariants for a turn that only LOOKS. Separate from the above rather than a flag on it, because the failure
53
- // mode is the opposite one: a report-stance chore that quietly starts editing is the single most surprising thing
54
- // this surface could do, and it has to be forbidden in words rather than by omission.
32
+ // Constraints for a look-only turn, stated explicitly so a report chore never quietly starts editing.
55
33
  export const REPORT_INVARIANTS =
56
34
  `Change nothing. This is a survey: the output is your findings, cited file:line, and a recommendation the owner ` +
57
35
  `can act on or dismiss. Where you would propose an edit, describe it and where it would go instead of making it.`;
58
36
 
59
- /* The invariants for a turn refactoring ONE FILE, as the codebase-health panel's rows ask for. Distinct from the
60
- * chore ones because the scope of changes is the thing at stake: named as a scope rather than "only this file",
61
- * since half those archetypes ask for new files and must not read as forbidding them. */
37
+ // Constraints for a one-file refactor turn; scope covers whatever it splits into, not just this one file.
62
38
  export const REFACTOR_INVARIANTS =
63
39
  `Read it first. Behaviour stays identical. Changes affect only this file, whatever it splits into, and the ` +
64
40
  `importers that must follow. Leave no re-export shims behind.`;