@hongmaple0820/scale-engine 0.13.0 → 0.14.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 (87) hide show
  1. package/dist/adapters/AiderAdapter.js +1 -1
  2. package/dist/adapters/AiderAdapter.js.map +1 -1
  3. package/dist/adapters/ClaudeCodeAdapter.js +5 -3
  4. package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
  5. package/dist/adapters/CodexAdapter.js +1 -1
  6. package/dist/adapters/CodexAdapter.js.map +1 -1
  7. package/dist/adapters/CursorAdapter.js +1 -1
  8. package/dist/adapters/CursorAdapter.js.map +1 -1
  9. package/dist/adapters/DeepSeekTuiAdapter.js +5 -3
  10. package/dist/adapters/DeepSeekTuiAdapter.js.map +1 -1
  11. package/dist/adapters/DoubaoAdapter.js +1 -1
  12. package/dist/adapters/DoubaoAdapter.js.map +1 -1
  13. package/dist/adapters/GeminiAdapter.js +1 -1
  14. package/dist/adapters/GeminiAdapter.js.map +1 -1
  15. package/dist/adapters/HermesAdapter.js +1 -1
  16. package/dist/adapters/HermesAdapter.js.map +1 -1
  17. package/dist/adapters/KimiAdapter.js +1 -1
  18. package/dist/adapters/KimiAdapter.js.map +1 -1
  19. package/dist/adapters/KiroAdapter.js +1 -1
  20. package/dist/adapters/KiroAdapter.js.map +1 -1
  21. package/dist/adapters/OpenClawAdapter.js +1 -1
  22. package/dist/adapters/OpenClawAdapter.js.map +1 -1
  23. package/dist/adapters/OpenCodeAdapter.js +1 -1
  24. package/dist/adapters/OpenCodeAdapter.js.map +1 -1
  25. package/dist/adapters/QCoderAdapter.js +1 -1
  26. package/dist/adapters/QCoderAdapter.js.map +1 -1
  27. package/dist/adapters/TraeAdapter.js +1 -1
  28. package/dist/adapters/TraeAdapter.js.map +1 -1
  29. package/dist/adapters/VSCAdapter.js +1 -1
  30. package/dist/adapters/VSCAdapter.js.map +1 -1
  31. package/dist/adapters/WindsurfAdapter.js +1 -1
  32. package/dist/adapters/WindsurfAdapter.js.map +1 -1
  33. package/dist/adapters/WorkBuddyAdapter.js +1 -1
  34. package/dist/adapters/WorkBuddyAdapter.js.map +1 -1
  35. package/dist/api/cli.js +308 -13
  36. package/dist/api/cli.js.map +1 -1
  37. package/dist/api/doctor.d.ts +1 -0
  38. package/dist/api/doctor.js +29 -0
  39. package/dist/api/doctor.js.map +1 -1
  40. package/dist/api/quickstart.d.ts +1 -0
  41. package/dist/api/quickstart.js +2 -2
  42. package/dist/api/quickstart.js.map +1 -1
  43. package/dist/cli/phaseCommands.d.ts +5 -0
  44. package/dist/cli/phaseCommands.js +149 -25
  45. package/dist/cli/phaseCommands.js.map +1 -1
  46. package/dist/skills/ExternalSkills.js +2 -0
  47. package/dist/skills/ExternalSkills.js.map +1 -1
  48. package/dist/skills/SkillCatalog.d.ts +13 -0
  49. package/dist/skills/SkillCatalog.js +184 -0
  50. package/dist/skills/SkillCatalog.js.map +1 -0
  51. package/dist/skills/SkillDoctor.d.ts +37 -0
  52. package/dist/skills/SkillDoctor.js +90 -0
  53. package/dist/skills/SkillDoctor.js.map +1 -0
  54. package/dist/skills/index.d.ts +1 -0
  55. package/dist/skills/index.js +1 -0
  56. package/dist/skills/index.js.map +1 -1
  57. package/dist/skills/routing/SkillGate.d.ts +2 -1
  58. package/dist/skills/routing/SkillGate.js +19 -2
  59. package/dist/skills/routing/SkillGate.js.map +1 -1
  60. package/dist/skills/routing/SkillPolicy.js +39 -12
  61. package/dist/skills/routing/SkillPolicy.js.map +1 -1
  62. package/dist/workflow/GovernanceLock.d.ts +35 -0
  63. package/dist/workflow/GovernanceLock.js +58 -0
  64. package/dist/workflow/GovernanceLock.js.map +1 -0
  65. package/dist/workflow/GovernanceTemplatePacks.d.ts +24 -0
  66. package/dist/workflow/GovernanceTemplatePacks.js +83 -0
  67. package/dist/workflow/GovernanceTemplatePacks.js.map +1 -0
  68. package/dist/workflow/GovernanceTemplates.d.ts +6 -1
  69. package/dist/workflow/GovernanceTemplates.js +239 -68
  70. package/dist/workflow/GovernanceTemplates.js.map +1 -1
  71. package/dist/workflow/TaskArtifactScaffolder.js +7 -7
  72. package/dist/workflow/TaskArtifactScaffolder.js.map +1 -1
  73. package/dist/workflow/VerificationCommands.js +1 -8
  74. package/dist/workflow/VerificationCommands.js.map +1 -1
  75. package/dist/workflow/VerificationProfile.d.ts +1 -0
  76. package/dist/workflow/VerificationProfile.js +42 -5
  77. package/dist/workflow/VerificationProfile.js.map +1 -1
  78. package/dist/workflow/WorkflowEngine.d.ts +6 -3
  79. package/dist/workflow/WorkflowEngine.js +1 -1
  80. package/dist/workflow/WorkflowEngine.js.map +1 -1
  81. package/dist/workflow/WorkspaceLifecycle.d.ts +51 -0
  82. package/dist/workflow/WorkspaceLifecycle.js +259 -0
  83. package/dist/workflow/WorkspaceLifecycle.js.map +1 -0
  84. package/dist/workflow/index.d.ts +3 -0
  85. package/dist/workflow/index.js +3 -0
  86. package/dist/workflow/index.js.map +1 -1
  87. package/package.json +2 -2
