@hongmaple0820/scale-engine 0.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.
Files changed (78) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +64 -0
  3. package/dist/adapters/ClaudeCodeAdapter.d.ts +48 -0
  4. package/dist/adapters/ClaudeCodeAdapter.js +188 -0
  5. package/dist/adapters/ClaudeCodeAdapter.js.map +1 -0
  6. package/dist/adapters/CodexAdapter.d.ts +14 -0
  7. package/dist/adapters/CodexAdapter.js +153 -0
  8. package/dist/adapters/CodexAdapter.js.map +1 -0
  9. package/dist/api/cli.d.ts +2 -0
  10. package/dist/api/cli.js +396 -0
  11. package/dist/api/cli.js.map +1 -0
  12. package/dist/api/doctor.d.ts +28 -0
  13. package/dist/api/doctor.js +182 -0
  14. package/dist/api/doctor.js.map +1 -0
  15. package/dist/api/mcp.d.ts +32 -0
  16. package/dist/api/mcp.js +227 -0
  17. package/dist/api/mcp.js.map +1 -0
  18. package/dist/artifact/fsm.d.ts +36 -0
  19. package/dist/artifact/fsm.js +199 -0
  20. package/dist/artifact/fsm.js.map +1 -0
  21. package/dist/artifact/fsmDefinitions.d.ts +18 -0
  22. package/dist/artifact/fsmDefinitions.js +243 -0
  23. package/dist/artifact/fsmDefinitions.js.map +1 -0
  24. package/dist/artifact/sqliteStore.d.ts +61 -0
  25. package/dist/artifact/sqliteStore.js +394 -0
  26. package/dist/artifact/sqliteStore.js.map +1 -0
  27. package/dist/artifact/store.d.ts +49 -0
  28. package/dist/artifact/store.js +118 -0
  29. package/dist/artifact/store.js.map +1 -0
  30. package/dist/artifact/types.d.ts +333 -0
  31. package/dist/artifact/types.js +50 -0
  32. package/dist/artifact/types.js.map +1 -0
  33. package/dist/context/ContextBuilder.d.ts +36 -0
  34. package/dist/context/ContextBuilder.js +53 -0
  35. package/dist/context/ContextBuilder.js.map +1 -0
  36. package/dist/core/container.d.ts +14 -0
  37. package/dist/core/container.js +33 -0
  38. package/dist/core/container.js.map +1 -0
  39. package/dist/core/eventBus.d.ts +60 -0
  40. package/dist/core/eventBus.js +158 -0
  41. package/dist/core/eventBus.js.map +1 -0
  42. package/dist/core/logger.d.ts +3 -0
  43. package/dist/core/logger.js +12 -0
  44. package/dist/core/logger.js.map +1 -0
  45. package/dist/evolution/BehaviorTracker.d.ts +38 -0
  46. package/dist/evolution/BehaviorTracker.js +52 -0
  47. package/dist/evolution/BehaviorTracker.js.map +1 -0
  48. package/dist/evolution/EvolutionEngine.d.ts +99 -0
  49. package/dist/evolution/EvolutionEngine.js +321 -0
  50. package/dist/evolution/EvolutionEngine.js.map +1 -0
  51. package/dist/guardrails/Gateway.d.ts +26 -0
  52. package/dist/guardrails/Gateway.js +57 -0
  53. package/dist/guardrails/Gateway.js.map +1 -0
  54. package/dist/guardrails/advancedDetectors.d.ts +26 -0
  55. package/dist/guardrails/advancedDetectors.js +138 -0
  56. package/dist/guardrails/advancedDetectors.js.map +1 -0
  57. package/dist/guardrails/detectors.d.ts +25 -0
  58. package/dist/guardrails/detectors.js +170 -0
  59. package/dist/guardrails/detectors.js.map +1 -0
  60. package/dist/guardrails/roles.d.ts +4 -0
  61. package/dist/guardrails/roles.js +54 -0
  62. package/dist/guardrails/roles.js.map +1 -0
  63. package/dist/index.d.ts +22 -0
  64. package/dist/index.js +22 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/knowledge/KnowledgeBase.d.ts +25 -0
  67. package/dist/knowledge/KnowledgeBase.js +81 -0
  68. package/dist/knowledge/KnowledgeBase.js.map +1 -0
  69. package/dist/orchestration/EffectsWiring.d.ts +8 -0
  70. package/dist/orchestration/EffectsWiring.js +87 -0
  71. package/dist/orchestration/EffectsWiring.js.map +1 -0
  72. package/dist/routing/ModelRouter.d.ts +30 -0
  73. package/dist/routing/ModelRouter.js +69 -0
  74. package/dist/routing/ModelRouter.js.map +1 -0
  75. package/dist/tasks/TaskEngine.d.ts +97 -0
  76. package/dist/tasks/TaskEngine.js +269 -0
  77. package/dist/tasks/TaskEngine.js.map +1 -0
  78. package/package.json +48 -0
