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.
Files changed (85) hide show
  1. package/README.md +76 -427
  2. package/dist/cli.js +118 -10
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/index.d.ts.map +1 -1
  5. package/dist/commands/index.js +90 -18
  6. package/dist/commands/index.js.map +1 -1
  7. package/dist/commands/types.d.ts +1 -0
  8. package/dist/commands/types.d.ts.map +1 -1
  9. package/dist/commands/types.js.map +1 -1
  10. package/dist/framework/index.d.ts +2 -2
  11. package/dist/framework/index.d.ts.map +1 -1
  12. package/dist/framework/index.js +6 -1
  13. package/dist/framework/index.js.map +1 -1
  14. package/dist/framework/query.d.ts +2 -0
  15. package/dist/framework/query.d.ts.map +1 -1
  16. package/dist/framework/query.js +5 -2
  17. package/dist/framework/query.js.map +1 -1
  18. package/dist/harness/assembler.d.ts +14 -2
  19. package/dist/harness/assembler.d.ts.map +1 -1
  20. package/dist/harness/assembler.js +167 -32
  21. package/dist/harness/assembler.js.map +1 -1
  22. package/dist/harness/capsule.d.ts +2 -1
  23. package/dist/harness/capsule.d.ts.map +1 -1
  24. package/dist/harness/capsule.js +64 -0
  25. package/dist/harness/capsule.js.map +1 -1
  26. package/dist/harness/context-harness.d.ts +23 -3
  27. package/dist/harness/context-harness.d.ts.map +1 -1
  28. package/dist/harness/context-harness.js +97 -7
  29. package/dist/harness/context-harness.js.map +1 -1
  30. package/dist/harness/contract.d.ts +2 -2
  31. package/dist/harness/contract.d.ts.map +1 -1
  32. package/dist/harness/contract.js +7 -3
  33. package/dist/harness/contract.js.map +1 -1
  34. package/dist/harness/evidence.d.ts +15 -0
  35. package/dist/harness/evidence.d.ts.map +1 -0
  36. package/dist/harness/evidence.js +171 -0
  37. package/dist/harness/evidence.js.map +1 -0
  38. package/dist/harness/index.d.ts +9 -3
  39. package/dist/harness/index.d.ts.map +1 -1
  40. package/dist/harness/index.js +15 -1
  41. package/dist/harness/index.js.map +1 -1
  42. package/dist/harness/intent.d.ts +4 -0
  43. package/dist/harness/intent.d.ts.map +1 -0
  44. package/dist/harness/intent.js +139 -0
  45. package/dist/harness/intent.js.map +1 -0
  46. package/dist/harness/state.d.ts +12 -0
  47. package/dist/harness/state.d.ts.map +1 -0
  48. package/dist/harness/state.js +84 -0
  49. package/dist/harness/state.js.map +1 -0
  50. package/dist/harness/turn-summary.d.ts +25 -0
  51. package/dist/harness/turn-summary.d.ts.map +1 -0
  52. package/dist/harness/turn-summary.js +120 -0
  53. package/dist/harness/turn-summary.js.map +1 -0
  54. package/dist/harness/types.d.ts +103 -0
  55. package/dist/harness/types.d.ts.map +1 -1
  56. package/dist/index.d.ts +2 -2
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +6 -1
  59. package/dist/index.js.map +1 -1
  60. package/dist/services/compact/auto-compact.d.ts +3 -1
  61. package/dist/services/compact/auto-compact.d.ts.map +1 -1
  62. package/dist/services/compact/auto-compact.js +10 -0
  63. package/dist/services/compact/auto-compact.js.map +1 -1
  64. package/dist/services/compact/compact.d.ts +5 -1
  65. package/dist/services/compact/compact.d.ts.map +1 -1
  66. package/dist/services/compact/compact.js +11 -1
  67. package/dist/services/compact/compact.js.map +1 -1
  68. package/dist/services/config-dir.d.ts +2 -0
  69. package/dist/services/config-dir.d.ts.map +1 -1
  70. package/dist/services/config-dir.js +5 -0
  71. package/dist/services/config-dir.js.map +1 -1
  72. package/dist/services/session-storage.d.ts +4 -1
  73. package/dist/services/session-storage.d.ts.map +1 -1
  74. package/dist/services/session-storage.js +76 -6
  75. package/dist/services/session-storage.js.map +1 -1
  76. package/dist/tools/mcp.js +1 -1
  77. package/dist/ui-v2/components/session-picker.d.ts +2 -0
  78. package/dist/ui-v2/components/session-picker.d.ts.map +1 -1
  79. package/dist/ui-v2/components/session-picker.js +34 -5
  80. package/dist/ui-v2/components/session-picker.js.map +1 -1
  81. package/dist/ui-v2/state/sessions.d.ts +1 -0
  82. package/dist/ui-v2/state/sessions.d.ts.map +1 -1
  83. package/dist/ui-v2/state/sessions.js +18 -0
  84. package/dist/ui-v2/state/sessions.js.map +1 -1
  85. 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 capsule_1 = require("./capsule");
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 renderHarnessContext(state, modelId, config = {}) {
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
- return '';
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 maxChars = Math.max(2000, Math.floor(contextWindow * evidenceBudgetRatio * 4 * 0.08));
22
- const lines = ['[OpenHorse Context Harness]'];
23
- if (contract) {
24
- lines.push('', 'Task Contract:');
25
- lines.push(`- Objective: ${contract.objective}`);
26
- for (const req of contract.requirements.slice(0, 8)) {
27
- lines.push(`- Requirement: ${req}`);
28
- }
29
- for (const item of contract.successCriteria.slice(0, 6)) {
30
- lines.push(`- Success: ${item}`);
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
- for (const item of contract.prohibitions.slice(0, 6)) {
33
- lines.push(`- Prohibition: ${item}`);
101
+ if (state.capsule.nextAction) {
102
+ coreLines.push(`Next action: ${compact(state.capsule.nextAction, 240)}`);
34
103
  }
35
104
  }
36
- if (state.capsule) {
37
- lines.push('', (0, capsule_1.renderContextCapsule)(state.capsule));
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 evidence = [...state.ledger]
40
- .sort((a, b) => b.importance - a.importance || b.createdAt - a.createdAt)
41
- .slice(0, 10);
42
- if (evidence.length > 0) {
43
- lines.push('', 'Relevant Evidence:');
44
- for (const entry of evidence) {
45
- lines.push(`- [${entry.type}] ${entry.content}`);
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
- lines.push('', 'Use this context to stay on the current task. Do not claim verification unless it is listed above or produced by a tool result in this turn.');
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
- return truncateByChars(rendered, Math.max(maxChars, estimateTokens(rendered) * 2));
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 = renderHarnessContext(state, modelId, config);
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":";;AAcA,oDAwCC;AAED,0DAuBC;AA9ED,6DAAkE;AAClE,uCAAiD;AAGjD,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,QAAgB;IACrD,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC,GAAG,kCAAkC,CAAC;AACxF,CAAC;AAED,SAAgB,oBAAoB,CAAC,KAAmB,EAAE,OAAe,EAAE,SAAwB,EAAE;IACnG,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAChC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAExE,MAAM,aAAa,GAAG,IAAA,qCAAqB,EAAC,OAAO,CAAC,CAAC;IACrD,MAAM,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,IAAI,GAAG,CAAC;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,mBAAmB,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAE5F,MAAM,KAAK,GAAa,CAAC,6BAA6B,CAAC,CAAC;IACxD,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;QACjD,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACxD,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACrD,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAA,8BAAoB,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;SAC/B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;SACxE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,8IAA8I,CAAC,CAAC;IAC/J,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrF,CAAC;AAED,SAAgB,uBAAuB,CACrC,QAAmB,EACnB,KAAmB,EACnB,OAAe,EACf,SAAwB,EAAE;IAE1B,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK;QAAE,OAAO,QAAQ,CAAC;IAE9C,MAAM,cAAc,GAAG,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACpE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IAE5C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC3E,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,WAAW,CAAC,GAAG;YACpB,GAAG,MAAM,CAAC,WAAW,CAAC;YACtB,OAAO,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,YAAY,cAAc,EAAE;SACpE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"assembler.js","sourceRoot":"","sources":["../../src/harness/assembler.ts"],"names":[],"mappings":";;AA4DA,kDA0IC;AAED,oDAEC;AAED,0DAwBC;AAnOD,6DAAkE;AAClE,yCAA0D;AAG1D,SAAS,eAAe,CAAC,IAAY,EAAE,QAAgB;IACrD,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC,GAAG,kCAAkC,CAAC;AACxF,CAAC;AAYD,SAAS,OAAO,CAAC,IAAY,EAAE,GAAG,GAAG,GAAG;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,OAAO,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;AACrF,CAAC;AAED,SAAS,QAAQ,CAAC,KAAe,EAAE,KAAa,EAAE,MAA4B,EAAE,KAAK,GAAG,CAAC;IACvF,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IACxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAqC,EAAE,iBAA0B;IACtF,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACtD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAAE,KAAK,IAAI,CAAC,CAAC;QACxD,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC1H,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,OAAO,MAAM;SACV,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC3E,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxG,CAAC;AAED,SAAS,YAAY,CAAC,MAAsB;IAC1C,MAAM,MAAM,GAAG;QACb,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;QACxC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;QAChD,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,gBAAgB,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE;KAC7E,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,MAAM,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC5G,CAAC;AAED,SAAgB,mBAAmB,CACjC,KAAmB,EACnB,OAAe,EACf,SAAwB,EAAE,EAC1B,UAAiC,EAAE;IAEnC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAChC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACrF,MAAM,UAAU,GAAwB;YACtC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,OAAO;YACP,YAAY,EAAE,CAAC;YACf,eAAe,EAAE,CAAC;YAClB,UAAU,EAAE,CAAC;YACb,oBAAoB,EAAE,CAAC;YACvB,sBAAsB,EAAE,CAAC;YACzB,gBAAgB,EAAE,EAAE;YACpB,eAAe,EAAE,EAAE;YACnB,QAAQ,EAAE,EAAE;SACb,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,aAAa,GAAG,IAAA,qCAAqB,EAAC,OAAO,CAAC,CAAC;IACrD,MAAM,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,IAAI,GAAG,CAAC;IAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,mBAAmB,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3G,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC;IAC5E,MAAM,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC;IAE9E,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,QAAQ,EAAE,SAAS,CAAC;IACjE,MAAM,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,IAAI,QAAQ,EAAE,UAAU,CAAC;IAC1E,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAa,CAAC,gCAAgC,CAAC,CAAC;IAC/D,SAAS,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC,CAAC;IACtD,IAAI,aAAa;QAAE,SAAS,CAAC,IAAI,CAAC,mBAAmB,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACpF,IAAI,iBAAiB;QAAE,SAAS,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAChG,IAAI,YAAY,EAAE,CAAC;QACjB,SAAS,CAAC,IAAI,CAAC,kBAAkB,YAAY,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,GAAG,CAAC,MAAM,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAChI,CAAC;IACD,QAAQ,CAAC,SAAS,EAAE,oBAAoB,EAAE,KAAK,CAAC,iBAAiB,IAAI,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IAC/F,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,QAAQ,IAAI,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;IAC9E,QAAQ,CAAC,SAAS,EAAE,gBAAgB,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAC9D,QAAQ,CAAC,SAAS,EAAE,kBAAkB,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;IAEtE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;QAChD,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzG,SAAS,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACtC,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjG,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjG,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtG,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC7B,SAAS,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,iBAAiB,IAAI,EAAE,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;IAChG,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,QAAQ,CAAC,SAAS,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,cAAc,GAAG,IAAA,uBAAY,EAAC,KAAK,CAAC,aAAa,IAAI,EAAE,EAAE;QAC7D,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,iBAAiB;QACjB,aAAa;KACd,CAAC,CAAC;IACH,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,gBAAgB,GAA4C,EAAE,CAAC;IACrE,MAAM,eAAe,GAA2C,EAAE,CAAC;IACnE,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,IAAA,yBAAc,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9E,IAAI,kBAAkB,GAAG,MAAM,IAAI,oBAAoB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvF,kBAAkB,IAAI,MAAM,CAAC;YAC7B,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;YACzC,gBAAgB,CAAC,IAAI,CAAC;gBACpB,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM;gBACN,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;aAClC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,IAAI,CAAC;gBACnB,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM;gBACN,MAAM,EAAE,0BAA0B;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACzE,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,UAAU,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,UAAU,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC;QAChJ,MAAM,MAAM,GAAG,IAAA,yBAAc,EAAC,IAAI,CAAC,CAAC;QACpC,IAAI,cAAc,GAAG,MAAM,GAAG,sBAAsB,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM;QAC1F,cAAc,IAAI,MAAM,CAAC;QACzB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,QAAQ,GAAa,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IAC7B,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,wBAAwB,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAChC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,+KAA+K,CAAC,CAAC;IAEhM,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,YAAY,GAAG,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,eAAe,GAAG,IAAA,yBAAc,EAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAwB;QACjC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,OAAO;QACP,YAAY;QACZ,eAAe;QACf,UAAU,EAAE,IAAA,yBAAc,EAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,oBAAoB;QACpB,sBAAsB;QACtB,gBAAgB;QAChB,eAAe;QACf,QAAQ;KACT,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AAED,SAAgB,oBAAoB,CAAC,KAAmB,EAAE,OAAe,EAAE,SAAwB,EAAE;IACnG,OAAO,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC;AAED,SAAgB,uBAAuB,CACrC,QAAmB,EACnB,KAAmB,EACnB,OAAe,EACf,SAAwB,EAAE,EAC1B,UAAiC,EAAE;IAEnC,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK;QAAE,OAAO,QAAQ,CAAC;IAE9C,MAAM,cAAc,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IACjF,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IAE5C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC3E,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,WAAW,CAAC,GAAG;YACpB,GAAG,MAAM,CAAC,WAAW,CAAC;YACtB,OAAO,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,YAAY,cAAc,EAAE;SACpE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -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;AAqB1F,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"}
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"}
@@ -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":"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"}
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 type { CompletionGateResult, ContextCapsule, DriftCheckResult, HarnessConfig, HarnessState } from './types';
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): void;
19
- assembleMessages(messages: Message[]): Message[];
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;AAM5D,OAAO,KAAK,EACV,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,YAAY,EACb,MAAM,SAAS,CAAC;AAcjB,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAC,CAAiB;IACjC,OAAO,CAAC,oBAAoB,CAAS;gBAEzB,OAAO,EAAE,qBAAqB;IAU1C,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAShD,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;IAIhD,uBAAuB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAQpD,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,GAAG,IAAI;IAmB7F,aAAa,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,gBAAgB;IAsBxF,gBAAgB,CAAC,MAAM,EAAE;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,IAAI;IAMR,cAAc,IAAI,oBAAoB;IAgCtC,0BAA0B,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO;IAOjE,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM;IAQrD,UAAU,IAAI,cAAc,GAAG,SAAS;IAKxC,MAAM,IAAI,YAAY;IAUtB,OAAO,CAAC,cAAc;CAIvB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAEnF"}
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
- this.contract = options.state?.contract;
25
- this.ledger = new ledger_1.ContextLedger(options.state?.ledger ?? []);
26
- this.capsule = options.state?.capsule;
27
- this.completionBlockCount = options.state?.completionBlockCount ?? 0;
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
- assembleMessages(messages) {
39
- return (0, assembler_1.assembleHarnessMessages)(messages, this.toJSON(), this.modelId, this.config);
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;