ai-mind-map 1.1.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 (154) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +554 -0
  3. package/dist/change-tracker/change-log.d.ts +160 -0
  4. package/dist/change-tracker/change-log.d.ts.map +1 -0
  5. package/dist/change-tracker/change-log.js +507 -0
  6. package/dist/change-tracker/change-log.js.map +1 -0
  7. package/dist/change-tracker/diff-engine.d.ts +149 -0
  8. package/dist/change-tracker/diff-engine.d.ts.map +1 -0
  9. package/dist/change-tracker/diff-engine.js +530 -0
  10. package/dist/change-tracker/diff-engine.js.map +1 -0
  11. package/dist/change-tracker/watcher.d.ts +137 -0
  12. package/dist/change-tracker/watcher.d.ts.map +1 -0
  13. package/dist/change-tracker/watcher.js +300 -0
  14. package/dist/change-tracker/watcher.js.map +1 -0
  15. package/dist/cli.d.ts +20 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +937 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/config.d.ts +38 -0
  20. package/dist/config.d.ts.map +1 -0
  21. package/dist/config.js +222 -0
  22. package/dist/config.js.map +1 -0
  23. package/dist/context/compressor.d.ts +49 -0
  24. package/dist/context/compressor.d.ts.map +1 -0
  25. package/dist/context/compressor.js +769 -0
  26. package/dist/context/compressor.js.map +1 -0
  27. package/dist/context/progressive-disclosure.d.ts +71 -0
  28. package/dist/context/progressive-disclosure.d.ts.map +1 -0
  29. package/dist/context/progressive-disclosure.js +470 -0
  30. package/dist/context/progressive-disclosure.js.map +1 -0
  31. package/dist/context/token-budget.d.ts +121 -0
  32. package/dist/context/token-budget.d.ts.map +1 -0
  33. package/dist/context/token-budget.js +282 -0
  34. package/dist/context/token-budget.js.map +1 -0
  35. package/dist/index.d.ts +13 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +944 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/install.d.ts +66 -0
  40. package/dist/install.d.ts.map +1 -0
  41. package/dist/install.js +946 -0
  42. package/dist/install.js.map +1 -0
  43. package/dist/knowledge-graph/architecture.d.ts +213 -0
  44. package/dist/knowledge-graph/architecture.d.ts.map +1 -0
  45. package/dist/knowledge-graph/architecture.js +585 -0
  46. package/dist/knowledge-graph/architecture.js.map +1 -0
  47. package/dist/knowledge-graph/cypher.d.ts +113 -0
  48. package/dist/knowledge-graph/cypher.d.ts.map +1 -0
  49. package/dist/knowledge-graph/cypher.js +1051 -0
  50. package/dist/knowledge-graph/cypher.js.map +1 -0
  51. package/dist/knowledge-graph/dead-code.d.ts +121 -0
  52. package/dist/knowledge-graph/dead-code.d.ts.map +1 -0
  53. package/dist/knowledge-graph/dead-code.js +331 -0
  54. package/dist/knowledge-graph/dead-code.js.map +1 -0
  55. package/dist/knowledge-graph/flow-analyzer.d.ts +167 -0
  56. package/dist/knowledge-graph/flow-analyzer.d.ts.map +1 -0
  57. package/dist/knowledge-graph/flow-analyzer.js +739 -0
  58. package/dist/knowledge-graph/flow-analyzer.js.map +1 -0
  59. package/dist/knowledge-graph/graph.d.ts +291 -0
  60. package/dist/knowledge-graph/graph.d.ts.map +1 -0
  61. package/dist/knowledge-graph/graph.js +978 -0
  62. package/dist/knowledge-graph/graph.js.map +1 -0
  63. package/dist/knowledge-graph/index.d.ts +17 -0
  64. package/dist/knowledge-graph/index.d.ts.map +1 -0
  65. package/dist/knowledge-graph/index.js +14 -0
  66. package/dist/knowledge-graph/index.js.map +1 -0
  67. package/dist/knowledge-graph/indexer.d.ts +112 -0
  68. package/dist/knowledge-graph/indexer.d.ts.map +1 -0
  69. package/dist/knowledge-graph/indexer.js +506 -0
  70. package/dist/knowledge-graph/indexer.js.map +1 -0
  71. package/dist/knowledge-graph/pagerank.d.ts +141 -0
  72. package/dist/knowledge-graph/pagerank.d.ts.map +1 -0
  73. package/dist/knowledge-graph/pagerank.js +493 -0
  74. package/dist/knowledge-graph/pagerank.js.map +1 -0
  75. package/dist/knowledge-graph/parser.d.ts +55 -0
  76. package/dist/knowledge-graph/parser.d.ts.map +1 -0
  77. package/dist/knowledge-graph/parser.js +1090 -0
  78. package/dist/knowledge-graph/parser.js.map +1 -0
  79. package/dist/knowledge-graph/snapshot.d.ts +107 -0
  80. package/dist/knowledge-graph/snapshot.d.ts.map +1 -0
  81. package/dist/knowledge-graph/snapshot.js +435 -0
  82. package/dist/knowledge-graph/snapshot.js.map +1 -0
  83. package/dist/memory/decision-log.d.ts +151 -0
  84. package/dist/memory/decision-log.d.ts.map +1 -0
  85. package/dist/memory/decision-log.js +482 -0
  86. package/dist/memory/decision-log.js.map +1 -0
  87. package/dist/memory/persistent-memory.d.ts +182 -0
  88. package/dist/memory/persistent-memory.d.ts.map +1 -0
  89. package/dist/memory/persistent-memory.js +579 -0
  90. package/dist/memory/persistent-memory.js.map +1 -0
  91. package/dist/memory/session-memory.d.ts +165 -0
  92. package/dist/memory/session-memory.d.ts.map +1 -0
  93. package/dist/memory/session-memory.js +382 -0
  94. package/dist/memory/session-memory.js.map +1 -0
  95. package/dist/stress-test.d.ts +10 -0
  96. package/dist/stress-test.d.ts.map +1 -0
  97. package/dist/stress-test.js +258 -0
  98. package/dist/stress-test.js.map +1 -0
  99. package/dist/tools/advanced-tools.d.ts +32 -0
  100. package/dist/tools/advanced-tools.d.ts.map +1 -0
  101. package/dist/tools/advanced-tools.js +480 -0
  102. package/dist/tools/advanced-tools.js.map +1 -0
  103. package/dist/tools/change-tools.d.ts +76 -0
  104. package/dist/tools/change-tools.d.ts.map +1 -0
  105. package/dist/tools/change-tools.js +93 -0
  106. package/dist/tools/change-tools.js.map +1 -0
  107. package/dist/tools/context-tools.d.ts +68 -0
  108. package/dist/tools/context-tools.d.ts.map +1 -0
  109. package/dist/tools/context-tools.js +141 -0
  110. package/dist/tools/context-tools.js.map +1 -0
  111. package/dist/tools/debug-tools.d.ts +25 -0
  112. package/dist/tools/debug-tools.d.ts.map +1 -0
  113. package/dist/tools/debug-tools.js +286 -0
  114. package/dist/tools/debug-tools.js.map +1 -0
  115. package/dist/tools/evolving-tools.d.ts +23 -0
  116. package/dist/tools/evolving-tools.d.ts.map +1 -0
  117. package/dist/tools/evolving-tools.js +207 -0
  118. package/dist/tools/evolving-tools.js.map +1 -0
  119. package/dist/tools/flow-tools.d.ts +24 -0
  120. package/dist/tools/flow-tools.d.ts.map +1 -0
  121. package/dist/tools/flow-tools.js +265 -0
  122. package/dist/tools/flow-tools.js.map +1 -0
  123. package/dist/tools/graph-tools.d.ts +71 -0
  124. package/dist/tools/graph-tools.d.ts.map +1 -0
  125. package/dist/tools/graph-tools.js +165 -0
  126. package/dist/tools/graph-tools.js.map +1 -0
  127. package/dist/tools/memory-tools.d.ts +62 -0
  128. package/dist/tools/memory-tools.d.ts.map +1 -0
  129. package/dist/tools/memory-tools.js +195 -0
  130. package/dist/tools/memory-tools.js.map +1 -0
  131. package/dist/tools/smart-tools.d.ts +23 -0
  132. package/dist/tools/smart-tools.d.ts.map +1 -0
  133. package/dist/tools/smart-tools.js +482 -0
  134. package/dist/tools/smart-tools.js.map +1 -0
  135. package/dist/tools/snapshot-tools.d.ts +19 -0
  136. package/dist/tools/snapshot-tools.d.ts.map +1 -0
  137. package/dist/tools/snapshot-tools.js +149 -0
  138. package/dist/tools/snapshot-tools.js.map +1 -0
  139. package/dist/types.d.ts +181 -0
  140. package/dist/types.d.ts.map +1 -0
  141. package/dist/types.js +45 -0
  142. package/dist/types.js.map +1 -0
  143. package/dist/utils/logger.d.ts +59 -0
  144. package/dist/utils/logger.d.ts.map +1 -0
  145. package/dist/utils/logger.js +142 -0
  146. package/dist/utils/logger.js.map +1 -0
  147. package/dist/utils/token-counter.d.ts +51 -0
  148. package/dist/utils/token-counter.d.ts.map +1 -0
  149. package/dist/utils/token-counter.js +181 -0
  150. package/dist/utils/token-counter.js.map +1 -0
  151. package/install.ps1 +321 -0
  152. package/install.sh +345 -0
  153. package/package.json +94 -0
  154. package/setup.bat +62 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/knowledge-graph/snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * AI Mind Map — Decision Log
