agent-nuvira 3.3.1 → 3.3.3

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 (154) hide show
  1. package/README.md +5 -8
  2. package/dist/agents/agents/runner.d.ts +9 -0
  3. package/dist/agents/agents/runner.d.ts.map +1 -1
  4. package/dist/agents/agents/runner.js +34 -12
  5. package/dist/agents/agents/runner.js.map +1 -1
  6. package/dist/agents/agents/writer-tool-calling.d.ts.map +1 -1
  7. package/dist/agents/agents/writer-tool-calling.js +7 -2
  8. package/dist/agents/agents/writer-tool-calling.js.map +1 -1
  9. package/dist/agents/agents/writer.d.ts.map +1 -1
  10. package/dist/agents/agents/writer.js +7 -1
  11. package/dist/agents/agents/writer.js.map +1 -1
  12. package/dist/agents/artifact-verification.d.ts +102 -0
  13. package/dist/agents/artifact-verification.d.ts.map +1 -0
  14. package/dist/agents/artifact-verification.js +216 -0
  15. package/dist/agents/artifact-verification.js.map +1 -0
  16. package/dist/agents/checkpoint-store.d.ts +73 -0
  17. package/dist/agents/checkpoint-store.d.ts.map +1 -1
  18. package/dist/agents/checkpoint-store.js +161 -0
  19. package/dist/agents/checkpoint-store.js.map +1 -1
  20. package/dist/agents/credential-store.d.ts +120 -0
  21. package/dist/agents/credential-store.d.ts.map +1 -1
  22. package/dist/agents/credential-store.js +358 -19
  23. package/dist/agents/credential-store.js.map +1 -1
  24. package/dist/agents/orchestrator.d.ts +10 -1
  25. package/dist/agents/orchestrator.d.ts.map +1 -1
  26. package/dist/agents/orchestrator.js +234 -75
  27. package/dist/agents/orchestrator.js.map +1 -1
  28. package/dist/agents/phase-engine.d.ts +61 -0
  29. package/dist/agents/phase-engine.d.ts.map +1 -1
  30. package/dist/agents/phase-engine.js +68 -2
  31. package/dist/agents/phase-engine.js.map +1 -1
  32. package/dist/agents/prompt-assembly.d.ts +11 -0
  33. package/dist/agents/prompt-assembly.d.ts.map +1 -1
  34. package/dist/agents/prompt-assembly.js +17 -0
  35. package/dist/agents/prompt-assembly.js.map +1 -1
  36. package/dist/agents/release-preflight.d.ts +121 -0
  37. package/dist/agents/release-preflight.d.ts.map +1 -0
  38. package/dist/agents/release-preflight.js +259 -0
  39. package/dist/agents/release-preflight.js.map +1 -0
  40. package/dist/agents/release-runner.d.ts +157 -0
  41. package/dist/agents/release-runner.d.ts.map +1 -0
  42. package/dist/agents/release-runner.js +719 -0
  43. package/dist/agents/release-runner.js.map +1 -0
  44. package/dist/agents/step-handoff.d.ts +190 -0
  45. package/dist/agents/step-handoff.d.ts.map +1 -0
  46. package/dist/agents/step-handoff.js +443 -0
  47. package/dist/agents/step-handoff.js.map +1 -0
  48. package/dist/cli/benchmark.d.ts.map +1 -1
  49. package/dist/cli/benchmark.js +11 -4
  50. package/dist/cli/benchmark.js.map +1 -1
  51. package/dist/cli/chat.d.ts.map +1 -1
  52. package/dist/cli/chat.js +25 -4
  53. package/dist/cli/chat.js.map +1 -1
  54. package/dist/cli/cli-program.d.ts.map +1 -1
  55. package/dist/cli/cli-program.js +3 -0
  56. package/dist/cli/cli-program.js.map +1 -1
  57. package/dist/cli/credentials.d.ts +28 -0
  58. package/dist/cli/credentials.d.ts.map +1 -0
  59. package/dist/cli/credentials.js +213 -0
  60. package/dist/cli/credentials.js.map +1 -0
  61. package/dist/cli/failover-runner.d.ts.map +1 -1
  62. package/dist/cli/failover-runner.js +9 -3
  63. package/dist/cli/failover-runner.js.map +1 -1
  64. package/dist/cli/loop-executor.d.ts.map +1 -1
  65. package/dist/cli/loop-executor.js +74 -7
  66. package/dist/cli/loop-executor.js.map +1 -1
  67. package/dist/cli/nlu.d.ts.map +1 -1
  68. package/dist/cli/nlu.js +8 -2
  69. package/dist/cli/nlu.js.map +1 -1
  70. package/dist/cli/publish.d.ts +22 -0
  71. package/dist/cli/publish.d.ts.map +1 -1
  72. package/dist/cli/publish.js +109 -13
  73. package/dist/cli/publish.js.map +1 -1
  74. package/dist/config/live-credentials.d.ts +57 -0
  75. package/dist/config/live-credentials.d.ts.map +1 -0
  76. package/dist/config/live-credentials.js +126 -0
  77. package/dist/config/live-credentials.js.map +1 -0
  78. package/dist/config/paths.d.ts +18 -0
  79. package/dist/config/paths.d.ts.map +1 -1
  80. package/dist/config/paths.js +25 -0
  81. package/dist/config/paths.js.map +1 -1
  82. package/dist/federation/a2a-types.js +1 -1
  83. package/dist/federation/a2a-types.js.map +1 -1
  84. package/dist/inference/model-validator.d.ts +6 -1
  85. package/dist/inference/model-validator.d.ts.map +1 -1
  86. package/dist/inference/model-validator.js +7 -2
  87. package/dist/inference/model-validator.js.map +1 -1
  88. package/dist/inference/route-resolver.d.ts +116 -0
  89. package/dist/inference/route-resolver.d.ts.map +1 -0
  90. package/dist/inference/route-resolver.js +159 -0
  91. package/dist/inference/route-resolver.js.map +1 -0
  92. package/dist/learning/autonomy-policy.d.ts +18 -0
  93. package/dist/learning/autonomy-policy.d.ts.map +1 -1
  94. package/dist/learning/autonomy-policy.js +35 -0
  95. package/dist/learning/autonomy-policy.js.map +1 -1
  96. package/dist/learning/reasoning-trace.d.ts +1 -1
  97. package/dist/learning/reasoning-trace.d.ts.map +1 -1
  98. package/dist/learning/reasoning-trace.js +25 -1
  99. package/dist/learning/reasoning-trace.js.map +1 -1
  100. package/dist/learning/resilient-call.d.ts.map +1 -1
  101. package/dist/learning/resilient-call.js +29 -17
  102. package/dist/learning/resilient-call.js.map +1 -1
  103. package/dist/learning/skill-store.d.ts.map +1 -1
  104. package/dist/learning/skill-store.js +30 -9
  105. package/dist/learning/skill-store.js.map +1 -1
  106. package/dist/mcp/catalog.js +2 -3
  107. package/dist/mcp/catalog.js.map +1 -1
  108. package/dist/mcp/manager.d.ts.map +1 -1
  109. package/dist/mcp/manager.js +5 -3
  110. package/dist/mcp/manager.js.map +1 -1
  111. package/dist/skills/secret-capture.d.ts.map +1 -1
  112. package/dist/skills/secret-capture.js +9 -4
  113. package/dist/skills/secret-capture.js.map +1 -1
  114. package/dist/tools/credentials-tool.d.ts +24 -0
  115. package/dist/tools/credentials-tool.d.ts.map +1 -0
  116. package/dist/tools/credentials-tool.js +125 -0
  117. package/dist/tools/credentials-tool.js.map +1 -0
  118. package/dist/tools/git-tool.d.ts +25 -7
  119. package/dist/tools/git-tool.d.ts.map +1 -1
  120. package/dist/tools/git-tool.js +155 -15
  121. package/dist/tools/git-tool.js.map +1 -1
  122. package/dist/tools/loop-project-context.d.ts.map +1 -1
  123. package/dist/tools/loop-project-context.js +16 -0
  124. package/dist/tools/loop-project-context.js.map +1 -1
  125. package/dist/tools/loop-route-feed.d.ts +57 -0
  126. package/dist/tools/loop-route-feed.d.ts.map +1 -0
  127. package/dist/tools/loop-route-feed.js +101 -0
  128. package/dist/tools/loop-route-feed.js.map +1 -0
  129. package/dist/tools/pipeline-tool.d.ts.map +1 -1
  130. package/dist/tools/pipeline-tool.js +8 -2
  131. package/dist/tools/pipeline-tool.js.map +1 -1
  132. package/dist/tools/publish-tool.d.ts.map +1 -1
  133. package/dist/tools/publish-tool.js +76 -10
  134. package/dist/tools/publish-tool.js.map +1 -1
  135. package/dist/tools/registry.d.ts +21 -1
  136. package/dist/tools/registry.d.ts.map +1 -1
  137. package/dist/tools/registry.js +44 -6
  138. package/dist/tools/registry.js.map +1 -1
  139. package/dist/tools/run-terminal.d.ts +9 -0
  140. package/dist/tools/run-terminal.d.ts.map +1 -1
  141. package/dist/tools/run-terminal.js +80 -2
  142. package/dist/tools/run-terminal.js.map +1 -1
  143. package/dist/tools/tool-loop.d.ts +12 -5
  144. package/dist/tools/tool-loop.d.ts.map +1 -1
  145. package/dist/tools/tool-loop.js +148 -0
  146. package/dist/tools/tool-loop.js.map +1 -1
  147. package/dist/tools/toolsets.js +2 -2
  148. package/dist/tools/toolsets.js.map +1 -1
  149. package/dist/workflow/registry.js +1 -1
  150. package/dist/workflow/registry.js.map +1 -1
  151. package/package.json +5 -4
  152. package/src/web-dashboard/public/assets/{index-CjvoBhlz.js → index-CxDj7p6i.js} +2 -2
  153. package/src/web-dashboard/public/assets/{index-CjvoBhlz.js.map → index-CxDj7p6i.js.map} +1 -1
  154. package/src/web-dashboard/public/index.html +1 -1
