codehere 0.2.1 → 0.3.0-rc.1
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 +335 -63
- 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 +10 -49
- 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 +334 -43
- package/dist/presentation/cli/commands/trust-command.js +115 -99
- package/dist/presentation/cli/error-display.js +17 -21
- package/dist/ui.js +17 -12
- package/package.json +35 -67
- 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 -530
- 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 -652
- 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,239 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* INTERNAL ONLY — infrastructure helper, not a user-facing feature.
|
|
3
|
-
*
|
|
4
|
-
* Prompt-to-Code Lineage - Tracks the journey from user prompt to generated code artifact.
|
|
5
|
-
* Infrastructure-only, not yet exposed as user-facing feature. Planned for 0.5.x (Teams & Governance).
|
|
6
|
-
* Not guaranteed to be stable.
|
|
7
|
-
*
|
|
8
|
-
* Do not rely on this directly.
|
|
9
|
-
*
|
|
10
|
-
* @internal
|
|
11
|
-
*/
|
|
12
|
-
/**
|
|
13
|
-
* Prompt-to-Code Lineage Tracker
|
|
14
|
-
* Maintains complete audit trail from prompt to code artifact
|
|
15
|
-
*/
|
|
16
|
-
export class PromptToCodeLineage {
|
|
17
|
-
lineages = new Map();
|
|
18
|
-
/**
|
|
19
|
-
* Create new lineage trace for a user prompt
|
|
20
|
-
*/
|
|
21
|
-
createLineage(prompt, userContext) {
|
|
22
|
-
const lineageId = `lineage-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
23
|
-
const rootNodeId = `node-${Date.now()}-root`;
|
|
24
|
-
const rootNode = {
|
|
25
|
-
nodeId: rootNodeId,
|
|
26
|
-
type: 'prompt',
|
|
27
|
-
timestamp: Date.now(),
|
|
28
|
-
description: `User prompt: ${prompt.substring(0, 100)}${prompt.length > 100 ? '...' : ''}`,
|
|
29
|
-
input: { prompt },
|
|
30
|
-
metadata: {
|
|
31
|
-
sessionId: userContext?.sessionId,
|
|
32
|
-
workspace: userContext?.workspace,
|
|
33
|
-
},
|
|
34
|
-
childNodeIds: [],
|
|
35
|
-
};
|
|
36
|
-
const lineage = {
|
|
37
|
-
lineageId,
|
|
38
|
-
prompt,
|
|
39
|
-
userContext: userContext ? {
|
|
40
|
-
...userContext,
|
|
41
|
-
timestamp: Date.now(),
|
|
42
|
-
} : undefined,
|
|
43
|
-
nodes: new Map([[rootNodeId, rootNode]]),
|
|
44
|
-
rootNodeId,
|
|
45
|
-
humanInterventions: [],
|
|
46
|
-
createdAt: Date.now(),
|
|
47
|
-
};
|
|
48
|
-
this.lineages.set(lineageId, lineage);
|
|
49
|
-
return lineageId;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Add node to lineage (plan, tool call, code generation, etc.)
|
|
53
|
-
*/
|
|
54
|
-
addNode(lineageId, node, parentNodeId) {
|
|
55
|
-
const lineage = this.lineages.get(lineageId);
|
|
56
|
-
if (!lineage) {
|
|
57
|
-
throw new Error(`Lineage ${lineageId} not found`);
|
|
58
|
-
}
|
|
59
|
-
const nodeId = `node-${Date.now()}-${node.type}`;
|
|
60
|
-
const fullNode = {
|
|
61
|
-
...node,
|
|
62
|
-
nodeId,
|
|
63
|
-
childNodeIds: [],
|
|
64
|
-
parentNodeId,
|
|
65
|
-
};
|
|
66
|
-
lineage.nodes.set(nodeId, fullNode);
|
|
67
|
-
// Link to parent
|
|
68
|
-
const parentNode = lineage.nodes.get(parentNodeId);
|
|
69
|
-
if (parentNode) {
|
|
70
|
-
parentNode.childNodeIds.push(nodeId);
|
|
71
|
-
}
|
|
72
|
-
return nodeId;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Track code generation artifact
|
|
76
|
-
*/
|
|
77
|
-
trackCodeGeneration(lineageId, parentNodeId, artifact, metadata) {
|
|
78
|
-
return this.addNode(lineageId, {
|
|
79
|
-
type: 'code_generation',
|
|
80
|
-
timestamp: Date.now(),
|
|
81
|
-
description: `Generated code artifact: ${artifact.filepath}`,
|
|
82
|
-
input: {
|
|
83
|
-
filepath: artifact.filepath,
|
|
84
|
-
originalContent: artifact.originalContent,
|
|
85
|
-
},
|
|
86
|
-
output: {
|
|
87
|
-
filepath: artifact.filepath,
|
|
88
|
-
content: artifact.content,
|
|
89
|
-
diff: artifact.diff,
|
|
90
|
-
},
|
|
91
|
-
metadata: metadata || {},
|
|
92
|
-
}, parentNodeId);
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Track verification result
|
|
96
|
-
*/
|
|
97
|
-
trackVerification(lineageId, parentNodeId, verification) {
|
|
98
|
-
return this.addNode(lineageId, {
|
|
99
|
-
type: 'verification',
|
|
100
|
-
timestamp: Date.now(),
|
|
101
|
-
description: verification.passed ? 'Verification passed' : `Verification failed: ${verification.reason}`,
|
|
102
|
-
input: { parentNodeId },
|
|
103
|
-
output: verification,
|
|
104
|
-
metadata: {},
|
|
105
|
-
}, parentNodeId);
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Track human intervention (approval, rejection, modification)
|
|
109
|
-
*/
|
|
110
|
-
trackHumanIntervention(lineageId, nodeId, intervention) {
|
|
111
|
-
const lineage = this.lineages.get(lineageId);
|
|
112
|
-
if (!lineage) {
|
|
113
|
-
throw new Error(`Lineage ${lineageId} not found`);
|
|
114
|
-
}
|
|
115
|
-
lineage.humanInterventions.push({
|
|
116
|
-
timestamp: Date.now(),
|
|
117
|
-
nodeId,
|
|
118
|
-
...intervention,
|
|
119
|
-
});
|
|
120
|
-
// Update node metadata with intervention
|
|
121
|
-
const node = lineage.nodes.get(nodeId);
|
|
122
|
-
if (node) {
|
|
123
|
-
node.metadata.humanIntervention = intervention;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Mark final artifact (code that was actually applied/committed)
|
|
128
|
-
*/
|
|
129
|
-
setFinalArtifact(lineageId, artifactNodeId) {
|
|
130
|
-
const lineage = this.lineages.get(lineageId);
|
|
131
|
-
if (!lineage) {
|
|
132
|
-
throw new Error(`Lineage ${lineageId} not found`);
|
|
133
|
-
}
|
|
134
|
-
lineage.finalArtifactId = artifactNodeId;
|
|
135
|
-
lineage.completedAt = Date.now();
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Get complete lineage trace
|
|
139
|
-
*/
|
|
140
|
-
getLineage(lineageId) {
|
|
141
|
-
return this.lineages.get(lineageId) || null;
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Get lineage path (trace from root to final artifact)
|
|
145
|
-
*/
|
|
146
|
-
getLineagePath(lineageId) {
|
|
147
|
-
const lineage = this.lineages.get(lineageId);
|
|
148
|
-
if (!lineage) {
|
|
149
|
-
return [];
|
|
150
|
-
}
|
|
151
|
-
const path = [];
|
|
152
|
-
let currentNodeId = lineage.finalArtifactId || lineage.rootNodeId;
|
|
153
|
-
// Traverse from final artifact (or root) back to root
|
|
154
|
-
const visited = new Set();
|
|
155
|
-
while (currentNodeId && !visited.has(currentNodeId)) {
|
|
156
|
-
visited.add(currentNodeId);
|
|
157
|
-
const node = lineage.nodes.get(currentNodeId);
|
|
158
|
-
if (node) {
|
|
159
|
-
path.unshift(node); // Add to beginning
|
|
160
|
-
currentNodeId = node.parentNodeId;
|
|
161
|
-
}
|
|
162
|
-
else {
|
|
163
|
-
break;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return path;
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Get all human interventions for audit
|
|
170
|
-
*/
|
|
171
|
-
getHumanInterventions(lineageId) {
|
|
172
|
-
const lineage = this.lineages.get(lineageId);
|
|
173
|
-
return lineage?.humanInterventions || [];
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Get lineage tree (complete decision tree from prompt to artifact)
|
|
177
|
-
*/
|
|
178
|
-
getLineageTree(lineageId) {
|
|
179
|
-
const lineage = this.lineages.get(lineageId);
|
|
180
|
-
if (!lineage) {
|
|
181
|
-
return null;
|
|
182
|
-
}
|
|
183
|
-
return this.buildTree(lineage.rootNodeId, lineage.nodes);
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Search lineages by criteria
|
|
187
|
-
*/
|
|
188
|
-
searchLineages(criteria) {
|
|
189
|
-
const results = [];
|
|
190
|
-
for (const lineage of this.lineages.values()) {
|
|
191
|
-
// Filter by user context
|
|
192
|
-
if (criteria.userId && lineage.userContext?.userId !== criteria.userId) {
|
|
193
|
-
continue;
|
|
194
|
-
}
|
|
195
|
-
if (criteria.sessionId && lineage.userContext?.sessionId !== criteria.sessionId) {
|
|
196
|
-
continue;
|
|
197
|
-
}
|
|
198
|
-
// Filter by time range
|
|
199
|
-
if (criteria.startTime && lineage.createdAt < criteria.startTime) {
|
|
200
|
-
continue;
|
|
201
|
-
}
|
|
202
|
-
if (criteria.endTime && lineage.createdAt > criteria.endTime) {
|
|
203
|
-
continue;
|
|
204
|
-
}
|
|
205
|
-
// Filter by intent
|
|
206
|
-
if (criteria.intentType && lineage.intent?.type !== criteria.intentType) {
|
|
207
|
-
continue;
|
|
208
|
-
}
|
|
209
|
-
// Filter by filepath (check all code generation nodes)
|
|
210
|
-
if (criteria.filepath) {
|
|
211
|
-
let found = false;
|
|
212
|
-
for (const node of lineage.nodes.values()) {
|
|
213
|
-
if (node.type === 'code_generation' && node.output?.filepath === criteria.filepath) {
|
|
214
|
-
found = true;
|
|
215
|
-
break;
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
if (!found)
|
|
219
|
-
continue;
|
|
220
|
-
}
|
|
221
|
-
results.push(lineage);
|
|
222
|
-
}
|
|
223
|
-
return results.sort((a, b) => b.createdAt - a.createdAt);
|
|
224
|
-
}
|
|
225
|
-
// Private helpers
|
|
226
|
-
buildTree(nodeId, nodes) {
|
|
227
|
-
const node = nodes.get(nodeId);
|
|
228
|
-
if (!node)
|
|
229
|
-
return null;
|
|
230
|
-
return {
|
|
231
|
-
...node,
|
|
232
|
-
childNodeIds: node.childNodeIds.map(childId => {
|
|
233
|
-
const childNode = nodes.get(childId);
|
|
234
|
-
return childNode ? childNode.nodeId : '';
|
|
235
|
-
}).filter(Boolean),
|
|
236
|
-
};
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
//# sourceMappingURL=prompt-to-code-lineage.js.map
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Infrastructure: Prompt Versioner
|
|
3
|
-
* Tracks prompt versions for reproducibility and A/B testing
|
|
4
|
-
*
|
|
5
|
-
* Clean Architecture: Infrastructure Layer
|
|
6
|
-
* Strategic: Enable prompt versioning and comparison
|
|
7
|
-
*/
|
|
8
|
-
import { createHash } from 'crypto';
|
|
9
|
-
import { writeFileSync, readFileSync, existsSync, mkdirSync } from 'fs';
|
|
10
|
-
import { join, dirname } from 'path';
|
|
11
|
-
import { fileURLToPath } from 'url';
|
|
12
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
13
|
-
const __dirname = dirname(__filename);
|
|
14
|
-
/**
|
|
15
|
-
* Prompt Versioner
|
|
16
|
-
* Tracks prompt versions for reproducibility
|
|
17
|
-
*/
|
|
18
|
-
export class PromptVersioner {
|
|
19
|
-
versionsDir;
|
|
20
|
-
versionIndex;
|
|
21
|
-
constructor() {
|
|
22
|
-
const agentDir = join(__dirname, '../../..');
|
|
23
|
-
this.versionsDir = join(agentDir, 'data', 'prompt-versions');
|
|
24
|
-
this.versionIndex = new Map();
|
|
25
|
-
if (!existsSync(this.versionsDir)) {
|
|
26
|
-
mkdirSync(this.versionsDir, { recursive: true });
|
|
27
|
-
}
|
|
28
|
-
// Load existing versions
|
|
29
|
-
this.loadVersions();
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Register a prompt version
|
|
33
|
-
*/
|
|
34
|
-
registerVersion(prompt, metadata) {
|
|
35
|
-
const promptHash = this.hashPrompt(prompt);
|
|
36
|
-
// Check if version already exists
|
|
37
|
-
if (this.versionIndex.has(promptHash)) {
|
|
38
|
-
const existing = this.versionIndex.get(promptHash);
|
|
39
|
-
return existing.versionId;
|
|
40
|
-
}
|
|
41
|
-
// Create new version
|
|
42
|
-
const versionId = `v${Date.now()}-${promptHash.substring(0, 8)}`;
|
|
43
|
-
const version = {
|
|
44
|
-
versionId,
|
|
45
|
-
promptHash,
|
|
46
|
-
prompt,
|
|
47
|
-
createdAt: Date.now(),
|
|
48
|
-
usedBy: [],
|
|
49
|
-
metadata,
|
|
50
|
-
};
|
|
51
|
-
// Save to disk
|
|
52
|
-
const versionPath = join(this.versionsDir, `${versionId}.json`);
|
|
53
|
-
writeFileSync(versionPath, JSON.stringify(version, null, 2), 'utf-8');
|
|
54
|
-
// Update index
|
|
55
|
-
this.versionIndex.set(promptHash, version);
|
|
56
|
-
// Save index
|
|
57
|
-
this.saveIndex();
|
|
58
|
-
return versionId;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Link a run to a prompt version
|
|
62
|
-
*/
|
|
63
|
-
linkRunToVersion(prompt, runId) {
|
|
64
|
-
const promptHash = this.hashPrompt(prompt);
|
|
65
|
-
const version = this.versionIndex.get(promptHash);
|
|
66
|
-
if (version) {
|
|
67
|
-
if (!version.usedBy.includes(runId)) {
|
|
68
|
-
version.usedBy.push(runId);
|
|
69
|
-
// Update version file
|
|
70
|
-
const versionPath = join(this.versionsDir, `${version.versionId}.json`);
|
|
71
|
-
writeFileSync(versionPath, JSON.stringify(version, null, 2), 'utf-8');
|
|
72
|
-
}
|
|
73
|
-
return version.versionId;
|
|
74
|
-
}
|
|
75
|
-
// Version doesn't exist yet, register it
|
|
76
|
-
return this.registerVersion(prompt);
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Get prompt version by ID
|
|
80
|
-
*/
|
|
81
|
-
getVersion(versionId) {
|
|
82
|
-
const versionPath = join(this.versionsDir, `${versionId}.json`);
|
|
83
|
-
if (!existsSync(versionPath)) {
|
|
84
|
-
return null;
|
|
85
|
-
}
|
|
86
|
-
try {
|
|
87
|
-
const content = readFileSync(versionPath, 'utf-8');
|
|
88
|
-
return JSON.parse(content);
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
console.error(`Failed to load prompt version ${versionId}:`, error);
|
|
92
|
-
return null;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Get prompt version by hash
|
|
97
|
-
*/
|
|
98
|
-
getVersionByHash(promptHash) {
|
|
99
|
-
return this.versionIndex.get(promptHash) || null;
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Get all versions for a prompt (by hash)
|
|
103
|
-
*/
|
|
104
|
-
getVersionsForPrompt(prompt) {
|
|
105
|
-
const promptHash = this.hashPrompt(prompt);
|
|
106
|
-
const version = this.versionIndex.get(promptHash);
|
|
107
|
-
return version ? [version] : [];
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* List all prompt versions
|
|
111
|
-
*/
|
|
112
|
-
listAllVersions() {
|
|
113
|
-
return Array.from(this.versionIndex.values());
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Hash a prompt for versioning
|
|
117
|
-
*/
|
|
118
|
-
hashPrompt(prompt) {
|
|
119
|
-
return createHash('sha256').update(prompt).digest('hex');
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Load all versions from disk
|
|
123
|
-
*/
|
|
124
|
-
loadVersions() {
|
|
125
|
-
// In a real implementation, we'd scan the versions directory
|
|
126
|
-
// For now, we load on-demand
|
|
127
|
-
// This could be optimized with an index file
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Save version index
|
|
131
|
-
*/
|
|
132
|
-
saveIndex() {
|
|
133
|
-
const indexPath = join(this.versionsDir, 'index.json');
|
|
134
|
-
const indexData = Array.from(this.versionIndex.entries()).map(([hash, version]) => ({
|
|
135
|
-
hash,
|
|
136
|
-
versionId: version.versionId,
|
|
137
|
-
createdAt: version.createdAt,
|
|
138
|
-
metadata: version.metadata,
|
|
139
|
-
}));
|
|
140
|
-
writeFileSync(indexPath, JSON.stringify(indexData, null, 2), 'utf-8');
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
// Singleton instance
|
|
144
|
-
export const promptVersioner = new PromptVersioner();
|
|
145
|
-
//# sourceMappingURL=prompt-versioner.js.map
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Infrastructure: A2A Agentic AI Metadata
|
|
3
|
-
* Discoverable JSON metadata that outlines agent capabilities
|
|
4
|
-
*
|
|
5
|
-
* Based on research: A2A requires Agentic AI Metadata for capability discovery
|
|
6
|
-
* Accessible via URL for agent discovery and integration
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* Codehere A2A Metadata
|
|
10
|
-
* Exposes Codehere capabilities for agent discovery
|
|
11
|
-
*/
|
|
12
|
-
export class CodehereA2AMetadata {
|
|
13
|
-
agent_id = 'codehere';
|
|
14
|
-
name = 'Codehere';
|
|
15
|
-
description = 'AI coding assistant with persistent episodic memory, AST-based understanding, and multi-agent orchestration. Specializes in codebase understanding, code editing, and long-term context retention.';
|
|
16
|
-
version = '0.3.0';
|
|
17
|
-
capabilities = {
|
|
18
|
-
tasks: [
|
|
19
|
-
{
|
|
20
|
-
id: 'memory_query',
|
|
21
|
-
name: 'Query Memory',
|
|
22
|
-
description: 'Query persistent episodic memory for past experiences and learned patterns',
|
|
23
|
-
input_schema: {
|
|
24
|
-
type: 'object',
|
|
25
|
-
properties: {
|
|
26
|
-
query: { type: 'string', description: 'Memory query' },
|
|
27
|
-
limit: { type: 'number', description: 'Maximum results', default: 10 },
|
|
28
|
-
},
|
|
29
|
-
required: ['query'],
|
|
30
|
-
},
|
|
31
|
-
estimated_duration: '1-2s',
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
id: 'memory_store',
|
|
35
|
-
name: 'Store Memory',
|
|
36
|
-
description: 'Store observation, plan, or reflection in persistent memory',
|
|
37
|
-
input_schema: {
|
|
38
|
-
type: 'object',
|
|
39
|
-
properties: {
|
|
40
|
-
description: { type: 'string', description: 'Memory description' },
|
|
41
|
-
type: {
|
|
42
|
-
type: 'string',
|
|
43
|
-
enum: ['observation', 'plan', 'reflection', 'pattern'],
|
|
44
|
-
description: 'Memory type',
|
|
45
|
-
},
|
|
46
|
-
metadata: { type: 'object', description: 'Additional metadata' },
|
|
47
|
-
},
|
|
48
|
-
required: ['description', 'type'],
|
|
49
|
-
},
|
|
50
|
-
estimated_duration: '< 1s',
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
id: 'code_search',
|
|
54
|
-
name: 'Search Codebase',
|
|
55
|
-
description: 'Semantic search across codebase using AST-based understanding',
|
|
56
|
-
input_schema: {
|
|
57
|
-
type: 'object',
|
|
58
|
-
properties: {
|
|
59
|
-
query: { type: 'string', description: 'Search query' },
|
|
60
|
-
max_results: { type: 'number', description: 'Maximum results', default: 10 },
|
|
61
|
-
},
|
|
62
|
-
required: ['query'],
|
|
63
|
-
},
|
|
64
|
-
estimated_duration: '2-5s',
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
id: 'code_explain',
|
|
68
|
-
name: 'Explain Code',
|
|
69
|
-
description: 'Get detailed explanation of a code file',
|
|
70
|
-
input_schema: {
|
|
71
|
-
type: 'object',
|
|
72
|
-
properties: {
|
|
73
|
-
filepath: { type: 'string', description: 'Path to file' },
|
|
74
|
-
},
|
|
75
|
-
required: ['filepath'],
|
|
76
|
-
},
|
|
77
|
-
estimated_duration: '5-10s',
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
id: 'code_edit',
|
|
81
|
-
name: 'Edit Code',
|
|
82
|
-
description: 'Edit code file with AI-generated changes (with security gates)',
|
|
83
|
-
input_schema: {
|
|
84
|
-
type: 'object',
|
|
85
|
-
properties: {
|
|
86
|
-
filepath: { type: 'string', description: 'Path to file' },
|
|
87
|
-
instruction: { type: 'string', description: 'Edit instruction' },
|
|
88
|
-
},
|
|
89
|
-
required: ['filepath', 'instruction'],
|
|
90
|
-
},
|
|
91
|
-
estimated_duration: '10-30s',
|
|
92
|
-
async: false,
|
|
93
|
-
},
|
|
94
|
-
],
|
|
95
|
-
communication: {
|
|
96
|
-
synchronous: true,
|
|
97
|
-
asynchronous: true,
|
|
98
|
-
streaming: true,
|
|
99
|
-
},
|
|
100
|
-
};
|
|
101
|
-
endpoints = {
|
|
102
|
-
base_url: 'https://codehere.io/a2a', // TODO: Configure actual endpoint
|
|
103
|
-
bindings: ['json-rpc', 'http-rest'], // Support JSON-RPC and HTTP/REST
|
|
104
|
-
webhook_url: 'https://codehere.io/a2a/webhook', // For async notifications
|
|
105
|
-
};
|
|
106
|
-
security = {
|
|
107
|
-
auth_methods: ['oauth2', 'm2m_token'],
|
|
108
|
-
oauth_scopes: [
|
|
109
|
-
'codehere:memory:read',
|
|
110
|
-
'codehere:memory:write',
|
|
111
|
-
'codehere:code:read',
|
|
112
|
-
'codehere:code:write',
|
|
113
|
-
],
|
|
114
|
-
};
|
|
115
|
-
metadata_url;
|
|
116
|
-
constructor(baseUrl) {
|
|
117
|
-
this.endpoints.base_url = baseUrl || this.endpoints.base_url;
|
|
118
|
-
this.endpoints.webhook_url = `${this.endpoints.base_url}/webhook`;
|
|
119
|
-
this.metadata_url = `${this.endpoints.base_url}/.well-known/agentic-ai-metadata`;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Get metadata as JSON
|
|
123
|
-
*/
|
|
124
|
-
toJSON() {
|
|
125
|
-
return {
|
|
126
|
-
agent_id: this.agent_id,
|
|
127
|
-
name: this.name,
|
|
128
|
-
description: this.description,
|
|
129
|
-
version: this.version,
|
|
130
|
-
capabilities: this.capabilities,
|
|
131
|
-
endpoints: this.endpoints,
|
|
132
|
-
security: this.security,
|
|
133
|
-
metadata_url: this.metadata_url,
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
//# sourceMappingURL=a2a-metadata.js.map
|