attocode 0.1.3 → 0.1.5
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/CHANGELOG.md +38 -1
- package/README.md +56 -0
- package/dist/src/agent.d.ts +5 -0
- package/dist/src/agent.d.ts.map +1 -1
- package/dist/src/agent.js +244 -21
- package/dist/src/agent.js.map +1 -1
- package/dist/src/analysis/feedback-loop.d.ts +115 -0
- package/dist/src/analysis/feedback-loop.d.ts.map +1 -0
- package/dist/src/analysis/feedback-loop.js +226 -0
- package/dist/src/analysis/feedback-loop.js.map +1 -0
- package/dist/src/analysis/index.d.ts +9 -0
- package/dist/src/analysis/index.d.ts.map +1 -0
- package/dist/src/analysis/index.js +9 -0
- package/dist/src/analysis/index.js.map +1 -0
- package/dist/src/analysis/prompt-templates.d.ts +36 -0
- package/dist/src/analysis/prompt-templates.d.ts.map +1 -0
- package/dist/src/analysis/prompt-templates.js +198 -0
- package/dist/src/analysis/prompt-templates.js.map +1 -0
- package/dist/src/analysis/trace-summary.d.ts +56 -0
- package/dist/src/analysis/trace-summary.d.ts.map +1 -0
- package/dist/src/analysis/trace-summary.js +261 -0
- package/dist/src/analysis/trace-summary.js.map +1 -0
- package/dist/src/commands/handler.d.ts.map +1 -1
- package/dist/src/commands/handler.js +194 -2
- package/dist/src/commands/handler.js.map +1 -1
- package/dist/src/config.d.ts +3 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js.map +1 -1
- package/dist/src/defaults.d.ts +11 -2
- package/dist/src/defaults.d.ts.map +1 -1
- package/dist/src/defaults.js +25 -2
- package/dist/src/defaults.js.map +1 -1
- package/dist/src/errors/index.d.ts +233 -0
- package/dist/src/errors/index.d.ts.map +1 -0
- package/dist/src/errors/index.js +427 -0
- package/dist/src/errors/index.js.map +1 -0
- package/dist/src/integrations/auto-compaction.d.ts +33 -0
- package/dist/src/integrations/auto-compaction.d.ts.map +1 -1
- package/dist/src/integrations/auto-compaction.js +47 -3
- package/dist/src/integrations/auto-compaction.js.map +1 -1
- package/dist/src/integrations/dead-letter-queue.d.ts +208 -0
- package/dist/src/integrations/dead-letter-queue.d.ts.map +1 -0
- package/dist/src/integrations/dead-letter-queue.js +458 -0
- package/dist/src/integrations/dead-letter-queue.js.map +1 -0
- package/dist/src/integrations/economics.d.ts +94 -2
- package/dist/src/integrations/economics.d.ts.map +1 -1
- package/dist/src/integrations/economics.js +263 -10
- package/dist/src/integrations/economics.js.map +1 -1
- package/dist/src/integrations/health-check.d.ts +218 -0
- package/dist/src/integrations/health-check.d.ts.map +1 -0
- package/dist/src/integrations/health-check.js +400 -0
- package/dist/src/integrations/health-check.js.map +1 -0
- package/dist/src/integrations/index.d.ts +5 -0
- package/dist/src/integrations/index.d.ts.map +1 -1
- package/dist/src/integrations/index.js +9 -0
- package/dist/src/integrations/index.js.map +1 -1
- package/dist/src/integrations/mcp-client.d.ts +9 -0
- package/dist/src/integrations/mcp-client.d.ts.map +1 -1
- package/dist/src/integrations/mcp-client.js +49 -7
- package/dist/src/integrations/mcp-client.js.map +1 -1
- package/dist/src/integrations/openrouter-pricing.d.ts +28 -3
- package/dist/src/integrations/openrouter-pricing.d.ts.map +1 -1
- package/dist/src/integrations/openrouter-pricing.js +57 -16
- package/dist/src/integrations/openrouter-pricing.js.map +1 -1
- package/dist/src/integrations/retry.d.ts +131 -0
- package/dist/src/integrations/retry.d.ts.map +1 -0
- package/dist/src/integrations/retry.js +233 -0
- package/dist/src/integrations/retry.js.map +1 -0
- package/dist/src/integrations/sqlite-store.d.ts +42 -0
- package/dist/src/integrations/sqlite-store.d.ts.map +1 -1
- package/dist/src/integrations/sqlite-store.js +111 -0
- package/dist/src/integrations/sqlite-store.js.map +1 -1
- package/dist/src/main.js +88 -7
- package/dist/src/main.js.map +1 -1
- package/dist/src/modes/repl.d.ts.map +1 -1
- package/dist/src/modes/repl.js +37 -1
- package/dist/src/modes/repl.js.map +1 -1
- package/dist/src/modes/tui.d.ts.map +1 -1
- package/dist/src/modes/tui.js +46 -5
- package/dist/src/modes/tui.js.map +1 -1
- package/dist/src/modes.d.ts.map +1 -1
- package/dist/src/modes.js +10 -3
- package/dist/src/modes.js.map +1 -1
- package/dist/src/persistence/schema.d.ts +4 -0
- package/dist/src/persistence/schema.d.ts.map +1 -1
- package/dist/src/persistence/schema.js +49 -0
- package/dist/src/persistence/schema.js.map +1 -1
- package/dist/src/providers/adapters/anthropic.d.ts +24 -2
- package/dist/src/providers/adapters/anthropic.d.ts.map +1 -1
- package/dist/src/providers/adapters/anthropic.js +184 -0
- package/dist/src/providers/adapters/anthropic.js.map +1 -1
- package/dist/src/tools/bash.d.ts.map +1 -1
- package/dist/src/tools/bash.js +7 -4
- package/dist/src/tools/bash.js.map +1 -1
- package/dist/src/tools/file.d.ts.map +1 -1
- package/dist/src/tools/file.js +31 -10
- package/dist/src/tools/file.js.map +1 -1
- package/dist/src/tools/permission.d.ts +12 -0
- package/dist/src/tools/permission.d.ts.map +1 -1
- package/dist/src/tools/permission.js +136 -0
- package/dist/src/tools/permission.js.map +1 -1
- package/dist/src/tools/registry.d.ts +23 -1
- package/dist/src/tools/registry.d.ts.map +1 -1
- package/dist/src/tools/registry.js +77 -17
- package/dist/src/tools/registry.js.map +1 -1
- package/dist/src/tools/standard.d.ts.map +1 -1
- package/dist/src/tools/standard.js +8 -0
- package/dist/src/tools/standard.js.map +1 -1
- package/dist/src/tools/types.d.ts +20 -1
- package/dist/src/tools/types.d.ts.map +1 -1
- package/dist/src/tools/types.js.map +1 -1
- package/dist/src/tracing/trace-collector.d.ts +209 -3
- package/dist/src/tracing/trace-collector.d.ts.map +1 -1
- package/dist/src/tracing/trace-collector.js +407 -15
- package/dist/src/tracing/trace-collector.js.map +1 -1
- package/dist/src/tracing/types.d.ts +476 -2
- package/dist/src/tracing/types.d.ts.map +1 -1
- package/dist/src/tracing/types.js +25 -0
- package/dist/src/tracing/types.js.map +1 -1
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +161 -4
- package/dist/src/tui/app.js.map +1 -1
- package/dist/src/types.d.ts +35 -0
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +6 -3
- package/dist/src/hello.d.ts +0 -2
- package/dist/src/hello.d.ts.map +0 -1
- package/dist/src/hello.js +0 -4
- package/dist/src/hello.js.map +0 -1
- package/dist/src/test-sqlite.d.ts +0 -2
- package/dist/src/test-sqlite.d.ts.map +0 -1
- package/dist/src/test-sqlite.js +0 -114
- package/dist/src/test-sqlite.js.map +0 -1
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback Loop Manager
|
|
3
|
+
*
|
|
4
|
+
* Tracks analysis results, proposed fixes, and improvements over time.
|
|
5
|
+
* Uses SQLite for persistence.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Analysis record stored in database.
|
|
9
|
+
*/
|
|
10
|
+
export interface AnalysisRecord {
|
|
11
|
+
id: string;
|
|
12
|
+
sessionId: string;
|
|
13
|
+
timestamp: number;
|
|
14
|
+
efficiencyScore: number;
|
|
15
|
+
issueCount: number;
|
|
16
|
+
issues: string;
|
|
17
|
+
recommendations: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Proposed fix record.
|
|
21
|
+
*/
|
|
22
|
+
export interface ProposedFix {
|
|
23
|
+
id: string;
|
|
24
|
+
analysisId: string;
|
|
25
|
+
issueId: string;
|
|
26
|
+
description: string;
|
|
27
|
+
codeLocations: string;
|
|
28
|
+
status: 'pending' | 'implemented' | 'rejected' | 'verified';
|
|
29
|
+
createdAt: number;
|
|
30
|
+
implementedAt?: number;
|
|
31
|
+
verifiedAt?: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Improvement metric record.
|
|
35
|
+
*/
|
|
36
|
+
export interface ImprovementMetric {
|
|
37
|
+
id: string;
|
|
38
|
+
fixId: string;
|
|
39
|
+
metricName: string;
|
|
40
|
+
beforeValue: number;
|
|
41
|
+
afterValue: number;
|
|
42
|
+
improvement: number;
|
|
43
|
+
measuredAt: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Feedback loop manager for tracking improvements.
|
|
47
|
+
*/
|
|
48
|
+
export declare class FeedbackLoopManager {
|
|
49
|
+
private db;
|
|
50
|
+
private dbPath;
|
|
51
|
+
constructor(dataDir?: string);
|
|
52
|
+
/**
|
|
53
|
+
* Initialize database schema.
|
|
54
|
+
*/
|
|
55
|
+
private initSchema;
|
|
56
|
+
/**
|
|
57
|
+
* Store an analysis result.
|
|
58
|
+
*/
|
|
59
|
+
storeAnalysis(sessionId: string, efficiencyScore: number, issues: Array<{
|
|
60
|
+
id: string;
|
|
61
|
+
description: string;
|
|
62
|
+
severity: string;
|
|
63
|
+
}>, recommendations: Array<{
|
|
64
|
+
priority: number;
|
|
65
|
+
recommendation: string;
|
|
66
|
+
}>): string;
|
|
67
|
+
/**
|
|
68
|
+
* Get analysis results for a session.
|
|
69
|
+
*/
|
|
70
|
+
getAnalysisForSession(sessionId: string): AnalysisRecord[];
|
|
71
|
+
/**
|
|
72
|
+
* Get recent analyses.
|
|
73
|
+
*/
|
|
74
|
+
getRecentAnalyses(limit?: number): AnalysisRecord[];
|
|
75
|
+
/**
|
|
76
|
+
* Store a proposed fix.
|
|
77
|
+
*/
|
|
78
|
+
storeFix(analysisId: string, issueId: string, description: string, codeLocations: string[]): string;
|
|
79
|
+
/**
|
|
80
|
+
* Update fix status.
|
|
81
|
+
*/
|
|
82
|
+
updateFixStatus(fixId: string, status: ProposedFix['status']): void;
|
|
83
|
+
/**
|
|
84
|
+
* Get pending fixes.
|
|
85
|
+
*/
|
|
86
|
+
getPendingFixes(): ProposedFix[];
|
|
87
|
+
/**
|
|
88
|
+
* Store improvement metric.
|
|
89
|
+
*/
|
|
90
|
+
storeImprovement(fixId: string, metricName: string, beforeValue: number, afterValue: number): void;
|
|
91
|
+
/**
|
|
92
|
+
* Get improvement history.
|
|
93
|
+
*/
|
|
94
|
+
getImprovementHistory(limit?: number): ImprovementMetric[];
|
|
95
|
+
/**
|
|
96
|
+
* Get summary statistics.
|
|
97
|
+
*/
|
|
98
|
+
getSummaryStats(): {
|
|
99
|
+
totalAnalyses: number;
|
|
100
|
+
avgEfficiencyScore: number;
|
|
101
|
+
totalFixes: number;
|
|
102
|
+
implementedFixes: number;
|
|
103
|
+
verifiedFixes: number;
|
|
104
|
+
avgImprovement: number;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Close database connection.
|
|
108
|
+
*/
|
|
109
|
+
close(): void;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Factory function.
|
|
113
|
+
*/
|
|
114
|
+
export declare function createFeedbackLoopManager(dataDir?: string): FeedbackLoopManager;
|
|
115
|
+
//# sourceMappingURL=feedback-loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-loop.d.ts","sourceRoot":"","sources":["../../../src/analysis/feedback-loop.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,UAAU,CAAC;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,SAAoB;IAYvC;;OAEG;IACH,OAAO,CAAC,UAAU;IA2ClB;;OAEG;IACH,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACpE,eAAe,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,GACnE,MAAM;IAqBT;;OAEG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE;IAY1D;;OAEG;IACH,iBAAiB,CAAC,KAAK,SAAK,GAAG,cAAc,EAAE;IAY/C;;OAEG;IACH,QAAQ,CACN,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EAAE,GACtB,MAAM;IAaT;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,IAAI;IAoBnE;;OAEG;IACH,eAAe,IAAI,WAAW,EAAE;IAahC;;OAEG;IACH,gBAAgB,CACd,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,IAAI;IAcP;;OAEG;IACH,qBAAqB,CAAC,KAAK,SAAK,GAAG,iBAAiB,EAAE;IAatD;;OAEG;IACH,eAAe,IAAI;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;QACzB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;KACxB;IA8BD;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAE/E"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback Loop Manager
|
|
3
|
+
*
|
|
4
|
+
* Tracks analysis results, proposed fixes, and improvements over time.
|
|
5
|
+
* Uses SQLite for persistence.
|
|
6
|
+
*/
|
|
7
|
+
import Database from 'better-sqlite3';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { mkdirSync, existsSync } from 'fs';
|
|
10
|
+
/**
|
|
11
|
+
* Feedback loop manager for tracking improvements.
|
|
12
|
+
*/
|
|
13
|
+
export class FeedbackLoopManager {
|
|
14
|
+
db;
|
|
15
|
+
dbPath;
|
|
16
|
+
constructor(dataDir = '.agent/analysis') {
|
|
17
|
+
// Ensure directory exists
|
|
18
|
+
if (!existsSync(dataDir)) {
|
|
19
|
+
mkdirSync(dataDir, { recursive: true });
|
|
20
|
+
}
|
|
21
|
+
this.dbPath = join(dataDir, 'feedback-loop.db');
|
|
22
|
+
this.db = new Database(this.dbPath);
|
|
23
|
+
this.initSchema();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Initialize database schema.
|
|
27
|
+
*/
|
|
28
|
+
initSchema() {
|
|
29
|
+
this.db.exec(`
|
|
30
|
+
CREATE TABLE IF NOT EXISTS analysis_results (
|
|
31
|
+
id TEXT PRIMARY KEY,
|
|
32
|
+
session_id TEXT NOT NULL,
|
|
33
|
+
timestamp INTEGER NOT NULL,
|
|
34
|
+
efficiency_score INTEGER NOT NULL,
|
|
35
|
+
issue_count INTEGER NOT NULL,
|
|
36
|
+
issues TEXT NOT NULL,
|
|
37
|
+
recommendations TEXT NOT NULL
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
CREATE TABLE IF NOT EXISTS proposed_fixes (
|
|
41
|
+
id TEXT PRIMARY KEY,
|
|
42
|
+
analysis_id TEXT NOT NULL,
|
|
43
|
+
issue_id TEXT NOT NULL,
|
|
44
|
+
description TEXT NOT NULL,
|
|
45
|
+
code_locations TEXT NOT NULL,
|
|
46
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
47
|
+
created_at INTEGER NOT NULL,
|
|
48
|
+
implemented_at INTEGER,
|
|
49
|
+
verified_at INTEGER,
|
|
50
|
+
FOREIGN KEY (analysis_id) REFERENCES analysis_results(id)
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
CREATE TABLE IF NOT EXISTS improvement_metrics (
|
|
54
|
+
id TEXT PRIMARY KEY,
|
|
55
|
+
fix_id TEXT NOT NULL,
|
|
56
|
+
metric_name TEXT NOT NULL,
|
|
57
|
+
before_value REAL NOT NULL,
|
|
58
|
+
after_value REAL NOT NULL,
|
|
59
|
+
improvement REAL NOT NULL,
|
|
60
|
+
measured_at INTEGER NOT NULL,
|
|
61
|
+
FOREIGN KEY (fix_id) REFERENCES proposed_fixes(id)
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
CREATE INDEX IF NOT EXISTS idx_analysis_session ON analysis_results(session_id);
|
|
65
|
+
CREATE INDEX IF NOT EXISTS idx_analysis_timestamp ON analysis_results(timestamp);
|
|
66
|
+
CREATE INDEX IF NOT EXISTS idx_fixes_status ON proposed_fixes(status);
|
|
67
|
+
CREATE INDEX IF NOT EXISTS idx_fixes_analysis ON proposed_fixes(analysis_id);
|
|
68
|
+
`);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Store an analysis result.
|
|
72
|
+
*/
|
|
73
|
+
storeAnalysis(sessionId, efficiencyScore, issues, recommendations) {
|
|
74
|
+
const id = `analysis-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
75
|
+
const stmt = this.db.prepare(`
|
|
76
|
+
INSERT INTO analysis_results (id, session_id, timestamp, efficiency_score, issue_count, issues, recommendations)
|
|
77
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
78
|
+
`);
|
|
79
|
+
stmt.run(id, sessionId, Date.now(), efficiencyScore, issues.length, JSON.stringify(issues), JSON.stringify(recommendations));
|
|
80
|
+
return id;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get analysis results for a session.
|
|
84
|
+
*/
|
|
85
|
+
getAnalysisForSession(sessionId) {
|
|
86
|
+
const stmt = this.db.prepare(`
|
|
87
|
+
SELECT id, session_id as sessionId, timestamp, efficiency_score as efficiencyScore,
|
|
88
|
+
issue_count as issueCount, issues, recommendations
|
|
89
|
+
FROM analysis_results
|
|
90
|
+
WHERE session_id = ?
|
|
91
|
+
ORDER BY timestamp DESC
|
|
92
|
+
`);
|
|
93
|
+
return stmt.all(sessionId);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get recent analyses.
|
|
97
|
+
*/
|
|
98
|
+
getRecentAnalyses(limit = 10) {
|
|
99
|
+
const stmt = this.db.prepare(`
|
|
100
|
+
SELECT id, session_id as sessionId, timestamp, efficiency_score as efficiencyScore,
|
|
101
|
+
issue_count as issueCount, issues, recommendations
|
|
102
|
+
FROM analysis_results
|
|
103
|
+
ORDER BY timestamp DESC
|
|
104
|
+
LIMIT ?
|
|
105
|
+
`);
|
|
106
|
+
return stmt.all(limit);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Store a proposed fix.
|
|
110
|
+
*/
|
|
111
|
+
storeFix(analysisId, issueId, description, codeLocations) {
|
|
112
|
+
const id = `fix-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
113
|
+
const stmt = this.db.prepare(`
|
|
114
|
+
INSERT INTO proposed_fixes (id, analysis_id, issue_id, description, code_locations, status, created_at)
|
|
115
|
+
VALUES (?, ?, ?, ?, ?, 'pending', ?)
|
|
116
|
+
`);
|
|
117
|
+
stmt.run(id, analysisId, issueId, description, JSON.stringify(codeLocations), Date.now());
|
|
118
|
+
return id;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Update fix status.
|
|
122
|
+
*/
|
|
123
|
+
updateFixStatus(fixId, status) {
|
|
124
|
+
const now = Date.now();
|
|
125
|
+
let column = '';
|
|
126
|
+
if (status === 'implemented')
|
|
127
|
+
column = ', implemented_at = ?';
|
|
128
|
+
if (status === 'verified')
|
|
129
|
+
column = ', verified_at = ?';
|
|
130
|
+
const stmt = this.db.prepare(`
|
|
131
|
+
UPDATE proposed_fixes
|
|
132
|
+
SET status = ?${column}
|
|
133
|
+
WHERE id = ?
|
|
134
|
+
`);
|
|
135
|
+
if (column) {
|
|
136
|
+
stmt.run(status, now, fixId);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
stmt.run(status, fixId);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get pending fixes.
|
|
144
|
+
*/
|
|
145
|
+
getPendingFixes() {
|
|
146
|
+
const stmt = this.db.prepare(`
|
|
147
|
+
SELECT id, analysis_id as analysisId, issue_id as issueId, description,
|
|
148
|
+
code_locations as codeLocations, status, created_at as createdAt,
|
|
149
|
+
implemented_at as implementedAt, verified_at as verifiedAt
|
|
150
|
+
FROM proposed_fixes
|
|
151
|
+
WHERE status = 'pending'
|
|
152
|
+
ORDER BY created_at DESC
|
|
153
|
+
`);
|
|
154
|
+
return stmt.all();
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Store improvement metric.
|
|
158
|
+
*/
|
|
159
|
+
storeImprovement(fixId, metricName, beforeValue, afterValue) {
|
|
160
|
+
const id = `metric-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
161
|
+
const improvement = beforeValue !== 0
|
|
162
|
+
? ((afterValue - beforeValue) / beforeValue) * 100
|
|
163
|
+
: 0;
|
|
164
|
+
const stmt = this.db.prepare(`
|
|
165
|
+
INSERT INTO improvement_metrics (id, fix_id, metric_name, before_value, after_value, improvement, measured_at)
|
|
166
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
167
|
+
`);
|
|
168
|
+
stmt.run(id, fixId, metricName, beforeValue, afterValue, improvement, Date.now());
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get improvement history.
|
|
172
|
+
*/
|
|
173
|
+
getImprovementHistory(limit = 20) {
|
|
174
|
+
const stmt = this.db.prepare(`
|
|
175
|
+
SELECT id, fix_id as fixId, metric_name as metricName,
|
|
176
|
+
before_value as beforeValue, after_value as afterValue,
|
|
177
|
+
improvement, measured_at as measuredAt
|
|
178
|
+
FROM improvement_metrics
|
|
179
|
+
ORDER BY measured_at DESC
|
|
180
|
+
LIMIT ?
|
|
181
|
+
`);
|
|
182
|
+
return stmt.all(limit);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get summary statistics.
|
|
186
|
+
*/
|
|
187
|
+
getSummaryStats() {
|
|
188
|
+
const analysisStats = this.db.prepare(`
|
|
189
|
+
SELECT COUNT(*) as count, AVG(efficiency_score) as avgScore
|
|
190
|
+
FROM analysis_results
|
|
191
|
+
`).get();
|
|
192
|
+
const fixStats = this.db.prepare(`
|
|
193
|
+
SELECT
|
|
194
|
+
COUNT(*) as total,
|
|
195
|
+
SUM(CASE WHEN status = 'implemented' OR status = 'verified' THEN 1 ELSE 0 END) as implemented,
|
|
196
|
+
SUM(CASE WHEN status = 'verified' THEN 1 ELSE 0 END) as verified
|
|
197
|
+
FROM proposed_fixes
|
|
198
|
+
`).get();
|
|
199
|
+
const improvementStats = this.db.prepare(`
|
|
200
|
+
SELECT AVG(improvement) as avgImprovement
|
|
201
|
+
FROM improvement_metrics
|
|
202
|
+
WHERE improvement > 0
|
|
203
|
+
`).get();
|
|
204
|
+
return {
|
|
205
|
+
totalAnalyses: analysisStats.count,
|
|
206
|
+
avgEfficiencyScore: Math.round(analysisStats.avgScore || 0),
|
|
207
|
+
totalFixes: fixStats.total,
|
|
208
|
+
implementedFixes: fixStats.implemented,
|
|
209
|
+
verifiedFixes: fixStats.verified,
|
|
210
|
+
avgImprovement: Math.round(improvementStats.avgImprovement || 0),
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Close database connection.
|
|
215
|
+
*/
|
|
216
|
+
close() {
|
|
217
|
+
this.db.close();
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Factory function.
|
|
222
|
+
*/
|
|
223
|
+
export function createFeedbackLoopManager(dataDir) {
|
|
224
|
+
return new FeedbackLoopManager(dataDir);
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=feedback-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-loop.js","sourceRoot":"","sources":["../../../src/analysis/feedback-loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analysis module exports
|
|
3
|
+
*
|
|
4
|
+
* Provides LLM-powered trace analysis capabilities.
|
|
5
|
+
*/
|
|
6
|
+
export { TraceSummaryGenerator, createTraceSummaryGenerator, } from './trace-summary.js';
|
|
7
|
+
export { PROMPT_TEMPLATES, generateAnalysisPrompt, getAvailableTemplates, type AnalysisTemplate, type PromptContext, } from './prompt-templates.js';
|
|
8
|
+
export { FeedbackLoopManager, createFeedbackLoopManager, type AnalysisRecord, type ProposedFix, type ImprovementMetric, } from './feedback-loop.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analysis/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACvB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analysis module exports
|
|
3
|
+
*
|
|
4
|
+
* Provides LLM-powered trace analysis capabilities.
|
|
5
|
+
*/
|
|
6
|
+
export { TraceSummaryGenerator, createTraceSummaryGenerator, } from './trace-summary.js';
|
|
7
|
+
export { PROMPT_TEMPLATES, generateAnalysisPrompt, getAvailableTemplates, } from './prompt-templates.js';
|
|
8
|
+
export { FeedbackLoopManager, createFeedbackLoopManager, } from './feedback-loop.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analysis/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,GAGtB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,GAI1B,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analysis Prompt Templates
|
|
3
|
+
*
|
|
4
|
+
* Structured prompts for LLM analysis of trace data.
|
|
5
|
+
*/
|
|
6
|
+
import type { TraceSummary } from '../tracing/types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Available analysis templates.
|
|
9
|
+
*/
|
|
10
|
+
export type AnalysisTemplate = 'efficiencyAudit' | 'issueInvestigation' | 'comparisonAnalysis' | 'rootCauseAnalysis';
|
|
11
|
+
/**
|
|
12
|
+
* Prompt context for analysis.
|
|
13
|
+
*/
|
|
14
|
+
export interface PromptContext {
|
|
15
|
+
/** Primary trace summary */
|
|
16
|
+
summary: TraceSummary;
|
|
17
|
+
/** Comparison trace summary (for comparison analysis) */
|
|
18
|
+
baselineSummary?: TraceSummary;
|
|
19
|
+
/** Specific issue to investigate */
|
|
20
|
+
issueId?: string;
|
|
21
|
+
/** Additional context */
|
|
22
|
+
context?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Analysis prompt templates.
|
|
26
|
+
*/
|
|
27
|
+
export declare const PROMPT_TEMPLATES: Record<AnalysisTemplate, (ctx: PromptContext) => string>;
|
|
28
|
+
/**
|
|
29
|
+
* Generate an analysis prompt.
|
|
30
|
+
*/
|
|
31
|
+
export declare function generateAnalysisPrompt(template: AnalysisTemplate, context: PromptContext): string;
|
|
32
|
+
/**
|
|
33
|
+
* Get available templates.
|
|
34
|
+
*/
|
|
35
|
+
export declare function getAvailableTemplates(): AnalysisTemplate[];
|
|
36
|
+
//# sourceMappingURL=prompt-templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-templates.d.ts","sourceRoot":"","sources":["../../../src/analysis/prompt-templates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB,oBAAoB,GACpB,oBAAoB,GACpB,mBAAmB,CAAC;AAExB;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,4BAA4B;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB,yDAAyD;IACzD,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,CA+KrF,CAAC;AAEF;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,aAAa,GACrB,MAAM,CAMR;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,gBAAgB,EAAE,CAE1D"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analysis Prompt Templates
|
|
3
|
+
*
|
|
4
|
+
* Structured prompts for LLM analysis of trace data.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Analysis prompt templates.
|
|
8
|
+
*/
|
|
9
|
+
export const PROMPT_TEMPLATES = {
|
|
10
|
+
/**
|
|
11
|
+
* Efficiency audit - broad analysis of session efficiency.
|
|
12
|
+
*/
|
|
13
|
+
efficiencyAudit: (ctx) => `
|
|
14
|
+
You are an expert at analyzing AI agent execution traces. Analyze this trace summary and provide an efficiency audit.
|
|
15
|
+
|
|
16
|
+
## Trace Summary
|
|
17
|
+
\`\`\`json
|
|
18
|
+
${JSON.stringify(ctx.summary, null, 2)}
|
|
19
|
+
\`\`\`
|
|
20
|
+
|
|
21
|
+
## Analysis Instructions
|
|
22
|
+
|
|
23
|
+
1. **Efficiency Score (0-100)**: Calculate based on:
|
|
24
|
+
- Iteration count vs task complexity
|
|
25
|
+
- Cache hit rate
|
|
26
|
+
- Tool call redundancy
|
|
27
|
+
- Error rate
|
|
28
|
+
|
|
29
|
+
2. **Issues**: Identify problems with severity levels:
|
|
30
|
+
- critical: Prevents completion or causes failure
|
|
31
|
+
- high: Significant inefficiency (>50% waste)
|
|
32
|
+
- medium: Moderate inefficiency (20-50% waste)
|
|
33
|
+
- low: Minor optimization opportunity
|
|
34
|
+
|
|
35
|
+
3. **Recommendations**: Provide actionable improvements:
|
|
36
|
+
- Priority (1-5, 1 is highest)
|
|
37
|
+
- Expected improvement
|
|
38
|
+
- Effort level (low/medium/high)
|
|
39
|
+
|
|
40
|
+
4. **Code Locations**: Map issues to specific code locations when possible
|
|
41
|
+
|
|
42
|
+
## Response Format
|
|
43
|
+
|
|
44
|
+
Respond with a JSON object matching this schema:
|
|
45
|
+
\`\`\`typescript
|
|
46
|
+
{
|
|
47
|
+
efficiencyScore: number; // 0-100
|
|
48
|
+
issues: Array<{
|
|
49
|
+
id: string;
|
|
50
|
+
severity: 'low' | 'medium' | 'high' | 'critical';
|
|
51
|
+
category: string;
|
|
52
|
+
description: string;
|
|
53
|
+
evidence: string;
|
|
54
|
+
suggestedFix?: string;
|
|
55
|
+
codeLocations?: string[];
|
|
56
|
+
}>;
|
|
57
|
+
recommendations: Array<{
|
|
58
|
+
priority: number;
|
|
59
|
+
recommendation: string;
|
|
60
|
+
expectedImprovement: string;
|
|
61
|
+
effort: 'low' | 'medium' | 'high';
|
|
62
|
+
}>;
|
|
63
|
+
}
|
|
64
|
+
\`\`\`
|
|
65
|
+
`.trim(),
|
|
66
|
+
/**
|
|
67
|
+
* Issue investigation - deep dive into a specific issue.
|
|
68
|
+
*/
|
|
69
|
+
issueInvestigation: (ctx) => `
|
|
70
|
+
You are an expert at debugging AI agent behavior. Investigate this specific issue in the trace.
|
|
71
|
+
|
|
72
|
+
## Issue ID: ${ctx.issueId || 'unknown'}
|
|
73
|
+
|
|
74
|
+
## Trace Summary
|
|
75
|
+
\`\`\`json
|
|
76
|
+
${JSON.stringify(ctx.summary, null, 2)}
|
|
77
|
+
\`\`\`
|
|
78
|
+
|
|
79
|
+
${ctx.context ? `## Additional Context\n${ctx.context}` : ''}
|
|
80
|
+
|
|
81
|
+
## Investigation Instructions
|
|
82
|
+
|
|
83
|
+
1. **Identify the root cause**: What directly caused this issue?
|
|
84
|
+
2. **Trace the causal chain**: What led to the root cause?
|
|
85
|
+
3. **Find contributing factors**: What made this worse?
|
|
86
|
+
4. **Propose fixes**: How to prevent this in the future?
|
|
87
|
+
|
|
88
|
+
## Response Format
|
|
89
|
+
|
|
90
|
+
Respond with a JSON object:
|
|
91
|
+
\`\`\`typescript
|
|
92
|
+
{
|
|
93
|
+
issueId: string;
|
|
94
|
+
rootCause: string;
|
|
95
|
+
causalChain: string[];
|
|
96
|
+
contributingFactors: string[];
|
|
97
|
+
proposedFixes: Array<{
|
|
98
|
+
fix: string;
|
|
99
|
+
effort: 'low' | 'medium' | 'high';
|
|
100
|
+
impact: 'low' | 'medium' | 'high';
|
|
101
|
+
codeLocations: string[];
|
|
102
|
+
}>;
|
|
103
|
+
}
|
|
104
|
+
\`\`\`
|
|
105
|
+
`.trim(),
|
|
106
|
+
/**
|
|
107
|
+
* Comparison analysis - compare two sessions.
|
|
108
|
+
*/
|
|
109
|
+
comparisonAnalysis: (ctx) => `
|
|
110
|
+
You are an expert at comparing AI agent execution patterns. Compare these two trace sessions.
|
|
111
|
+
|
|
112
|
+
## Baseline Session
|
|
113
|
+
\`\`\`json
|
|
114
|
+
${JSON.stringify(ctx.baselineSummary, null, 2)}
|
|
115
|
+
\`\`\`
|
|
116
|
+
|
|
117
|
+
## Comparison Session
|
|
118
|
+
\`\`\`json
|
|
119
|
+
${JSON.stringify(ctx.summary, null, 2)}
|
|
120
|
+
\`\`\`
|
|
121
|
+
|
|
122
|
+
## Analysis Instructions
|
|
123
|
+
|
|
124
|
+
1. **Identify regressions**: What got worse?
|
|
125
|
+
2. **Identify improvements**: What got better?
|
|
126
|
+
3. **Explain changes**: Why did metrics change?
|
|
127
|
+
4. **Assess overall**: Is this a net improvement?
|
|
128
|
+
|
|
129
|
+
## Response Format
|
|
130
|
+
|
|
131
|
+
Respond with a JSON object:
|
|
132
|
+
\`\`\`typescript
|
|
133
|
+
{
|
|
134
|
+
regressions: string[];
|
|
135
|
+
improvements: string[];
|
|
136
|
+
neutral: string[];
|
|
137
|
+
overallAssessment: 'improved' | 'regressed' | 'mixed' | 'similar';
|
|
138
|
+
explanation: string;
|
|
139
|
+
recommendations: string[];
|
|
140
|
+
}
|
|
141
|
+
\`\`\`
|
|
142
|
+
`.trim(),
|
|
143
|
+
/**
|
|
144
|
+
* Root cause analysis - five whys approach.
|
|
145
|
+
*/
|
|
146
|
+
rootCauseAnalysis: (ctx) => `
|
|
147
|
+
You are an expert at root cause analysis. Use the Five Whys technique to analyze this trace failure.
|
|
148
|
+
|
|
149
|
+
## Trace Summary
|
|
150
|
+
\`\`\`json
|
|
151
|
+
${JSON.stringify(ctx.summary, null, 2)}
|
|
152
|
+
\`\`\`
|
|
153
|
+
|
|
154
|
+
## Problem Statement
|
|
155
|
+
${ctx.context || 'The session did not complete efficiently or failed.'}
|
|
156
|
+
|
|
157
|
+
## Analysis Instructions
|
|
158
|
+
|
|
159
|
+
Apply the Five Whys technique:
|
|
160
|
+
1. Start with the observed problem
|
|
161
|
+
2. Ask "Why?" at each level
|
|
162
|
+
3. Continue until you reach the root cause
|
|
163
|
+
4. Identify the ultimate cause and fix
|
|
164
|
+
|
|
165
|
+
## Response Format
|
|
166
|
+
|
|
167
|
+
Respond with a JSON object:
|
|
168
|
+
\`\`\`typescript
|
|
169
|
+
{
|
|
170
|
+
problem: string;
|
|
171
|
+
whyChain: Array<{
|
|
172
|
+
why: string;
|
|
173
|
+
answer: string;
|
|
174
|
+
}>;
|
|
175
|
+
rootCause: string;
|
|
176
|
+
suggestedFix: string;
|
|
177
|
+
preventionStrategy: string;
|
|
178
|
+
}
|
|
179
|
+
\`\`\`
|
|
180
|
+
`.trim(),
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* Generate an analysis prompt.
|
|
184
|
+
*/
|
|
185
|
+
export function generateAnalysisPrompt(template, context) {
|
|
186
|
+
const generator = PROMPT_TEMPLATES[template];
|
|
187
|
+
if (!generator) {
|
|
188
|
+
throw new Error(`Unknown analysis template: ${template}`);
|
|
189
|
+
}
|
|
190
|
+
return generator(context);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get available templates.
|
|
194
|
+
*/
|
|
195
|
+
export function getAvailableTemplates() {
|
|
196
|
+
return Object.keys(PROMPT_TEMPLATES);
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=prompt-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-templates.js","sourceRoot":"","sources":["../../../src/analysis/prompt-templates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2BH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA6D;IACxF;;OAEG;IACH,eAAe,EAAE,CAAC,GAAkB,EAAE,EAAE,CAAC;;;;;EAKzC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CrC,CAAC,IAAI,EAAE;IAEN;;OAEG;IACH,kBAAkB,EAAE,CAAC,GAAkB,EAAE,EAAE,CAAC;;;eAG/B,GAAG,CAAC,OAAO,IAAI,SAAS;;;;EAIrC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;;;EAGpC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;CA0B3D,CAAC,IAAI,EAAE;IAEN;;OAEG;IACH,kBAAkB,EAAE,CAAC,GAAkB,EAAE,EAAE,CAAC;;;;;EAK5C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;;;;;EAK5C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;CAuBrC,CAAC,IAAI,EAAE;IAEN;;OAEG;IACH,iBAAiB,EAAE,CAAC,GAAkB,EAAE,EAAE,CAAC;;;;;EAK3C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;;;;EAIpC,GAAG,CAAC,OAAO,IAAI,qDAAqD;;;;;;;;;;;;;;;;;;;;;;;;;CAyBrE,CAAC,IAAI,EAAE;CACP,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAA0B,EAC1B,OAAsB;IAEtB,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAuB,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trace Summary Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates structured summaries of trace sessions for LLM analysis.
|
|
5
|
+
* Designed to produce compact output suitable for analysis by other LLMs.
|
|
6
|
+
*/
|
|
7
|
+
import type { SessionTrace, TraceSummary } from '../tracing/types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Generates TraceSummary from SessionTrace data.
|
|
10
|
+
*/
|
|
11
|
+
export declare class TraceSummaryGenerator {
|
|
12
|
+
private trace;
|
|
13
|
+
constructor(trace: SessionTrace);
|
|
14
|
+
/**
|
|
15
|
+
* Generate a compact summary for LLM analysis.
|
|
16
|
+
* Target size: ~4000 tokens.
|
|
17
|
+
*/
|
|
18
|
+
generate(): TraceSummary;
|
|
19
|
+
/**
|
|
20
|
+
* Generate session metadata.
|
|
21
|
+
*/
|
|
22
|
+
private generateMeta;
|
|
23
|
+
/**
|
|
24
|
+
* Generate aggregated metrics.
|
|
25
|
+
*/
|
|
26
|
+
private generateMetrics;
|
|
27
|
+
/**
|
|
28
|
+
* Extract key decision points from trace.
|
|
29
|
+
*/
|
|
30
|
+
private extractDecisionPoints;
|
|
31
|
+
/**
|
|
32
|
+
* Detect anomalies in the trace.
|
|
33
|
+
*/
|
|
34
|
+
private detectAnomalies;
|
|
35
|
+
/**
|
|
36
|
+
* Analyze tool usage patterns.
|
|
37
|
+
*/
|
|
38
|
+
private analyzeToolPatterns;
|
|
39
|
+
/**
|
|
40
|
+
* Summarize each iteration.
|
|
41
|
+
*/
|
|
42
|
+
private summarizeIterations;
|
|
43
|
+
/**
|
|
44
|
+
* Map anomalies to code locations.
|
|
45
|
+
*/
|
|
46
|
+
private mapCodeLocations;
|
|
47
|
+
/**
|
|
48
|
+
* Truncate string to max length.
|
|
49
|
+
*/
|
|
50
|
+
private truncate;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Factory function.
|
|
54
|
+
*/
|
|
55
|
+
export declare function createTraceSummaryGenerator(trace: SessionTrace): TraceSummaryGenerator;
|
|
56
|
+
//# sourceMappingURL=trace-summary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-summary.d.ts","sourceRoot":"","sources":["../../../src/analysis/trace-summary.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EAEb,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,KAAK,CAAe;gBAEhB,KAAK,EAAE,YAAY;IAI/B;;;OAGG;IACH,QAAQ,IAAI,YAAY;IAYxB;;OAEG;IACH,OAAO,CAAC,YAAY;IAWpB;;OAEG;IACH,OAAO,CAAC,eAAe;IA0BvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAM7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAqEvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0C3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqCxB;;OAEG;IACH,OAAO,CAAC,QAAQ;CAIjB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,YAAY,GAAG,qBAAqB,CAEtF"}
|