@hongmaple0820/scale-engine 0.47.0 → 0.49.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 (128) hide show
  1. package/README.en.md +8 -2
  2. package/README.md +9 -3
  3. package/dist/agents/evidenceDiscipline.d.ts +7 -0
  4. package/dist/agents/evidenceDiscipline.js +21 -0
  5. package/dist/agents/evidenceDiscipline.js.map +1 -0
  6. package/dist/agents/profiles.js +8 -1
  7. package/dist/agents/profiles.js.map +1 -1
  8. package/dist/agents/types.d.ts +1 -0
  9. package/dist/api/cli.js +975 -6222
  10. package/dist/api/cli.js.map +1 -1
  11. package/dist/artifact/types.d.ts +59 -0
  12. package/dist/artifact/types.js.map +1 -1
  13. package/dist/cli/artifactCrudCommands.d.ts +67 -0
  14. package/dist/cli/artifactCrudCommands.js +182 -0
  15. package/dist/cli/artifactCrudCommands.js.map +1 -0
  16. package/dist/cli/codegraphCommands.d.ts +1 -0
  17. package/dist/cli/codegraphCommands.js +241 -0
  18. package/dist/cli/codegraphCommands.js.map +1 -0
  19. package/dist/cli/contextCommands.d.ts +1 -0
  20. package/dist/cli/contextCommands.js +415 -0
  21. package/dist/cli/contextCommands.js.map +1 -0
  22. package/dist/cli/cortexCommands.d.ts +36 -0
  23. package/dist/cli/cortexCommands.js +76 -4
  24. package/dist/cli/cortexCommands.js.map +1 -1
  25. package/dist/cli/dependencyTddCommands.d.ts +92 -0
  26. package/dist/cli/dependencyTddCommands.js +174 -0
  27. package/dist/cli/dependencyTddCommands.js.map +1 -0
  28. package/dist/cli/diagnoseHuntCommands.d.ts +135 -0
  29. package/dist/cli/diagnoseHuntCommands.js +224 -0
  30. package/dist/cli/diagnoseHuntCommands.js.map +1 -0
  31. package/dist/cli/engineBootstrap.d.ts +39 -0
  32. package/dist/cli/engineBootstrap.js +129 -0
  33. package/dist/cli/engineBootstrap.js.map +1 -0
  34. package/dist/cli/evalCommands.d.ts +1 -0
  35. package/dist/cli/evalCommands.js +273 -0
  36. package/dist/cli/evalCommands.js.map +1 -0
  37. package/dist/cli/evolveDoctorCommands.d.ts +18 -0
  38. package/dist/cli/evolveDoctorCommands.js +59 -0
  39. package/dist/cli/evolveDoctorCommands.js.map +1 -0
  40. package/dist/cli/gateInlineCommands.d.ts +43 -0
  41. package/dist/cli/gateInlineCommands.js +74 -0
  42. package/dist/cli/gateInlineCommands.js.map +1 -0
  43. package/dist/cli/initConfigCommands.d.ts +138 -0
  44. package/dist/cli/initConfigCommands.js +602 -0
  45. package/dist/cli/initConfigCommands.js.map +1 -0
  46. package/dist/cli/metaGovernanceCommands.d.ts +11 -0
  47. package/dist/cli/metaGovernanceCommands.js +55 -0
  48. package/dist/cli/metaGovernanceCommands.js.map +1 -0
  49. package/dist/cli/phaseCommands.d.ts +53 -1
  50. package/dist/cli/phaseCommands.js +317 -22
  51. package/dist/cli/phaseCommands.js.map +1 -1
  52. package/dist/cli/runtimeSkillCommands.d.ts +6 -0
  53. package/dist/cli/runtimeSkillCommands.js +1515 -0
  54. package/dist/cli/runtimeSkillCommands.js.map +1 -0
  55. package/dist/cli/sessionCommands.d.ts +17 -0
  56. package/dist/cli/sessionCommands.js +38 -0
  57. package/dist/cli/sessionCommands.js.map +1 -0
  58. package/dist/cli/toolAgentCommands.d.ts +3 -0
  59. package/dist/cli/toolAgentCommands.js +441 -0
  60. package/dist/cli/toolAgentCommands.js.map +1 -0
  61. package/dist/cli/transitionCommands.d.ts +62 -0
  62. package/dist/cli/transitionCommands.js +174 -0
  63. package/dist/cli/transitionCommands.js.map +1 -0
  64. package/dist/cli/upgradeAssetsCommands.d.ts +44 -0
  65. package/dist/cli/upgradeAssetsCommands.js +933 -0
  66. package/dist/cli/upgradeAssetsCommands.js.map +1 -0
  67. package/dist/cli/workflowEvidenceCommands.d.ts +34 -0
  68. package/dist/cli/workflowEvidenceCommands.js +130 -0
  69. package/dist/cli/workflowEvidenceCommands.js.map +1 -0
  70. package/dist/cortex/InstinctStore.d.ts +32 -1
  71. package/dist/cortex/InstinctStore.js +235 -42
  72. package/dist/cortex/InstinctStore.js.map +1 -1
  73. package/dist/cortex/InstinctValidation.d.ts +9 -0
  74. package/dist/cortex/InstinctValidation.js +55 -0
  75. package/dist/cortex/InstinctValidation.js.map +1 -0
  76. package/dist/cortex/SessionInjector.js +13 -6
  77. package/dist/cortex/SessionInjector.js.map +1 -1
  78. package/dist/eval/BenchmarkPublisher.d.ts +2 -0
  79. package/dist/eval/BenchmarkPublisher.js +43 -0
  80. package/dist/eval/BenchmarkPublisher.js.map +1 -1
  81. package/dist/guardrails/ast/confirmers.d.ts +18 -0
  82. package/dist/guardrails/ast/confirmers.js +69 -0
  83. package/dist/guardrails/ast/confirmers.js.map +1 -0
  84. package/dist/guardrails/ast/parse.d.ts +20 -0
  85. package/dist/guardrails/ast/parse.js +51 -0
  86. package/dist/guardrails/ast/parse.js.map +1 -0
  87. package/dist/output/HTMLDocumentRenderer.d.ts +9 -0
  88. package/dist/output/HTMLDocumentRenderer.js +19 -0
  89. package/dist/output/HTMLDocumentRenderer.js.map +1 -1
  90. package/dist/review/FreshContextVerifier.d.ts +35 -0
  91. package/dist/review/FreshContextVerifier.js +120 -0
  92. package/dist/review/FreshContextVerifier.js.map +1 -0
  93. package/dist/review/JsonLlmClient.d.ts +37 -0
  94. package/dist/review/JsonLlmClient.js +94 -0
  95. package/dist/review/JsonLlmClient.js.map +1 -0
  96. package/dist/review/LlmJudge.d.ts +61 -0
  97. package/dist/review/LlmJudge.js +167 -0
  98. package/dist/review/LlmJudge.js.map +1 -0
  99. package/dist/version.d.ts +1 -1
  100. package/dist/version.js +1 -1
  101. package/dist/workflow/BoundaryEnforcement.d.ts +60 -0
  102. package/dist/workflow/BoundaryEnforcement.js +182 -0
  103. package/dist/workflow/BoundaryEnforcement.js.map +1 -0
  104. package/dist/workflow/EngineeringStandards.js +19 -9
  105. package/dist/workflow/EngineeringStandards.js.map +1 -1
  106. package/dist/workflow/GateCatalog.js +12 -2
  107. package/dist/workflow/GateCatalog.js.map +1 -1
  108. package/dist/workflow/ProfileEnforcement.d.ts +7 -0
  109. package/dist/workflow/ProfileEnforcement.js +12 -0
  110. package/dist/workflow/ProfileEnforcement.js.map +1 -0
  111. package/dist/workflow/ReviewStore.d.ts +10 -0
  112. package/dist/workflow/ReviewStore.js.map +1 -1
  113. package/dist/workflow/SurfaceCoverage.d.ts +19 -0
  114. package/dist/workflow/SurfaceCoverage.js +57 -0
  115. package/dist/workflow/SurfaceCoverage.js.map +1 -0
  116. package/dist/workflow/gates/EnhancedGates.js +2 -0
  117. package/dist/workflow/gates/EnhancedGates.js.map +1 -1
  118. package/dist/workflow/gates/TestIntegrityGate.d.ts +51 -0
  119. package/dist/workflow/gates/TestIntegrityGate.js +175 -0
  120. package/dist/workflow/gates/TestIntegrityGate.js.map +1 -0
  121. package/dist/workflow/types.d.ts +1 -1
  122. package/docs/guides/DEVELOPMENT_WORKFLOW.md +28 -0
  123. package/docs/workflow/E2E_EXAMPLE.md +133 -0
  124. package/docs/workflow/README.md +6 -0
  125. package/docs/workflow/TEMPLATE_GUIDE.md +162 -0
  126. package/docs/workflow/templates/plan.md +26 -0
  127. package/docs/workflow/templates/spec.md +28 -0
  128. package/package.json +3 -1
