@hongmaple0820/scale-engine 0.19.0 → 0.20.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/README.en.md +17 -3
- package/README.md +107 -9
- package/dist/api/cli.js +988 -11
- package/dist/api/cli.js.map +1 -1
- package/dist/codegraph/CodeIntelligence.d.ts +135 -0
- package/dist/codegraph/CodeIntelligence.js +460 -0
- package/dist/codegraph/CodeIntelligence.js.map +1 -0
- package/dist/context/ContextBudget.d.ts +90 -0
- package/dist/context/ContextBudget.js +322 -0
- package/dist/context/ContextBudget.js.map +1 -0
- package/dist/eval/WorkflowEval.d.ts +161 -0
- package/dist/eval/WorkflowEval.js +379 -0
- package/dist/eval/WorkflowEval.js.map +1 -0
- package/dist/governance/GovernanceRoi.d.ts +25 -0
- package/dist/governance/GovernanceRoi.js +70 -0
- package/dist/governance/GovernanceRoi.js.map +1 -0
- package/dist/governance/ProgressiveGovernance.d.ts +22 -0
- package/dist/governance/ProgressiveGovernance.js +159 -0
- package/dist/governance/ProgressiveGovernance.js.map +1 -0
- package/dist/memory/MemoryBrain.d.ts +135 -0
- package/dist/memory/MemoryBrain.js +635 -0
- package/dist/memory/MemoryBrain.js.map +1 -0
- package/dist/memory/index.d.ts +1 -0
- package/dist/memory/index.js +1 -0
- package/dist/memory/index.js.map +1 -1
- package/dist/output/GovernanceDashboard.d.ts +57 -0
- package/dist/output/GovernanceDashboard.js +250 -0
- package/dist/output/GovernanceDashboard.js.map +1 -0
- package/dist/output/index.d.ts +2 -0
- package/dist/output/index.js +1 -0
- package/dist/output/index.js.map +1 -1
- package/dist/skills/SkillRadar.d.ts +83 -0
- package/dist/skills/SkillRadar.js +384 -0
- package/dist/skills/SkillRadar.js.map +1 -0
- package/dist/workflow/GovernanceTemplates.js +194 -194
- package/docs/CODE_INTELLIGENCE.md +138 -0
- package/docs/CONTEXT_BUDGET.md +87 -0
- package/docs/GOVERNANCE_DASHBOARD.md +69 -0
- package/docs/MEMORY_BRAIN.md +104 -0
- package/docs/README.md +16 -8
- package/docs/SKILL_RADAR.md +115 -0
- package/docs/WORKFLOW_EVAL.md +151 -0
- package/package.json +7 -1
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
export type CodeIntelligenceProviderType = 'external-cli' | 'artifact';
|
|
2
|
+
export type CodeIntelligenceCapability = 'symbols' | 'callers' | 'callees' | 'impact' | 'context' | 'summary' | 'module-map';
|
|
3
|
+
export interface CodeIntelligenceProviderConfig {
|
|
4
|
+
id: string;
|
|
5
|
+
type: CodeIntelligenceProviderType;
|
|
6
|
+
enabled?: boolean;
|
|
7
|
+
command?: string;
|
|
8
|
+
manifest?: string;
|
|
9
|
+
capabilities?: CodeIntelligenceCapability[];
|
|
10
|
+
}
|
|
11
|
+
export interface CodeIntelligenceConfig {
|
|
12
|
+
version: string;
|
|
13
|
+
providers: CodeIntelligenceProviderConfig[];
|
|
14
|
+
fallback: {
|
|
15
|
+
enabled: boolean;
|
|
16
|
+
tools: string[];
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export interface CodeIntelligenceProviderStatus {
|
|
20
|
+
id: string;
|
|
21
|
+
type: CodeIntelligenceProviderType;
|
|
22
|
+
enabled: boolean;
|
|
23
|
+
available: boolean;
|
|
24
|
+
capabilities: CodeIntelligenceCapability[];
|
|
25
|
+
reason: string;
|
|
26
|
+
}
|
|
27
|
+
export interface CodeIntelligenceStatusReport {
|
|
28
|
+
projectDir: string;
|
|
29
|
+
scaleDir: string;
|
|
30
|
+
configPath: string;
|
|
31
|
+
configExists: boolean;
|
|
32
|
+
providers: CodeIntelligenceProviderStatus[];
|
|
33
|
+
fallback: {
|
|
34
|
+
enabled: boolean;
|
|
35
|
+
tools: string[];
|
|
36
|
+
available: boolean;
|
|
37
|
+
reason: string;
|
|
38
|
+
};
|
|
39
|
+
availableProviderCount: number;
|
|
40
|
+
recommendations: string[];
|
|
41
|
+
}
|
|
42
|
+
export interface CodeGraphHit {
|
|
43
|
+
provider: string;
|
|
44
|
+
file: string;
|
|
45
|
+
symbol?: string;
|
|
46
|
+
line?: number;
|
|
47
|
+
reason: string;
|
|
48
|
+
confidence: number;
|
|
49
|
+
}
|
|
50
|
+
export interface CodeGraphRoiMetrics {
|
|
51
|
+
graphHits: number;
|
|
52
|
+
fallbackCount: number;
|
|
53
|
+
baselineFileReads: number;
|
|
54
|
+
recommendedFileReads: number;
|
|
55
|
+
fileReadsSaved: number;
|
|
56
|
+
toolCallsSaved: number;
|
|
57
|
+
}
|
|
58
|
+
export interface CodeGraphQueryReport {
|
|
59
|
+
projectDir: string;
|
|
60
|
+
generatedAt: string;
|
|
61
|
+
mode: 'query' | 'impact' | 'context' | 'roi';
|
|
62
|
+
query: string;
|
|
63
|
+
provider?: string;
|
|
64
|
+
fallbackUsed: boolean;
|
|
65
|
+
hits: CodeGraphHit[];
|
|
66
|
+
files: string[];
|
|
67
|
+
symbols: string[];
|
|
68
|
+
confidence: number;
|
|
69
|
+
roi: CodeGraphRoiMetrics;
|
|
70
|
+
warnings: string[];
|
|
71
|
+
}
|
|
72
|
+
export interface CodeGraphContextFile {
|
|
73
|
+
path: string;
|
|
74
|
+
estimatedTokens: number;
|
|
75
|
+
included: boolean;
|
|
76
|
+
reason: string;
|
|
77
|
+
}
|
|
78
|
+
export interface CodeGraphContextReport extends CodeGraphQueryReport {
|
|
79
|
+
budget: number;
|
|
80
|
+
totalEstimatedTokens: number;
|
|
81
|
+
contextFiles: CodeGraphContextFile[];
|
|
82
|
+
omitted: CodeGraphContextFile[];
|
|
83
|
+
}
|
|
84
|
+
export interface CodeGraphRoiReport {
|
|
85
|
+
projectDir: string;
|
|
86
|
+
generatedAt: string;
|
|
87
|
+
query: string;
|
|
88
|
+
provider?: string;
|
|
89
|
+
fallbackUsed: boolean;
|
|
90
|
+
metrics: CodeGraphRoiMetrics;
|
|
91
|
+
recommendation: 'keep-default' | 'keep-optional' | 'needs-evidence';
|
|
92
|
+
evidenceLevel: 'measured' | 'estimated';
|
|
93
|
+
}
|
|
94
|
+
export declare function defaultCodeIntelligenceConfig(): CodeIntelligenceConfig;
|
|
95
|
+
export declare function codeIntelligenceConfigPath(projectDir?: string, scaleDir?: string): string;
|
|
96
|
+
export declare function writeCodeIntelligenceConfig(options?: {
|
|
97
|
+
projectDir?: string;
|
|
98
|
+
scaleDir?: string;
|
|
99
|
+
force?: boolean;
|
|
100
|
+
}): {
|
|
101
|
+
path: string;
|
|
102
|
+
written: boolean;
|
|
103
|
+
config: CodeIntelligenceConfig;
|
|
104
|
+
};
|
|
105
|
+
export declare function loadCodeIntelligenceConfig(projectDir?: string, scaleDir?: string): {
|
|
106
|
+
config: CodeIntelligenceConfig;
|
|
107
|
+
path: string;
|
|
108
|
+
exists: boolean;
|
|
109
|
+
};
|
|
110
|
+
export declare function inspectCodeIntelligence(options?: {
|
|
111
|
+
projectDir?: string;
|
|
112
|
+
scaleDir?: string;
|
|
113
|
+
}): CodeIntelligenceStatusReport;
|
|
114
|
+
export declare function queryCodeGraph(options: {
|
|
115
|
+
projectDir?: string;
|
|
116
|
+
scaleDir?: string;
|
|
117
|
+
query: string;
|
|
118
|
+
}): CodeGraphQueryReport;
|
|
119
|
+
export declare function impactCodeGraph(options: {
|
|
120
|
+
projectDir?: string;
|
|
121
|
+
scaleDir?: string;
|
|
122
|
+
symbol: string;
|
|
123
|
+
}): CodeGraphQueryReport;
|
|
124
|
+
export declare function buildCodeGraphContext(options: {
|
|
125
|
+
projectDir?: string;
|
|
126
|
+
scaleDir?: string;
|
|
127
|
+
symbol: string;
|
|
128
|
+
budget?: number;
|
|
129
|
+
}): CodeGraphContextReport;
|
|
130
|
+
export declare function createCodeGraphRoiReport(options: {
|
|
131
|
+
projectDir?: string;
|
|
132
|
+
scaleDir?: string;
|
|
133
|
+
query?: string;
|
|
134
|
+
symbol?: string;
|
|
135
|
+
}): CodeGraphRoiReport;
|
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, extname, isAbsolute, join, relative, resolve } from 'node:path';
|
|
3
|
+
import { execFileSync } from 'node:child_process';
|
|
4
|
+
import { estimateTokens } from '../context/ContextBudget.js';
|
|
5
|
+
const SOURCE_EXTENSIONS = new Set([
|
|
6
|
+
'.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs',
|
|
7
|
+
'.go', '.java', '.py', '.rs', '.cs',
|
|
8
|
+
'.cpp', '.cc', '.cxx', '.c', '.h', '.hpp',
|
|
9
|
+
'.vue', '.svelte', '.sql',
|
|
10
|
+
]);
|
|
11
|
+
const IGNORED_DIRS = new Set([
|
|
12
|
+
'.git',
|
|
13
|
+
'.scale',
|
|
14
|
+
'node_modules',
|
|
15
|
+
'dist',
|
|
16
|
+
'coverage',
|
|
17
|
+
'tmp',
|
|
18
|
+
'.worktrees',
|
|
19
|
+
]);
|
|
20
|
+
export function defaultCodeIntelligenceConfig() {
|
|
21
|
+
return {
|
|
22
|
+
version: '1.0',
|
|
23
|
+
providers: [
|
|
24
|
+
{
|
|
25
|
+
id: 'codegraph',
|
|
26
|
+
type: 'external-cli',
|
|
27
|
+
enabled: true,
|
|
28
|
+
command: 'codegraph',
|
|
29
|
+
capabilities: ['symbols', 'callers', 'callees', 'impact', 'context'],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: 'graphify',
|
|
33
|
+
type: 'artifact',
|
|
34
|
+
enabled: true,
|
|
35
|
+
manifest: 'graphify-out/GRAPH_REPORT.md',
|
|
36
|
+
capabilities: ['summary', 'module-map', 'context'],
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
fallback: {
|
|
40
|
+
enabled: true,
|
|
41
|
+
tools: ['internal-scan', 'rg', 'read'],
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export function codeIntelligenceConfigPath(projectDir = process.cwd(), scaleDir = '.scale') {
|
|
46
|
+
return join(resolveScaleRoot(projectDir, scaleDir), 'code-intelligence.json');
|
|
47
|
+
}
|
|
48
|
+
export function writeCodeIntelligenceConfig(options = {}) {
|
|
49
|
+
const projectDir = resolve(options.projectDir ?? process.cwd());
|
|
50
|
+
const path = codeIntelligenceConfigPath(projectDir, options.scaleDir);
|
|
51
|
+
if (existsSync(path) && !options.force) {
|
|
52
|
+
return { path, written: false, config: loadCodeIntelligenceConfig(projectDir, options.scaleDir).config };
|
|
53
|
+
}
|
|
54
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
55
|
+
const config = defaultCodeIntelligenceConfig();
|
|
56
|
+
writeFileSync(path, JSON.stringify(config, null, 2), 'utf-8');
|
|
57
|
+
return { path, written: true, config };
|
|
58
|
+
}
|
|
59
|
+
export function loadCodeIntelligenceConfig(projectDir = process.cwd(), scaleDir = '.scale') {
|
|
60
|
+
const path = codeIntelligenceConfigPath(projectDir, scaleDir);
|
|
61
|
+
if (!existsSync(path)) {
|
|
62
|
+
return { config: defaultCodeIntelligenceConfig(), path, exists: false };
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
const parsed = JSON.parse(readFileSync(path, 'utf-8'));
|
|
66
|
+
return {
|
|
67
|
+
path,
|
|
68
|
+
exists: true,
|
|
69
|
+
config: {
|
|
70
|
+
version: parsed.version ?? '1.0',
|
|
71
|
+
providers: Array.isArray(parsed.providers) ? parsed.providers : [],
|
|
72
|
+
fallback: {
|
|
73
|
+
enabled: parsed.fallback?.enabled !== false,
|
|
74
|
+
tools: Array.isArray(parsed.fallback?.tools) ? parsed.fallback.tools.map(String) : ['internal-scan', 'rg', 'read'],
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return { config: defaultCodeIntelligenceConfig(), path, exists: true };
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export function inspectCodeIntelligence(options = {}) {
|
|
84
|
+
const projectDir = resolve(options.projectDir ?? process.cwd());
|
|
85
|
+
const loaded = loadCodeIntelligenceConfig(projectDir, options.scaleDir);
|
|
86
|
+
const providers = loaded.config.providers.map(providerStatus(projectDir));
|
|
87
|
+
const availableProviderCount = providers.filter(provider => provider.available).length;
|
|
88
|
+
const fallbackAvailable = loaded.config.fallback.enabled;
|
|
89
|
+
return {
|
|
90
|
+
projectDir,
|
|
91
|
+
scaleDir: resolveScaleRoot(projectDir, options.scaleDir),
|
|
92
|
+
configPath: loaded.path,
|
|
93
|
+
configExists: loaded.exists,
|
|
94
|
+
providers,
|
|
95
|
+
fallback: {
|
|
96
|
+
enabled: loaded.config.fallback.enabled,
|
|
97
|
+
tools: loaded.config.fallback.tools,
|
|
98
|
+
available: fallbackAvailable,
|
|
99
|
+
reason: fallbackAvailable ? 'internal source scan fallback is available' : 'fallback is disabled by policy',
|
|
100
|
+
},
|
|
101
|
+
availableProviderCount,
|
|
102
|
+
recommendations: recommendations(loaded.exists, providers, fallbackAvailable),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
export function queryCodeGraph(options) {
|
|
106
|
+
return runCodeGraphQuery({ ...options, mode: 'query' });
|
|
107
|
+
}
|
|
108
|
+
export function impactCodeGraph(options) {
|
|
109
|
+
return runCodeGraphQuery({
|
|
110
|
+
projectDir: options.projectDir,
|
|
111
|
+
scaleDir: options.scaleDir,
|
|
112
|
+
query: options.symbol,
|
|
113
|
+
mode: 'impact',
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
export function buildCodeGraphContext(options) {
|
|
117
|
+
const budget = options.budget ?? 2000;
|
|
118
|
+
const base = impactCodeGraph(options);
|
|
119
|
+
let total = 0;
|
|
120
|
+
const contextFiles = [];
|
|
121
|
+
for (const file of base.files) {
|
|
122
|
+
const absolute = resolve(options.projectDir ?? process.cwd(), file);
|
|
123
|
+
const tokens = existsSync(absolute) && statSync(absolute).isFile()
|
|
124
|
+
? estimateTokens(readFileSync(absolute, 'utf-8'))
|
|
125
|
+
: 0;
|
|
126
|
+
const included = total + tokens <= budget;
|
|
127
|
+
if (included)
|
|
128
|
+
total += tokens;
|
|
129
|
+
contextFiles.push({
|
|
130
|
+
path: file,
|
|
131
|
+
estimatedTokens: tokens,
|
|
132
|
+
included,
|
|
133
|
+
reason: included ? 'within codegraph context budget' : `omitted because it would exceed budget ${budget}`,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
...base,
|
|
138
|
+
mode: 'context',
|
|
139
|
+
budget,
|
|
140
|
+
totalEstimatedTokens: total,
|
|
141
|
+
contextFiles,
|
|
142
|
+
omitted: contextFiles.filter(file => !file.included),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
export function createCodeGraphRoiReport(options) {
|
|
146
|
+
const report = options.symbol
|
|
147
|
+
? impactCodeGraph({ projectDir: options.projectDir, scaleDir: options.scaleDir, symbol: options.symbol })
|
|
148
|
+
: queryCodeGraph({ projectDir: options.projectDir, scaleDir: options.scaleDir, query: options.query ?? '' });
|
|
149
|
+
return {
|
|
150
|
+
projectDir: report.projectDir,
|
|
151
|
+
generatedAt: new Date().toISOString(),
|
|
152
|
+
query: report.query,
|
|
153
|
+
provider: report.provider,
|
|
154
|
+
fallbackUsed: report.fallbackUsed,
|
|
155
|
+
metrics: report.roi,
|
|
156
|
+
recommendation: report.fallbackUsed ? 'needs-evidence' : 'keep-optional',
|
|
157
|
+
evidenceLevel: report.fallbackUsed ? 'estimated' : 'measured',
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
function runCodeGraphQuery(options) {
|
|
161
|
+
const projectDir = resolve(options.projectDir ?? process.cwd());
|
|
162
|
+
const query = options.query.trim();
|
|
163
|
+
const status = inspectCodeIntelligence({ projectDir, scaleDir: options.scaleDir });
|
|
164
|
+
const available = status.providers.find(provider => provider.available && provider.type === 'artifact');
|
|
165
|
+
const externalAvailable = status.providers.find(provider => provider.available && provider.type === 'external-cli');
|
|
166
|
+
const warnings = [];
|
|
167
|
+
let hits = [];
|
|
168
|
+
let provider;
|
|
169
|
+
let fallbackUsed = false;
|
|
170
|
+
if (available) {
|
|
171
|
+
const config = loadCodeIntelligenceConfig(projectDir, options.scaleDir).config;
|
|
172
|
+
const providerConfig = config.providers.find(item => item.id === available.id);
|
|
173
|
+
if (providerConfig) {
|
|
174
|
+
hits = queryArtifactProvider(projectDir, providerConfig, query, options.mode);
|
|
175
|
+
provider = providerConfig.id;
|
|
176
|
+
if (hits.length === 0)
|
|
177
|
+
warnings.push(`Provider ${providerConfig.id} returned no hits for "${query}".`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else if (externalAvailable) {
|
|
181
|
+
warnings.push(`External provider ${externalAvailable.id} is available, but no command adapter is configured yet; using fallback unless an artifact provider is configured.`);
|
|
182
|
+
}
|
|
183
|
+
if (hits.length === 0 && status.fallback.enabled) {
|
|
184
|
+
fallbackUsed = true;
|
|
185
|
+
provider = undefined;
|
|
186
|
+
hits = fallbackSourceScan(projectDir, query);
|
|
187
|
+
warnings.push('Used internal source scan fallback because no graph provider produced hits.');
|
|
188
|
+
}
|
|
189
|
+
else if (hits.length === 0) {
|
|
190
|
+
warnings.push('Fallback is disabled by code-intelligence policy.');
|
|
191
|
+
}
|
|
192
|
+
const files = unique(hits.map(hit => hit.file).filter(Boolean));
|
|
193
|
+
const symbols = unique(hits.map(hit => hit.symbol).filter((value) => Boolean(value)));
|
|
194
|
+
const roi = roiMetrics(hits.length, fallbackUsed, files.length);
|
|
195
|
+
return {
|
|
196
|
+
projectDir,
|
|
197
|
+
generatedAt: new Date().toISOString(),
|
|
198
|
+
mode: options.mode,
|
|
199
|
+
query,
|
|
200
|
+
provider,
|
|
201
|
+
fallbackUsed,
|
|
202
|
+
hits,
|
|
203
|
+
files,
|
|
204
|
+
symbols,
|
|
205
|
+
confidence: confidence(hits.length, fallbackUsed),
|
|
206
|
+
roi,
|
|
207
|
+
warnings,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
function providerStatus(projectDir) {
|
|
211
|
+
return provider => {
|
|
212
|
+
const enabled = provider.enabled !== false;
|
|
213
|
+
const capabilities = provider.capabilities ?? [];
|
|
214
|
+
if (!enabled) {
|
|
215
|
+
return { id: provider.id, type: provider.type, enabled, available: false, capabilities, reason: 'provider disabled by policy' };
|
|
216
|
+
}
|
|
217
|
+
if (provider.type === 'artifact') {
|
|
218
|
+
const manifest = provider.manifest ? resolveProjectPath(projectDir, provider.manifest) : '';
|
|
219
|
+
const available = Boolean(manifest && existsSync(manifest));
|
|
220
|
+
return {
|
|
221
|
+
id: provider.id,
|
|
222
|
+
type: provider.type,
|
|
223
|
+
enabled,
|
|
224
|
+
available,
|
|
225
|
+
capabilities,
|
|
226
|
+
reason: available ? `manifest found at ${provider.manifest}` : `manifest not found: ${provider.manifest ?? '(missing)'}`,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
if (provider.type === 'external-cli') {
|
|
230
|
+
const available = provider.command ? commandExists(provider.command) : false;
|
|
231
|
+
return {
|
|
232
|
+
id: provider.id,
|
|
233
|
+
type: provider.type,
|
|
234
|
+
enabled,
|
|
235
|
+
available,
|
|
236
|
+
capabilities,
|
|
237
|
+
reason: available ? `command available: ${provider.command}` : `command not found: ${provider.command ?? '(missing)'}`,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
return { id: provider.id, type: provider.type, enabled, available: false, capabilities, reason: 'unknown provider type' };
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
function queryArtifactProvider(projectDir, provider, query, mode) {
|
|
244
|
+
if (!provider.manifest)
|
|
245
|
+
return [];
|
|
246
|
+
const manifest = resolveProjectPath(projectDir, provider.manifest);
|
|
247
|
+
if (!existsSync(manifest))
|
|
248
|
+
return [];
|
|
249
|
+
const content = readFileSync(manifest, 'utf-8');
|
|
250
|
+
if (extname(manifest).toLowerCase() === '.json') {
|
|
251
|
+
try {
|
|
252
|
+
return queryJsonManifest(projectDir, provider.id, content, query, mode);
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
return [];
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return queryTextManifest(projectDir, provider.id, provider.manifest, content, query);
|
|
259
|
+
}
|
|
260
|
+
function queryJsonManifest(projectDir, provider, content, query, mode) {
|
|
261
|
+
const parsed = JSON.parse(content);
|
|
262
|
+
const symbols = Array.isArray(parsed.symbols) ? parsed.symbols : [];
|
|
263
|
+
const files = Array.isArray(parsed.files) ? parsed.files : [];
|
|
264
|
+
const symbolByName = new Map(symbols.map(symbol => [String(symbol.name), symbol]));
|
|
265
|
+
const hits = [];
|
|
266
|
+
const lower = query.toLowerCase();
|
|
267
|
+
for (const symbol of symbols) {
|
|
268
|
+
const name = String(symbol.name ?? '');
|
|
269
|
+
const file = normalizeManifestPath(symbol.file ?? symbol.path);
|
|
270
|
+
if (!name || !file)
|
|
271
|
+
continue;
|
|
272
|
+
if (name.toLowerCase().includes(lower) || file.toLowerCase().includes(lower)) {
|
|
273
|
+
hits.push({ provider, file, symbol: name, reason: 'symbol matched graph manifest', confidence: 0.86 });
|
|
274
|
+
if (mode === 'impact') {
|
|
275
|
+
for (const ref of relatedFiles(symbol, symbolByName)) {
|
|
276
|
+
hits.push({ provider, file: ref, symbol: name, reason: 'related caller/callee from graph manifest', confidence: 0.78 });
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
for (const file of files) {
|
|
282
|
+
const path = normalizeManifestPath(file.path ?? file.file);
|
|
283
|
+
if (!path)
|
|
284
|
+
continue;
|
|
285
|
+
const fileSymbols = stringifyList(file.symbols);
|
|
286
|
+
if (path.toLowerCase().includes(lower) || fileSymbols.toLowerCase().includes(lower)) {
|
|
287
|
+
hits.push({ provider, file: path, reason: 'file matched graph manifest', confidence: 0.7 });
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return dedupeHits(hits.filter(hit => existsOrLooksLikePath(projectDir, hit.file)));
|
|
291
|
+
}
|
|
292
|
+
function queryTextManifest(projectDir, provider, manifestPath, content, query) {
|
|
293
|
+
const lower = query.toLowerCase();
|
|
294
|
+
return content.split(/\r?\n/).flatMap((line, index) => {
|
|
295
|
+
if (!line.toLowerCase().includes(lower))
|
|
296
|
+
return [];
|
|
297
|
+
return [{
|
|
298
|
+
provider,
|
|
299
|
+
file: normalizePath(manifestPath),
|
|
300
|
+
line: index + 1,
|
|
301
|
+
reason: 'text graph artifact matched query',
|
|
302
|
+
confidence: 0.45,
|
|
303
|
+
}];
|
|
304
|
+
}).filter(hit => existsOrLooksLikePath(projectDir, hit.file)).slice(0, 30);
|
|
305
|
+
}
|
|
306
|
+
function fallbackSourceScan(projectDir, query) {
|
|
307
|
+
if (!query)
|
|
308
|
+
return [];
|
|
309
|
+
const files = sourceFiles(projectDir);
|
|
310
|
+
const lower = query.toLowerCase();
|
|
311
|
+
const hits = [];
|
|
312
|
+
for (const file of files) {
|
|
313
|
+
const content = safeRead(file);
|
|
314
|
+
const lines = content.split(/\r?\n/);
|
|
315
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
316
|
+
if (!lines[i].toLowerCase().includes(lower))
|
|
317
|
+
continue;
|
|
318
|
+
hits.push({
|
|
319
|
+
provider: 'fallback-internal-scan',
|
|
320
|
+
file: normalizePath(relative(projectDir, file)),
|
|
321
|
+
line: i + 1,
|
|
322
|
+
reason: 'fallback source text match',
|
|
323
|
+
confidence: 0.35,
|
|
324
|
+
});
|
|
325
|
+
break;
|
|
326
|
+
}
|
|
327
|
+
if (hits.length >= 30)
|
|
328
|
+
break;
|
|
329
|
+
}
|
|
330
|
+
return hits;
|
|
331
|
+
}
|
|
332
|
+
function sourceFiles(projectDir) {
|
|
333
|
+
const files = [];
|
|
334
|
+
walk(projectDir, projectDir, files);
|
|
335
|
+
return files;
|
|
336
|
+
}
|
|
337
|
+
function walk(dir, projectDir, files) {
|
|
338
|
+
const base = normalizePath(relative(projectDir, dir)).split('/').pop() ?? '';
|
|
339
|
+
if (IGNORED_DIRS.has(base))
|
|
340
|
+
return;
|
|
341
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
342
|
+
const absolute = join(dir, entry.name);
|
|
343
|
+
if (entry.isDirectory()) {
|
|
344
|
+
if (!IGNORED_DIRS.has(entry.name))
|
|
345
|
+
walk(absolute, projectDir, files);
|
|
346
|
+
continue;
|
|
347
|
+
}
|
|
348
|
+
if (entry.isFile() && SOURCE_EXTENSIONS.has(extname(entry.name).toLowerCase()))
|
|
349
|
+
files.push(absolute);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
function relatedFiles(symbol, symbolByName) {
|
|
353
|
+
const refs = [
|
|
354
|
+
...stringifyArray(symbol.callers),
|
|
355
|
+
...stringifyArray(symbol.callees),
|
|
356
|
+
...stringifyArray(symbol.dependencies),
|
|
357
|
+
...stringifyArray(symbol.dependents),
|
|
358
|
+
];
|
|
359
|
+
return unique(refs.flatMap(ref => {
|
|
360
|
+
const asPath = normalizeManifestPath(ref);
|
|
361
|
+
if (asPath && hasFileExtension(asPath))
|
|
362
|
+
return [asPath];
|
|
363
|
+
const related = symbolByName.get(ref);
|
|
364
|
+
const relatedPath = normalizeManifestPath(related?.file ?? related?.path);
|
|
365
|
+
return relatedPath ? [relatedPath] : [];
|
|
366
|
+
}));
|
|
367
|
+
}
|
|
368
|
+
function stringifyArray(value) {
|
|
369
|
+
return Array.isArray(value) ? value.map(item => {
|
|
370
|
+
if (typeof item === 'string')
|
|
371
|
+
return item;
|
|
372
|
+
if (item && typeof item === 'object') {
|
|
373
|
+
const record = item;
|
|
374
|
+
return String(record.file ?? record.path ?? record.name ?? '');
|
|
375
|
+
}
|
|
376
|
+
return '';
|
|
377
|
+
}).filter(Boolean) : [];
|
|
378
|
+
}
|
|
379
|
+
function stringifyList(value) {
|
|
380
|
+
return stringifyArray(value).join(' ');
|
|
381
|
+
}
|
|
382
|
+
function normalizeManifestPath(value) {
|
|
383
|
+
if (!value)
|
|
384
|
+
return '';
|
|
385
|
+
return normalizePath(String(value).trim());
|
|
386
|
+
}
|
|
387
|
+
function existsOrLooksLikePath(projectDir, file) {
|
|
388
|
+
return hasFileExtension(file) || existsSync(resolve(projectDir, file));
|
|
389
|
+
}
|
|
390
|
+
function hasFileExtension(path) {
|
|
391
|
+
return Boolean(extname(path));
|
|
392
|
+
}
|
|
393
|
+
function roiMetrics(hitCount, fallbackUsed, fileCount) {
|
|
394
|
+
const baselineFileReads = Math.max(fileCount + 4, hitCount, 1);
|
|
395
|
+
const recommendedFileReads = fileCount;
|
|
396
|
+
return {
|
|
397
|
+
graphHits: fallbackUsed ? 0 : hitCount,
|
|
398
|
+
fallbackCount: fallbackUsed ? 1 : 0,
|
|
399
|
+
baselineFileReads,
|
|
400
|
+
recommendedFileReads,
|
|
401
|
+
fileReadsSaved: Math.max(0, baselineFileReads - recommendedFileReads),
|
|
402
|
+
toolCallsSaved: Math.max(0, (fallbackUsed ? 1 : 3) - 1),
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
function confidence(hitCount, fallbackUsed) {
|
|
406
|
+
if (hitCount === 0)
|
|
407
|
+
return 0;
|
|
408
|
+
return fallbackUsed ? 0.35 : Math.min(0.9, 0.55 + hitCount * 0.05);
|
|
409
|
+
}
|
|
410
|
+
function recommendations(configExists, providers, fallbackAvailable) {
|
|
411
|
+
const output = [];
|
|
412
|
+
if (!configExists)
|
|
413
|
+
output.push('Run scale codegraph init to create .scale/code-intelligence.json.');
|
|
414
|
+
if (providers.every(provider => !provider.available))
|
|
415
|
+
output.push('No graph provider is available; exploration will use explicit fallback.');
|
|
416
|
+
if (!fallbackAvailable)
|
|
417
|
+
output.push('Fallback is disabled; missing providers may leave code intelligence unavailable.');
|
|
418
|
+
return output;
|
|
419
|
+
}
|
|
420
|
+
function commandExists(command) {
|
|
421
|
+
try {
|
|
422
|
+
const lookup = process.platform === 'win32' ? 'where' : 'which';
|
|
423
|
+
execFileSync(lookup, [command], { stdio: 'ignore' });
|
|
424
|
+
return true;
|
|
425
|
+
}
|
|
426
|
+
catch {
|
|
427
|
+
return false;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
function resolveScaleRoot(projectDir, scaleDir = '.scale') {
|
|
431
|
+
return isAbsolute(scaleDir) ? scaleDir : resolve(projectDir, scaleDir);
|
|
432
|
+
}
|
|
433
|
+
function resolveProjectPath(projectDir, path) {
|
|
434
|
+
return isAbsolute(path) ? path : resolve(projectDir, path);
|
|
435
|
+
}
|
|
436
|
+
function safeRead(path) {
|
|
437
|
+
try {
|
|
438
|
+
return readFileSync(path, 'utf-8');
|
|
439
|
+
}
|
|
440
|
+
catch {
|
|
441
|
+
return '';
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
function normalizePath(path) {
|
|
445
|
+
return path.replace(/\\/g, '/');
|
|
446
|
+
}
|
|
447
|
+
function unique(values) {
|
|
448
|
+
return Array.from(new Set(values.filter(Boolean).map(normalizePath)));
|
|
449
|
+
}
|
|
450
|
+
function dedupeHits(hits) {
|
|
451
|
+
const seen = new Set();
|
|
452
|
+
return hits.filter(hit => {
|
|
453
|
+
const key = `${hit.provider}:${hit.file}:${hit.symbol ?? ''}:${hit.line ?? ''}:${hit.reason}`;
|
|
454
|
+
if (seen.has(key))
|
|
455
|
+
return false;
|
|
456
|
+
seen.add(key);
|
|
457
|
+
return true;
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
//# sourceMappingURL=CodeIntelligence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeIntelligence.js","sourceRoot":"","sources":["../../src/codegraph/CodeIntelligence.ts"],"names":[],"mappings":"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"}
|