@@ -31,6 +31,15 @@
31
31
  * (maskSenderId — phone numbers never echo back in full).
32
32
  */
33
33
  import type { ToolContext } from './registry.js';
34
+ /**
35
+ * Does this command ADD a dependency (rather than install what is declared)?
36
+ *
37
+ * This is the line between setup and a supply-chain decision, and it is drawn
38
+ * from the command text alone: `npm install` reads the manifest, `npm install
39
+ * bcrypt` writes to it. A command that cannot be read this way (composed,
40
+ * global) is already excluded from autonomy by the callers' other gates.
41
+ */
42
+ export declare function addsDependency(command: string): boolean;
34
43
  /**
35
44
  * Is this a recoverable workspace command the agent may run on its own when the
36
45
  * request authorized the work?
@@ -1 +1 @@
1
- {"version":3,"file":"run-terminal.d.ts","sourceRoot":"","sources":["../../src/tools/run-terminal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAgHjD;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAUtE;AAED,KAAK,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AA8ClD,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,CAkF9F"}
1
+ {"version":3,"file":"run-terminal.d.ts","sourceRoot":"","sources":["../../src/tools/run-terminal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAyJjD;;;;;;;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;AA8ClD,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,CAkF9F"}
@@ -110,10 +110,22 @@ const VERIFY_PREFIXES = [
110
110
  * - anything fetched and executed (`curl … | bash`);
111
111
  * - publishing, deploying, pushing (denied outright anyway);
112
112
  * - arbitrary code (`node -e`, `python -c`) and unknown commands — the
113
- * deny-first default is unchanged, so this list is the ONLY new autonomy.
113
+ * deny-first default is unchanged, so this list is the ONLY new autonomy;
114
+ * - **a command that ADDS a dependency** (`npm install bcrypt`, `yarn add x`,
115
+ * `cargo add y`) — see {@link addsDependency}.
116
+ *
117
+ * That last carve-out is the fix for a live incident: `bcrypt@^6.0.0` and
118
+ * `express-jwt@^8.5.1` appeared in this repo's `package.json` and
119
+ * `package-lock.json` mid-release, during a run in which the release pipeline
120
+ * was between its commit and its publish phase — one `git add -A` from being
121
+ * committed and published, with no code referencing either package. A
122
+ * dependency is not a build step: "install what the manifest declares" is
123
+ * setup (recoverable), while "declare a new dependency" is a supply-chain
124
+ * decision, and that is a human's to make.
114
125
  */