@@ -169,7 +169,7 @@ This project uses SCALE Engine for AI engineering governance via Windsurf.
169
169
  // 5. .gitignore
170
170
  const gitignorePath = join(this.scaleDir, '.gitignore');
171
171
  if (!existsSync(gitignorePath)) {
172
- writeFileSync(gitignorePath, `*.db\n*.db-journal\nevents/\ncheckpoints/\nhooks/*.sh\n`, 'utf-8');
172
+ writeFileSync(gitignorePath, `*.db\n*.db-journal\nevents/\ncheckpoints/\nevidence/\nstate/\nhooks/*.sh\n`, 'utf-8');
173
173
  created.push(gitignorePath);
174
174
  }
175
175
  logger.info({ created: created.length, skipped: skipped.length }, 'SCALE init (windsurf) completed');
@@ -1 +1 @@
1
- {"version":3,"file":"WindsurfAdapter.js","sourceRoot":"","sources":["../../src/adapters/WindsurfAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WindsurfAdapter.js","sourceRoot":"","sources":["../../src/adapters/WindsurfAdapter.ts"],"names":[],"mappings":"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"}
@@ -143,7 +143,7 @@ This project uses SCALE Engine for AI engineering governance via WorkBuddy.
143
143
  }
144
144
  const gitignorePath = join(this.scaleDir, '.gitignore');
145
145
  if (!existsSync(gitignorePath)) {
146
- writeFileSync(gitignorePath, `*.db\n*.db-journal\nevents/\ncheckpoints/\nhooks/*.sh\n`, 'utf-8');
146
+ writeFileSync(gitignorePath, `*.db\n*.db-journal\nevents/\ncheckpoints/\nevidence/\nstate/\nhooks/*.sh\n`, 'utf-8');
147
147
  created.push(gitignorePath);
148
148
  }
149
149
  logger.info({ created: created.length, skipped: skipped.length }, 'SCALE init (workbuddy) completed');
