@hongmaple0820/scale-engine 0.19.0 → 0.21.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.
Files changed (52) hide show
  1. package/README.en.md +17 -3
  2. package/README.md +143 -9
  3. package/dist/api/cli.js +1187 -30
  4. package/dist/api/cli.js.map +1 -1
  5. package/dist/codegraph/CodeIntelligence.d.ts +135 -0
  6. package/dist/codegraph/CodeIntelligence.js +460 -0
  7. package/dist/codegraph/CodeIntelligence.js.map +1 -0
  8. package/dist/context/ContextBudget.d.ts +90 -0
  9. package/dist/context/ContextBudget.js +322 -0
  10. package/dist/context/ContextBudget.js.map +1 -0
  11. package/dist/eval/WorkflowEval.d.ts +161 -0
  12. package/dist/eval/WorkflowEval.js +379 -0
  13. package/dist/eval/WorkflowEval.js.map +1 -0
  14. package/dist/governance/GovernanceRoi.d.ts +25 -0
  15. package/dist/governance/GovernanceRoi.js +70 -0
  16. package/dist/governance/GovernanceRoi.js.map +1 -0
  17. package/dist/governance/ProgressiveGovernance.d.ts +22 -0
  18. package/dist/governance/ProgressiveGovernance.js +159 -0
  19. package/dist/governance/ProgressiveGovernance.js.map +1 -0
  20. package/dist/memory/MemoryBrain.d.ts +135 -0
  21. package/dist/memory/MemoryBrain.js +635 -0
  22. package/dist/memory/MemoryBrain.js.map +1 -0
  23. package/dist/memory/index.d.ts +1 -0
  24. package/dist/memory/index.js +1 -0
  25. package/dist/memory/index.js.map +1 -1
  26. package/dist/output/GovernanceDashboard.d.ts +57 -0
  27. package/dist/output/GovernanceDashboard.js +250 -0
  28. package/dist/output/GovernanceDashboard.js.map +1 -0
  29. package/dist/output/index.d.ts +2 -0
  30. package/dist/output/index.js +1 -0
  31. package/dist/output/index.js.map +1 -1
  32. package/dist/skills/SkillRadar.d.ts +83 -0
  33. package/dist/skills/SkillRadar.js +384 -0
  34. package/dist/skills/SkillRadar.js.map +1 -0
  35. package/dist/workflow/GovernanceTemplates.js +220 -194
  36. package/dist/workflow/GovernanceTemplates.js.map +1 -1
  37. package/dist/workflow/UpgradeManager.d.ts +140 -0
  38. package/dist/workflow/UpgradeManager.js +434 -0
  39. package/dist/workflow/UpgradeManager.js.map +1 -0
  40. package/docs/CODE_INTELLIGENCE.md +138 -0
  41. package/docs/CONTEXT_BUDGET.md +87 -0
  42. package/docs/GOVERNANCE_DASHBOARD.md +69 -0
  43. package/docs/MEMORY_BRAIN.md +104 -0
  44. package/docs/README.md +17 -8
  45. package/docs/SKILL_RADAR.md +115 -0
  46. package/docs/WORKFLOW_EVAL.md +151 -0
  47. package/docs/start/README.md +5 -1
  48. package/examples/demo-projects/agent-governance-demo/CONTEXT.md +14 -0
  49. package/examples/demo-projects/agent-governance-demo/README.md +32 -21
  50. package/examples/demo-projects/agent-governance-demo/docs/CONTEXT-MAP.md +14 -0
  51. package/examples/demo-projects/agent-governance-demo/package.json +6 -1
  52. package/package.json +7 -1