115
126
  const RECOVERABLE_PREFIXES = [
116
- // Dependency lifecycle — the requested build's own setup.
127
+ // Dependency lifecycle — the requested build's own setup. The ADD forms are
128
+ // filtered out by `addsDependency` (a new dependency is a decision).
117
129
  'npm install', 'npm i', 'npm ci', 'npm add', 'npm init',
118
130
  'pnpm install', 'pnpm i', 'pnpm add',
119
131
  'yarn install', 'yarn add',
@@ -133,6 +145,67 @@ const RECOVERABLE_PREFIXES = [
133
145
  * an install.
134
146
  */
135
147
  const COMPOSED_COMMAND_RE = /[;&|<>`]|\$\(/;
148
+ /**
149
+ * Package managers whose `<cmd> <pkg>` form WRITES a new dependency into a
150
+ * manifest or lockfile. These always add, whatever the arguments look like.
151
+ * (`npm ci` is absent on purpose: it installs the lockfile and accepts no
152
+ * package arguments, so an argument passed to it is already out of contract —
153
+ * it is handled by the generic rule below.)
154
+ */
155
+ const ADD_COMMAND_PREFIXES = [
156
+ // Only the forms that REQUIRE a package name. `npm i` is an alias of
157
+ // `npm install` and is handled by the argument check below, so the bare
158
+ // `npm i` (setup) stays recoverable while `npm i bcrypt` does not.
159
+ 'npm add', 'yarn add', 'pnpm add', 'bun add',
160
+ 'cargo add', 'go get', 'composer require', 'poetry add', 'uv add',
161
+ ];
162
+ /**
163
+ * Installers that are RECOVERABLE when they read a manifest and become an ADD
164
+ * when they name a package (`npm install bcrypt`).
165
+ */
166
+ const INSTALL_COMMAND_PREFIXES = [
167
+ 'npm install', 'npm i', 'npm ci', 'pnpm install', 'pnpm i',
168
+ 'yarn install', 'bun install',
169
+ 'pip install', 'pip3 install', 'python -m pip install', 'uv pip install',
170
+ 'poetry install',
171
+ ];
172
+ /** Flags whose VALUE is the declared set (a requirements file, a local path). */
173
+ const DECLARED_INSTALL_FLAGS = new Set(['-r', '--requirement', '-e', '--editable']);
174
+ /** Bare arguments that mean "install what is already declared", not "install this". */
175
+ const DECLARED_INSTALL_ARGS = new Set(['.', '-d', '--dev']);
176
+ /**
177
+ * Does this command ADD a dependency (rather than install what is declared)?
178
+ *
179
+ * This is the line between setup and a supply-chain decision, and it is drawn
180
+ * from the command text alone: `npm install` reads the manifest, `npm install
181
+ * bcrypt` writes to it. A command that cannot be read this way (composed,
182
+ * global) is already excluded from autonomy by the callers' other gates.
183
+ */
184
+ export function addsDependency(command) {
185
+ const lower = normalize(command).toLowerCase();
186
+ if (!lower)
187
+ return false;
188
+ const hasPrefix = (prefixes) => {
189
+ const toks = leadingTokens(lower, 2);
190
+ return prefixes.some((p) => {
191
+ const pt = p.split(' ');
192
+ return pt.length <= toks.length && toks.slice(0, pt.length).join(' ') === p;
193
+ });
194
+ };
195
+ if (hasPrefix(ADD_COMMAND_PREFIXES))
196
+ return true;
197
+ if (!hasPrefix(INSTALL_COMMAND_PREFIXES))
198
+ return false;
199
+ // Reached only for an install form: decide from its arguments.
200
+ const rest = lower.split(' ').slice(2);
201
+ // `-r requirements.txt` / `-e .` ARE the declared set — the file/list that
202
+ // follows the flag is not a package name, so the flag itself settles it.
203
+ if (rest.some((a) => DECLARED_INSTALL_FLAGS.has(a)))
204
+ return false;
205
+ // Otherwise an installer WITH a package argument declares that package.
206
+ const args = rest.filter((a) => !a.startsWith('-'));
207
+ return args.some((arg) => !DECLARED_INSTALL_ARGS.has(arg));
208
+ }
136
209
  /** A global install mutates the machine, not the repo — never recoverable. */
137
210
  const GLOBAL_INSTALL_RE = /(?:^|\s)(?:-g|--global)(?:\s|$)/;
138
211
  /**
@@ -147,6 +220,11 @@ export function isRecoverableWorkspaceCommand(command) {
147
220
  return false;
148
221
  if (GLOBAL_INSTALL_RE.test(lower))
149
222
  return false;
223
+ // Declaring a NEW dependency is a human decision, not a build step (see the
224
+ // docstring above and `addsDependency`). The bare install forms stay
225
+ // recoverable: they introduce nothing the manifest did not already declare.
226
+ if (addsDependency(lower))
227
+ return false;
150
228
  const toks = leadingTokens(lower, 3);
151
229
  return RECOVERABLE_PREFIXES.some((prefix) => {
152
230
  const pt = prefix.split(' ');
@@ -1 +1 @@
1
- {"version":3,"file":"run-terminal.js","sourceRoot":"","sources":["../../src/tools/run-terminal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-terminal.js","sourceRoot":"","sources":["../../src/tools/run-terminal.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,7 @@ import type { TraceEvent, TraceGateName } from '../learning/reasoning-trace.js';
31
31
  */
32
32
  export type LoopTraceEvent = Omit<TraceEvent, 'seq' | 'timestamp'>;
33
33
  import type { ToolMessage } from '../inference/interface.js';
34
+ import type { ServedRoute } from '../inference/route-resolver.js';
34
35
  export { type ToolMessage };
35
36
  /**
36
37
  * The P3c fallback hint for a failed tool call — appended to the error text
@@ -172,6 +173,17 @@ export interface ToolLoopOptions {
172
173
  /** ToolContext for executions (configManager, followups sink, board, ...). */
173
174
  context: ToolContext;
174
175
  deps: ToolLoopDeps;
176
+ /**
177
+ * The route that is ACTUALLY serving this turn, read before every model call.
178
+ *
179
+ * The loop re-reads it each step so a mid-turn failover cannot leave the model
180
+ * believing it is still the model it started on — the cheap alternative (state
181
+ * the route once, in the system prompt) is a fact that decays. Returning `null`
182
+ * injects nothing: a caller that does not know the route must not be "helped"
183
+ * by a guess. See `src/tools/loop-route-feed.ts` for why the model is told at
184
+ * all.
185
+ */
186
+ servedRoute?: () => ServedRoute | null;
175
187
  /**
176
188
  * P4 — stream content tokens as the model generates them (typewriter for
177
189
  * the dashboard's final answer). Passed to every callModel; providers that
@@ -413,11 +425,6 @@ export declare function detectUnverifiedDeliveryClaim(content: string, toolsRun:
413
425
  * summarise) are excluded.
414
426
  */
415
427
  export declare function detectUnfulfilledIntentPromise(content: string): boolean;
416
- /**
417
- * Public entry point. Runs the loop, then annotates the result with the
418
- * honest-answer flags so every surface (CLI, dashboard, gateway, trace) can
419
- * distinguish "generated a reply" from "actually performed the action".
420
- */
421
428
  export declare function runToolLoop(opts: ToolLoopOptions): Promise<ToolLoopResult>;
422
429
  /**
423
430
  * Classify a DECLINED call's result text (G18).
@@ -1 +1 @@
1
- {"version":3,"file":"tool-loop.d.ts","sourceRoot":"","sources":["../../src/tools/tool-loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-loop.d.ts","sourceRoot":"","sources":["../../src/tools/tool-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAA4B,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAgBhG,OAAO,EAKL,QAAQ,EACR,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAQL,KAAK,gBAAgB,EACtB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AA2ChF;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,WAAW,CAAC,CAAC;AAEnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAWlE,OAAO,EAAE,KAAK,WAAW,EAAE,CAAC;AAmC5B;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKnF;AAaD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAI5E,iFAAiF;eACtE,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,IAAI;IAa9C,sDAAsD;uBACtC,OAAO;EAI1B;AAED,+EAA+E;AAC/E,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,SAAS,EAAE,KAAK,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,kFAAkF;QAClF,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACxC,CAAC,CAAC;CACJ;AAED,mFAAmF;AACnF,MAAM,WAAW,YAAY;IAC3B;;;;;;;;;;;;OAYG;IACH,SAAS,CACP,QAAQ,EAAE,WAAW,EAAE,EACvB,WAAW,EAAE,cAAc,EAAE,EAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,CAAC,CAAC;IACzB,iFAAiF;IACjF,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5F,sFAAsF;IACtF,WAAW,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,6EAA6E;IAC7E,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAChC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;OAQG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;;;;;;;;OAcG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;;;;;;;;;;;OAeG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC/C;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,8EAA8E;IAC9E,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,YAAY,CAAC;IACnB;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACvC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,8EAA8E;IAC9E,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;OAQG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;;;;;;;OAUG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;;OAQG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAQ5D;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,CAAC,WAAW,CAAC,CAAA;CAAE,CA6F5G;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO7D;AA0BD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAOvD,CAAC;AAEH,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAeD;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,yEAAyE;AACzE,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,oDAAoD;AACpD,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,OAAQ,CAAC;AAE3C;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIrE;AAOD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,6DAA6D;IAC7D,iBAAiB,EAAE,OAAO,CAAC;IAC3B,qFAAqF;IACrF,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oFAAoF;IACpF,oBAAoB,EAAE,gBAAgB,EAAE,CAAC;IACzC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAokCD;;;;;;;;;;GAUG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAYnG;AAuDD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAevE;AA6ED,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAwDhF;AAyED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA2BpG;AAmBD,0EAA0E;AAC1E,eAAO,MAAM,2BAA2B,SAAU,CAAC;AAanD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EAAE,EACrB,QAAQ,GAAE,MAAoC,GAC7C;IAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAyD5C"}
@@ -23,7 +23,50 @@ import { wantsAuthoredArtifact } from '../learning/deliverable-class.js';
23
23
  import { normalizeFollowups } from './followup-utils.js';
24
24
  import { assessEditActivity, detectUnverifiedEditClaim, isVerificationTool, verificationNudgeFor, THINK_ONLY_ESCALATION, AUTHORIZED_WORK_NUDGE, deliverableNudge, } from './edit-verification.js';
25
25
  import { effectiveToolJsonSchemas, coreToolJsonSchemas, isToolEnabled, toolsetForTool } from './toolsets.js';
26
+ import { deliverablesNamedIn, recordStepHandoff } from '../agents/step-handoff.js';
27
+ /**
28
+ * Tools that MUTATE the workspace. A refusal of one of these is the only
29
+ * refusal that leaves work undone — a declined `read_file` costs a step, a
30
+ * declined `write_file` means the deliverable was never produced.
31
+ */
32
+ const MUTATING_TOOL_NAMES = new Set([
33
+ 'write_file',
34
+ 'edit_file',
35
+ 'propose_change',
36
+ 'run_terminal',
37
+ 'run_cli',
38
+ ]);
39
+ /** The path a mutating call was aimed at, when it named one. */
40
+ function mutatedPathOf(args) {
41
+ const a = args;
42
+ const p = a?.path ?? a?.file_path ?? a?.file;
43
+ return typeof p === 'string' && p.trim() ? p.trim() : undefined;
44
+ }
45
+ /**
46
+ * The ask this turn is answering — the text a hand-off is keyed against.
47
+ * `authorizationRequest` is the loop's own record of the last user message;
48
+ * the thread scan is the fallback for callers that do not set it (tests, direct
49
+ * invocations). Injected blocks (`[Project context]`, the route feed) are
50
+ * skipped: they are the loop's own additions, not the user's words.
51
+ */
52
+ function currentAsk(opts) {
53
+ const recorded = opts.context?.authorizationRequest?.trim();
54
+ if (recorded)
55
+ return recorded.slice(0, 600);
56
+ const messages = opts.messages ?? [];
57
+ for (let i = messages.length - 1; i >= 0; i -= 1) {
58
+ const m = messages[i];
59
+ if (m.role !== 'user')
60
+ continue;
61
+ const text = (m.content ?? '').trim();
62
+ if (!text || text.startsWith('['))
63
+ continue;
64
+ return text.slice(0, 600);
65
+ }
66
+ return '';
67
+ }
26
68
  import { appendToolArtifact } from './artifact-append.js';
69
+ import { ROUTE_FEED_MARKER, isUnresolvedModel, routeFeedFingerprint, routeFeedText } from './loop-route-feed.js';
27
70
  import { logger } from '../utils/logger.js';
28
71
  import { toUserFacingGenerationError, TEXTUAL_TOOL_CALL_HINT, isTextualFollowupsPayload, followupEntriesFromPayload, stripTrailingFollowupsHeader, } from '../inference/tool-call-utils.js';
29
72
  // ─── P3c — tool-fallback hints (switch tools when one fails) ────────────────
@@ -519,6 +562,8 @@ async function runToolLoopInner(opts, progress) {
519
562
  return added;
520
563
  };
521
564
  const thread = [...messages];
565
+ /** Serving pairs the loop has already told the model about, oldest first. */
566
+ const routeFeedState = { pairs: [] };
522
567
  // ── Stage 2: answer a question ABOUT the run from the run ────────────────
523
568
  // The live audit's worst moment was the user asking "why are you asking me
524
569
  // this again and again?" and the turn replying with an edit plan — not through
@@ -584,6 +629,12 @@ async function runToolLoopInner(opts, progress) {
584
629
  deps.onEvent?.(` ✂️ ${trimmedResult.trimmed} old tool result(s) trimmed to fit the ${Math.round(budgetChars / 1000)}K-char context budget.`);
585
630
  }
586
631
  }
632
+ // ── The route feed, re-synced before every call ────────────────────────
633
+ // Placed here rather than at thread construction because THIS is the last
634
+ // point before the call: a failover during step N must be visible at step
635
+ // N+1, and a single up-front line would have the model answering about a
636
+ // model that has since stopped serving it.
637
+ syncRouteFeed(thread, opts.servedRoute, routeFeedState);
587
638
  let response;
588
639
  try {
589
640
  response = await deps.callModel(thread, schemas, opts.onToken, opts.signal);
@@ -1146,6 +1197,40 @@ async function runToolLoopInner(opts, progress) {
1146
1197
  // can see "blocked twice, identically" instead of rediscovering it — and
1147
1198
  // so the repetition gate has a refusal signal as well as an ask signal.
1148
1199
  runTrace.recordRefusal(call.name, refusal?.gate ?? 'error', rawResult);
1200
+ // ── DURABLE HAND-OFF ────────────────────────────────────────────────
1201
+ // A refused MUTATION is the one failure that must outlive the turn.
1202
+ // The live NVDA-addon failure is exactly this: `write_file` was refused
1203
+ // on every attempt because the target was outside the workspace, and
1204
+ // each of the 18 following attempts rediscovered it from zero — same
1205
+ // plan, same refusal, same empty package. Recording it here means the
1206
+ // next candidate, the next turn and the next RUN are told which path
1207
+ // could not be written and WHY, so they change approach instead of
1208
+ // repeating the identical call (see step-handoff.ts).
1209
+ //
1210
+ // Best-effort: a hand-off write must never break the loop.
1211
+ if (refusal !== null && MUTATING_TOOL_NAMES.has(call.name)) {
1212
+ try {
1213
+ const ask = currentAsk(opts);
1214
+ const aimedAt = mutatedPathOf(call.arguments);
1215
+ // Key on the deliverable the ASK names when there is one, so the
1216
+ // same work asked for in different words resumes the same hand-off.
1217
+ const named = deliverablesNamedIn(ask);
1218
+ recordStepHandoff({
1219
+ projectPath: opts.context?.cwd || process.cwd(),
1220
+ goal: ask,
1221
+ stepDescription: aimedAt
1222
+ ? `${call.name} → ${aimedAt} (refused: ${refusal.gate ?? 'gate'})`
1223
+ : `${call.name} (refused: ${refusal.gate ?? 'gate'})`,
1224
+ declared: named.length > 0 ? named : aimedAt ? [aimedAt] : [],
1225
+ route: 'loop',
1226
+ kind: 'refused',
1227
+ reason: `${refusal.summary}${aimedAt ? ` — path: ${aimedAt}` : ''}`,
1228
+ });
1229
+ }
1230
+ catch {
1231
+ // Best-effort — a hand-off write must never break the loop.
1232
+ }
1233
+ }
1149
1234
  }
1150
1235
  let resultText = executed[i];
1151
1236
  // P3c — on error/denial, append the deterministic fallback hint for
@@ -1444,6 +1529,69 @@ export function detectUnfulfilledIntentPromise(content) {
1444
1529
  * honest-answer flags so every surface (CLI, dashboard, gateway, trace) can
1445
1530
  * distinguish "generated a reply" from "actually performed the action".
1446
1531
  */
1532
+ /**
1533
+ * Keep ONE route frame in the thread, current with what is serving the turn.
1534
+ *
1535
+ * Insert/replace is deliberate: appending a frame per step would pile up stale
1536
+ * route claims the model can quote back ("I am gemini-2.5-flash" — from step 1,
1537
+ * after a failover), and rewriting unconditionally would churn the thread (and
1538
+ * the thread budget) on every step for no change in content.
1539
+ *
1540
+ * A caller with no route supplies nothing; a caller whose route resolves to the
1541
+ * same fact as last step gets no write.
1542
+ */
1543
+ function syncRouteFeed(thread, read, observed) {
1544
+ if (!read)
1545
+ return;
1546
+ let route = null;
1547
+ try {
1548
+ route = read();
1549
+ }
1550
+ catch {
1551
+ // A route read must never break the turn; an unknown route is a fact too.
1552
+ return;
1553
+ }
1554
+ if (!route)
1555
+ return;
1556
+ // The loop OWNS the failover history, because the loop is the only thing that
1557
+ // sees the sequence of routes it told the model about. Requiring each caller
1558
+ // to track it means every future caller can silently forget, and a model told
1559
+ // only the current pair describes the whole turn as having been run by it —
1560
+ // the same fabricated answer, one layer down.
1561
+ const currentPair = isUnresolvedModel(route.model) ? '' : `${route.providerType}/${route.model}`;
1562
+ const previous = [...(route.previous ?? [])];
1563
+ for (const pair of observed.pairs) {
1564
+ if (pair !== currentPair && !previous.includes(pair))
1565
+ previous.push(pair);
1566
+ }
1567
+ const rendered = previous.length > 0 ? { ...route, previous } : route;
1568
+ const fingerprint = routeFeedFingerprint(rendered);
1569
+ const index = thread.findIndex((m) => m.role === 'system' && typeof m.content === 'string' && m.content.startsWith(ROUTE_FEED_MARKER));
1570
+ if (currentPair && !observed.pairs.includes(currentPair))
1571
+ observed.pairs.push(currentPair);
1572
+ if (index === -1) {
1573
+ const frame = { role: 'system', content: routeFeedText(rendered) };
1574
+ // Immediately after the leading system prompt when there is one — the route
1575
+ // belongs with the run's own framing, not buried under tool output.
1576
+ const insertAt = thread.length > 0 && thread[0].role === 'system' ? 1 : 0;
1577
+ thread.splice(insertAt, 0, frame);
1578
+ routeFeedFingerprints.set(frame, fingerprint);
1579
+ return;
1580
+ }
1581
+ const existing = thread[index];
1582
+ if (routeFeedFingerprints.get(existing) === fingerprint)
1583
+ return;
1584
+ const updated = { role: 'system', content: routeFeedText(rendered) };
1585
+ thread[index] = updated;
1586
+ routeFeedFingerprints.delete(existing);
1587
+ routeFeedFingerprints.set(updated, fingerprint);
1588
+ }
1589
+ /**
1590
+ * Fingerprint per frame object, so a thread that was trimmed and re-built does
1591
+ * not re-write identical content. A WeakMap: a frame the loop drops is garbage
1592
+ * the moment nothing references it.
1593
+ */
1594
+ const routeFeedFingerprints = new WeakMap();
1447
1595
  export async function runToolLoop(opts) {
1448
1596
  const progress = {
1449
1597
  successfulToolCalls: [],