@hongmaple0820/scale-engine 0.19.0 → 0.21.0

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 (52) hide show
  1. package/README.en.md +17 -3
  2. package/README.md +143 -9
  3. package/dist/api/cli.js +1187 -30
  4. package/dist/api/cli.js.map +1 -1
  5. package/dist/codegraph/CodeIntelligence.d.ts +135 -0
  6. package/dist/codegraph/CodeIntelligence.js +460 -0
  7. package/dist/codegraph/CodeIntelligence.js.map +1 -0
  8. package/dist/context/ContextBudget.d.ts +90 -0
  9. package/dist/context/ContextBudget.js +322 -0
  10. package/dist/context/ContextBudget.js.map +1 -0
  11. package/dist/eval/WorkflowEval.d.ts +161 -0
  12. package/dist/eval/WorkflowEval.js +379 -0
  13. package/dist/eval/WorkflowEval.js.map +1 -0
  14. package/dist/governance/GovernanceRoi.d.ts +25 -0
  15. package/dist/governance/GovernanceRoi.js +70 -0
  16. package/dist/governance/GovernanceRoi.js.map +1 -0
  17. package/dist/governance/ProgressiveGovernance.d.ts +22 -0
  18. package/dist/governance/ProgressiveGovernance.js +159 -0
  19. package/dist/governance/ProgressiveGovernance.js.map +1 -0
  20. package/dist/memory/MemoryBrain.d.ts +135 -0
  21. package/dist/memory/MemoryBrain.js +635 -0
  22. package/dist/memory/MemoryBrain.js.map +1 -0
  23. package/dist/memory/index.d.ts +1 -0
  24. package/dist/memory/index.js +1 -0
  25. package/dist/memory/index.js.map +1 -1
  26. package/dist/output/GovernanceDashboard.d.ts +57 -0
  27. package/dist/output/GovernanceDashboard.js +250 -0
  28. package/dist/output/GovernanceDashboard.js.map +1 -0
  29. package/dist/output/index.d.ts +2 -0
  30. package/dist/output/index.js +1 -0
  31. package/dist/output/index.js.map +1 -1
  32. package/dist/skills/SkillRadar.d.ts +83 -0
  33. package/dist/skills/SkillRadar.js +384 -0
  34. package/dist/skills/SkillRadar.js.map +1 -0
  35. package/dist/workflow/GovernanceTemplates.js +220 -194
  36. package/dist/workflow/GovernanceTemplates.js.map +1 -1
  37. package/dist/workflow/UpgradeManager.d.ts +140 -0
  38. package/dist/workflow/UpgradeManager.js +434 -0
  39. package/dist/workflow/UpgradeManager.js.map +1 -0
  40. package/docs/CODE_INTELLIGENCE.md +138 -0
  41. package/docs/CONTEXT_BUDGET.md +87 -0
  42. package/docs/GOVERNANCE_DASHBOARD.md +69 -0
  43. package/docs/MEMORY_BRAIN.md +104 -0
  44. package/docs/README.md +17 -8
  45. package/docs/SKILL_RADAR.md +115 -0
  46. package/docs/WORKFLOW_EVAL.md +151 -0
  47. package/docs/start/README.md +5 -1
  48. package/examples/demo-projects/agent-governance-demo/CONTEXT.md +14 -0
  49. package/examples/demo-projects/agent-governance-demo/README.md +32 -21
  50. package/examples/demo-projects/agent-governance-demo/docs/CONTEXT-MAP.md +14 -0
  51. package/examples/demo-projects/agent-governance-demo/package.json +6 -1
  52. package/package.json +7 -1
