@codeledger/engine 0.7.3 → 0.7.5
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/dist/broker/completion.d.ts +9 -0
- package/dist/broker/completion.d.ts.map +1 -0
- package/dist/broker/completion.js +51 -0
- package/dist/broker/completion.js.map +1 -0
- package/dist/broker/evidence.d.ts +11 -0
- package/dist/broker/evidence.d.ts.map +1 -0
- package/dist/broker/evidence.js +39 -0
- package/dist/broker/evidence.js.map +1 -0
- package/dist/broker/index.d.ts +14 -0
- package/dist/broker/index.d.ts.map +1 -0
- package/dist/broker/index.js +14 -0
- package/dist/broker/index.js.map +1 -0
- package/dist/broker/memory-lookup.d.ts +41 -0
- package/dist/broker/memory-lookup.d.ts.map +1 -0
- package/dist/broker/memory-lookup.js +70 -0
- package/dist/broker/memory-lookup.js.map +1 -0
- package/dist/broker/preamble.d.ts +19 -0
- package/dist/broker/preamble.d.ts.map +1 -0
- package/dist/broker/preamble.js +13 -0
- package/dist/broker/preamble.js.map +1 -0
- package/dist/broker/structural.d.ts +10 -0
- package/dist/broker/structural.d.ts.map +1 -0
- package/dist/broker/structural.js +52 -0
- package/dist/broker/structural.js.map +1 -0
- package/dist/broker/task-resolution.d.ts +17 -0
- package/dist/broker/task-resolution.d.ts.map +1 -0
- package/dist/broker/task-resolution.js +386 -0
- package/dist/broker/task-resolution.js.map +1 -0
- package/dist/broker/validation.d.ts +14 -0
- package/dist/broker/validation.d.ts.map +1 -0
- package/dist/broker/validation.js +75 -0
- package/dist/broker/validation.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/insight/collector.d.ts +31 -0
- package/dist/insight/collector.d.ts.map +1 -0
- package/dist/insight/collector.js +172 -0
- package/dist/insight/collector.js.map +1 -0
- package/dist/insight/engine.d.ts +18 -0
- package/dist/insight/engine.d.ts.map +1 -0
- package/dist/insight/engine.js +84 -0
- package/dist/insight/engine.js.map +1 -0
- package/dist/insight/formatter.d.ts +9 -0
- package/dist/insight/formatter.d.ts.map +1 -0
- package/dist/insight/formatter.js +87 -0
- package/dist/insight/formatter.js.map +1 -0
- package/dist/insight/index.d.ts +13 -0
- package/dist/insight/index.d.ts.map +1 -0
- package/dist/insight/index.js +11 -0
- package/dist/insight/index.js.map +1 -0
- package/dist/insight/session.d.ts +11 -0
- package/dist/insight/session.d.ts.map +1 -0
- package/dist/insight/session.js +60 -0
- package/dist/insight/session.js.map +1 -0
- package/package.json +6 -2
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
// ─── Shared algorithms (matching packages/cli/src/memory/ exactly) ──────────
|
|
2
|
+
/**
|
|
3
|
+
* Extract simple word tokens from a task string for ontology matching.
|
|
4
|
+
*/
|
|
5
|
+
function extractTaskTokens(taskText) {
|
|
6
|
+
return taskText
|
|
7
|
+
.toLowerCase()
|
|
8
|
+
.replace(/[^a-z0-9 ]/g, ' ')
|
|
9
|
+
.split(/\s+/)
|
|
10
|
+
.filter((w) => w.length > 3);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Days since an ISO timestamp.
|
|
14
|
+
* Matches packages/cli/src/memory/recent-truth.ts daysSince().
|
|
15
|
+
*/
|
|
16
|
+
function daysSince(isoTimestamp) {
|
|
17
|
+
const then = new Date(isoTimestamp).getTime();
|
|
18
|
+
const now = Date.now();
|
|
19
|
+
return (now - then) / (1000 * 60 * 60 * 24);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Compute a decayed relevance score using linear decay.
|
|
23
|
+
* Matches packages/cli/src/memory/recent-truth.ts computeDecayedScore().
|
|
24
|
+
*
|
|
25
|
+
* Full score at age 0, 0 at ttlDays. Returns base score if no TTL.
|
|
26
|
+
*/
|
|
27
|
+
function computeDecayedScore(baseScore, ttlDays, timestamp) {
|
|
28
|
+
const base = baseScore ?? 1.0;
|
|
29
|
+
if (!ttlDays)
|
|
30
|
+
return base;
|
|
31
|
+
const age = daysSince(timestamp);
|
|
32
|
+
const factor = Math.max(0, 1 - age / ttlDays);
|
|
33
|
+
return base * factor;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Check if a record has expired past its TTL.
|
|
37
|
+
* Matches packages/cli/src/memory/recent-truth.ts isExpired().
|
|
38
|
+
*/
|
|
39
|
+
function isExpired(ttlDays, timestamp) {
|
|
40
|
+
if (!ttlDays)
|
|
41
|
+
return false;
|
|
42
|
+
return daysSince(timestamp) > ttlDays;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Score a concept meaning against context hints.
|
|
46
|
+
* Matches packages/cli/src/memory/ontology.ts scoreMeaning() exactly.
|
|
47
|
+
*/
|
|
48
|
+
function scoreMeaning(meaning, contextHints) {
|
|
49
|
+
let score = meaning.confidenceBase ?? 0.5;
|
|
50
|
+
for (const hint of contextHints) {
|
|
51
|
+
const lh = hint.toLowerCase();
|
|
52
|
+
if (meaning.relatedConcepts.some((c) => c.toLowerCase().includes(lh)))
|
|
53
|
+
score += 0.1;
|
|
54
|
+
if (meaning.fileHints.some((f) => f.toLowerCase().includes(lh)))
|
|
55
|
+
score += 0.15;
|
|
56
|
+
if (meaning.label.toLowerCase().includes(lh))
|
|
57
|
+
score += 0.2;
|
|
58
|
+
}
|
|
59
|
+
return score;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Check if two scores are close enough to consider ambiguous.
|
|
63
|
+
* Matches packages/cli/src/memory/ontology.ts scoresAreClose().
|
|
64
|
+
*/
|
|
65
|
+
function scoresAreClose(a, b, threshold = 0.15) {
|
|
66
|
+
return Math.abs(a - b) < threshold;
|
|
67
|
+
}
|
|
68
|
+
// ─── Evidence tier evaluation (matching packages/cli/src/memory/evidence-gates.ts) ──
|
|
69
|
+
const TIER_ORDER = ['possible', 'likely', 'observed'];
|
|
70
|
+
function tierRank(tier) {
|
|
71
|
+
return TIER_ORDER.indexOf(tier);
|
|
72
|
+
}
|
|
73
|
+
function tierMeetsMinimum(candidate, minimum) {
|
|
74
|
+
return tierRank(candidate) >= tierRank(minimum);
|
|
75
|
+
}
|
|
76
|
+
// ─── Ontology expansion ─────────────────────────────────────────────────────
|
|
77
|
+
/**
|
|
78
|
+
* Resolve a term through the ontology, returning expansion info.
|
|
79
|
+
* Matches packages/cli/src/memory/ontology.ts expandTerm() logic.
|
|
80
|
+
*/
|
|
81
|
+
function expandTermLocal(ontology, term, contextHints) {
|
|
82
|
+
const normalized = term.toLowerCase().trim();
|
|
83
|
+
// Try alias resolution first, then direct name match
|
|
84
|
+
const alias = ontology.aliases.find((a) => a.term.toLowerCase() === normalized);
|
|
85
|
+
const conceptId = alias?.conceptId;
|
|
86
|
+
const concept = conceptId
|
|
87
|
+
? ontology.concepts.find((c) => c.id === conceptId)
|
|
88
|
+
: ontology.concepts.find((c) => c.displayName.toLowerCase() === normalized);
|
|
89
|
+
if (!concept) {
|
|
90
|
+
return { concept: undefined, fileHints: [], isAmbiguous: false, meanings: [] };
|
|
91
|
+
}
|
|
92
|
+
// Rank meanings by score (matching CLI expandTerm)
|
|
93
|
+
const rankedMeanings = [...concept.meanings].sort((a, b) => {
|
|
94
|
+
return scoreMeaning(b, contextHints) - scoreMeaning(a, contextHints);
|
|
95
|
+
});
|
|
96
|
+
const allFileHints = new Set([
|
|
97
|
+
...concept.fileHints,
|
|
98
|
+
...rankedMeanings.flatMap((m) => m.fileHints),
|
|
99
|
+
]);
|
|
100
|
+
// Ambiguity detection using scoresAreClose (matching CLI)
|
|
101
|
+
const isAmbiguous = rankedMeanings.length > 1 &&
|
|
102
|
+
scoresAreClose(scoreMeaning(rankedMeanings[0], contextHints), scoreMeaning(rankedMeanings[1], contextHints));
|
|
103
|
+
return {
|
|
104
|
+
concept,
|
|
105
|
+
fileHints: Array.from(allFileHints),
|
|
106
|
+
isAmbiguous,
|
|
107
|
+
disambiguationPrompt: isAmbiguous ? concept.disambiguationPrompt : undefined,
|
|
108
|
+
meanings: rankedMeanings.map((m) => m.label),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// ─── Recent truth with proper decay ─────────────────────────────────────────
|
|
112
|
+
/**
|
|
113
|
+
* Get hot accepted changes with proper linear decay scoring.
|
|
114
|
+
* Matches packages/cli/src/memory/recent-truth.ts getHotAcceptedChanges().
|
|
115
|
+
*/
|
|
116
|
+
function getHotAcceptedChanges(changes, minScore = 0.2) {
|
|
117
|
+
return changes
|
|
118
|
+
.filter((r) => !isExpired(r.ttlDays, r.timestamp))
|
|
119
|
+
.map((r) => ({
|
|
120
|
+
record: r,
|
|
121
|
+
decayed: computeDecayedScore(r.relevanceScore, r.ttlDays, r.timestamp),
|
|
122
|
+
}))
|
|
123
|
+
.filter((r) => r.decayed >= minScore)
|
|
124
|
+
.sort((a, b) => b.decayed - a.decayed)
|
|
125
|
+
.map((r) => r.record);
|
|
126
|
+
}
|
|
127
|
+
// ─── Main entry point ───────────────────────────────────────────────────────
|
|
128
|
+
/**
|
|
129
|
+
* Resolve a task description into structured context from all ledgers.
|
|
130
|
+
*
|
|
131
|
+
* This is the primary broker entry point for task resolution.
|
|
132
|
+
*/
|
|
133
|
+
export function resolveTaskContext(memory, taskText, options = {}) {
|
|
134
|
+
const { maxRecentTruth = 5, maxSafeZones = 5, maxFileHints = 15, maxFeatures = 3, maxADRs = 2, maxNeighborhoods = 3, anchorIds = [], } = options;
|
|
135
|
+
const taskTokens = extractTaskTokens(taskText);
|
|
136
|
+
// ── Ontology expansion ──────────────────────────────────────────────────
|
|
137
|
+
const allConcepts = new Set();
|
|
138
|
+
const allMeanings = new Set();
|
|
139
|
+
const allFileHints = new Set();
|
|
140
|
+
const disambiguationPrompts = [];
|
|
141
|
+
for (const token of [...new Set(taskTokens)]) {
|
|
142
|
+
const expansion = expandTermLocal(memory.ontology, token, taskTokens);
|
|
143
|
+
if (expansion.concept) {
|
|
144
|
+
allConcepts.add(expansion.concept.displayName);
|
|
145
|
+
expansion.meanings.forEach((m) => allMeanings.add(m));
|
|
146
|
+
expansion.fileHints.forEach((f) => allFileHints.add(f));
|
|
147
|
+
if (expansion.disambiguationPrompt) {
|
|
148
|
+
disambiguationPrompts.push(expansion.disambiguationPrompt);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const ontologyExpansion = {
|
|
153
|
+
concepts: Array.from(allConcepts),
|
|
154
|
+
meanings: allMeanings.size > 0 ? Array.from(allMeanings) : undefined,
|
|
155
|
+
disambiguationPrompt: disambiguationPrompts.length > 0
|
|
156
|
+
? disambiguationPrompts.join(' ')
|
|
157
|
+
: undefined,
|
|
158
|
+
};
|
|
159
|
+
// ── Recent truth (with proper decay scoring) ────────────────────────────
|
|
160
|
+
const hotChanges = getHotAcceptedChanges(memory.recentTruth.acceptedChanges)
|
|
161
|
+
.slice(0, maxRecentTruth);
|
|
162
|
+
const recentTruth = {
|
|
163
|
+
highlights: hotChanges.map((c) => `${c.title} [${c.status}]${c.summary ? `: ${c.summary}` : ''}`),
|
|
164
|
+
acceptedChangeIds: hotChanges.length > 0 ? hotChanges.map((c) => c.id) : undefined,
|
|
165
|
+
};
|
|
166
|
+
// ── Safe zones ──────────────────────────────────────────────────────────
|
|
167
|
+
const cleanSurfaces = memory.validation.cleanSurfaces
|
|
168
|
+
.filter((s) => s.status === 'clean')
|
|
169
|
+
.slice(0, maxSafeZones);
|
|
170
|
+
const safeZones = {
|
|
171
|
+
scopes: cleanSurfaces.map((s) => s.scopeId),
|
|
172
|
+
reason: cleanSurfaces.length > 0
|
|
173
|
+
? `${cleanSurfaces.length} surface(s) validated and clean`
|
|
174
|
+
: undefined,
|
|
175
|
+
};
|
|
176
|
+
// ── Relevant files ──────────────────────────────────────────────────────
|
|
177
|
+
const relevantFiles = Array.from(allFileHints).slice(0, maxFileHints);
|
|
178
|
+
// ── Relevant docs ───────────────────────────────────────────────────────
|
|
179
|
+
const docHints = new Set();
|
|
180
|
+
for (const token of [...new Set(taskTokens)]) {
|
|
181
|
+
const alias = memory.ontology.aliases.find((a) => a.term.toLowerCase() === token.toLowerCase());
|
|
182
|
+
const cId = alias?.conceptId;
|
|
183
|
+
const concept = cId
|
|
184
|
+
? memory.ontology.concepts.find((c) => c.id === cId)
|
|
185
|
+
: memory.ontology.concepts.find((c) => c.displayName.toLowerCase() === token.toLowerCase());
|
|
186
|
+
if (concept?.docHints) {
|
|
187
|
+
concept.docHints.forEach((d) => docHints.add(d));
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// ── Preamble (enriched — matching CLI generateContextPreamble quality) ──
|
|
191
|
+
const preamble = buildTaskPreamble(memory, taskText, ontologyExpansion, recentTruth, safeZones, allFileHints, anchorIds, maxFeatures, maxADRs, maxNeighborhoods);
|
|
192
|
+
// ── Normalized intent ───────────────────────────────────────────────────
|
|
193
|
+
const normalizedIntent = extractNormalizedIntent(taskText);
|
|
194
|
+
return {
|
|
195
|
+
version: '1.0',
|
|
196
|
+
taskText,
|
|
197
|
+
normalizedIntent,
|
|
198
|
+
ontologyExpansion,
|
|
199
|
+
recentTruth,
|
|
200
|
+
safeZones,
|
|
201
|
+
relevantFiles,
|
|
202
|
+
relevantDocs: docHints.size > 0 ? Array.from(docHints) : undefined,
|
|
203
|
+
preamble,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Extract a simple normalized intent from task text.
|
|
208
|
+
*/
|
|
209
|
+
function extractNormalizedIntent(taskText) {
|
|
210
|
+
const lower = taskText.toLowerCase();
|
|
211
|
+
const operations = ['add', 'create', 'build', 'implement', 'update', 'fix', 'refactor', 'remove', 'delete', 'test', 'review', 'debug'];
|
|
212
|
+
const operation = operations.find((op) => lower.startsWith(op) || lower.includes(` ${op} `));
|
|
213
|
+
// Extract entities: words that are likely nouns (capitalized or quoted)
|
|
214
|
+
const entityMatches = taskText.match(/["']([^"']+)["']|([A-Z][a-zA-Z]+)/g);
|
|
215
|
+
const entities = entityMatches
|
|
216
|
+
? entityMatches.map((m) => m.replace(/["']/g, '')).filter((e) => e.length > 2)
|
|
217
|
+
: undefined;
|
|
218
|
+
return {
|
|
219
|
+
operation,
|
|
220
|
+
entities: entities && entities.length > 0 ? entities : undefined,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Build a compact preamble string from broker context.
|
|
225
|
+
*
|
|
226
|
+
* Enriched to match the CLI's generateContextPreamble quality:
|
|
227
|
+
* includes features, ADRs, neighborhood manifests, file hints,
|
|
228
|
+
* and proper tier-aware evidence gate evaluation.
|
|
229
|
+
*/
|
|
230
|
+
function buildTaskPreamble(memory, taskText, ontology, truth, safeZones, fileHintBoosts, anchorIds, maxFeatures, maxADRs, maxNeighborhoods) {
|
|
231
|
+
const sections = [];
|
|
232
|
+
// ── Header ──────────────────────────────────────────────────────────────
|
|
233
|
+
sections.push(`You are operating in repository: ${memory.repoId}`);
|
|
234
|
+
sections.push(`Current task: ${taskText}`);
|
|
235
|
+
// ── Recent truth highlights ─────────────────────────────────────────────
|
|
236
|
+
if (truth.highlights.length > 0) {
|
|
237
|
+
const lines = truth.highlights.map((h) => ` - ${h}`);
|
|
238
|
+
sections.push(`Recent accepted truth:\n${lines.join('\n')}`);
|
|
239
|
+
}
|
|
240
|
+
// ── Active features ─────────────────────────────────────────────────────
|
|
241
|
+
const activeFeatures = memory.recentTruth.recentFeatures
|
|
242
|
+
.filter((f) => !isExpired(f.ttlDays, f.introducedAt))
|
|
243
|
+
.sort((a, b) => (b.relevanceScore ?? 1) - (a.relevanceScore ?? 1))
|
|
244
|
+
.slice(0, maxFeatures);
|
|
245
|
+
if (activeFeatures.length > 0) {
|
|
246
|
+
const featureLines = activeFeatures.map((f) => ` - ${f.name} (${f.maturity})${f.concepts.length > 0 ? ` — concepts: ${f.concepts.join(', ')}` : ''}`);
|
|
247
|
+
sections.push(`Active features:\n${featureLines.join('\n')}`);
|
|
248
|
+
}
|
|
249
|
+
// ── Architecture decisions ──────────────────────────────────────────────
|
|
250
|
+
const activeADRs = memory.recentTruth.architectureDecisions
|
|
251
|
+
.filter((a) => !isExpired(a.ttlDays, a.timestamp))
|
|
252
|
+
.sort((a, b) => (b.relevanceScore ?? 1) - (a.relevanceScore ?? 1))
|
|
253
|
+
.slice(0, maxADRs);
|
|
254
|
+
if (activeADRs.length > 0) {
|
|
255
|
+
const adrLines = activeADRs.map((a) => ` - ${a.title}: ${a.decision}`);
|
|
256
|
+
sections.push(`Architecture decisions:\n${adrLines.join('\n')}`);
|
|
257
|
+
}
|
|
258
|
+
// ── Safe zones ──────────────────────────────────────────────────────────
|
|
259
|
+
if (safeZones.scopes.length > 0) {
|
|
260
|
+
sections.push(`Validated safe zones (do not retest unnecessarily): ${safeZones.scopes.join(', ')}`);
|
|
261
|
+
}
|
|
262
|
+
// ── Disambiguation ──────────────────────────────────────────────────────
|
|
263
|
+
if (ontology.disambiguationPrompt) {
|
|
264
|
+
sections.push(`Terminology disambiguation:\n - ${ontology.disambiguationPrompt}`);
|
|
265
|
+
}
|
|
266
|
+
// ── File relevance hints (from ontology) ────────────────────────────────
|
|
267
|
+
if (fileHintBoosts.size > 0) {
|
|
268
|
+
const hints = Array.from(fileHintBoosts).slice(0, 10);
|
|
269
|
+
sections.push(`File relevance hints (from ontology): ${hints.join(', ')}`);
|
|
270
|
+
}
|
|
271
|
+
// ── Structural wiring context (neighborhood manifests) ──────────────────
|
|
272
|
+
const manifests = anchorIds
|
|
273
|
+
.slice(0, maxNeighborhoods)
|
|
274
|
+
.map((id) => buildNeighborhoodSummary(memory, id))
|
|
275
|
+
.filter((m) => m !== undefined);
|
|
276
|
+
if (manifests.length > 0) {
|
|
277
|
+
const manifestLines = manifests.map((m) => ` - ${m}`);
|
|
278
|
+
sections.push(`Structural wiring context:\n${manifestLines.join('\n')}`);
|
|
279
|
+
}
|
|
280
|
+
// ── Evidence gate reminders (tier-aware, matching CLI evaluateGate) ─────
|
|
281
|
+
const gateReminders = [];
|
|
282
|
+
const tiersToWarn = ['possible'];
|
|
283
|
+
for (const tier of tiersToWarn) {
|
|
284
|
+
for (const rule of memory.evidence.rules) {
|
|
285
|
+
// Check suppression using proper tier comparison (matching evaluateGate)
|
|
286
|
+
const suppressed = rule.suppressBelowTier !== undefined &&
|
|
287
|
+
!tierMeetsMinimum(tier, rule.suppressBelowTier);
|
|
288
|
+
if (suppressed) {
|
|
289
|
+
const cmds = rule.requiredChecks
|
|
290
|
+
.filter((c) => c.command)
|
|
291
|
+
.map((c) => `\`${c.command}\``)
|
|
292
|
+
.join(', ');
|
|
293
|
+
gateReminders.push(` - Do not report '${rule.findingType}' at '${tier}' confidence without completing evidence checks.${cmds ? ` Required checks: ${cmds}.` : ''}`);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
if (gateReminders.length > 0) {
|
|
298
|
+
sections.push(`Evidence gate reminders:\n${gateReminders.join('\n')}`);
|
|
299
|
+
}
|
|
300
|
+
// ── Active lessons (full trigger evaluation with tiered injection) ────────
|
|
301
|
+
if (memory.lessons && memory.lessons.lessons.length > 0) {
|
|
302
|
+
const lessonLines = [];
|
|
303
|
+
for (const lesson of memory.lessons.lessons) {
|
|
304
|
+
if (!lesson.active || lesson.status === 'deprecated')
|
|
305
|
+
continue;
|
|
306
|
+
// Compute risk multiplier from event history (matching CIC's computeRiskMultiplier)
|
|
307
|
+
const events = memory.lessons.events.filter((e) => e.lessonId === lesson.id);
|
|
308
|
+
const recentTriggers = events.filter((e) => e.eventType === 'triggered' && daysSince(e.timestamp) <= 14).length;
|
|
309
|
+
const recentIgnores = events.filter((e) => e.eventType === 'ignored' && daysSince(e.timestamp) <= 14).length;
|
|
310
|
+
const recentResolves = events.filter((e) => e.eventType === 'resolved' && daysSince(e.timestamp) <= 14).length;
|
|
311
|
+
const unresolvedTriggers = Math.max(0, recentTriggers - recentResolves);
|
|
312
|
+
const riskMultiplier = 1.0 + (unresolvedTriggers * 0.3) + (recentIgnores * 0.5);
|
|
313
|
+
// Tier 1: high severity — always include
|
|
314
|
+
if (lesson.severity === 'high') {
|
|
315
|
+
lessonLines.push(` - [HIGH] ${lesson.title}: ${lesson.summary}`);
|
|
316
|
+
continue;
|
|
317
|
+
}
|
|
318
|
+
// Tier 1 also: high risk multiplier (≥2.0) from escalation
|
|
319
|
+
if (riskMultiplier >= 2.0) {
|
|
320
|
+
lessonLines.push(` - [ESCALATED ×${riskMultiplier.toFixed(1)}] ${lesson.title}: ${lesson.summary}`);
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
// Tier 2: full trigger evaluation (files, task, file_types)
|
|
324
|
+
const triggered = evaluateLessonTrigger(lesson, taskText);
|
|
325
|
+
if (triggered) {
|
|
326
|
+
lessonLines.push(` - ${lesson.title}: ${lesson.summary}`);
|
|
327
|
+
}
|
|
328
|
+
// Tier 3: not included in preamble (only accessible via CLI)
|
|
329
|
+
}
|
|
330
|
+
if (lessonLines.length > 0) {
|
|
331
|
+
sections.push(`Active lessons (repo-specific):\n${lessonLines.slice(0, 5).join('\n')}`);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return sections.join('\n\n');
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Build a compact summary for a neighborhood anchor.
|
|
338
|
+
* Inline helper to avoid coupling to CLI structural-trust module.
|
|
339
|
+
*/
|
|
340
|
+
function buildNeighborhoodSummary(memory, anchorId) {
|
|
341
|
+
const neighborhood = memory.structure.neighborhoods.find((n) => n.anchor.id === anchorId);
|
|
342
|
+
if (!neighborhood)
|
|
343
|
+
return undefined;
|
|
344
|
+
const parts = [`${neighborhood.anchor.type} '${anchorId}'`];
|
|
345
|
+
if (neighborhood.upstream.length > 0) {
|
|
346
|
+
parts.push(`receives from: ${neighborhood.upstream.join(', ')}`);
|
|
347
|
+
}
|
|
348
|
+
if (neighborhood.downstream.length > 0) {
|
|
349
|
+
parts.push(`feeds into: ${neighborhood.downstream.join(', ')}`);
|
|
350
|
+
}
|
|
351
|
+
if (neighborhood.immutableWires && neighborhood.immutableWires.length > 0) {
|
|
352
|
+
parts.push(`immutable wires (do not bypass): ${neighborhood.immutableWires.join(', ')}`);
|
|
353
|
+
}
|
|
354
|
+
if (neighborhood.trustReason) {
|
|
355
|
+
parts.push(`trust: ${neighborhood.trustLevel} — ${neighborhood.trustReason}`);
|
|
356
|
+
}
|
|
357
|
+
return parts.join('; ');
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Evaluate a lesson's trigger criteria against a task description.
|
|
361
|
+
* Broker-local implementation matching CIC's evaluateTrigger logic
|
|
362
|
+
* for task_patterns, concepts, and file_types.
|
|
363
|
+
*/
|
|
364
|
+
function evaluateLessonTrigger(lesson, taskText) {
|
|
365
|
+
const criteria = lesson.triggerCriteria;
|
|
366
|
+
const taskTokens = extractTaskTokens(taskText);
|
|
367
|
+
// Task pattern matching
|
|
368
|
+
if (criteria.task_patterns && criteria.task_patterns.length > 0) {
|
|
369
|
+
const lower = taskText.toLowerCase();
|
|
370
|
+
if (criteria.task_patterns.some((p) => lower.includes(p.toLowerCase())))
|
|
371
|
+
return true;
|
|
372
|
+
}
|
|
373
|
+
// Concept matching via task tokens
|
|
374
|
+
if (lesson.concepts && lesson.concepts.length > 0) {
|
|
375
|
+
if (lesson.concepts.some((c) => taskTokens.some((t) => t.includes(c.toLowerCase()) || c.toLowerCase().includes(t))))
|
|
376
|
+
return true;
|
|
377
|
+
}
|
|
378
|
+
// Task type matching
|
|
379
|
+
if (lesson.taskTypes && lesson.taskTypes.length > 0) {
|
|
380
|
+
const lower = taskText.toLowerCase();
|
|
381
|
+
if (lesson.taskTypes.some((t) => lower.includes(t.toLowerCase())))
|
|
382
|
+
return true;
|
|
383
|
+
}
|
|
384
|
+
return false;
|
|
385
|
+
}
|
|
386
|
+
//# sourceMappingURL=task-resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-resolution.js","sourceRoot":"","sources":["../../src/broker/task-resolution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { CodeLedgerMemory, BrokerValidationResponse } from '@codeledger/types';
|
|
2
|
+
/**
|
|
3
|
+
* Look up validation status for a given target (scope ID).
|
|
4
|
+
*/
|
|
5
|
+
export declare function getValidationStatus(memory: CodeLedgerMemory, target: string): BrokerValidationResponse;
|
|
6
|
+
/**
|
|
7
|
+
* Return all surfaces that are currently clean.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getCleanSurfacesList(memory: CodeLedgerMemory, scope?: string): BrokerValidationResponse[];
|
|
10
|
+
/**
|
|
11
|
+
* Get invalidation state for a target, including blast radius details.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getInvalidationState(memory: CodeLedgerMemory, target: string): BrokerValidationResponse;
|
|
14
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/broker/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,wBAAwB,EACzB,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,GACb,wBAAwB,CAqB1B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,gBAAgB,EACxB,KAAK,CAAC,EAAE,MAAM,GACb,wBAAwB,EAAE,CAa5B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,GACb,wBAAwB,CA+B1B"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Look up validation status for a given target (scope ID).
|
|
3
|
+
*/
|
|
4
|
+
export function getValidationStatus(memory, target) {
|
|
5
|
+
const surface = memory.validation.cleanSurfaces.find((s) => s.scopeId === target);
|
|
6
|
+
if (!surface) {
|
|
7
|
+
return { target, status: 'unknown' };
|
|
8
|
+
}
|
|
9
|
+
return {
|
|
10
|
+
target,
|
|
11
|
+
status: surface.status,
|
|
12
|
+
validationLevel: surface.validationLevel,
|
|
13
|
+
lastValidatedAt: surface.lastValidatedAt,
|
|
14
|
+
invalidatedBy: surface.invalidatedBy?.map((r) => r.detail),
|
|
15
|
+
blastRadius: surface.blastRadius
|
|
16
|
+
? {
|
|
17
|
+
dependencyDepth: surface.blastRadius.dependencyDepth,
|
|
18
|
+
invalidatesScopes: surface.blastRadius.invalidatesScopes,
|
|
19
|
+
severity: surface.blastRadius.severity,
|
|
20
|
+
}
|
|
21
|
+
: undefined,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Return all surfaces that are currently clean.
|
|
26
|
+
*/
|
|
27
|
+
export function getCleanSurfacesList(memory, scope) {
|
|
28
|
+
return memory.validation.cleanSurfaces
|
|
29
|
+
.filter((s) => {
|
|
30
|
+
if (s.status !== 'clean')
|
|
31
|
+
return false;
|
|
32
|
+
if (scope && !s.scopeId.includes(scope))
|
|
33
|
+
return false;
|
|
34
|
+
return true;
|
|
35
|
+
})
|
|
36
|
+
.map((s) => ({
|
|
37
|
+
target: s.scopeId,
|
|
38
|
+
status: s.status,
|
|
39
|
+
validationLevel: s.validationLevel,
|
|
40
|
+
lastValidatedAt: s.lastValidatedAt,
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get invalidation state for a target, including blast radius details.
|
|
45
|
+
*/
|
|
46
|
+
export function getInvalidationState(memory, target) {
|
|
47
|
+
const surface = memory.validation.cleanSurfaces.find((s) => s.scopeId === target);
|
|
48
|
+
if (!surface) {
|
|
49
|
+
return { target, status: 'unknown' };
|
|
50
|
+
}
|
|
51
|
+
if (surface.status !== 'invalidated') {
|
|
52
|
+
return {
|
|
53
|
+
target,
|
|
54
|
+
status: surface.status,
|
|
55
|
+
validationLevel: surface.validationLevel,
|
|
56
|
+
lastValidatedAt: surface.lastValidatedAt,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// Surface is invalidated — include full details
|
|
60
|
+
return {
|
|
61
|
+
target,
|
|
62
|
+
status: 'invalidated',
|
|
63
|
+
validationLevel: surface.validationLevel,
|
|
64
|
+
lastValidatedAt: surface.lastValidatedAt,
|
|
65
|
+
invalidatedBy: surface.invalidatedBy?.map((r) => `${r.type}: ${r.detail}`),
|
|
66
|
+
blastRadius: surface.blastRadius
|
|
67
|
+
? {
|
|
68
|
+
dependencyDepth: surface.blastRadius.dependencyDepth,
|
|
69
|
+
invalidatesScopes: surface.blastRadius.invalidatesScopes,
|
|
70
|
+
severity: surface.blastRadius.severity,
|
|
71
|
+
}
|
|
72
|
+
: undefined,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/broker/validation.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -61,4 +61,6 @@ export * from './trust/index.js';
|
|
|
61
61
|
export * from './dashboard/index.js';
|
|
62
62
|
export * from './intervention/index.js';
|
|
63
63
|
export * from './policy-domains/index.js';
|
|
64
|
+
export * from './broker/index.js';
|
|
65
|
+
export * from './insight/index.js';
|
|
64
66
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,oBAAoB,CAAC;AAGnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,oBAAoB,CAAC;AAGnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,mBAAmB,CAAC;AAGlC,cAAc,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -72,4 +72,8 @@ export * from './dashboard/index.js';
|
|
|
72
72
|
export * from './intervention/index.js';
|
|
73
73
|
// v3.3 — Policy Domain Framework (Governance-as-Code)
|
|
74
74
|
export * from './policy-domains/index.js';
|
|
75
|
+
// v3.4 — Context Broker (system-awareness layer for non-terminal agents)
|
|
76
|
+
export * from './broker/index.js';
|
|
77
|
+
// v3.5 — Insight System (value dashboard)
|
|
78
|
+
export * from './insight/index.js';
|
|
75
79
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAE/B,wDAAwD;AACxD,cAAc,oBAAoB,CAAC;AAEnC,yCAAyC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AAExC,0CAA0C;AAC1C,cAAc,kBAAkB,CAAC;AAEjC,oDAAoD;AACpD,cAAc,oBAAoB,CAAC;AAEnC,gDAAgD;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAElC,2CAA2C;AAC3C,cAAc,sBAAsB,CAAC;AAErC,gDAAgD;AAChD,cAAc,wBAAwB,CAAC;AAEvC,+DAA+D;AAC/D,cAAc,kBAAkB,CAAC;AAEjC,uCAAuC;AACvC,cAAc,sBAAsB,CAAC;AAErC,0CAA0C;AAC1C,cAAc,yBAAyB,CAAC;AAExC,sDAAsD;AACtD,cAAc,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAE/B,wDAAwD;AACxD,cAAc,oBAAoB,CAAC;AAEnC,yCAAyC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AAExC,0CAA0C;AAC1C,cAAc,kBAAkB,CAAC;AAEjC,oDAAoD;AACpD,cAAc,oBAAoB,CAAC;AAEnC,gDAAgD;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAElC,2CAA2C;AAC3C,cAAc,sBAAsB,CAAC;AAErC,gDAAgD;AAChD,cAAc,wBAAwB,CAAC;AAEvC,+DAA+D;AAC/D,cAAc,kBAAkB,CAAC;AAEjC,uCAAuC;AACvC,cAAc,sBAAsB,CAAC;AAErC,0CAA0C;AAC1C,cAAc,yBAAyB,CAAC;AAExC,sDAAsD;AACtD,cAAc,2BAA2B,CAAC;AAE1C,yEAAyE;AACzE,cAAc,mBAAmB,CAAC;AAElC,0CAA0C;AAC1C,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Insight Collector — ingests guardrail events, CIC transitions,
|
|
3
|
+
* validation ledger data, and pre-PR/release-check results.
|
|
4
|
+
*
|
|
5
|
+
* Every collected item MUST have a verifiable provenance (ID or ledger entry).
|
|
6
|
+
* No narrative hallucination — if it can't be traced, it's not collected.
|
|
7
|
+
*/
|
|
8
|
+
import type { GuardrailResult, CompletionRecord, CompletionState, ReleaseCheckResult, ReleaseState, PrePRReport, InsightPreventedIssue, InsightWorkAvoided, InsightTruthEstablished, InsightStateTransition } from '@codeledger/types';
|
|
9
|
+
/** Raw inputs the collector accepts */
|
|
10
|
+
export interface CollectorInput {
|
|
11
|
+
guardrails?: GuardrailResult[];
|
|
12
|
+
completionRecord?: CompletionRecord;
|
|
13
|
+
previousCompletionState?: CompletionState;
|
|
14
|
+
releaseResult?: ReleaseCheckResult;
|
|
15
|
+
previousReleaseState?: ReleaseState;
|
|
16
|
+
prePRReport?: PrePRReport;
|
|
17
|
+
validationSurfaces?: number;
|
|
18
|
+
reusedSurfaces?: number;
|
|
19
|
+
totalRepoFiles?: number;
|
|
20
|
+
scannedFiles?: number;
|
|
21
|
+
skippedTests?: number;
|
|
22
|
+
}
|
|
23
|
+
/** Collected insight data ready for the engine */
|
|
24
|
+
export interface CollectedInsight {
|
|
25
|
+
prevented: InsightPreventedIssue[];
|
|
26
|
+
workAvoided: InsightWorkAvoided;
|
|
27
|
+
truth: InsightTruthEstablished;
|
|
28
|
+
transitions: InsightStateTransition[];
|
|
29
|
+
}
|
|
30
|
+
export declare function collect(input: CollectorInput): CollectedInsight;
|
|
31
|
+
//# sourceMappingURL=collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../src/insight/collector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,WAAW,EAEX,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAE3B,uCAAuC;AACvC,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,uBAAuB,CAAC,EAAE,eAAe,CAAC;IAC1C,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,oBAAoB,CAAC,EAAE,YAAY,CAAC;IACpC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,kDAAkD;AAClD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,WAAW,EAAE,kBAAkB,CAAC;IAChC,KAAK,EAAE,uBAAuB,CAAC;IAC/B,WAAW,EAAE,sBAAsB,EAAE,CAAC;CACvC;AA0BD,wBAAgB,OAAO,CAAC,KAAK,EAAE,cAAc,GAAG,gBAAgB,CA4J/D"}
|