@@ -0,0 +1,434 @@
1
+ import { copyFileSync, existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'node:fs';
2
+ import { dirname, join, resolve } from 'node:path';
3
+ import { TOOL_CAPABILITY_CATALOG } from '../tools/ToolCapabilityRegistry.js';
4
+ import { SCALE_ENGINE_VERSION } from '../version.js';
5
+ import { computeGovernanceDrift, readGovernanceLock } from './GovernanceLock.js';
6
+ import { listGovernanceTemplatePacks, resolveGovernanceTemplatePack } from './GovernanceTemplatePacks.js';
7
+ import { writeGovernanceTemplates } from './GovernanceTemplates.js';
8
+ export function createUpgradeCheckReport(options = {}) {
9
+ const projectDir = resolve(options.projectDir ?? process.cwd());
10
+ const lock = readGovernanceLock(projectDir);
11
+ const drift = computeGovernanceDrift(projectDir);
12
+ const latestScaleVersion = normalizeTargetVersion(options.targetScaleVersion);
13
+ const pack = lock ? resolveGovernanceTemplatePack(lock.pack) : null;
14
+ const scaleUpToDate = Boolean(lock && lock.scaleVersion === latestScaleVersion);
15
+ const packUpToDate = Boolean(lock && pack && lock.packVersion === pack.version);
16
+ const generatedTotal = drift.clean.length + drift.changed.length + drift.missing.length;
17
+ const thirdParty = createThirdPartyUpdateReport();
18
+ const status = resolveUpgradeStatus({
19
+ hasLock: Boolean(lock),
20
+ hasLocalChanges: drift.changed.length > 0,
21
+ hasMissingFiles: drift.missing.length > 0,
22
+ scaleUpToDate,
23
+ packUpToDate,
24
+ });
25
+ return {
26
+ version: 1,
27
+ projectDir,
28
+ status,
29
+ scaleEngine: {
30
+ currentVersion: lock?.scaleVersion ?? null,
31
+ latestVersion: latestScaleVersion,
32
+ upToDate: scaleUpToDate,
33
+ },
34
+ governanceLock: {
35
+ exists: Boolean(lock),
36
+ path: join(projectDir, '.scale', 'governance.lock.json'),
37
+ },
38
+ governancePack: {
39
+ id: lock?.pack ?? null,
40
+ currentVersion: lock?.packVersion ?? null,
41
+ latestVersion: pack?.version ?? null,
42
+ upToDate: packUpToDate,
43
+ },
44
+ generatedFiles: {
45
+ total: generatedTotal,
46
+ clean: drift.clean.length,
47
+ changed: drift.changed.length,
48
+ missing: drift.missing.length,
49
+ },
50
+ drift,
51
+ thirdParty,
52
+ recommendedCommands: [
53
+ 'scale upgrade plan --dir .',
54
+ 'scale tools outdated --dir .',
55
+ 'scale skill outdated --dir .',
56
+ 'scale preflight --preflight-profile quick',
57
+ ],
58
+ };
59
+ }
60
+ export function createUpgradePlanReport(options = {}) {
61
+ const check = createUpgradeCheckReport(options);
62
+ const blockers = [];
63
+ const steps = [];
64
+ if (!check.governanceLock.exists) {
65
+ blockers.push({
66
+ code: 'missing-governance-lock',
67
+ message: 'No governance lock exists; SCALE cannot determine which generated files are safe to upgrade.',
68
+ });
69
+ steps.push({
70
+ action: 'initialize-governance-lock',
71
+ risk: 'medium',
72
+ reason: 'Create a lock before upgrading generated governance assets.',
73
+ command: 'scale init --governance-pack standard',
74
+ });
75
+ }
76
+ if (!check.scaleEngine.upToDate && check.scaleEngine.currentVersion) {
77
+ steps.push({
78
+ action: 'upgrade-scale-engine',
79
+ risk: 'low',
80
+ reason: `SCALE Engine changed from ${check.scaleEngine.currentVersion} to ${check.scaleEngine.latestVersion}.`,
81
+ command: 'npm install -g @hongmaple0820/scale-engine',
82
+ });
83
+ }
84
+ if (!check.governancePack.upToDate && check.governancePack.id) {
85
+ steps.push({
86
+ action: 'upgrade-governance-pack',
87
+ risk: 'medium',
88
+ reason: `Governance pack ${check.governancePack.id} changed from v${check.governancePack.currentVersion} to v${check.governancePack.latestVersion}.`,
89
+ command: `scale init --governance-pack ${check.governancePack.id}`,
90
+ });
91
+ }
92
+ for (const entry of check.drift.missing) {
93
+ steps.push({
94
+ action: 'restore-missing-generated-file',
95
+ path: entry.path,
96
+ risk: 'low',
97
+ reason: 'The file is tracked by the governance lock but is missing locally.',
98
+ });
99
+ }
100
+ for (const entry of check.drift.changed) {
101
+ blockers.push({
102
+ code: 'local-generated-file-changed',
103
+ path: entry.path,
104
+ message: 'Generated governance file has local edits and needs a three-way/manual review before upgrade.',
105
+ });
106
+ steps.push({
107
+ action: 'review-local-change',
108
+ path: entry.path,
109
+ risk: 'medium',
110
+ reason: 'Local edits must be preserved or intentionally replaced.',
111
+ });
112
+ }
113
+ const thirdPartyReview = check.thirdParty.entries.filter(entry => entry.updatePolicy !== 'check-only');
114
+ for (const entry of thirdPartyReview) {
115
+ steps.push({
116
+ action: 'review-third-party-capability',
117
+ risk: entry.trust === 'high-risk' ? 'high' : 'medium',
118
+ reason: `${entry.name} updates require ${entry.updatePolicy}; SCALE never auto-installs third-party capabilities.`,
119
+ });
120
+ }
121
+ steps.push({
122
+ action: 'run-preflight',
123
+ risk: 'low',
124
+ reason: 'Validate the project after any accepted upgrade.',
125
+ command: 'scale preflight --preflight-profile quick',
126
+ });
127
+ return {
128
+ version: 1,
129
+ projectDir: check.projectDir,
130
+ status: check.status,
131
+ applyMode: blockers.length === 0 ? 'safe' : 'manual-review',
132
+ blockers,
133
+ steps,
134
+ check,
135
+ recommendedCommands: [
136
+ 'scale upgrade check --dir .',
137
+ 'scale upgrade plan --dir . --html',
138
+ 'scale preflight --preflight-profile quick',
139
+ ],
140
+ };
141
+ }
142
+ export function applyUpgradePlan(options = {}) {
143
+ const projectDir = resolve(options.projectDir ?? process.cwd());
144
+ const plan = createUpgradePlanReport(options);
145
+ if (!options.confirm) {
146
+ return upgradeApplyResult(projectDir, plan, false, false, 'Review scale upgrade plan first, then rerun with --confirm.', []);
147
+ }
148
+ if (plan.applyMode !== 'safe') {
149
+ return upgradeApplyResult(projectDir, plan, false, false, 'Upgrade requires manual review because generated files have local changes or the lock is missing.', []);
150
+ }
151
+ if (!plan.check.governanceLock.exists || !plan.check.governancePack.id) {
152
+ return upgradeApplyResult(projectDir, plan, false, false, 'Cannot apply without a governance lock and pack id.', []);
153
+ }
154
+ if (!plan.check.governancePack.upToDate) {
155
+ return upgradeApplyResult(projectDir, plan, false, false, 'Governance pack version changes require manual review before automatic apply.', []);
156
+ }
157
+ const missingFiles = plan.check.drift.missing.map(entry => entry.path);
158
+ const shouldRefreshLock = !plan.check.scaleEngine.upToDate || missingFiles.length > 0;
159
+ if (!shouldRefreshLock) {
160
+ return upgradeApplyResult(projectDir, plan, true, false, 'No safe upgrade changes were needed.', []);
161
+ }
162
+ const backup = createUpgradeBackup(projectDir, uniqueStrings([...missingFiles, '.scale/governance.lock.json']));
163
+ const result = writeGovernanceTemplates(projectDir, { pack: plan.check.governancePack.id });
164
+ const createdFiles = result.created
165
+ .map(path => normalizeProjectRelativePath(projectDir, path))
166
+ .filter((path) => Boolean(path));
167
+ mergeCreatedFilesIntoBackup(backup.manifestPath, createdFiles);
168
+ const changedFiles = uniqueStrings([
169
+ ...missingFiles.filter(path => existsSync(join(projectDir, path))),
170
+ ...createdFiles,
171
+ '.scale/governance.lock.json',
172
+ ]);
173
+ return {
174
+ version: 1,
175
+ projectDir,
176
+ ok: true,
177
+ applied: changedFiles.length > 0,
178
+ reason: changedFiles.length > 0 ? 'Safe upgrade changes were applied.' : 'No safe upgrade changes were needed.',
179
+ changedFiles,
180
+ backup,
181
+ plan: createUpgradePlanReport(options),
182
+ };
183
+ }
184
+ export function rollbackLatestUpgrade(options = {}) {
185
+ const projectDir = resolve(options.projectDir ?? process.cwd());
186
+ const backup = latestUpgradeBackup(projectDir);
187
+ if (!backup) {
188
+ return {
189
+ version: 1,
190
+ projectDir,
191
+ ok: false,
192
+ applied: false,
193
+ reason: 'No SCALE-managed upgrade backup was found.',
194
+ restoredFiles: [],
195
+ };
196
+ }
197
+ const manifest = JSON.parse(readFileSync(backup.manifestPath, 'utf-8'));
198
+ const restoredFiles = [];
199
+ for (const entry of manifest.files) {
200
+ const target = join(projectDir, entry.path);
201
+ if (entry.existed && entry.backupPath) {
202
+ mkdirSync(dirname(target), { recursive: true });
203
+ copyFileSync(join(backup.dir, entry.backupPath), target);
204
+ }
205
+ else {
206
+ rmSync(target, { force: true, recursive: true });
207
+ }
208
+ restoredFiles.push(entry.path);
209
+ }
210
+ return {
211
+ version: 1,
212
+ projectDir,
213
+ ok: true,
214
+ applied: true,
215
+ reason: 'Latest SCALE-managed upgrade backup was rolled back.',
216
+ backup,
217
+ restoredFiles: uniqueStrings(restoredFiles),
218
+ };
219
+ }
220
+ export function createThirdPartyUpdateReport(category) {
221
+ const selectedCategories = Array.isArray(category) ? new Set(category) : category ? new Set([category]) : undefined;
222
+ const entries = TOOL_CAPABILITY_CATALOG
223
+ .filter(tool => !selectedCategories || selectedCategories.has(tool.category))
224
+ .map(tool => {
225
+ const trust = classifyThirdPartyTrust(tool.category, tool.source);
226
+ const updatePolicy = updatePolicyForTrust(trust);
227
+ return {
228
+ id: tool.id,
229
+ name: tool.name,
230
+ category: tool.category,
231
+ source: tool.source,
232
+ trust,
233
+ updatePolicy,
234
+ installPolicy: 'never-auto-install',
235
+ latestVersion: 'unknown',
236
+ reason: updateReason(tool.category, trust),
237
+ };
238
+ });
239
+ const trusted = entries.filter(entry => entry.trust === 'trusted').length;
240
+ const community = entries.filter(entry => entry.trust === 'community').length;
241
+ const highRisk = entries.filter(entry => entry.trust === 'high-risk').length;
242
+ const blocked = entries.filter(entry => entry.updatePolicy === 'blocked').length;
243
+ const reviewRequired = entries.filter(entry => entry.updatePolicy !== 'check-only').length;
244
+ return {
245
+ version: 1,
246
+ policy: 'check-only',
247
+ summary: {
248
+ total: entries.length,
249
+ trusted,
250
+ community,
251
+ highRisk,
252
+ reviewRequired,
253
+ blocked,
254
+ },
255
+ reviewRequired,
256
+ entries,
257
+ };
258
+ }
259
+ function upgradeApplyResult(projectDir, plan, ok, applied, reason, changedFiles) {
260
+ return {
261
+ version: 1,
262
+ projectDir,
263
+ ok,
264
+ applied,
265
+ reason,
266
+ changedFiles,
267
+ plan,
268
+ };
269
+ }
270
+ function createUpgradeBackup(projectDir, relativePaths) {
271
+ const id = `upgrade-${new Date().toISOString().replace(/[:.]/g, '-')}`;
272
+ const dir = join(projectDir, '.scale', 'backups', id);
273
+ const filesDir = join(dir, 'files');
274
+ mkdirSync(filesDir, { recursive: true });
275
+ const manifest = {
276
+ version: 1,
277
+ id,
278
+ createdAt: new Date().toISOString(),
279
+ projectDir,
280
+ files: uniqueStrings(relativePaths).map(path => {
281
+ const target = join(projectDir, path);
282
+ if (!existsSync(target))
283
+ return { path, existed: false };
284
+ const backupPath = join('files', path.replace(/^[\\/]+/, '').replace(/\\/g, '/'));
285
+ const backupTarget = join(dir, backupPath);
286
+ mkdirSync(dirname(backupTarget), { recursive: true });
287
+ copyFileSync(target, backupTarget);
288
+ return { path, existed: true, backupPath };
289
+ }),
290
+ };
291
+ const manifestPath = join(dir, 'manifest.json');
292
+ writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\n', 'utf-8');
293
+ return { id, dir, manifestPath };
294
+ }
295
+ function mergeCreatedFilesIntoBackup(manifestPath, createdFiles) {
296
+ const manifest = JSON.parse(readFileSync(manifestPath, 'utf-8'));
297
+ const existing = new Set(manifest.files.map(file => file.path));
298
+ for (const path of createdFiles) {
299
+ if (!existing.has(path)) {
300
+ manifest.files.push({ path, existed: false });
301
+ existing.add(path);
302
+ }
303
+ }
304
+ writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\n', 'utf-8');
305
+ }
306
+ function latestUpgradeBackup(projectDir) {
307
+ const backupsDir = join(projectDir, '.scale', 'backups');
308
+ if (!existsSync(backupsDir))
309
+ return null;
310
+ const candidates = readdirSync(backupsDir, { withFileTypes: true })
311
+ .filter(entry => entry.isDirectory() && entry.name.startsWith('upgrade-'))
312
+ .map(entry => ({
313
+ id: entry.name,
314
+ dir: join(backupsDir, entry.name),
315
+ manifestPath: join(backupsDir, entry.name, 'manifest.json'),
316
+ }))
317
+ .filter(entry => existsSync(entry.manifestPath))
318
+ .sort((a, b) => a.id.localeCompare(b.id));
319
+ return candidates.at(-1) ?? null;
320
+ }
321
+ function normalizeProjectRelativePath(projectDir, path) {
322
+ const normalizedProject = resolve(projectDir).replace(/\\/g, '/');
323
+ const normalizedPath = resolve(path).replace(/\\/g, '/');
324
+ if (!normalizedPath.startsWith(`${normalizedProject}/`))
325
+ return null;
326
+ return normalizedPath.slice(normalizedProject.length + 1);
327
+ }
328
+ function uniqueStrings(items) {
329
+ return [...new Set(items)];
330
+ }
331
+ export function writeUpgradePlanHtml(report, outputPath) {
332
+ const target = outputPath ?? join(report.projectDir, '.scale', 'reports', 'upgrade-plan.html');
333
+ mkdirSync(dirname(target), { recursive: true });
334
+ writeFileSync(target, renderUpgradePlanHtml(report), 'utf-8');
335
+ return target;
336
+ }
337
+ export function listAvailableGovernancePackVersions() {
338
+ return listGovernanceTemplatePacks().map(pack => ({ id: pack.id, version: pack.version }));
339
+ }
340
+ function resolveUpgradeStatus(input) {
341
+ if (!input.hasLock)
342
+ return 'missing-lock';
343
+ if (input.hasLocalChanges)
344
+ return 'local-changes';
345
+ if (input.hasMissingFiles || !input.scaleUpToDate || !input.packUpToDate)
346
+ return 'updates-available';
347
+ return 'clean';
348
+ }
349
+ function normalizeTargetVersion(version) {
350
+ if (!version || version === 'latest')
351
+ return SCALE_ENGINE_VERSION;
352
+ return version;
353
+ }
354
+ function classifyThirdPartyTrust(category, source) {
355
+ if (category === 'desktop')
356
+ return 'high-risk';
357
+ if (!source)
358
+ return 'community';
359
+ if (source.includes('anthropics/') ||
360
+ source.includes('playwright.dev') ||
361
+ source.includes('openai/') ||
362
+ source.includes('google-gemini/') ||
363
+ source.includes('vercel-labs/'))
364
+ return 'trusted';
365
+ return 'community';
366
+ }
367
+ function updatePolicyForTrust(trust) {
368
+ if (trust === 'high-risk')
369
+ return 'blocked';
370
+ if (trust === 'community')
371
+ return 'manual-review';
372
+ return 'check-only';
373
+ }
374
+ function updateReason(category, trust) {
375
+ if (trust === 'high-risk')
376
+ return 'High-privilege desktop automation must be reviewed and confirmed by a human.';
377
+ if (trust === 'community')
378
+ return 'Community source requires source, script, and permission review before update.';
379
+ if (category === 'mcp')
380
+ return 'MCP updates must still be checked for command and permission changes.';
381
+ return 'Trusted source; check version and changelog before applying.';
382
+ }
383
+ function renderUpgradePlanHtml(report) {
384
+ const rows = report.steps.map(step => `
385
+ <tr>
386
+ <td>${escapeHtml(step.action)}</td>
387
+ <td>${escapeHtml(step.path ?? '')}</td>
388
+ <td>${escapeHtml(step.risk)}</td>
389
+ <td>${escapeHtml(step.reason)}</td>
390
+ <td><code>${escapeHtml(step.command ?? '')}</code></td>
391
+ </tr>`).join('');
392
+ const blockers = report.blockers.length
393
+ ? report.blockers.map(blocker => `<li><strong>${escapeHtml(blocker.code)}</strong> ${escapeHtml(blocker.path ?? '')} ${escapeHtml(blocker.message)}</li>`).join('')
394
+ : '<li>No blockers detected.</li>';
395
+ return `<!doctype html>
396
+ <html lang="zh-CN">
397
+ <head>
398
+ <meta charset="utf-8" />
399
+ <title>SCALE Upgrade Plan</title>
400
+ <style>
401
+ body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; margin: 32px; color: #1f2937; }
402
+ h1 { margin-bottom: 8px; }
403
+ table { border-collapse: collapse; width: 100%; margin-top: 16px; }
404
+ th, td { border: 1px solid #d1d5db; padding: 8px; text-align: left; vertical-align: top; }
405
+ th { background: #f3f4f6; }
406
+ code { white-space: pre-wrap; }
407
+ .badge { display: inline-block; padding: 2px 8px; border-radius: 999px; background: #eef2ff; }
408
+ </style>
409
+ </head>
410
+ <body>
411
+ <h1>SCALE Upgrade Plan</h1>
412
+ <p>Project: <code>${escapeHtml(report.projectDir)}</code></p>
413
+ <p>Status: <span class="badge">${escapeHtml(report.status)}</span> Apply mode: <span class="badge">${escapeHtml(report.applyMode)}</span></p>
414
+ <h2>Blockers</h2>
415
+ <ul>${blockers}</ul>
416
+ <h2>Steps</h2>
417
+ <table>
418
+ <thead><tr><th>Action</th><th>Path</th><th>Risk</th><th>Reason</th><th>Command</th></tr></thead>
419
+ <tbody>${rows}</tbody>
420
+ </table>
421
+ <h2>Third-party Policy</h2>
422
+ <p>Policy: ${escapeHtml(report.check.thirdParty.policy)}. Review required: ${report.check.thirdParty.reviewRequired}.</p>
423
+ </body>
424
+ </html>
425
+ `;
426
+ }
427
+ function escapeHtml(value) {
428
+ return value
429
+ .replace(/&/g, '&amp;')
430
+ .replace(/</g, '&lt;')
431
+ .replace(/>/g, '&gt;')
432
+ .replace(/"/g, '&quot;');
433
+ }
434
+ //# sourceMappingURL=UpgradeManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpgradeManager.js","sourceRoot":"","sources":["../../src/workflow/UpgradeManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,138 @@
1
+ # Code Intelligence
2
+
3
+ SCALE uses an adapter-first code intelligence layer. It can consume external code graph tools when they exist, read graph artifacts such as Graphify outputs, and fall back to a scoped internal source scan when no provider is available.
4
+
5
+ The goal is not to replace IDE indexing. The goal is to make exploration measurable:
6
+
7
+ - which provider answered the query
8
+ - whether fallback was used
9
+ - which files are likely relevant
10
+ - how many file reads were avoided
11
+ - what confidence the result has
12
+
13
+ ## Quick Start
14
+
15
+ Create the optional provider configuration:
16
+
17
+ ```bash
18
+ scale codegraph init
19
+ ```
20
+
21
+ Inspect provider availability:
22
+
23
+ ```bash
24
+ scale codegraph status
25
+ scale codegraph status --json
26
+ ```
27
+
28
+ Query code intelligence:
29
+
30
+ ```bash
31
+ scale codegraph query "UserService.create"
32
+ scale codegraph impact --symbol UserService.create
33
+ scale codegraph context --symbol UserService.create --budget 2000
34
+ scale codegraph roi --symbol UserService.create
35
+ ```
36
+
37
+ ## Configuration
38
+
39
+ The configuration file lives at:
40
+
41
+ ```text
42
+ .scale/code-intelligence.json
43
+ ```
44
+
45
+ Default shape:
46
+
47
+ ```json
48
+ {
49
+ "version": "1.0",
50
+ "providers": [
51
+ {
52
+ "id": "codegraph",
53
+ "type": "external-cli",
54
+ "enabled": true,
55
+ "command": "codegraph",
56
+ "capabilities": ["symbols", "callers", "callees", "impact", "context"]
57
+ },
58
+ {
59
+ "id": "graphify",
60
+ "type": "artifact",
61
+ "enabled": true,
62
+ "manifest": "graphify-out/GRAPH_REPORT.md",
63
+ "capabilities": ["summary", "module-map", "context"]
64
+ }
65
+ ],
66
+ "fallback": {
67
+ "enabled": true,
68
+ "tools": ["internal-scan", "rg", "read"]
69
+ }
70
+ }
71
+ ```
72
+
73
+ ## Provider Types
74
+
75
+ | Type | Use |
76
+ | --- | --- |
77
+ | `external-cli` | Detects an installed external code graph command. SCALE does not auto-install it. The first version treats this as availability evidence until a stable command contract is configured. |
78
+ | `artifact` | Reads a local graph manifest or report file. JSON manifests can provide symbol impact data. |
79
+ | fallback | Uses a bounded internal source scan when providers are unavailable or return no hits. |
80
+
81
+ ## JSON Artifact Provider
82
+
83
+ Artifact providers can point at a JSON manifest:
84
+
85
+ ```json
86
+ {
87
+ "symbols": [
88
+ {
89
+ "name": "UserService.create",
90
+ "file": "src/user.ts",
91
+ "callers": ["src/api.ts"],
92
+ "callees": ["src/db.ts"]
93
+ }
94
+ ],
95
+ "files": [
96
+ {
97
+ "path": "src/user.ts",
98
+ "symbols": ["UserService.create"]
99
+ }
100
+ ]
101
+ }
102
+ ```
103
+
104
+ This allows SCALE to answer impact queries without reading the whole repository.
105
+
106
+ ## ROI Metrics
107
+
108
+ Code intelligence reports include:
109
+
110
+ | Metric | Meaning |
111
+ | --- | --- |
112
+ | `graphHits` | Number of hits from graph providers. |
113
+ | `fallbackCount` | Whether fallback was needed. |
114
+ | `baselineFileReads` | Estimated broad exploration file reads. |
115
+ | `recommendedFileReads` | Scoped file reads recommended by the query result. |
116
+ | `fileReadsSaved` | Estimated avoided reads. |
117
+ | `toolCallsSaved` | Estimated avoided exploration tool calls. |
118
+
119
+ These numbers are deliberately conservative. They are a local signal for whether graph-assisted exploration is worth keeping default for a task class.
120
+
121
+ ## Governance ROI
122
+
123
+ `scale governance roi` can include code intelligence:
124
+
125
+ ```bash
126
+ scale governance roi --symbol UserService.create
127
+ scale governance roi --code-query createUser
128
+ ```
129
+
130
+ When a graph provider answers, the module is reported as measured evidence. When fallback is used, the module is reported as estimated and needs more evidence before becoming a stronger default.
131
+
132
+ ## Policy
133
+
134
+ - SCALE must run when no code graph provider is installed.
135
+ - Missing providers must produce explicit fallback, not silent success.
136
+ - External tools are detected but not installed automatically.
137
+ - Source files are read only through a bounded fallback scan.
138
+ - Large generated graph outputs should stay outside default prompt context; use summaries and file paths.