@@ -0,0 +1,635 @@
1
+ import Database from 'better-sqlite3';
2
+ import { createHash, randomUUID } from 'node:crypto';
3
+ import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs';
4
+ import { dirname, isAbsolute, join, relative, resolve } from 'node:path';
5
+ import { WorkflowEvalStore } from '../eval/WorkflowEval.js';
6
+ import { RuntimeEvidenceLedger } from '../runtime/RuntimeEvidenceLedger.js';
7
+ import { redactEvidenceText, redactEvidenceValue } from '../tools/ToolEvidenceStore.js';
8
+ const SCHEMA = `
9
+ CREATE TABLE IF NOT EXISTS memory_nodes (
10
+ id TEXT PRIMARY KEY,
11
+ type TEXT NOT NULL,
12
+ title TEXT NOT NULL,
13
+ summary TEXT NOT NULL,
14
+ entities TEXT NOT NULL DEFAULT '[]',
15
+ source TEXT NOT NULL,
16
+ evidence_paths TEXT NOT NULL DEFAULT '[]',
17
+ confidence REAL NOT NULL,
18
+ scope TEXT NOT NULL,
19
+ status TEXT NOT NULL,
20
+ created_at TEXT NOT NULL,
21
+ updated_at TEXT NOT NULL,
22
+ last_verified_at TEXT,
23
+ metadata TEXT NOT NULL DEFAULT '{}',
24
+ fingerprint TEXT NOT NULL
25
+ );
26
+
27
+ CREATE INDEX IF NOT EXISTS idx_memory_nodes_type ON memory_nodes(type);
28
+ CREATE INDEX IF NOT EXISTS idx_memory_nodes_status ON memory_nodes(status);
29
+ CREATE INDEX IF NOT EXISTS idx_memory_nodes_scope ON memory_nodes(scope);
30
+ CREATE INDEX IF NOT EXISTS idx_memory_nodes_fingerprint ON memory_nodes(fingerprint);
31
+
32
+ CREATE TABLE IF NOT EXISTS memory_meta (
33
+ key TEXT PRIMARY KEY,
34
+ value TEXT NOT NULL
35
+ );
36
+
37
+ INSERT OR IGNORE INTO memory_meta (key, value) VALUES ('schema_version', '1');
38
+ `;
39
+ export class MemoryBrain {
40
+ constructor(options = {}) {
41
+ this.projectDir = resolve(options.projectDir ?? process.cwd());
42
+ this.scaleRoot = resolveScaleRoot(this.projectDir, options.scaleDir);
43
+ this.dbPath = options.dbPath ?? join(this.scaleRoot, 'memory', 'brain.sqlite');
44
+ this.now = options.now ?? (() => new Date());
45
+ mkdirSync(dirname(this.dbPath), { recursive: true });
46
+ this.db = new Database(this.dbPath);
47
+ this.db.pragma('journal_mode = WAL');
48
+ this.db.pragma('busy_timeout = 5000');
49
+ this.db.exec(SCHEMA);
50
+ this.writeManifest();
51
+ }
52
+ addNode(input) {
53
+ const now = this.now().toISOString();
54
+ const candidate = sanitizeNode({
55
+ id: input.id ?? `MEM-${Date.now()}-${randomUUID().slice(0, 8)}`,
56
+ type: input.type,
57
+ title: input.title,
58
+ summary: input.summary,
59
+ entities: unique(input.entities ?? inferEntities(`${input.title}\n${input.summary}`)),
60
+ source: input.source,
61
+ evidencePaths: unique(input.evidencePaths ?? []),
62
+ confidence: clampConfidence(input.confidence ?? 0.55),
63
+ scope: input.scope ?? 'project',
64
+ status: input.status ?? 'candidate',
65
+ createdAt: input.createdAt ?? now,
66
+ updatedAt: now,
67
+ lastVerifiedAt: input.lastVerifiedAt,
68
+ metadata: input.metadata ?? {},
69
+ });
70
+ assertNode(candidate);
71
+ this.upsert(candidate);
72
+ return candidate;
73
+ }
74
+ ingest(options) {
75
+ if (options.from === 'candidate')
76
+ return this.ingestCandidate(options);
77
+ if (options.from === 'failure')
78
+ return this.ingestFailureReplay(options);
79
+ return this.ingestEvidence(options);
80
+ }
81
+ query(query, options = {}) {
82
+ const terms = tokenize(query);
83
+ const nodes = this.list({ status: options.status })
84
+ .map(node => ({ node, score: scoreNode(node, terms) }))
85
+ .filter(item => item.score > 0)
86
+ .sort((a, b) => b.score - a.score || b.node.confidence - a.node.confidence)
87
+ .slice(0, options.limit ?? 8)
88
+ .map(item => item.node);
89
+ return {
90
+ query,
91
+ count: nodes.length,
92
+ nodes,
93
+ };
94
+ }
95
+ contradictions() {
96
+ const contradictions = detectContradictions(this.list({ status: 'active' }));
97
+ return {
98
+ ok: contradictions.length === 0,
99
+ count: contradictions.length,
100
+ contradictions,
101
+ };
102
+ }
103
+ dream() {
104
+ const nodes = this.list();
105
+ const duplicateGroups = duplicateGroupsFor(nodes);
106
+ const contradictions = detectContradictions(nodes.filter(node => node.status === 'active' || node.status === 'candidate'));
107
+ const missingEvidence = nodes.filter(node => node.status === 'active' && node.evidencePaths.length === 0);
108
+ const staleCandidates = nodes
109
+ .filter(node => node.status === 'active' && isStale(node))
110
+ .map(node => ({ id: node.id, title: node.title, reason: 'last verification is older than 30 days or missing' }));
111
+ const promotionCandidates = nodes
112
+ .filter(node => node.status === 'candidate' && node.evidencePaths.length > 0 && node.confidence >= 0.7)
113
+ .map(node => ({ id: node.id, title: node.title, confidence: node.confidence, evidencePaths: node.evidencePaths }));
114
+ return {
115
+ ok: missingEvidence.length === 0,
116
+ generatedAt: this.now().toISOString(),
117
+ summary: {
118
+ total: nodes.length,
119
+ active: nodes.filter(node => node.status === 'active').length,
120
+ candidate: nodes.filter(node => node.status === 'candidate').length,
121
+ stale: staleCandidates.length,
122
+ missingEvidence: missingEvidence.length,
123
+ duplicateGroups: duplicateGroups.length,
124
+ contradictions: contradictions.length,
125
+ },
126
+ promotionCandidates,
127
+ staleCandidates,
128
+ duplicateGroups,
129
+ contradictions,
130
+ suggestedDocs: suggestDocs(nodes, contradictions),
131
+ };
132
+ }
133
+ promote(id, options = {}) {
134
+ let node = this.get(id);
135
+ const warnings = [];
136
+ if (!node) {
137
+ const candidate = this.readLearningCandidate(id);
138
+ if (!candidate) {
139
+ return { ok: false, warnings: [`Memory node or learning candidate not found: ${id}`] };
140
+ }
141
+ const report = this.ingestCandidate({ from: 'candidate', candidateId: id, scope: options.scope });
142
+ node = report.nodes[0];
143
+ warnings.push(...report.warnings);
144
+ }
145
+ if (!node)
146
+ return { ok: false, warnings: [`Unable to promote: ${id}`] };
147
+ if (node.evidencePaths.length === 0) {
148
+ return { ok: false, node, warnings: [...warnings, 'Active memory requires at least one evidence path.'] };
149
+ }
150
+ const promoted = {
151
+ ...node,
152
+ status: 'active',
153
+ scope: options.scope ?? node.scope,
154
+ confidence: Math.max(node.confidence, 0.75),
155
+ updatedAt: this.now().toISOString(),
156
+ lastVerifiedAt: this.now().toISOString(),
157
+ };
158
+ assertNode(promoted);
159
+ this.upsert(promoted);
160
+ return { ok: true, node: promoted, warnings };
161
+ }
162
+ exportJsonl() {
163
+ return this.list().map(node => JSON.stringify(node)).join('\n') + '\n';
164
+ }
165
+ importJsonl(filePath) {
166
+ const warnings = [];
167
+ let imported = 0;
168
+ let skipped = 0;
169
+ const text = readFileSync(filePath, 'utf-8');
170
+ for (const line of text.split(/\r?\n/).filter(Boolean)) {
171
+ try {
172
+ const node = sanitizeNode(JSON.parse(line));
173
+ assertNode(node);
174
+ this.upsert(node);
175
+ imported += 1;
176
+ }
177
+ catch (error) {
178
+ skipped += 1;
179
+ warnings.push(`Skipped line: ${error.message}`);
180
+ }
181
+ }
182
+ return { ok: warnings.length === 0, imported, skipped, warnings };
183
+ }
184
+ list(filter = {}) {
185
+ let sql = 'SELECT * FROM memory_nodes';
186
+ const where = [];
187
+ const params = {};
188
+ if (filter.status) {
189
+ where.push('status = @status');
190
+ params.status = filter.status;
191
+ }
192
+ if (filter.scope) {
193
+ where.push('scope = @scope');
194
+ params.scope = filter.scope;
195
+ }
196
+ if (where.length)
197
+ sql += ` WHERE ${where.join(' AND ')}`;
198
+ sql += ' ORDER BY updated_at DESC';
199
+ return this.db.prepare(sql).all(params).map(rowToNode);
200
+ }
201
+ get(id) {
202
+ const row = this.db.prepare('SELECT * FROM memory_nodes WHERE id = ?').get(id);
203
+ return row ? rowToNode(row) : null;
204
+ }
205
+ ingestEvidence(options) {
206
+ const ledger = new RuntimeEvidenceLedger({
207
+ projectDir: this.projectDir,
208
+ scaleDir: this.scaleRoot,
209
+ createDirs: false,
210
+ });
211
+ const records = ledger.list({ taskId: options.taskId, sessionId: options.sessionId, limit: Number.MAX_SAFE_INTEGER });
212
+ const warnings = [];
213
+ const nodes = [];
214
+ let skipped = 0;
215
+ for (const record of records) {
216
+ if (record.status === 'skipped') {
217
+ skipped += 1;
218
+ continue;
219
+ }
220
+ const node = this.addNode(nodeFromEvidence(record, {
221
+ projectDir: this.projectDir,
222
+ scaleRoot: this.scaleRoot,
223
+ type: options.type,
224
+ scope: options.scope,
225
+ }));
226
+ nodes.push(node);
227
+ }
228
+ if (records.length === 0)
229
+ warnings.push('No runtime evidence matched the requested task/session scope.');
230
+ return {
231
+ ok: nodes.length > 0,
232
+ source: 'evidence',
233
+ created: nodes.length,
234
+ skipped,
235
+ nodes,
236
+ warnings,
237
+ };
238
+ }
239
+ ingestCandidate(options) {
240
+ const candidate = this.readLearningCandidate(options.candidateId);
241
+ if (!candidate) {
242
+ return {
243
+ ok: false,
244
+ source: 'candidate',
245
+ created: 0,
246
+ skipped: 0,
247
+ nodes: [],
248
+ warnings: [`Learning candidate not found: ${options.candidateId ?? '<latest>'}`],
249
+ };
250
+ }
251
+ const node = this.addNode(nodeFromCandidate(candidate, {
252
+ projectDir: this.projectDir,
253
+ scaleRoot: this.scaleRoot,
254
+ type: options.type,
255
+ scope: options.scope,
256
+ }));
257
+ return {
258
+ ok: true,
259
+ source: 'candidate',
260
+ created: 1,
261
+ skipped: 0,
262
+ nodes: [node],
263
+ warnings: candidate.promotable ? [] : ['Learning candidate is not marked promotable; keep it as candidate until more evidence is recorded.'],
264
+ };
265
+ }
266
+ ingestFailureReplay(options) {
267
+ const store = new WorkflowEvalStore({
268
+ projectDir: this.projectDir,
269
+ scaleDir: this.scaleRoot,
270
+ });
271
+ const failures = options.failureId
272
+ ? [store.getFailure(options.failureId)].filter((failure) => Boolean(failure))
273
+ : store.listFailures({ taskId: options.taskId });
274
+ const warnings = [];
275
+ const nodes = [];
276
+ let skipped = 0;
277
+ for (const failure of failures) {
278
+ if (failure.status === 'closed' || failure.status === 'accepted-risk') {
279
+ skipped += 1;
280
+ continue;
281
+ }
282
+ const node = this.addNode(nodeFromFailureReplay(failure, {
283
+ projectDir: this.projectDir,
284
+ scaleRoot: this.scaleRoot,
285
+ type: options.type,
286
+ scope: options.scope,
287
+ }));
288
+ nodes.push(node);
289
+ }
290
+ if (failures.length === 0)
291
+ warnings.push(`Failure replay not found: ${options.failureId ?? options.taskId ?? '<latest>'}`);
292
+ return {
293
+ ok: nodes.length > 0,
294
+ source: 'failure',
295
+ created: nodes.length,
296
+ skipped,
297
+ nodes,
298
+ warnings,
299
+ };
300
+ }
301
+ readLearningCandidate(candidateId) {
302
+ const dir = join(this.scaleRoot, 'memory', 'learning-candidates');
303
+ if (!existsSync(dir))
304
+ return null;
305
+ const file = candidateId
306
+ ? join(dir, `${safePathSegment(candidateId)}.json`)
307
+ : readdirSync(dir)
308
+ .filter(name => name.endsWith('.json'))
309
+ .map(name => join(dir, name))
310
+ .sort()
311
+ .at(-1);
312
+ if (!file || !existsSync(file))
313
+ return null;
314
+ try {
315
+ return JSON.parse(readFileSync(file, 'utf-8'));
316
+ }
317
+ catch {
318
+ return null;
319
+ }
320
+ }
321
+ upsert(node) {
322
+ const fingerprint = fingerprintFor(node);
323
+ this.db.prepare(`
324
+ INSERT INTO memory_nodes (
325
+ id, type, title, summary, entities, source, evidence_paths, confidence, scope, status,
326
+ created_at, updated_at, last_verified_at, metadata, fingerprint
327
+ ) VALUES (
328
+ @id, @type, @title, @summary, @entities, @source, @evidencePaths, @confidence, @scope, @status,
329
+ @createdAt, @updatedAt, @lastVerifiedAt, @metadata, @fingerprint
330
+ )
331
+ ON CONFLICT(id) DO UPDATE SET
332
+ type = excluded.type,
333
+ title = excluded.title,
334
+ summary = excluded.summary,
335
+ entities = excluded.entities,
336
+ source = excluded.source,
337
+ evidence_paths = excluded.evidence_paths,
338
+ confidence = excluded.confidence,
339
+ scope = excluded.scope,
340
+ status = excluded.status,
341
+ updated_at = excluded.updated_at,
342
+ last_verified_at = excluded.last_verified_at,
343
+ metadata = excluded.metadata,
344
+ fingerprint = excluded.fingerprint
345
+ `).run({
346
+ id: node.id,
347
+ type: node.type,
348
+ title: node.title,
349
+ summary: node.summary,
350
+ entities: JSON.stringify(node.entities),
351
+ source: node.source,
352
+ evidencePaths: JSON.stringify(node.evidencePaths),
353
+ confidence: node.confidence,
354
+ scope: node.scope,
355
+ status: node.status,
356
+ createdAt: node.createdAt,
357
+ updatedAt: node.updatedAt,
358
+ lastVerifiedAt: node.lastVerifiedAt ?? null,
359
+ metadata: JSON.stringify(node.metadata ?? {}),
360
+ fingerprint,
361
+ });
362
+ }
363
+ writeManifest() {
364
+ const manifestPath = join(this.scaleRoot, 'memory', 'brain-manifest.json');
365
+ mkdirSync(dirname(manifestPath), { recursive: true });
366
+ writeFileSync(manifestPath, JSON.stringify({
367
+ version: '1.0',
368
+ dbPath: normalizeProjectPath(this.projectDir, this.dbPath),
369
+ scope: 'project',
370
+ activeMemoryRequiresEvidence: true,
371
+ generatedAt: this.now().toISOString(),
372
+ }, null, 2), 'utf-8');
373
+ }
374
+ }
375
+ function nodeFromEvidence(record, input) {
376
+ const evidencePath = normalizeProjectPath(input.projectDir, join(input.scaleRoot, 'evidence', 'runtime', `${record.id}.json`));
377
+ return {
378
+ id: `MEM-${record.id}`,
379
+ type: input.type ?? (record.status === 'failed' ? 'incident' : 'fact'),
380
+ title: record.title,
381
+ summary: record.summary,
382
+ entities: inferEntities(`${record.title}\n${record.summary}\n${record.command ?? ''}`),
383
+ source: 'runtime-evidence',
384
+ evidencePaths: unique([evidencePath, ...(record.artifacts ?? [])]),
385
+ confidence: record.status === 'passed' ? 0.72 : 0.58,
386
+ scope: input.scope ?? 'project',
387
+ status: 'candidate',
388
+ metadata: {
389
+ taskId: record.taskId,
390
+ sessionId: record.sessionId,
391
+ evidenceId: record.id,
392
+ evidenceStatus: record.status,
393
+ command: record.command,
394
+ exitCode: record.exitCode,
395
+ },
396
+ };
397
+ }
398
+ function nodeFromCandidate(candidate, input) {
399
+ const candidatePath = normalizeProjectPath(input.projectDir, join(input.scaleRoot, 'memory', 'learning-candidates', `${candidate.id}.json`));
400
+ return {
401
+ id: `MEM-${candidate.id}`,
402
+ type: input.type ?? 'decision',
403
+ title: candidate.title,
404
+ summary: candidate.summary,
405
+ entities: inferEntities(`${candidate.title}\n${candidate.summary}\n${candidate.tags.join(' ')}`),
406
+ source: 'task-artifact',
407
+ evidencePaths: unique([candidatePath, ...candidate.graphRefs, ...candidate.evidenceIds.map(id => join('.scale', 'evidence', 'runtime', `${id}.json`))]),
408
+ confidence: candidate.promotable ? 0.72 : 0.5,
409
+ scope: input.scope ?? 'project',
410
+ status: 'candidate',
411
+ metadata: {
412
+ taskId: candidate.taskId,
413
+ sessionId: candidate.sessionId,
414
+ candidateId: candidate.id,
415
+ recommendedAction: candidate.recommendedAction,
416
+ tags: candidate.tags,
417
+ },
418
+ };
419
+ }
420
+ function nodeFromFailureReplay(failure, input) {
421
+ const failurePath = normalizeProjectPath(input.projectDir, join(input.scaleRoot, 'evals', 'failures', `${safePathSegment(failure.id)}.json`));
422
+ const summary = [
423
+ failure.wrongTurn,
424
+ `Prevention: ${failure.prevention}`,
425
+ `Correction: ${failure.correction}`,
426
+ ].join(' ');
427
+ return {
428
+ id: `MEM-${failure.id}`,
429
+ type: input.type ?? 'incident',
430
+ title: `Failure replay: ${failure.category} in ${failure.caseId}`,
431
+ summary,
432
+ entities: inferEntities(`${failure.category}\n${failure.phase}\n${failure.task}\n${failure.prevention}`),
433
+ source: 'task-artifact',
434
+ evidencePaths: [failurePath],
435
+ confidence: failure.status === 'promoted' ? 0.7 : 0.62,
436
+ scope: input.scope ?? 'project',
437
+ status: 'candidate',
438
+ metadata: {
439
+ taskId: failure.taskId,
440
+ suiteId: failure.suiteId,
441
+ caseId: failure.caseId,
442
+ failureId: failure.id,
443
+ category: failure.category,
444
+ phase: failure.phase,
445
+ failureStatus: failure.status,
446
+ replayCommand: failure.replayCommand,
447
+ redactionApplied: failure.redactionApplied,
448
+ },
449
+ };
450
+ }
451
+ function detectContradictions(nodes) {
452
+ const contradictions = [];
453
+ const pairs = new Set();
454
+ for (let i = 0; i < nodes.length; i += 1) {
455
+ for (let j = i + 1; j < nodes.length; j += 1) {
456
+ const left = nodes[i];
457
+ const right = nodes[j];
458
+ const shared = left.entities.filter(entity => right.entities.includes(entity));
459
+ if (shared.length === 0)
460
+ continue;
461
+ if (!polaritiesConflict(left, right))
462
+ continue;
463
+ const key = [left.id, right.id].sort().join(':');
464
+ if (pairs.has(key))
465
+ continue;
466
+ pairs.add(key);
467
+ contradictions.push({
468
+ id: `CON-${hash(key).slice(0, 10)}`,
469
+ title: `Contradiction around ${shared.slice(0, 3).join(', ')}`,
470
+ summary: `${left.title} conflicts with ${right.title}.`,
471
+ nodeIds: [left.id, right.id],
472
+ entities: shared,
473
+ evidencePaths: unique([...left.evidencePaths, ...right.evidencePaths]),
474
+ confidence: Math.min(0.9, Math.max(left.confidence, right.confidence)),
475
+ });
476
+ }
477
+ }
478
+ return contradictions;
479
+ }
480
+ function polaritiesConflict(left, right) {
481
+ const l = polarity(`${left.title}\n${left.summary}`);
482
+ const r = polarity(`${right.title}\n${right.summary}`);
483
+ if (l.enabled && r.disabled)
484
+ return true;
485
+ if (l.disabled && r.enabled)
486
+ return true;
487
+ if (l.exists && r.missing)
488
+ return true;
489
+ if (l.missing && r.exists)
490
+ return true;
491
+ if (l.allowed && r.blocked)
492
+ return true;
493
+ if (l.blocked && r.allowed)
494
+ return true;
495
+ return false;
496
+ }
497
+ function polarity(text) {
498
+ const lower = text.toLowerCase();
499
+ return {
500
+ enabled: /\b(enabled|enable|available|works|passed|active|on)\b/.test(lower),
501
+ disabled: /\b(disabled|disable|unavailable|not available|failed|inactive|off)\b/.test(lower),
502
+ exists: /\b(exists|present|configured|found)\b/.test(lower),
503
+ missing: /\b(missing|absent|not configured|not found)\b/.test(lower),
504
+ allowed: /\b(allowed|permitted|safe)\b/.test(lower),
505
+ blocked: /\b(blocked|forbidden|unsafe|denied)\b/.test(lower),
506
+ };
507
+ }
508
+ function duplicateGroupsFor(nodes) {
509
+ const groups = new Map();
510
+ for (const node of nodes) {
511
+ const key = fingerprintFor(node);
512
+ groups.set(key, [...(groups.get(key) ?? []), node]);
513
+ }
514
+ return [...groups.entries()]
515
+ .filter(([, group]) => group.length > 1)
516
+ .map(([fingerprint, group]) => ({
517
+ fingerprint,
518
+ nodeIds: group.map(node => node.id),
519
+ title: group[0].title,
520
+ }));
521
+ }
522
+ function suggestDocs(nodes, contradictions) {
523
+ const suggestions = new Set();
524
+ if (nodes.some(node => node.type === 'decision'))
525
+ suggestions.add('docs/architecture/');
526
+ if (nodes.some(node => node.type === 'incident'))
527
+ suggestions.add('docs/worklog/metrics.md');
528
+ if (contradictions.length > 0)
529
+ suggestions.add('docs/workflow/README.md');
530
+ return [...suggestions];
531
+ }
532
+ function isStale(node) {
533
+ const date = node.lastVerifiedAt ?? node.updatedAt;
534
+ const ageMs = Date.now() - Date.parse(date);
535
+ return Number.isFinite(ageMs) && ageMs > 30 * 24 * 60 * 60 * 1000;
536
+ }
537
+ function scoreNode(node, terms) {
538
+ if (terms.length === 0)
539
+ return 1;
540
+ const haystack = `${node.title}\n${node.summary}\n${node.entities.join(' ')}\n${node.evidencePaths.join(' ')}`.toLowerCase();
541
+ return terms.reduce((score, term) => score + (haystack.includes(term) ? 1 : 0), 0);
542
+ }
543
+ function rowToNode(row) {
544
+ const value = row;
545
+ return {
546
+ id: String(value.id),
547
+ type: value.type,
548
+ title: String(value.title),
549
+ summary: String(value.summary),
550
+ entities: parseJsonArray(value.entities),
551
+ source: value.source,
552
+ evidencePaths: parseJsonArray(value.evidence_paths),
553
+ confidence: Number(value.confidence),
554
+ scope: value.scope,
555
+ status: value.status,
556
+ createdAt: String(value.created_at),
557
+ updatedAt: String(value.updated_at),
558
+ lastVerifiedAt: value.last_verified_at ? String(value.last_verified_at) : undefined,
559
+ metadata: parseJsonObject(value.metadata),
560
+ };
561
+ }
562
+ function assertNode(node) {
563
+ if (node.status === 'active' && node.evidencePaths.length === 0) {
564
+ throw new Error('Active memory requires at least one evidence path.');
565
+ }
566
+ if (node.scope === 'global-candidate' && node.status === 'active') {
567
+ throw new Error('Global candidate memory cannot be activated inside a project brain.');
568
+ }
569
+ }
570
+ function sanitizeNode(node) {
571
+ const redacted = redactEvidenceValue(node).value;
572
+ const redact = (value) => redactEvidenceText(value).value;
573
+ return {
574
+ ...redacted,
575
+ title: redact(redacted.title),
576
+ summary: redact(redacted.summary),
577
+ entities: unique((redacted.entities ?? []).map(entity => redact(String(entity))).filter(Boolean)),
578
+ evidencePaths: unique((redacted.evidencePaths ?? []).map(path => String(path)).filter(Boolean)),
579
+ confidence: clampConfidence(redacted.confidence),
580
+ metadata: redacted.metadata ?? {},
581
+ };
582
+ }
583
+ function tokenize(text) {
584
+ return unique(text.toLowerCase().split(/[^a-z0-9._/-]+/).filter(term => term.length >= 2));
585
+ }
586
+ function inferEntities(text) {
587
+ const matches = text.match(/[A-Za-z][A-Za-z0-9._/-]{2,}/g) ?? [];
588
+ return unique(matches.map(item => item.toLowerCase()).filter(item => !STOP_WORDS.has(item))).slice(0, 12);
589
+ }
590
+ const STOP_WORDS = new Set(['the', 'and', 'for', 'with', 'from', 'this', 'that', 'task', 'tests', 'passed', 'failed', 'summary']);
591
+ function fingerprintFor(node) {
592
+ return hash(`${node.type}:${node.scope}:${node.title.toLowerCase().replace(/\s+/g, ' ').trim()}`);
593
+ }
594
+ function hash(value) {
595
+ return createHash('sha1').update(value).digest('hex');
596
+ }
597
+ function parseJsonArray(value) {
598
+ try {
599
+ const parsed = JSON.parse(String(value));
600
+ return Array.isArray(parsed) ? parsed.map(String) : [];
601
+ }
602
+ catch {
603
+ return [];
604
+ }
605
+ }
606
+ function parseJsonObject(value) {
607
+ try {
608
+ const parsed = JSON.parse(String(value));
609
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : {};
610
+ }
611
+ catch {
612
+ return {};
613
+ }
614
+ }
615
+ function clampConfidence(value) {
616
+ if (!Number.isFinite(value))
617
+ return 0.5;
618
+ return Math.round(Math.max(0.05, Math.min(0.95, value)) * 100) / 100;
619
+ }
620
+ function safePathSegment(value) {
621
+ return value.replace(/[^a-zA-Z0-9._-]/g, '-').slice(0, 120) || 'memory-learning';
622
+ }
623
+ function resolveScaleRoot(projectDir, scaleDir) {
624
+ return isAbsolute(scaleDir ?? '') ? scaleDir : join(projectDir, scaleDir ?? '.scale');
625
+ }
626
+ function normalizeProjectPath(projectDir, filePath) {
627
+ const rel = relative(projectDir, filePath);
628
+ return rel && !rel.startsWith('..') && !isAbsolute(rel)
629
+ ? rel.replace(/\\/g, '/')
630
+ : filePath;
631
+ }
632
+ function unique(items) {
633
+ return [...new Set(items)];
634
+ }
635
+ //# sourceMappingURL=MemoryBrain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryBrain.js","sourceRoot":"","sources":["../../src/memory/MemoryBrain.ts"],"names":[],"mappings":"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"}