codehere 0.2.2 → 0.3.0-rc.2
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/README.md +88 -68
- package/dist/domain/entities/task.js +4 -4
- package/dist/error-handler.js +4 -9
- package/dist/index.js +253 -1219
- package/dist/infrastructure/config/product-context.js +7 -6
- package/dist/infrastructure/hooks/claude-sdk-hook.js +348 -72
- package/dist/infrastructure/observability/execution-tracer.js +11 -6
- package/dist/infrastructure/orchestration/agent-adapter.js +13 -0
- package/dist/infrastructure/orchestration/agent-installer.js +101 -0
- package/dist/infrastructure/orchestration/agents-config-seed.js +56 -0
- package/dist/infrastructure/orchestration/aider-adapter.js +319 -0
- package/dist/infrastructure/orchestration/artifacts-extractor.js +175 -0
- package/dist/infrastructure/orchestration/claude-code-adapter.js +352 -0
- package/dist/infrastructure/orchestration/codex-adapter.js +310 -0
- package/dist/infrastructure/orchestration/generic-cli-adapter.js +553 -0
- package/dist/infrastructure/orchestration/opencode-adapter.js +275 -0
- package/dist/infrastructure/orchestration/progress-aggregator.js +189 -0
- package/dist/infrastructure/orchestration/readiness.js +106 -0
- package/dist/infrastructure/orchestration/session-manager.js +272 -0
- package/dist/infrastructure/orchestration/session-persistence.js +109 -0
- package/dist/infrastructure/protocols/mcp-helpers.js +10 -30
- package/dist/infrastructure/protocols/mcp-server-impl.js +359 -21
- package/dist/infrastructure/protocols/ui-page.js +1827 -0
- package/dist/infrastructure/security/file-collection.js +115 -0
- package/dist/infrastructure/security/trust-scorer.js +301 -56
- package/dist/infrastructure/storage/task-repository.js +8 -7
- package/dist/monitoring.js +9 -38
- package/dist/presentation/cli/commands/help-command.js +96 -139
- package/dist/presentation/cli/commands/hook-command.js +17 -24
- package/dist/presentation/cli/commands/report-command.js +59 -72
- package/dist/presentation/cli/commands/setup-command.js +4 -4
- package/dist/presentation/cli/commands/status-command.js +321 -30
- package/dist/presentation/cli/commands/trust-command.js +84 -72
- package/dist/presentation/cli/error-display.js +17 -21
- package/dist/ui.js +11 -11
- package/package.json +24 -62
- package/dist/agents/base.js +0 -101
- package/dist/agents/orchestrator-model-driven.js +0 -141
- package/dist/agents/react-orchestrator-agent.js +0 -54
- package/dist/application/agents/execution-agent.js +0 -508
- package/dist/application/agents/multi-agent-orchestrator.js +0 -295
- package/dist/application/agents/planning-agent.js +0 -433
- package/dist/application/agents/validation-agent.js +0 -317
- package/dist/application/architectures/plan-and-act.js +0 -242
- package/dist/application/index.js +0 -12
- package/dist/application/services/agent-factory.js +0 -28
- package/dist/application/services/dependency-container.js +0 -596
- package/dist/application/services/git-context-service.js +0 -83
- package/dist/application/services/intelligent-router.js +0 -934
- package/dist/application/services/tool-executor-service.js +0 -94
- package/dist/application/use-cases/ask-question-use-case.js +0 -338
- package/dist/application/use-cases/edit-file-use-case.js +0 -830
- package/dist/application/use-cases/explain-file-use-case.js +0 -50
- package/dist/application/use-cases/index-codebase-use-case.js +0 -113
- package/dist/application/use-cases/planning-use-case.js +0 -276
- package/dist/application/use-cases/react-orchestration-use-case.js +0 -329
- package/dist/application/use-cases/reflexion-use-case.js +0 -30
- package/dist/application/workflows/deterministic-workflows.js +0 -189
- package/dist/ast-parser.js +0 -331
- package/dist/cache.js +0 -180
- package/dist/chat.js +0 -251
- package/dist/code-analysis.js +0 -327
- package/dist/context.js +0 -187
- package/dist/docs.js +0 -146
- package/dist/domain/entities/code-chunk.js +0 -6
- package/dist/domain/entities/decision.js +0 -9
- package/dist/domain/entities/edit.js +0 -6
- package/dist/domain/entities/knowledge-node.js +0 -9
- package/dist/domain/entities/knowledge-preservation.js +0 -10
- package/dist/domain/entities/memory.js +0 -6
- package/dist/domain/entities/pattern.js +0 -7
- package/dist/domain/entities/plan.js +0 -6
- package/dist/domain/entities/query.js +0 -6
- package/dist/domain/errors/embeddings-not-found-error.js +0 -13
- package/dist/domain/index.js +0 -19
- package/dist/domain/interfaces/ai-service.interface.js +0 -6
- package/dist/domain/interfaces/code-analyzer.interface.js +0 -6
- package/dist/domain/interfaces/decision-repository.interface.js +0 -9
- package/dist/domain/interfaces/embedding-repository.interface.js +0 -6
- package/dist/domain/interfaces/knowledge-graph-repository.interface.js +0 -9
- package/dist/domain/interfaces/knowledge-preservation-repository.interface.js +0 -8
- package/dist/domain/interfaces/memory-repository.interface.js +0 -6
- package/dist/domain/interfaces/pattern-repository.interface.js +0 -6
- package/dist/domain/interfaces/verification-service.interface.js +0 -6
- package/dist/domain/services/cross-team-pattern-sharing.js +0 -125
- package/dist/domain/services/decision-recorder.js +0 -223
- package/dist/domain/services/decision-retriever.js +0 -133
- package/dist/domain/services/environment-mode-manager.js +0 -22
- package/dist/domain/services/graded-memory-activation.js +0 -69
- package/dist/domain/services/knowledge-access.js +0 -132
- package/dist/domain/services/knowledge-extractor.js +0 -247
- package/dist/domain/services/knowledge-graph-builder.js +0 -268
- package/dist/domain/services/knowledge-graph-query.js +0 -187
- package/dist/domain/services/memory-retriever.js +0 -82
- package/dist/domain/services/memory-synthesizer.js +0 -91
- package/dist/domain/services/pattern-extractor.js +0 -442
- package/dist/domain/services/query-intent-classifier.js +0 -140
- package/dist/domain/services/react-loop.js +0 -186
- package/dist/domain/services/risk-tier-detector.js +0 -78
- package/dist/edit.js +0 -319
- package/dist/embed.js +0 -459
- package/dist/formatter.js +0 -168
- package/dist/git.js +0 -198
- package/dist/infrastructure/ai/cohere-ai-service.js +0 -607
- package/dist/infrastructure/ai/command-r-evaluation.js +0 -206
- package/dist/infrastructure/ai/model-config.js +0 -84
- package/dist/infrastructure/ai/provider-ai-service.js +0 -477
- package/dist/infrastructure/cache/embedding-cache.js +0 -175
- package/dist/infrastructure/cache/query-result-cache.js +0 -66
- package/dist/infrastructure/cache/response-cache.js +0 -48
- package/dist/infrastructure/cache/security-scan-cache.js +0 -47
- package/dist/infrastructure/chunking/ast-code-chunker.js +0 -19
- package/dist/infrastructure/chunking/code-aware-chunker.js +0 -397
- package/dist/infrastructure/context/context-compressor.js +0 -329
- package/dist/infrastructure/context/conversation-context.js +0 -128
- package/dist/infrastructure/context/session-manager.js +0 -94
- package/dist/infrastructure/cost/cost-tracker.js +0 -360
- package/dist/infrastructure/file-scanner/file-scanner.js +0 -106
- package/dist/infrastructure/governance/nist-ai-rmf.js +0 -292
- package/dist/infrastructure/governance/policy-as-code.js +0 -258
- package/dist/infrastructure/governance/prompt-to-code-lineage.js +0 -239
- package/dist/infrastructure/index.js +0 -7
- package/dist/infrastructure/observability/prompt-versioner.js +0 -145
- package/dist/infrastructure/protocols/a2a-metadata.js +0 -137
- package/dist/infrastructure/protocols/a2a-protocol.js +0 -314
- package/dist/infrastructure/protocols/mcp-oauth.js +0 -184
- package/dist/infrastructure/protocols/mcp-server.js +0 -333
- package/dist/infrastructure/protocols/streaming-handler.js +0 -103
- package/dist/infrastructure/providers/cohere-provider.js +0 -444
- package/dist/infrastructure/providers/fake-provider.js +0 -130
- package/dist/infrastructure/providers/local-llm-provider.js +0 -330
- package/dist/infrastructure/providers/model-config.types.js +0 -9
- package/dist/infrastructure/providers/model-provider.interface.js +0 -8
- package/dist/infrastructure/providers/openai-provider.js +0 -413
- package/dist/infrastructure/providers/openrouter-provider.js +0 -399
- package/dist/infrastructure/providers/operation-provider-resolver.js +0 -105
- package/dist/infrastructure/providers/provider-config-loader.js +0 -120
- package/dist/infrastructure/providers/provider-registry.js +0 -88
- package/dist/infrastructure/safety/pattern-detector.js +0 -133
- package/dist/infrastructure/security/ai-sast-scanner.js +0 -290
- package/dist/infrastructure/security/docker-sandbox.js +0 -178
- package/dist/infrastructure/security/enhanced-security-gate.js +0 -151
- package/dist/infrastructure/security/license-scanner.js +0 -167
- package/dist/infrastructure/security/provider-bias-detector.js +0 -164
- package/dist/infrastructure/security/sandbox-executor.js +0 -64
- package/dist/infrastructure/serialization/toon-serializer.js +0 -119
- package/dist/infrastructure/storage/memory-stream-service.js +0 -204
- package/dist/infrastructure/storage/plan-repository.js +0 -96
- package/dist/infrastructure/storage/sqlite-decision-repository.js +0 -232
- package/dist/infrastructure/storage/sqlite-embedding-repository.js +0 -311
- package/dist/infrastructure/storage/sqlite-knowledge-graph-repository.js +0 -417
- package/dist/infrastructure/storage/sqlite-knowledge-preservation-repository.js +0 -230
- package/dist/infrastructure/storage/sqlite-memory-repository.js +0 -229
- package/dist/infrastructure/storage/sqlite-pattern-repository.js +0 -249
- package/dist/infrastructure/storage/task-helpers.js +0 -197
- package/dist/infrastructure/telemetry/telemetry-service.js +0 -167
- package/dist/infrastructure/ux/appropriate-friction.js +0 -213
- package/dist/infrastructure/ux/bi-directional-learning.js +0 -337
- package/dist/infrastructure/ux/capability-boundaries.js +0 -42
- package/dist/infrastructure/ux/comprehensive-formatter.js +0 -117
- package/dist/infrastructure/ux/contextual-feature-discovery.js +0 -10
- package/dist/infrastructure/ux/expectation-management.js +0 -327
- package/dist/infrastructure/ux/feature-discovery.js +0 -14
- package/dist/infrastructure/ux/feedback-prompt.js +0 -45
- package/dist/infrastructure/ux/hitl-validation.js +0 -297
- package/dist/infrastructure/ux/progress-indicator.js +0 -116
- package/dist/infrastructure/ux/progressive-disclosure.js +0 -236
- package/dist/infrastructure/ux/review-checkpoint.js +0 -72
- package/dist/infrastructure/ux/staged-feature-intro.js +0 -24
- package/dist/infrastructure/ux/stream-markdown.js +0 -151
- package/dist/infrastructure/ux/syntax-highlighter.js +0 -91
- package/dist/infrastructure/ux/team-standards.js +0 -196
- package/dist/infrastructure/ux/transparency.js +0 -71
- package/dist/infrastructure/validation/agent-feedback.js +0 -55
- package/dist/infrastructure/validation/agent-validation-helper.js +0 -137
- package/dist/infrastructure/validation/review-handler.js +0 -40
- package/dist/infrastructure/validation/summary-aggregator.js +0 -70
- package/dist/infrastructure/validation/summary-extractor.js +0 -45
- package/dist/infrastructure/validation/trace-summary.js +0 -52
- package/dist/infrastructure/verification/verification-service.js +0 -47
- package/dist/infrastructure/xai/attention-visualizer.js +0 -172
- package/dist/infrastructure/xai/cot-visualizer.js +0 -283
- package/dist/infrastructure/xai/decision-tree-log.js +0 -212
- package/dist/infrastructure/xai/interactive-xai.js +0 -260
- package/dist/infrastructure/xai/uncertainty-quantifier.js +0 -198
- package/dist/intelligent-retrieval.js +0 -272
- package/dist/intent/classifier.js +0 -2
- package/dist/intent/context.js +0 -2
- package/dist/iterative-refinement.js +0 -189
- package/dist/learning.js +0 -232
- package/dist/log.js +0 -31
- package/dist/migrate.js +0 -133
- package/dist/parallel-processor.js +0 -534
- package/dist/planner.js +0 -198
- package/dist/policy.js +0 -26
- package/dist/presentation/cli/commands/ask-command.js +0 -314
- package/dist/presentation/cli/commands/cost-command.js +0 -191
- package/dist/presentation/cli/commands/decision-command.js +0 -207
- package/dist/presentation/cli/commands/docs-command.js +0 -25
- package/dist/presentation/cli/commands/fix-command.js +0 -53
- package/dist/presentation/cli/commands/knowledge-command.js +0 -129
- package/dist/presentation/cli/commands/learning-dashboard-command.js +0 -183
- package/dist/presentation/cli/commands/models-command.js +0 -194
- package/dist/presentation/cli/commands/orchestrate-command.js +0 -207
- package/dist/presentation/cli/commands/plan-command.js +0 -246
- package/dist/presentation/cli/commands/product-command.js +0 -199
- package/dist/presentation/cli/commands/react-command.js +0 -181
- package/dist/presentation/cli/commands/review-command.js +0 -154
- package/dist/presentation/cli/commands/run-command.js +0 -188
- package/dist/presentation/cli/commands/smart-command.js +0 -395
- package/dist/presentation/cli/commands/suggest-command.js +0 -138
- package/dist/presentation/cli/commands/trace-command.js +0 -129
- package/dist/presentation/cli/commands/undo-command.js +0 -150
- package/dist/query-optimizer.js +0 -205
- package/dist/refactor.js +0 -116
- package/dist/review.js +0 -206
- package/dist/search.js +0 -163
- package/dist/session.js +0 -704
- package/dist/task-verification.js +0 -336
- package/dist/testgen.js +0 -166
- package/dist/token-optimizer.js +0 -277
- package/dist/tools/bash.js +0 -213
- package/dist/tools/edit.js +0 -235
- package/dist/tools/executor.js +0 -153
- package/dist/tools/git-tool.js +0 -292
- package/dist/tools/parser.js +0 -158
- package/dist/tools/registry.js +0 -302
- package/dist/tools/search.js +0 -100
- package/dist/types.js +0 -2
- package/dist/utils/check-api-status.js +0 -100
- package/dist/utils/diff-parser.js +0 -162
- package/dist/verification/backup.js +0 -259
- package/dist/verification/compiler.js +0 -264
- package/dist/verification/index.js +0 -273
- package/dist/verification/test-runner.js +0 -379
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Domain Service: KnowledgeGraphQuery
|
|
3
|
-
* Query and analyze knowledge graph
|
|
4
|
-
*
|
|
5
|
-
* Clean Architecture: Domain Layer
|
|
6
|
-
*
|
|
7
|
-
* Responsibilities:
|
|
8
|
-
* - Find related patterns
|
|
9
|
-
* - Discover dependencies
|
|
10
|
-
* - Identify architectural relationships
|
|
11
|
-
* - Graph traversal and analysis
|
|
12
|
-
*/
|
|
13
|
-
/**
|
|
14
|
-
* Knowledge Graph Query Service
|
|
15
|
-
* Provides query and analysis capabilities for the knowledge graph
|
|
16
|
-
*/
|
|
17
|
-
export class KnowledgeGraphQuery {
|
|
18
|
-
graphRepository;
|
|
19
|
-
constructor(graphRepository) {
|
|
20
|
-
this.graphRepository = graphRepository;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Find patterns related to a given pattern
|
|
24
|
-
*/
|
|
25
|
-
async findRelatedPatterns(patternId, maxDepth = 2) {
|
|
26
|
-
// Get neighbors (directly connected patterns)
|
|
27
|
-
const neighbors = await this.graphRepository.getNeighbors(patternId, 'both');
|
|
28
|
-
// Filter to only pattern nodes
|
|
29
|
-
const patternNeighbors = neighbors.filter(n => n.type === 'pattern' || n.type === 'pattern-instance');
|
|
30
|
-
// Get edges connecting to these patterns
|
|
31
|
-
const edges = [];
|
|
32
|
-
for (const neighbor of patternNeighbors) {
|
|
33
|
-
if (neighbor.id) {
|
|
34
|
-
const fromEdges = await this.graphRepository.findEdgesFromNode(patternId);
|
|
35
|
-
const toEdges = await this.graphRepository.findEdgesToNode(patternId);
|
|
36
|
-
edges.push(...fromEdges, ...toEdges);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
// Get nodes within N hops for deeper relationships
|
|
40
|
-
const nodesWithinHops = await this.graphRepository.getNodesWithinHops(patternId, maxDepth);
|
|
41
|
-
const relatedPatterns = nodesWithinHops.filter(n => n.type === 'pattern' || n.type === 'pattern-instance');
|
|
42
|
-
return {
|
|
43
|
-
patterns: relatedPatterns,
|
|
44
|
-
relationships: edges,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Discover dependencies for a pattern or node
|
|
49
|
-
*/
|
|
50
|
-
async discoverDependencies(nodeId, maxDepth = 3) {
|
|
51
|
-
// Get outgoing edges (dependencies)
|
|
52
|
-
const outgoingEdges = await this.graphRepository.findEdgesFromNode(nodeId);
|
|
53
|
-
const dependencyIds = new Set();
|
|
54
|
-
for (const edge of outgoingEdges) {
|
|
55
|
-
if (edge.type === 'depends-on' || edge.type === 'uses' || edge.type === 'imports') {
|
|
56
|
-
dependencyIds.add(edge.toNodeId);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
// Get incoming edges (dependents)
|
|
60
|
-
const incomingEdges = await this.graphRepository.findEdgesToNode(nodeId);
|
|
61
|
-
const dependentIds = new Set();
|
|
62
|
-
for (const edge of incomingEdges) {
|
|
63
|
-
if (edge.type === 'depends-on' || edge.type === 'uses' || edge.type === 'imports') {
|
|
64
|
-
dependentIds.add(edge.fromNodeId);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
// Get nodes within maxDepth for transitive dependencies
|
|
68
|
-
const nodesWithinHops = await this.graphRepository.getNodesWithinHops(nodeId, maxDepth);
|
|
69
|
-
const allDependencyIds = new Set(dependencyIds);
|
|
70
|
-
const allDependentIds = new Set(dependentIds);
|
|
71
|
-
// Add transitive dependencies
|
|
72
|
-
for (const node of nodesWithinHops) {
|
|
73
|
-
if (node.id) {
|
|
74
|
-
const nodeEdges = await this.graphRepository.findEdgesFromNode(node.id);
|
|
75
|
-
for (const edge of nodeEdges) {
|
|
76
|
-
if (edge.type === 'depends-on' || edge.type === 'uses') {
|
|
77
|
-
allDependencyIds.add(edge.toNodeId);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
// Fetch dependency nodes
|
|
83
|
-
const dependencies = [];
|
|
84
|
-
for (const id of allDependencyIds) {
|
|
85
|
-
const node = await this.graphRepository.getNodeById(id);
|
|
86
|
-
if (node) {
|
|
87
|
-
dependencies.push(node);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
// Fetch dependent nodes
|
|
91
|
-
const dependents = [];
|
|
92
|
-
for (const id of allDependentIds) {
|
|
93
|
-
const node = await this.graphRepository.getNodeById(id);
|
|
94
|
-
if (node) {
|
|
95
|
-
dependents.push(node);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
return {
|
|
99
|
-
dependencies,
|
|
100
|
-
dependents,
|
|
101
|
-
depth: maxDepth,
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Identify architectural relationships
|
|
106
|
-
*/
|
|
107
|
-
async identifyArchitecturalRelationships(codebaseId) {
|
|
108
|
-
// Get all pattern nodes
|
|
109
|
-
const patterns = await this.graphRepository.findNodesByType(codebaseId, 'pattern');
|
|
110
|
-
// Group patterns by architectural layer (based on metadata or type)
|
|
111
|
-
const layers = [];
|
|
112
|
-
const architecturalPatterns = [];
|
|
113
|
-
const structuralPatterns = [];
|
|
114
|
-
const behavioralPatterns = [];
|
|
115
|
-
for (const pattern of patterns) {
|
|
116
|
-
if (pattern.type === 'pattern') {
|
|
117
|
-
// Categorize based on pattern metadata or content
|
|
118
|
-
if (pattern.content.toLowerCase().includes('architectural') ||
|
|
119
|
-
pattern.content.toLowerCase().includes('architecture') ||
|
|
120
|
-
pattern.content.toLowerCase().includes('layer')) {
|
|
121
|
-
architecturalPatterns.push(pattern);
|
|
122
|
-
}
|
|
123
|
-
else if (pattern.content.toLowerCase().includes('structure') ||
|
|
124
|
-
pattern.content.toLowerCase().includes('organization')) {
|
|
125
|
-
structuralPatterns.push(pattern);
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
behavioralPatterns.push(pattern);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
if (architecturalPatterns.length > 0)
|
|
133
|
-
layers.push(architecturalPatterns);
|
|
134
|
-
if (structuralPatterns.length > 0)
|
|
135
|
-
layers.push(structuralPatterns);
|
|
136
|
-
if (behavioralPatterns.length > 0)
|
|
137
|
-
layers.push(behavioralPatterns);
|
|
138
|
-
// Get relationships between architectural patterns
|
|
139
|
-
const relationships = [];
|
|
140
|
-
for (const pattern of architecturalPatterns) {
|
|
141
|
-
if (pattern.id) {
|
|
142
|
-
const edges = await this.graphRepository.findEdgesFromNode(pattern.id);
|
|
143
|
-
relationships.push(...edges.filter(e => e.type === 'depends-on' || e.type === 'uses' || e.type === 'implements'));
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
return { layers, relationships };
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Find shortest path between two nodes
|
|
150
|
-
*/
|
|
151
|
-
async findPath(fromNodeId, toNodeId) {
|
|
152
|
-
return await this.graphRepository.findShortestPath(fromNodeId, toNodeId);
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Get all nodes of a specific type
|
|
156
|
-
*/
|
|
157
|
-
async getNodesByType(codebaseId, type) {
|
|
158
|
-
return await this.graphRepository.findNodesByType(codebaseId, type);
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Search nodes by query
|
|
162
|
-
*/
|
|
163
|
-
async searchNodes(codebaseId, query) {
|
|
164
|
-
return await this.graphRepository.searchNodes(codebaseId, query);
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Get graph statistics
|
|
168
|
-
*/
|
|
169
|
-
async getGraphStatistics(codebaseId) {
|
|
170
|
-
const graph = await this.graphRepository.getGraphByCodebase(codebaseId);
|
|
171
|
-
if (!graph.metadata) {
|
|
172
|
-
return {
|
|
173
|
-
nodeCount: graph.nodes.length,
|
|
174
|
-
edgeCount: graph.edges.length,
|
|
175
|
-
nodeTypes: {},
|
|
176
|
-
relationshipTypes: {},
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
return {
|
|
180
|
-
nodeCount: graph.metadata.nodeCount,
|
|
181
|
-
edgeCount: graph.metadata.edgeCount,
|
|
182
|
-
nodeTypes: graph.metadata.nodeTypes,
|
|
183
|
-
relationshipTypes: graph.metadata.relationshipTypes,
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
//# sourceMappingURL=knowledge-graph-query.js.map
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Domain Service: MemoryRetriever
|
|
3
|
-
* Retrieves relevant memories using 3-factor scoring + Graded Activation
|
|
4
|
-
* (Recency × Importance × Relevance × Activation)
|
|
5
|
-
*
|
|
6
|
-
* Pure domain logic - no external dependencies
|
|
7
|
-
*/
|
|
8
|
-
import { GradedMemoryActivation } from './graded-memory-activation.js';
|
|
9
|
-
export class MemoryRetriever {
|
|
10
|
-
DECAY_CONSTANT = 86400000; // 24 hours in ms
|
|
11
|
-
gradedActivation;
|
|
12
|
-
constructor() {
|
|
13
|
-
this.gradedActivation = new GradedMemoryActivation();
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Retrieve relevant memories with 3-factor scoring + graded activation
|
|
17
|
-
* @param memories - All available memories
|
|
18
|
-
* @param queryEmbedding - Pre-computed query embedding vector
|
|
19
|
-
* @param limit - Maximum number of memories to return
|
|
20
|
-
* @param useGradedActivation - Whether to apply g(t) function (default: true)
|
|
21
|
-
*/
|
|
22
|
-
retrieve(memories, queryEmbedding, limit, useGradedActivation = true) {
|
|
23
|
-
if (memories.length === 0) {
|
|
24
|
-
return [];
|
|
25
|
-
}
|
|
26
|
-
// Score each memory with 3-factor scoring
|
|
27
|
-
const scored = memories.map((memory) => {
|
|
28
|
-
const recency = this.calculateRecency(memory.lastAccessed);
|
|
29
|
-
const importance = memory.importance / 10; // Normalize to 0-1
|
|
30
|
-
const relevance = this.cosineSimilarity(queryEmbedding, memory.embedding);
|
|
31
|
-
const baseScore = recency * importance * relevance;
|
|
32
|
-
return { memory, baseScore };
|
|
33
|
-
});
|
|
34
|
-
// Apply graded activation if enabled
|
|
35
|
-
let finalScored;
|
|
36
|
-
if (useGradedActivation && memories.length > 10) {
|
|
37
|
-
// Use graded activation for strategic learning
|
|
38
|
-
finalScored = this.gradedActivation.applyGradedActivation(scored);
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
finalScored = scored.map(({ memory, baseScore }) => ({
|
|
42
|
-
memory,
|
|
43
|
-
finalScore: baseScore,
|
|
44
|
-
}));
|
|
45
|
-
}
|
|
46
|
-
// Sort by final score and return top N
|
|
47
|
-
return finalScored
|
|
48
|
-
.sort((a, b) => b.finalScore - a.finalScore)
|
|
49
|
-
.slice(0, limit)
|
|
50
|
-
.map(({ memory }) => memory);
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Calculate recency score (exponential decay)
|
|
54
|
-
*/
|
|
55
|
-
calculateRecency(lastAccessed) {
|
|
56
|
-
const now = Date.now();
|
|
57
|
-
const timeSinceAccess = now - lastAccessed.getTime();
|
|
58
|
-
return Math.exp(-timeSinceAccess / this.DECAY_CONSTANT);
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Calculate cosine similarity
|
|
62
|
-
*/
|
|
63
|
-
cosineSimilarity(a, b) {
|
|
64
|
-
if (a.length !== b.length) {
|
|
65
|
-
return 0;
|
|
66
|
-
}
|
|
67
|
-
let dotProduct = 0;
|
|
68
|
-
let normA = 0;
|
|
69
|
-
let normB = 0;
|
|
70
|
-
for (let i = 0; i < a.length; i++) {
|
|
71
|
-
dotProduct += a[i] * b[i];
|
|
72
|
-
normA += a[i] * a[i];
|
|
73
|
-
normB += b[i] * b[i];
|
|
74
|
-
}
|
|
75
|
-
const denominator = Math.sqrt(normA) * Math.sqrt(normB);
|
|
76
|
-
if (denominator === 0) {
|
|
77
|
-
return 0;
|
|
78
|
-
}
|
|
79
|
-
return dotProduct / denominator;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
//# sourceMappingURL=memory-retriever.js.map
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Domain Service: Memory Synthesizer
|
|
3
|
-
* Synthesizes episodic memories into higher-level reflections
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Synthesize memories into hierarchical reflections
|
|
7
|
-
* Process:
|
|
8
|
-
* 1. Query recent memories to identify salient questions
|
|
9
|
-
* 2. Use questions to retrieve relevant memories
|
|
10
|
-
* 3. Extract insights and cite evidence
|
|
11
|
-
* 4. Create trees of reflections (non-leaf nodes = abstract thoughts)
|
|
12
|
-
*/
|
|
13
|
-
export class MemorySynthesizer {
|
|
14
|
-
patternExtractor;
|
|
15
|
-
constructor(patternExtractor) {
|
|
16
|
-
this.patternExtractor = patternExtractor;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Generate salient questions from recent memories
|
|
20
|
-
* These questions help identify what high-level insights can be extracted
|
|
21
|
-
*/
|
|
22
|
-
generateSalientQuestions(memories, maxQuestions = 5) {
|
|
23
|
-
// This will be implemented using AI in the application layer
|
|
24
|
-
// For now, return placeholder
|
|
25
|
-
return [];
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Extract patterns from memory reflections (if pattern extractor available)
|
|
29
|
-
*/
|
|
30
|
-
async extractPatternsFromReflections(memories, codebaseId, codebasePath) {
|
|
31
|
-
if (!this.patternExtractor) {
|
|
32
|
-
return; // Pattern extraction not available
|
|
33
|
-
}
|
|
34
|
-
try {
|
|
35
|
-
// Extract patterns from memory reflections
|
|
36
|
-
await this.patternExtractor.extractFromMemory(memories, codebaseId, codebasePath);
|
|
37
|
-
}
|
|
38
|
-
catch (error) {
|
|
39
|
-
// Don't fail memory synthesis if pattern extraction fails
|
|
40
|
-
console.warn('Pattern extraction from memories failed (non-critical):', error);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Synthesize memories into reflections
|
|
45
|
-
* Takes raw observations and creates higher-level insights
|
|
46
|
-
*/
|
|
47
|
-
synthesizeReflections(memories, questions) {
|
|
48
|
-
// This will be implemented using AI in the application layer
|
|
49
|
-
// Returns reflections with evidence citations
|
|
50
|
-
return [];
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Build trees of reflections
|
|
54
|
-
* Non-leaf nodes represent abstract thoughts that influence future decisions
|
|
55
|
-
*/
|
|
56
|
-
buildReflectionTree(reflections) {
|
|
57
|
-
// Organize reflections hierarchically
|
|
58
|
-
// Parent reflections are more abstract, children are more specific
|
|
59
|
-
const tree = [];
|
|
60
|
-
const byParent = new Map();
|
|
61
|
-
// Group by parent
|
|
62
|
-
for (const reflection of reflections) {
|
|
63
|
-
if (reflection.parentReflectionId) {
|
|
64
|
-
if (!byParent.has(reflection.parentReflectionId)) {
|
|
65
|
-
byParent.set(reflection.parentReflectionId, []);
|
|
66
|
-
}
|
|
67
|
-
byParent.get(reflection.parentReflectionId).push(reflection);
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
tree.push(reflection);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
// Attach children to parents
|
|
74
|
-
const attachChildren = (parent) => {
|
|
75
|
-
const children = byParent.get(parent.id) || [];
|
|
76
|
-
// In a full implementation, we'd attach children here
|
|
77
|
-
return parent;
|
|
78
|
-
};
|
|
79
|
-
return tree.map(attachChildren);
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Retrieve relevant memories for planning context
|
|
83
|
-
* Uses 3-factor scoring: Recency × Importance × Relevance
|
|
84
|
-
*/
|
|
85
|
-
retrieveForPlanning(query, allMemories, maxMemories = 100) {
|
|
86
|
-
// This uses the same 3-factor scoring as MemoryRetriever
|
|
87
|
-
// Will be implemented in application layer with actual retrieval
|
|
88
|
-
return allMemories.slice(0, maxMemories);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=memory-synthesizer.js.map
|