@@ -0,0 +1,415 @@
1
+ // SCALE Engine — Context Commands
2
+ // Extracted from src/api/cli.ts (lines 441–829)
3
+ import { defineCommand } from 'citty';
4
+ import { join, resolve } from 'node:path';
5
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
6
+ import { writeContextGovernanceTemplates, analyzeContextGovernance, renderContextGrillPrompt, } from '../workflow/ContextGovernance.js';
7
+ import { appendContextGrillArtifact } from '../workflow/TaskArtifactScaffolder.js';
8
+ import { buildContextPack, doctorContextBudget, scanContextBudget, writeContextBudgetReport, } from '../context/ContextBudget.js';
9
+ import { resolvePromptCachePolicy } from '../routing/PromptCachePolicy.js';
10
+ import { ProjectAnatomy } from '../context/ProjectAnatomy.js';
11
+ import { WorkflowArtifactWriter } from '../workflow/WorkflowArtifactWriter.js';
12
+ import { removeWorkflowOpenTask } from '../workflow/WorkflowOpenTasks.js';
13
+ import { getEngine, SCALE_DIR, PROJECT_DIR, isTruthyFlag, resolveScaleDirForProject, ensureDir, } from './engineBootstrap.js';
14
+ // ---------------------------------------------------------------------------
15
+ // Helpers
16
+ // ---------------------------------------------------------------------------
17
+ function parseCommaList(value) {
18
+ const raw = String(value ?? '').trim();
19
+ if (!raw)
20
+ return [];
21
+ return raw.split(',').map(item => item.trim()).filter(Boolean);
22
+ }
23
+ function parsePositiveIntArg(value, name) {
24
+ if (value === undefined || value === null || value === '')
25
+ return undefined;
26
+ const parsed = Number.parseInt(String(value), 10);
27
+ if (Number.isNaN(parsed) || parsed <= 0) {
28
+ throw new Error(`${name} must be a positive integer.`);
29
+ }
30
+ return parsed;
31
+ }
32
+ function formatContextSummary(ctx) {
33
+ const lines = [];
34
+ if (ctx.artifacts.length === 0) {
35
+ lines.push('No active artifacts for this session.');
36
+ }
37
+ else {
38
+ lines.push(`Active artifacts: ${ctx.artifacts.length}`);
39
+ for (const a of ctx.artifacts) {
40
+ const blocked = a.blockingReasons.length > 0 ? ' [BLOCKED]' : '';
41
+ lines.push(` ${a.artifactId} (${a.artifactType}): ${a.currentStatus}${blocked}`);
42
+ }
43
+ }
44
+ if (ctx.recommendations.length > 0) {
45
+ lines.push('Recommendations:');
46
+ for (const r of ctx.recommendations) {
47
+ lines.push(` ${r}`);
48
+ }
49
+ }
50
+ return lines.join('\n');
51
+ }
52
+ // ---------------------------------------------------------------------------
53
+ // Sub-commands
54
+ // ---------------------------------------------------------------------------
55
+ const contextBuild = defineCommand({
56
+ meta: { name: 'build', description: 'Build context for current task' },
57
+ args: {
58
+ 'session-id': { type: 'string', required: true },
59
+ 'artifact-id': { type: 'string' },
60
+ role: { type: 'string' },
61
+ },
62
+ async run({ args }) {
63
+ const { ctx } = getEngine();
64
+ const result = await ctx.build({
65
+ sessionId: args['session-id'],
66
+ roleId: args.role,
67
+ currentArtifactId: args['artifact-id'],
68
+ });
69
+ console.log(JSON.stringify(result, null, 2));
70
+ },
71
+ });
72
+ const contextStatus = defineCommand({
73
+ meta: { name: 'status', description: 'Show session context status' },
74
+ args: {
75
+ 'session-id': { type: 'string', required: true },
76
+ },
77
+ async run({ args }) {
78
+ const { ctx, roleGate } = getEngine();
79
+ const status = await ctx.getStatus(args['session-id'], roleGate);
80
+ console.log(JSON.stringify(status, null, 2));
81
+ },
82
+ });
83
+ const contextInject = defineCommand({
84
+ meta: { name: 'inject', description: 'Inject FSM context for SessionStart hook' },
85
+ args: {
86
+ 'session-id': { type: 'string', required: true },
87
+ },
88
+ async run({ args }) {
89
+ const { eventBus, kb, fsmAgentBridge } = getEngine();
90
+ // Get FSM context for all session artifacts
91
+ const fsmContext = await fsmAgentBridge.getSessionContext(args['session-id'], eventBus);
92
+ // Recall relevant lessons based on artifact types
93
+ const artifactTypes = fsmContext.artifacts.map(a => a.artifactType);
94
+ if (artifactTypes.length > 0) {
95
+ const lessons = await kb.recall({ type: 'lesson', limit: 5 });
96
+ fsmContext.recalledLessons = lessons.map(l => `${l.id}: ${l.title} (${l.tags.join(',')})`);
97
+ }
98
+ // Output formatted context for Agent to read
99
+ const output = {
100
+ sessionId: fsmContext.sessionId,
101
+ generatedAt: fsmContext.generatedAt,
102
+ artifacts: fsmContext.artifacts.map(a => ({
103
+ id: a.artifactId,
104
+ type: a.artifactType,
105
+ status: a.currentStatus,
106
+ allowedActions: a.allowedTransitions,
107
+ blocked: a.blockingReasons.length > 0 ? a.blockingReasons : null,
108
+ })),
109
+ lessons: fsmContext.recalledLessons,
110
+ recommendations: fsmContext.recommendations,
111
+ // Human-readable summary
112
+ summary: formatContextSummary(fsmContext),
113
+ };
114
+ console.log(JSON.stringify(output, null, 2));
115
+ },
116
+ });
117
+ const contextGlossary = defineCommand({
118
+ meta: { name: 'glossary', description: 'Show project domain glossary (借鉴 mattpocock/skills CONTEXT.md)' },
119
+ args: {
120
+ json: { type: 'boolean', default: false, description: 'JSON output' },
121
+ },
122
+ run({ args }) {
123
+ const glossaryPath = join(SCALE_DIR, 'GLOSSARY.md');
124
+ if (!existsSync(glossaryPath)) {
125
+ if (args.json)
126
+ console.log(JSON.stringify({ ok: false, message: 'GLOSSARY.md not found in SCALE_DIR. Run scale init to generate it.' }));
127
+ else
128
+ console.log('GLOSSARY.md not found. Run scale init to generate it.');
129
+ return;
130
+ }
131
+ const content = readFileSync(glossaryPath, 'utf-8');
132
+ // Parse terms: **Term**: definition
133
+ const termMatch = /\*\*(\w[^*]+)\*\*\s*:\s*(.+)/g;
134
+ const terms = {};
135
+ let m;
136
+ while ((m = termMatch.exec(content)) !== null) {
137
+ terms[m[1].trim()] = m[2].trim().replace(/_Avoid_/, 'Avoid:');
138
+ }
139
+ // Parse relationships
140
+ const relSection = content.split('## Relationships')[1]?.split('## ')[0] ?? '';
141
+ const relationships = relSection.split('\n').filter((l) => l.trim().startsWith('- ')).map((l) => l.replace(/^- /, '').trim());
142
+ if (args.json) {
143
+ console.log(JSON.stringify({ ok: true, terms, relationships, count: Object.keys(terms).length }));
144
+ }
145
+ else {
146
+ console.log('=== SCALE Engine Domain Glossary ===\n');
147
+ console.log(`Terms (${Object.keys(terms).length}):\n`);
148
+ for (const [term, def] of Object.entries(terms)) {
149
+ console.log(` **${term}**: ${def}`);
150
+ }
151
+ if (relationships.length > 0) {
152
+ console.log(`\nRelationships (${relationships.length}):`);
153
+ for (const rel of relationships) {
154
+ console.log(` - ${rel}`);
155
+ }
156
+ }
157
+ }
158
+ },
159
+ });
160
+ const contextInit = defineCommand({
161
+ meta: { name: 'init', description: 'Create CONTEXT.md and CONTEXT-MAP.md starter templates' },
162
+ args: {
163
+ dir: { type: 'string', default: PROJECT_DIR, description: 'Project directory' },
164
+ name: { type: 'string', description: 'Project display name' },
165
+ force: { type: 'boolean', default: false, description: 'Overwrite existing templates' },
166
+ json: { type: 'boolean', default: false },
167
+ },
168
+ run({ args }) {
169
+ const result = writeContextGovernanceTemplates({
170
+ projectDir: resolve(String(args.dir ?? PROJECT_DIR)),
171
+ projectName: args.name ? String(args.name) : undefined,
172
+ force: isTruthyFlag(args.force),
173
+ });
174
+ if (args.json) {
175
+ console.log(JSON.stringify(result, null, 2));
176
+ return;
177
+ }
178
+ console.log('\nSCALE Context Templates');
179
+ for (const file of result.created)
180
+ console.log(` [CREATED] ${file}`);
181
+ for (const file of result.skipped)
182
+ console.log(` [SKIPPED] ${file}`);
183
+ },
184
+ });
185
+ const contextGrill = defineCommand({
186
+ meta: { name: 'grill', description: 'Check project context docs and generate request-specific grill questions' },
187
+ args: {
188
+ dir: { type: 'string', default: PROJECT_DIR, description: 'Project directory' },
189
+ 'task-id': { type: 'string', description: 'Task id for workflow state and artifact linkage' },
190
+ task: { type: 'string', required: true, description: 'Task or requirement description' },
191
+ files: { type: 'string', description: 'Comma-separated changed or target files' },
192
+ 'artifact-dir': { type: 'string', description: 'Task artifact directory where explore.md should be updated' },
193
+ write: { type: 'boolean', default: false, description: 'Append context grill output to the task explore artifact' },
194
+ json: { type: 'boolean', default: false },
195
+ },
196
+ run({ args }) {
197
+ const projectDir = resolve(String(args.dir ?? PROJECT_DIR));
198
+ const taskId = String(args['task-id'] ?? `context-${Date.now()}`);
199
+ const changedFiles = parseCommaList(args.files);
200
+ const report = analyzeContextGovernance({
201
+ projectDir,
202
+ request: String(args.task ?? ''),
203
+ changedFiles,
204
+ });
205
+ const artifactPath = isTruthyFlag(args.write)
206
+ ? appendContextGrillArtifact({
207
+ projectDir,
208
+ artifactsDir: args['artifact-dir'] ? String(args['artifact-dir']) : undefined,
209
+ report,
210
+ }) ?? undefined
211
+ : undefined;
212
+ if (args['task-id'] || artifactPath) {
213
+ const writer = new WorkflowArtifactWriter(SCALE_DIR);
214
+ const current = writer.readCurrentState();
215
+ const currentOpenTasks = current?.taskId === taskId ? current.openTasks : [];
216
+ writer.updateCurrentState({
217
+ taskId,
218
+ phase: 'explore',
219
+ artifactsDir: args['artifact-dir'] ? String(args['artifact-dir']).replace(/\\/g, '/') : undefined,
220
+ exploredFiles: changedFiles,
221
+ fileCount: changedFiles.length,
222
+ mainContradiction: report.findings[0]?.message ?? 'context governance ready',
223
+ openTasks: removeWorkflowOpenTask(currentOpenTasks, 'context-grill'),
224
+ });
225
+ }
226
+ if (args.json) {
227
+ console.log(JSON.stringify({ ...report, artifactPath }, null, 2));
228
+ return;
229
+ }
230
+ console.log(renderContextGrillPrompt(report));
231
+ if (artifactPath)
232
+ console.log(`\nArtifact: ${artifactPath}`);
233
+ },
234
+ });
235
+ const contextBudget = defineCommand({
236
+ meta: { name: 'budget', description: 'Report Always/on-demand/evidence/archive/generated context token cost' },
237
+ args: {
238
+ dir: { type: 'string', default: PROJECT_DIR, description: 'Project directory' },
239
+ 'max-always': { type: 'string', description: 'Maximum Always-loaded estimated tokens' },
240
+ 'max-task': { type: 'string', description: 'Maximum task context estimated tokens' },
241
+ provider: { type: 'string', default: 'generic', description: 'Model provider for prompt cache policy: anthropic, openai, or generic' },
242
+ write: { type: 'boolean', default: false, description: 'Write .scale/context-budget.json' },
243
+ json: { type: 'boolean', default: false },
244
+ },
245
+ run({ args }) {
246
+ const projectDir = resolve(String(args.dir ?? PROJECT_DIR));
247
+ const scaleDir = resolveScaleDirForProject(projectDir);
248
+ const report = scanContextBudget({
249
+ projectDir,
250
+ scaleDir,
251
+ maxAlwaysTokens: parsePositiveIntArg(args['max-always'], '--max-always'),
252
+ maxTaskTokens: parsePositiveIntArg(args['max-task'], '--max-task'),
253
+ });
254
+ const promptCache = resolvePromptCachePolicy({
255
+ provider: String(args.provider ?? 'generic'),
256
+ entries: report.entries,
257
+ });
258
+ const path = isTruthyFlag(args.write) ? writeContextBudgetReport(report) : undefined;
259
+ if (args.json) {
260
+ console.log(JSON.stringify({ ...report, promptCache, path }, null, 2));
261
+ return;
262
+ }
263
+ console.log('SCALE Context Budget');
264
+ console.log(` Project: ${report.projectDir}`);
265
+ console.log(` Total: ${report.summary.totalTokens} estimated tokens across ${report.summary.totalFiles} files`);
266
+ console.log(` Always: ${report.summary.alwaysTokens}/${report.thresholds.maxAlwaysTokens}`);
267
+ for (const [category, summary] of Object.entries(report.summary.byCategory)) {
268
+ console.log(` ${category}: ${summary.tokens} tokens in ${summary.files} files`);
269
+ }
270
+ console.log(` Prompt cache provider: ${promptCache.provider}`);
271
+ console.log(` Prompt cache strategy: ${promptCache.strategy}${promptCache.supported ? '' : ' (usage ledger only)'}`);
272
+ console.log(` Cache eligible: ${promptCache.cacheEligibleTokens} tokens across ${promptCache.cacheEligiblePaths.length} paths`);
273
+ for (const recommendation of report.recommendations)
274
+ console.log(` recommendation: ${recommendation}`);
275
+ if (path)
276
+ console.log(` wrote: ${path}`);
277
+ },
278
+ });
279
+ const contextPack = defineCommand({
280
+ meta: { name: 'pack', description: 'Build a lazy-loaded context pack for a task' },
281
+ args: {
282
+ dir: { type: 'string', default: PROJECT_DIR, description: 'Project directory' },
283
+ task: { type: 'string', required: true, description: 'Current task or question' },
284
+ 'task-id': { type: 'string', description: 'Task id' },
285
+ level: { type: 'string', default: 'M', description: 'Task level: S, M, L, or CRITICAL' },
286
+ files: { type: 'string', description: 'Comma-separated files or modules in scope' },
287
+ budget: { type: 'string', description: 'Maximum estimated tokens for the context pack' },
288
+ json: { type: 'boolean', default: false },
289
+ },
290
+ run({ args }) {
291
+ const projectDir = resolve(String(args.dir ?? PROJECT_DIR));
292
+ const scaleDir = resolveScaleDirForProject(projectDir);
293
+ const pack = buildContextPack({
294
+ projectDir,
295
+ scaleDir,
296
+ task: String(args.task),
297
+ taskId: args['task-id'] ? String(args['task-id']) : undefined,
298
+ level: String(args.level ?? 'M'),
299
+ files: parseCommaList(args.files),
300
+ budget: parsePositiveIntArg(args.budget, '--budget'),
301
+ });
302
+ if (args.json) {
303
+ console.log(JSON.stringify(pack, null, 2));
304
+ return;
305
+ }
306
+ console.log('SCALE Context Pack');
307
+ console.log(` Task: ${pack.task.task}`);
308
+ console.log(` Budget: ${pack.totalEstimatedTokens}/${pack.task.budget}`);
309
+ for (const section of pack.sections) {
310
+ console.log(` [${section.included ? 'IN' : 'OUT'}] ${section.id}: ${section.estimatedTokens} tokens`);
311
+ }
312
+ },
313
+ });
314
+ const contextDoctor = defineCommand({
315
+ meta: { name: 'doctor', description: 'Check context budget thresholds and generated-artifact loading risk' },
316
+ args: {
317
+ dir: { type: 'string', default: PROJECT_DIR, description: 'Project directory' },
318
+ 'max-always': { type: 'string', description: 'Maximum Always-loaded estimated tokens' },
319
+ 'max-task': { type: 'string', description: 'Maximum task context estimated tokens' },
320
+ task: { type: 'string', description: 'Task text for a representative lazy context pack probe' },
321
+ level: { type: 'string', default: 'M', description: 'Task level for the context pack probe' },
322
+ files: { type: 'string', description: 'Comma-separated scoped files for the context pack probe' },
323
+ json: { type: 'boolean', default: false },
324
+ },
325
+ run({ args }) {
326
+ const projectDir = resolve(String(args.dir ?? PROJECT_DIR));
327
+ const scaleDir = resolveScaleDirForProject(projectDir);
328
+ const report = doctorContextBudget({
329
+ projectDir,
330
+ scaleDir,
331
+ maxAlwaysTokens: parsePositiveIntArg(args['max-always'], '--max-always'),
332
+ maxTaskTokens: parsePositiveIntArg(args['max-task'], '--max-task'),
333
+ task: args.task ? String(args.task) : undefined,
334
+ level: String(args.level ?? 'M'),
335
+ files: parseCommaList(args.files),
336
+ });
337
+ if (args.json) {
338
+ console.log(JSON.stringify(report, null, 2));
339
+ if (!report.ok)
340
+ process.exitCode = 1;
341
+ return;
342
+ }
343
+ console.log(`SCALE Context Doctor: ${report.ok ? 'OK' : 'FAILED'}`);
344
+ for (const check of report.checks) {
345
+ console.log(` [${check.status.toUpperCase()}] ${check.name}: ${check.message}`);
346
+ }
347
+ if (!report.ok)
348
+ process.exitCode = 1;
349
+ },
350
+ });
351
+ const contextAnatomy = defineCommand({
352
+ meta: { name: 'anatomy', description: 'Scan the project and generate .scale/anatomy.md for file-map context' },
353
+ args: {
354
+ dir: { type: 'string', default: PROJECT_DIR, description: 'Project directory' },
355
+ 'max-files': { type: 'string', description: 'Maximum files to include; defaults to 500' },
356
+ exclude: { type: 'string', description: 'Comma-separated directory names to exclude' },
357
+ write: { type: 'boolean', default: false, description: 'Write .scale/anatomy.md' },
358
+ json: { type: 'boolean', default: false },
359
+ },
360
+ run({ args }) {
361
+ const projectDir = resolve(String(args.dir ?? PROJECT_DIR));
362
+ const scaleDir = resolveScaleDirForProject(projectDir);
363
+ const maxFiles = parsePositiveIntArg(args['max-files'], '--max-files');
364
+ const excludePatterns = parseCommaList(args.exclude);
365
+ const anatomy = new ProjectAnatomy();
366
+ const sections = anatomy.scan(projectDir, {
367
+ maxFiles,
368
+ excludePatterns: excludePatterns.length > 0 ? excludePatterns : undefined,
369
+ });
370
+ const content = anatomy.serialize(sections);
371
+ const summary = [...sections.values()].reduce((acc, entries) => {
372
+ acc.files += entries.length;
373
+ acc.tokens += entries.reduce((sum, entry) => sum + entry.tokens, 0);
374
+ return acc;
375
+ }, { files: 0, tokens: 0 });
376
+ const outputPath = join(scaleDir, 'anatomy.md');
377
+ if (isTruthyFlag(args.write)) {
378
+ ensureDir(scaleDir);
379
+ writeFileSync(outputPath, content, 'utf-8');
380
+ }
381
+ if (args.json) {
382
+ console.log(JSON.stringify({
383
+ ok: true,
384
+ projectDir,
385
+ outputPath: isTruthyFlag(args.write) ? outputPath : undefined,
386
+ summary,
387
+ }, null, 2));
388
+ return;
389
+ }
390
+ console.log('SCALE Project Anatomy');
391
+ console.log(` Files: ${summary.files}`);
392
+ console.log(` Estimated tokens: ${summary.tokens}`);
393
+ if (isTruthyFlag(args.write))
394
+ console.log(` Wrote: ${outputPath}`);
395
+ },
396
+ });
397
+ // ---------------------------------------------------------------------------
398
+ // Exported parent command
399
+ // ---------------------------------------------------------------------------
400
+ export const contextCommand = defineCommand({
401
+ meta: { name: 'context', description: 'Context assembly' },
402
+ subCommands: {
403
+ build: contextBuild,
404
+ status: contextStatus,
405
+ inject: contextInject,
406
+ glossary: contextGlossary,
407
+ init: contextInit,
408
+ grill: contextGrill,
409
+ budget: contextBudget,
410
+ pack: contextPack,
411
+ doctor: contextDoctor,
412
+ anatomy: contextAnatomy,
413
+ },
414
+ });
415
+ //# sourceMappingURL=contextCommands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextCommands.js","sourceRoot":"","sources":["../../src/cli/contextCommands.ts"],"names":[],"mappings":"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"}
@@ -68,4 +68,40 @@ export declare const cortexVerifyCommand: import("citty").CommandDef<{
68
68
  default: false;
69
69
  };
