agent-nuvira 3.3.8 → 3.3.10
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.
- package/README.md +57 -50
- package/dist/agents/agents/planner.d.ts.map +1 -1
- package/dist/agents/agents/planner.js +41 -0
- package/dist/agents/agents/planner.js.map +1 -1
- package/dist/agents/agents/reasoner.d.ts.map +1 -1
- package/dist/agents/agents/reasoner.js +6 -0
- package/dist/agents/agents/reasoner.js.map +1 -1
- package/dist/agents/agents/runner.d.ts +6 -0
- package/dist/agents/agents/runner.d.ts.map +1 -1
- package/dist/agents/agents/runner.js +82 -5
- package/dist/agents/agents/runner.js.map +1 -1
- package/dist/agents/agents/writer-tool-calling.d.ts.map +1 -1
- package/dist/agents/agents/writer-tool-calling.js +5 -2
- package/dist/agents/agents/writer-tool-calling.js.map +1 -1
- package/dist/agents/agents/writer.d.ts.map +1 -1
- package/dist/agents/agents/writer.js +8 -4
- package/dist/agents/agents/writer.js.map +1 -1
- package/dist/agents/fanout-scheduler.d.ts +72 -0
- package/dist/agents/fanout-scheduler.d.ts.map +1 -0
- package/dist/agents/fanout-scheduler.js +100 -0
- package/dist/agents/fanout-scheduler.js.map +1 -0
- package/dist/agents/orchestrator.d.ts.map +1 -1
- package/dist/agents/orchestrator.js +30 -1
- package/dist/agents/orchestrator.js.map +1 -1
- package/dist/agents/plan-quality.d.ts +58 -0
- package/dist/agents/plan-quality.d.ts.map +1 -0
- package/dist/agents/plan-quality.js +152 -0
- package/dist/agents/plan-quality.js.map +1 -0
- package/dist/agents/prompt-assembly.d.ts +8 -0
- package/dist/agents/prompt-assembly.d.ts.map +1 -1
- package/dist/agents/prompt-assembly.js +18 -0
- package/dist/agents/prompt-assembly.js.map +1 -1
- package/dist/agents/step-handoff.d.ts +12 -2
- package/dist/agents/step-handoff.d.ts.map +1 -1
- package/dist/agents/step-handoff.js +65 -8
- package/dist/agents/step-handoff.js.map +1 -1
- package/dist/agents/tool-calling-agent.d.ts.map +1 -1
- package/dist/agents/tool-calling-agent.js +18 -0
- package/dist/agents/tool-calling-agent.js.map +1 -1
- package/dist/cli/cache.d.ts.map +1 -1
- package/dist/cli/cache.js +34 -4
- package/dist/cli/cache.js.map +1 -1
- package/dist/cli/chat.d.ts +6 -0
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +79 -18
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/cli-program.d.ts.map +1 -1
- package/dist/cli/cli-program.js +6 -0
- package/dist/cli/cli-program.js.map +1 -1
- package/dist/cli/config.d.ts +10 -0
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +179 -1
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/continuity.d.ts +61 -0
- package/dist/cli/continuity.d.ts.map +1 -0
- package/dist/cli/continuity.js +112 -0
- package/dist/cli/continuity.js.map +1 -0
- package/dist/cli/dashboard.d.ts +3 -1
- package/dist/cli/dashboard.d.ts.map +1 -1
- package/dist/cli/dashboard.js +5 -16
- package/dist/cli/dashboard.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +48 -1
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/execute.d.ts +8 -0
- package/dist/cli/execute.d.ts.map +1 -1
- package/dist/cli/execute.js +34 -1
- package/dist/cli/execute.js.map +1 -1
- package/dist/cli/loop-executor.d.ts +24 -0
- package/dist/cli/loop-executor.d.ts.map +1 -1
- package/dist/cli/loop-executor.js +134 -13
- package/dist/cli/loop-executor.js.map +1 -1
- package/dist/cli/website.d.ts +25 -0
- package/dist/cli/website.d.ts.map +1 -0
- package/dist/cli/website.js +58 -0
- package/dist/cli/website.js.map +1 -0
- package/dist/config/manager.d.ts.map +1 -1
- package/dist/config/manager.js +35 -0
- package/dist/config/manager.js.map +1 -1
- package/dist/config/process-env.d.ts.map +1 -1
- package/dist/config/process-env.js +20 -0
- package/dist/config/process-env.js.map +1 -1
- package/dist/config/provider-env.d.ts +2 -1
- package/dist/config/provider-env.d.ts.map +1 -1
- package/dist/config/provider-env.js +19 -2
- package/dist/config/provider-env.js.map +1 -1
- package/dist/config/service-catalog.d.ts +81 -0
- package/dist/config/service-catalog.d.ts.map +1 -0
- package/dist/config/service-catalog.js +286 -0
- package/dist/config/service-catalog.js.map +1 -0
- package/dist/config/service-probe.d.ts +27 -0
- package/dist/config/service-probe.d.ts.map +1 -0
- package/dist/config/service-probe.js +104 -0
- package/dist/config/service-probe.js.map +1 -0
- package/dist/config/types.d.ts +63 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/context/cache.d.ts +46 -2
- package/dist/context/cache.d.ts.map +1 -1
- package/dist/context/cache.js +85 -7
- package/dist/context/cache.js.map +1 -1
- package/dist/findings/verdicts.d.ts +59 -0
- package/dist/findings/verdicts.d.ts.map +1 -1
- package/dist/findings/verdicts.js +117 -0
- package/dist/findings/verdicts.js.map +1 -1
- package/dist/forwarded.d.ts +2 -0
- package/dist/forwarded.d.ts.map +1 -0
- package/dist/forwarded.js +2 -0
- package/dist/forwarded.js.map +1 -0
- package/dist/gateway/registry.d.ts.map +1 -1
- package/dist/gateway/registry.js +9 -0
- package/dist/gateway/registry.js.map +1 -1
- package/dist/learning/auto-router.d.ts +30 -0
- package/dist/learning/auto-router.d.ts.map +1 -1
- package/dist/learning/auto-router.js +69 -12
- package/dist/learning/auto-router.js.map +1 -1
- package/dist/learning/context-assembly.d.ts +37 -0
- package/dist/learning/context-assembly.d.ts.map +1 -0
- package/dist/learning/context-assembly.js +63 -0
- package/dist/learning/context-assembly.js.map +1 -0
- package/dist/learning/reasoning-trace.d.ts +26 -5
- package/dist/learning/reasoning-trace.d.ts.map +1 -1
- package/dist/learning/reasoning-trace.js +21 -1
- package/dist/learning/reasoning-trace.js.map +1 -1
- package/dist/learning/session-digest.d.ts +78 -0
- package/dist/learning/session-digest.d.ts.map +1 -0
- package/dist/learning/session-digest.js +185 -0
- package/dist/learning/session-digest.js.map +1 -0
- package/dist/learning/session-recall.d.ts +135 -0
- package/dist/learning/session-recall.d.ts.map +1 -0
- package/dist/learning/session-recall.js +305 -0
- package/dist/learning/session-recall.js.map +1 -0
- package/dist/learning/session-store.d.ts +172 -0
- package/dist/learning/session-store.d.ts.map +1 -0
- package/dist/learning/session-store.js +424 -0
- package/dist/learning/session-store.js.map +1 -0
- package/dist/learning/step-checkpoint.d.ts +28 -0
- package/dist/learning/step-checkpoint.d.ts.map +1 -1
- package/dist/learning/step-checkpoint.js +90 -6
- package/dist/learning/step-checkpoint.js.map +1 -1
- package/dist/learning/working-state.d.ts +19 -0
- package/dist/learning/working-state.d.ts.map +1 -1
- package/dist/learning/working-state.js +34 -1
- package/dist/learning/working-state.js.map +1 -1
- package/dist/parity/drivers.d.ts.map +1 -1
- package/dist/parity/drivers.js +29 -0
- package/dist/parity/drivers.js.map +1 -1
- package/dist/parity/wire-fixtures.d.ts +88 -0
- package/dist/parity/wire-fixtures.d.ts.map +1 -0
- package/dist/parity/wire-fixtures.js +405 -0
- package/dist/parity/wire-fixtures.js.map +1 -0
- package/dist/tools/artifact-append.d.ts +23 -0
- package/dist/tools/artifact-append.d.ts.map +1 -1
- package/dist/tools/artifact-append.js +28 -0
- package/dist/tools/artifact-append.js.map +1 -1
- package/dist/tools/ask-user.d.ts +5 -0
- package/dist/tools/ask-user.d.ts.map +1 -1
- package/dist/tools/ask-user.js +51 -5
- package/dist/tools/ask-user.js.map +1 -1
- package/dist/tools/child-agent-entry.js +1 -0
- package/dist/tools/child-agent-entry.js.map +1 -1
- package/dist/tools/child-agent-runtime.d.ts +7 -0
- package/dist/tools/child-agent-runtime.d.ts.map +1 -1
- package/dist/tools/child-agent-runtime.js +116 -6
- package/dist/tools/child-agent-runtime.js.map +1 -1
- package/dist/tools/child-agent-worker.d.ts +15 -0
- package/dist/tools/child-agent-worker.d.ts.map +1 -0
- package/dist/tools/child-agent-worker.js.map +1 -0
- package/dist/tools/coding-tools.d.ts.map +1 -1
- package/dist/tools/coding-tools.js +11 -0
- package/dist/tools/coding-tools.js.map +1 -1
- package/dist/tools/finding-tool.d.ts +6 -1
- package/dist/tools/finding-tool.d.ts.map +1 -1
- package/dist/tools/finding-tool.js +15 -2
- package/dist/tools/finding-tool.js.map +1 -1
- package/dist/tools/followup-utils.d.ts +35 -0
- package/dist/tools/followup-utils.d.ts.map +1 -1
- package/dist/tools/followup-utils.js +36 -0
- package/dist/tools/followup-utils.js.map +1 -1
- package/dist/tools/loop-project-context.d.ts +4 -1
- package/dist/tools/loop-project-context.d.ts.map +1 -1
- package/dist/tools/loop-project-context.js +48 -1
- package/dist/tools/loop-project-context.js.map +1 -1
- package/dist/tools/loop-skill-hint.d.ts.map +1 -1
- package/dist/tools/loop-skill-hint.js +7 -0
- package/dist/tools/loop-skill-hint.js.map +1 -1
- package/dist/tools/modality/image-gen.d.ts +25 -6
- package/dist/tools/modality/image-gen.d.ts.map +1 -1
- package/dist/tools/modality/image-gen.js +46 -27
- package/dist/tools/modality/image-gen.js.map +1 -1
- package/dist/tools/modality/image-providers.d.ts +71 -0
- package/dist/tools/modality/image-providers.d.ts.map +1 -0
- package/dist/tools/modality/image-providers.js +277 -0
- package/dist/tools/modality/image-providers.js.map +1 -0
- package/dist/tools/registry.d.ts +10 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +35 -8
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/run-cli.d.ts.map +1 -1
- package/dist/tools/run-cli.js +39 -1
- package/dist/tools/run-cli.js.map +1 -1
- package/dist/tools/run-terminal.d.ts.map +1 -1
- package/dist/tools/run-terminal.js +50 -6
- package/dist/tools/run-terminal.js.map +1 -1
- package/dist/tools/subagent-spawner.d.ts +8 -0
- package/dist/tools/subagent-spawner.d.ts.map +1 -1
- package/dist/tools/subagent-spawner.js +3 -0
- package/dist/tools/subagent-spawner.js.map +1 -1
- package/dist/tools/tool-loop.d.ts +55 -0
- package/dist/tools/tool-loop.d.ts.map +1 -1
- package/dist/tools/tool-loop.js +136 -0
- package/dist/tools/tool-loop.js.map +1 -1
- package/dist/tools/untrusted-content.d.ts +29 -0
- package/dist/tools/untrusted-content.d.ts.map +1 -0
- package/dist/tools/untrusted-content.js +53 -0
- package/dist/tools/untrusted-content.js.map +1 -0
- package/dist/tools/web-research.d.ts +76 -14
- package/dist/tools/web-research.d.ts.map +1 -1
- package/dist/tools/web-research.js +280 -35
- package/dist/tools/web-research.js.map +1 -1
- package/dist/utils/effect-verification.d.ts +115 -0
- package/dist/utils/effect-verification.d.ts.map +1 -0
- package/dist/utils/effect-verification.js +337 -0
- package/dist/utils/effect-verification.js.map +1 -0
- package/dist/utils/open-url.d.ts +16 -0
- package/dist/utils/open-url.d.ts.map +1 -0
- package/dist/utils/open-url.js +32 -0
- package/dist/utils/open-url.js.map +1 -0
- package/dist/utils/project-env.d.ts +146 -0
- package/dist/utils/project-env.d.ts.map +1 -0
- package/dist/utils/project-env.js +584 -0
- package/dist/utils/project-env.js.map +1 -0
- package/dist/utils/shell.d.ts +7 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +2 -0
- package/dist/utils/shell.js.map +1 -1
- package/dist/web-dashboard/chat-console.d.ts +2 -0
- package/dist/web-dashboard/chat-console.d.ts.map +1 -1
- package/dist/web-dashboard/chat-console.js +7 -0
- package/dist/web-dashboard/chat-console.js.map +1 -1
- package/dist/web-dashboard/server.d.ts +3 -1
- package/dist/web-dashboard/server.d.ts.map +1 -1
- package/dist/web-dashboard/server.js +534 -8
- package/dist/web-dashboard/server.js.map +1 -1
- package/dist/web-dashboard/src/types.d.ts +150 -1
- package/dist/web-dashboard/src/types.d.ts.map +1 -1
- package/dist/web-dashboard/workspace-guard.d.ts +40 -0
- package/dist/web-dashboard/workspace-guard.d.ts.map +1 -0
- package/dist/web-dashboard/workspace-guard.js +92 -0
- package/dist/web-dashboard/workspace-guard.js.map +1 -0
- package/package.json +3 -1
- package/src/web-dashboard/public/assets/index-Beportyl.js +207 -0
- package/src/web-dashboard/public/assets/index-Beportyl.js.map +1 -0
- package/src/web-dashboard/public/assets/index-gtQyg9nm.css +1 -0
- package/src/web-dashboard/public/index.html +2 -2
- package/src/web-dashboard/public/assets/index-J3sGSCLr.js +0 -207
- package/src/web-dashboard/public/assets/index-J3sGSCLr.js.map +0 -1
- package/src/web-dashboard/public/assets/index-u7mu-fxK.css +0 -1
package/dist/cli/cache.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
2
3
|
import { BaseCommand } from './commands.js';
|
|
3
4
|
import { getCache } from '../context/cache.js';
|
|
4
5
|
import { logger } from '../utils/logger.js';
|
|
@@ -16,9 +17,14 @@ export class CacheCommand extends BaseCommand {
|
|
|
16
17
|
await this.showStats();
|
|
17
18
|
}))
|
|
18
19
|
.addCommand(new Command('clear')
|
|
19
|
-
.description('Clear all
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
.description('Clear cached responses — all of them, or one workspace (project folder)')
|
|
21
|
+
// Clearing ONE workspace is the case that matters: answers are scoped
|
|
22
|
+
// to the folder they are about, so a project that changed needs its
|
|
23
|
+
// own answers dropped, not everyone else's.
|
|
24
|
+
.argument('[workspace]', 'only clear the answers cached for this project folder')
|
|
25
|
+
.option('--unscoped', 'clear the answers cached with no workspace attached')
|
|
26
|
+
.action(async (workspace, options) => {
|
|
27
|
+
await this.clearCache(workspace, options?.unscoped === true);
|
|
22
28
|
}))
|
|
23
29
|
.action(() => {
|
|
24
30
|
// Show stats by default
|
|
@@ -38,15 +44,39 @@ export class CacheCommand extends BaseCommand {
|
|
|
38
44
|
console.log(` ${provider}: ${count} entries`);
|
|
39
45
|
}
|
|
40
46
|
}
|
|
47
|
+
// By WORKSPACE — the folder each answer is about. An answer is a statement
|
|
48
|
+
// about a directory, so this is the grouping that tells you whether a stale
|
|
49
|
+
// reply is possible and which project to clear.
|
|
50
|
+
const workspaces = await cache.listByWorkspace();
|
|
51
|
+
if (workspaces.length > 0) {
|
|
52
|
+
console.log('\nBy workspace:');
|
|
53
|
+
for (const w of workspaces) {
|
|
54
|
+
const label = w.scope ?? '(no workspace attached)';
|
|
55
|
+
console.log(` ${label}: ${w.count} entr${w.count === 1 ? 'y' : 'ies'}`);
|
|
56
|
+
}
|
|
57
|
+
console.log('\nClear one with: agent-nuvira cache clear <workspace>\n');
|
|
58
|
+
}
|
|
41
59
|
console.log('');
|
|
42
60
|
}
|
|
43
61
|
catch (err) {
|
|
44
62
|
logger.error(String(err));
|
|
45
63
|
}
|
|
46
64
|
}
|
|
47
|
-
async clearCache() {
|
|
65
|
+
async clearCache(workspace, unscoped = false) {
|
|
48
66
|
try {
|
|
49
67
|
const cache = getCache();
|
|
68
|
+
if (unscoped) {
|
|
69
|
+
const removed = await cache.clearWorkspace(null);
|
|
70
|
+
logger.success(`Cleared ${removed} cached answer(s) with no workspace attached`);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (workspace) {
|
|
74
|
+
// Resolved to an absolute path so the match is the same directory the
|
|
75
|
+
// cache stored (a relative path would silently clear nothing).
|
|
76
|
+
const removed = await cache.clearWorkspace(resolve(workspace));
|
|
77
|
+
logger.success(`Cleared ${removed} cached answer(s) for ${resolve(workspace)}`);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
50
80
|
await cache.clear();
|
|
51
81
|
logger.success('Cache cleared successfully');
|
|
52
82
|
}
|
package/dist/cli/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cli/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C;;;GAGG;AACH,MAAM,OAAO,YAAa,SAAQ,WAAW;IAC3C,MAAM;QACJ,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;aACjC,WAAW,CAAC,wBAAwB,CAAC;aACrC,UAAU,CACT,IAAI,OAAO,CAAC,OAAO,CAAC;aACjB,WAAW,CAAC,uBAAuB,CAAC;aACpC,MAAM,CAAC,KAAK,IAAI,EAAE;YACjB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACzB,CAAC,CAAC,CACL;aACA,UAAU,CACT,IAAI,OAAO,CAAC,OAAO,CAAC;aACjB,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cli/cache.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/chat.d.ts
CHANGED
|
@@ -341,6 +341,12 @@ export declare class ChatCommand extends BaseCommand {
|
|
|
341
341
|
* artifact does not exist, so no surface may read it as finished work.
|
|
342
342
|
*/
|
|
343
343
|
undeliveredArtifact?: boolean;
|
|
344
|
+
/**
|
|
345
|
+
* A3 Part 2 — a BUILD command ran and FAILED this turn, no later build
|
|
346
|
+
* succeeded, and the answer still asserted the artifact came out good.
|
|
347
|
+
* Surfaces must not present such a turn as finished work.
|
|
348
|
+
*/
|
|
349
|
+
unverifiedBuildClaim?: boolean;
|
|
344
350
|
provider?: string;
|
|
345
351
|
model?: string;
|
|
346
352
|
/**
|
package/dist/cli/chat.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/cli/chat.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAc,MAAM,eAAe,CAAC;AAgBxD,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,gCAAgC,CAAC;AAsBxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAuBtD;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,OAAO,EAA+B,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGrF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/cli/chat.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/chat.js
CHANGED
|
@@ -44,8 +44,8 @@ import { runToolLoop, extractFallbackToolCalls } from '../tools/tool-loop.js';
|
|
|
44
44
|
// WS3 (#25) — the turn as a span, when an operator has asked for OTLP export.
|
|
45
45
|
import { flushSpans, otelNoticeOnce, startTurnSpan } from '../observability/otel.js';
|
|
46
46
|
import { detectAnswerQualityFailure, answerQualityError, toUserFacingGenerationError, isToolCallingUnsupported, stripToolCallArtifacts, } from '../inference/tool-call-utils.js';
|
|
47
|
-
import { beginTrace, endTrace, recordStep, recordTraceEvent, recordTraceFindings, buildTraceOutcome } from '../learning/reasoning-trace.js';
|
|
48
|
-
import { recordWorkingState, getWorkingState, formatWorkingState } from '../learning/working-state.js';
|
|
47
|
+
import { beginTrace, endTrace, recordStep, recordTraceEvent, recordTraceFindings, buildTraceOutcome, traceOutcomeSucceeded } from '../learning/reasoning-trace.js';
|
|
48
|
+
import { recordWorkingState, getWorkingState, formatWorkingState, isProjectLedgerDir } from '../learning/working-state.js';
|
|
49
49
|
import { getLoopExposureMode } from '../tools/toolsets.js';
|
|
50
50
|
import { resolveModelHarnessProfile, shouldSkipNativeTools } from '../learning/model-harness.js';
|
|
51
51
|
import { resolveAdapterDefault, hasCredentials } from '../learning/model-selection.js';
|
|
@@ -57,7 +57,7 @@ import { getTool, TOOL_CONTRACT_JSON } from '../tools/registry.js';
|
|
|
57
57
|
// WS1 — the finding tool's bus event, and the wire shape every surface reports.
|
|
58
58
|
import { FINDING_EVENT } from '../tools/finding-tool.js';
|
|
59
59
|
import { debugLogNotice, sessionDebugLog } from '../observability/debug-log.js';
|
|
60
|
-
import { buildFollowupContinuationPrompt, isSuggestedFollowup, } from '../tools/followup-utils.js';
|
|
60
|
+
import { buildFollowupContinuationPrompt, isSuggestedFollowup, withContinuationFollowups, } from '../tools/followup-utils.js';
|
|
61
61
|
// S2/S3 — the shared tool-call reliability helpers (salvage failed_generation,
|
|
62
62
|
// compact fallback schemas). One copy for every tool-calling surface, not
|
|
63
63
|
// chat-private (execute/plan/… inherit the fix).
|
|
@@ -513,6 +513,7 @@ export class ChatCommand extends BaseCommand {
|
|
|
513
513
|
unverifiedActionClaim: answer.unverifiedActionClaim,
|
|
514
514
|
unfulfilledPromise: answer.unfulfilledPromise,
|
|
515
515
|
undeliveredArtifact: answer.undeliveredArtifact,
|
|
516
|
+
unverifiedBuildClaim: answer.unverifiedBuildClaim,
|
|
516
517
|
// WS1 — the findings this turn recorded (empty when it recorded none).
|
|
517
518
|
findings: answer.findings ?? [],
|
|
518
519
|
provider: type,
|
|
@@ -943,12 +944,25 @@ export class ChatCommand extends BaseCommand {
|
|
|
943
944
|
...(ctxOverrides?.debugSession ? { session: ctxOverrides.debugSession } : {}),
|
|
944
945
|
goal: message,
|
|
945
946
|
});
|
|
947
|
+
/**
|
|
948
|
+
* The workspace this turn is ABOUT: the attached project when one was given,
|
|
949
|
+
* else this process's own cwd — the same directory `projectDir`/`turnCwd`
|
|
950
|
+
* below resolve to, computed HERE because the response cache needs it.
|
|
951
|
+
*
|
|
952
|
+
* Without it in the cache key, an answer was reused across projects: "what's
|
|
953
|
+
* the current status of this project?" asked in project B replayed the report
|
|
954
|
+
* generated in project A, and because the replayed text is a confident,
|
|
955
|
+
* well-formed answer about a real tree, it read as the agent ignoring the
|
|
956
|
+
* attached folder. Scoping the key makes every cached answer a statement
|
|
957
|
+
* about one directory.
|
|
958
|
+
*/
|
|
959
|
+
const turnScope = ctxOverrides?.projectPath || process.cwd();
|
|
946
960
|
// Cache check first (same as the legacy path).
|
|
947
961
|
const cache = getCache();
|
|
948
962
|
const cacheModel = this.cacheModelFor(session);
|
|
949
963
|
if (cacheEnabled) {
|
|
950
964
|
try {
|
|
951
|
-
const cachedResult = await cache.get(message, cacheModel, session.type);
|
|
965
|
+
const cachedResult = await cache.get(message, cacheModel, session.type, turnScope);
|
|
952
966
|
if (cachedResult) {
|
|
953
967
|
// NOTE: the cached answer is NOT printed here — the caller prints
|
|
954
968
|
// content AFTER runChatAnswer returns (answer-first ordering). A
|
|
@@ -959,7 +973,10 @@ export class ChatCommand extends BaseCommand {
|
|
|
959
973
|
this.memoryNoteTurn(message, cachedResult);
|
|
960
974
|
// WS2 — a cache replay reached no model, so the log says exactly that
|
|
961
975
|
// rather than borrowing an attribution from a turn that did not run.
|
|
962
|
-
|
|
976
|
+
// The workspace the replayed answer belongs to is recorded with the hit:
|
|
977
|
+
// a cache replay does no work, so "which project is this answer about?"
|
|
978
|
+
// is the one fact needed to tell a replay from a real turn.
|
|
979
|
+
debugLog?.event('cache.hit', { chars: cachedResult.length, scope: turnScope });
|
|
963
980
|
const cacheNotice = debugLogNotice(ctxOverrides?.debugSurface ?? 'cli-chat', debugLog?.write() ?? null);
|
|
964
981
|
if (cacheNotice)
|
|
965
982
|
logger.info(cacheNotice);
|
|
@@ -992,7 +1009,10 @@ export class ChatCommand extends BaseCommand {
|
|
|
992
1009
|
* in, and what it changed.
|
|
993
1010
|
*/
|
|
994
1011
|
const report = ctxOverrides?.onProgress ?? ((line) => void logger.info(line));
|
|
995
|
-
|
|
1012
|
+
// Same directory the cache key above is scoped to (see `turnScope`) — one
|
|
1013
|
+
// resolution per turn, so the cached answer and the work cannot disagree
|
|
1014
|
+
// about which project the turn belongs to.
|
|
1015
|
+
const projectDir = turnScope;
|
|
996
1016
|
const isolationRequest = resolveIsolationRequest({
|
|
997
1017
|
worktree: ctxOverrides?.worktree,
|
|
998
1018
|
keepWorktree: ctxOverrides?.keepWorktree,
|
|
@@ -1139,8 +1159,16 @@ export class ChatCommand extends BaseCommand {
|
|
|
1139
1159
|
// what previous turns already established. This is the fix for the
|
|
1140
1160
|
// calculator session's core drift (it re-diagnosed the same root cause six
|
|
1141
1161
|
// times, then undid its own earlier fixes).
|
|
1162
|
+
// G4 — the ledger is a claim about a PROJECT, so it is only read for a
|
|
1163
|
+
// directory that can honestly be one. A home directory (or a filesystem
|
|
1164
|
+
// root) is a container of unrelated checkouts: injecting its ledger as
|
|
1165
|
+
// "THIS project's" working state is how "what's the state of this project?"
|
|
1166
|
+
// came back describing an NVDA add-on nobody had mentioned. See
|
|
1167
|
+
// isProjectLedgerDir.
|
|
1142
1168
|
const workingStatePath = turnCwd;
|
|
1143
|
-
const workingStateBlock =
|
|
1169
|
+
const workingStateBlock = isProjectLedgerDir(workingStatePath)
|
|
1170
|
+
? formatWorkingState(getWorkingState(workingStatePath))
|
|
1171
|
+
: '';
|
|
1144
1172
|
// Session 3 — channel/format policy lives in the STABLE layer. It is
|
|
1145
1173
|
// identical on every message, so keeping it here makes the system prompt
|
|
1146
1174
|
// byte-stable (prompt-cacheable) AND removes it from the volatile user
|
|
@@ -1484,7 +1512,7 @@ export class ChatCommand extends BaseCommand {
|
|
|
1484
1512
|
// Record WHAT HAPPENED, not just "the model answered": a hallucinated
|
|
1485
1513
|
// "I have sent it" (no tool ran) must be visible as an unverified claim in
|
|
1486
1514
|
// the Trace tab instead of looking like a real delivery.
|
|
1487
|
-
|
|
1515
|
+
const chatOutcome = buildTraceOutcome({
|
|
1488
1516
|
generationFailed: result.generationFailed,
|
|
1489
1517
|
cancelled: result.cancelled,
|
|
1490
1518
|
// What actually RAN successfully, not what was attempted: a failed
|
|
@@ -1496,7 +1524,12 @@ export class ChatCommand extends BaseCommand {
|
|
|
1496
1524
|
unverifiedEdit: result.unverifiedEdit,
|
|
1497
1525
|
unverifiedEditClaim: result.unverifiedEditClaim,
|
|
1498
1526
|
undeliveredArtifact: result.undeliveredArtifact,
|
|
1499
|
-
|
|
1527
|
+
unverifiedBuildClaim: result.unverifiedBuildClaim,
|
|
1528
|
+
});
|
|
1529
|
+
// A cancelled / failed / incomplete turn is NOT a success. `!generationFailed`
|
|
1530
|
+
// used to let a cancelled run record `success: true` while its outcome said
|
|
1531
|
+
// `cancelled`, so nothing downstream offered to continue it.
|
|
1532
|
+
endTrace(chatTraceId, traceOutcomeSucceeded(chatOutcome), chatOutcome);
|
|
1500
1533
|
// WS1 (#23) — persist the turn's findings (claim, outcome, evidence and the
|
|
1501
1534
|
// gate's verdict) on the trace, so the verdicts can be audited from the
|
|
1502
1535
|
// Trace tab after the run instead of only existing in this turn's return.
|
|
@@ -1509,13 +1542,19 @@ export class ChatCommand extends BaseCommand {
|
|
|
1509
1542
|
try {
|
|
1510
1543
|
const activity = result.successfulToolCalls ?? [];
|
|
1511
1544
|
const verified = activity.some((t) => t === 'run_terminal' || t === 'test' || t === 'browser' || t === 'run_cli');
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1545
|
+
// …and it is only WRITTEN for a real project, so a home-directory turn
|
|
1546
|
+
// stops growing a ledger that no future turn may honestly use. (The same
|
|
1547
|
+
// guard as the read above — read and write must agree on what a project is,
|
|
1548
|
+
// or the block would be empty forever while the file kept accumulating.)
|
|
1549
|
+
if (isProjectLedgerDir(workingStatePath)) {
|
|
1550
|
+
recordWorkingState(workingStatePath, {
|
|
1551
|
+
filesTouched: [...touchedFiles],
|
|
1552
|
+
toolsUsed: activity,
|
|
1553
|
+
verified,
|
|
1554
|
+
unverifiedEdit: result.unverifiedEdit === true,
|
|
1555
|
+
userMessage: message,
|
|
1556
|
+
});
|
|
1557
|
+
}
|
|
1519
1558
|
}
|
|
1520
1559
|
catch {
|
|
1521
1560
|
// Best-effort.
|
|
@@ -1544,6 +1583,11 @@ export class ChatCommand extends BaseCommand {
|
|
|
1544
1583
|
if (result.undeliveredArtifact) {
|
|
1545
1584
|
logger.warn(' ⚠️ This request asked for a written deliverable, but NO file was written this turn — the text above is the answer, not the artifact.');
|
|
1546
1585
|
}
|
|
1586
|
+
// A3 Part 2 — the build-honesty warning: the run's OWN evidence says the
|
|
1587
|
+
// build failed, so the success prose above is contradicted by the turn.
|
|
1588
|
+
if (result.unverifiedBuildClaim) {
|
|
1589
|
+
logger.warn(' ⚠️ A build command FAILED this turn and no later build succeeded, but the reply reports success — treat the build as UNVERIFIED.');
|
|
1590
|
+
}
|
|
1547
1591
|
}
|
|
1548
1592
|
catch {
|
|
1549
1593
|
// Best-effort.
|
|
@@ -1561,7 +1605,7 @@ export class ChatCommand extends BaseCommand {
|
|
|
1561
1605
|
// on success), so a weak model's reply is never replayed as a strong
|
|
1562
1606
|
// model's. `cacheModel` is the pre-flight fallback for the paths that
|
|
1563
1607
|
// never resolve one (e.g. a cached-hit turn).
|
|
1564
|
-
await cache.set(message, result.content, this.cacheModelFor(session) || cacheModel, session.type);
|
|
1608
|
+
await cache.set(message, result.content, this.cacheModelFor(session) || cacheModel, session.type, undefined, turnScope);
|
|
1565
1609
|
}
|
|
1566
1610
|
catch {
|
|
1567
1611
|
// Best-effort.
|
|
@@ -1627,16 +1671,33 @@ export class ChatCommand extends BaseCommand {
|
|
|
1627
1671
|
logger.info(otelLine);
|
|
1628
1672
|
await flushSpans();
|
|
1629
1673
|
}
|
|
1674
|
+
// A4 — an unfinished turn (cancelled, or an outcome that did not conclude)
|
|
1675
|
+
// offers the way back in: Continue / Retry, on top of the model's own
|
|
1676
|
+
// suggestions. A concluded turn is left exactly as it was.
|
|
1677
|
+
const chatOutcomeForFollowups = buildTraceOutcome({
|
|
1678
|
+
generationFailed: result.generationFailed,
|
|
1679
|
+
cancelled: result.cancelled,
|
|
1680
|
+
tools: result.successfulToolCalls ?? result.toolCalls,
|
|
1681
|
+
unverifiedActionClaim: result.unverifiedActionClaim,
|
|
1682
|
+
unfulfilledPromise: result.unfulfilledPromise,
|
|
1683
|
+
undeliveredArtifact: result.undeliveredArtifact,
|
|
1684
|
+
unverifiedBuildClaim: result.unverifiedBuildClaim,
|
|
1685
|
+
});
|
|
1686
|
+
const chatFollowups = withContinuationFollowups(result.followups, {
|
|
1687
|
+
unfinished: !traceOutcomeSucceeded(chatOutcomeForFollowups),
|
|
1688
|
+
hadTools: (result.successfulToolCalls ?? result.toolCalls ?? []).length > 0,
|
|
1689
|
+
});
|
|
1630
1690
|
return finish({
|
|
1631
1691
|
content: stripToolCallArtifacts(result.content),
|
|
1632
1692
|
generationFailed: result.generationFailed,
|
|
1633
1693
|
cancelled: result.cancelled,
|
|
1634
1694
|
bounded: result.bounded,
|
|
1635
|
-
followups:
|
|
1695
|
+
followups: chatFollowups,
|
|
1636
1696
|
toolCalls: result.toolCalls,
|
|
1637
1697
|
unverifiedActionClaim: result.unverifiedActionClaim,
|
|
1638
1698
|
unfulfilledPromise: result.unfulfilledPromise,
|
|
1639
1699
|
undeliveredArtifact: result.undeliveredArtifact,
|
|
1700
|
+
unverifiedBuildClaim: result.unverifiedBuildClaim,
|
|
1640
1701
|
// R2 — the transport this turn travelled on (interactive REPL path).
|
|
1641
1702
|
transport: result.transport,
|
|
1642
1703
|
// WS1 — the findings this turn recorded, with their verdicts.
|