3
+ *
4
+ * Structured decision tracking that prevents agents from re-debating settled
5
+ * decisions. Supports full lifecycle (active → superseded → reversed), FTS5
6
+ * search, conflict detection, context-injection summaries, and markdown export.
7
+ *
8
+ * @module memory/decision-log
9
+ */
10
+ import Database from 'better-sqlite3';
11
+ import type { Decision, MindMapConfig } from '../types.js';
12
+ /** Parameters for creating a new decision. */
13
+ export interface CreateDecisionInput {
14
+ title: string;
15
+ description: string;
16
+ rationale: string;
17
+ alternatives?: string[];
18
+ consequences?: string[];
19
+ relatedFiles?: string[];
20
+ tags?: string[];
21
+ decidedBy?: string;
22
+ }
23
+ /** Parameters for querying decisions. */
24
+ export interface DecisionQuery {
25
+ /** Full-text search across title, description, rationale. */
26
+ text?: string;
27
+ /** Filter by status. */
28
+ status?: Decision['status'];
29
+ /** Filter by any matching tag. */
30
+ tags?: string[];
31
+ /** Filter by related file path. */
32
+ relatedFile?: string;
33
+ /** Maximum results. */
34
+ limit?: number;
35
+ }
36
+ /** Conflict detected between a new and existing decision. */
37
+ export interface DecisionConflict {
38
+ existingDecision: Decision;
39
+ similarity: number;
40
+ reason: string;
41
+ }
42
+ /**
43
+ * Manages a structured log of architectural/technical decisions.
44
+ *
45
+ * Each decision has a title, rationale, alternatives considered,
46
+ * consequences, and a lifecycle status. Settled decisions can be
47
+ * injected into agent context to avoid re-debating them.
48
+ */
49
+ export declare class DecisionLog {
50
+ private db;
51
+ private maxDecisions;
52
+ private stmtInsert;
53
+ private stmtGetById;
54
+ private stmtUpdateStatus;
55
+ private stmtSupersede;
56
+ private stmtDelete;
57
+ private stmtAll;
58
+ private stmtActive;
59
+ private stmtByStatus;
60
+ private stmtCount;
61
+ private stmtSearchFts;
62
+ constructor(db: Database.Database, config?: Pick<MindMapConfig['memory'], 'maxDecisions'>);
63
+ private ensureSchema;
64
+ private prepareStatements;
65
+ /**
66
+ * Record a new decision.
67
+ *
68
+ * @returns The decision, plus any conflicts detected with existing active decisions.
69
+ */
70
+ createDecision(input: CreateDecisionInput): {
71
+ decision: Decision;
72
+ conflicts: DecisionConflict[];
73
+ };
74
+ /**
75
+ * Get a decision by ID.
76
+ */
77
+ getDecision(id: number): Decision | null;
78
+ /**
79
+ * Delete a decision by ID.
80
+ *
81
+ * @returns `true` if the decision existed.
82
+ */
83
+ deleteDecision(id: number): boolean;
84
+ /**
85
+ * Supersede an existing decision with a new one.
86
+ *
87
+ * The old decision's status becomes 'superseded' and links to the new one.
88
+ *
89
+ * @param oldId - The decision to supersede.
90
+ * @param newInput - The replacement decision.
91
+ * @returns The new decision.
92
+ */
93
+ supersedeDecision(oldId: number, newInput: CreateDecisionInput): {
94
+ decision: Decision;
95
+ conflicts: DecisionConflict[];
96
+ };
97
+ /**
98
+ * Reverse a decision (mark it as no longer valid).
99
+ *
100
+ * @returns The updated decision, or `null` if not found.
101
+ */
102
+ reverseDecision(id: number): Decision | null;
103
+ /**
104
+ * Re-activate a previously superseded or reversed decision.
105
+ */
106
+ reactivateDecision(id: number): Decision | null;
107
+ /**
108
+ * Query decisions with optional text search and filters.
109
+ */
110
+ queryDecisions(query: DecisionQuery): Decision[];
111
+ /**
112
+ * Get all active decisions.
113
+ */
114
+ getActiveDecisions(): Decision[];
115
+ /**
116
+ * Generate a compact summary of active decisions suitable for injecting
117
+ * into an agent's context window.
118
+ *
119
+ * Format:
120
+ * ```
121
+ * Active Decisions (3):
122
+ * 1. [DB] Use PostgreSQL over MongoDB — Need ACID for financial data
123
+ * 2. [Auth] JWT + refresh tokens — Stateless auth for microservices
124
+ * 3. [API] REST over GraphQL — Team expertise, simpler caching
125
+ * ```
126
+ */
127
+ generateContextSummary(): string;
128
+ /**
129
+ * Detect potential conflicts between a new decision and existing active ones.
130
+ *
131
+ * Uses tag overlap + title/description text similarity to flag decisions
132
+ * in the same domain that may contradict each other.
133
+ */
134
+ private detectConflicts;
135
+ /**
136
+ * Export all decisions as a Markdown document.
137
+ */
138
+ exportAsMarkdown(): string;
139
+ /**
140
+ * Remove oldest superseded/reversed decisions when over capacity.
141
+ */
142
+ private enforceCapacity;
143
+ private buildFtsQuery;
144
+ private fallbackLikeSearch;
145
+ private tokenize;
146
+ private jaccardSimilarity;
147
+ private normalizePath;
148
+ private truncate;
149
+ private rowToDecision;
150
+ }
151
+ //# sourceMappingURL=decision-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-log.d.ts","sourceRoot":"","sources":["../../src/memory/decision-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAM3D,8CAA8C;AAC9C,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,yCAAyC;AACzC,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,MAAM,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5B,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;;GAMG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,YAAY,CAAS;IAG7B,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,aAAa,CAAsB;gBAGzC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAaxD,OAAO,CAAC,YAAY;IA4DpB,OAAO,CAAC,iBAAiB;IAqCzB;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG;QAC1C,QAAQ,EAAE,QAAQ,CAAC;QACnB,SAAS,EAAE,gBAAgB,EAAE,CAAC;KAC/B;IAyBD;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAKxC;;;;OAIG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IASnC;;;;;;;;OAQG;IACH,iBAAiB,CACf,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,mBAAmB,GAC5B;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,SAAS,EAAE,gBAAgB,EAAE,CAAA;KAAE;IAcxD;;;;OAIG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAS5C;;OAEG;IACH,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAa/C;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,EAAE;IA4ChD;;OAEG;IACH,kBAAkB,IAAI,QAAQ,EAAE;IAShC;;;;;;;;;;;OAWG;IACH,sBAAsB,IAAI,MAAM;IAoBhC;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IA6CvB;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAoE1B;;OAEG;IACH,OAAO,CAAC,eAAe;IA2BvB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,aAAa;CAmBtB"}
@@ -0,0 +1,482 @@
1
+ /**
2
+ * AI Mind Map — Decision Log
3
+ *
4
+ * Structured decision tracking that prevents agents from re-debating settled
5
+ * decisions. Supports full lifecycle (active → superseded → reversed), FTS5
6
+ * search, conflict detection, context-injection summaries, and markdown export.
7
+ *
8
+ * @module memory/decision-log
9
+ */
10
+ // ────────────────────────────────────────────────────────────────
11
+ // DecisionLog Class
12
+ // ────────────────────────────────────────────────────────────────
13
+ /**
14
+ * Manages a structured log of architectural/technical decisions.
15
+ *
16
+ * Each decision has a title, rationale, alternatives considered,
17
+ * consequences, and a lifecycle status. Settled decisions can be
18
+ * injected into agent context to avoid re-debating them.
19
+ */
20
+ export class DecisionLog {
21
+ db;
22
+ maxDecisions;
23
+ // ── Prepared statements ────────────────────────────────────
24
+ stmtInsert;
25
+ stmtGetById;
26
+ stmtUpdateStatus;
27
+ stmtSupersede;
28
+ stmtDelete;
29
+ stmtAll;
30
+ stmtActive;
31
+ stmtByStatus;
32
+ stmtCount;
33
+ stmtSearchFts;
34
+ constructor(db, config) {
35
+ this.db = db;
36
+ this.maxDecisions = config?.maxDecisions ?? 200;
37
+ this.ensureSchema();
38
+ this.prepareStatements();
39
+ }
40
+ // ────────────────────────────────────────────────────────────
41
+ // Schema
42
+ // ────────────────────────────────────────────────────────────
43
+ ensureSchema() {
44
+ this.db.exec(`
45
+ CREATE TABLE IF NOT EXISTS decisions (
46
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
47
+ title TEXT NOT NULL,
48
+ description TEXT NOT NULL,
49
+ rationale TEXT NOT NULL,
50
+ alternatives TEXT NOT NULL DEFAULT '[]',
51
+ consequences TEXT NOT NULL DEFAULT '[]',
52
+ related_files TEXT NOT NULL DEFAULT '[]',
53
+ tags TEXT NOT NULL DEFAULT '[]',
54
+ decided_at INTEGER NOT NULL,
55
+ decided_by TEXT NOT NULL DEFAULT 'agent',
56
+ status TEXT NOT NULL DEFAULT 'active',
57
+ superseded_by INTEGER
58
+ );
59
+
60
+ CREATE INDEX IF NOT EXISTS idx_decisions_status ON decisions(status);
61
+ CREATE INDEX IF NOT EXISTS idx_decisions_decided_at ON decisions(decided_at DESC);
62
+ `);
63
+ // FTS5 for full-text search across title, description, rationale
64
+ try {
65
+ this.db.exec(`
66
+ CREATE VIRTUAL TABLE IF NOT EXISTS decisions_fts USING fts5(
67
+ title,
68
+ description,
69
+ rationale,
70
+ tags,
71
+ content='decisions',
72
+ content_rowid='id',
73
+ tokenize='porter unicode61'
74
+ );
75
+ `);
76
+ }
77
+ catch {
78
+ // Already exists; ignore
79
+ }
80
+ // Sync triggers
81
+ this.db.exec(`
82
+ CREATE TRIGGER IF NOT EXISTS decisions_ai AFTER INSERT ON decisions BEGIN
83
+ INSERT INTO decisions_fts(rowid, title, description, rationale, tags)
84
+ VALUES (new.id, new.title, new.description, new.rationale, new.tags);
85
+ END;
86
+
87
+ CREATE TRIGGER IF NOT EXISTS decisions_ad AFTER DELETE ON decisions BEGIN
88
+ INSERT INTO decisions_fts(decisions_fts, rowid, title, description, rationale, tags)
89
+ VALUES ('delete', old.id, old.title, old.description, old.rationale, old.tags);
90
+ END;
91
+
92
+ CREATE TRIGGER IF NOT EXISTS decisions_au
93
+ AFTER UPDATE OF title, description, rationale, tags ON decisions BEGIN
94
+ INSERT INTO decisions_fts(decisions_fts, rowid, title, description, rationale, tags)
95
+ VALUES ('delete', old.id, old.title, old.description, old.rationale, old.tags);
96
+ INSERT INTO decisions_fts(rowid, title, description, rationale, tags)
97
+ VALUES (new.id, new.title, new.description, new.rationale, new.tags);
98
+ END;
99
+ `);
100
+ }
101
+ prepareStatements() {
102
+ this.stmtInsert = this.db.prepare(`
103
+ INSERT INTO decisions (title, description, rationale, alternatives, consequences,
104
+ related_files, tags, decided_at, decided_by, status)
105
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'active')
106
+ `);
107
+ this.stmtGetById = this.db.prepare(`SELECT * FROM decisions WHERE id = ?`);
108
+ this.stmtUpdateStatus = this.db.prepare(`UPDATE decisions SET status = ? WHERE id = ?`);
109
+ this.stmtSupersede = this.db.prepare(`UPDATE decisions SET status = 'superseded', superseded_by = ? WHERE id = ?`);
110
+ this.stmtDelete = this.db.prepare(`DELETE FROM decisions WHERE id = ?`);
111
+ this.stmtAll = this.db.prepare(`SELECT * FROM decisions ORDER BY decided_at DESC`);
112
+ this.stmtActive = this.db.prepare(`SELECT * FROM decisions WHERE status = 'active' ORDER BY decided_at DESC`);
113
+ this.stmtByStatus = this.db.prepare(`SELECT * FROM decisions WHERE status = ? ORDER BY decided_at DESC`);
114
+ this.stmtCount = this.db.prepare(`SELECT COUNT(*) AS cnt FROM decisions`);
115
+ this.stmtSearchFts = this.db.prepare(`
116
+ SELECT d.*, bm25(decisions_fts, 10.0, 5.0, 5.0, 2.0) AS rank
117
+ FROM decisions_fts f
118
+ JOIN decisions d ON d.id = f.rowid
119
+ WHERE decisions_fts MATCH ?
120
+ ORDER BY rank
121
+ `);
122
+ }
123
+ // ────────────────────────────────────────────────────────────
124
+ // CRUD
125
+ // ────────────────────────────────────────────────────────────
126
+ /**
127
+ * Record a new decision.
128
+ *
129
+ * @returns The decision, plus any conflicts detected with existing active decisions.
130
+ */
131
+ createDecision(input) {
132
+ const now = Date.now();
133
+ // ── Conflict detection ───────────────────────────────────
134
+ const conflicts = this.detectConflicts(input);
135
+ const info = this.stmtInsert.run(input.title, input.description, input.rationale, JSON.stringify(input.alternatives ?? []), JSON.stringify(input.consequences ?? []), JSON.stringify(input.relatedFiles ?? []), JSON.stringify(input.tags ?? []), now, input.decidedBy ?? 'agent');
136
+ // Enforce capacity
137
+ this.enforceCapacity();
138
+ const row = this.stmtGetById.get(Number(info.lastInsertRowid));
139
+ return { decision: this.rowToDecision(row), conflicts };
140
+ }
141
+ /**
142
+ * Get a decision by ID.
143
+ */
144
+ getDecision(id) {
145
+ const row = this.stmtGetById.get(id);
146
+ return row ? this.rowToDecision(row) : null;
147
+ }
148
+ /**
149
+ * Delete a decision by ID.
150
+ *
151
+ * @returns `true` if the decision existed.
152
+ */
153
+ deleteDecision(id) {
154
+ const info = this.stmtDelete.run(id);
155
+ return info.changes > 0;
156
+ }
157
+ // ────────────────────────────────────────────────────────────
158
+ // Lifecycle
159
+ // ────────────────────────────────────────────────────────────
160
+ /**
161
+ * Supersede an existing decision with a new one.
162
+ *
163
+ * The old decision's status becomes 'superseded' and links to the new one.
164
+ *
165
+ * @param oldId - The decision to supersede.
166
+ * @param newInput - The replacement decision.
167
+ * @returns The new decision.
168
+ */
169
+ supersedeDecision(oldId, newInput) {
170
+ const old = this.stmtGetById.get(oldId);
171
+ if (!old) {
172
+ throw new Error(`Decision #${oldId} not found.`);
173
+ }
174
+ const { decision: newDec, conflicts } = this.createDecision(newInput);
175
+ // Mark old as superseded
176
+ this.stmtSupersede.run(newDec.id, oldId);
177
+ return { decision: newDec, conflicts };
178
+ }
179
+ /**
180
+ * Reverse a decision (mark it as no longer valid).
181
+ *
182
+ * @returns The updated decision, or `null` if not found.
183
+ */
184
+ reverseDecision(id) {
185
+ const row = this.stmtGetById.get(id);
186
+ if (!row)
187
+ return null;
188
+ this.stmtUpdateStatus.run('reversed', id);
189
+ const updated = this.stmtGetById.get(id);
190
+ return this.rowToDecision(updated);
191
+ }
192
+ /**
193
+ * Re-activate a previously superseded or reversed decision.
194
+ */
195
+ reactivateDecision(id) {
196
+ const row = this.stmtGetById.get(id);
197
+ if (!row)
198
+ return null;
199
+ this.stmtUpdateStatus.run('active', id);
200
+ const updated = this.stmtGetById.get(id);
201
+ return this.rowToDecision(updated);
202
+ }
203
+ // ────────────────────────────────────────────────────────────
204
+ // Querying
205
+ // ────────────────────────────────────────────────────────────
206
+ /**
207
+ * Query decisions with optional text search and filters.
208
+ */
209
+ queryDecisions(query) {
210
+ const limit = query.limit ?? 50;
211
+ let rows;
212
+ // FTS path
213
+ if (query.text && query.text.trim().length > 0) {
214
+ const ftsQuery = this.buildFtsQuery(query.text);
215
+ try {
216
+ rows = this.stmtSearchFts.all(ftsQuery);
217
+ }
218
+ catch {
219
+ rows = this.fallbackLikeSearch(query.text);
220
+ }
221
+ }
222
+ else if (query.status) {
223
+ rows = this.stmtByStatus.all(query.status);
224
+ }
225
+ else {
226
+ rows = this.stmtAll.all();
227
+ }
228
+ let decisions = rows.map(r => this.rowToDecision(r));
229
+ // Apply status filter (if FTS was used, status wasn't filtered yet)
230
+ if (query.status && query.text) {
231
+ decisions = decisions.filter(d => d.status === query.status);
232
+ }
233
+ // Tag filter
234
+ if (query.tags && query.tags.length > 0) {
235
+ const tagSet = new Set(query.tags.map(t => t.toLowerCase()));
236
+ decisions = decisions.filter(d => d.tags.some(t => tagSet.has(t.toLowerCase())));
237
+ }
238
+ // Related file filter
239
+ if (query.relatedFile) {
240
+ const norm = this.normalizePath(query.relatedFile);
241
+ decisions = decisions.filter(d => d.relatedFiles.some(f => this.normalizePath(f) === norm));
242
+ }
243
+ return decisions.slice(0, limit);
244
+ }
245
+ /**
246
+ * Get all active decisions.
247
+ */
248
+ getActiveDecisions() {
249
+ const rows = this.stmtActive.all();
250
+ return rows.map(r => this.rowToDecision(r));
251
+ }
252
+ // ────────────────────────────────────────────────────────────
253
+ // Context Injection Summary
254
+ // ────────────────────────────────────────────────────────────
255
+ /**
256
+ * Generate a compact summary of active decisions suitable for injecting
257
+ * into an agent's context window.
258
+ *
259
+ * Format:
260
+ * ```
261
+ * Active Decisions (3):
262
+ * 1. [DB] Use PostgreSQL over MongoDB — Need ACID for financial data
263
+ * 2. [Auth] JWT + refresh tokens — Stateless auth for microservices
264
+ * 3. [API] REST over GraphQL — Team expertise, simpler caching
265
+ * ```
266
+ */
267
+ generateContextSummary() {
268
+ const active = this.getActiveDecisions();
269
+ if (active.length === 0)
270
+ return 'No active decisions recorded.';
271
+ const lines = [`Active Decisions (${active.length}):`];
272
+ for (let i = 0; i < active.length; i++) {
273
+ const d = active[i];
274
+ const tagStr = d.tags.length > 0 ? `[${d.tags[0]}] ` : '';
275
+ const rationale = this.truncate(d.rationale, 60);
276
+ lines.push(`${i + 1}. ${tagStr}${d.title} — ${rationale}`);
277
+ }
278
+ return lines.join('\n');
279
+ }
280
+ // ────────────────────────────────────────────────────────────
281
+ // Conflict Detection
282
+ // ────────────────────────────────────────────────────────────
283
+ /**
284
+ * Detect potential conflicts between a new decision and existing active ones.
285
+ *
286
+ * Uses tag overlap + title/description text similarity to flag decisions
287
+ * in the same domain that may contradict each other.
288
+ */
289
+ detectConflicts(input) {
290
+ const active = this.getActiveDecisions();
291
+ const conflicts = [];
292
+ const inputWords = this.tokenize(`${input.title} ${input.description}`);
293
+ const inputTags = new Set((input.tags ?? []).map(t => t.toLowerCase()));
294
+ for (const existing of active) {
295
+ // Tag overlap
296
+ const existingTags = new Set(existing.tags.map(t => t.toLowerCase()));
297
+ let tagOverlap = 0;
298
+ for (const tag of inputTags) {
299
+ if (existingTags.has(tag))
300
+ tagOverlap++;
301
+ }
302
+ // Text similarity
303
+ const existingWords = this.tokenize(`${existing.title} ${existing.description}`);
304
+ const textSim = this.jaccardSimilarity(inputWords, existingWords);
305
+ // Combined similarity: tag overlap is a strong signal
306
+ const tagBonus = inputTags.size > 0
307
+ ? (tagOverlap / Math.max(inputTags.size, existingTags.size)) * 0.4
308
+ : 0;
309
+ const similarity = textSim * 0.6 + tagBonus;
310
+ if (similarity >= 0.3) {
311
+ conflicts.push({
312
+ existingDecision: existing,
313
+ similarity,
314
+ reason: tagOverlap > 0
315
+ ? `Shares tag(s) and similar topic with decision #${existing.id}: "${existing.title}"`
316
+ : `Similar topic to decision #${existing.id}: "${existing.title}"`,
317
+ });
318
+ }
319
+ }
320
+ // Sort by highest similarity first
321
+ conflicts.sort((a, b) => b.similarity - a.similarity);
322
+ return conflicts;
323
+ }
324
+ // ────────────────────────────────────────────────────────────
325
+ // Markdown Export
326
+ // ────────────────────────────────────────────────────────────
327
+ /**
328
+ * Export all decisions as a Markdown document.
329
+ */
330
+ exportAsMarkdown() {
331
+ const all = this.stmtAll.all().map(r => this.rowToDecision(r));
332
+ const active = all.filter(d => d.status === 'active');
333
+ const superseded = all.filter(d => d.status === 'superseded');
334
+ const reversed = all.filter(d => d.status === 'reversed');
335
+ const lines = [
336
+ '# Decision Log',
337
+ '',
338
+ `> Generated ${new Date().toISOString()} — ${all.length} total decisions`,
339
+ '',
340
+ ];
341
+ const renderSection = (title, decisions) => {
342
+ if (decisions.length === 0)
343
+ return;
344
+ lines.push(`## ${title} (${decisions.length})`, '');
345
+ for (const d of decisions) {
346
+ lines.push(`### ${d.id}. ${d.title}`, '');
347
+ lines.push(`**Status:** ${d.status}`);
348
+ lines.push(`**Decided:** ${new Date(d.decidedAt).toISOString()} by ${d.decidedBy}`);
349
+ if (d.tags.length > 0) {
350
+ lines.push(`**Tags:** ${d.tags.join(', ')}`);
351
+ }
352
+ lines.push('');
353
+ lines.push(d.description, '');
354
+ lines.push(`**Rationale:** ${d.rationale}`, '');
355
+ if (d.alternatives.length > 0) {
356
+ lines.push('**Alternatives considered:**');
357
+ for (const alt of d.alternatives) {
358
+ lines.push(`- ${alt}`);
359
+ }
360
+ lines.push('');
361
+ }
362
+ if (d.consequences.length > 0) {
363
+ lines.push('**Consequences:**');
364
+ for (const con of d.consequences) {
365
+ lines.push(`- ${con}`);
366
+ }
367
+ lines.push('');
368
+ }
369
+ if (d.relatedFiles.length > 0) {
370
+ lines.push(`**Related files:** ${d.relatedFiles.join(', ')}`);
371
+ lines.push('');
372
+ }
373
+ if (d.supersededBy !== undefined) {
374
+ lines.push(`**Superseded by:** Decision #${d.supersededBy}`);
375
+ lines.push('');
376
+ }
377
+ lines.push('---', '');
378
+ }
379
+ };
380
+ renderSection('Active Decisions', active);
381
+ renderSection('Superseded Decisions', superseded);
382
+ renderSection('Reversed Decisions', reversed);
383
+ return lines.join('\n');
384
+ }
385
+ // ────────────────────────────────────────────────────────────
386
+ // Capacity Management
387
+ // ────────────────────────────────────────────────────────────
388
+ /**
389
+ * Remove oldest superseded/reversed decisions when over capacity.
390
+ */
391
+ enforceCapacity() {
392
+ const countRow = this.stmtCount.get();
393
+ const excess = countRow.cnt - this.maxDecisions;
394
+ if (excess <= 0)
395
+ return;
396
+ // Remove oldest non-active decisions first
397
+ const toRemove = this.db
398
+ .prepare(`SELECT id FROM decisions
399
+ WHERE status != 'active'
400
+ ORDER BY decided_at ASC
401
+ LIMIT ?`)
402
+ .all(excess);
403
+ const txn = this.db.transaction(() => {
404
+ for (const { id } of toRemove) {
405
+ this.stmtDelete.run(id);
406
+ }
407
+ });
408
+ txn();
409
+ }
410
+ // ────────────────────────────────────────────────────────────
411
+ // FTS Helpers
412
+ // ────────────────────────────────────────────────────────────
413
+ buildFtsQuery(text) {
414
+ const words = text
415
+ .replace(/[^\w\s]/g, ' ')
416
+ .split(/\s+/)
417
+ .filter(w => w.length > 0);
418
+ if (words.length === 0)
419
+ return '""';
420
+ return words.map(w => `"${w}"`).join(' OR ');
421
+ }
422
+ fallbackLikeSearch(text) {
423
+ const pattern = `%${text}%`;
424
+ return this.db
425
+ .prepare(`SELECT *, 0 AS rank FROM decisions
426
+ WHERE title LIKE ? OR description LIKE ? OR rationale LIKE ?
427
+ ORDER BY decided_at DESC LIMIT 50`)
428
+ .all(pattern, pattern, pattern);
429
+ }
430
+ // ────────────────────────────────────────────────────────────
431
+ // Text Similarity
432
+ // ────────────────────────────────────────────────────────────
433
+ tokenize(text) {
434
+ return new Set(text
435
+ .toLowerCase()
436
+ .replace(/[^\w\s]/g, ' ')
437
+ .split(/\s+/)
438
+ .filter(w => w.length > 1));
439
+ }
440
+ jaccardSimilarity(a, b) {
441
+ if (a.size === 0 && b.size === 0)
442
+ return 1;
443
+ let intersection = 0;
444
+ for (const word of a) {
445
+ if (b.has(word))
446
+ intersection++;
447
+ }
448
+ const union = a.size + b.size - intersection;
449
+ return union === 0 ? 0 : intersection / union;
450
+ }
451
+ normalizePath(p) {
452
+ return p.replace(/\\/g, '/').toLowerCase();
453
+ }
454
+ truncate(text, maxLen) {
455
+ if (text.length <= maxLen)
456
+ return text;
457
+ return text.slice(0, maxLen - 3) + '...';
458
+ }
459
+ // ────────────────────────────────────────────────────────────
460
+ // Row → Domain Object
461
+ // ────────────────────────────────────────────────────────────
462
+ rowToDecision(row) {
463
+ const dec = {
464
+ id: row.id,
465
+ title: row.title,
466
+ description: row.description,
467
+ rationale: row.rationale,
468
+ alternatives: JSON.parse(row.alternatives || '[]'),
469
+ consequences: JSON.parse(row.consequences || '[]'),
470
+ relatedFiles: JSON.parse(row.related_files || '[]'),
471
+ tags: JSON.parse(row.tags || '[]'),
472
+ decidedAt: row.decided_at,
473
+ decidedBy: row.decided_by,
474
+ status: row.status,
475
+ };
476
+ if (row.superseded_by != null) {
477
+ dec.supersededBy = row.superseded_by;
478
+ }
479
+ return dec;
480
+ }
481
+ }
482
+ //# sourceMappingURL=decision-log.js.map