@@ -1 +1 @@
1
- {"version":3,"file":"WorkBuddyAdapter.js","sourceRoot":"","sources":["../../src/adapters/WorkBuddyAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WorkBuddyAdapter.js","sourceRoot":"","sources":["../../src/adapters/WorkBuddyAdapter.ts"],"names":[],"mappings":"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"}
package/dist/api/cli.js CHANGED
@@ -22,6 +22,7 @@ import { LessonExtractor, RuleProposer, HookGenerator, EvolutionEngine } from '.
22
22
  import { Doctor } from './doctor.js';
23
23
  import { quickStart, detectPlatform } from './quickstart.js';
24
24
  import { SkillDiscovery } from '../skills/SkillDiscovery.js';
25
+ import { inspectRequiredWorkflowSkills, inspectWorkflowSkills } from '../skills/SkillDoctor.js';
25
26
  import { listWorkflowPresets, getPresetsByScenario } from '../workflows/presets.js';
26
27
  import { EvidenceStore } from '../workflow/EvidenceStore.js';
27
28
  import { OutOfScopeStore } from '../workflow/OutOfScopeStore.js';
@@ -29,9 +30,11 @@ import { ReviewStore } from '../workflow/ReviewStore.js';
29
30
  import { WorkflowEngine } from '../workflow/WorkflowEngine.js';
30
31
  import { resolveVerificationTargets } from '../workflow/VerificationProfile.js';
31
32
  import { writeGovernanceTemplates } from '../workflow/GovernanceTemplates.js';
33
+ import { computeGovernanceDrift } from '../workflow/GovernanceLock.js';
32
34
  import { TaskMetricsStore } from '../workflow/TaskMetricsStore.js';
33
35
  import { checkTaskArtifactCompleteness } from '../workflow/TaskArtifactScaffolder.js';
34
36
  import { WorkflowArtifactWriter } from '../workflow/WorkflowArtifactWriter.js';
37
+ import { cleanupWorkspaceLifecycle, inspectWorkspaceLifecycle, } from '../workflow/WorkspaceLifecycle.js';
35
38
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
36
39
  import { join, resolve } from 'node:path';
37
40
  // ============================================================================
@@ -54,6 +57,17 @@ function ensureDir(dir) {
54
57
  function isTruthyFlag(value) {
55
58
  return value === true || value === '' || value === 'true' || value === '1';
56
59
  }
60
+ function normalizePreflightProfile(value) {
61
+ const normalized = String(value ?? 'quick').trim().toLowerCase();
62
+ if (normalized === 'full' || normalized === 'ci')
63
+ return normalized;
64
+ return 'quick';
65
+ }
66
+ function gatesForPreflightProfile(profile) {
67
+ if (profile === 'quick')
68
+ return ['G3', 'G0', 'G4', 'G5'];
69
+ return ['G3', 'G0', 'G4', 'G5', 'G6', 'G7'];
70
+ }
57
71
  let _engine = null;
58
72
  function getEngine() {
59
73
  if (!_engine)
@@ -810,6 +824,123 @@ const taskArtifacts = defineCommand({
810
824
  meta: { name: 'task-artifacts', description: 'Inspect task artifact completeness' },
811
825
  subCommands: { check: taskArtifactsCheck },
812
826
  });
827
+ function printWorkspaceLifecycle(report) {
828
+ console.log('\nSCALE Workspace Lifecycle');
829
+ console.log(` Root: ${report.root.path}`);
830
+ console.log(` Branch: ${report.root.branch ?? '(detached)'}`);
831
+ console.log(` Linked worktree: ${report.root.isLinkedWorktree ? 'yes' : 'no'}`);
832
+ console.log(` Root status: ${report.root.clean ? 'clean' : 'dirty'}`);
833
+ if (!report.root.clean) {
834
+ console.log(` staged=${report.root.staged} unstaged=${report.root.unstaged} untracked=${report.root.untracked}`);
835
+ }
836
+ if (report.childRepositories.length) {
837
+ console.log('\n Child repositories:');
838
+ for (const child of report.childRepositories) {
839
+ console.log(` ${child.clean ? '[CLEAN]' : '[DIRTY]'} ${child.relativePath} (${child.kind}) branch=${child.branch ?? '(detached)'}`);
840
+ if (!child.clean)
841
+ console.log(` staged=${child.staged} unstaged=${child.unstaged} untracked=${child.untracked}`);
842
+ }
843
+ }
844
+ else {
845
+ console.log('\n Child repositories: none');
846
+ }
847
+ console.log(`\n Cleanup candidate: ${report.finish.canCleanup ? 'yes' : 'no'}`);
848
+ for (const blocker of report.finish.blockers)
849
+ console.log(` [BLOCKER] ${blocker}`);
850
+ for (const warning of report.finish.warnings)
851
+ console.log(` [WARN] ${warning}`);
852
+ for (const action of report.finish.nextActions)
853
+ console.log(` [NEXT] ${action}`);
854
+ }
855
+ function printWorkspaceCleanup(result) {
856
+ printWorkspaceLifecycle(result.report);
857
+ console.log('\n Cleanup plan:');
858
+ console.log(` Mode: ${result.mode}`);
859
+ console.log(` Target: ${result.targetPath}`);
860
+ console.log(` Can apply: ${result.canApply ? 'yes' : 'no'}`);
861
+ console.log(` Applied: ${result.applied ? 'yes' : 'no'}`);
862
+ console.log(` Confirmation token: ${result.confirmationToken ?? '(unavailable)'}`);
863
+ for (const command of result.commands)
864
+ console.log(` Command: ${command}`);
865
+ for (const blocker of result.blockers)
866
+ console.log(` [BLOCKER] ${blocker}`);
867
+ for (const warning of result.warnings)
868
+ console.log(` [WARN] ${warning}`);
869
+ }
870
+ const workspaceStatus = defineCommand({
871
+ meta: { name: 'status', description: 'Inspect root worktree and child repository lifecycle state' },
872
+ args: {
873
+ dir: { type: 'string', description: 'Repository or worktree directory; defaults to current project directory' },
874
+ json: { type: 'boolean', default: false },
875
+ },
876
+ async run({ args }) {
877
+ const report = await inspectWorkspaceLifecycle({ projectDir: args.dir ?? PROJECT_DIR });
878
+ if (args.json) {
879
+ console.log(JSON.stringify(report, null, 2));
880
+ }
881
+ else {
882
+ printWorkspaceLifecycle(report);
883
+ }
884
+ if (report.finish.blockers.length > 0)
885
+ process.exitCode = 1;
886
+ },
887
+ });
888
+ const workspaceFinish = defineCommand({
889
+ meta: { name: 'finish', description: 'Check whether a temporary worktree can be safely finished or cleaned up' },
890
+ args: {
891
+ dir: { type: 'string', description: 'Repository or worktree directory; defaults to current project directory' },
892
+ json: { type: 'boolean', default: false },
893
+ },
894
+ async run({ args }) {
895
+ const report = await inspectWorkspaceLifecycle({ projectDir: args.dir ?? PROJECT_DIR });
896
+ const result = {
897
+ root: report.root,
898
+ childRepositories: report.childRepositories,
899
+ finish: report.finish,
900
+ };
901
+ if (args.json) {
902
+ console.log(JSON.stringify(result, null, 2));
903
+ }
904
+ else {
905
+ printWorkspaceLifecycle(report);
906
+ }
907
+ if (report.finish.blockers.length > 0)
908
+ process.exitCode = 1;
909
+ },
910
+ });
911
+ const workspaceCleanup = defineCommand({
912
+ meta: { name: 'cleanup', description: 'Dry-run or apply safe removal of a linked temporary worktree' },
913
+ args: {
914
+ dir: { type: 'string', description: 'Linked worktree directory; defaults to current project directory' },
915
+ 'dry-run': { type: 'boolean', default: false, description: 'Preview cleanup; this is the default unless --apply is set' },
916
+ apply: { type: 'boolean', default: false, description: 'Actually run git worktree remove after safety checks' },
917
+ confirm: { type: 'string', description: 'Required confirmation token for --apply, usually the worktree branch name' },
918
+ json: { type: 'boolean', default: false },
919
+ },
920
+ async run({ args }) {
921
+ const result = await cleanupWorkspaceLifecycle({
922
+ projectDir: args.dir ?? PROJECT_DIR,
923
+ apply: isTruthyFlag(args.apply),
924
+ confirm: args.confirm,
925
+ });
926
+ if (args.json) {
927
+ console.log(JSON.stringify(result, null, 2));
928
+ }
929
+ else {
930
+ printWorkspaceCleanup(result);
931
+ }
932
+ if (!result.canApply || (isTruthyFlag(args.apply) && !result.applied))
933
+ process.exitCode = 1;
934
+ },
935
+ });
936
+ const workspace = defineCommand({
937
+ meta: { name: 'workspace', description: 'Inspect worktree, branch, and child repository lifecycle safety' },
938
+ subCommands: {
939
+ status: workspaceStatus,
940
+ finish: workspaceFinish,
941
+ cleanup: workspaceCleanup,
942
+ },
943
+ });
813
944
  const preflight = defineCommand({
814
945
  meta: { name: 'preflight', description: 'Run service-aware verification without a task artifact' },
815
946
  args: {
@@ -818,6 +949,7 @@ const preflight = defineCommand({
818
949
  'test-cmd': { type: 'string', description: 'Override test command' },
819
950
  'coverage-cmd': { type: 'string', description: 'Override coverage command' },
820
951
  profile: { type: 'string', description: 'Verification profile from .scale/verification.json' },
952
+ 'preflight-profile': { type: 'string', default: 'quick', description: 'Gate intensity profile (quick/full/ci); quick skips coverage and security' },
821
953
  service: { type: 'string', description: 'Service name from .scale/verification.json; use all for required services' },
822
954
  'tdd-evidence': { type: 'string', description: 'Path to JSON TDD evidence with red/green/refactor/testFirst=true' },
823
955
  'tdd-strict': { type: 'boolean', default: false, description: 'Require TDD evidence before other gates' },
@@ -825,6 +957,8 @@ const preflight = defineCommand({
825
957
  },
826
958
  async run({ args }) {
827
959
  const { workflowEngine } = getEngine();
960
+ const preflightProfile = normalizePreflightProfile(args['preflight-profile']);
961
+ const gateStages = gatesForPreflightProfile(preflightProfile);
828
962
  const resolved = resolveVerificationTargets({
829
963
  projectDir: PROJECT_DIR,
830
964
  scaleDir: SCALE_DIR,
@@ -837,6 +971,8 @@ const preflight = defineCommand({
837
971
  for (const warning of resolved.warnings)
838
972
  console.log(` [WARN] ${warning}`);
839
973
  console.log(` Profile: ${resolved.profileName}`);
974
+ console.log(` Preflight profile: ${preflightProfile}`);
975
+ console.log(` Gates: ${gateStages.join(', ')}`);
840
976
  }
841
977
  for (const target of resolved.targets) {
842
978
  if (!args.json) {
@@ -851,6 +987,7 @@ const preflight = defineCommand({
851
987
  coverage: args['coverage-cmd'] ?? target.config.coverage,
852
988
  tddEvidence: args['tdd-evidence'],
853
989
  tddStrict: isTruthyFlag(args['tdd-strict']),
990
+ gates: gateStages,
854
991
  });
855
992
  const passed = gates.every(gate => gate.passed);
856
993
  targetResults.push({
@@ -871,6 +1008,8 @@ const preflight = defineCommand({
871
1008
  const result = {
872
1009
  phase: 'PREFLIGHT',
873
1010
  profile: resolved.profileName,
1011
+ preflightProfile,
1012
+ gates: gateStages,
874
1013
  services: targetResults.map(target => target.service).filter(Boolean),
875
1014
  policy: resolved.policy,
876
1015
  targets: targetResults,
@@ -1006,7 +1145,13 @@ const init = defineCommand({
1006
1145
  args: {
1007
1146
  agent: { type: 'string', default: '', description: `Agent type (${SUPPORTED_AGENTS.join('/')}) - auto-detected if not specified` },
1008
1147
  dir: { type: 'string', default: '.', description: 'Project directory' },
1148
+ json: { type: 'boolean', default: false, description: 'Output initialization result as JSON' },
1009
1149
  scenario: { type: 'string', default: 'standard', description: 'Scenario mode (sandbox/standard/critical)' },
1150
+ 'governance-pack': {
1151
+ type: 'string',
1152
+ default: 'standard',
1153
+ description: 'Governance template pack (standard/project-scaffold/go-service-matrix/node-library/frontend-app)',
1154
+ },
1010
1155
  quick: { type: 'boolean', default: false, description: 'Quick start with auto-detection' },
1011
1156
  interactive: { type: 'boolean', default: false, description: 'Interactive configuration mode with prompts' },
1012
1157
  'coverage-threshold': { type: 'string', default: '80', description: 'Coverage threshold (default 80%)' },
@@ -1067,6 +1212,7 @@ const init = defineCommand({
1067
1212
  const governance = writeGovernanceTemplates(args.dir, {
1068
1213
  mode: governanceModeFromScenario(scenarioMode),
1069
1214
  projectName,
1215
+ pack: args['governance-pack'],
1070
1216
  });
1071
1217
  result.created.push(...governance.created);
1072
1218
  result.skipped.push(...governance.skipped);
@@ -1091,8 +1237,24 @@ const init = defineCommand({
1091
1237
  return;
1092
1238
  }
1093
1239
  // One-click quick start mode
1094
- if (args.quick || !args.agent) {
1095
- const qsResult = await quickStart(args.dir);
1240
+ if (!args.agent) {
1241
+ const qsResult = await quickStart(args.dir, { governancePack: args['governance-pack'] });
1242
+ if (args.json) {
1243
+ const detection = qsResult.success ? undefined : detectPlatform(args.dir);
1244
+ console.log(JSON.stringify({
1245
+ ok: qsResult.success,
1246
+ mode: 'quick',
1247
+ platform: qsResult.platform,
1248
+ created: qsResult.created,
1249
+ skipped: qsResult.skipped,
1250
+ constraintsApplied: qsResult.constraintsApplied,
1251
+ capabilitiesEnabled: qsResult.capabilitiesEnabled,
1252
+ knowledgeGraph: qsResult.knowledgeGraph,
1253
+ nextSteps: qsResult.nextSteps,
1254
+ suggestions: detection?.suggestions ?? [],
1255
+ }, null, 2));
1256
+ return;
1257
+ }
1096
1258
  if (qsResult.success && qsResult.platform) {
1097
1259
  console.log(`\n✅ SCALE Engine Quick Start completed for ${qsResult.platform}`);
1098
1260
  console.log(`\n📁 Created (${qsResult.created.length}):`);
@@ -1124,9 +1286,26 @@ const init = defineCommand({
1124
1286
  const governance = writeGovernanceTemplates(args.dir, {
1125
1287
  mode: governanceModeFromScenario(args.scenario),
1126
1288
  projectName,
1289
+ pack: args['governance-pack'],
1127
1290
  });
1128
1291
  result.created.push(...governance.created);
1129
1292
  result.skipped.push(...governance.skipped);
1293
+ if (args.json) {
1294
+ console.log(JSON.stringify({
1295
+ ok: true,
1296
+ mode: args.quick ? 'quick-agent' : 'manual',
1297
+ agent: args.agent,
1298
+ scenario: args.scenario,
1299
+ governancePack: args['governance-pack'],
1300
+ settingsPath: result.settingsPath,
1301
+ knowledgeDocPath: result.knowledgeDocPath,
1302
+ scaleDir: result.scaleDir,
1303
+ created: result.created,
1304
+ skipped: result.skipped,
1305
+ nextSteps: ['scale doctor', 'scale create Spec "<feature name>"'],
1306
+ }, null, 2));
1307
+ return;
1308
+ }
1130
1309
  console.log(`\n✅ SCALE Engine initialized for ${args.agent} (scenario: ${args.scenario})`);
1131
1310
  console.log(`\n📁 Created:`);
1132
1311
  for (const f of result.created)
@@ -1145,6 +1324,39 @@ const init = defineCommand({
1145
1324
  },
1146
1325
  });
1147
1326
  // ============================================================================
1327
+ // governance command — Generated governance asset tooling
1328
+ // ============================================================================
1329
+ const governanceDiff = defineCommand({
1330
+ meta: { name: 'diff', description: 'Check generated governance files for drift' },
1331
+ args: {
1332
+ dir: { type: 'string', default: '.', description: 'Project directory' },
1333
+ json: { type: 'boolean', default: false, description: 'Print JSON output' },
1334
+ },
1335
+ run({ args }) {
1336
+ const report = computeGovernanceDrift(args.dir);
1337
+ if (args.json) {
1338
+ console.log(JSON.stringify(report, null, 2));
1339
+ return;
1340
+ }
1341
+ if (!report.lockExists) {
1342
+ console.log('No governance lock found. Run: scale init --governance-pack <pack>');
1343
+ return;
1344
+ }
1345
+ if (report.missing.length === 0 && report.changed.length === 0) {
1346
+ console.log('Governance generated files are clean.');
1347
+ return;
1348
+ }
1349
+ for (const item of report.missing)
1350
+ console.log(`missing: ${item.path}`);
1351
+ for (const item of report.changed)
1352
+ console.log(`changed: ${item.path}`);
1353
+ },
1354
+ });
1355
+ const governance = defineCommand({
1356
+ meta: { name: 'governance', description: 'Governance template pack tools' },
1357
+ subCommands: { diff: governanceDiff },
1358
+ });
1359
+ // ============================================================================
1148
1360
  // evolve command
1149
1361
  // ============================================================================
1150
1362
  const evolve = defineCommand({
@@ -1188,11 +1400,29 @@ const workflowList = defineCommand({
1188
1400
  meta: { name: 'list', description: 'List all workflow presets' },
1189
1401
  args: {
1190
1402
  scenario: { type: 'string', description: 'Filter by scenario mode (sandbox/standard/critical)' },
1403
+ json: { type: 'boolean', default: false, description: 'Output workflow presets as JSON' },
1191
1404
  },
1192
1405
  async run({ args }) {
1193
1406
  const presets = args.scenario
1194
1407
  ? getPresetsByScenario(args.scenario)
1195
1408
  : listWorkflowPresets();
1409
+ if (args.json) {
1410
+ console.log(JSON.stringify({
1411
+ ok: true,
1412
+ scenario: args.scenario ?? null,
1413
+ count: presets.length,
1414
+ presets: presets.map(preset => ({
1415
+ id: preset.id,
1416
+ name: preset.name,
1417
+ nameZh: preset.nameZh,
1418
+ description: preset.description,
1419
+ scenarioMode: preset.scenarioMode,
1420
+ requiredArtifacts: preset.requiredArtifacts,
1421
+ steps: preset.steps,
1422
+ })),
1423
+ }, null, 2));
1424
+ return;
1425
+ }
1196
1426
  if (presets.length === 0) {
1197
1427
  console.log('No workflow presets found.');
1198
1428
  return;
@@ -1366,15 +1596,34 @@ const skillScan = defineCommand({
1366
1596
  meta: { name: 'scan', description: 'Scan for installed skills' },
1367
1597
  args: {
1368
1598
  dir: { type: 'string', default: '.', description: 'Project directory' },
1599
+ json: { type: 'boolean', default: false, description: 'Output scan result as JSON' },
1369
1600
  },
1370
1601
  async run({ args }) {
1371
1602
  const discovery = new SkillDiscovery(args.dir);
1372
1603
  const platform = discovery.detectPlatform();
1604
+ if (!platform && args.json) {
1605
+ console.log(JSON.stringify({
1606
+ ok: false,
1607
+ platform: null,
1608
+ skills: [],
1609
+ message: 'No agent platform detected. Run `scale init` first.',
1610
+ }, null, 2));
1611
+ return;
1612
+ }
1373
1613
  if (!platform) {
1374
1614
  console.log('\n⚠️ No agent platform detected. Run `scale init` first.');
1375
1615
  return;
1376
1616
  }
1377
1617
  const result = discovery.scanSkills(platform);
1618
+ if (args.json) {
1619
+ console.log(JSON.stringify({
1620
+ ok: true,
1621
+ platform: result.platform,
1622
+ count: result.skills.length,
1623
+ skills: result.skills,
1624
+ }, null, 2));
1625
+ return;
1626
+ }
1378
1627
  console.log(`\n🔍 Platform: ${result.platform}`);
1379
1628
  console.log(`📦 Skills found: ${result.skills.length}`);
1380
1629
  if (result.skills.length > 0) {
@@ -1463,11 +1712,37 @@ const skillPlanCommand = defineCommand({
1463
1712
  console.log(` Written: ${writtenPath}`);
1464
1713
  },
1465
1714
  });
1715
+ const skillDoctorCommand = defineCommand({
1716
+ meta: { name: 'doctor', description: 'Check workflow skill installation status' },
1717
+ args: {
1718
+ dir: { type: 'string', default: '.', description: 'Project directory' },
1719
+ json: { type: 'boolean', default: false, description: 'Output skill doctor report as JSON' },
1720
+ },
1721
+ run({ args }) {
1722
+ const report = inspectWorkflowSkills({ projectDir: args.dir });
1723
+ if (args.json) {
1724
+ console.log(JSON.stringify(report, null, 2));
1725
+ return;
1726
+ }
1727
+ console.log('\nSCALE Skill Doctor');
1728
+ console.log(` Installed: ${report.installed}/${report.total}`);
1729
+ for (const skill of report.skills) {
1730
+ console.log(` ${skill.installed ? '[OK]' : '[MISSING]'} ${skill.id}`);
1731
+ if (skill.detectedPath)
1732
+ console.log(` path: ${skill.detectedPath}`);
1733
+ if (!skill.installed)
1734
+ console.log(` install: ${skill.installCommand}`);
1735
+ }
1736
+ if (!report.ok)
1737
+ process.exitCode = 1;
1738
+ },
1739
+ });
1466
1740
  const skillCheckCommand = defineCommand({
1467
1741
  meta: { name: 'check', description: 'Check required skill evidence artifacts' },
1468
1742
  args: {
1469
1743
  dir: { type: 'string', description: 'Task artifact directory; defaults to current state artifactsDir' },
1470
1744
  level: { type: 'string', description: 'Task level: S, M, L, or CRITICAL; defaults to current state level or M' },
1745
+ 'require-installed': { type: 'boolean', default: false, description: 'Fail when required workflow skills are not installed locally' },
1471
1746
  json: { type: 'boolean', default: false },
1472
1747
  },
1473
1748
  run({ args }) {
@@ -1482,33 +1757,51 @@ const skillCheckCommand = defineCommand({
1482
1757
  mode: state?.skillRoutingMode ?? policy.policy.mode,
1483
1758
  enforceLevels: policy.policy.enforceLevels,
1484
1759
  });
1760
+ const skillInstallation = inspectRequiredWorkflowSkills(state?.requiredSkills ?? [], { projectDir: PROJECT_DIR });
1761
+ const requireInstalled = isTruthyFlag(args['require-installed']);
1762
+ const blocked = result.blocked || (requireInstalled && !skillInstallation.ok);
1763
+ const output = {
1764
+ ...result,
1765
+ complete: result.complete && (!requireInstalled || skillInstallation.ok),
1766
+ blocked,
1767
+ skillInstallation: {
1768
+ ...skillInstallation,
1769
+ checked: requireInstalled,
1770
+ },
1771
+ };
1485
1772
  if (args.json) {
1486
- console.log(JSON.stringify(result, null, 2));
1773
+ console.log(JSON.stringify(output, null, 2));
1487
1774
  return;
1488
1775
  }
1489
- console.log(`\nSkill Gate: ${result.complete ? 'COMPLETE' : 'INCOMPLETE'}`);
1490
- console.log(` Mode: ${result.mode}`);
1491
- console.log(` Required: ${result.required.join(', ') || 'none'}`);
1492
- for (const file of result.missing)
1776
+ console.log(`\nSkill Gate: ${output.complete ? 'COMPLETE' : 'INCOMPLETE'}`);
1777
+ console.log(` Mode: ${output.mode}`);
1778
+ console.log(` Required artifacts: ${output.required.join(', ') || 'none'}`);
1779
+ console.log(` Required skills: ${skillInstallation.required.join(', ') || 'none'}`);
1780
+ for (const file of output.missing)
1493
1781
  console.log(` [MISSING] ${file}`);
1494
- for (const item of result.incomplete)
1782
+ for (const item of output.incomplete)
1495
1783
  console.log(` [INCOMPLETE] ${item.file}: ${item.reason}`);
1496
- if (result.blocked)
1784
+ if (requireInstalled && !skillInstallation.ok) {
1785
+ for (const skill of skillInstallation.skills.filter(skill => !skill.installed)) {
1786
+ console.log(` [MISSING_SKILL] ${skill.id}: ${skill.installCommand}`);
1787
+ }
1788
+ for (const skill of skillInstallation.unknown)
1789
+ console.log(` [UNKNOWN_SKILL] ${skill}`);
1790
+ }
1791
+ if (blocked)
1497
1792
  process.exitCode = 1;
1498
1793
  },
1499
1794
  });
1500
1795
  const skill = defineCommand({
1501
1796
  meta: { name: 'skill', description: 'Skill discovery and management' },
1502
- subCommands: { scan: skillScan, plan: skillPlanCommand, check: skillCheckCommand },
1797
+ subCommands: { scan: skillScan, doctor: skillDoctorCommand, plan: skillPlanCommand, check: skillCheckCommand },
1503
1798
  });
1504
1799
  // ============================================================================
1505
1800
  // agent commands — Multi-Agent 协作系统 (Phase 9)
1506
1801
  // ============================================================================
1507
1802
  import { AgentPool } from '../agents/AgentPool.js';
1508
- import { AgentChannel } from '../agents/AgentChannel.js';
1509
1803
  import { PROFESSIONAL_AGENTS, getProfile, listProfiles } from '../agents/profiles.js';
1510
1804
  const agentPool = new AgentPool();
1511
- const agentChannel = new AgentChannel(getEngine().eventBus);
1512
1805
  const agentSpawn = defineCommand({
1513
1806
  meta: { name: 'spawn', description: 'Spawn a new agent instance' },
1514
1807
  args: {
@@ -1626,7 +1919,7 @@ import * as phaseCommands from '../cli/phaseCommands.js';
1626
1919
  import * as liteCommands from '../cli/liteCommands.js';
1627
1920
  import * as vibeCommands from '../cli/vibeCommands.js';
1628
1921
  const main = defineCommand({
1629
- meta: { name: 'scale', version: '0.13.0', description: 'SCALE Engine v0.13.0 CLI - hardened phase workflow gates: define/plan/build/verify/review/ship; Vibe templates: scale vibe; 16 platform adapters; 12 agents; 10 workflows; 19 detectors' },
1922
+ meta: { name: 'scale', version: '0.13.0', description: 'SCALE Engine v0.13.0 CLI - hardened phase workflow gates, governance templates, platform adapters, skill routing, and verification automation' },
1630
1923
  subCommands: {
1631
1924
  // Lite Mode (agent-skills style interactive entry)
1632
1925
  lite: liteCommands.liteCommand,
@@ -1657,8 +1950,10 @@ const main = defineCommand({
1657
1950
  evolve,
1658
1951
  stats,
1659
1952
  preflight,
1953
+ governance,
1660
1954
  metrics,
1661
1955
  'task-artifacts': taskArtifacts,
1956
+ workspace,
1662
1957
  status,
1663
1958
  workflow,
1664
1959
  evidence,