agent-nuvira 3.3.13 → 3.3.14

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 (387) hide show
  1. package/README.md +67 -1
  2. package/dist/agents/agents/planner.d.ts.map +1 -1
  3. package/dist/agents/agents/planner.js +9 -0
  4. package/dist/agents/agents/planner.js.map +1 -1
  5. package/dist/agents/orchestrator.d.ts +31 -0
  6. package/dist/agents/orchestrator.d.ts.map +1 -1
  7. package/dist/agents/orchestrator.js +74 -126
  8. package/dist/agents/orchestrator.js.map +1 -1
  9. package/dist/cli/chat.d.ts +89 -0
  10. package/dist/cli/chat.d.ts.map +1 -1
  11. package/dist/cli/chat.js +765 -33
  12. package/dist/cli/chat.js.map +1 -1
  13. package/dist/cli/cli-program.d.ts.map +1 -1
  14. package/dist/cli/cli-program.js +12 -0
  15. package/dist/cli/cli-program.js.map +1 -1
  16. package/dist/cli/config.d.ts +12 -0
  17. package/dist/cli/config.d.ts.map +1 -1
  18. package/dist/cli/config.js +86 -0
  19. package/dist/cli/config.js.map +1 -1
  20. package/dist/cli/decisions.d.ts +28 -0
  21. package/dist/cli/decisions.d.ts.map +1 -0
  22. package/dist/cli/decisions.js +140 -0
  23. package/dist/cli/decisions.js.map +1 -0
  24. package/dist/cli/doctor.d.ts +6 -0
  25. package/dist/cli/doctor.d.ts.map +1 -1
  26. package/dist/cli/doctor.js +46 -0
  27. package/dist/cli/doctor.js.map +1 -1
  28. package/dist/cli/failover-runner.d.ts.map +1 -1
  29. package/dist/cli/failover-runner.js +19 -1
  30. package/dist/cli/failover-runner.js.map +1 -1
  31. package/dist/cli/feedback.d.ts.map +1 -1
  32. package/dist/cli/feedback.js +5 -1
  33. package/dist/cli/feedback.js.map +1 -1
  34. package/dist/cli/hooks.d.ts +30 -0
  35. package/dist/cli/hooks.d.ts.map +1 -0
  36. package/dist/cli/hooks.js +224 -0
  37. package/dist/cli/hooks.js.map +1 -0
  38. package/dist/cli/knowledge.d.ts +9 -1
  39. package/dist/cli/knowledge.d.ts.map +1 -1
  40. package/dist/cli/knowledge.js +93 -2
  41. package/dist/cli/knowledge.js.map +1 -1
  42. package/dist/cli/loop-executor.d.ts.map +1 -1
  43. package/dist/cli/loop-executor.js +47 -12
  44. package/dist/cli/loop-executor.js.map +1 -1
  45. package/dist/cli/model.d.ts +20 -0
  46. package/dist/cli/model.d.ts.map +1 -1
  47. package/dist/cli/model.js +294 -14
  48. package/dist/cli/model.js.map +1 -1
  49. package/dist/cli/rate.d.ts +78 -0
  50. package/dist/cli/rate.d.ts.map +1 -0
  51. package/dist/cli/rate.js +294 -0
  52. package/dist/cli/rate.js.map +1 -0
  53. package/dist/config/process-env.d.ts.map +1 -1
  54. package/dist/config/process-env.js +10 -0
  55. package/dist/config/process-env.js.map +1 -1
  56. package/dist/enterprise/vault.d.ts.map +1 -1
  57. package/dist/enterprise/vault.js +5 -21
  58. package/dist/enterprise/vault.js.map +1 -1
  59. package/dist/gateway/hook-contract.d.ts +33 -0
  60. package/dist/gateway/hook-contract.d.ts.map +1 -1
  61. package/dist/gateway/hook-contract.js +97 -0
  62. package/dist/gateway/hook-contract.js.map +1 -1
  63. package/dist/inference/gemini-adapter.d.ts.map +1 -1
  64. package/dist/inference/gemini-adapter.js +4 -0
  65. package/dist/inference/gemini-adapter.js.map +1 -1
  66. package/dist/inference/interface.d.ts +37 -0
  67. package/dist/inference/interface.d.ts.map +1 -1
  68. package/dist/inference/native-tools.d.ts +16 -1
  69. package/dist/inference/native-tools.d.ts.map +1 -1
  70. package/dist/inference/native-tools.js +34 -10
  71. package/dist/inference/native-tools.js.map +1 -1
  72. package/dist/inference/route-resolver.d.ts +30 -0
  73. package/dist/inference/route-resolver.d.ts.map +1 -1
  74. package/dist/inference/route-resolver.js +158 -1
  75. package/dist/inference/route-resolver.js.map +1 -1
  76. package/dist/inference/tools.d.ts +16 -1
  77. package/dist/inference/tools.d.ts.map +1 -1
  78. package/dist/inference/tools.js +51 -18
  79. package/dist/inference/tools.js.map +1 -1
  80. package/dist/learning/acceptance-model.d.ts +247 -0
  81. package/dist/learning/acceptance-model.d.ts.map +1 -0
  82. package/dist/learning/acceptance-model.js +708 -0
  83. package/dist/learning/acceptance-model.js.map +1 -0
  84. package/dist/learning/auto-router.d.ts +68 -24
  85. package/dist/learning/auto-router.d.ts.map +1 -1
  86. package/dist/learning/auto-router.js +301 -96
  87. package/dist/learning/auto-router.js.map +1 -1
  88. package/dist/learning/autonomy-policy.d.ts +12 -16
  89. package/dist/learning/autonomy-policy.d.ts.map +1 -1
  90. package/dist/learning/autonomy-policy.js +50 -48
  91. package/dist/learning/autonomy-policy.js.map +1 -1
  92. package/dist/learning/behavioural-labels.d.ts +86 -0
  93. package/dist/learning/behavioural-labels.d.ts.map +1 -0
  94. package/dist/learning/behavioural-labels.js +166 -0
  95. package/dist/learning/behavioural-labels.js.map +1 -0
  96. package/dist/learning/capability-evidence.d.ts +167 -0
  97. package/dist/learning/capability-evidence.d.ts.map +1 -0
  98. package/dist/learning/capability-evidence.js +210 -0
  99. package/dist/learning/capability-evidence.js.map +1 -0
  100. package/dist/learning/capability-readiness.d.ts +64 -0
  101. package/dist/learning/capability-readiness.d.ts.map +1 -0
  102. package/dist/learning/capability-readiness.js +74 -0
  103. package/dist/learning/capability-readiness.js.map +1 -0
  104. package/dist/learning/capability-types.d.ts +169 -0
  105. package/dist/learning/capability-types.d.ts.map +1 -0
  106. package/dist/learning/capability-types.js +20 -0
  107. package/dist/learning/capability-types.js.map +1 -0
  108. package/dist/learning/catalog-feed.d.ts +89 -0
  109. package/dist/learning/catalog-feed.d.ts.map +1 -0
  110. package/dist/learning/catalog-feed.js +211 -0
  111. package/dist/learning/catalog-feed.js.map +1 -0
  112. package/dist/learning/cli-intent-effects.d.ts +60 -0
  113. package/dist/learning/cli-intent-effects.d.ts.map +1 -0
  114. package/dist/learning/cli-intent-effects.js +153 -0
  115. package/dist/learning/cli-intent-effects.js.map +1 -0
  116. package/dist/learning/command-adaptation.d.ts +41 -0
  117. package/dist/learning/command-adaptation.d.ts.map +1 -0
  118. package/dist/learning/command-adaptation.js +122 -0
  119. package/dist/learning/command-adaptation.js.map +1 -0
  120. package/dist/learning/consent-picture.d.ts +42 -0
  121. package/dist/learning/consent-picture.d.ts.map +1 -0
  122. package/dist/learning/consent-picture.js +53 -0
  123. package/dist/learning/consent-picture.js.map +1 -0
  124. package/dist/learning/context-budget.d.ts +37 -6
  125. package/dist/learning/context-budget.d.ts.map +1 -1
  126. package/dist/learning/context-budget.js +38 -9
  127. package/dist/learning/context-budget.js.map +1 -1
  128. package/dist/learning/decision-log.d.ts +114 -0
  129. package/dist/learning/decision-log.d.ts.map +1 -0
  130. package/dist/learning/decision-log.js +296 -0
  131. package/dist/learning/decision-log.js.map +1 -0
  132. package/dist/learning/deliverable-class.d.ts.map +1 -1
  133. package/dist/learning/deliverable-class.js +19 -0
  134. package/dist/learning/deliverable-class.js.map +1 -1
  135. package/dist/learning/deliverable-corpus.d.ts +117 -0
  136. package/dist/learning/deliverable-corpus.d.ts.map +1 -0
  137. package/dist/learning/deliverable-corpus.js +176 -0
  138. package/dist/learning/deliverable-corpus.js.map +1 -0
  139. package/dist/learning/error-repair.d.ts +22 -1
  140. package/dist/learning/error-repair.d.ts.map +1 -1
  141. package/dist/learning/error-repair.js +37 -0
  142. package/dist/learning/error-repair.js.map +1 -1
  143. package/dist/learning/exhaustion-report.d.ts +136 -0
  144. package/dist/learning/exhaustion-report.d.ts.map +1 -0
  145. package/dist/learning/exhaustion-report.js +239 -0
  146. package/dist/learning/exhaustion-report.js.map +1 -0
  147. package/dist/learning/failure-bookkeeping.d.ts +16 -0
  148. package/dist/learning/failure-bookkeeping.d.ts.map +1 -1
  149. package/dist/learning/failure-bookkeeping.js +51 -5
  150. package/dist/learning/failure-bookkeeping.js.map +1 -1
  151. package/dist/learning/gate-friction.d.ts +39 -0
  152. package/dist/learning/gate-friction.d.ts.map +1 -0
  153. package/dist/learning/gate-friction.js +91 -0
  154. package/dist/learning/gate-friction.js.map +1 -0
  155. package/dist/learning/harness-narration.d.ts +34 -0
  156. package/dist/learning/harness-narration.d.ts.map +1 -0
  157. package/dist/learning/harness-narration.js +58 -0
  158. package/dist/learning/harness-narration.js.map +1 -0
  159. package/dist/learning/hub-skill-catalog.d.ts.map +1 -1
  160. package/dist/learning/hub-skill-catalog.js +1 -2
  161. package/dist/learning/hub-skill-catalog.js.map +1 -1
  162. package/dist/learning/hybrid-router.d.ts +65 -0
  163. package/dist/learning/hybrid-router.d.ts.map +1 -1
  164. package/dist/learning/hybrid-router.js +186 -0
  165. package/dist/learning/hybrid-router.js.map +1 -1
  166. package/dist/learning/knowledge-base.d.ts +229 -3
  167. package/dist/learning/knowledge-base.d.ts.map +1 -1
  168. package/dist/learning/knowledge-base.js +593 -24
  169. package/dist/learning/knowledge-base.js.map +1 -1
  170. package/dist/learning/knowledge-eval.d.ts +171 -0
  171. package/dist/learning/knowledge-eval.d.ts.map +1 -0
  172. package/dist/learning/knowledge-eval.js +196 -0
  173. package/dist/learning/knowledge-eval.js.map +1 -0
  174. package/dist/learning/knowledge-turn.d.ts +92 -0
  175. package/dist/learning/knowledge-turn.d.ts.map +1 -0
  176. package/dist/learning/knowledge-turn.js +190 -0
  177. package/dist/learning/knowledge-turn.js.map +1 -0
  178. package/dist/learning/learned-commands.d.ts +64 -0
  179. package/dist/learning/learned-commands.d.ts.map +1 -0
  180. package/dist/learning/learned-commands.js +108 -0
  181. package/dist/learning/learned-commands.js.map +1 -0
  182. package/dist/learning/lexical-search.d.ts +50 -0
  183. package/dist/learning/lexical-search.d.ts.map +1 -0
  184. package/dist/learning/lexical-search.js +111 -0
  185. package/dist/learning/lexical-search.js.map +1 -0
  186. package/dist/learning/machine-facts.d.ts +71 -0
  187. package/dist/learning/machine-facts.d.ts.map +1 -0
  188. package/dist/learning/machine-facts.js +164 -0
  189. package/dist/learning/machine-facts.js.map +1 -0
  190. package/dist/learning/markdown-outline.d.ts +73 -0
  191. package/dist/learning/markdown-outline.d.ts.map +1 -0
  192. package/dist/learning/markdown-outline.js +136 -0
  193. package/dist/learning/markdown-outline.js.map +1 -0
  194. package/dist/learning/model-first-router.d.ts +33 -1
  195. package/dist/learning/model-first-router.d.ts.map +1 -1
  196. package/dist/learning/model-first-router.js +123 -9
  197. package/dist/learning/model-first-router.js.map +1 -1
  198. package/dist/learning/model-identity.d.ts +80 -0
  199. package/dist/learning/model-identity.d.ts.map +1 -0
  200. package/dist/learning/model-identity.js +115 -0
  201. package/dist/learning/model-identity.js.map +1 -0
  202. package/dist/learning/model-registry.d.ts +141 -2
  203. package/dist/learning/model-registry.d.ts.map +1 -1
  204. package/dist/learning/model-registry.js +324 -38
  205. package/dist/learning/model-registry.js.map +1 -1
  206. package/dist/learning/model-scoring.d.ts.map +1 -1
  207. package/dist/learning/model-scoring.js +8 -1
  208. package/dist/learning/model-scoring.js.map +1 -1
  209. package/dist/learning/model-selection.d.ts.map +1 -1
  210. package/dist/learning/model-selection.js +41 -0
  211. package/dist/learning/model-selection.js.map +1 -1
  212. package/dist/learning/outcome-observation.d.ts +49 -0
  213. package/dist/learning/outcome-observation.d.ts.map +1 -0
  214. package/dist/learning/outcome-observation.js +95 -0
  215. package/dist/learning/outcome-observation.js.map +1 -0
  216. package/dist/learning/pair-entitlement.d.ts +184 -0
  217. package/dist/learning/pair-entitlement.d.ts.map +1 -0
  218. package/dist/learning/pair-entitlement.js +214 -0
  219. package/dist/learning/pair-entitlement.js.map +1 -0
  220. package/dist/learning/provider-fallback.d.ts +23 -1
  221. package/dist/learning/provider-fallback.d.ts.map +1 -1
  222. package/dist/learning/provider-fallback.js +24 -0
  223. package/dist/learning/provider-fallback.js.map +1 -1
  224. package/dist/learning/reasoning-trace.d.ts +65 -1
  225. package/dist/learning/reasoning-trace.d.ts.map +1 -1
  226. package/dist/learning/reasoning-trace.js +123 -1
  227. package/dist/learning/reasoning-trace.js.map +1 -1
  228. package/dist/learning/requirement-probe.d.ts +55 -0
  229. package/dist/learning/requirement-probe.d.ts.map +1 -0
  230. package/dist/learning/requirement-probe.js +77 -0
  231. package/dist/learning/requirement-probe.js.map +1 -0
  232. package/dist/learning/resilient-call.d.ts +20 -1
  233. package/dist/learning/resilient-call.d.ts.map +1 -1
  234. package/dist/learning/resilient-call.js +42 -4
  235. package/dist/learning/resilient-call.js.map +1 -1
  236. package/dist/learning/response-usability.d.ts +85 -0
  237. package/dist/learning/response-usability.d.ts.map +1 -0
  238. package/dist/learning/response-usability.js +135 -0
  239. package/dist/learning/response-usability.js.map +1 -0
  240. package/dist/learning/router-bandit.d.ts +132 -0
  241. package/dist/learning/router-bandit.d.ts.map +1 -1
  242. package/dist/learning/router-bandit.js +253 -0
  243. package/dist/learning/router-bandit.js.map +1 -1
  244. package/dist/learning/routing-history.d.ts +41 -2
  245. package/dist/learning/routing-history.d.ts.map +1 -1
  246. package/dist/learning/routing-history.js.map +1 -1
  247. package/dist/learning/run-trace.d.ts +21 -0
  248. package/dist/learning/run-trace.d.ts.map +1 -1
  249. package/dist/learning/run-trace.js +38 -0
  250. package/dist/learning/run-trace.js.map +1 -1
  251. package/dist/learning/session-grant.d.ts +75 -0
  252. package/dist/learning/session-grant.d.ts.map +1 -0
  253. package/dist/learning/session-grant.js +112 -0
  254. package/dist/learning/session-grant.js.map +1 -0
  255. package/dist/learning/task-model-continuity.d.ts +73 -0
  256. package/dist/learning/task-model-continuity.d.ts.map +1 -0
  257. package/dist/learning/task-model-continuity.js +87 -0
  258. package/dist/learning/task-model-continuity.js.map +1 -0
  259. package/dist/learning/turn-feedback.d.ts +93 -0
  260. package/dist/learning/turn-feedback.d.ts.map +1 -0
  261. package/dist/learning/turn-feedback.js +127 -0
  262. package/dist/learning/turn-feedback.js.map +1 -0
  263. package/dist/learning/turn-report.d.ts +104 -2
  264. package/dist/learning/turn-report.d.ts.map +1 -1
  265. package/dist/learning/turn-report.js +161 -6
  266. package/dist/learning/turn-report.js.map +1 -1
  267. package/dist/learning/verdict-routing.d.ts +51 -0
  268. package/dist/learning/verdict-routing.d.ts.map +1 -0
  269. package/dist/learning/verdict-routing.js +122 -0
  270. package/dist/learning/verdict-routing.js.map +1 -0
  271. package/dist/mcp/client.d.ts.map +1 -1
  272. package/dist/mcp/client.js +5 -0
  273. package/dist/mcp/client.js.map +1 -1
  274. package/dist/mcp/manager.d.ts +10 -0
  275. package/dist/mcp/manager.d.ts.map +1 -1
  276. package/dist/mcp/manager.js +20 -0
  277. package/dist/mcp/manager.js.map +1 -1
  278. package/dist/mcp/mcp-discovery.d.ts +34 -0
  279. package/dist/mcp/mcp-discovery.d.ts.map +1 -0
  280. package/dist/mcp/mcp-discovery.js +71 -0
  281. package/dist/mcp/mcp-discovery.js.map +1 -0
  282. package/dist/mcp/mcp-schema-cache.d.ts +17 -0
  283. package/dist/mcp/mcp-schema-cache.d.ts.map +1 -1
  284. package/dist/mcp/mcp-schema-cache.js +47 -3
  285. package/dist/mcp/mcp-schema-cache.js.map +1 -1
  286. package/dist/mcp/types.d.ts +28 -0
  287. package/dist/mcp/types.d.ts.map +1 -1
  288. package/dist/mcp/types.js.map +1 -1
  289. package/dist/tools/ask-user.d.ts.map +1 -1
  290. package/dist/tools/ask-user.js +4 -0
  291. package/dist/tools/ask-user.js.map +1 -1
  292. package/dist/tools/capability-registry.d.ts +150 -0
  293. package/dist/tools/capability-registry.d.ts.map +1 -0
  294. package/dist/tools/capability-registry.js +400 -0
  295. package/dist/tools/capability-registry.js.map +1 -0
  296. package/dist/tools/child-agent-runtime.d.ts.map +1 -1
  297. package/dist/tools/child-agent-runtime.js +19 -5
  298. package/dist/tools/child-agent-runtime.js.map +1 -1
  299. package/dist/tools/coding-tools.d.ts +17 -5
  300. package/dist/tools/coding-tools.d.ts.map +1 -1
  301. package/dist/tools/coding-tools.js +80 -11
  302. package/dist/tools/coding-tools.js.map +1 -1
  303. package/dist/tools/command-memo.d.ts +116 -0
  304. package/dist/tools/command-memo.d.ts.map +1 -0
  305. package/dist/tools/command-memo.js +202 -0
  306. package/dist/tools/command-memo.js.map +1 -0
  307. package/dist/tools/git-tool.d.ts.map +1 -1
  308. package/dist/tools/git-tool.js +13 -3
  309. package/dist/tools/git-tool.js.map +1 -1
  310. package/dist/tools/harness-directive.d.ts +42 -0
  311. package/dist/tools/harness-directive.d.ts.map +1 -0
  312. package/dist/tools/harness-directive.js +45 -0
  313. package/dist/tools/harness-directive.js.map +1 -0
  314. package/dist/tools/loop-skill-hint.d.ts +74 -174
  315. package/dist/tools/loop-skill-hint.d.ts.map +1 -1
  316. package/dist/tools/loop-skill-hint.js +110 -536
  317. package/dist/tools/loop-skill-hint.js.map +1 -1
  318. package/dist/tools/mcp-client-tool.d.ts +2 -0
  319. package/dist/tools/mcp-client-tool.d.ts.map +1 -1
  320. package/dist/tools/mcp-client-tool.js +3 -0
  321. package/dist/tools/mcp-client-tool.js.map +1 -1
  322. package/dist/tools/modality/shared.d.ts +1 -4
  323. package/dist/tools/modality/shared.d.ts.map +1 -1
  324. package/dist/tools/modality/shared.js +7 -22
  325. package/dist/tools/modality/shared.js.map +1 -1
  326. package/dist/tools/plan-store.d.ts +20 -2
  327. package/dist/tools/plan-store.d.ts.map +1 -1
  328. package/dist/tools/plan-store.js +51 -7
  329. package/dist/tools/plan-store.js.map +1 -1
  330. package/dist/tools/registry.d.ts +76 -3
  331. package/dist/tools/registry.d.ts.map +1 -1
  332. package/dist/tools/registry.js +486 -26
  333. package/dist/tools/registry.js.map +1 -1
  334. package/dist/tools/remediation-ladder.d.ts.map +1 -1
  335. package/dist/tools/remediation-ladder.js +8 -0
  336. package/dist/tools/remediation-ladder.js.map +1 -1
  337. package/dist/tools/run-cli.d.ts.map +1 -1
  338. package/dist/tools/run-cli.js +29 -4
  339. package/dist/tools/run-cli.js.map +1 -1
  340. package/dist/tools/run-terminal.d.ts +11 -0
  341. package/dist/tools/run-terminal.d.ts.map +1 -1
  342. package/dist/tools/run-terminal.js +265 -10
  343. package/dist/tools/run-terminal.js.map +1 -1
  344. package/dist/tools/tool-loop.d.ts +321 -13
  345. package/dist/tools/tool-loop.d.ts.map +1 -1
  346. package/dist/tools/tool-loop.js +867 -66
  347. package/dist/tools/tool-loop.js.map +1 -1
  348. package/dist/utils/atomic-store.d.ts +53 -0
  349. package/dist/utils/atomic-store.d.ts.map +1 -0
  350. package/dist/utils/atomic-store.js +178 -0
  351. package/dist/utils/atomic-store.js.map +1 -0
  352. package/dist/utils/binary-probe.d.ts +25 -0
  353. package/dist/utils/binary-probe.d.ts.map +1 -0
  354. package/dist/utils/binary-probe.js +48 -0
  355. package/dist/utils/binary-probe.js.map +1 -0
  356. package/dist/utils/workspace-path.d.ts +50 -0
  357. package/dist/utils/workspace-path.d.ts.map +1 -0
  358. package/dist/utils/workspace-path.js +86 -0
  359. package/dist/utils/workspace-path.js.map +1 -0
  360. package/dist/web-dashboard/chat-console.d.ts +24 -0
  361. package/dist/web-dashboard/chat-console.d.ts.map +1 -1
  362. package/dist/web-dashboard/chat-console.js +38 -0
  363. package/dist/web-dashboard/chat-console.js.map +1 -1
  364. package/dist/web-dashboard/project-context.d.ts +27 -2
  365. package/dist/web-dashboard/project-context.d.ts.map +1 -1
  366. package/dist/web-dashboard/project-context.js +32 -2
  367. package/dist/web-dashboard/project-context.js.map +1 -1
  368. package/dist/web-dashboard/server.d.ts +11 -0
  369. package/dist/web-dashboard/server.d.ts.map +1 -1
  370. package/dist/web-dashboard/server.js +362 -11
  371. package/dist/web-dashboard/server.js.map +1 -1
  372. package/dist/web-dashboard/src/types.d.ts +170 -1
  373. package/dist/web-dashboard/src/types.d.ts.map +1 -1
  374. package/dist/web-dashboard/workspace-guard.d.ts +11 -2
  375. package/dist/web-dashboard/workspace-guard.d.ts.map +1 -1
  376. package/dist/web-dashboard/workspace-guard.js +24 -12
  377. package/dist/web-dashboard/workspace-guard.js.map +1 -1
  378. package/dist/web-dashboard/workspace-resolution.d.ts +87 -0
  379. package/dist/web-dashboard/workspace-resolution.d.ts.map +1 -0
  380. package/dist/web-dashboard/workspace-resolution.js +105 -0
  381. package/dist/web-dashboard/workspace-resolution.js.map +1 -0
  382. package/package.json +1 -1
  383. package/src/web-dashboard/public/assets/index-zjbdJnO-.js +210 -0
  384. package/src/web-dashboard/public/assets/index-zjbdJnO-.js.map +1 -0
  385. package/src/web-dashboard/public/index.html +1 -1
  386. package/src/web-dashboard/public/assets/index-DhiuR4S2.js +0 -210
  387. package/src/web-dashboard/public/assets/index-DhiuR4S2.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"remediation-ladder.d.ts","sourceRoot":"","sources":["../../src/tools/remediation-ladder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAKH,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,GAAG,EAAE,MAAM,EAAE,CAAC;IACd;;;OAGG;IACH,KAAK,EAAE,eAAe,GAAG,QAAQ,CAAC;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,4EAA4E;AAC5E,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AA8L1D;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,GAAG,CAAC,EAAE,MAAM,EACZ,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,WAAW,GAAG,IAAI,CAapB;AAED,4EAA4E;AAC5E,wBAAgB,2BAA2B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEzF;AAED,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,WAAW,GAAG,eAAe,CAyCzE;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAO/D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAQxD"}