@@ -0,0 +1,396 @@
1
+ #!/usr/bin/env node
2
+ // SCALE Engine — CLI 入口 (W6 完整实现)
3
+ // 所有 Hook 调用入口: session/gate/create/list/transition/context
4
+ import { defineCommand, runMain } from 'citty';
5
+ import { EventBus } from '../core/eventBus.js';
6
+ import { SQLiteArtifactStore } from '../artifact/sqliteStore.js';
7
+ import { FSM } from '../artifact/fsm.js';
8
+ import { registerAllFSMs, INITIAL_STATES } from '../artifact/fsmDefinitions.js';
9
+ import { Gateway } from '../guardrails/Gateway.js';
10
+ import { BruteRetryDetector, PrematureDoneDetector, BlameShiftDetector } from '../guardrails/detectors.js';
11
+ import { DangerousCommandDetector, SecretLeakDetector, RoleGateDetector, BUILT_IN_ROLES } from '../guardrails/advancedDetectors.js';
12
+ import { KnowledgeBase } from '../knowledge/KnowledgeBase.js';
13
+ import { ContextBuilder } from '../context/ContextBuilder.js';
14
+ import { createAdapter } from '../adapters/ClaudeCodeAdapter.js';
15
+ import { LessonExtractor, RuleProposer, HookGenerator, EvolutionEngine } from '../evolution/EvolutionEngine.js';
16
+ import { Doctor } from './doctor.js';
17
+ import { existsSync, mkdirSync } from 'node:fs';
18
+ import { join } from 'node:path';
19
+ // ============================================================================
20
+ // Engine bootstrap (单例 + lazy init)
21
+ // ============================================================================
22
+ const SCALE_DIR = process.env.SCALE_DIR ?? '.scale';
23
+ const DB_PATH = join(SCALE_DIR, 'scale.db');
24
+ function ensureDir(dir) {
25
+ if (!existsSync(dir))
26
+ mkdirSync(dir, { recursive: true });
27
+ }
28
+ let _engine = null;
29
+ function getEngine() {
30
+ if (!_engine)
31
+ _engine = createEngine();
32
+ return _engine;
33
+ }
34
+ function createEngine() {
35
+ ensureDir(SCALE_DIR);
36
+ const eventBus = new EventBus({ eventsDir: join(SCALE_DIR, 'events') });
37
+ const store = new SQLiteArtifactStore(eventBus, {
38
+ dbPath: DB_PATH,
39
+ artifactsDir: join(SCALE_DIR, 'artifacts'),
40
+ });
41
+ const fsm = new FSM(store, eventBus);
42
+ registerAllFSMs(fsm);
43
+ const gateway = new Gateway(eventBus);
44
+ const roleGate = new RoleGateDetector();
45
+ // Register all detectors
46
+ gateway.registerDetector(new DangerousCommandDetector(), 'preTool');
47
+ gateway.registerDetector(new SecretLeakDetector(), 'preTool');
48
+ gateway.registerDetector(roleGate, 'preTool');
49
+ gateway.registerDetector(new BruteRetryDetector(), 'preTool');
50
+ gateway.registerDetector(new PrematureDoneDetector(), 'beforeStop');
51
+ gateway.registerDetector(new BlameShiftDetector(), 'postTool');
52
+ const kb = new KnowledgeBase(eventBus);
53
+ const ctx = new ContextBuilder(store, kb, eventBus);
54
+ return { eventBus, store, fsm, gateway, roleGate, kb, ctx };
55
+ }
56
+ // ============================================================================
57
+ // session commands
58
+ // ============================================================================
59
+ const sessionStart = defineCommand({
60
+ meta: { name: 'start', description: 'Start a new session' },
61
+ args: {
62
+ agent: { type: 'string', default: 'claude-code' },
63
+ 'session-id': { type: 'string', required: true },
64
+ },
65
+ async run({ args }) {
66
+ const { eventBus } = getEngine();
67
+ eventBus.emit('session.started', {
68
+ agent: args.agent,
69
+ sessionId: args['session-id'],
70
+ startedAt: Date.now(),
71
+ }, { sessionId: args['session-id'] });
72
+ console.log(JSON.stringify({ ok: true, sessionId: args['session-id'], agent: args.agent }));
73
+ },
74
+ });
75
+ const sessionEnd = defineCommand({
76
+ meta: { name: 'end', description: 'End current session' },
77
+ args: {
78
+ 'session-id': { type: 'string', required: true },
79
+ },
80
+ async run({ args }) {
81
+ const { eventBus } = getEngine();
82
+ eventBus.emit('session.ended', {
83
+ sessionId: args['session-id'],
84
+ endedAt: Date.now(),
85
+ }, { sessionId: args['session-id'] });
86
+ console.log(JSON.stringify({ ok: true, sessionId: args['session-id'] }));
87
+ },
88
+ });
89
+ const session = defineCommand({
90
+ meta: { name: 'session', description: 'Session lifecycle' },
91
+ subCommands: { start: sessionStart, end: sessionEnd },
92
+ });
93
+ // ============================================================================
94
+ // gate commands (Hook 入口)
95
+ // ============================================================================
96
+ const gatePreTool = defineCommand({
97
+ meta: { name: 'pre-tool', description: 'Pre-tool gate check' },
98
+ args: {
99
+ tool: { type: 'positional', required: true },
100
+ 'args-json': { type: 'string', default: '{}' },
101
+ 'session-id': { type: 'string', required: true },
102
+ },
103
+ async run({ args }) {
104
+ const { gateway } = getEngine();
105
+ let toolArgs = {};
106
+ try {
107
+ toolArgs = JSON.parse(args['args-json']);
108
+ }
109
+ catch { /* empty */ }
110
+ const decision = await gateway.preTool({
111
+ sessionId: args['session-id'],
112
+ tool: args.tool,
113
+ args: toolArgs,
114
+ });
115
+ if (!decision.allow) {
116
+ // 输出到 stderr 让 AI 看到原因
117
+ process.stderr.write(decision.reason ?? 'Blocked by SCALE guardrail');
118
+ if (decision.suggestion)
119
+ process.stderr.write(`\nSuggestion: ${decision.suggestion}`);
120
+ process.exit(2);
121
+ }
122
+ // 静默通过(不输出 → 不消耗 token)
123
+ },
124
+ });
125
+ const gatePostTool = defineCommand({
126
+ meta: { name: 'post-tool', description: 'Post-tool event recording' },
127
+ args: {
128
+ tool: { type: 'positional', required: true },
129
+ 'args-json': { type: 'string', default: '{}' },
130
+ 'output-json': { type: 'string', default: '' },
131
+ 'exit-code': { type: 'string', default: '0' },
132
+ 'session-id': { type: 'string', required: true },
133
+ },
134
+ async run({ args }) {
135
+ const { gateway } = getEngine();
136
+ let toolArgs = {};
137
+ try {
138
+ toolArgs = JSON.parse(args['args-json']);
139
+ }
140
+ catch { /* empty */ }
141
+ await gateway.postTool({
142
+ sessionId: args['session-id'],
143
+ tool: args.tool,
144
+ args: toolArgs,
145
+ exitCode: parseInt(args['exit-code'], 10),
146
+ output: args['output-json'],
147
+ });
148
+ // 静默(不消耗 token)
149
+ },
150
+ });
151
+ const gateBeforeStop = defineCommand({
152
+ meta: { name: 'before-stop', description: 'Before-stop gate check' },
153
+ args: { 'session-id': { type: 'string', required: true } },
154
+ async run({ args }) {
155
+ const { gateway } = getEngine();
156
+ const decision = await gateway.beforeStop({ sessionId: args['session-id'] });
157
+ if (!decision.allow) {
158
+ process.stderr.write(decision.reason ?? 'Cannot stop yet');
159
+ if (decision.suggestion)
160
+ process.stderr.write(`\nSuggestion: ${decision.suggestion}`);
161
+ process.exit(2);
162
+ }
163
+ },
164
+ });
165
+ const gate = defineCommand({
166
+ meta: { name: 'gate', description: 'Guardrail gate commands' },
167
+ subCommands: { 'pre-tool': gatePreTool, 'post-tool': gatePostTool, 'before-stop': gateBeforeStop },
168
+ });
169
+ // ============================================================================
170
+ // artifact CRUD
171
+ // ============================================================================
172
+ const create = defineCommand({
173
+ meta: { name: 'create', description: 'Create an artifact' },
174
+ args: {
175
+ type: { type: 'positional', required: true },
176
+ title: { type: 'positional', required: true },
177
+ parent: { type: 'string' },
178
+ payload: { type: 'string', default: '{}' },
179
+ },
180
+ async run({ args }) {
181
+ const { store } = getEngine();
182
+ let payload = {};
183
+ try {
184
+ payload = JSON.parse(args.payload);
185
+ }
186
+ catch { /* empty */ }
187
+ const artifact = await store.create({
188
+ type: args.type,
189
+ title: args.title,
190
+ payload,
191
+ parents: args.parent ? [args.parent] : [],
192
+ initialStatus: INITIAL_STATES[args.type] ?? 'DRAFT',
193
+ createdBy: { kind: 'human', userId: process.env.USER ?? 'cli' },
194
+ });
195
+ console.log(JSON.stringify(artifact, null, 2));
196
+ },
197
+ });
198
+ const list = defineCommand({
199
+ meta: { name: 'list', description: 'List artifacts' },
200
+ args: { type: { type: 'string' }, status: { type: 'string' }, limit: { type: 'string', default: '20' } },
201
+ async run({ args }) {
202
+ const { store } = getEngine();
203
+ const items = await store.query({
204
+ type: args.type,
205
+ status: args.status,
206
+ limit: parseInt(args.limit, 10),
207
+ });
208
+ console.log(JSON.stringify(items, null, 2));
209
+ },
210
+ });
211
+ const show = defineCommand({
212
+ meta: { name: 'show', description: 'Show artifact details' },
213
+ args: { id: { type: 'positional', required: true } },
214
+ async run({ args }) {
215
+ const { store } = getEngine();
216
+ const artifact = await store.get(args.id);
217
+ if (!artifact) {
218
+ console.error(`Artifact not found: ${args.id}`);
219
+ process.exit(1);
220
+ }
221
+ console.log(JSON.stringify(artifact, null, 2));
222
+ },
223
+ });
224
+ // ============================================================================
225
+ // FSM transition
226
+ // ============================================================================
227
+ const transition = defineCommand({
228
+ meta: { name: 'transition', description: 'Transition artifact state' },
229
+ args: {
230
+ id: { type: 'positional', required: true },
231
+ action: { type: 'positional', required: true },
232
+ reason: { type: 'string' },
233
+ },
234
+ async run({ args }) {
235
+ const { fsm } = getEngine();
236
+ const result = await fsm.transition(args.id, args.action, {
237
+ actor: { kind: 'human', userId: process.env.USER ?? 'cli' },
238
+ reason: args.reason,
239
+ });
240
+ console.log(JSON.stringify(result, null, 2));
241
+ if (!result.success)
242
+ process.exit(1);
243
+ },
244
+ });
245
+ // ============================================================================
246
+ // role management
247
+ // ============================================================================
248
+ const roleActivate = defineCommand({
249
+ meta: { name: 'activate', description: 'Activate a role' },
250
+ args: { role: { type: 'positional', required: true } },
251
+ async run({ args }) {
252
+ const { roleGate, eventBus } = getEngine();
253
+ const roleDef = BUILT_IN_ROLES[args.role];
254
+ if (!roleDef) {
255
+ console.error(`Unknown role: ${args.role}. Available: ${Object.keys(BUILT_IN_ROLES).join(', ')}`);
256
+ process.exit(1);
257
+ }
258
+ roleGate.setRole(roleDef);
259
+ eventBus.emit('role.activated', { roleId: args.role });
260
+ console.log(JSON.stringify({ ok: true, role: roleDef }));
261
+ },
262
+ });
263
+ const roleShow = defineCommand({
264
+ meta: { name: 'show', description: 'Show current role' },
265
+ args: {},
266
+ async run() {
267
+ const { roleGate } = getEngine();
268
+ console.log(JSON.stringify(roleGate.getRole(), null, 2));
269
+ },
270
+ });
271
+ const role = defineCommand({
272
+ meta: { name: 'role', description: 'Role management' },
273
+ subCommands: { activate: roleActivate, show: roleShow },
274
+ });
275
+ // ============================================================================
276
+ // context
277
+ // ============================================================================
278
+ const contextBuild = defineCommand({
279
+ meta: { name: 'build', description: 'Build context for current task' },
280
+ args: {
281
+ 'session-id': { type: 'string', required: true },
282
+ 'artifact-id': { type: 'string' },
283
+ role: { type: 'string' },
284
+ },
285
+ async run({ args }) {
286
+ const { ctx } = getEngine();
287
+ const result = await ctx.build({
288
+ sessionId: args['session-id'],
289
+ roleId: args.role,
290
+ currentArtifactId: args['artifact-id'],
291
+ });
292
+ console.log(JSON.stringify(result, null, 2));
293
+ },
294
+ });
295
+ const context = defineCommand({
296
+ meta: { name: 'context', description: 'Context assembly' },
297
+ subCommands: { build: contextBuild },
298
+ });
299
+ // ============================================================================
300
+ // stats
301
+ // ============================================================================
302
+ const stats = defineCommand({
303
+ meta: { name: 'stats', description: 'Show engine stats' },
304
+ args: {},
305
+ async run() {
306
+ const { store, eventBus } = getEngine();
307
+ const s = store.stats();
308
+ const events = await eventBus.query({ limit: 1000 });
309
+ console.log(JSON.stringify({ ...s, eventCount: events.length }, null, 2));
310
+ },
311
+ });
312
+ // ============================================================================
313
+ // init command
314
+ // ============================================================================
315
+ const init = defineCommand({
316
+ meta: { name: 'init', description: 'Initialize SCALE Engine in current project' },
317
+ args: {
318
+ agent: { type: 'string', default: 'claude-code', description: 'Agent type (claude-code)' },
319
+ dir: { type: 'string', default: '.', description: 'Project directory' },
320
+ },
321
+ async run({ args }) {
322
+ const adapter = createAdapter(args.agent);
323
+ const result = await adapter.init({ projectDir: args.dir, agentType: args.agent });
324
+ console.log(`\n✅ SCALE Engine initialized for ${args.agent}`);
325
+ console.log(`\n📁 Created:`);
326
+ for (const f of result.created)
327
+ console.log(` + ${f}`);
328
+ if (result.skipped.length > 0) {
329
+ console.log(`\n⏭️ Skipped (already exist):`);
330
+ for (const f of result.skipped)
331
+ console.log(` - ${f}`);
332
+ }
333
+ console.log(`\n🔧 Settings: ${result.settingsPath}`);
334
+ console.log(`📖 Knowledge: ${result.knowledgeDocPath}`);
335
+ console.log(`📂 Data dir: ${result.scaleDir}`);
336
+ },
337
+ });
338
+ // ============================================================================
339
+ // evolve command
340
+ // ============================================================================
341
+ const evolve = defineCommand({
342
+ meta: { name: 'evolve', description: 'Run evolution cycle (Defect→Lesson→Rule→Hook)' },
343
+ args: {},
344
+ async run() {
345
+ const { store, kb, eventBus } = getEngine();
346
+ const extractor = new LessonExtractor(store, kb, eventBus);
347
+ const proposer = new RuleProposer(kb, eventBus);
348
+ const generator = new HookGenerator(eventBus);
349
+ const engine = new EvolutionEngine(extractor, proposer, generator, eventBus, SCALE_DIR);
350
+ const stats = await engine.runCycle();
351
+ console.log(JSON.stringify(stats, null, 2));
352
+ },
353
+ });
354
+ // ============================================================================
355
+ // doctor command
356
+ // ============================================================================
357
+ const doctor = defineCommand({
358
+ meta: { name: 'doctor', description: 'Diagnose SCALE Engine health' },
359
+ args: {
360
+ dir: { type: 'string', default: '.', description: 'Project directory' },
361
+ json: { type: 'boolean', default: false, description: 'Output as JSON' },
362
+ },
363
+ async run({ args }) {
364
+ const doc = new Doctor(args.dir);
365
+ const report = await doc.diagnose();
366
+ if (args.json) {
367
+ console.log(JSON.stringify(report, null, 2));
368
+ }
369
+ else {
370
+ console.log(doc.formatReport(report));
371
+ }
372
+ process.exitCode = report.overall === 'broken' ? 1 : 0;
373
+ },
374
+ });
375
+ // ============================================================================
376
+ // Main
377
+ // ============================================================================
378
+ const main = defineCommand({
379
+ meta: { name: 'scale', version: '0.1.0', description: 'SCALE Engine CLI — AI engineering scaffold' },
380
+ subCommands: {
381
+ init,
382
+ doctor,
383
+ session,
384
+ gate,
385
+ create,
386
+ list,
387
+ show,
388
+ transition,
389
+ role,
390
+ context,
391
+ evolve,
392
+ stats,
393
+ },
394
+ });
395
+ runMain(main);
396
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/api/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface DiagnosticResult {
2
+ name: string;
3
+ status: 'ok' | 'warn' | 'fail';
4
+ message: string;
5
+ fix?: string;
6
+ }
7
+ export interface DoctorReport {
8
+ overall: 'healthy' | 'degraded' | 'broken';
9
+ checks: DiagnosticResult[];
10
+ timestamp: number;
11
+ }
12
+ export declare class Doctor {
13
+ private projectDir;
14
+ private scaleDir;
15
+ constructor(projectDir?: string, scaleDir?: string);
16
+ diagnose(): Promise<DoctorReport>;
17
+ private checkScaleDir;
18
+ private checkEventsDir;
19
+ private checkArtifactsDir;
20
+ private checkSettingsJson;
21
+ private checkKnowledgeDoc;
22
+ private checkRulesDir;
23
+ private checkHooksDir;
24
+ private checkNodeVersion;
25
+ private checkDiskUsage;
26
+ private checkGitignore;
27
+ formatReport(report: DoctorReport): string;
28
+ }
@@ -0,0 +1,182 @@
1
+ // SCALE Engine — Doctor (W10)
2
+ // 环境诊断 + 健康检查
3
+ // Usage: scale doctor
4
+ import { existsSync, readdirSync, statSync, readFileSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ export class Doctor {
7
+ projectDir;
8
+ scaleDir;
9
+ constructor(projectDir = '.', scaleDir = '.scale') {
10
+ this.projectDir = projectDir;
11
+ this.scaleDir = scaleDir;
12
+ }
13
+ async diagnose() {
14
+ const checks = [];
15
+ checks.push(this.checkScaleDir());
16
+ checks.push(this.checkEventsDir());
17
+ checks.push(this.checkArtifactsDir());
18
+ checks.push(this.checkSettingsJson());
19
+ checks.push(this.checkKnowledgeDoc());
20
+ checks.push(this.checkRulesDir());
21
+ checks.push(this.checkHooksDir());
22
+ checks.push(this.checkNodeVersion());
23
+ checks.push(this.checkDiskUsage());
24
+ checks.push(this.checkGitignore());
25
+ const fails = checks.filter((c) => c.status === 'fail').length;
26
+ const warns = checks.filter((c) => c.status === 'warn').length;
27
+ const overall = fails > 0 ? 'broken' : warns > 0 ? 'degraded' : 'healthy';
28
+ return { overall, checks, timestamp: Date.now() };
29
+ }
30
+ checkScaleDir() {
31
+ const dir = join(this.projectDir, this.scaleDir);
32
+ if (!existsSync(dir)) {
33
+ return { name: '.scale directory', status: 'fail', message: 'Missing .scale/ directory', fix: 'Run: scale init' };
34
+ }
35
+ return { name: '.scale directory', status: 'ok', message: `Found at ${dir}` };
36
+ }
37
+ checkEventsDir() {
38
+ const dir = join(this.projectDir, this.scaleDir, 'events');
39
+ if (!existsSync(dir)) {
40
+ return { name: 'Events directory', status: 'fail', message: 'Missing events/ directory', fix: 'Run: scale init' };
41
+ }
42
+ try {
43
+ const files = readdirSync(dir).filter((f) => f.endsWith('.jsonl'));
44
+ const totalSize = files.reduce((sum, f) => sum + statSync(join(dir, f)).size, 0);
45
+ const sizeMB = (totalSize / 1024 / 1024).toFixed(2);
46
+ if (totalSize > 100 * 1024 * 1024) {
47
+ return { name: 'Events directory', status: 'warn', message: `${files.length} files, ${sizeMB}MB — consider archiving`, fix: 'Archive old event files' };
48
+ }
49
+ return { name: 'Events directory', status: 'ok', message: `${files.length} files, ${sizeMB}MB` };
50
+ }
51
+ catch {
52
+ return { name: 'Events directory', status: 'ok', message: 'Empty (fresh install)' };
53
+ }
54
+ }
55
+ checkArtifactsDir() {
56
+ const dir = join(this.projectDir, this.scaleDir, 'artifacts');
57
+ if (!existsSync(dir)) {
58
+ return { name: 'Artifacts directory', status: 'fail', message: 'Missing artifacts/ directory', fix: 'Run: scale init' };
59
+ }
60
+ try {
61
+ const files = readdirSync(dir).filter((f) => f.endsWith('.json'));
62
+ return { name: 'Artifacts directory', status: 'ok', message: `${files.length} artifacts` };
63
+ }
64
+ catch {
65
+ return { name: 'Artifacts directory', status: 'ok', message: 'Empty' };
66
+ }
67
+ }
68
+ checkSettingsJson() {
69
+ const paths = [
70
+ join(this.projectDir, '.claude', 'settings.json'),
71
+ join(this.projectDir, '.claude', 'settings.local.json'),
72
+ ];
73
+ const found = paths.find((p) => existsSync(p));
74
+ if (!found) {
75
+ return { name: 'Agent settings', status: 'warn', message: 'No .claude/settings.json found', fix: 'Run: scale init --agent claude-code' };
76
+ }
77
+ try {
78
+ const content = JSON.parse(readFileSync(found, 'utf-8'));
79
+ const hasScaleHooks = JSON.stringify(content).includes('scale ');
80
+ if (!hasScaleHooks) {
81
+ return { name: 'Agent settings', status: 'warn', message: 'settings.json exists but no SCALE hooks', fix: 'Run: scale init to inject hooks' };
82
+ }
83
+ const hookCount = Object.values(content.hooks ?? {}).flat().length;
84
+ return { name: 'Agent settings', status: 'ok', message: `${hookCount} hooks configured` };
85
+ }
86
+ catch {
87
+ return { name: 'Agent settings', status: 'fail', message: 'settings.json is invalid JSON', fix: 'Fix JSON syntax' };
88
+ }
89
+ }
90
+ checkKnowledgeDoc() {
91
+ const paths = ['CLAUDE.md', 'AGENTS.md', '.cursorrules', 'GEMINI.md'];
92
+ for (const name of paths) {
93
+ const p = join(this.projectDir, name);
94
+ if (existsSync(p)) {
95
+ const lines = readFileSync(p, 'utf-8').split('\n').length;
96
+ if (lines > 200) {
97
+ return { name: 'Knowledge doc', status: 'warn', message: `${name}: ${lines} lines (>200 — compliance may drop)`, fix: 'Split low-frequency rules to .claude/rules/' };
98
+ }
99
+ return { name: 'Knowledge doc', status: 'ok', message: `${name}: ${lines} lines` };
100
+ }
101
+ }
102
+ return { name: 'Knowledge doc', status: 'warn', message: 'No knowledge doc found', fix: 'Run: scale init' };
103
+ }
104
+ checkRulesDir() {
105
+ const dir = join(this.projectDir, this.scaleDir, 'rules');
106
+ if (!existsSync(dir)) {
107
+ return { name: 'Rules directory', status: 'ok', message: 'Not created yet (no evolved rules)' };
108
+ }
109
+ const files = readdirSync(dir).filter((f) => f.endsWith('.md'));
110
+ return { name: 'Rules directory', status: 'ok', message: `${files.length} rules` };
111
+ }
112
+ checkHooksDir() {
113
+ const dir = join(this.projectDir, this.scaleDir, 'hooks');
114
+ if (!existsSync(dir)) {
115
+ return { name: 'Hooks directory', status: 'ok', message: 'Not created yet (no evolved hooks)' };
116
+ }
117
+ const files = readdirSync(dir).filter((f) => f.endsWith('.sh'));
118
+ return { name: 'Hooks directory', status: 'ok', message: `${files.length} hooks` };
119
+ }
120
+ checkNodeVersion() {
121
+ const version = process.version;
122
+ const major = parseInt(version.slice(1).split('.')[0]);
123
+ if (major < 20) {
124
+ return { name: 'Node.js version', status: 'fail', message: `${version} — requires >=20`, fix: 'Upgrade Node.js to v20+' };
125
+ }
126
+ return { name: 'Node.js version', status: 'ok', message: version };
127
+ }
128
+ checkDiskUsage() {
129
+ const dir = join(this.projectDir, this.scaleDir);
130
+ if (!existsSync(dir))
131
+ return { name: 'Disk usage', status: 'ok', message: 'N/A' };
132
+ try {
133
+ let totalSize = 0;
134
+ const walk = (d) => {
135
+ for (const f of readdirSync(d)) {
136
+ const p = join(d, f);
137
+ const s = statSync(p);
138
+ if (s.isDirectory())
139
+ walk(p);
140
+ else
141
+ totalSize += s.size;
142
+ }
143
+ };
144
+ walk(dir);
145
+ const mb = (totalSize / 1024 / 1024).toFixed(2);
146
+ if (totalSize > 500 * 1024 * 1024) {
147
+ return { name: 'Disk usage', status: 'warn', message: `${mb}MB — consider cleanup`, fix: 'Archive old events/checkpoints' };
148
+ }
149
+ return { name: 'Disk usage', status: 'ok', message: `${mb}MB` };
150
+ }
151
+ catch {
152
+ return { name: 'Disk usage', status: 'ok', message: 'Unable to calculate' };
153
+ }
154
+ }
155
+ checkGitignore() {
156
+ const p = join(this.projectDir, this.scaleDir, '.gitignore');
157
+ if (!existsSync(p)) {
158
+ return { name: '.scale/.gitignore', status: 'warn', message: 'Missing — runtime data may be committed', fix: 'Run: scale init' };
159
+ }
160
+ return { name: '.scale/.gitignore', status: 'ok', message: 'Present' };
161
+ }
162
+ formatReport(report) {
163
+ const icon = { healthy: '✅', degraded: '⚠️', broken: '❌' };
164
+ const statusIcon = { ok: '✅', warn: '⚠️', fail: '❌' };
165
+ const lines = [
166
+ `\n${icon[report.overall]} SCALE Engine Health: ${report.overall.toUpperCase()}`,
167
+ `${'─'.repeat(50)}`,
168
+ ];
169
+ for (const check of report.checks) {
170
+ lines.push(` ${statusIcon[check.status]} ${check.name}: ${check.message}`);
171
+ if (check.fix)
172
+ lines.push(` 💡 Fix: ${check.fix}`);
173
+ }
174
+ lines.push(`${'─'.repeat(50)}`);
175
+ const ok = report.checks.filter((c) => c.status === 'ok').length;
176
+ const warn = report.checks.filter((c) => c.status === 'warn').length;
177
+ const fail = report.checks.filter((c) => c.status === 'fail').length;
178
+ lines.push(` ${ok} passed, ${warn} warnings, ${fail} failures`);
179
+ return lines.join('\n');
180
+ }
181
+ }
182
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/api/doctor.ts"],"names":[],"mappings":"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"}