@orion-agents/orion-code 0.1.8 → 0.1.9
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/CHANGELOG.md +445 -0
- package/README.md +15 -6
- package/README.zh-CN.md +26 -7
- package/dist/agents/coordinator.d.ts.map +1 -1
- package/dist/agents/coordinator.js +49 -9
- package/dist/agents/coordinator.js.map +1 -1
- package/dist/agents/fork.d.ts +5 -1
- package/dist/agents/fork.d.ts.map +1 -1
- package/dist/agents/fork.js +9 -10
- package/dist/agents/fork.js.map +1 -1
- package/dist/agents/worker-pool.d.ts.map +1 -1
- package/dist/agents/worker-pool.js +8 -3
- package/dist/agents/worker-pool.js.map +1 -1
- package/dist/cli.js +6 -6
- package/dist/cli.js.map +1 -1
- package/dist/commands/context-tool-command-handlers.d.ts.map +1 -1
- package/dist/commands/context-tool-command-handlers.js +42 -0
- package/dist/commands/context-tool-command-handlers.js.map +1 -1
- package/dist/commands/model-command-handlers.d.ts +1 -1
- package/dist/commands/model-command-handlers.d.ts.map +1 -1
- package/dist/commands/model-command-handlers.js +166 -1
- package/dist/commands/model-command-handlers.js.map +1 -1
- package/dist/commands/session-command-handlers.d.ts.map +1 -1
- package/dist/commands/session-command-handlers.js +97 -5
- package/dist/commands/session-command-handlers.js.map +1 -1
- package/dist/commands/session-commands.js +2 -2
- package/dist/commands/session-commands.js.map +1 -1
- package/dist/commands/types.d.ts +6 -0
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js.map +1 -1
- package/dist/framework/index.d.ts +5 -3
- package/dist/framework/index.d.ts.map +1 -1
- package/dist/framework/index.js +9 -1
- package/dist/framework/index.js.map +1 -1
- package/dist/framework/query.d.ts +26 -4
- package/dist/framework/query.d.ts.map +1 -1
- package/dist/framework/query.js +319 -62
- package/dist/framework/query.js.map +1 -1
- package/dist/framework/stop-decision.d.ts +56 -0
- package/dist/framework/stop-decision.d.ts.map +1 -0
- package/dist/framework/stop-decision.js +36 -0
- package/dist/framework/stop-decision.js.map +1 -0
- package/dist/framework/tool-scheduler.d.ts +5 -0
- package/dist/framework/tool-scheduler.d.ts.map +1 -1
- package/dist/framework/tool-scheduler.js +24 -9
- package/dist/framework/tool-scheduler.js.map +1 -1
- package/dist/harness/assembler.d.ts.map +1 -1
- package/dist/harness/assembler.js +77 -19
- package/dist/harness/assembler.js.map +1 -1
- package/dist/harness/capability-profile.d.ts +3 -0
- package/dist/harness/capability-profile.d.ts.map +1 -0
- package/dist/harness/capability-profile.js +44 -0
- package/dist/harness/capability-profile.js.map +1 -0
- package/dist/harness/capsule.d.ts.map +1 -1
- package/dist/harness/capsule.js +22 -3
- package/dist/harness/capsule.js.map +1 -1
- package/dist/harness/compact-benchmark-corpus.d.ts +10 -0
- package/dist/harness/compact-benchmark-corpus.d.ts.map +1 -0
- package/dist/harness/compact-benchmark-corpus.js +56 -0
- package/dist/harness/compact-benchmark-corpus.js.map +1 -0
- package/dist/harness/context-harness.d.ts +23 -3
- package/dist/harness/context-harness.d.ts.map +1 -1
- package/dist/harness/context-harness.js +183 -11
- package/dist/harness/context-harness.js.map +1 -1
- package/dist/harness/contract.d.ts.map +1 -1
- package/dist/harness/contract.js +106 -11
- package/dist/harness/contract.js.map +1 -1
- package/dist/harness/drift-guard.d.ts +2 -1
- package/dist/harness/drift-guard.d.ts.map +1 -1
- package/dist/harness/drift-guard.js +315 -20
- package/dist/harness/drift-guard.js.map +1 -1
- package/dist/harness/evidence.d.ts.map +1 -1
- package/dist/harness/evidence.js +25 -12
- package/dist/harness/evidence.js.map +1 -1
- package/dist/harness/index.d.ts +7 -2
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +19 -1
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/ledger.d.ts.map +1 -1
- package/dist/harness/ledger.js +44 -14
- package/dist/harness/ledger.js.map +1 -1
- package/dist/harness/progress-controller.d.ts +14 -0
- package/dist/harness/progress-controller.d.ts.map +1 -0
- package/dist/harness/progress-controller.js +110 -0
- package/dist/harness/progress-controller.js.map +1 -0
- package/dist/harness/state.d.ts.map +1 -1
- package/dist/harness/state.js +5 -2
- package/dist/harness/state.js.map +1 -1
- package/dist/harness/stop-controller.d.ts +15 -0
- package/dist/harness/stop-controller.d.ts.map +1 -0
- package/dist/harness/stop-controller.js +87 -0
- package/dist/harness/stop-controller.js.map +1 -0
- package/dist/harness/types.d.ts +137 -0
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/verification.d.ts +7 -0
- package/dist/harness/verification.d.ts.map +1 -0
- package/dist/harness/verification.js +122 -0
- package/dist/harness/verification.js.map +1 -0
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/ink-ui/screens/ReplScreen.d.ts +3 -0
- package/dist/ink-ui/screens/ReplScreen.d.ts.map +1 -1
- package/dist/ink-ui/screens/ReplScreen.js +30 -5
- package/dist/ink-ui/screens/ReplScreen.js.map +1 -1
- package/dist/memory/index.d.ts +1 -0
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +1 -0
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/prompt-context.d.ts +42 -0
- package/dist/memory/prompt-context.d.ts.map +1 -0
- package/dist/memory/prompt-context.js +129 -0
- package/dist/memory/prompt-context.js.map +1 -0
- package/dist/runtime/chat-compact.d.ts +26 -0
- package/dist/runtime/chat-compact.d.ts.map +1 -0
- package/dist/runtime/chat-compact.js +132 -0
- package/dist/runtime/chat-compact.js.map +1 -0
- package/dist/runtime/chat-controller.d.ts.map +1 -1
- package/dist/runtime/chat-controller.js +64 -74
- package/dist/runtime/chat-controller.js.map +1 -1
- package/dist/runtime/goals/coordinator.d.ts +3 -0
- package/dist/runtime/goals/coordinator.d.ts.map +1 -1
- package/dist/runtime/goals/coordinator.js +5 -15
- package/dist/runtime/goals/coordinator.js.map +1 -1
- package/dist/runtime/goals/prompt.js +1 -1
- package/dist/runtime/goals/prompt.js.map +1 -1
- package/dist/runtime/goals/stop-policy.d.ts +9 -0
- package/dist/runtime/goals/stop-policy.d.ts.map +1 -0
- package/dist/runtime/goals/stop-policy.js +83 -0
- package/dist/runtime/goals/stop-policy.js.map +1 -0
- package/dist/runtime/goals/types.d.ts +0 -1
- package/dist/runtime/goals/types.d.ts.map +1 -1
- package/dist/runtime/goals/types.js +0 -1
- package/dist/runtime/goals/types.js.map +1 -1
- package/dist/runtime/model-coordinator.d.ts +44 -1
- package/dist/runtime/model-coordinator.d.ts.map +1 -1
- package/dist/runtime/model-coordinator.js +161 -19
- package/dist/runtime/model-coordinator.js.map +1 -1
- package/dist/runtime/subagents/index.d.ts +1 -1
- package/dist/runtime/subagents/index.d.ts.map +1 -1
- package/dist/runtime/subagents/index.js.map +1 -1
- package/dist/runtime/subagents/production.d.ts +6 -2
- package/dist/runtime/subagents/production.d.ts.map +1 -1
- package/dist/runtime/subagents/production.js +25 -6
- package/dist/runtime/subagents/production.js.map +1 -1
- package/dist/runtime/subagents/runner.d.ts +12 -1
- package/dist/runtime/subagents/runner.d.ts.map +1 -1
- package/dist/runtime/subagents/runner.js +62 -1
- package/dist/runtime/subagents/runner.js.map +1 -1
- package/dist/runtime/subagents/runtime-integration.d.ts.map +1 -1
- package/dist/runtime/subagents/runtime-integration.js +2 -1
- package/dist/runtime/subagents/runtime-integration.js.map +1 -1
- package/dist/runtime/subagents/supervisor.d.ts.map +1 -1
- package/dist/runtime/subagents/supervisor.js +6 -0
- package/dist/runtime/subagents/supervisor.js.map +1 -1
- package/dist/runtime/subagents/types.d.ts +4 -1
- package/dist/runtime/subagents/types.d.ts.map +1 -1
- package/dist/runtime/subagents/types.js.map +1 -1
- package/dist/runtime/ui-events.d.ts +2 -0
- package/dist/runtime/ui-events.d.ts.map +1 -1
- package/dist/runtime/ui-events.js.map +1 -1
- package/dist/services/compact/auto-compact.d.ts +82 -2
- package/dist/services/compact/auto-compact.d.ts.map +1 -1
- package/dist/services/compact/auto-compact.js +226 -44
- package/dist/services/compact/auto-compact.js.map +1 -1
- package/dist/services/compact/compact.d.ts +54 -37
- package/dist/services/compact/compact.d.ts.map +1 -1
- package/dist/services/compact/compact.js +512 -127
- package/dist/services/compact/compact.js.map +1 -1
- package/dist/services/compact/coordinator.d.ts +5 -1
- package/dist/services/compact/coordinator.d.ts.map +1 -1
- package/dist/services/compact/coordinator.js +10 -1
- package/dist/services/compact/coordinator.js.map +1 -1
- package/dist/services/compact/fingerprint.d.ts +27 -0
- package/dist/services/compact/fingerprint.d.ts.map +1 -0
- package/dist/services/compact/fingerprint.js +69 -0
- package/dist/services/compact/fingerprint.js.map +1 -0
- package/dist/services/compact/index.d.ts +7 -5
- package/dist/services/compact/index.d.ts.map +1 -1
- package/dist/services/compact/index.js +19 -6
- package/dist/services/compact/index.js.map +1 -1
- package/dist/services/compact/planner.d.ts +41 -0
- package/dist/services/compact/planner.d.ts.map +1 -0
- package/dist/services/compact/planner.js +102 -0
- package/dist/services/compact/planner.js.map +1 -0
- package/dist/services/compact/semantic-summary.d.ts +93 -0
- package/dist/services/compact/semantic-summary.d.ts.map +1 -0
- package/dist/services/compact/semantic-summary.js +158 -0
- package/dist/services/compact/semantic-summary.js.map +1 -0
- package/dist/services/compact/summary-generator.d.ts +23 -0
- package/dist/services/compact/summary-generator.d.ts.map +1 -1
- package/dist/services/compact/summary-generator.js +173 -39
- package/dist/services/compact/summary-generator.js.map +1 -1
- package/dist/services/file-context.d.ts.map +1 -1
- package/dist/services/file-context.js +29 -33
- package/dist/services/file-context.js.map +1 -1
- package/dist/services/global-config.d.ts +6 -0
- package/dist/services/global-config.d.ts.map +1 -1
- package/dist/services/global-config.js +8 -0
- package/dist/services/global-config.js.map +1 -1
- package/dist/services/llm.d.ts +3 -0
- package/dist/services/llm.d.ts.map +1 -1
- package/dist/services/llm.js +7 -0
- package/dist/services/llm.js.map +1 -1
- package/dist/services/project-instructions.d.ts.map +1 -1
- package/dist/services/project-instructions.js +10 -17
- package/dist/services/project-instructions.js.map +1 -1
- package/dist/services/safe-project-reader.d.ts +30 -0
- package/dist/services/safe-project-reader.d.ts.map +1 -0
- package/dist/services/safe-project-reader.js +141 -0
- package/dist/services/safe-project-reader.js.map +1 -0
- package/dist/services/session-storage.d.ts +134 -5
- package/dist/services/session-storage.d.ts.map +1 -1
- package/dist/services/session-storage.js +727 -57
- package/dist/services/session-storage.js.map +1 -1
- package/dist/services/usage-state.d.ts +7 -0
- package/dist/services/usage-state.d.ts.map +1 -1
- package/dist/services/usage-state.js +117 -16
- package/dist/services/usage-state.js.map +1 -1
- package/dist/skills/runtime.d.ts.map +1 -1
- package/dist/skills/runtime.js +34 -35
- package/dist/skills/runtime.js.map +1 -1
- package/docs/migration/v0.1.8-to-v0.1.9.md +60 -0
- package/docs/plan/v0.1.9-release-checklist.md +64 -0
- package/docs/readme.md +27 -0
- package/npm-shrinkwrap.json +14 -38
- package/package.json +5 -1
- package/dist/services/compact/micro-compact.d.ts +0 -21
- package/dist/services/compact/micro-compact.d.ts.map +0 -1
- package/dist/services/compact/micro-compact.js +0 -99
- package/dist/services/compact/micro-compact.js.map +0 -1
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildMemoryPromptContext = buildMemoryPromptContext;
|
|
4
|
+
const entrypoint_1 = require("./entrypoint");
|
|
5
|
+
const relevant_finder_1 = require("./relevant-finder");
|
|
6
|
+
const storage_1 = require("./storage");
|
|
7
|
+
const DEFAULT_TOTAL_CHARS = 24000;
|
|
8
|
+
const DEFAULT_ENTRYPOINT_CHARS = 8000;
|
|
9
|
+
const DEFAULT_RELEVANT_ENTRIES = 5;
|
|
10
|
+
const DEFAULT_ENTRY_CHARS = 3000;
|
|
11
|
+
const MAX_RELEVANCE_CANDIDATES = 20;
|
|
12
|
+
function boundedInteger(value, fallback, maximum) {
|
|
13
|
+
if (value === undefined)
|
|
14
|
+
return fallback;
|
|
15
|
+
if (!Number.isSafeInteger(value))
|
|
16
|
+
return fallback;
|
|
17
|
+
return Math.max(0, Math.min(value, maximum));
|
|
18
|
+
}
|
|
19
|
+
function appendWithinBudget(parts, value, budget) {
|
|
20
|
+
const used = parts.reduce((total, part) => total + part.length, 0);
|
|
21
|
+
if (used >= budget)
|
|
22
|
+
return '';
|
|
23
|
+
const included = value.slice(0, budget - used);
|
|
24
|
+
parts.push(included);
|
|
25
|
+
return included;
|
|
26
|
+
}
|
|
27
|
+
function findIndexCandidates(index, query, minScore, limit) {
|
|
28
|
+
const queryKeywords = (0, relevant_finder_1.extractKeywords)(query);
|
|
29
|
+
if (queryKeywords.length === 0)
|
|
30
|
+
return [];
|
|
31
|
+
const candidates = [];
|
|
32
|
+
for (const line of index.split('\n')) {
|
|
33
|
+
const linkStart = line.lastIndexOf('](');
|
|
34
|
+
const hookStart = linkStart >= 0 ? line.indexOf(') — ', linkStart + 2) : -1;
|
|
35
|
+
if (linkStart < 0 || hookStart < 0)
|
|
36
|
+
continue;
|
|
37
|
+
const target = line.slice(linkStart + 2, hookStart);
|
|
38
|
+
if (!target.endsWith('.md'))
|
|
39
|
+
continue;
|
|
40
|
+
const name = target.slice(0, -3);
|
|
41
|
+
const hook = line.slice(hookStart + 4);
|
|
42
|
+
const memoryKeywords = (0, relevant_finder_1.extractKeywords)(`${name} ${hook}`);
|
|
43
|
+
const matchedKeywords = queryKeywords.filter(queryKeyword => memoryKeywords.some(memoryKeyword => memoryKeyword === queryKeyword ||
|
|
44
|
+
memoryKeyword.includes(queryKeyword) ||
|
|
45
|
+
queryKeyword.includes(memoryKeyword)));
|
|
46
|
+
const score = matchedKeywords.length / queryKeywords.length;
|
|
47
|
+
if (score >= minScore)
|
|
48
|
+
candidates.push({ name, score, matchedKeywords });
|
|
49
|
+
}
|
|
50
|
+
return candidates
|
|
51
|
+
.sort((left, right) => right.score - left.score || left.name.localeCompare(right.name))
|
|
52
|
+
.slice(0, limit);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Build a deterministic, bounded memory projection for a model-visible prompt.
|
|
56
|
+
*
|
|
57
|
+
* This is an integration API only: callers choose where the returned content
|
|
58
|
+
* is injected and should persist the manifest beside the request receipt.
|
|
59
|
+
*/
|
|
60
|
+
function buildMemoryPromptContext(query, projectPath, options = {}) {
|
|
61
|
+
const maxTotalChars = boundedInteger(options.maxTotalChars, DEFAULT_TOTAL_CHARS, 100000);
|
|
62
|
+
const maxEntrypointChars = Math.min(boundedInteger(options.maxEntrypointChars, DEFAULT_ENTRYPOINT_CHARS, 25000), maxTotalChars);
|
|
63
|
+
const maxRelevantEntries = boundedInteger(options.maxRelevantEntries, DEFAULT_RELEVANT_ENTRIES, 10);
|
|
64
|
+
const maxEntryChars = boundedInteger(options.maxEntryChars, DEFAULT_ENTRY_CHARS, 12000);
|
|
65
|
+
const minScore = Number.isFinite(options.minScore) && options.minScore !== undefined
|
|
66
|
+
? Math.max(0, Math.min(options.minScore, 1))
|
|
67
|
+
: 0.1;
|
|
68
|
+
const rawEntrypoint = (0, storage_1.loadMemoryIndex)(projectPath);
|
|
69
|
+
const normalizedEntrypoint = (0, entrypoint_1.truncateIfNeeded)(rawEntrypoint).content;
|
|
70
|
+
const entrypoint = normalizedEntrypoint.slice(0, maxEntrypointChars);
|
|
71
|
+
const candidateLimit = Math.min(MAX_RELEVANCE_CANDIDATES, Math.max(maxRelevantEntries + 1, maxRelevantEntries * 4));
|
|
72
|
+
const candidates = query.trim()
|
|
73
|
+
? findIndexCandidates(normalizedEntrypoint, query, minScore, candidateLimit)
|
|
74
|
+
: [];
|
|
75
|
+
const parts = [];
|
|
76
|
+
let includedEntrypoint = '';
|
|
77
|
+
if (entrypoint) {
|
|
78
|
+
appendWithinBudget(parts, '## Memory index\n\n', maxTotalChars);
|
|
79
|
+
includedEntrypoint = appendWithinBudget(parts, entrypoint, maxTotalChars);
|
|
80
|
+
}
|
|
81
|
+
const selected = [];
|
|
82
|
+
const omitted = [];
|
|
83
|
+
for (const candidate of candidates) {
|
|
84
|
+
if (selected.length >= maxRelevantEntries) {
|
|
85
|
+
omitted.push({ name: candidate.name, reason: 'entry_limit' });
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const memory = (0, storage_1.loadMemory)(candidate.name, projectPath);
|
|
89
|
+
if (!memory) {
|
|
90
|
+
omitted.push({ name: candidate.name, reason: 'unavailable' });
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
const separator = parts.length > 0 ? '\n\n' : '';
|
|
94
|
+
const header = `${separator}## Relevant memory: ${memory.name} (${memory.type})\n\n`;
|
|
95
|
+
const body = memory.content.slice(0, maxEntryChars);
|
|
96
|
+
const available = maxTotalChars - parts.reduce((total, part) => total + part.length, 0);
|
|
97
|
+
if (available <= header.length) {
|
|
98
|
+
omitted.push({ name: memory.name, reason: 'budget' });
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
appendWithinBudget(parts, header, maxTotalChars);
|
|
102
|
+
const includedBody = appendWithinBudget(parts, body, maxTotalChars);
|
|
103
|
+
selected.push({
|
|
104
|
+
name: memory.name,
|
|
105
|
+
type: memory.type,
|
|
106
|
+
score: candidate.score,
|
|
107
|
+
matchedKeywords: candidate.matchedKeywords.slice(0, 8),
|
|
108
|
+
includedChars: includedBody.length,
|
|
109
|
+
truncated: includedBody.length < memory.content.length || memory.content.length > maxEntryChars,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
const content = parts.join('');
|
|
113
|
+
return {
|
|
114
|
+
content,
|
|
115
|
+
manifest: {
|
|
116
|
+
budgetChars: maxTotalChars,
|
|
117
|
+
usedChars: content.length,
|
|
118
|
+
candidateCount: candidates.length,
|
|
119
|
+
entrypoint: {
|
|
120
|
+
originalChars: normalizedEntrypoint.length,
|
|
121
|
+
includedChars: includedEntrypoint.length,
|
|
122
|
+
truncated: includedEntrypoint.length < normalizedEntrypoint.length,
|
|
123
|
+
},
|
|
124
|
+
selected,
|
|
125
|
+
omitted,
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=prompt-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-context.js","sourceRoot":"","sources":["../../src/memory/prompt-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { QueryCompactCommit } from '../framework';
|
|
2
|
+
import type { Store } from '../framework/store';
|
|
3
|
+
import type { HarnessState } from '../harness';
|
|
4
|
+
import { type SessionMessage } from '../services/session-storage';
|
|
5
|
+
import type { SessionGoalV1 } from './goals/types';
|
|
6
|
+
import type { UiEventSink } from './ui-events';
|
|
7
|
+
interface CommitChatCompactInput {
|
|
8
|
+
pendingCompact: QueryCompactCommit;
|
|
9
|
+
sessionId?: string;
|
|
10
|
+
turnId: string;
|
|
11
|
+
modelId: string;
|
|
12
|
+
sessionMessages: readonly SessionMessage[];
|
|
13
|
+
harnessState: HarnessState;
|
|
14
|
+
activeGoal?: SessionGoalV1 | null;
|
|
15
|
+
store: Store;
|
|
16
|
+
events: UiEventSink;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Commit one prepared compact receipt without allowing the chat controller to
|
|
20
|
+
* become a second persistence owner. Transcript/checkpoint CAS remains inside
|
|
21
|
+
* session-storage; this adapter only emits the matching runtime trace and UI
|
|
22
|
+
* projection.
|
|
23
|
+
*/
|
|
24
|
+
export declare function commitChatCompact(input: CommitChatCompactInput): void;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=chat-compact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-compact.d.ts","sourceRoot":"","sources":["../../src/runtime/chat-compact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,UAAU,sBAAsB;IAC9B,cAAc,EAAE,kBAAkB,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAClC,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAsIrE"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.commitChatCompact = commitChatCompact;
|
|
4
|
+
const session_storage_1 = require("../services/session-storage");
|
|
5
|
+
const chat_trace_1 = require("./chat-trace");
|
|
6
|
+
/**
|
|
7
|
+
* Commit one prepared compact receipt without allowing the chat controller to
|
|
8
|
+
* become a second persistence owner. Transcript/checkpoint CAS remains inside
|
|
9
|
+
* session-storage; this adapter only emits the matching runtime trace and UI
|
|
10
|
+
* projection.
|
|
11
|
+
*/
|
|
12
|
+
function commitChatCompact(input) {
|
|
13
|
+
const { pendingCompact, sessionId, turnId, modelId, sessionMessages, harnessState, activeGoal, store, events, } = input;
|
|
14
|
+
const compactTrace = {
|
|
15
|
+
model: modelId,
|
|
16
|
+
compactMode: pendingCompact.mode,
|
|
17
|
+
compactStrategy: pendingCompact.summary.source === 'llm' ? 'semantic-llm-v2' : 'deterministic-fallback-v2',
|
|
18
|
+
compactCandidateFingerprint: pendingCompact.fingerprint,
|
|
19
|
+
compactBeforeTokens: pendingCompact.beforeTokens,
|
|
20
|
+
compactAfterTokens: pendingCompact.afterTokens,
|
|
21
|
+
compactTargetTokens: pendingCompact.plan?.targetTokens,
|
|
22
|
+
compactTargetRatio: pendingCompact.plan?.targetRatio,
|
|
23
|
+
compactDiagnosticsCount: pendingCompact.diagnostics?.length ?? 0,
|
|
24
|
+
};
|
|
25
|
+
if (sessionId) {
|
|
26
|
+
(0, chat_trace_1.recordTraceEvent)(events, sessionId, {
|
|
27
|
+
turnId,
|
|
28
|
+
type: 'compact_prepare',
|
|
29
|
+
...compactTrace,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
let committedCheckpointId;
|
|
34
|
+
if (sessionId) {
|
|
35
|
+
const prepareSource = pendingCompact.prepareSource
|
|
36
|
+
? (0, session_storage_1.advanceSessionCompactSourceReceipt)(pendingCompact.prepareSource, sessionMessages)
|
|
37
|
+
: undefined;
|
|
38
|
+
const sourceMessageCount = prepareSource?.sourceMessageCount ?? (0, session_storage_1.readSessionMessages)(sessionId).length;
|
|
39
|
+
const checkpoint = (0, session_storage_1.commitSessionCompactCheckpoint)({
|
|
40
|
+
sessionId,
|
|
41
|
+
mode: pendingCompact.mode,
|
|
42
|
+
modelId,
|
|
43
|
+
sourceMessageCount,
|
|
44
|
+
transcriptStartMessageIndex: Math.max(0, sourceMessageCount - 20),
|
|
45
|
+
modelHistory: pendingCompact.modelHistory,
|
|
46
|
+
summary: pendingCompact.summary,
|
|
47
|
+
beforeUsage: pendingCompact.before,
|
|
48
|
+
afterUsage: pendingCompact.after,
|
|
49
|
+
harnessState,
|
|
50
|
+
semanticHarnessState: pendingCompact.semanticHarnessState,
|
|
51
|
+
goalBinding: activeGoal
|
|
52
|
+
? { goalId: activeGoal.goalId, revision: activeGoal.revision, state: activeGoal }
|
|
53
|
+
: undefined,
|
|
54
|
+
prepareSource,
|
|
55
|
+
candidate: {
|
|
56
|
+
fingerprint: pendingCompact.fingerprint,
|
|
57
|
+
beforeTokens: pendingCompact.beforeTokens,
|
|
58
|
+
afterTokens: pendingCompact.afterTokens,
|
|
59
|
+
plan: pendingCompact.plan,
|
|
60
|
+
semanticSummary: pendingCompact.semanticSummary,
|
|
61
|
+
diagnostics: pendingCompact.diagnostics,
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
committedCheckpointId = checkpoint.checkpointId;
|
|
65
|
+
for (const type of ['compact_validate', 'compact_commit']) {
|
|
66
|
+
(0, chat_trace_1.recordTraceEvent)(events, sessionId, {
|
|
67
|
+
turnId,
|
|
68
|
+
type,
|
|
69
|
+
checkpointId: committedCheckpointId,
|
|
70
|
+
success: true,
|
|
71
|
+
compactSourceMessageCount: sourceMessageCount,
|
|
72
|
+
...compactTrace,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
store.setState({ conversationHistory: checkpoint.modelHistory });
|
|
76
|
+
(0, chat_trace_1.recordTraceEvent)(events, sessionId, {
|
|
77
|
+
turnId,
|
|
78
|
+
type: 'compact_boundary',
|
|
79
|
+
checkpointId: committedCheckpointId,
|
|
80
|
+
success: true,
|
|
81
|
+
compactSourceMessageCount: sourceMessageCount,
|
|
82
|
+
...compactTrace,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
store.setState({
|
|
87
|
+
conversationHistory: pendingCompact.modelHistory.filter(message => message.role !== 'system'),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
store.setContextUsage(pendingCompact.after);
|
|
91
|
+
if (sessionId) {
|
|
92
|
+
(0, chat_trace_1.recordTraceEvent)(events, sessionId, {
|
|
93
|
+
turnId,
|
|
94
|
+
type: 'compact_completed',
|
|
95
|
+
checkpointId: committedCheckpointId,
|
|
96
|
+
...compactTrace,
|
|
97
|
+
note: pendingCompact.mode,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
events.append({
|
|
101
|
+
role: 'status',
|
|
102
|
+
title: 'auto-compact',
|
|
103
|
+
statusTone: 'neutral',
|
|
104
|
+
content: `Context reached ${pendingCompact.before.percent}% of the safe input budget. Agent core committed a ${pendingCompact.mode} compact checkpoint; current context is ${pendingCompact.after.percent}%.`,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
if (sessionId) {
|
|
109
|
+
(0, chat_trace_1.recordTraceEvent)(events, sessionId, {
|
|
110
|
+
turnId,
|
|
111
|
+
type: 'compact_rollback',
|
|
112
|
+
success: false,
|
|
113
|
+
error: (0, chat_trace_1.compactTraceError)(error),
|
|
114
|
+
...compactTrace,
|
|
115
|
+
});
|
|
116
|
+
(0, chat_trace_1.recordTraceEvent)(events, sessionId, {
|
|
117
|
+
turnId,
|
|
118
|
+
type: 'compact_failed',
|
|
119
|
+
...compactTrace,
|
|
120
|
+
error: (0, chat_trace_1.compactTraceError)(error),
|
|
121
|
+
note: pendingCompact.mode,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
events.append({
|
|
125
|
+
role: 'error',
|
|
126
|
+
title: 'compact-failed',
|
|
127
|
+
content: `Compact checkpoint failed; the previous model context remains active. ${error instanceof Error ? error.message : String(error)}`,
|
|
128
|
+
errorLayer: 'runtime',
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=chat-compact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-compact.js","sourceRoot":"","sources":["../../src/runtime/chat-compact.ts"],"names":[],"mappings":";;AA+BA,8CAsIC;AAlKD,iEAKqC;AACrC,6CAAmE;AAgBnE;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,KAA6B;IAC7D,MAAM,EACJ,cAAc,EACd,SAAS,EACT,MAAM,EACN,OAAO,EACP,eAAe,EACf,YAAY,EACZ,UAAU,EACV,KAAK,EACL,MAAM,GACP,GAAG,KAAK,CAAC;IACV,MAAM,YAAY,GAAG;QACnB,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,cAAc,CAAC,IAAI;QAChC,eAAe,EACb,cAAc,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,2BAA2B;QAC3F,2BAA2B,EAAE,cAAc,CAAC,WAAW;QACvD,mBAAmB,EAAE,cAAc,CAAC,YAAY;QAChD,kBAAkB,EAAE,cAAc,CAAC,WAAW;QAC9C,mBAAmB,EAAE,cAAc,CAAC,IAAI,EAAE,YAAY;QACtD,kBAAkB,EAAE,cAAc,CAAC,IAAI,EAAE,WAAW;QACpD,uBAAuB,EAAE,cAAc,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;KACjE,CAAC;IAEF,IAAI,SAAS,EAAE,CAAC;QACd,IAAA,6BAAgB,EAAC,MAAM,EAAE,SAAS,EAAE;YAClC,MAAM;YACN,IAAI,EAAE,iBAAiB;YACvB,GAAG,YAAY;SAChB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC;QACH,IAAI,qBAAyC,CAAC;QAC9C,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,aAAa,GAAG,cAAc,CAAC,aAAa;gBAChD,CAAC,CAAC,IAAA,oDAAkC,EAAC,cAAc,CAAC,aAAa,EAAE,eAAe,CAAC;gBACnF,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,kBAAkB,GACtB,aAAa,EAAE,kBAAkB,IAAI,IAAA,qCAAmB,EAAC,SAAS,CAAC,CAAC,MAAM,CAAC;YAC7E,MAAM,UAAU,GAAG,IAAA,gDAA8B,EAAC;gBAChD,SAAS;gBACT,IAAI,EAAE,cAAc,CAAC,IAAI;gBACzB,OAAO;gBACP,kBAAkB;gBAClB,2BAA2B,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,GAAG,EAAE,CAAC;gBACjE,YAAY,EAAE,cAAc,CAAC,YAAY;gBACzC,OAAO,EAAE,cAAc,CAAC,OAAO;gBAC/B,WAAW,EAAE,cAAc,CAAC,MAAM;gBAClC,UAAU,EAAE,cAAc,CAAC,KAAK;gBAChC,YAAY;gBACZ,oBAAoB,EAAE,cAAc,CAAC,oBAAoB;gBACzD,WAAW,EAAE,UAAU;oBACrB,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE;oBACjF,CAAC,CAAC,SAAS;gBACb,aAAa;gBACb,SAAS,EAAE;oBACT,WAAW,EAAE,cAAc,CAAC,WAAW;oBACvC,YAAY,EAAE,cAAc,CAAC,YAAY;oBACzC,WAAW,EAAE,cAAc,CAAC,WAAW;oBACvC,IAAI,EAAE,cAAc,CAAC,IAAI;oBACzB,eAAe,EAAE,cAAc,CAAC,eAAe;oBAC/C,WAAW,EAAE,cAAc,CAAC,WAAW;iBACxC;aACF,CAAC,CAAC;YACH,qBAAqB,GAAG,UAAU,CAAC,YAAY,CAAC;YAChD,KAAK,MAAM,IAAI,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,CAAU,EAAE,CAAC;gBACnE,IAAA,6BAAgB,EAAC,MAAM,EAAE,SAAS,EAAE;oBAClC,MAAM;oBACN,IAAI;oBACJ,YAAY,EAAE,qBAAqB;oBACnC,OAAO,EAAE,IAAI;oBACb,yBAAyB,EAAE,kBAAkB;oBAC7C,GAAG,YAAY;iBAChB,CAAC,CAAC;YACL,CAAC;YACD,KAAK,CAAC,QAAQ,CAAC,EAAE,mBAAmB,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;YACjE,IAAA,6BAAgB,EAAC,MAAM,EAAE,SAAS,EAAE;gBAClC,MAAM;gBACN,IAAI,EAAE,kBAAkB;gBACxB,YAAY,EAAE,qBAAqB;gBACnC,OAAO,EAAE,IAAI;gBACb,yBAAyB,EAAE,kBAAkB;gBAC7C,GAAG,YAAY;aAChB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,QAAQ,CAAC;gBACb,mBAAmB,EAAE,cAAc,CAAC,YAAY,CAAC,MAAM,CACrD,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CACrC;aACF,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,SAAS,EAAE,CAAC;YACd,IAAA,6BAAgB,EAAC,MAAM,EAAE,SAAS,EAAE;gBAClC,MAAM;gBACN,IAAI,EAAE,mBAAmB;gBACzB,YAAY,EAAE,qBAAqB;gBACnC,GAAG,YAAY;gBACf,IAAI,EAAE,cAAc,CAAC,IAAI;aAC1B,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,MAAM,CAAC;YACZ,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,cAAc;YACrB,UAAU,EAAE,SAAS;YACrB,OAAO,EAAE,mBAAmB,cAAc,CAAC,MAAM,CAAC,OAAO,sDAAsD,cAAc,CAAC,IAAI,2CAA2C,cAAc,CAAC,KAAK,CAAC,OAAO,IAAI;SAC9M,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,SAAS,EAAE,CAAC;YACd,IAAA,6BAAgB,EAAC,MAAM,EAAE,SAAS,EAAE;gBAClC,MAAM;gBACN,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAA,8BAAiB,EAAC,KAAK,CAAC;gBAC/B,GAAG,YAAY;aAChB,CAAC,CAAC;YACH,IAAA,6BAAgB,EAAC,MAAM,EAAE,SAAS,EAAE;gBAClC,MAAM;gBACN,IAAI,EAAE,gBAAgB;gBACtB,GAAG,YAAY;gBACf,KAAK,EAAE,IAAA,8BAAiB,EAAC,KAAK,CAAC;gBAC/B,IAAI,EAAE,cAAc,CAAC,IAAI;aAC1B,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,MAAM,CAAC;YACZ,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,gBAAgB;YACvB,OAAO,EAAE,yEAAyE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC1I,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-controller.d.ts","sourceRoot":"","sources":["../../src/runtime/chat-controller.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAkB,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,KAAK,EAAW,wBAAwB,EAAmB,MAAM,iBAAiB,CAAC;AAuB1F,OAAO,EACL,KAAK,
|
|
1
|
+
{"version":3,"file":"chat-controller.d.ts","sourceRoot":"","sources":["../../src/runtime/chat-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,8 @@ const tool_artifacts_1 = require("../core/tool-artifacts");
|
|
|
20
20
|
const skills_1 = require("../skills");
|
|
21
21
|
const subagents_1 = require("./subagents");
|
|
22
22
|
const file_context_1 = require("../services/file-context");
|
|
23
|
-
const prompt_context_1 = require("../
|
|
23
|
+
const prompt_context_1 = require("../memory/prompt-context");
|
|
24
|
+
const prompt_context_2 = require("../services/prompt-context");
|
|
24
25
|
const workspace_state_1 = require("../services/workspace-state");
|
|
25
26
|
const verification_profile_1 = require("../services/verification-profile");
|
|
26
27
|
const ui_events_1 = require("./ui-events");
|
|
@@ -33,6 +34,7 @@ const chat_checkpoint_1 = require("./chat-checkpoint");
|
|
|
33
34
|
const chat_workspace_1 = require("./chat-workspace");
|
|
34
35
|
const chat_presentation_1 = require("./chat-presentation");
|
|
35
36
|
const chat_effort_1 = require("./chat-effort");
|
|
37
|
+
const chat_compact_1 = require("./chat-compact");
|
|
36
38
|
const agent_mode_1 = require("../framework/agent-mode");
|
|
37
39
|
const chat_command_scope_1 = require("./chat-command-scope");
|
|
38
40
|
var chat_presentation_2 = require("./chat-presentation");
|
|
@@ -447,6 +449,7 @@ class AgentChatController {
|
|
|
447
449
|
turnId,
|
|
448
450
|
type: 'complete',
|
|
449
451
|
finishReason: stats.finishReason,
|
|
452
|
+
stopDecision: stats.stopDecision,
|
|
450
453
|
llmRequests: stats.llmRequests,
|
|
451
454
|
toolCalls: stats.toolCalls,
|
|
452
455
|
readOnlyToolCalls: stats.readOnlyToolCalls,
|
|
@@ -485,6 +488,7 @@ class AgentChatController {
|
|
|
485
488
|
turnId,
|
|
486
489
|
type: 'complete',
|
|
487
490
|
finishReason: stats.finishReason,
|
|
491
|
+
stopDecision: stats.stopDecision,
|
|
488
492
|
llmRequests: stats.llmRequests,
|
|
489
493
|
toolCalls: stats.toolCalls,
|
|
490
494
|
localFastPathUsed: true,
|
|
@@ -505,6 +509,7 @@ class AgentChatController {
|
|
|
505
509
|
store: this.runtime.store,
|
|
506
510
|
llm: this.runtime.llm,
|
|
507
511
|
compactCoordinator: this.runtime.compactCoordinator,
|
|
512
|
+
modelCoordinator: this.runtime.modelCoordinator,
|
|
508
513
|
runtime: this.runtime.runtime,
|
|
509
514
|
sessionId: this.runtime.getSession()?.id,
|
|
510
515
|
turnId,
|
|
@@ -521,6 +526,7 @@ class AgentChatController {
|
|
|
521
526
|
this.events.sessionRestored?.(event);
|
|
522
527
|
},
|
|
523
528
|
getSession: this.runtime.getSession,
|
|
529
|
+
getActiveGoal: () => this.goalCoordinator?.goal ?? null,
|
|
524
530
|
abortSignal,
|
|
525
531
|
writeOutput: text => {
|
|
526
532
|
if (text.trim()) {
|
|
@@ -685,7 +691,7 @@ class AgentChatController {
|
|
|
685
691
|
if (options.persistAsUserMessage !== false) {
|
|
686
692
|
this.runtime.store.addMessage({ role: 'user', content: input });
|
|
687
693
|
}
|
|
688
|
-
(0,
|
|
694
|
+
(0, prompt_context_2.refreshProjectInstructions)(this.runtime.store, this.runtime.cwd);
|
|
689
695
|
const snapshot = this.runtime.store.getSnapshot();
|
|
690
696
|
const effectivePermissionMode = this.runtime.store.getEffectivePermissionMode();
|
|
691
697
|
const onPlanModeChange = (0, agent_mode_1.createPlanModeChangeHandler)(this.runtime.store, this.controllerOptions.agentModeLifecycle);
|
|
@@ -830,12 +836,31 @@ class AgentChatController {
|
|
|
830
836
|
: null;
|
|
831
837
|
const subtaskTool = subagentBundle?.tool ?? null;
|
|
832
838
|
const turnTools = subtaskTool ? [...skillResolution.tools, subtaskTool] : skillResolution.tools;
|
|
839
|
+
const memoryPrompt = (0, prompt_context_1.buildMemoryPromptContext)(input, this.runtime.cwd);
|
|
840
|
+
if (sessionId) {
|
|
841
|
+
const selected = memoryPrompt.manifest.selected.map(item => `memory:${item.name}`);
|
|
842
|
+
const omitted = memoryPrompt.manifest.omitted.map(item => `memory:${item.name}`);
|
|
843
|
+
(0, chat_trace_1.recordTraceEvent)(this.events, sessionId, {
|
|
844
|
+
turnId: String(turnId),
|
|
845
|
+
type: 'message',
|
|
846
|
+
name: 'memory_context',
|
|
847
|
+
argsSummary: JSON.stringify({
|
|
848
|
+
budgetChars: memoryPrompt.manifest.budgetChars,
|
|
849
|
+
usedChars: memoryPrompt.manifest.usedChars,
|
|
850
|
+
candidateCount: memoryPrompt.manifest.candidateCount,
|
|
851
|
+
entrypointTruncated: memoryPrompt.manifest.entrypoint.truncated,
|
|
852
|
+
selected: selected.slice(0, 10),
|
|
853
|
+
omitted: omitted.slice(0, 10),
|
|
854
|
+
}),
|
|
855
|
+
contentBytes: Buffer.byteLength(memoryPrompt.content, 'utf8'),
|
|
856
|
+
});
|
|
857
|
+
}
|
|
833
858
|
const promptCtx = {
|
|
834
859
|
cwd: this.runtime.cwd,
|
|
835
860
|
platform: process.platform,
|
|
836
861
|
nodeVersion: process.version,
|
|
837
862
|
tools: turnTools,
|
|
838
|
-
memoryContent:
|
|
863
|
+
memoryContent: memoryPrompt.content,
|
|
839
864
|
skillsContent: snapshot.skillsContent,
|
|
840
865
|
projectInstructionsContent: snapshot.projectInstructionsContent,
|
|
841
866
|
activeSkillsContent: skillResolution.promptInjection,
|
|
@@ -977,6 +1002,9 @@ class AgentChatController {
|
|
|
977
1002
|
this.runtime.store.setContextUsage(usage);
|
|
978
1003
|
},
|
|
979
1004
|
compactCoordinator: this.runtime.compactCoordinator,
|
|
1005
|
+
onCompactPrepare: sessionId
|
|
1006
|
+
? () => (0, session_storage_1.prepareSessionCompactSourceReceipt)(sessionId)
|
|
1007
|
+
: undefined,
|
|
980
1008
|
})) {
|
|
981
1009
|
switch (event.type) {
|
|
982
1010
|
case 'request_start':
|
|
@@ -1009,6 +1037,10 @@ class AgentChatController {
|
|
|
1009
1037
|
promptOmittedEvidence: event.omittedEvidence,
|
|
1010
1038
|
promptIncludedEvidenceCount: event.includedEvidenceCount,
|
|
1011
1039
|
promptOmittedEvidenceCount: event.omittedEvidenceCount,
|
|
1040
|
+
promptSectionManifest: event.sectionManifest,
|
|
1041
|
+
promptOverBudget: event.overBudget,
|
|
1042
|
+
promptCapabilityProfileVersion: event.capabilityProfileVersion,
|
|
1043
|
+
promptCapabilityProfileFingerprint: event.capabilityProfileFingerprint,
|
|
1012
1044
|
});
|
|
1013
1045
|
}
|
|
1014
1046
|
break;
|
|
@@ -1218,6 +1250,7 @@ class AgentChatController {
|
|
|
1218
1250
|
model: event.model,
|
|
1219
1251
|
contentBytes: (0, chat_trace_1.byteLength)(event.content || ''),
|
|
1220
1252
|
finishReason: event.stats.finishReason,
|
|
1253
|
+
stopDecision: event.stats.stopDecision,
|
|
1221
1254
|
llmRequests: event.stats.llmRequests,
|
|
1222
1255
|
toolCalls: event.stats.toolCalls,
|
|
1223
1256
|
readOnlyToolCalls: event.stats.readOnlyToolCalls,
|
|
@@ -1326,10 +1359,10 @@ class AgentChatController {
|
|
|
1326
1359
|
}
|
|
1327
1360
|
const stats = pendingCompleteStats ?? this.runtime.store.getSnapshot().lastLoopStats;
|
|
1328
1361
|
if (stats) {
|
|
1329
|
-
pendingCompleteStats =
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
}
|
|
1362
|
+
pendingCompleteStats = (0, framework_1.withLoopFinishReason)((0, chat_workspace_1.withVerificationLoopStats)(stats, summary), 'completion_gate');
|
|
1363
|
+
if (pendingCompleteTrace) {
|
|
1364
|
+
pendingCompleteTrace.stopDecision = pendingCompleteStats.stopDecision;
|
|
1365
|
+
}
|
|
1333
1366
|
}
|
|
1334
1367
|
}
|
|
1335
1368
|
else if (profile.changedFiles.length > 0 && profile.required) {
|
|
@@ -1362,64 +1395,30 @@ class AgentChatController {
|
|
|
1362
1395
|
if (sessionId && sessionMessagesToRecord.length > 0) {
|
|
1363
1396
|
(0, session_storage_1.appendSessionMessages)(sessionId, sessionMessagesToRecord);
|
|
1364
1397
|
}
|
|
1398
|
+
harness.ingestTurn({
|
|
1399
|
+
userInput: input,
|
|
1400
|
+
assistantContent: finalContent,
|
|
1401
|
+
sessionMessages: sessionMessagesToRecord,
|
|
1402
|
+
intent,
|
|
1403
|
+
});
|
|
1404
|
+
const harnessState = harness.toJSON();
|
|
1405
|
+
this.runtime.store.setState({ harnessState });
|
|
1406
|
+
(0, chat_trace_1.emitHarnessDiagnostics)(this.events, harnessState);
|
|
1407
|
+
if (sessionId) {
|
|
1408
|
+
(0, session_storage_1.updateSessionHarnessState)(sessionId, harnessState);
|
|
1409
|
+
}
|
|
1365
1410
|
if (pendingCompact) {
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
summary: pendingCompact.summary,
|
|
1378
|
-
beforeUsage: pendingCompact.before,
|
|
1379
|
-
afterUsage: pendingCompact.after,
|
|
1380
|
-
});
|
|
1381
|
-
committedCheckpointId = checkpoint.checkpointId;
|
|
1382
|
-
this.runtime.store.setState({ conversationHistory: checkpoint.modelHistory });
|
|
1383
|
-
}
|
|
1384
|
-
else {
|
|
1385
|
-
this.runtime.store.setState({
|
|
1386
|
-
conversationHistory: pendingCompact.modelHistory.filter(message => message.role !== 'system'),
|
|
1387
|
-
});
|
|
1388
|
-
}
|
|
1389
|
-
this.runtime.store.setContextUsage(pendingCompact.after);
|
|
1390
|
-
if (sessionId) {
|
|
1391
|
-
(0, chat_trace_1.recordTraceEvent)(this.events, sessionId, {
|
|
1392
|
-
turnId,
|
|
1393
|
-
type: 'compact_completed',
|
|
1394
|
-
checkpointId: committedCheckpointId,
|
|
1395
|
-
model: finalModel || this.runtime.llm.getModel(),
|
|
1396
|
-
note: pendingCompact.mode,
|
|
1397
|
-
});
|
|
1398
|
-
}
|
|
1399
|
-
this.events.append({
|
|
1400
|
-
role: 'status',
|
|
1401
|
-
title: 'auto-compact',
|
|
1402
|
-
statusTone: 'neutral',
|
|
1403
|
-
content: `Context reached ${pendingCompact.before.percent}% of the safe input budget. Agent core committed a ${pendingCompact.mode} compact checkpoint; current context is ${pendingCompact.after.percent}%.`,
|
|
1404
|
-
});
|
|
1405
|
-
}
|
|
1406
|
-
catch (error) {
|
|
1407
|
-
if (sessionId) {
|
|
1408
|
-
(0, chat_trace_1.recordTraceEvent)(this.events, sessionId, {
|
|
1409
|
-
turnId,
|
|
1410
|
-
type: 'compact_failed',
|
|
1411
|
-
model: finalModel || this.runtime.llm.getModel(),
|
|
1412
|
-
error: (0, chat_trace_1.compactTraceError)(error),
|
|
1413
|
-
note: pendingCompact.mode,
|
|
1414
|
-
});
|
|
1415
|
-
}
|
|
1416
|
-
this.events.append({
|
|
1417
|
-
role: 'error',
|
|
1418
|
-
title: 'compact-failed',
|
|
1419
|
-
content: `Compact checkpoint failed; the previous model context remains active. ${error instanceof Error ? error.message : String(error)}`,
|
|
1420
|
-
errorLayer: 'runtime',
|
|
1421
|
-
});
|
|
1422
|
-
}
|
|
1411
|
+
(0, chat_compact_1.commitChatCompact)({
|
|
1412
|
+
pendingCompact,
|
|
1413
|
+
sessionId,
|
|
1414
|
+
turnId,
|
|
1415
|
+
modelId: finalModel || this.runtime.llm.getModel(),
|
|
1416
|
+
sessionMessages: sessionMessagesToRecord,
|
|
1417
|
+
harnessState,
|
|
1418
|
+
activeGoal: this.goalCoordinator?.goal,
|
|
1419
|
+
store: this.runtime.store,
|
|
1420
|
+
events: this.events,
|
|
1421
|
+
});
|
|
1423
1422
|
}
|
|
1424
1423
|
if (finalUsage) {
|
|
1425
1424
|
// Fold subagent token usage into /cost accounting.
|
|
@@ -1432,21 +1431,11 @@ class AgentChatController {
|
|
|
1432
1431
|
}
|
|
1433
1432
|
this.runtime.store.setTokenUsage(finalUsage);
|
|
1434
1433
|
}
|
|
1435
|
-
harness.ingestTurn({
|
|
1436
|
-
userInput: input,
|
|
1437
|
-
assistantContent: finalContent,
|
|
1438
|
-
sessionMessages: sessionMessagesToRecord,
|
|
1439
|
-
intent,
|
|
1440
|
-
});
|
|
1441
|
-
const harnessState = harness.toJSON();
|
|
1442
|
-
this.runtime.store.setState({ harnessState });
|
|
1443
|
-
(0, chat_trace_1.emitHarnessDiagnostics)(this.events, harnessState);
|
|
1444
1434
|
if (sessionId) {
|
|
1445
1435
|
if (pendingCompleteTrace) {
|
|
1446
1436
|
(0, chat_trace_1.recordTraceEvent)(this.events, sessionId, pendingCompleteTrace);
|
|
1447
1437
|
}
|
|
1448
1438
|
(0, session_storage_1.updateSessionSkills)(sessionId, appliedSkillNames);
|
|
1449
|
-
(0, session_storage_1.updateSessionHarnessState)(sessionId, harnessState);
|
|
1450
1439
|
}
|
|
1451
1440
|
this.events.setStatus(finalModel ? `Completed with ${finalModel}` : 'Completed');
|
|
1452
1441
|
}
|
|
@@ -1576,6 +1565,7 @@ class AgentChatController {
|
|
|
1576
1565
|
model: failedStats.providerFinalModel ?? this.runtime.llm.getModel(),
|
|
1577
1566
|
contentBytes: 0,
|
|
1578
1567
|
finishReason: failedStats.finishReason,
|
|
1568
|
+
stopDecision: failedStats.stopDecision,
|
|
1579
1569
|
llmRequests: failedStats.llmRequests,
|
|
1580
1570
|
toolCalls: failedStats.toolCalls,
|
|
1581
1571
|
readOnlyToolCalls: failedStats.readOnlyToolCalls,
|