1
+ {"version":3,"file":"remediation-ladder.d.ts","sourceRoot":"","sources":["../../src/tools/remediation-ladder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAKH,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,GAAG,EAAE,MAAM,EAAE,CAAC;IACd;;;OAGG;IACH,KAAK,EAAE,eAAe,GAAG,QAAQ,CAAC;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,4EAA4E;AAC5E,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AA8L1D;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,GAAG,CAAC,EAAE,MAAM,EACZ,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,WAAW,GAAG,IAAI,CAapB;AAED,4EAA4E;AAC5E,wBAAgB,2BAA2B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEzF;AAED,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,WAAW,GAAG,eAAe,CAiDzE;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAO/D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAQxD"}
@@ -242,6 +242,14 @@ export function applyRemediationAutoFixes(r) {
242
242
  for (const action of r.autoFix ?? []) {
243
243
  try {
244
244
  if (action.kind === 'chmod-exec') {
245
+ // Windows has no POSIX execute bit — `chmod` there can only toggle the
246
+ // read-only attribute. Running it would report a fix that did not happen
247
+ // (and could never become idempotent), so say plainly that it does not
248
+ // apply instead of claiming success.
249
+ if (process.platform === 'win32') {
250
+ skipped.push(`chmod +x ${action.path} (not applicable on Windows — no POSIX execute bit)`);
251
+ continue;
252
+ }
245
253
  if (!existsSync(action.path)) {
246
254
  skipped.push(`chmod +x ${action.path} (file not found)`);
247
255
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"remediation-ladder.js","sourceRoot":"","sources":["../../src/tools/remediation-ladder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remediation-ladder.js","sourceRoot":"","sources":["../../src/tools/remediation-ladder.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-cli.d.ts","sourceRoot":"","sources":["../../src/tools/run-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAuBjD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAKvD;AAED,uEAAuE;AACvE,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBtD;AAwBD;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAoJjF"}
1
+ {"version":3,"file":"run-cli.d.ts","sourceRoot":"","sources":["../../src/tools/run-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAyBjD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAKvD;AAED,uEAAuE;AACvE,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBtD;AAwBD;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA4KjF"}
@@ -33,8 +33,10 @@ import { fileURLToPath } from 'node:url';
33
33
  import { recordArtifact } from './artifact-append.js';
34
34
  import { envBuff, resolveNuviraHome } from '../config/paths.js';
35
35
  import { resolveAsk } from '../commands/intent-router.js';
36
- import { decideCliIntentConfirmation, RECOVERABLE_CLI_INTENTS } from '../learning/autonomy-policy.js';
36
+ import { decideCliIntentConfirmation } from '../learning/autonomy-policy.js';
37
+ import { cliIntentGateFacts } from '../learning/cli-intent-effects.js';
37
38
  import { envelopeCoversAction } from '../learning/intent-envelope.js';
39
+ import { sessionGrantCovers } from '../learning/session-grant.js';
38
40
  import { maskSenderId } from '../utils/mask.js';
39
41
  /** Cap on how much CLI output is fed back to the model. */
40
42
  const MAX_OUTPUT_CHARS = 6000;
@@ -163,14 +165,37 @@ export async function runCliTool(args, ctx) {
163
165
  // widen what may run: irreversible intents keep the gate they had, and this
164
166
  // only lets an approved plan carry out system work without a round trip per
165
167
  // command.
168
+ // ONE declaration answers every question below — what it does to the world,
169
+ // whether re-running undoes it, and which grant may cover it. See
170
+ // `learning/cli-intent-effects.ts`; the three hand-maintained sets this used to
171
+ // consult are retired.
172
+ const gatedIntent = cliIntentGateFacts(top.intent);
166
173
  const envVerdict = envelopeCoversAction(ctx.envelope, {
167
174
  tool: 'run_cli',
168
- changeClass: RECOVERABLE_CLI_INTENTS.has(top.intent) ? 'local-state' : 'destructive',
175
+ changeClass: gatedIntent.recoverable ? 'local-state' : 'destructive',
169
176
  });
170
- const verdict = envVerdict.covered
171
- ? { action: 'proceed', reason: envVerdict.reason }
177
+ // A grant may only cover an intent the policy itself classifies as recoverable
178
+ // or off-machine — NEVER an irreversible local one (`history.clear`,
179
+ // `memory.prune`), which keeps its gate whatever the user granted.
180
+ const grantCovers = (gatedIntent.external || gatedIntent.recoverable) &&
181
+ gatedIntent.grantCategory !== undefined &&
182
+ sessionGrantCovers(ctx.planStore, gatedIntent.grantCategory);
183
+ const verdict = envVerdict.covered || grantCovers
184
+ ? {
185
+ action: 'proceed',
186
+ reason: envVerdict.covered ? envVerdict.reason : 'allowed for this session by the user',
187
+ }
172
188
  : decideCliIntentConfirmation({ intent: top.intent, namedByRequest });
173
189
  if (verdict.action !== 'proceed') {
190
+ ctx.pendingConfirmation = {
191
+ tool: 'run_cli',
192
+ command,
193
+ // Offer a session grant ONLY where one could actually help; an
194
+ // irreversible local intent declares no category, so no grant is offered.
195
+ ...((gatedIntent.external || gatedIntent.recoverable) && gatedIntent.grantCategory
196
+ ? { category: gatedIntent.grantCategory }
197
+ : {}),
198
+ };
174
199
  return (`Error: run_cli: "${top.intent}" changes running services/state and needs explicit confirmation ` +
175
200
  `(${verdict.reason}). ` +
176
201
  `Call ask_user with choices yes/no confirming this exact command, then re-call ` +
@@ -1 +1 @@
1
- {"version":3,"file":"run-cli.js","sourceRoot":"","sources":["../../src/tools/run-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-cli.js","sourceRoot":"","sources":["../../src/tools/run-cli.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,10 @@
31
31
  * (maskSenderId — phone numbers never echo back in full).
32
32
  */
33
33
  import type { ToolContext } from './registry.js';
34
+ /** Test/DI seam: forget every recorded failure streak. */
35
+ export declare function resetTerminalFailureStreaks(): void;
36
+ /** The guidance a timed-out command gets instead of a bare "timed out". */
37
+ export declare function timeoutGuidance(command: string, timeoutMs: number, repeated: boolean): string;
34
38
  /**
35
39
  * Does this command ADD a dependency (rather than install what is declared)?
36
40
  *
@@ -53,6 +57,13 @@ export interface RunTerminalArgs {
53
57
  command: string;
54
58
  confirm?: boolean;
55
59
  timeout_ms?: number;
60
+ /**
61
+ * What this command is FOR (e.g. "install java"). When the command SUCCEEDS,
62
+ * it is remembered for this verb on this OS (a learned command, source
63
+ * 'observed'), so a later `tool_search resolve` offers it. Optional: absent
64
+ * means nothing is learned — the harness cannot name a verb the model did not.
65
+ */
66
+ verb?: string;
56
67
  }
57
68
  export declare function runTerminalTool(args: RunTerminalArgs, ctx: ToolContext): Promise<string>;
58
69
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"run-terminal.d.ts","sourceRoot":"","sources":["../../src/tools/run-terminal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAWH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAiLjD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAuBvD;AAOD;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAetE;AAED,KAAK,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAuDlD,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAe7D;AAED,iFAAiF;AAEjF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA2J9F"}
1
+ {"version":3,"file":"run-terminal.d.ts","sourceRoot":"","sources":["../../src/tools/run-terminal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAWH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAmDjD,0DAA0D;AAC1D,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AA+BD,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAW7F;AAoND;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAuBvD;AAOD;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAetE;AAED,KAAK,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAkElD,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAe7D;AAED,iFAAiF;AAEjF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAsR9F"}
@@ -36,14 +36,95 @@ import { applyRemediationAutoFixes, diagnoseFailure, formatAutoApply, formatReme
36
36
  import { maskSenderId } from '../utils/mask.js';
37
37
  import { decideStateChange } from '../learning/autonomy-policy.js';
38
38
  import { envelopeCoversAction } from '../learning/intent-envelope.js';
39
+ import { sessionGrantCovers } from '../learning/session-grant.js';
40
+ import { grantCategoryForEffect } from './capability-registry.js';
39
41
  import { applyProjectEnvironment, guardCommandEnvironment } from '../utils/project-env.js';
40
42
  import { formatEffectVerdict, isBuildCommand, verifyBuildEffect } from '../utils/effect-verification.js';
43
+ import { lookupMemo, memoNotice, storeMemo } from './command-memo.js';
41
44
  /** Cap on how much terminal output is fed back to the model. */
42
45
  const MAX_OUTPUT_CHARS = 6000;
43
46
  /** Default timeout for a terminal command (tests/builds are slow). */
44
47
  const DEFAULT_TIMEOUT_MS = 120_000;
48
+ /**
49
+ * P7 (fix_model_routing) — the default when a PERSON is watching.
50
+ *
51
+ * The live failure: three back-to-back 120-second `run_terminal` timeouts in one
52
+ * turn (4 minutes of a 5-minute run) while the dashboard console showed nothing,
53
+ * and then the agent gave up. Two minutes of silence in front of a person is not
54
+ * patience, it is a bug. Sixty seconds still covers a real test/build on this
55
+ * class of project, and an explicit `timeout_ms` (up to MAX_TIMEOUT_MS) still
56
+ * buys the model as much time as the work genuinely needs.
57
+ */
58
+ const INTERACTIVE_DEFAULT_TIMEOUT_MS = 60_000;
45
59
  /** Hard ceiling — the tool loop bounds the whole turn anyway. */
46
60
  const MAX_TIMEOUT_MS = 300_000;
61
+ /**
62
+ * P7 — how many times the SAME command (at the SAME timeout) may fail before the
63
+ * next call is refused.
64
+ *
65
+ * Two, measured from the live run: it ran a near-identical command three times
66
+ * (120s, 13s, 120s) and learned nothing from any of them — so the third blind
67
+ * repeat is exactly what must not happen. A flaky command still gets one retry
68
+ * (transient failures are real: a held lock, a dead port, a cold cache). After
69
+ * the second identical failure the refusal is returned in milliseconds with what
70
+ * to do instead, rather than spending another 60–120 seconds to learn nothing.
71
+ *
72
+ * The streak key (see the call site) includes the EFFECTIVE TIMEOUT, so the
73
+ * remedy this very tool advertises on a timeout — "re-call with an explicit
74
+ * `timeout_ms`" — is a genuinely different attempt and is never blocked here.
75
+ */
76
+ const IDENTICAL_FAILURE_CAP = 2;
77
+ /** Failures older than this do not count toward the cap — the world may have changed. */
78
+ const FAILURE_STREAK_WINDOW_MS = 10 * 60_000;
79
+ /** Bound on the streak table (a long session must not accumulate). */
80
+ const FAILURE_STREAK_MAX_ENTRIES = 50;
81
+ /** `key → {count, lastAt}` for the identical-command guard. */
82
+ const commandFailureStreaks = new Map();
83
+ /** Test/DI seam: forget every recorded failure streak. */
84
+ export function resetTerminalFailureStreaks() {
85
+ commandFailureStreaks.clear();
86
+ }
87
+ /** Record a failure for this exact command in this directory; report the streak. */
88
+ function recordCommandFailure(key, now) {
89
+ const prev = commandFailureStreaks.get(key);
90
+ const withinWindow = prev && now - prev.lastAt <= FAILURE_STREAK_WINDOW_MS;
91
+ const count = (withinWindow ? prev.count : 0) + 1;
92
+ commandFailureStreaks.set(key, { count, lastAt: now });
93
+ if (commandFailureStreaks.size > FAILURE_STREAK_MAX_ENTRIES) {
94
+ for (const [k, v] of commandFailureStreaks) {
95
+ if (commandFailureStreaks.size <= FAILURE_STREAK_MAX_ENTRIES)
96
+ break;
97
+ if (now - v.lastAt > FAILURE_STREAK_WINDOW_MS)
98
+ commandFailureStreaks.delete(k);
99
+ }
100
+ // Still too big (all recent) — drop the oldest half by insertion order.
101
+ if (commandFailureStreaks.size > FAILURE_STREAK_MAX_ENTRIES) {
102
+ const drop = Math.ceil(commandFailureStreaks.size / 2);
103
+ let i = 0;
104
+ for (const k of commandFailureStreaks.keys()) {
105
+ if (i++ >= drop)
106
+ break;
107
+ commandFailureStreaks.delete(k);
108
+ }
109
+ }
110
+ }
111
+ return count;
112
+ }
113
+ /** A command that just SUCCEEDED has nothing to retry — clear its streak. */
114
+ function clearCommandFailure(key) {
115
+ commandFailureStreaks.delete(key);
116
+ }
117
+ /** The guidance a timed-out command gets instead of a bare "timed out". */
118
+ export function timeoutGuidance(command, timeoutMs, repeated) {
119
+ const seconds = Math.round(timeoutMs / 1000);
120
+ return (`\n\n⏱ TIMEOUT — that command was killed after ${seconds}s without finishing. A timeout does NOT mean the project is broken; ` +
121
+ `it means this command is too slow or is waiting for something that will not come. ` +
122
+ `Do NOT re-run the identical command${repeated ? ' — it has already timed out here' : ''}. Instead: ` +
123
+ `(a) narrow it (a single test file, \`--reporter=dot\`, \`-x\`, one target rather than the whole suite), ` +
124
+ `(b) make it non-interactive (it may be waiting on a prompt or a server), or ` +
125
+ `(c) if the work is genuinely long, re-call with an explicit \`timeout_ms\` up to ${MAX_TIMEOUT_MS} (${Math.round(MAX_TIMEOUT_MS / 1000)}s). ` +
126
+ `Tell the user what was slow rather than repeating \`${maskSenderId(command)}\` as-is.`);
127
+ }
47
128
  /** ─── Command classification (deny-first) ───────────────────────────────── */
48
129
  /**
49
130
  * Absolute denials — scanned against the WHOLE command string (so `$(...)`
@@ -94,11 +175,53 @@ const VERIFY_PREFIXES = [
94
175
  'git status', 'git diff', 'git log', 'git show', 'git branch', 'git rev-parse',
95
176
  // Basic read-only shell.
96
177
  'ls', 'cat', 'head', 'tail', 'grep', 'rg', 'find', 'pwd', 'echo', 'wc', 'printf', 'which',
178
+ 'test', '[',
97
179
  // Read-only path helpers. Listed because a verify command routinely embeds
98
180
  // them in a substitution (`npx vitest run tests/$(basename x).test.ts`) and the
99
181
  // segment splitter cannot tell a helper from a real command.
100
182
  'basename', 'dirname', 'realpath',
183
+ // Text processors. `awk` READS by default — inspecting a file's headers is a
184
+ // read-only check the loop reaches for constantly. Its WRITE form is rejected
185
+ // separately (`isTextProcessorWrite`), so `awk '{print}'` verifies while
186
+ // `awk '{print > "f"}'` keeps the confirm gate. A command that cannot mutate
187
+ // state must never generate a prompt (see the misfire below).
188
+ 'awk',
101
189
  ];
190
+ /** Text processors that READ by default but can WRITE when told to. */
191
+ const TEXT_PROCESSOR_PREFIXES = new Set(['awk']);
192
+ /**
193
+ * Shell GRAMMAR keywords — the structure of a compound command, not a command.
194
+ *
195
+ * WHY THIS EXISTS (2026-10-08). A live chat turn
196
+ * (`trace-1791390325578-4968th`) inspected its own output with a pure read-only
197
+ * chain:
198
+ * grep -n '^#' NOTES.md && echo --- && wc -w NOTES.md &&
199
+ * for i in Introduction Design Operations; do printf "%s: " "$i"; done; echo
200
+ * Every command in it reads a file, but the `for`/`do`/`done` segments were not
201
+ * on the verify allowlist, so the WHOLE chain scored `confirm`, the gate refused
202
+ * it as "state-changing", and the model burned a step declaring "the command
203
+ * guard misfired on a read-only check" and reading the file a second way.
204
+ *
205
+ * A loop is judged by its BODY: the structural segments contribute nothing, and
206
+ * a body-prefixing keyword (`do printf …`) is stripped so the real command is
207
+ * classified. `for f in *; do rm -rf $f; done` still scores confirm (`rm`), so
208
+ * the autonomy is bounded by what the body actually runs.
209
+ */
210
+ const SHELL_STRUCTURAL_KEYWORDS = new Set(['for', 'done', 'fi', 'esac', 'case', '{', '}', '!', 'time', 'function']);
211
+ /** Keywords that PREFIX the real command within their own segment. */
212
+ const SHELL_BODY_KEYWORDS = new Set(['do', 'then', 'else', 'elif', 'while', 'until', 'if']);
213
+ /**
214
+ * Does a text processor's segment WRITE? Over-rejects on purpose: a `>` in an
215
+ * `awk` program may be a comparison inside quotes, but reading it as a write
216
+ * only costs a confirmation, while missing a real `print > "file"` would let a
217
+ * state change run unprompted (the safe direction is confirm).
218
+ */
219
+ function isTextProcessorWrite(segment) {
220
+ return (/(?:^|\s)(?:-i\S*|--in-place)\b/.test(segment) ||
221
+ />>?/.test(segment) ||
222
+ /\b(?:system|close)\s*\(/.test(segment) ||
223
+ /\bprintf?\s+>/.test(segment));
224
+ }
102
225
  /**
103
226
  * Read-only PROBES — `<cmd> --version` / `--help`, and package-metadata reads.
104
227
  *
@@ -285,16 +408,30 @@ function splitSegments(lower) {
285
408
  }
286
409
  /** Classify ONE segment by its leading tokens. */
287
410
  function classifySegment(segment) {
288
- const toks = leadingTokens(segment, 3);
411
+ // `verify` is the LOWEST severity, so returning it is how a segment stays
412
+ // NEUTRAL: it cannot raise the chain's worst class.
413
+ const head = leadingTokens(segment, 1)[0] ?? '';
414
+ if (SHELL_STRUCTURAL_KEYWORDS.has(head))
415
+ return 'verify';
416
+ let body = segment;
417
+ if (SHELL_BODY_KEYWORDS.has(head)) {
418
+ body = segment.slice(head.length).trim();
419
+ if (!body)
420
+ return 'verify';
421
+ }
422
+ const toks = leadingTokens(body, 3);
289
423
  for (const prefix of VERIFY_PREFIXES) {
290
424
  const pt = prefix.split(' ');
291
425
  if (pt.length <= toks.length && toks.slice(0, pt.length).join(' ') === prefix) {
426
+ // A text processor may WRITE; only its read form is verify.
427
+ if (TEXT_PROCESSOR_PREFIXES.has(prefix) && isTextProcessorWrite(body))
428
+ return 'confirm';
292
429
  return 'verify';
293
430
  }
294
431
  }
295
432
  // Read-only probes (`<cmd> --version` / `--help`) and metadata reads — they
296
433
  // cannot change state, so they never need confirmation (see the constants).
297
- if (READ_ONLY_PROBE_RE.test(segment))
434
+ if (READ_ONLY_PROBE_RE.test(body))
298
435
  return 'verify';
299
436
  for (const prefix of READ_ONLY_INFO_PREFIXES) {
300
437
  const pt = prefix.split(' ');
@@ -348,6 +485,33 @@ export async function runTerminalTool(args, ctx) {
348
485
  return (`Error: run_terminal: command DENIED — "${command}" is outside what the agent may run. ` +
349
486
  `Tell the user, and suggest the safe alternative (or that they run it themselves).`);
350
487
  }
488
+ // ── C3: ONE PROBE PER FACT PER RUN ────────────────────────────────────────
489
+ // The measured defect (see src/tools/command-memo.ts): a single run asked the
490
+ // same three facts twice — a combined probe and then the three individually —
491
+ // and created `backend/.venv` twice. The model cannot remember what it already
492
+ // ran; the harness can, because it ran it. So before spending a round trip,
493
+ // ask the memo.
494
+ //
495
+ // The consult sits after the DENY check (a denied command never ran, so it can
496
+ // never be in the memo) and BEFORE every other gate, and that ordering is the
497
+ // point: the memo only holds commands that ALREADY ran successfully in THIS
498
+ // run, under these same gates and this same context — so there is nothing left
499
+ // for the confirm gate to decide. The one thing this must never do is let a
500
+ // memo hit stand in for a command that would have been refused: it cannot, for
501
+ // the reason just given. Failures are never stored (a non-zero exit is
502
+ // retryable by definition), so a repaired project is never told "already done".
503
+ // Scoped to the directory the run is in: `clone_repo` changes `ctx.cwd`
504
+ // mid-run, and a fact learned in one tree is not a fact about another.
505
+ const memoWhere = ctx.cwd || process.cwd();
506
+ const memoHit = lookupMemo(ctx.commandMemo, command, memoWhere);
507
+ if (memoHit) {
508
+ ctx.emit?.('terminal:memoized', {
509
+ command,
510
+ answeredBy: memoHit.entry.command,
511
+ parts: memoHit.parts,
512
+ }, 'tool-loop');
513
+ return memoNotice(command, memoHit);
514
+ }
351
515
  // ── Project interpreter canonicalization + pre-run environment guard ──────
352
516
  // The live Aukat_check failure: a build ran against an interpreter that did
353
517
  // NOT have the project's own dependencies (PyQt6), produced a broken bundle,
@@ -385,8 +549,20 @@ export async function runTerminalTool(args, ctx) {
385
549
  tool: 'run_terminal',
386
550
  changeClass: recoverable ? 'local-state' : 'external',
387
551
  });
388
- const verdict = envVerdict.covered
389
- ? { action: 'proceed', reason: envVerdict.reason }
552
+ // The SESSION grant is consulted next, and WHICH category it is depends on
553
+ // the command: a recoverable workspace command needs `terminal`, while an
554
+ // off-machine one (network fetch, global/system install like winget) needs
555
+ // the user to have explicitly granted `external`. The absolute DENY patterns
556
+ // ran ABOVE, so nothing here can unlock sudo / rm -rf / / git push.
557
+ const grantCategory = grantCategoryForEffect(recoverable ? 'local-state' : 'external');
558
+ const grantCovers = grantCategory !== null && sessionGrantCovers(ctx.planStore, grantCategory);
559
+ const verdict = envVerdict.covered || grantCovers
560
+ ? {
561
+ action: 'proceed',
562
+ reason: envVerdict.covered
563
+ ? envVerdict.reason
564
+ : 'allowed for this session by the user',
565
+ }
390
566
  : decideStateChange({
391
567
  tool: 'run_terminal',
392
568
  action: `running "${command}"`,
@@ -396,8 +572,13 @@ export async function runTerminalTool(args, ctx) {
396
572
  });
397
573
  if (verdict.action !== 'proceed') {
398
574
  // Mark the pending confirmation so ask_user does NOT suppress the very
399
- // question this refusal asks for (see ToolContext.pendingConfirmation).
400
- ctx.pendingConfirmation = { tool: 'run_terminal', command };
575
+ // question this refusal asks for (see ToolContext.pendingConfirmation),
576
+ // and so the ask can offer the matching session grant.
577
+ ctx.pendingConfirmation = {
578
+ tool: 'run_terminal',
579
+ command,
580
+ ...(grantCategory ? { category: grantCategory } : {}),
581
+ };
401
582
  return (`Error: run_terminal: "${command}" changes state and needs explicit confirmation ` +
402
583
  `(${verdict.reason}). Call ask_user (yes/no, one-line reason), then re-call run_terminal ` +
403
584
  `with the SAME command plus confirm:true only if the user agreed.`);
@@ -411,9 +592,45 @@ export async function runTerminalTool(args, ctx) {
411
592
  authorization: ctx.writesAuthorized?.reason,
412
593
  }, 'tool-loop');
413
594
  }
414
- const timeoutMs = Math.min(MAX_TIMEOUT_MS, Math.max(1000, Math.floor(args.timeout_ms ?? DEFAULT_TIMEOUT_MS)));
595
+ // P7 — the DEFAULT timeout follows the room: a person watching a chat gets a
596
+ // shorter one (see INTERACTIVE_DEFAULT_TIMEOUT_MS). An explicit `timeout_ms`
597
+ // always wins, so a genuinely long build still gets its time.
598
+ const defaultTimeoutMs = ctx.interactive ? INTERACTIVE_DEFAULT_TIMEOUT_MS : DEFAULT_TIMEOUT_MS;
599
+ const timeoutMs = Math.min(MAX_TIMEOUT_MS, Math.max(1000, Math.floor(args.timeout_ms ?? defaultTimeoutMs)));
600
+ // P7 — the IDENTICAL-COMMAND guard. A command that has already failed twice at
601
+ // this timeout in this directory will fail a third time the same way; the live
602
+ // run spent two 120-second timeouts proving that. Refusing costs milliseconds
603
+ // and says what to change instead of quietly spending another two minutes of
604
+ // the user's time. Bounded, self-expiring, and reset by a success.
605
+ //
606
+ // The effective timeout is part of the key on purpose: the guidance a timeout
607
+ // carries tells the model to re-call with a longer `timeout_ms` when the work
608
+ // is genuinely long, and that advice must not be refused by this guard.
609
+ const streakKey = `${ctx.cwd ?? process.cwd()}|${command}|${timeoutMs}`;
610
+ const priorStreak = commandFailureStreaks.get(streakKey);
611
+ if (priorStreak &&
612
+ Date.now() - priorStreak.lastAt <= FAILURE_STREAK_WINDOW_MS &&
613
+ priorStreak.count >= IDENTICAL_FAILURE_CAP) {
614
+ return (`Error: run_terminal: \`${maskSenderId(command)}\` has already failed ${priorStreak.count} times at this timeout ` +
615
+ `and would fail the same way again — refusing to spend another run on it. Change the command before calling ` +
616
+ `run_terminal again: fix the underlying cause, narrow the scope, raise \`timeout_ms\` if the work is simply long, ` +
617
+ `or run a different check entirely.`);
618
+ }
415
619
  const startedAt = Date.now();
416
620
  const output = await execCommand(command, ctx.cwd, timeoutMs, runEnv);
621
+ // P7 — a TIMEOUT is its own, specific signal: the command was killed, so
622
+ // "it timed out" is not "the project is broken", and the ONE thing the model
623
+ // must not do is re-run the identical command. The guidance says what to do
624
+ // instead (narrow it, make it non-interactive, or pass a longer timeout_ms).
625
+ const timedOut = /run_terminal: `[^`]*` ⏱ timed out after \d+ms/.test(output);
626
+ const failureStreak = timedOut
627
+ ? recordCommandFailure(streakKey, Date.now())
628
+ : output.startsWith('Error:')
629
+ ? recordCommandFailure(streakKey, Date.now())
630
+ : 0;
631
+ if (!timedOut && !output.startsWith('Error:'))
632
+ clearCommandFailure(streakKey);
633
+ const outputWithNotes = timedOut ? output + timeoutGuidance(command, timeoutMs, failureStreak > 1) : output;
417
634
  // A4 — a KNOWN toolchain failure gets its known fix appended, so the model
418
635
  // repairs instead of re-trying the identical command. Advisory only: the note
419
636
  // names the bounded, project-local step; it never mutates the workspace.
@@ -454,15 +671,53 @@ export async function runTerminalTool(args, ctx) {
454
671
  if (verdict.status === 'verified')
455
672
  effectNote = `\n${formatEffectVerdict(verdict)}`;
456
673
  }
674
+ // Long-tail OS adaptation: a command that failed because an executable is not
675
+ // on THIS machine is not a dead end — the model should choose a command for the
676
+ // machine it is on. Keyed on the shell's OWN signal (exit 127 / 9009), so this
677
+ // is a fact the shell reports, not a phrase match. Advisory only.
678
+ let missingNote = '';
679
+ if (output.startsWith('Error:')) {
680
+ const { isMissingBinaryFailure, buildMissingBinaryNote } = await import('../learning/command-adaptation.js');
681
+ if (isMissingBinaryFailure(output))
682
+ missingNote = buildMissingBinaryNote(command);
683
+ }
684
+ // The grown table: a SUCCESSFUL command the model LABELLED with a verb is
685
+ // remembered for this machine (observed), so the same OS-specific command is
686
+ // not re-derived. Only with a verb and only on success — a failure is not a
687
+ // fact worth remembering, and a verbless command cannot be keyed. Best-effort.
688
+ if (args.verb && !timedOut && !output.startsWith('Error:')) {
689
+ try {
690
+ const { recordLearnedCommand } = await import('../learning/learned-commands.js');
691
+ const { leadingBinary } = await import('../learning/command-adaptation.js');
692
+ const bin = leadingBinary(command);
693
+ recordLearnedCommand({
694
+ verb: args.verb,
695
+ command,
696
+ ...(bin ? { binary: bin } : {}),
697
+ source: 'observed',
698
+ });
699
+ }
700
+ catch {
701
+ // Best-effort — learning must never break the run it learned from.
702
+ }
703
+ }
704
+ // C3 — remember what a SUCCESSFUL run answered (whole command + every fact it
705
+ // established), so the same question in the same run is answered from the
706
+ // output above instead of a second spawn. A timeout is a failure like any
707
+ // other, and `Error:`-prefixed output is a refusal or a crash — neither is a
708
+ // fact worth remembering.
709
+ if (!timedOut && !output.startsWith('Error:'))
710
+ storeMemo(ctx.commandMemo, command, output, memoWhere);
457
711
  if (!decidedAutonomously)
458
- return output + effectNote + envNote + remediationNote + autoApplyNote;
712
+ return outputWithNotes + effectNote + envNote + remediationNote + autoApplyNote + missingNote;
459
713
  // Reported, never silent — a judgment call the user cannot see is
460
714
  // indistinguishable from a bug.
461
- return (`${output}${effectNote}\n💡 Ran without asking: ${autonomyReason}. State what you ran in your answer — ` +
715
+ return (`${outputWithNotes}${effectNote}\n💡 Ran without asking: ${autonomyReason}. State what you ran in your answer — ` +
462
716
  'do not ask for permission to do work the user already asked for.' +
463
717
  envNote +
464
718
  remediationNote +
465
- autoApplyNote);
719
+ autoApplyNote +
720
+ missingNote);
466
721
  }
467
722
  /** Spawn the command (shell-interpreted — pipes, &&, substitutions work). */
468
723
  function execCommand(command, cwd, timeoutMs, envOverride) {