cccmemory 1.8.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.
- package/LICENSE +21 -0
- package/README.md +349 -0
- package/dist/ConversationMemory.d.ts +231 -0
- package/dist/ConversationMemory.d.ts.map +1 -0
- package/dist/ConversationMemory.js +357 -0
- package/dist/ConversationMemory.js.map +1 -0
- package/dist/cache/QueryCache.d.ts +215 -0
- package/dist/cache/QueryCache.d.ts.map +1 -0
- package/dist/cache/QueryCache.js +294 -0
- package/dist/cache/QueryCache.js.map +1 -0
- package/dist/cli/commands.d.ts +9 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +954 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/help.d.ts +16 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +361 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/index.d.ts +30 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +111 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/context/ContextInjector.d.ts +38 -0
- package/dist/context/ContextInjector.d.ts.map +1 -0
- package/dist/context/ContextInjector.js +235 -0
- package/dist/context/ContextInjector.js.map +1 -0
- package/dist/documentation/CodeAnalyzer.d.ts +29 -0
- package/dist/documentation/CodeAnalyzer.d.ts.map +1 -0
- package/dist/documentation/CodeAnalyzer.js +122 -0
- package/dist/documentation/CodeAnalyzer.js.map +1 -0
- package/dist/documentation/ConversationAnalyzer.d.ts +19 -0
- package/dist/documentation/ConversationAnalyzer.d.ts.map +1 -0
- package/dist/documentation/ConversationAnalyzer.js +157 -0
- package/dist/documentation/ConversationAnalyzer.js.map +1 -0
- package/dist/documentation/CrossReferencer.d.ts +67 -0
- package/dist/documentation/CrossReferencer.d.ts.map +1 -0
- package/dist/documentation/CrossReferencer.js +247 -0
- package/dist/documentation/CrossReferencer.js.map +1 -0
- package/dist/documentation/DocumentationGenerator.d.ts +22 -0
- package/dist/documentation/DocumentationGenerator.d.ts.map +1 -0
- package/dist/documentation/DocumentationGenerator.js +57 -0
- package/dist/documentation/DocumentationGenerator.js.map +1 -0
- package/dist/documentation/MarkdownFormatter.d.ts +26 -0
- package/dist/documentation/MarkdownFormatter.d.ts.map +1 -0
- package/dist/documentation/MarkdownFormatter.js +301 -0
- package/dist/documentation/MarkdownFormatter.js.map +1 -0
- package/dist/documentation/types.d.ts +176 -0
- package/dist/documentation/types.d.ts.map +1 -0
- package/dist/documentation/types.js +5 -0
- package/dist/documentation/types.js.map +1 -0
- package/dist/embeddings/ConfigManager.d.ts +46 -0
- package/dist/embeddings/ConfigManager.d.ts.map +1 -0
- package/dist/embeddings/ConfigManager.js +177 -0
- package/dist/embeddings/ConfigManager.js.map +1 -0
- package/dist/embeddings/EmbeddingConfig.d.ts +39 -0
- package/dist/embeddings/EmbeddingConfig.d.ts.map +1 -0
- package/dist/embeddings/EmbeddingConfig.js +132 -0
- package/dist/embeddings/EmbeddingConfig.js.map +1 -0
- package/dist/embeddings/EmbeddingGenerator.d.ts +51 -0
- package/dist/embeddings/EmbeddingGenerator.d.ts.map +1 -0
- package/dist/embeddings/EmbeddingGenerator.js +157 -0
- package/dist/embeddings/EmbeddingGenerator.js.map +1 -0
- package/dist/embeddings/EmbeddingProvider.d.ts +34 -0
- package/dist/embeddings/EmbeddingProvider.d.ts.map +1 -0
- package/dist/embeddings/EmbeddingProvider.js +6 -0
- package/dist/embeddings/EmbeddingProvider.js.map +1 -0
- package/dist/embeddings/ModelRegistry.d.ts +48 -0
- package/dist/embeddings/ModelRegistry.d.ts.map +1 -0
- package/dist/embeddings/ModelRegistry.js +170 -0
- package/dist/embeddings/ModelRegistry.js.map +1 -0
- package/dist/embeddings/VectorStore.d.ts +114 -0
- package/dist/embeddings/VectorStore.d.ts.map +1 -0
- package/dist/embeddings/VectorStore.js +393 -0
- package/dist/embeddings/VectorStore.js.map +1 -0
- package/dist/embeddings/providers/OllamaEmbeddings.d.ts +38 -0
- package/dist/embeddings/providers/OllamaEmbeddings.d.ts.map +1 -0
- package/dist/embeddings/providers/OllamaEmbeddings.js +125 -0
- package/dist/embeddings/providers/OllamaEmbeddings.js.map +1 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.d.ts +40 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.d.ts.map +1 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.js +129 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.js.map +1 -0
- package/dist/embeddings/providers/TransformersEmbeddings.d.ts +38 -0
- package/dist/embeddings/providers/TransformersEmbeddings.d.ts.map +1 -0
- package/dist/embeddings/providers/TransformersEmbeddings.js +115 -0
- package/dist/embeddings/providers/TransformersEmbeddings.js.map +1 -0
- package/dist/handoff/SessionHandoffStore.d.ts +80 -0
- package/dist/handoff/SessionHandoffStore.d.ts.map +1 -0
- package/dist/handoff/SessionHandoffStore.js +314 -0
- package/dist/handoff/SessionHandoffStore.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +115 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.d.ts +27 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +157 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/memory/WorkingMemoryStore.d.ts +83 -0
- package/dist/memory/WorkingMemoryStore.d.ts.map +1 -0
- package/dist/memory/WorkingMemoryStore.js +318 -0
- package/dist/memory/WorkingMemoryStore.js.map +1 -0
- package/dist/memory/types.d.ts +192 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +8 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/parsers/CodexConversationParser.d.ts +51 -0
- package/dist/parsers/CodexConversationParser.d.ts.map +1 -0
- package/dist/parsers/CodexConversationParser.js +301 -0
- package/dist/parsers/CodexConversationParser.js.map +1 -0
- package/dist/parsers/ConversationParser.d.ts +286 -0
- package/dist/parsers/ConversationParser.d.ts.map +1 -0
- package/dist/parsers/ConversationParser.js +795 -0
- package/dist/parsers/ConversationParser.js.map +1 -0
- package/dist/parsers/DecisionExtractor.d.ts +144 -0
- package/dist/parsers/DecisionExtractor.d.ts.map +1 -0
- package/dist/parsers/DecisionExtractor.js +434 -0
- package/dist/parsers/DecisionExtractor.js.map +1 -0
- package/dist/parsers/GitIntegrator.d.ts +156 -0
- package/dist/parsers/GitIntegrator.d.ts.map +1 -0
- package/dist/parsers/GitIntegrator.js +348 -0
- package/dist/parsers/GitIntegrator.js.map +1 -0
- package/dist/parsers/MistakeExtractor.d.ts +151 -0
- package/dist/parsers/MistakeExtractor.d.ts.map +1 -0
- package/dist/parsers/MistakeExtractor.js +460 -0
- package/dist/parsers/MistakeExtractor.js.map +1 -0
- package/dist/parsers/RequirementsExtractor.d.ts +166 -0
- package/dist/parsers/RequirementsExtractor.d.ts.map +1 -0
- package/dist/parsers/RequirementsExtractor.js +338 -0
- package/dist/parsers/RequirementsExtractor.js.map +1 -0
- package/dist/realtime/ConversationWatcher.d.ts +87 -0
- package/dist/realtime/ConversationWatcher.d.ts.map +1 -0
- package/dist/realtime/ConversationWatcher.js +204 -0
- package/dist/realtime/ConversationWatcher.js.map +1 -0
- package/dist/realtime/IncrementalParser.d.ts +83 -0
- package/dist/realtime/IncrementalParser.d.ts.map +1 -0
- package/dist/realtime/IncrementalParser.js +232 -0
- package/dist/realtime/IncrementalParser.js.map +1 -0
- package/dist/realtime/LiveExtractor.d.ts +72 -0
- package/dist/realtime/LiveExtractor.d.ts.map +1 -0
- package/dist/realtime/LiveExtractor.js +288 -0
- package/dist/realtime/LiveExtractor.js.map +1 -0
- package/dist/search/SemanticSearch.d.ts +121 -0
- package/dist/search/SemanticSearch.d.ts.map +1 -0
- package/dist/search/SemanticSearch.js +823 -0
- package/dist/search/SemanticSearch.js.map +1 -0
- package/dist/storage/BackupManager.d.ts +58 -0
- package/dist/storage/BackupManager.d.ts.map +1 -0
- package/dist/storage/BackupManager.js +223 -0
- package/dist/storage/BackupManager.js.map +1 -0
- package/dist/storage/ConversationStorage.d.ts +341 -0
- package/dist/storage/ConversationStorage.d.ts.map +1 -0
- package/dist/storage/ConversationStorage.js +792 -0
- package/dist/storage/ConversationStorage.js.map +1 -0
- package/dist/storage/DeletionService.d.ts +70 -0
- package/dist/storage/DeletionService.d.ts.map +1 -0
- package/dist/storage/DeletionService.js +253 -0
- package/dist/storage/DeletionService.js.map +1 -0
- package/dist/storage/GlobalIndex.d.ts +133 -0
- package/dist/storage/GlobalIndex.d.ts.map +1 -0
- package/dist/storage/GlobalIndex.js +310 -0
- package/dist/storage/GlobalIndex.js.map +1 -0
- package/dist/storage/SQLiteManager.d.ts +114 -0
- package/dist/storage/SQLiteManager.d.ts.map +1 -0
- package/dist/storage/SQLiteManager.js +636 -0
- package/dist/storage/SQLiteManager.js.map +1 -0
- package/dist/storage/migrations.d.ts +54 -0
- package/dist/storage/migrations.d.ts.map +1 -0
- package/dist/storage/migrations.js +285 -0
- package/dist/storage/migrations.js.map +1 -0
- package/dist/storage/schema.sql +436 -0
- package/dist/tools/ToolDefinitions.d.ts +946 -0
- package/dist/tools/ToolDefinitions.d.ts.map +1 -0
- package/dist/tools/ToolDefinitions.js +937 -0
- package/dist/tools/ToolDefinitions.js.map +1 -0
- package/dist/tools/ToolHandlers.d.ts +791 -0
- package/dist/tools/ToolHandlers.d.ts.map +1 -0
- package/dist/tools/ToolHandlers.js +3262 -0
- package/dist/tools/ToolHandlers.js.map +1 -0
- package/dist/types/ToolTypes.d.ts +824 -0
- package/dist/types/ToolTypes.d.ts.map +1 -0
- package/dist/types/ToolTypes.js +6 -0
- package/dist/types/ToolTypes.js.map +1 -0
- package/dist/utils/Logger.d.ts +70 -0
- package/dist/utils/Logger.d.ts.map +1 -0
- package/dist/utils/Logger.js +131 -0
- package/dist/utils/Logger.js.map +1 -0
- package/dist/utils/McpConfig.d.ts +54 -0
- package/dist/utils/McpConfig.d.ts.map +1 -0
- package/dist/utils/McpConfig.js +136 -0
- package/dist/utils/McpConfig.js.map +1 -0
- package/dist/utils/ProjectMigration.d.ts +82 -0
- package/dist/utils/ProjectMigration.d.ts.map +1 -0
- package/dist/utils/ProjectMigration.js +416 -0
- package/dist/utils/ProjectMigration.js.map +1 -0
- package/dist/utils/constants.d.ts +75 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +105 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/safeJson.d.ts +37 -0
- package/dist/utils/safeJson.d.ts.map +1 -0
- package/dist/utils/safeJson.js +48 -0
- package/dist/utils/safeJson.js.map +1 -0
- package/dist/utils/sanitization.d.ts +45 -0
- package/dist/utils/sanitization.d.ts.map +1 -0
- package/dist/utils/sanitization.js +153 -0
- package/dist/utils/sanitization.js.map +1 -0
- package/dist/utils/worktree.d.ts +15 -0
- package/dist/utils/worktree.d.ts.map +1 -0
- package/dist/utils/worktree.js +86 -0
- package/dist/utils/worktree.js.map +1 -0
- package/package.json +98 -0
- package/scripts/changelog-check.sh +62 -0
- package/scripts/check-node.js +17 -0
- package/scripts/dev-config.js +56 -0
- package/scripts/postinstall.js +117 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConversationParser.js","sourceRoot":"","sources":["../../src/parsers/ConversationParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decision Extractor - Identifies and extracts decisions from conversations.
|
|
3
|
+
*
|
|
4
|
+
* This extractor analyzes conversation messages and thinking blocks to identify
|
|
5
|
+
* technical and architectural decisions made during development. It captures:
|
|
6
|
+
* - What decision was made
|
|
7
|
+
* - Why it was made (rationale)
|
|
8
|
+
* - What alternatives were considered
|
|
9
|
+
* - Why alternatives were rejected
|
|
10
|
+
* - Context (what the decision was about)
|
|
11
|
+
*
|
|
12
|
+
* Uses pattern matching to detect decision indicators like "we decided to",
|
|
13
|
+
* "using X instead of Y because", and user corrections.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const extractor = new DecisionExtractor();
|
|
18
|
+
* const decisions = extractor.extractDecisions(messages, thinkingBlocks);
|
|
19
|
+
* console.log(`Found ${decisions.length} decisions`);
|
|
20
|
+
* decisions.forEach(d => {
|
|
21
|
+
* console.log(`Decision: ${d.decision_text}`);
|
|
22
|
+
* console.log(`Rationale: ${d.rationale}`);
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import type { Message, ThinkingBlock } from "./ConversationParser.js";
|
|
27
|
+
/**
|
|
28
|
+
* Represents a technical or architectural decision made during development.
|
|
29
|
+
*/
|
|
30
|
+
export interface Decision {
|
|
31
|
+
/** Unique decision identifier */
|
|
32
|
+
id: string;
|
|
33
|
+
/** Conversation where this decision was made */
|
|
34
|
+
conversation_id: string;
|
|
35
|
+
/** Message containing the decision */
|
|
36
|
+
message_id: string;
|
|
37
|
+
/** The decision that was made */
|
|
38
|
+
decision_text: string;
|
|
39
|
+
/** Why this decision was made */
|
|
40
|
+
rationale?: string;
|
|
41
|
+
/** Alternative approaches that were considered */
|
|
42
|
+
alternatives_considered: string[];
|
|
43
|
+
/** Reasons why alternatives were rejected */
|
|
44
|
+
rejected_reasons: Record<string, string>;
|
|
45
|
+
/** Context/domain of the decision (e.g., 'database', 'authentication') */
|
|
46
|
+
context?: string;
|
|
47
|
+
/** Files affected by this decision */
|
|
48
|
+
related_files: string[];
|
|
49
|
+
/** Git commits implementing this decision */
|
|
50
|
+
related_commits: string[];
|
|
51
|
+
/** When the decision was made */
|
|
52
|
+
timestamp: number;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Extracts technical and architectural decisions from conversation history.
|
|
56
|
+
*
|
|
57
|
+
* Analyzes messages and thinking blocks using pattern matching to identify
|
|
58
|
+
* decisions, rationale, alternatives, and context.
|
|
59
|
+
*/
|
|
60
|
+
export declare class DecisionExtractor {
|
|
61
|
+
private readonly MIN_QUALITY_SCORE;
|
|
62
|
+
private readonly NOISE_PATTERNS;
|
|
63
|
+
private readonly DECISION_PATTERNS;
|
|
64
|
+
private readonly CORRECTION_PATTERNS;
|
|
65
|
+
private readonly CONTEXT_KEYWORDS;
|
|
66
|
+
/**
|
|
67
|
+
* Extract decisions from messages and thinking blocks.
|
|
68
|
+
*
|
|
69
|
+
* Analyzes conversation messages to identify decisions using pattern matching.
|
|
70
|
+
* Looks for explicit decision statements, user corrections, and thinking blocks
|
|
71
|
+
* that contain decision-making processes.
|
|
72
|
+
*
|
|
73
|
+
* @param messages - Array of conversation messages to analyze
|
|
74
|
+
* @param thinkingBlocks - Array of thinking blocks (Claude's internal reasoning)
|
|
75
|
+
* @returns Array of extracted Decision objects
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```typescript
|
|
79
|
+
* const extractor = new DecisionExtractor();
|
|
80
|
+
* const decisions = extractor.extractDecisions(messages, thinkingBlocks);
|
|
81
|
+
*
|
|
82
|
+
* // Find decisions about databases
|
|
83
|
+
* const dbDecisions = decisions.filter(d => d.context?.includes('database'));
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
extractDecisions(messages: Message[], thinkingBlocks: ThinkingBlock[]): Decision[];
|
|
87
|
+
/**
|
|
88
|
+
* Check if content is noise that should be filtered out
|
|
89
|
+
*/
|
|
90
|
+
private isNoiseContent;
|
|
91
|
+
/**
|
|
92
|
+
* Extract explicit decisions from assistant messages
|
|
93
|
+
*/
|
|
94
|
+
private extractExplicitDecisions;
|
|
95
|
+
/**
|
|
96
|
+
* Parse a regex match into a Decision object
|
|
97
|
+
*/
|
|
98
|
+
private parseDecisionMatch;
|
|
99
|
+
/**
|
|
100
|
+
* Extract structured decisions (e.g., "Decision: ..." format)
|
|
101
|
+
*/
|
|
102
|
+
private extractStructuredDecisions;
|
|
103
|
+
/**
|
|
104
|
+
* Extract decisions from user corrections
|
|
105
|
+
*/
|
|
106
|
+
private extractCorrections;
|
|
107
|
+
/**
|
|
108
|
+
* Check if content contains technical keywords suggesting a real decision
|
|
109
|
+
*/
|
|
110
|
+
private hasTechnicalKeywords;
|
|
111
|
+
/**
|
|
112
|
+
* Extract decision text from matched pattern
|
|
113
|
+
*/
|
|
114
|
+
private extractDecisionText;
|
|
115
|
+
/**
|
|
116
|
+
* Extract rationale from decision text
|
|
117
|
+
*/
|
|
118
|
+
private extractRationale;
|
|
119
|
+
/**
|
|
120
|
+
* Extract alternative approaches that were considered
|
|
121
|
+
*/
|
|
122
|
+
private extractAlternatives;
|
|
123
|
+
/**
|
|
124
|
+
* Extract reasons for rejecting alternatives
|
|
125
|
+
*/
|
|
126
|
+
private extractRejectedReasons;
|
|
127
|
+
/**
|
|
128
|
+
* Identify what context/area this decision relates to
|
|
129
|
+
*/
|
|
130
|
+
private identifyContext;
|
|
131
|
+
/**
|
|
132
|
+
* Extract related files from message metadata
|
|
133
|
+
*/
|
|
134
|
+
private extractRelatedFiles;
|
|
135
|
+
/**
|
|
136
|
+
* Deduplicate similar decisions
|
|
137
|
+
*/
|
|
138
|
+
private deduplicateDecisions;
|
|
139
|
+
/**
|
|
140
|
+
* Score a decision's importance (for prioritization)
|
|
141
|
+
*/
|
|
142
|
+
scoreDecisionImportance(decision: Decision): number;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=DecisionExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DecisionExtractor.d.ts","sourceRoot":"","sources":["../../src/parsers/DecisionExtractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,gDAAgD;IAChD,eAAe,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,6CAA6C;IAC7C,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,6CAA6C;IAC7C,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,qBAAa,iBAAiB;IAE5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAK;IAGvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAc7B;IAGF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAShC;IAGF,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CASlC;IAGF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAgB/B;IAEF;;;;;;;;;;;;;;;;;;;OAmBG;IACH,gBAAgB,CACd,QAAQ,EAAE,OAAO,EAAE,EACnB,cAAc,EAAE,aAAa,EAAE,GAC9B,QAAQ,EAAE;IAsCb;;OAEG;IACH,OAAO,CAAC,cAAc;IAKtB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAgChC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgC1B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA0ClC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0C1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAoB9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;OAEG;IACH,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM;CAuBpD"}
|
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decision Extractor - Identifies and extracts decisions from conversations.
|
|
3
|
+
*
|
|
4
|
+
* This extractor analyzes conversation messages and thinking blocks to identify
|
|
5
|
+
* technical and architectural decisions made during development. It captures:
|
|
6
|
+
* - What decision was made
|
|
7
|
+
* - Why it was made (rationale)
|
|
8
|
+
* - What alternatives were considered
|
|
9
|
+
* - Why alternatives were rejected
|
|
10
|
+
* - Context (what the decision was about)
|
|
11
|
+
*
|
|
12
|
+
* Uses pattern matching to detect decision indicators like "we decided to",
|
|
13
|
+
* "using X instead of Y because", and user corrections.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const extractor = new DecisionExtractor();
|
|
18
|
+
* const decisions = extractor.extractDecisions(messages, thinkingBlocks);
|
|
19
|
+
* console.log(`Found ${decisions.length} decisions`);
|
|
20
|
+
* decisions.forEach(d => {
|
|
21
|
+
* console.log(`Decision: ${d.decision_text}`);
|
|
22
|
+
* console.log(`Rationale: ${d.rationale}`);
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import { nanoid } from "nanoid";
|
|
27
|
+
/**
|
|
28
|
+
* Extracts technical and architectural decisions from conversation history.
|
|
29
|
+
*
|
|
30
|
+
* Analyzes messages and thinking blocks using pattern matching to identify
|
|
31
|
+
* decisions, rationale, alternatives, and context.
|
|
32
|
+
*/
|
|
33
|
+
export class DecisionExtractor {
|
|
34
|
+
// Minimum quality score required to store a decision
|
|
35
|
+
MIN_QUALITY_SCORE = 2;
|
|
36
|
+
// Patterns that indicate noise/garbage to filter out
|
|
37
|
+
NOISE_PATTERNS = [
|
|
38
|
+
/this session is being continued/i,
|
|
39
|
+
/conversation is summarized below/i,
|
|
40
|
+
/previous conversation that ran out of context/i,
|
|
41
|
+
/here is the summary/i,
|
|
42
|
+
/summary of the conversation/i,
|
|
43
|
+
/context from previous session/i,
|
|
44
|
+
/let me summarize/i,
|
|
45
|
+
/to summarize what we've done/i,
|
|
46
|
+
/^I'll help you/i,
|
|
47
|
+
/^Let me help you/i,
|
|
48
|
+
/^Sure,? I can/i,
|
|
49
|
+
/^I understand/i,
|
|
50
|
+
/^Great question/i,
|
|
51
|
+
];
|
|
52
|
+
// Decision pattern indicators - more focused on technical decisions
|
|
53
|
+
DECISION_PATTERNS = [
|
|
54
|
+
// Technical decision with comparison and rationale
|
|
55
|
+
/(?:using|use|implement|adopt)\s+(.+?)\s+(?:instead of|over|rather than)\s+(.+?)\s+(?:because|since|as|for)\s+(.+?)(?:\.|$)/gi,
|
|
56
|
+
// Explicit architectural decision
|
|
57
|
+
/(?:architectural|technical|design)\s+decision:\s*(.+?)(?:\.|$)/gi,
|
|
58
|
+
// We decided with clear rationale
|
|
59
|
+
/(?:we|i)\s+(?:decided|chose)\s+(?:to\s+)?(.+?)\s+(?:because|since|due to|for)\s+(.+?)(?:\.|$)/gi,
|
|
60
|
+
// Rejected alternative with reason
|
|
61
|
+
/(?:rejected|dismissed|avoided|ruled out)\s+(.+?)\s+(?:because|due to|since|as)\s+(.+?)(?:\.|$)/gi,
|
|
62
|
+
];
|
|
63
|
+
// Correction patterns - stricter, require technical context
|
|
64
|
+
CORRECTION_PATTERNS = [
|
|
65
|
+
// "No, use X instead of Y"
|
|
66
|
+
/^no[,\s]+(?:use|implement|go with)\s+(.+?)\s+(?:instead|rather)/i,
|
|
67
|
+
// "Actually, we should use X because Y"
|
|
68
|
+
/^actually[,\s]+(?:we should|you should|use|implement)\s+(.+?)\s+(?:because|since)/i,
|
|
69
|
+
// "That's wrong, the correct approach is X"
|
|
70
|
+
/that'?s?\s+(?:wrong|incorrect)[,\s]+(?:the correct|use|we should)\s+(.+)/i,
|
|
71
|
+
// "Don't use X, use Y instead"
|
|
72
|
+
/don't\s+(?:use|implement)\s+(.+?)[,\s]+(?:use|implement)\s+(.+)/i,
|
|
73
|
+
];
|
|
74
|
+
// Context keywords to identify what the decision is about
|
|
75
|
+
CONTEXT_KEYWORDS = [
|
|
76
|
+
"authentication",
|
|
77
|
+
"auth",
|
|
78
|
+
"database",
|
|
79
|
+
"api",
|
|
80
|
+
"frontend",
|
|
81
|
+
"backend",
|
|
82
|
+
"testing",
|
|
83
|
+
"deployment",
|
|
84
|
+
"security",
|
|
85
|
+
"performance",
|
|
86
|
+
"architecture",
|
|
87
|
+
"design pattern",
|
|
88
|
+
"library",
|
|
89
|
+
"framework",
|
|
90
|
+
"optimization",
|
|
91
|
+
];
|
|
92
|
+
/**
|
|
93
|
+
* Extract decisions from messages and thinking blocks.
|
|
94
|
+
*
|
|
95
|
+
* Analyzes conversation messages to identify decisions using pattern matching.
|
|
96
|
+
* Looks for explicit decision statements, user corrections, and thinking blocks
|
|
97
|
+
* that contain decision-making processes.
|
|
98
|
+
*
|
|
99
|
+
* @param messages - Array of conversation messages to analyze
|
|
100
|
+
* @param thinkingBlocks - Array of thinking blocks (Claude's internal reasoning)
|
|
101
|
+
* @returns Array of extracted Decision objects
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```typescript
|
|
105
|
+
* const extractor = new DecisionExtractor();
|
|
106
|
+
* const decisions = extractor.extractDecisions(messages, thinkingBlocks);
|
|
107
|
+
*
|
|
108
|
+
* // Find decisions about databases
|
|
109
|
+
* const dbDecisions = decisions.filter(d => d.context?.includes('database'));
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
extractDecisions(messages, thinkingBlocks) {
|
|
113
|
+
const decisions = [];
|
|
114
|
+
// Extract from assistant messages with thinking blocks
|
|
115
|
+
for (const message of messages) {
|
|
116
|
+
if (message.role === "assistant" && message.content) {
|
|
117
|
+
// Skip messages that are noise (session summaries, etc.)
|
|
118
|
+
if (this.isNoiseContent(message.content)) {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const thinking = thinkingBlocks.find((t) => t.message_id === message.id);
|
|
122
|
+
// Check for explicit decisions in message content
|
|
123
|
+
const explicitDecisions = this.extractExplicitDecisions(message, thinking);
|
|
124
|
+
decisions.push(...explicitDecisions);
|
|
125
|
+
}
|
|
126
|
+
// Extract from user corrections
|
|
127
|
+
if (message.role === "user" && message.content) {
|
|
128
|
+
// Skip noise content
|
|
129
|
+
if (this.isNoiseContent(message.content)) {
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
const corrections = this.extractCorrections(message);
|
|
133
|
+
decisions.push(...corrections);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Deduplicate similar decisions
|
|
137
|
+
const deduplicated = this.deduplicateDecisions(decisions);
|
|
138
|
+
// Filter by quality score
|
|
139
|
+
return deduplicated.filter((d) => this.scoreDecisionImportance(d) >= this.MIN_QUALITY_SCORE);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Check if content is noise that should be filtered out
|
|
143
|
+
*/
|
|
144
|
+
isNoiseContent(content) {
|
|
145
|
+
const firstChunk = content.substring(0, 500);
|
|
146
|
+
return this.NOISE_PATTERNS.some((pattern) => pattern.test(firstChunk));
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Extract explicit decisions from assistant messages
|
|
150
|
+
*/
|
|
151
|
+
extractExplicitDecisions(message, thinkingBlock) {
|
|
152
|
+
const decisions = [];
|
|
153
|
+
const content = message.content || "";
|
|
154
|
+
const thinkingContent = thinkingBlock?.thinking_content || "";
|
|
155
|
+
const combinedContent = `${content}\n${thinkingContent}`;
|
|
156
|
+
// Look for decision patterns
|
|
157
|
+
for (const pattern of this.DECISION_PATTERNS) {
|
|
158
|
+
const matches = Array.from(combinedContent.matchAll(pattern));
|
|
159
|
+
for (const match of matches) {
|
|
160
|
+
const decision = this.parseDecisionMatch(match, message, thinkingBlock);
|
|
161
|
+
if (decision) {
|
|
162
|
+
decisions.push(decision);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Extract from structured decision statements
|
|
167
|
+
const structuredDecisions = this.extractStructuredDecisions(combinedContent, message, thinkingBlock);
|
|
168
|
+
decisions.push(...structuredDecisions);
|
|
169
|
+
return decisions;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Parse a regex match into a Decision object
|
|
173
|
+
*/
|
|
174
|
+
parseDecisionMatch(match, message, _thinking) {
|
|
175
|
+
if (!match[0]) {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
const fullText = match[0];
|
|
179
|
+
const decisionText = this.extractDecisionText(fullText);
|
|
180
|
+
const rationale = this.extractRationale(fullText);
|
|
181
|
+
// Extract context (what this decision is about)
|
|
182
|
+
const context = this.identifyContext(fullText);
|
|
183
|
+
// Extract related files from message metadata
|
|
184
|
+
const relatedFiles = this.extractRelatedFiles(message);
|
|
185
|
+
return {
|
|
186
|
+
id: nanoid(),
|
|
187
|
+
conversation_id: message.conversation_id,
|
|
188
|
+
message_id: message.id,
|
|
189
|
+
decision_text: decisionText,
|
|
190
|
+
rationale,
|
|
191
|
+
alternatives_considered: this.extractAlternatives(fullText),
|
|
192
|
+
rejected_reasons: this.extractRejectedReasons(fullText),
|
|
193
|
+
context,
|
|
194
|
+
related_files: relatedFiles,
|
|
195
|
+
related_commits: [], // Will be filled by GitIntegrator
|
|
196
|
+
timestamp: message.timestamp,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Extract structured decisions (e.g., "Decision: ..." format)
|
|
201
|
+
*/
|
|
202
|
+
extractStructuredDecisions(content, message, _thinking) {
|
|
203
|
+
const decisions = [];
|
|
204
|
+
// Look for structured decision blocks
|
|
205
|
+
const decisionBlockPattern = /(?:Decision|Chose|Selected|Using):\s*([^\n]+)(?:\s*Rationale:\s*([^\n]+))?(?:\s*Alternatives:\s*([^\n]+))?/gi;
|
|
206
|
+
const matches = Array.from(content.matchAll(decisionBlockPattern));
|
|
207
|
+
for (const match of matches) {
|
|
208
|
+
const decisionText = match[1]?.trim();
|
|
209
|
+
if (!decisionText) {
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
const rationale = match[2]?.trim();
|
|
213
|
+
const alternativesText = match[3]?.trim();
|
|
214
|
+
const alternatives = alternativesText
|
|
215
|
+
? alternativesText.split(/,|;/).map((a) => a.trim())
|
|
216
|
+
: [];
|
|
217
|
+
decisions.push({
|
|
218
|
+
id: nanoid(),
|
|
219
|
+
conversation_id: message.conversation_id,
|
|
220
|
+
message_id: message.id,
|
|
221
|
+
decision_text: decisionText,
|
|
222
|
+
rationale,
|
|
223
|
+
alternatives_considered: alternatives,
|
|
224
|
+
rejected_reasons: {},
|
|
225
|
+
context: this.identifyContext(content),
|
|
226
|
+
related_files: this.extractRelatedFiles(message),
|
|
227
|
+
related_commits: [],
|
|
228
|
+
timestamp: message.timestamp,
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
return decisions;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Extract decisions from user corrections
|
|
235
|
+
*/
|
|
236
|
+
extractCorrections(message) {
|
|
237
|
+
const content = message.content || "";
|
|
238
|
+
const decisions = [];
|
|
239
|
+
// Check each correction pattern and extract structured data
|
|
240
|
+
for (const pattern of this.CORRECTION_PATTERNS) {
|
|
241
|
+
const match = content.match(pattern);
|
|
242
|
+
if (match) {
|
|
243
|
+
// Extract the decision from the capture groups
|
|
244
|
+
const decisionText = match[1]?.trim() || match[0];
|
|
245
|
+
const alternative = match[2]?.trim();
|
|
246
|
+
// Must have technical context to be a valid correction
|
|
247
|
+
const context = this.identifyContext(content);
|
|
248
|
+
if (!context && !this.hasTechnicalKeywords(content)) {
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
decisions.push({
|
|
252
|
+
id: nanoid(),
|
|
253
|
+
conversation_id: message.conversation_id,
|
|
254
|
+
message_id: message.id,
|
|
255
|
+
decision_text: alternative
|
|
256
|
+
? `Use ${alternative} instead of ${decisionText}`
|
|
257
|
+
: decisionText,
|
|
258
|
+
rationale: "User correction - previous approach was incorrect",
|
|
259
|
+
alternatives_considered: alternative ? [decisionText] : [],
|
|
260
|
+
rejected_reasons: alternative
|
|
261
|
+
? { [decisionText]: "user rejected" }
|
|
262
|
+
: { "previous approach": "user rejected" },
|
|
263
|
+
context,
|
|
264
|
+
related_files: this.extractRelatedFiles(message),
|
|
265
|
+
related_commits: [],
|
|
266
|
+
timestamp: message.timestamp,
|
|
267
|
+
});
|
|
268
|
+
break; // Only extract one correction per message
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return decisions;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Check if content contains technical keywords suggesting a real decision
|
|
275
|
+
*/
|
|
276
|
+
hasTechnicalKeywords(content) {
|
|
277
|
+
const technicalKeywords = [
|
|
278
|
+
"function",
|
|
279
|
+
"class",
|
|
280
|
+
"method",
|
|
281
|
+
"variable",
|
|
282
|
+
"import",
|
|
283
|
+
"export",
|
|
284
|
+
"component",
|
|
285
|
+
"module",
|
|
286
|
+
"package",
|
|
287
|
+
"library",
|
|
288
|
+
"framework",
|
|
289
|
+
"database",
|
|
290
|
+
"query",
|
|
291
|
+
"api",
|
|
292
|
+
"endpoint",
|
|
293
|
+
"route",
|
|
294
|
+
"config",
|
|
295
|
+
"setting",
|
|
296
|
+
"type",
|
|
297
|
+
"interface",
|
|
298
|
+
"schema",
|
|
299
|
+
];
|
|
300
|
+
const lowerContent = content.toLowerCase();
|
|
301
|
+
return technicalKeywords.some((kw) => lowerContent.includes(kw));
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Extract decision text from matched pattern
|
|
305
|
+
*/
|
|
306
|
+
extractDecisionText(text) {
|
|
307
|
+
// Remove common prefixes
|
|
308
|
+
let cleaned = text.replace(/^(?:we|i|let's)\s+(?:decided|choose|chose|went with|picked|selected)\s+(?:to\s+)?/i, "");
|
|
309
|
+
// Remove trailing explanation
|
|
310
|
+
cleaned = cleaned.replace(/\s+(?:because|since|as|for|due to).+$/i, "");
|
|
311
|
+
return cleaned.trim();
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Extract rationale from decision text
|
|
315
|
+
*/
|
|
316
|
+
extractRationale(text) {
|
|
317
|
+
const rationaleMatch = text.match(/(?:because|since|as|for|due to)\s+(.+?)(?:\.|$)/i);
|
|
318
|
+
return rationaleMatch?.[1]?.trim();
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Extract alternative approaches that were considered
|
|
322
|
+
*/
|
|
323
|
+
extractAlternatives(text) {
|
|
324
|
+
const alternatives = [];
|
|
325
|
+
// Look for "instead of X" patterns
|
|
326
|
+
const insteadOfMatch = text.match(/(?:instead of|over|rather than)\s+(.+?)(?:\s+because|$)/i);
|
|
327
|
+
if (insteadOfMatch) {
|
|
328
|
+
alternatives.push(insteadOfMatch[1].trim());
|
|
329
|
+
}
|
|
330
|
+
// Look for "considered X, Y, and Z"
|
|
331
|
+
const consideredMatch = text.match(/considered\s+(.+?)(?:\s+but|$)/i);
|
|
332
|
+
if (consideredMatch) {
|
|
333
|
+
const items = consideredMatch[1].split(/,|and/).map((s) => s.trim());
|
|
334
|
+
alternatives.push(...items);
|
|
335
|
+
}
|
|
336
|
+
return alternatives;
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Extract reasons for rejecting alternatives
|
|
340
|
+
*/
|
|
341
|
+
extractRejectedReasons(text) {
|
|
342
|
+
const reasons = {};
|
|
343
|
+
// Look for "rejected X because Y" patterns
|
|
344
|
+
const rejectedPattern = /(?:rejected|dismissed|avoided|didn't use)\s+(.+?)\s+(?:because|due to|since)\s+(.+?)(?:\.|$)/gi;
|
|
345
|
+
const matches = Array.from(text.matchAll(rejectedPattern));
|
|
346
|
+
for (const match of matches) {
|
|
347
|
+
const alternative = match[1]?.trim();
|
|
348
|
+
const reason = match[2]?.trim();
|
|
349
|
+
if (alternative && reason) {
|
|
350
|
+
reasons[alternative] = reason;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
return reasons;
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Identify what context/area this decision relates to
|
|
357
|
+
*/
|
|
358
|
+
identifyContext(text) {
|
|
359
|
+
const lowerText = text.toLowerCase();
|
|
360
|
+
for (const keyword of this.CONTEXT_KEYWORDS) {
|
|
361
|
+
if (lowerText.includes(keyword)) {
|
|
362
|
+
return keyword;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
return undefined;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Extract related files from message metadata
|
|
369
|
+
*/
|
|
370
|
+
extractRelatedFiles(message) {
|
|
371
|
+
const files = [];
|
|
372
|
+
// Check message metadata for file references
|
|
373
|
+
if (message.metadata) {
|
|
374
|
+
// Look for file paths in various metadata fields
|
|
375
|
+
const metadataStr = JSON.stringify(message.metadata);
|
|
376
|
+
const filePathPattern = /(?:\/[\w-]+)+\.[\w]+/g;
|
|
377
|
+
const matches = metadataStr.match(filePathPattern);
|
|
378
|
+
if (matches) {
|
|
379
|
+
files.push(...matches);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
return [...new Set(files)]; // Deduplicate
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Deduplicate similar decisions
|
|
386
|
+
*/
|
|
387
|
+
deduplicateDecisions(decisions) {
|
|
388
|
+
const unique = [];
|
|
389
|
+
const seen = new Set();
|
|
390
|
+
for (const decision of decisions) {
|
|
391
|
+
// Create a signature including message_id to avoid collisions
|
|
392
|
+
// between different decisions with similar text in the same conversation
|
|
393
|
+
const textPrefix = decision.decision_text.toLowerCase().substring(0, 100);
|
|
394
|
+
const signature = `${decision.message_id}_${textPrefix}_${decision.timestamp}`;
|
|
395
|
+
if (!seen.has(signature)) {
|
|
396
|
+
seen.add(signature);
|
|
397
|
+
unique.push(decision);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
return unique;
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Score a decision's importance (for prioritization)
|
|
404
|
+
*/
|
|
405
|
+
scoreDecisionImportance(decision) {
|
|
406
|
+
let score = 0;
|
|
407
|
+
// Has rationale
|
|
408
|
+
if (decision.rationale) {
|
|
409
|
+
score += 2;
|
|
410
|
+
}
|
|
411
|
+
// Has alternatives considered
|
|
412
|
+
if (decision.alternatives_considered.length > 0) {
|
|
413
|
+
score += 3;
|
|
414
|
+
}
|
|
415
|
+
// Has rejected reasons
|
|
416
|
+
if (Object.keys(decision.rejected_reasons).length > 0) {
|
|
417
|
+
score += 3;
|
|
418
|
+
}
|
|
419
|
+
// Has related files
|
|
420
|
+
if (decision.related_files.length > 0) {
|
|
421
|
+
score += 2;
|
|
422
|
+
}
|
|
423
|
+
// Has context
|
|
424
|
+
if (decision.context) {
|
|
425
|
+
score += 1;
|
|
426
|
+
}
|
|
427
|
+
// Is a correction (high importance)
|
|
428
|
+
if (decision.rationale?.includes("User correction")) {
|
|
429
|
+
score += 5;
|
|
430
|
+
}
|
|
431
|
+
return score;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
//# sourceMappingURL=DecisionExtractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DecisionExtractor.js","sourceRoot":"","sources":["../../src/parsers/DecisionExtractor.ts"],"names":[],"mappings":"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"}
|