@ace-sdk/core 2.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cache/project-index.d.ts +152 -0
- package/dist/cache/project-index.d.ts.map +1 -0
- package/dist/cache/project-index.js +290 -0
- package/dist/cache/project-index.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/services/bootstrap-stream.d.ts +113 -0
- package/dist/services/bootstrap-stream.d.ts.map +1 -0
- package/dist/services/bootstrap-stream.js +261 -0
- package/dist/services/bootstrap-stream.js.map +1 -0
- package/dist/services/import-graph.d.ts +111 -0
- package/dist/services/import-graph.d.ts.map +1 -0
- package/dist/services/import-graph.js +292 -0
- package/dist/services/import-graph.js.map +1 -0
- package/dist/services/language-detector.d.ts +120 -0
- package/dist/services/language-detector.d.ts.map +1 -0
- package/dist/services/language-detector.js +210 -0
- package/dist/services/language-detector.js.map +1 -0
- package/dist/types/bootstrap-events.d.ts +251 -0
- package/dist/types/bootstrap-events.d.ts.map +1 -0
- package/dist/types/bootstrap-events.js +103 -0
- package/dist/types/bootstrap-events.js.map +1 -0
- package/dist/types/project-dna.d.ts +151 -0
- package/dist/types/project-dna.d.ts.map +1 -0
- package/dist/types/project-dna.js +42 -0
- package/dist/types/project-dna.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-graph.js","sourceRoot":"","sources":["../../src/services/import-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language Detection Service using GitHub Linguist
|
|
3
|
+
*
|
|
4
|
+
* Dynamically detects programming languages instead of hardcoding file extensions.
|
|
5
|
+
* Uses linguist-js which is a JavaScript port of GitHub's Linguist library.
|
|
6
|
+
*
|
|
7
|
+
* @package @ace-sdk/core
|
|
8
|
+
*/
|
|
9
|
+
import type { Category } from 'linguist-js/dist/types.js';
|
|
10
|
+
import type { LanguageStats as ProjectLanguageStats } from '../types/project-dna.js';
|
|
11
|
+
/**
|
|
12
|
+
* Raw language statistics from linguist-js
|
|
13
|
+
*/
|
|
14
|
+
export interface LanguageStats {
|
|
15
|
+
files: {
|
|
16
|
+
count: number;
|
|
17
|
+
results: Record<string, string | null>;
|
|
18
|
+
};
|
|
19
|
+
languages: {
|
|
20
|
+
count: number;
|
|
21
|
+
results: Record<string, {
|
|
22
|
+
type: string;
|
|
23
|
+
bytes: number;
|
|
24
|
+
}>;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Options for language analysis
|
|
29
|
+
*/
|
|
30
|
+
export interface LanguageAnalysisOptions {
|
|
31
|
+
/** Use quick mode (skip complex analysis) */
|
|
32
|
+
quick?: boolean;
|
|
33
|
+
/** Glob patterns for files to ignore */
|
|
34
|
+
ignoredFiles?: string[];
|
|
35
|
+
/** File categories to include */
|
|
36
|
+
categories?: Category[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Default ignored patterns (vendored, generated, lock files)
|
|
40
|
+
*/
|
|
41
|
+
export declare const DEFAULT_IGNORED_PATTERNS: string[];
|
|
42
|
+
/**
|
|
43
|
+
* Default categories (exclude prose/documentation)
|
|
44
|
+
*/
|
|
45
|
+
export declare const DEFAULT_CATEGORIES: Category[];
|
|
46
|
+
/**
|
|
47
|
+
* Language detection service using GitHub Linguist
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const detector = new LanguageDetector();
|
|
52
|
+
*
|
|
53
|
+
* // Get primary language
|
|
54
|
+
* const primary = await detector.getPrimaryLanguage('/path/to/repo');
|
|
55
|
+
* console.log(primary); // "TypeScript"
|
|
56
|
+
*
|
|
57
|
+
* // Get language breakdown
|
|
58
|
+
* const breakdown = await detector.getLanguageBreakdown('/path/to/repo');
|
|
59
|
+
* console.log(breakdown); // { TypeScript: 75.5, JavaScript: 20.3, ... }
|
|
60
|
+
*
|
|
61
|
+
* // Get all programming files
|
|
62
|
+
* const files = await detector.getProgrammingFiles('/path/to/repo', 1000);
|
|
63
|
+
* console.log(files); // ["src/index.ts", "src/utils.ts", ...]
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare class LanguageDetector {
|
|
67
|
+
/**
|
|
68
|
+
* Analyze a directory and detect all programming languages
|
|
69
|
+
*
|
|
70
|
+
* @param repoPath - Path to repository
|
|
71
|
+
* @param options - Analysis options
|
|
72
|
+
* @returns Language statistics with file mappings
|
|
73
|
+
*/
|
|
74
|
+
analyzeDirectory(repoPath: string, options?: LanguageAnalysisOptions): Promise<LanguageStats>;
|
|
75
|
+
/**
|
|
76
|
+
* Get all source files of programming languages (excluding vendor, generated, docs)
|
|
77
|
+
*
|
|
78
|
+
* @param repoPath - Path to repository
|
|
79
|
+
* @param maxFiles - Maximum files to return (-1 for unlimited)
|
|
80
|
+
* @returns Array of file paths
|
|
81
|
+
*/
|
|
82
|
+
getProgrammingFiles(repoPath: string, maxFiles?: number): Promise<string[]>;
|
|
83
|
+
/**
|
|
84
|
+
* Get language breakdown for repository
|
|
85
|
+
*
|
|
86
|
+
* @param repoPath - Path to repository
|
|
87
|
+
* @returns Map of language name to percentage
|
|
88
|
+
*/
|
|
89
|
+
getLanguageBreakdown(repoPath: string): Promise<Record<string, number>>;
|
|
90
|
+
/**
|
|
91
|
+
* Get detailed language stats for ProjectDNA
|
|
92
|
+
*
|
|
93
|
+
* @param repoPath - Path to repository
|
|
94
|
+
* @returns Array of LanguageStats for ProjectDNA
|
|
95
|
+
*/
|
|
96
|
+
getLanguageStatsForDNA(repoPath: string): Promise<ProjectLanguageStats[]>;
|
|
97
|
+
/**
|
|
98
|
+
* Check if file is a programming language file
|
|
99
|
+
*
|
|
100
|
+
* @param filepath - Full path to file
|
|
101
|
+
* @returns Language name or null
|
|
102
|
+
*/
|
|
103
|
+
detectFileLanguage(filepath: string): Promise<string | null>;
|
|
104
|
+
/**
|
|
105
|
+
* Get primary language of repository
|
|
106
|
+
*
|
|
107
|
+
* @param repoPath - Path to repository
|
|
108
|
+
* @returns Primary language name or null
|
|
109
|
+
*/
|
|
110
|
+
getPrimaryLanguage(repoPath: string): Promise<string | null>;
|
|
111
|
+
/**
|
|
112
|
+
* Get files by language
|
|
113
|
+
*
|
|
114
|
+
* @param repoPath - Path to repository
|
|
115
|
+
* @param language - Language to filter by
|
|
116
|
+
* @returns Array of file paths for that language
|
|
117
|
+
*/
|
|
118
|
+
getFilesByLanguage(repoPath: string, language: string): Promise<string[]>;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=language-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-detector.d.ts","sourceRoot":"","sources":["../../src/services/language-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAMrF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;KACxC,CAAC;IACF,SAAS,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;YACtB,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;SACf,CAAC,CAAC;KACJ,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,6CAA6C;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wCAAwC;IACxC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iCAAiC;IACjC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;CACzB;AAMD;;GAEG;AACH,eAAO,MAAM,wBAAwB,UAcpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,EAAsC,CAAC;AAMhF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,gBAAgB;IAC3B;;;;;;OAMG;IACG,gBAAgB,CACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,aAAa,CAAC;IA8BzB;;;;;;OAMG;IACG,mBAAmB,CACvB,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAa,GACtB,OAAO,CAAC,MAAM,EAAE,CAAC;IAgBpB;;;;;OAKG;IACG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAmB7E;;;;;OAKG;IACG,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAoC/E;;;;;OAKG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAalE;;;;;OAKG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IASlE;;;;;;OAMG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAOhF"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language Detection Service using GitHub Linguist
|
|
3
|
+
*
|
|
4
|
+
* Dynamically detects programming languages instead of hardcoding file extensions.
|
|
5
|
+
* Uses linguist-js which is a JavaScript port of GitHub's Linguist library.
|
|
6
|
+
*
|
|
7
|
+
* @package @ace-sdk/core
|
|
8
|
+
*/
|
|
9
|
+
import linguist from 'linguist-js';
|
|
10
|
+
// =============================================================================
|
|
11
|
+
// Default Options
|
|
12
|
+
// =============================================================================
|
|
13
|
+
/**
|
|
14
|
+
* Default ignored patterns (vendored, generated, lock files)
|
|
15
|
+
*/
|
|
16
|
+
export const DEFAULT_IGNORED_PATTERNS = [
|
|
17
|
+
'node_modules/**',
|
|
18
|
+
'dist/**',
|
|
19
|
+
'build/**',
|
|
20
|
+
'.git/**',
|
|
21
|
+
'.next/**',
|
|
22
|
+
'target/**',
|
|
23
|
+
'__pycache__/**',
|
|
24
|
+
'venv/**',
|
|
25
|
+
'*.min.js',
|
|
26
|
+
'*.bundle.js',
|
|
27
|
+
'package-lock.json',
|
|
28
|
+
'yarn.lock',
|
|
29
|
+
'pnpm-lock.yaml'
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* Default categories (exclude prose/documentation)
|
|
33
|
+
*/
|
|
34
|
+
export const DEFAULT_CATEGORIES = ['programming', 'markup', 'data'];
|
|
35
|
+
// =============================================================================
|
|
36
|
+
// Language Detector Class
|
|
37
|
+
// =============================================================================
|
|
38
|
+
/**
|
|
39
|
+
* Language detection service using GitHub Linguist
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* const detector = new LanguageDetector();
|
|
44
|
+
*
|
|
45
|
+
* // Get primary language
|
|
46
|
+
* const primary = await detector.getPrimaryLanguage('/path/to/repo');
|
|
47
|
+
* console.log(primary); // "TypeScript"
|
|
48
|
+
*
|
|
49
|
+
* // Get language breakdown
|
|
50
|
+
* const breakdown = await detector.getLanguageBreakdown('/path/to/repo');
|
|
51
|
+
* console.log(breakdown); // { TypeScript: 75.5, JavaScript: 20.3, ... }
|
|
52
|
+
*
|
|
53
|
+
* // Get all programming files
|
|
54
|
+
* const files = await detector.getProgrammingFiles('/path/to/repo', 1000);
|
|
55
|
+
* console.log(files); // ["src/index.ts", "src/utils.ts", ...]
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export class LanguageDetector {
|
|
59
|
+
/**
|
|
60
|
+
* Analyze a directory and detect all programming languages
|
|
61
|
+
*
|
|
62
|
+
* @param repoPath - Path to repository
|
|
63
|
+
* @param options - Analysis options
|
|
64
|
+
* @returns Language statistics with file mappings
|
|
65
|
+
*/
|
|
66
|
+
async analyzeDirectory(repoPath, options = {}) {
|
|
67
|
+
const mergedOptions = {
|
|
68
|
+
quick: true,
|
|
69
|
+
ignoredFiles: DEFAULT_IGNORED_PATTERNS,
|
|
70
|
+
categories: DEFAULT_CATEGORIES,
|
|
71
|
+
...options
|
|
72
|
+
};
|
|
73
|
+
try {
|
|
74
|
+
const result = await linguist(repoPath, mergedOptions);
|
|
75
|
+
return {
|
|
76
|
+
files: {
|
|
77
|
+
count: result.files.count,
|
|
78
|
+
results: result.files.results
|
|
79
|
+
},
|
|
80
|
+
languages: {
|
|
81
|
+
count: result.languages.count,
|
|
82
|
+
results: result.languages.results
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
console.error('Language detection failed:', error);
|
|
88
|
+
return {
|
|
89
|
+
files: { count: 0, results: {} },
|
|
90
|
+
languages: { count: 0, results: {} }
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get all source files of programming languages (excluding vendor, generated, docs)
|
|
96
|
+
*
|
|
97
|
+
* @param repoPath - Path to repository
|
|
98
|
+
* @param maxFiles - Maximum files to return (-1 for unlimited)
|
|
99
|
+
* @returns Array of file paths
|
|
100
|
+
*/
|
|
101
|
+
async getProgrammingFiles(repoPath, maxFiles = 5000) {
|
|
102
|
+
const stats = await this.analyzeDirectory(repoPath);
|
|
103
|
+
// Filter for programming and markup files
|
|
104
|
+
const programmingFiles = Object.entries(stats.files.results)
|
|
105
|
+
.filter(([_, lang]) => lang !== null) // Has detected language
|
|
106
|
+
.map(([filepath]) => filepath);
|
|
107
|
+
// Respect maxFiles limit
|
|
108
|
+
if (maxFiles === -1) {
|
|
109
|
+
return programmingFiles;
|
|
110
|
+
}
|
|
111
|
+
return programmingFiles.slice(0, maxFiles);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get language breakdown for repository
|
|
115
|
+
*
|
|
116
|
+
* @param repoPath - Path to repository
|
|
117
|
+
* @returns Map of language name to percentage
|
|
118
|
+
*/
|
|
119
|
+
async getLanguageBreakdown(repoPath) {
|
|
120
|
+
const stats = await this.analyzeDirectory(repoPath);
|
|
121
|
+
const totalBytes = Object.values(stats.languages.results)
|
|
122
|
+
.reduce((sum, lang) => sum + lang.bytes, 0);
|
|
123
|
+
if (totalBytes === 0) {
|
|
124
|
+
return {};
|
|
125
|
+
}
|
|
126
|
+
const breakdown = {};
|
|
127
|
+
for (const [langName, langData] of Object.entries(stats.languages.results)) {
|
|
128
|
+
breakdown[langName] = (langData.bytes / totalBytes) * 100;
|
|
129
|
+
}
|
|
130
|
+
return breakdown;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get detailed language stats for ProjectDNA
|
|
134
|
+
*
|
|
135
|
+
* @param repoPath - Path to repository
|
|
136
|
+
* @returns Array of LanguageStats for ProjectDNA
|
|
137
|
+
*/
|
|
138
|
+
async getLanguageStatsForDNA(repoPath) {
|
|
139
|
+
const stats = await this.analyzeDirectory(repoPath);
|
|
140
|
+
const totalBytes = Object.values(stats.languages.results)
|
|
141
|
+
.reduce((sum, lang) => sum + lang.bytes, 0);
|
|
142
|
+
if (totalBytes === 0) {
|
|
143
|
+
return [];
|
|
144
|
+
}
|
|
145
|
+
// Count files per language
|
|
146
|
+
const fileCountByLang = {};
|
|
147
|
+
for (const [_, lang] of Object.entries(stats.files.results)) {
|
|
148
|
+
if (lang) {
|
|
149
|
+
fileCountByLang[lang] = (fileCountByLang[lang] || 0) + 1;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// Build language stats
|
|
153
|
+
const languageStats = [];
|
|
154
|
+
for (const [langName, langData] of Object.entries(stats.languages.results)) {
|
|
155
|
+
languageStats.push({
|
|
156
|
+
name: langName,
|
|
157
|
+
percentage: (langData.bytes / totalBytes) * 100,
|
|
158
|
+
files: fileCountByLang[langName] || 0,
|
|
159
|
+
bytes: langData.bytes
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
// Sort by percentage descending
|
|
163
|
+
languageStats.sort((a, b) => b.percentage - a.percentage);
|
|
164
|
+
return languageStats;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Check if file is a programming language file
|
|
168
|
+
*
|
|
169
|
+
* @param filepath - Full path to file
|
|
170
|
+
* @returns Language name or null
|
|
171
|
+
*/
|
|
172
|
+
async detectFileLanguage(filepath) {
|
|
173
|
+
try {
|
|
174
|
+
const result = await linguist([filepath], {
|
|
175
|
+
quick: true,
|
|
176
|
+
categories: DEFAULT_CATEGORIES
|
|
177
|
+
});
|
|
178
|
+
return result.files.results[filepath] || null;
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get primary language of repository
|
|
186
|
+
*
|
|
187
|
+
* @param repoPath - Path to repository
|
|
188
|
+
* @returns Primary language name or null
|
|
189
|
+
*/
|
|
190
|
+
async getPrimaryLanguage(repoPath) {
|
|
191
|
+
const breakdown = await this.getLanguageBreakdown(repoPath);
|
|
192
|
+
const sorted = Object.entries(breakdown)
|
|
193
|
+
.sort((a, b) => b[1] - a[1]);
|
|
194
|
+
return sorted.length > 0 ? sorted[0][0] : null;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Get files by language
|
|
198
|
+
*
|
|
199
|
+
* @param repoPath - Path to repository
|
|
200
|
+
* @param language - Language to filter by
|
|
201
|
+
* @returns Array of file paths for that language
|
|
202
|
+
*/
|
|
203
|
+
async getFilesByLanguage(repoPath, language) {
|
|
204
|
+
const stats = await this.analyzeDirectory(repoPath);
|
|
205
|
+
return Object.entries(stats.files.results)
|
|
206
|
+
.filter(([_, lang]) => lang === language)
|
|
207
|
+
.map(([filepath]) => filepath);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=language-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-detector.js","sourceRoot":"","sources":["../../src/services/language-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bootstrap SSE Event Types
|
|
3
|
+
*
|
|
4
|
+
* Server sends these events during streaming bootstrap.
|
|
5
|
+
* Client displays progress to user.
|
|
6
|
+
*
|
|
7
|
+
* Updated to match ACE Server v3.13.0 response format.
|
|
8
|
+
*
|
|
9
|
+
* @package @ace-sdk/core
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Playbook section names
|
|
13
|
+
*/
|
|
14
|
+
export type PlaybookSection = 'strategies_and_hard_rules' | 'useful_code_snippets' | 'troubleshooting_and_pitfalls' | 'apis_to_use';
|
|
15
|
+
/**
|
|
16
|
+
* Bootstrap processing stages (matches server v3.13.0)
|
|
17
|
+
*/
|
|
18
|
+
export type BootstrapStage = 'received' | 'analyzing' | 'synthesizing' | 'merging' | 'done' | 'error';
|
|
19
|
+
/**
|
|
20
|
+
* Human-readable labels for stages
|
|
21
|
+
*/
|
|
22
|
+
export declare const BOOTSTRAP_STAGE_LABELS: Record<BootstrapStage, string>;
|
|
23
|
+
/**
|
|
24
|
+
* Statistics returned in the done event
|
|
25
|
+
*/
|
|
26
|
+
export interface BootstrapStatistics {
|
|
27
|
+
/** Number of code blocks received */
|
|
28
|
+
blocks_received: number;
|
|
29
|
+
/** Number of patterns extracted */
|
|
30
|
+
patterns_extracted: number;
|
|
31
|
+
/** Compression percentage (can be negative if patterns > blocks) */
|
|
32
|
+
compression_percentage: number;
|
|
33
|
+
/** Patterns by section */
|
|
34
|
+
by_section: Record<PlaybookSection, number>;
|
|
35
|
+
/** Average confidence score */
|
|
36
|
+
average_confidence: number;
|
|
37
|
+
/** Analysis time in seconds */
|
|
38
|
+
analysis_time_seconds: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Data for 'received' stage
|
|
42
|
+
*/
|
|
43
|
+
export interface ReceivedStageData {
|
|
44
|
+
blocks_count?: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Data for 'analyzing' stage
|
|
48
|
+
*/
|
|
49
|
+
export interface AnalyzingStageData {
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Data for 'synthesizing' stage
|
|
53
|
+
*/
|
|
54
|
+
export interface SynthesizingStageData {
|
|
55
|
+
insights_count: number;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Data for 'merging' stage
|
|
59
|
+
*/
|
|
60
|
+
export interface MergingStageData {
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Data for 'done' stage
|
|
64
|
+
*/
|
|
65
|
+
export interface DoneStageData {
|
|
66
|
+
success: boolean;
|
|
67
|
+
bootstrap_statistics: BootstrapStatistics;
|
|
68
|
+
blocks_received: number;
|
|
69
|
+
patterns_extracted: number;
|
|
70
|
+
compression_percentage: number;
|
|
71
|
+
analysis_time_seconds: number;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Data for 'error' stage
|
|
75
|
+
*/
|
|
76
|
+
export interface ErrorStageData {
|
|
77
|
+
success: false;
|
|
78
|
+
error_code: string;
|
|
79
|
+
message: string;
|
|
80
|
+
retryable: boolean;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Union of all stage data types
|
|
84
|
+
*/
|
|
85
|
+
export type BootstrapStageData = ReceivedStageData | AnalyzingStageData | SynthesizingStageData | MergingStageData | DoneStageData | ErrorStageData | null;
|
|
86
|
+
/**
|
|
87
|
+
* Bootstrap SSE Event structure
|
|
88
|
+
*
|
|
89
|
+
* Matches ACE Server v3.13.0 StreamingEvent format.
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```typescript
|
|
93
|
+
* // Server sends:
|
|
94
|
+
* // data: {"stage": "received", "message": "Received 5 code blocks", "data": null, "timestamp": "..."}
|
|
95
|
+
*
|
|
96
|
+
* const event: BootstrapSSEEvent = JSON.parse(line.slice(6));
|
|
97
|
+
* console.log(event.stage); // 'received'
|
|
98
|
+
* console.log(event.message); // 'Received 5 code blocks'
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export interface BootstrapSSEEvent {
|
|
102
|
+
/** Current stage */
|
|
103
|
+
stage: BootstrapStage;
|
|
104
|
+
/** Human-readable status message */
|
|
105
|
+
message: string;
|
|
106
|
+
/** Stage-specific data (can be null) */
|
|
107
|
+
data: BootstrapStageData;
|
|
108
|
+
/** ISO 8601 timestamp */
|
|
109
|
+
timestamp: string;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Type guard for received stage
|
|
113
|
+
*/
|
|
114
|
+
export declare function isReceivedEvent(event: BootstrapSSEEvent): event is BootstrapSSEEvent & {
|
|
115
|
+
stage: 'received';
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* Type guard for analyzing stage
|
|
119
|
+
*/
|
|
120
|
+
export declare function isAnalyzingEvent(event: BootstrapSSEEvent): event is BootstrapSSEEvent & {
|
|
121
|
+
stage: 'analyzing';
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Type guard for synthesizing stage
|
|
125
|
+
*/
|
|
126
|
+
export declare function isSynthesizingEvent(event: BootstrapSSEEvent): event is BootstrapSSEEvent & {
|
|
127
|
+
stage: 'synthesizing';
|
|
128
|
+
data: SynthesizingStageData;
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* Type guard for merging stage
|
|
132
|
+
*/
|
|
133
|
+
export declare function isMergingEvent(event: BootstrapSSEEvent): event is BootstrapSSEEvent & {
|
|
134
|
+
stage: 'merging';
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Type guard for done stage
|
|
138
|
+
*/
|
|
139
|
+
export declare function isDoneEvent(event: BootstrapSSEEvent): event is BootstrapSSEEvent & {
|
|
140
|
+
stage: 'done';
|
|
141
|
+
data: DoneStageData;
|
|
142
|
+
};
|
|
143
|
+
/**
|
|
144
|
+
* Type guard for error stage
|
|
145
|
+
*/
|
|
146
|
+
export declare function isErrorEvent(event: BootstrapSSEEvent): event is BootstrapSSEEvent & {
|
|
147
|
+
stage: 'error';
|
|
148
|
+
data: ErrorStageData;
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* Check if event is a terminal event (done or error)
|
|
152
|
+
*/
|
|
153
|
+
export declare function isTerminalEvent(event: BootstrapSSEEvent): boolean;
|
|
154
|
+
/**
|
|
155
|
+
* @deprecated Use BootstrapStage instead
|
|
156
|
+
*/
|
|
157
|
+
export type BootstrapEventType = 'bootstrap:started' | 'bootstrap:stage' | 'bootstrap:progress' | 'bootstrap:patterns' | 'bootstrap:health' | 'bootstrap:complete' | 'bootstrap:error';
|
|
158
|
+
/**
|
|
159
|
+
* @deprecated Use isDoneEvent instead
|
|
160
|
+
*/
|
|
161
|
+
export declare function isCompleteEvent(event: BootstrapSSEEvent): boolean;
|
|
162
|
+
/**
|
|
163
|
+
* @deprecated Use isReceivedEvent instead
|
|
164
|
+
*/
|
|
165
|
+
export declare function isStartedEvent(event: BootstrapSSEEvent): boolean;
|
|
166
|
+
/**
|
|
167
|
+
* @deprecated Use isAnalyzingEvent or isSynthesizingEvent instead
|
|
168
|
+
*/
|
|
169
|
+
export declare function isStageEvent(event: BootstrapSSEEvent): boolean;
|
|
170
|
+
/**
|
|
171
|
+
* @deprecated Progress is embedded in stage messages
|
|
172
|
+
*/
|
|
173
|
+
export declare function isProgressEvent(_event: BootstrapSSEEvent): boolean;
|
|
174
|
+
/**
|
|
175
|
+
* @deprecated Patterns data is in done event
|
|
176
|
+
*/
|
|
177
|
+
export declare function isPatternsEvent(_event: BootstrapSSEEvent): boolean;
|
|
178
|
+
/**
|
|
179
|
+
* @deprecated Health data is in done event
|
|
180
|
+
*/
|
|
181
|
+
export declare function isHealthEvent(_event: BootstrapSSEEvent): boolean;
|
|
182
|
+
/**
|
|
183
|
+
* @deprecated Use DoneStageData instead
|
|
184
|
+
*/
|
|
185
|
+
export interface BootstrapCompleteData {
|
|
186
|
+
success: true;
|
|
187
|
+
sessionId: string;
|
|
188
|
+
playbook: {
|
|
189
|
+
totalPatterns: number;
|
|
190
|
+
bySection: Record<PlaybookSection, number>;
|
|
191
|
+
};
|
|
192
|
+
health: {
|
|
193
|
+
inputPatterns: number;
|
|
194
|
+
outputPatterns: number;
|
|
195
|
+
compressionRatio: number;
|
|
196
|
+
processingTime: number;
|
|
197
|
+
};
|
|
198
|
+
dnaStored: boolean;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* @deprecated Use ErrorStageData instead
|
|
202
|
+
*/
|
|
203
|
+
export interface BootstrapErrorData {
|
|
204
|
+
success: false;
|
|
205
|
+
errorCode: string;
|
|
206
|
+
message: string;
|
|
207
|
+
stage?: BootstrapStage;
|
|
208
|
+
retryable: boolean;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* @deprecated Not used in server response
|
|
212
|
+
*/
|
|
213
|
+
export interface BootstrapStartedData {
|
|
214
|
+
sessionId: string;
|
|
215
|
+
orgId: string;
|
|
216
|
+
projectId: string;
|
|
217
|
+
totalStages: number;
|
|
218
|
+
estimatedDuration?: number;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* @deprecated Progress is embedded in stage messages
|
|
222
|
+
*/
|
|
223
|
+
export interface BootstrapProgressData {
|
|
224
|
+
stage: BootstrapStage;
|
|
225
|
+
current: number;
|
|
226
|
+
total: number;
|
|
227
|
+
percentage: number;
|
|
228
|
+
currentItem?: string;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* @deprecated Patterns data is in done event
|
|
232
|
+
*/
|
|
233
|
+
export interface BootstrapPatternsData {
|
|
234
|
+
section: PlaybookSection;
|
|
235
|
+
patternsFound: number;
|
|
236
|
+
samplePatterns: string[];
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* @deprecated Health data is in done event
|
|
240
|
+
*/
|
|
241
|
+
export interface BootstrapHealthData {
|
|
242
|
+
inputPatterns: number;
|
|
243
|
+
outputPatterns: number;
|
|
244
|
+
compressionRatio: number;
|
|
245
|
+
processingTime: number;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* @deprecated Use BootstrapStageData instead
|
|
249
|
+
*/
|
|
250
|
+
export type BootstrapEventData = BootstrapStartedData | BootstrapProgressData | BootstrapPatternsData | BootstrapHealthData | BootstrapCompleteData | BootstrapErrorData;
|
|
251
|
+
//# sourceMappingURL=bootstrap-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap-events.d.ts","sourceRoot":"","sources":["../../src/types/bootstrap-events.ts"],"names":[],"mappings":"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"}
|