70
70
  }>;
71
+ export declare const cortexAuditCommand: import("citty").CommandDef<{
72
+ dir: {
73
+ type: "string";
74
+ default: string;
75
+ description: string;
76
+ };
77
+ id: {
78
+ type: "string";
79
+ description: string;
80
+ };
81
+ limit: {
82
+ type: "string";
83
+ default: string;
84
+ description: string;
85
+ };
86
+ json: {
87
+ type: "boolean";
88
+ default: false;
89
+ };
90
+ }>;
91
+ export declare const cortexRestoreCommand: import("citty").CommandDef<{
92
+ auditId: {
93
+ type: "positional";
94
+ required: true;
95
+ description: string;
96
+ };
97
+ dir: {
98
+ type: "string";
99
+ default: string;
100
+ description: string;
101
+ };
102
+ json: {
103
+ type: "boolean";
104
+ default: false;
105
+ };
106
+ }>;
71
107
  export declare const cortexCommand: import("citty").CommandDef<import("citty").ArgsDef>;
@@ -39,8 +39,8 @@ export const cortexExtractCommand = defineCommand({
39
39
  console.log(` Instincts extracted: ${instincts.length} (${filtered.length} ≥ ${minConfidence} confidence)\n`);
40
40
  let saved = 0;
41
41
  for (const instinct of filtered) {
42
- store.save(instinct);
43
- saved++;
42
+ if (store.save(instinct))
43
+ saved++;
44
44
  }
45
45
  console.log(` Saved: ${saved} instincts to .scale/instincts/`);
46
46
  if (args.json) {
@@ -152,8 +152,8 @@ export const cortexEvolveCommand = defineCommand({
152
152
  const highConf = instincts.filter(i => i.confidence >= 0.7);
153
153
  let saved = 0;
154
154
  for (const instinct of highConf) {
155
- store.save(instinct);
156
- saved++;
155
+ if (store.save(instinct))
156
+ saved++;
157
157
  }
158
158
  console.log(` 5. Saved: ${saved} (confidence ≥ 0.7)\n`);
159
159
  // 6. Show reflection results
@@ -317,6 +317,76 @@ export const cortexVerifyCommand = defineCommand({
317
317
  },
318
318
  });
319
319
  // ---------------------------------------------------------------------------
320
+ // scale cortex audit
321
+ // ---------------------------------------------------------------------------
322
+ export const cortexAuditCommand = defineCommand({
323
+ meta: {
324
+ name: 'audit',
325
+ description: 'List append-only Cortex instinct audit history',
326
+ },
327
+ args: {
328
+ dir: { type: 'string', default: process.cwd(), description: 'Project directory' },
329
+ id: { type: 'string', description: 'Filter by instinct id' },
330
+ limit: { type: 'string', default: '20', description: 'Maximum entries to show' },
331
+ json: { type: 'boolean', default: false },
332
+ },
333
+ run({ args }) {
334
+ const projectDir = String(args.dir ?? process.cwd());
335
+ const scaleDir = join(projectDir, '.scale');
336
+ const store = new InstinctStore(join(scaleDir, 'instincts'));
337
+ const limit = Math.max(1, parseInt(String(args.limit ?? 20), 10) || 20);
338
+ const entries = store.history(args.id ? String(args.id) : undefined).slice(-limit);
339
+ if (args.json) {
340
+ console.log(JSON.stringify({ count: entries.length, entries }, null, 2));
341
+ return;
342
+ }
343
+ console.log('SCALE Cortex - Instinct Audit\n');
344
+ if (entries.length === 0) {
345
+ console.log(' No audit entries found.');
346
+ return;
347
+ }
348
+ for (const entry of entries) {
349
+ const scope = [entry.scope, entry.projectId].filter(Boolean).join(':') || 'unknown-scope';
350
+ const reason = entry.reason ? ` reason=${entry.reason}` : '';
351
+ console.log(` ${entry.ts} ${entry.op} ${entry.id} scope=${scope} audit=${entry.auditId}${reason}`);
352
+ }
353
+ },
354
+ });
355
+ // ---------------------------------------------------------------------------
356
+ // scale cortex restore
357
+ // ---------------------------------------------------------------------------
358
+ export const cortexRestoreCommand = defineCommand({
359
+ meta: {
360
+ name: 'restore',
361
+ description: 'Restore a Cortex instinct from an audit entry snapshot',
362
+ },
363
+ args: {
364
+ auditId: { type: 'positional', required: true, description: 'Audit entry id to restore' },
365
+ dir: { type: 'string', default: process.cwd(), description: 'Project directory' },
366
+ json: { type: 'boolean', default: false },
367
+ },
368
+ run({ args }) {
369
+ const projectDir = String(args.dir ?? process.cwd());
370
+ const scaleDir = join(projectDir, '.scale');
371
+ const store = new InstinctStore(join(scaleDir, 'instincts'));
372
+ const auditId = String(args.auditId);
373
+ const restored = store.restore(auditId);
374
+ if (args.json) {
375
+ console.log(JSON.stringify({ restored, auditId }, null, 2));
376
+ if (!restored)
377
+ process.exitCode = 1;
378
+ return;
379
+ }
380
+ if (restored) {
381
+ console.log(`Restored Cortex instinct snapshot from audit entry: ${auditId}`);
382
+ }
383
+ else {
384
+ console.error(`No restorable Cortex audit entry found: ${auditId}`);
385
+ process.exitCode = 1;
386
+ }
387
+ },
388
+ });
389
+ // ---------------------------------------------------------------------------
320
390
  // scale cortex (parent)
321
391
  // ---------------------------------------------------------------------------
322
392
  export const cortexCommand = defineCommand({
@@ -330,6 +400,8 @@ export const cortexCommand = defineCommand({
330
400
  metrics: cortexMetricsCommand,
331
401
  evolve: cortexEvolveCommand,
332
402
  verify: cortexVerifyCommand,
403
+ audit: cortexAuditCommand,
404
+ restore: cortexRestoreCommand,
333
405
  },
334
406
  });
335
407
  //# sourceMappingURL=cortexCommands.js.map