openhorse 0.1.22 → 0.1.23
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 +76 -427
- package/dist/cli.js +118 -10
- package/dist/cli.js.map +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +90 -18
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/types.d.ts +1 -0
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js.map +1 -1
- package/dist/framework/index.d.ts +2 -2
- package/dist/framework/index.d.ts.map +1 -1
- package/dist/framework/index.js +6 -1
- package/dist/framework/index.js.map +1 -1
- package/dist/framework/query.d.ts +2 -0
- package/dist/framework/query.d.ts.map +1 -1
- package/dist/framework/query.js +5 -2
- package/dist/framework/query.js.map +1 -1
- package/dist/harness/assembler.d.ts +14 -2
- package/dist/harness/assembler.d.ts.map +1 -1
- package/dist/harness/assembler.js +167 -32
- package/dist/harness/assembler.js.map +1 -1
- package/dist/harness/capsule.d.ts +2 -1
- package/dist/harness/capsule.d.ts.map +1 -1
- package/dist/harness/capsule.js +64 -0
- package/dist/harness/capsule.js.map +1 -1
- 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 +97 -7
- package/dist/harness/context-harness.js.map +1 -1
- package/dist/harness/contract.d.ts +2 -2
- package/dist/harness/contract.d.ts.map +1 -1
- package/dist/harness/contract.js +7 -3
- package/dist/harness/contract.js.map +1 -1
- package/dist/harness/evidence.d.ts +15 -0
- package/dist/harness/evidence.d.ts.map +1 -0
- package/dist/harness/evidence.js +171 -0
- package/dist/harness/evidence.js.map +1 -0
- package/dist/harness/index.d.ts +9 -3
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +15 -1
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/intent.d.ts +4 -0
- package/dist/harness/intent.d.ts.map +1 -0
- package/dist/harness/intent.js +139 -0
- package/dist/harness/intent.js.map +1 -0
- package/dist/harness/state.d.ts +12 -0
- package/dist/harness/state.d.ts.map +1 -0
- package/dist/harness/state.js +84 -0
- package/dist/harness/state.js.map +1 -0
- package/dist/harness/turn-summary.d.ts +25 -0
- package/dist/harness/turn-summary.d.ts.map +1 -0
- package/dist/harness/turn-summary.js +120 -0
- package/dist/harness/turn-summary.js.map +1 -0
- package/dist/harness/types.d.ts +103 -0
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/services/compact/auto-compact.d.ts +3 -1
- package/dist/services/compact/auto-compact.d.ts.map +1 -1
- package/dist/services/compact/auto-compact.js +10 -0
- package/dist/services/compact/auto-compact.js.map +1 -1
- package/dist/services/compact/compact.d.ts +5 -1
- package/dist/services/compact/compact.d.ts.map +1 -1
- package/dist/services/compact/compact.js +11 -1
- package/dist/services/compact/compact.js.map +1 -1
- package/dist/services/config-dir.d.ts +2 -0
- package/dist/services/config-dir.d.ts.map +1 -1
- package/dist/services/config-dir.js +5 -0
- package/dist/services/config-dir.js.map +1 -1
- package/dist/services/session-storage.d.ts +4 -1
- package/dist/services/session-storage.d.ts.map +1 -1
- package/dist/services/session-storage.js +76 -6
- package/dist/services/session-storage.js.map +1 -1
- package/dist/tools/mcp.js +1 -1
- package/dist/ui-v2/components/session-picker.d.ts +2 -0
- package/dist/ui-v2/components/session-picker.d.ts.map +1 -1
- package/dist/ui-v2/components/session-picker.js +34 -5
- package/dist/ui-v2/components/session-picker.js.map +1 -1
- package/dist/ui-v2/state/sessions.d.ts +1 -0
- package/dist/ui-v2/state/sessions.d.ts.map +1 -1
- package/dist/ui-v2/state/sessions.js +18 -0
- package/dist/ui-v2/state/sessions.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,58 +1,193 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildHarnessContext = buildHarnessContext;
|
|
3
4
|
exports.renderHarnessContext = renderHarnessContext;
|
|
4
5
|
exports.assembleHarnessMessages = assembleHarnessMessages;
|
|
5
6
|
const model_context_1 = require("../services/model-context");
|
|
6
|
-
const
|
|
7
|
-
function estimateTokens(text) {
|
|
8
|
-
return Math.ceil(text.length / 4);
|
|
9
|
-
}
|
|
7
|
+
const evidence_1 = require("./evidence");
|
|
10
8
|
function truncateByChars(text, maxChars) {
|
|
11
9
|
if (text.length <= maxChars)
|
|
12
10
|
return text;
|
|
13
11
|
return text.slice(0, Math.max(0, maxChars - 80)) + '\n[truncated by Context Harness]';
|
|
14
12
|
}
|
|
15
|
-
function
|
|
13
|
+
function compact(text, max = 220) {
|
|
14
|
+
const normalized = text.replace(/\s+/g, ' ').trim();
|
|
15
|
+
return normalized.length > max ? normalized.slice(0, max - 3) + '...' : normalized;
|
|
16
|
+
}
|
|
17
|
+
function pushList(lines, title, values, limit = 8) {
|
|
18
|
+
const items = (values ?? []).filter(Boolean).slice(0, limit);
|
|
19
|
+
if (items.length === 0)
|
|
20
|
+
return;
|
|
21
|
+
lines.push(`${title}:`);
|
|
22
|
+
for (const item of items) {
|
|
23
|
+
lines.push(`- ${compact(item)}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function relevantTools(tools, activeInstruction) {
|
|
27
|
+
if (!tools || tools.length === 0)
|
|
28
|
+
return [];
|
|
29
|
+
const query = (activeInstruction ?? '').toLowerCase();
|
|
30
|
+
const scored = tools.map(tool => {
|
|
31
|
+
let score = 0;
|
|
32
|
+
if (query.includes(tool.name.toLowerCase()))
|
|
33
|
+
score += 5;
|
|
34
|
+
if (tool.description && tool.description.toLowerCase().split(/\W+/).some(word => word.length > 3 && query.includes(word))) {
|
|
35
|
+
score += 2;
|
|
36
|
+
}
|
|
37
|
+
return { tool, score };
|
|
38
|
+
});
|
|
39
|
+
return scored
|
|
40
|
+
.sort((a, b) => b.score - a.score || a.tool.name.localeCompare(b.tool.name))
|
|
41
|
+
.slice(0, 10)
|
|
42
|
+
.map(item => item.score > 0 ? `${item.tool.name}: ${item.tool.description ?? ''}` : item.tool.name);
|
|
43
|
+
}
|
|
44
|
+
function evidenceLine(record) {
|
|
45
|
+
const suffix = [
|
|
46
|
+
record.path ? `path=${record.path}` : '',
|
|
47
|
+
record.toolName ? `tool=${record.toolName}` : '',
|
|
48
|
+
record.verificationStatus ? `verification=${record.verificationStatus}` : '',
|
|
49
|
+
].filter(Boolean).join(' ');
|
|
50
|
+
return `- (${record.id}) [${record.kind}] ${compact(record.content, 320)}${suffix ? ` (${suffix})` : ''}`;
|
|
51
|
+
}
|
|
52
|
+
function buildHarnessContext(state, modelId, config = {}, options = {}) {
|
|
16
53
|
const contract = state.contract;
|
|
17
|
-
if (!contract && state.ledger.length === 0 && !state.capsule)
|
|
18
|
-
|
|
54
|
+
if (!contract && state.ledger.length === 0 && !state.capsule && !state.rootObjective) {
|
|
55
|
+
const emptyStats = {
|
|
56
|
+
createdAt: Date.now(),
|
|
57
|
+
modelId,
|
|
58
|
+
budgetTokens: 0,
|
|
59
|
+
estimatedTokens: 0,
|
|
60
|
+
coreTokens: 0,
|
|
61
|
+
evidenceBudgetTokens: 0,
|
|
62
|
+
recentTurnBudgetTokens: 0,
|
|
63
|
+
includedEvidence: [],
|
|
64
|
+
omittedEvidence: [],
|
|
65
|
+
sections: [],
|
|
66
|
+
};
|
|
67
|
+
return { text: '', stats: emptyStats };
|
|
68
|
+
}
|
|
19
69
|
const contextWindow = (0, model_context_1.getModelContextWindow)(modelId);
|
|
20
70
|
const evidenceBudgetRatio = config.evidenceBudgetRatio ?? 0.3;
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
71
|
+
const budgetTokens = Math.max(700, Math.min(4200, Math.floor(contextWindow * evidenceBudgetRatio * 0.08)));
|
|
72
|
+
const evidenceBudgetTokens = Math.max(160, Math.floor(budgetTokens * 0.46));
|
|
73
|
+
const recentTurnBudgetTokens = Math.max(120, Math.floor(budgetTokens * 0.18));
|
|
74
|
+
const rootObjective = state.rootObjective ?? contract?.objective;
|
|
75
|
+
const activeInstruction = state.activeInstruction ?? contract?.userIntent;
|
|
76
|
+
const latestIntent = state.intentHistory?.[state.intentHistory.length - 1];
|
|
77
|
+
const coreLines = ['[OpenHorse Context Harness v2]'];
|
|
78
|
+
coreLines.push(`Task epoch: ${state.taskEpoch ?? 1}`);
|
|
79
|
+
if (rootObjective)
|
|
80
|
+
coreLines.push(`Root objective: ${compact(rootObjective, 260)}`);
|
|
81
|
+
if (activeInstruction)
|
|
82
|
+
coreLines.push(`Active instruction: ${compact(activeInstruction, 320)}`);
|
|
83
|
+
if (latestIntent) {
|
|
84
|
+
coreLines.push(`Latest intent: ${latestIntent.kind} (${Math.round(latestIntent.confidence * 100)}%, ${latestIntent.reason})`);
|
|
85
|
+
}
|
|
86
|
+
pushList(coreLines, 'Active constraints', state.activeConstraints ?? contract?.constraints, 8);
|
|
87
|
+
pushList(coreLines, 'Non-goals', state.nonGoals ?? contract?.prohibitions, 8);
|
|
88
|
+
pushList(coreLines, 'Open questions', state.openQuestions, 6);
|
|
89
|
+
pushList(coreLines, 'Success criteria', contract?.successCriteria, 6);
|
|
90
|
+
if (state.capsule) {
|
|
91
|
+
const verification = state.capsule.verification;
|
|
92
|
+
if (verification.passed.length > 0 || verification.failed.length > 0 || verification.warnings.length > 0) {
|
|
93
|
+
coreLines.push('Verification state:');
|
|
94
|
+
for (const item of verification.passed.slice(0, 4))
|
|
95
|
+
coreLines.push(`- Passed: ${compact(item)}`);
|
|
96
|
+
for (const item of verification.failed.slice(0, 4))
|
|
97
|
+
coreLines.push(`- Failed: ${compact(item)}`);
|
|
98
|
+
for (const item of verification.warnings.slice(0, 3))
|
|
99
|
+
coreLines.push(`- Warning: ${compact(item)}`);
|
|
31
100
|
}
|
|
32
|
-
|
|
33
|
-
|
|
101
|
+
if (state.capsule.nextAction) {
|
|
102
|
+
coreLines.push(`Next action: ${compact(state.capsule.nextAction, 240)}`);
|
|
34
103
|
}
|
|
35
104
|
}
|
|
36
|
-
|
|
37
|
-
|
|
105
|
+
const tools = relevantTools(options.tools, `${activeInstruction ?? ''} ${options.input ?? ''}`);
|
|
106
|
+
if (tools.length > 0) {
|
|
107
|
+
pushList(coreLines, 'Relevant available tools', tools, 8);
|
|
38
108
|
}
|
|
39
|
-
const
|
|
40
|
-
.
|
|
41
|
-
.
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
109
|
+
const rankedEvidence = (0, evidence_1.rankEvidence)(state.evidenceIndex ?? [], {
|
|
110
|
+
query: options.input,
|
|
111
|
+
taskEpoch: state.taskEpoch,
|
|
112
|
+
activeInstruction,
|
|
113
|
+
rootObjective,
|
|
114
|
+
});
|
|
115
|
+
const evidenceLines = [];
|
|
116
|
+
const includedEvidence = [];
|
|
117
|
+
const omittedEvidence = [];
|
|
118
|
+
let usedEvidenceTokens = 0;
|
|
119
|
+
for (const record of rankedEvidence) {
|
|
120
|
+
const tokens = Math.max(record.tokenEstimate, (0, evidence_1.estimateTokens)(record.content));
|
|
121
|
+
if (usedEvidenceTokens + tokens <= evidenceBudgetTokens || includedEvidence.length < 4) {
|
|
122
|
+
usedEvidenceTokens += tokens;
|
|
123
|
+
evidenceLines.push(evidenceLine(record));
|
|
124
|
+
includedEvidence.push({
|
|
125
|
+
id: record.id,
|
|
126
|
+
kind: record.kind,
|
|
127
|
+
score: record.score,
|
|
128
|
+
tokens,
|
|
129
|
+
reason: record.reasons.join(', '),
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
omittedEvidence.push({
|
|
134
|
+
id: record.id,
|
|
135
|
+
kind: record.kind,
|
|
136
|
+
score: record.score,
|
|
137
|
+
tokens,
|
|
138
|
+
reason: 'evidence budget exceeded',
|
|
139
|
+
});
|
|
46
140
|
}
|
|
47
141
|
}
|
|
48
|
-
|
|
142
|
+
const recentTurnLines = [];
|
|
143
|
+
let usedTurnTokens = 0;
|
|
144
|
+
const recentTurns = [...(state.turnSummaries ?? [])].slice(-5).reverse();
|
|
145
|
+
for (const summary of recentTurns) {
|
|
146
|
+
const line = `- Turn ${summary.turn} [${summary.intentKind}]: ${compact(summary.userIntent, 120)} -> ${compact(summary.assistantOutcome, 180)}`;
|
|
147
|
+
const tokens = (0, evidence_1.estimateTokens)(line);
|
|
148
|
+
if (usedTurnTokens + tokens > recentTurnBudgetTokens && recentTurnLines.length > 0)
|
|
149
|
+
break;
|
|
150
|
+
usedTurnTokens += tokens;
|
|
151
|
+
recentTurnLines.push(line);
|
|
152
|
+
}
|
|
153
|
+
const sections = ['core'];
|
|
154
|
+
const lines = [...coreLines];
|
|
155
|
+
if (evidenceLines.length > 0) {
|
|
156
|
+
lines.push('', 'Ranked evidence:');
|
|
157
|
+
lines.push(...evidenceLines);
|
|
158
|
+
sections.push('ranked_evidence');
|
|
159
|
+
}
|
|
160
|
+
if (recentTurnLines.length > 0) {
|
|
161
|
+
lines.push('', 'Recent turn summaries:');
|
|
162
|
+
lines.push(...recentTurnLines);
|
|
163
|
+
sections.push('recent_turns');
|
|
164
|
+
}
|
|
165
|
+
lines.push('', 'Instruction: preserve the root objective across short feedback or refinements. Do not claim verification unless it is listed above or produced by a tool result in this turn.');
|
|
49
166
|
const rendered = lines.join('\n');
|
|
50
|
-
|
|
167
|
+
const maxChars = budgetTokens * 4;
|
|
168
|
+
const text = truncateByChars(rendered, maxChars);
|
|
169
|
+
const estimatedTokens = (0, evidence_1.estimateTokens)(text);
|
|
170
|
+
const stats = {
|
|
171
|
+
createdAt: Date.now(),
|
|
172
|
+
modelId,
|
|
173
|
+
budgetTokens,
|
|
174
|
+
estimatedTokens,
|
|
175
|
+
coreTokens: (0, evidence_1.estimateTokens)(coreLines.join('\n')),
|
|
176
|
+
evidenceBudgetTokens,
|
|
177
|
+
recentTurnBudgetTokens,
|
|
178
|
+
includedEvidence,
|
|
179
|
+
omittedEvidence,
|
|
180
|
+
sections,
|
|
181
|
+
};
|
|
182
|
+
return { text, stats };
|
|
183
|
+
}
|
|
184
|
+
function renderHarnessContext(state, modelId, config = {}) {
|
|
185
|
+
return buildHarnessContext(state, modelId, config).text;
|
|
51
186
|
}
|
|
52
|
-
function assembleHarnessMessages(messages, state, modelId, config = {}) {
|
|
187
|
+
function assembleHarnessMessages(messages, state, modelId, config = {}, options = {}) {
|
|
53
188
|
if (config.enabled === false)
|
|
54
189
|
return messages;
|
|
55
|
-
const harnessContext =
|
|
190
|
+
const harnessContext = buildHarnessContext(state, modelId, config, options).text;
|
|
56
191
|
if (!harnessContext.trim())
|
|
57
192
|
return messages;
|
|
58
193
|
const cloned = messages.map(message => ({ ...message }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assembler.js","sourceRoot":"","sources":["../../src/harness/assembler.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"assembler.js","sourceRoot":"","sources":["../../src/harness/assembler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { ContextCapsule, ContextLedgerEntry, TaskContract } from './types';
|
|
1
|
+
import type { ContextCapsule, ContextLedgerEntry, HarnessState, TaskContract } from './types';
|
|
2
2
|
export declare function createContextCapsule(contract: TaskContract | undefined, entries: ContextLedgerEntry[]): ContextCapsule;
|
|
3
3
|
export declare function renderContextCapsule(capsule: ContextCapsule): string;
|
|
4
|
+
export declare function renderHarnessStateForCompact(state: HarnessState, mode?: 'manual' | 'auto_pre_turn' | 'mid_turn'): string;
|
|
4
5
|
//# sourceMappingURL=capsule.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capsule.d.ts","sourceRoot":"","sources":["../../src/harness/capsule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAY,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"capsule.d.ts","sourceRoot":"","sources":["../../src/harness/capsule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAY,YAAY,EAAE,MAAM,SAAS,CAAC;AAqBxG,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,YAAY,GAAG,SAAS,EAClC,OAAO,EAAE,kBAAkB,EAAE,GAC5B,cAAc,CAgDhB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAsCpE;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,YAAY,EACnB,IAAI,GAAE,QAAQ,GAAG,eAAe,GAAG,UAAqB,GACvD,MAAM,CAuER"}
|
package/dist/harness/capsule.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createContextCapsule = createContextCapsule;
|
|
4
4
|
exports.renderContextCapsule = renderContextCapsule;
|
|
5
|
+
exports.renderHarnessStateForCompact = renderHarnessStateForCompact;
|
|
5
6
|
function metadataString(entry, key) {
|
|
6
7
|
const value = entry.metadata?.[key];
|
|
7
8
|
return typeof value === 'string' && value ? value : undefined;
|
|
@@ -96,4 +97,67 @@ function renderContextCapsule(capsule) {
|
|
|
96
97
|
lines.push('', `Next action: ${capsule.nextAction}`);
|
|
97
98
|
return lines.join('\n');
|
|
98
99
|
}
|
|
100
|
+
function renderHarnessStateForCompact(state, mode = 'manual') {
|
|
101
|
+
const lines = ['[OpenHorse Context State v2]'];
|
|
102
|
+
lines.push(`mode: ${mode}`);
|
|
103
|
+
lines.push(`taskEpoch: ${state.taskEpoch ?? 1}`);
|
|
104
|
+
if (state.rootObjective || state.contract?.objective) {
|
|
105
|
+
lines.push(`rootObjective: ${compactLine(state.rootObjective ?? state.contract.objective, 220)}`);
|
|
106
|
+
}
|
|
107
|
+
if (state.activeInstruction || state.contract?.userIntent) {
|
|
108
|
+
lines.push(`activeInstruction: ${compactLine(state.activeInstruction ?? state.contract.userIntent, 260)}`);
|
|
109
|
+
}
|
|
110
|
+
const latestIntent = state.intentHistory?.[state.intentHistory.length - 1];
|
|
111
|
+
if (latestIntent) {
|
|
112
|
+
lines.push(`latestIntent: ${latestIntent.kind} (${Math.round(latestIntent.confidence * 100)}%)`);
|
|
113
|
+
}
|
|
114
|
+
const constraints = state.activeConstraints ?? state.contract?.constraints ?? [];
|
|
115
|
+
if (constraints.length > 0) {
|
|
116
|
+
lines.push('activeConstraints:');
|
|
117
|
+
lines.push(...constraints.slice(0, 8).map(item => `- ${compactLine(item)}`));
|
|
118
|
+
}
|
|
119
|
+
const nonGoals = state.nonGoals ?? state.contract?.prohibitions ?? [];
|
|
120
|
+
if (nonGoals.length > 0) {
|
|
121
|
+
lines.push('nonGoals:');
|
|
122
|
+
lines.push(...nonGoals.slice(0, 8).map(item => `- ${compactLine(item)}`));
|
|
123
|
+
}
|
|
124
|
+
if (state.openQuestions && state.openQuestions.length > 0) {
|
|
125
|
+
lines.push('openQuestions:');
|
|
126
|
+
lines.push(...state.openQuestions.slice(0, 6).map(item => `- ${compactLine(item)}`));
|
|
127
|
+
}
|
|
128
|
+
if (state.capsule) {
|
|
129
|
+
if (state.capsule.openTodos.length > 0) {
|
|
130
|
+
lines.push('openTodos:');
|
|
131
|
+
lines.push(...state.capsule.openTodos.slice(0, 8).map(item => `- ${compactLine(item)}`));
|
|
132
|
+
}
|
|
133
|
+
const verification = state.capsule.verification;
|
|
134
|
+
if (verification.passed.length > 0 || verification.failed.length > 0 || verification.warnings.length > 0) {
|
|
135
|
+
lines.push('verification:');
|
|
136
|
+
lines.push(...verification.passed.slice(0, 5).map(item => `- passed: ${compactLine(item)}`));
|
|
137
|
+
lines.push(...verification.failed.slice(0, 5).map(item => `- failed: ${compactLine(item)}`));
|
|
138
|
+
lines.push(...verification.warnings.slice(0, 4).map(item => `- warning: ${compactLine(item)}`));
|
|
139
|
+
}
|
|
140
|
+
if (state.capsule.changedFiles.length > 0) {
|
|
141
|
+
lines.push(`changedFiles: ${state.capsule.changedFiles.slice(0, 12).join(', ')}`);
|
|
142
|
+
}
|
|
143
|
+
lines.push(`nextAction: ${compactLine(state.capsule.nextAction, 220)}`);
|
|
144
|
+
}
|
|
145
|
+
const turns = state.turnSummaries ?? [];
|
|
146
|
+
if (turns.length > 0) {
|
|
147
|
+
lines.push('recentTurns:');
|
|
148
|
+
for (const turn of turns.slice(-5)) {
|
|
149
|
+
lines.push(`- turn ${turn.turn} [${turn.intentKind}]: ${compactLine(turn.userIntent, 100)} -> ${compactLine(turn.assistantOutcome, 140)}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const evidenceIds = state.promptAssemblyStats?.includedEvidence.map(item => item.id) ?? state.evidenceIndex?.slice(0, 8).map(item => item.id) ?? [];
|
|
153
|
+
if (evidenceIds.length > 0) {
|
|
154
|
+
lines.push(`evidenceIds: ${evidenceIds.slice(0, 12).join(', ')}`);
|
|
155
|
+
}
|
|
156
|
+
if (state.diagnostics && state.diagnostics.length > 0) {
|
|
157
|
+
lines.push('diagnostics:');
|
|
158
|
+
lines.push(...state.diagnostics.slice(-5).map(item => `- ${compactLine(item)}`));
|
|
159
|
+
}
|
|
160
|
+
lines.push('[/OpenHorse Context State v2]');
|
|
161
|
+
return lines.join('\n');
|
|
162
|
+
}
|
|
99
163
|
//# sourceMappingURL=capsule.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capsule.js","sourceRoot":"","sources":["../../src/harness/capsule.ts"],"names":[],"mappings":";;AAqBA,oDAmDC;AAED,oDAsCC;
|
|
1
|
+
{"version":3,"file":"capsule.js","sourceRoot":"","sources":["../../src/harness/capsule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { LLMResponse, Message } from '../services/llm';
|
|
2
|
-
import
|
|
2
|
+
import { type PromptAssemblyOptions } from './assembler';
|
|
3
|
+
import { type CreateTurnSummaryInput } from './turn-summary';
|
|
4
|
+
import type { CompletionGateResult, ContextCapsule, DriftCheckResult, HarnessConfig, HarnessState, IntentUpdate, TurnSummary } from './types';
|
|
3
5
|
export interface ContextHarnessOptions {
|
|
4
6
|
cwd: string;
|
|
5
7
|
modelId: string;
|
|
@@ -14,9 +16,22 @@ export declare class ContextHarness {
|
|
|
14
16
|
private ledger;
|
|
15
17
|
private capsule?;
|
|
16
18
|
private completionBlockCount;
|
|
19
|
+
private taskEpoch;
|
|
20
|
+
private rootObjective?;
|
|
21
|
+
private activeInstruction?;
|
|
22
|
+
private intentHistory;
|
|
23
|
+
private activeConstraints;
|
|
24
|
+
private nonGoals;
|
|
25
|
+
private openQuestions;
|
|
26
|
+
private evidenceIndex;
|
|
27
|
+
private turnSummaries;
|
|
28
|
+
private promptAssemblyStats?;
|
|
29
|
+
private diagnostics;
|
|
30
|
+
private reconciledAt?;
|
|
17
31
|
constructor(options: ContextHarnessOptions);
|
|
18
|
-
updateContractFromUserInput(input: string):
|
|
19
|
-
|
|
32
|
+
updateContractFromUserInput(input: string): IntentUpdate | undefined;
|
|
33
|
+
classifyIntent(input: string): IntentUpdate;
|
|
34
|
+
assembleMessages(messages: Message[], options?: PromptAssemblyOptions): Message[];
|
|
20
35
|
recordAssistantResponse(response: LLMResponse): void;
|
|
21
36
|
recordAppliedSkills(skills: Array<{
|
|
22
37
|
name: string;
|
|
@@ -35,12 +50,17 @@ export declare class ContextHarness {
|
|
|
35
50
|
success: boolean;
|
|
36
51
|
error?: string;
|
|
37
52
|
}): void;
|
|
53
|
+
ingestTurn(params: Omit<CreateTurnSummaryInput, 'turn' | 'taskEpoch' | 'intent'> & {
|
|
54
|
+
intent?: IntentUpdate;
|
|
55
|
+
}): TurnSummary | undefined;
|
|
38
56
|
beforeComplete(): CompletionGateResult;
|
|
39
57
|
asCompletionBlockedMessage(result: CompletionGateResult): Message;
|
|
40
58
|
asToolBlockedResult(result: DriftCheckResult): string;
|
|
41
59
|
getCapsule(): ContextCapsule | undefined;
|
|
42
60
|
toJSON(): HarnessState;
|
|
43
61
|
private refreshCapsule;
|
|
62
|
+
private refreshEvidenceIndex;
|
|
63
|
+
private mergeList;
|
|
44
64
|
}
|
|
45
65
|
export declare function createContextHarness(options: ContextHarnessOptions): ContextHarness;
|
|
46
66
|
//# sourceMappingURL=context-harness.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-harness.d.ts","sourceRoot":"","sources":["../../src/harness/context-harness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"context-harness.d.ts","sourceRoot":"","sources":["../../src/harness/context-harness.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,11 @@ const assembler_1 = require("./assembler");
|
|
|
6
6
|
const capsule_1 = require("./capsule");
|
|
7
7
|
const contract_1 = require("./contract");
|
|
8
8
|
const drift_guard_1 = require("./drift-guard");
|
|
9
|
+
const evidence_1 = require("./evidence");
|
|
10
|
+
const intent_1 = require("./intent");
|
|
9
11
|
const ledger_1 = require("./ledger");
|
|
12
|
+
const state_1 = require("./state");
|
|
13
|
+
const turn_summary_1 = require("./turn-summary");
|
|
10
14
|
const DEFAULT_CONFIG = {
|
|
11
15
|
enabled: true,
|
|
12
16
|
preCompactThreshold: 0.8,
|
|
@@ -21,22 +25,68 @@ class ContextHarness {
|
|
|
21
25
|
this.cwd = options.cwd;
|
|
22
26
|
this.modelId = options.modelId;
|
|
23
27
|
this.config = { ...DEFAULT_CONFIG, ...options.config };
|
|
24
|
-
|
|
25
|
-
this.
|
|
26
|
-
this.
|
|
27
|
-
this.
|
|
28
|
+
const state = (0, state_1.upgradeHarnessState)(options.state, { cwd: options.cwd });
|
|
29
|
+
this.contract = state.contract;
|
|
30
|
+
this.ledger = new ledger_1.ContextLedger(state.ledger);
|
|
31
|
+
this.capsule = state.capsule;
|
|
32
|
+
this.completionBlockCount = state.completionBlockCount ?? 0;
|
|
33
|
+
this.taskEpoch = state.taskEpoch ?? 1;
|
|
34
|
+
this.rootObjective = state.rootObjective;
|
|
35
|
+
this.activeInstruction = state.activeInstruction;
|
|
36
|
+
this.intentHistory = state.intentHistory ?? [];
|
|
37
|
+
this.activeConstraints = state.activeConstraints ?? [];
|
|
38
|
+
this.nonGoals = state.nonGoals ?? [];
|
|
39
|
+
this.openQuestions = state.openQuestions ?? [];
|
|
40
|
+
this.evidenceIndex = state.evidenceIndex ?? [];
|
|
41
|
+
this.turnSummaries = state.turnSummaries ?? [];
|
|
42
|
+
this.promptAssemblyStats = state.promptAssemblyStats;
|
|
43
|
+
this.diagnostics = state.diagnostics ?? [];
|
|
44
|
+
this.reconciledAt = state.reconciledAt;
|
|
28
45
|
}
|
|
29
46
|
updateContractFromUserInput(input) {
|
|
30
47
|
if (this.config.enabled === false)
|
|
31
48
|
return;
|
|
49
|
+
const intent = (0, intent_1.classifyIntent)(input, this.toJSON());
|
|
32
50
|
this.contract = this.contract
|
|
33
|
-
? (0, contract_1.updateTaskContract)(this.contract, input, this.cwd)
|
|
51
|
+
? (0, contract_1.updateTaskContract)(this.contract, input, this.cwd, intent)
|
|
34
52
|
: (0, contract_1.createTaskContract)(input, this.cwd);
|
|
53
|
+
this.taskEpoch = intent.taskEpoch;
|
|
54
|
+
if (intent.rootObjectiveChanged || !this.rootObjective) {
|
|
55
|
+
this.rootObjective = this.contract.objective;
|
|
56
|
+
}
|
|
57
|
+
if ((0, intent_1.shouldReplaceActiveInstruction)(intent) || !this.activeInstruction) {
|
|
58
|
+
this.activeInstruction = intent.activeInstruction;
|
|
59
|
+
}
|
|
60
|
+
this.activeConstraints = this.mergeList(this.activeConstraints, intent.constraints);
|
|
61
|
+
this.nonGoals = this.mergeList(this.nonGoals, intent.nonGoals);
|
|
62
|
+
this.openQuestions = this.mergeList(this.openQuestions, intent.openQuestions);
|
|
63
|
+
this.intentHistory = [...this.intentHistory, intent].slice(-40);
|
|
35
64
|
this.ledger.recordUserRequirement(input);
|
|
36
65
|
this.refreshCapsule();
|
|
66
|
+
return intent;
|
|
37
67
|
}
|
|
38
|
-
|
|
39
|
-
return (0,
|
|
68
|
+
classifyIntent(input) {
|
|
69
|
+
return (0, intent_1.classifyIntent)(input, this.toJSON());
|
|
70
|
+
}
|
|
71
|
+
assembleMessages(messages, options = {}) {
|
|
72
|
+
if (this.config.enabled === false)
|
|
73
|
+
return messages;
|
|
74
|
+
const built = (0, assembler_1.buildHarnessContext)(this.toJSON(), this.modelId, this.config, options);
|
|
75
|
+
this.promptAssemblyStats = built.stats;
|
|
76
|
+
if (!built.text.trim())
|
|
77
|
+
return messages;
|
|
78
|
+
const cloned = messages.map(message => ({ ...message }));
|
|
79
|
+
const systemIndex = cloned.findIndex(message => message.role === 'system');
|
|
80
|
+
if (systemIndex >= 0) {
|
|
81
|
+
cloned[systemIndex] = {
|
|
82
|
+
...cloned[systemIndex],
|
|
83
|
+
content: `${cloned[systemIndex].content}\n\n---\n${built.text}`,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
cloned.unshift({ role: 'system', content: built.text });
|
|
88
|
+
}
|
|
89
|
+
return cloned;
|
|
40
90
|
}
|
|
41
91
|
recordAssistantResponse(response) {
|
|
42
92
|
if (this.config.enabled === false)
|
|
@@ -92,6 +142,21 @@ class ContextHarness {
|
|
|
92
142
|
this.ledger.recordToolResult(params);
|
|
93
143
|
this.refreshCapsule();
|
|
94
144
|
}
|
|
145
|
+
ingestTurn(params) {
|
|
146
|
+
if (this.config.enabled === false)
|
|
147
|
+
return undefined;
|
|
148
|
+
const intent = params.intent ?? this.intentHistory[this.intentHistory.length - 1] ?? (0, intent_1.classifyIntent)(params.userInput, this.toJSON());
|
|
149
|
+
const summary = (0, turn_summary_1.createTurnSummary)({
|
|
150
|
+
...params,
|
|
151
|
+
turn: this.turnSummaries.length + 1,
|
|
152
|
+
taskEpoch: this.taskEpoch,
|
|
153
|
+
intent,
|
|
154
|
+
});
|
|
155
|
+
this.turnSummaries = [...this.turnSummaries, summary].slice(-80);
|
|
156
|
+
this.refreshEvidenceIndex();
|
|
157
|
+
this.refreshCapsule();
|
|
158
|
+
return summary;
|
|
159
|
+
}
|
|
95
160
|
beforeComplete() {
|
|
96
161
|
const result = (0, drift_guard_1.evaluateCompletionGate)({
|
|
97
162
|
contract: this.contract,
|
|
@@ -137,11 +202,25 @@ class ContextHarness {
|
|
|
137
202
|
return this.capsule;
|
|
138
203
|
}
|
|
139
204
|
toJSON() {
|
|
205
|
+
this.refreshEvidenceIndex();
|
|
140
206
|
return {
|
|
207
|
+
version: 2,
|
|
141
208
|
contract: this.contract,
|
|
142
209
|
ledger: this.ledger.toJSON(),
|
|
143
210
|
capsule: this.capsule,
|
|
144
211
|
completionBlockCount: this.completionBlockCount,
|
|
212
|
+
taskEpoch: this.taskEpoch,
|
|
213
|
+
rootObjective: this.rootObjective,
|
|
214
|
+
activeInstruction: this.activeInstruction,
|
|
215
|
+
intentHistory: this.intentHistory,
|
|
216
|
+
activeConstraints: this.activeConstraints,
|
|
217
|
+
nonGoals: this.nonGoals,
|
|
218
|
+
openQuestions: this.openQuestions,
|
|
219
|
+
evidenceIndex: this.evidenceIndex,
|
|
220
|
+
turnSummaries: this.turnSummaries,
|
|
221
|
+
promptAssemblyStats: this.promptAssemblyStats,
|
|
222
|
+
diagnostics: this.diagnostics,
|
|
223
|
+
reconciledAt: this.reconciledAt,
|
|
145
224
|
updatedAt: Date.now(),
|
|
146
225
|
};
|
|
147
226
|
}
|
|
@@ -149,6 +228,17 @@ class ContextHarness {
|
|
|
149
228
|
if (!this.contract && this.ledger.getEntries().length === 0)
|
|
150
229
|
return;
|
|
151
230
|
this.capsule = (0, capsule_1.createContextCapsule)(this.contract, this.ledger.getEntries());
|
|
231
|
+
this.refreshEvidenceIndex();
|
|
232
|
+
}
|
|
233
|
+
refreshEvidenceIndex() {
|
|
234
|
+
this.evidenceIndex = (0, evidence_1.buildEvidenceIndex)({
|
|
235
|
+
ledger: this.ledger.getEntries(),
|
|
236
|
+
turnSummaries: this.turnSummaries,
|
|
237
|
+
existing: this.evidenceIndex,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
mergeList(existing, incoming) {
|
|
241
|
+
return [...new Set([...existing, ...incoming].map(item => item.trim()).filter(Boolean))].slice(-30);
|
|
152
242
|
}
|
|
153
243
|
}
|
|
154
244
|
exports.ContextHarness = ContextHarness;
|