@hongmaple0820/scale-engine 0.24.0 → 0.26.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 (155) hide show
  1. package/LICENSE +15 -15
  2. package/README.en.md +336 -304
  3. package/README.md +500 -475
  4. package/dist/adapters/AiderAdapter.js +52 -52
  5. package/dist/adapters/AntigravityAdapter.d.ts +4 -0
  6. package/dist/adapters/AntigravityAdapter.js +21 -0
  7. package/dist/adapters/AntigravityAdapter.js.map +1 -0
  8. package/dist/adapters/ClaudeCodeAdapter.d.ts +4 -1
  9. package/dist/adapters/ClaudeCodeAdapter.js +34 -34
  10. package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
  11. package/dist/adapters/ClineAdapter.d.ts +4 -0
  12. package/dist/adapters/ClineAdapter.js +20 -0
  13. package/dist/adapters/ClineAdapter.js.map +1 -0
  14. package/dist/adapters/CodexAdapter.js +28 -28
  15. package/dist/adapters/CursorAdapter.js +26 -26
  16. package/dist/adapters/DeepSeekTuiAdapter.js +97 -97
  17. package/dist/adapters/DoubaoAdapter.js +33 -33
  18. package/dist/adapters/GeminiAdapter.js +26 -26
  19. package/dist/adapters/GenericProjectAgentAdapter.d.ts +29 -0
  20. package/dist/adapters/GenericProjectAgentAdapter.js +204 -0
  21. package/dist/adapters/GenericProjectAgentAdapter.js.map +1 -0
  22. package/dist/adapters/HermesAdapter.js +26 -26
  23. package/dist/adapters/JCodeAdapter.d.ts +4 -0
  24. package/dist/adapters/JCodeAdapter.js +19 -0
  25. package/dist/adapters/JCodeAdapter.js.map +1 -0
  26. package/dist/adapters/KiloCodeAdapter.d.ts +4 -0
  27. package/dist/adapters/KiloCodeAdapter.js +20 -0
  28. package/dist/adapters/KiloCodeAdapter.js.map +1 -0
  29. package/dist/adapters/KimiAdapter.js +32 -32
  30. package/dist/adapters/KiroAdapter.js +26 -26
  31. package/dist/adapters/OpenClawAdapter.js +26 -26
  32. package/dist/adapters/OpenCodeAdapter.js +26 -26
  33. package/dist/adapters/QCoderAdapter.js +26 -26
  34. package/dist/adapters/QoderAdapter.d.ts +4 -0
  35. package/dist/adapters/QoderAdapter.js +21 -0
  36. package/dist/adapters/QoderAdapter.js.map +1 -0
  37. package/dist/adapters/TraeAdapter.js +26 -26
  38. package/dist/adapters/VSCAdapter.js +26 -26
  39. package/dist/adapters/WindsurfAdapter.js +32 -32
  40. package/dist/adapters/WorkBuddyAdapter.js +26 -26
  41. package/dist/adapters/index.d.ts +5 -0
  42. package/dist/adapters/index.js +15 -0
  43. package/dist/adapters/index.js.map +1 -1
  44. package/dist/api/cli.js +226 -48
  45. package/dist/api/cli.js.map +1 -1
  46. package/dist/api/doctor.js +10 -3
  47. package/dist/api/doctor.js.map +1 -1
  48. package/dist/api/quickstart.js +7 -1
  49. package/dist/api/quickstart.js.map +1 -1
  50. package/dist/artifact/sqliteStore.js +89 -89
  51. package/dist/artifact/types.d.ts +1 -1
  52. package/dist/cli/phaseCommands.js +45 -45
  53. package/dist/context/AntiPatternRegistry.js +20 -20
  54. package/dist/context/ContextBuilder.js +155 -155
  55. package/dist/evolution/EvolutionEngine.js +31 -31
  56. package/dist/evolution/EvolutionEvaluator.d.ts +2 -0
  57. package/dist/evolution/EvolutionEvaluator.js +7 -1
  58. package/dist/evolution/EvolutionEvaluator.js.map +1 -1
  59. package/dist/fsm/FSMAgentBridge.js +11 -11
  60. package/dist/hooks/HookGeneratorEnhanced.js +218 -218
  61. package/dist/index.d.ts +1 -1
  62. package/dist/index.js +2 -2
  63. package/dist/index.js.map +1 -1
  64. package/dist/knowledge/SQLiteKnowledgeBase.js +28 -28
  65. package/dist/memory/MemoryBrain.d.ts +1 -0
  66. package/dist/memory/MemoryBrain.js +55 -52
  67. package/dist/memory/MemoryBrain.js.map +1 -1
  68. package/dist/memory/MemoryFabric.d.ts +13 -1
  69. package/dist/memory/MemoryFabric.js +35 -0
  70. package/dist/memory/MemoryFabric.js.map +1 -1
  71. package/dist/memory/MemoryProviders.d.ts +111 -0
  72. package/dist/memory/MemoryProviders.js +385 -0
  73. package/dist/memory/MemoryProviders.js.map +1 -0
  74. package/dist/memory/index.d.ts +1 -0
  75. package/dist/memory/index.js +1 -0
  76. package/dist/memory/index.js.map +1 -1
  77. package/dist/output/GovernanceDashboard.js +44 -44
  78. package/dist/output/HTMLArtifactLayer.js +31 -31
  79. package/dist/prompts/VibeTemplateGallery.js +121 -121
  80. package/dist/skills/SkillDiscovery.js +12 -1
  81. package/dist/skills/SkillDiscovery.js.map +1 -1
  82. package/dist/skills/SkillRadar.js +20 -0
  83. package/dist/skills/SkillRadar.js.map +1 -1
  84. package/dist/skills/SkillRepository.d.ts +9 -1
  85. package/dist/skills/SkillRepository.js +70 -0
  86. package/dist/skills/SkillRepository.js.map +1 -1
  87. package/dist/skills/routing/SkillPlanner.js +40 -40
  88. package/dist/workflow/EngineeringStandards.js +62 -62
  89. package/dist/workflow/GovernanceTemplatePacks.d.ts +1 -1
  90. package/dist/workflow/GovernanceTemplatePacks.js +1990 -162
  91. package/dist/workflow/GovernanceTemplatePacks.js.map +1 -1
  92. package/dist/workflow/GovernanceTemplates.d.ts +2 -0
  93. package/dist/workflow/GovernanceTemplates.js +1012 -1001
  94. package/dist/workflow/GovernanceTemplates.js.map +1 -1
  95. package/dist/workflow/ResourceGovernance.js +16 -16
  96. package/dist/workflow/TaskArtifactScaffolder.js +10 -10
  97. package/dist/workflow/UpgradeManager.d.ts +3 -2
  98. package/dist/workflow/UpgradeManager.js +134 -49
  99. package/dist/workflow/UpgradeManager.js.map +1 -1
  100. package/dist/workflow/WorkspaceTopology.js +18 -15
  101. package/dist/workflow/WorkspaceTopology.js.map +1 -1
  102. package/docs/CODE_INTELLIGENCE.md +138 -138
  103. package/docs/CONTEXT_BUDGET.md +81 -81
  104. package/docs/EXTERNAL_REFERENCES.md +63 -0
  105. package/docs/GITLAB_FLOW.md +125 -125
  106. package/docs/GOVERNANCE_DASHBOARD.md +64 -64
  107. package/docs/MEMORY_BRAIN.md +104 -104
  108. package/docs/MEMORY_FABRIC.md +134 -107
  109. package/docs/README.md +79 -68
  110. package/docs/RUNTIME_EVIDENCE.md +101 -101
  111. package/docs/SKILL-REPOSITORY.md +57 -0
  112. package/docs/SKILL_RADAR.md +122 -115
  113. package/docs/THIRD_PARTY_SKILLS.md +57 -0
  114. package/docs/WORKFLOW_EVAL.md +151 -151
  115. package/docs/guides/DEVELOPMENT_WORKFLOW.md +80 -0
  116. package/docs/guides/GETTING_STARTED.md +50 -0
  117. package/docs/start/README.md +78 -72
  118. package/docs/start/agent-governance-demo.md +107 -107
  119. package/docs/start/quickstart.md +137 -127
  120. package/docs/start/workflow-upgrade.md +32 -8
  121. package/docs/workflow/README.md +67 -0
  122. package/docs/workflow/node-library.md +52 -0
  123. package/docs/workflow/templates/api-contract.md +29 -0
  124. package/docs/workflow/templates/architecture-review.md +23 -0
  125. package/docs/workflow/templates/db-change-plan.md +20 -0
  126. package/docs/workflow/templates/docs-impact.md +17 -0
  127. package/docs/workflow/templates/e2e-plan.md +20 -0
  128. package/docs/workflow/templates/explore.md +16 -0
  129. package/docs/workflow/templates/github-actions-scale-preflight.yml +32 -0
  130. package/docs/workflow/templates/mini-prd.md +16 -0
  131. package/docs/workflow/templates/plan.md +37 -0
  132. package/docs/workflow/templates/pre-push-scale-preflight.sh +8 -0
  133. package/docs/workflow/templates/product-smoke.md +61 -0
  134. package/docs/workflow/templates/reality-check.md +28 -0
  135. package/docs/workflow/templates/resource-cleanup.md +17 -0
  136. package/docs/workflow/templates/resource-impact.md +25 -0
  137. package/docs/workflow/templates/review.md +12 -0
  138. package/docs/workflow/templates/runtime.md +23 -0
  139. package/docs/workflow/templates/security-review.md +26 -0
  140. package/docs/workflow/templates/skill-evidence.md +33 -0
  141. package/docs/workflow/templates/skill-plan.md +39 -0
  142. package/docs/workflow/templates/spec.md +17 -0
  143. package/docs/workflow/templates/standards-impact.md +28 -0
  144. package/docs/workflow/templates/summary.md +16 -0
  145. package/docs/workflow/templates/tasks.md +8 -0
  146. package/docs/workflow/templates/ui-spec.md +29 -0
  147. package/docs/workflow/templates/verification.md +20 -0
  148. package/docs/workflow/templates/visual-review.md +20 -0
  149. package/examples/demo-projects/agent-governance-demo/CONTEXT.md +14 -14
  150. package/examples/demo-projects/agent-governance-demo/README.md +48 -48
  151. package/examples/demo-projects/agent-governance-demo/docs/CONTEXT-MAP.md +14 -14
  152. package/examples/demo-projects/agent-governance-demo/package.json +22 -21
  153. package/examples/demo-projects/agent-governance-demo/src/oauth-state.ts +39 -39
  154. package/examples/demo-projects/agent-governance-demo/tests/oauth-state.test.ts +52 -52
  155. package/package.json +88 -75
package/dist/api/cli.js CHANGED
@@ -65,7 +65,7 @@ import { renderGovernanceDashboard } from '../output/GovernanceDashboard.js';
65
65
  import { cleanupWorkspaceLifecycle, inspectWorkspaceLifecycle, } from '../workflow/WorkspaceLifecycle.js';
66
66
  import { inspectWorkspaceSafety } from '../workflow/WorkspaceSafety.js';
67
67
  import { RuntimeEvidenceLedger, SessionLedger, doctorRuntimeEvidence, evaluateFinalReportReadiness, } from '../runtime/index.js';
68
- import { MemoryFabric, MemoryBrain, doctorMemoryFabric, renderContextPackMarkdown, renderMemoryLearningCandidateMarkdown, settleMemoryLearning, } from '../memory/index.js';
68
+ import { MemoryFabric, MemoryBrain, doctorMemoryFabric, renderContextPackMarkdown, renderMemoryLearningCandidateMarkdown, inspectMemoryProviders, recallMemoryProviders, settleMemoryLearning, writeMemoryProvidersConfig, } from '../memory/index.js';
69
69
  import { resolveWorkspaceTopology, workspaceTopologyPath, workspaceTopologyTemplate, } from '../workflow/WorkspaceTopology.js';
70
70
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
71
71
  import { dirname, isAbsolute, join, resolve } from 'node:path';
@@ -2537,7 +2537,7 @@ const init = defineCommand({
2537
2537
  'governance-pack': {
2538
2538
  type: 'string',
2539
2539
  default: 'standard',
2540
- description: 'Governance template pack (standard/project-scaffold/moe-workspace/resource-governance/go-service-matrix/node-library/frontend-app)',
2540
+ description: 'Governance template pack (standard/project-scaffold/scale-engine-repo/moe-workspace/resource-governance/go-service-matrix/node-library/frontend-app)',
2541
2541
  },
2542
2542
  quick: { type: 'boolean', default: false, description: 'Quick start with auto-detection' },
2543
2543
  interactive: { type: 'boolean', default: false, description: 'Interactive configuration mode with prompts' },
@@ -2911,13 +2911,15 @@ const governance = defineCommand({
2911
2911
  // upgrade command - Safe workflow/template/capability update planning
2912
2912
  // ============================================================================
2913
2913
  const upgradeCheck = defineCommand({
2914
- meta: { name: 'check', description: 'Check SCALE workflow, governance pack, and third-party capability update status' },
2914
+ meta: { name: 'check', description: '检查 SCALE 工作流、治理包和第三方能力更新状态 / Check SCALE workflow, governance pack, and third-party capability update status' },
2915
2915
  args: {
2916
- dir: { type: 'string', default: PROJECT_DIR, description: 'Project directory' },
2917
- 'target-version': { type: 'string', description: 'Target SCALE Engine version; defaults to the running CLI version' },
2918
- json: { type: 'boolean', default: false, description: 'Print JSON output' },
2916
+ dir: { type: 'string', default: PROJECT_DIR, description: '项目目录 / Project directory' },
2917
+ 'target-version': { type: 'string', description: '目标 SCALE Engine 版本,默认使用当前 CLI 版本 / Target SCALE Engine version' },
2918
+ lang: { type: 'string', default: 'zh', description: '输出语言 zh/en / Output language' },
2919
+ json: { type: 'boolean', default: false, description: '输出 JSON / Print JSON output' },
2919
2920
  },
2920
2921
  run({ args }) {
2922
+ const lang = normalizeLangArg(args.lang);
2921
2923
  const report = createUpgradeCheckReport({
2922
2924
  projectDir: args.dir,
2923
2925
  targetScaleVersion: args['target-version'] ? String(args['target-version']) : undefined,
@@ -2926,63 +2928,87 @@ const upgradeCheck = defineCommand({
2926
2928
  console.log(JSON.stringify(report, null, 2));
2927
2929
  return;
2928
2930
  }
2929
- console.log('SCALE Upgrade Check');
2930
- console.log(` Project: ${report.projectDir}`);
2931
- console.log(` Status: ${report.status}`);
2932
- console.log(` SCALE Engine: ${report.scaleEngine.currentVersion ?? 'none'} -> ${report.scaleEngine.latestVersion}`);
2933
- console.log(` Governance pack: ${report.governancePack.id ?? 'none'} v${report.governancePack.currentVersion ?? 'none'} -> v${report.governancePack.latestVersion ?? 'none'}`);
2934
- console.log(` Generated files: ${report.generatedFiles.clean} clean, ${report.generatedFiles.changed} changed, ${report.generatedFiles.missing} missing`);
2935
- console.log(` Third-party policy: ${report.thirdParty.policy}; review required: ${report.thirdParty.reviewRequired}`);
2936
- console.log(' Next:');
2931
+ if (lang === 'zh') {
2932
+ console.log('SCALE 升级检查');
2933
+ console.log(` 项目: ${report.projectDir}`);
2934
+ console.log(` 状态: ${report.status}`);
2935
+ console.log(` SCALE Engine: ${report.scaleEngine.currentVersion ?? ''} -> ${report.scaleEngine.latestVersion}`);
2936
+ console.log(` 治理包: ${report.governancePack.id ?? '无'} v${report.governancePack.currentVersion ?? '无'} -> v${report.governancePack.latestVersion ?? '无'}`);
2937
+ console.log(` 受管生成文件: ${report.generatedFiles.clean} 个干净, ${report.generatedFiles.changed} 个本地改动, ${report.generatedFiles.missing} 个缺失`);
2938
+ console.log(` 第三方能力策略: ${report.thirdParty.policy}; 需要人工审查: ${report.thirdParty.reviewRequired}`);
2939
+ console.log(' 下一步:');
2940
+ }
2941
+ else {
2942
+ console.log('SCALE Upgrade Check');
2943
+ console.log(` Project: ${report.projectDir}`);
2944
+ console.log(` Status: ${report.status}`);
2945
+ console.log(` SCALE Engine: ${report.scaleEngine.currentVersion ?? 'none'} -> ${report.scaleEngine.latestVersion}`);
2946
+ console.log(` Governance pack: ${report.governancePack.id ?? 'none'} v${report.governancePack.currentVersion ?? 'none'} -> v${report.governancePack.latestVersion ?? 'none'}`);
2947
+ console.log(` Generated files: ${report.generatedFiles.clean} clean, ${report.generatedFiles.changed} changed, ${report.generatedFiles.missing} missing`);
2948
+ console.log(` Third-party policy: ${report.thirdParty.policy}; review required: ${report.thirdParty.reviewRequired}`);
2949
+ console.log(' Next:');
2950
+ }
2937
2951
  for (const command of report.recommendedCommands)
2938
2952
  console.log(` ${command}`);
2939
2953
  },
2940
2954
  });
2941
2955
  const upgradePlan = defineCommand({
2942
- meta: { name: 'plan', description: 'Create a non-destructive SCALE upgrade plan' },
2956
+ meta: { name: 'plan', description: '生成非破坏性的 SCALE 升级计划 / Create a non-destructive SCALE upgrade plan' },
2943
2957
  args: {
2944
- dir: { type: 'string', default: PROJECT_DIR, description: 'Project directory' },
2945
- 'target-version': { type: 'string', description: 'Target SCALE Engine version; defaults to the running CLI version' },
2946
- html: { type: 'boolean', default: false, description: 'Write .scale/reports/upgrade-plan.html' },
2947
- json: { type: 'boolean', default: false, description: 'Print JSON output' },
2958
+ dir: { type: 'string', default: PROJECT_DIR, description: '项目目录 / Project directory' },
2959
+ 'target-version': { type: 'string', description: '目标 SCALE Engine 版本,默认使用当前 CLI 版本 / Target SCALE Engine version' },
2960
+ html: { type: 'boolean', default: false, description: '写入 .scale/reports/upgrade-plan.html / Write HTML plan' },
2961
+ lang: { type: 'string', default: 'zh', description: '输出语言 zh/en / Output language' },
2962
+ json: { type: 'boolean', default: false, description: '输出 JSON / Print JSON output' },
2948
2963
  },
2949
2964
  run({ args }) {
2965
+ const lang = normalizeLangArg(args.lang);
2950
2966
  const report = createUpgradePlanReport({
2951
2967
  projectDir: args.dir,
2952
2968
  targetScaleVersion: args['target-version'] ? String(args['target-version']) : undefined,
2953
2969
  });
2954
- const htmlPath = args.html ? writeUpgradePlanHtml(report) : undefined;
2970
+ const htmlPath = args.html ? writeUpgradePlanHtml(report, undefined, lang) : undefined;
2955
2971
  if (args.json) {
2956
2972
  console.log(JSON.stringify({ ...report, htmlPath }, null, 2));
2957
2973
  return;
2958
2974
  }
2959
- console.log('SCALE Upgrade Plan');
2960
- console.log(` Project: ${report.projectDir}`);
2961
- console.log(` Status: ${report.status}`);
2962
- console.log(` Apply mode: ${report.applyMode}`);
2975
+ if (lang === 'zh') {
2976
+ console.log('SCALE 升级计划');
2977
+ console.log(` 项目: ${report.projectDir}`);
2978
+ console.log(` 状态: ${report.status}`);
2979
+ console.log(` 应用模式: ${report.applyMode}`);
2980
+ }
2981
+ else {
2982
+ console.log('SCALE Upgrade Plan');
2983
+ console.log(` Project: ${report.projectDir}`);
2984
+ console.log(` Status: ${report.status}`);
2985
+ console.log(` Apply mode: ${report.applyMode}`);
2986
+ }
2963
2987
  if (report.blockers.length > 0) {
2964
- console.log(' Blockers:');
2988
+ console.log(lang === 'zh' ? ' 阻塞项:' : ' Blockers:');
2965
2989
  for (const blocker of report.blockers)
2966
- console.log(` [${blocker.code}] ${blocker.path ?? ''} ${blocker.message}`);
2990
+ console.log(` [${blocker.code}] ${blocker.path ?? ''} ${formatUpgradeBlockerMessage(blocker.code, blocker.message, lang)}`);
2967
2991
  }
2968
- console.log(' Steps:');
2992
+ console.log(lang === 'zh' ? ' 步骤:' : ' Steps:');
2969
2993
  for (const step of report.steps) {
2970
2994
  const path = step.path ? ` ${step.path}` : '';
2971
2995
  const command = step.command ? ` -> ${step.command}` : '';
2972
- console.log(` [${step.risk}] ${step.action}${path}: ${step.reason}${command}`);
2996
+ console.log(` [${step.risk}] ${step.action}${path}: ${formatUpgradeStepReason(step.action, step.reason, lang)}${command}`);
2973
2997
  }
2974
2998
  if (htmlPath)
2975
2999
  console.log(` HTML: ${htmlPath}`);
2976
3000
  },
2977
3001
  });
2978
3002
  const upgradeApply = defineCommand({
2979
- meta: { name: 'apply', description: 'Guarded entrypoint for applying an upgrade plan' },
3003
+ meta: { name: 'apply', description: '按已审阅计划安全应用升级 / Guarded entrypoint for applying an upgrade plan' },
2980
3004
  args: {
2981
- dir: { type: 'string', default: PROJECT_DIR, description: 'Project directory' },
2982
- confirm: { type: 'boolean', default: false, description: 'Confirm that the current plan was reviewed' },
2983
- json: { type: 'boolean', default: false, description: 'Print JSON output' },
3005
+ dir: { type: 'string', default: PROJECT_DIR, description: '项目目录 / Project directory' },
3006
+ confirm: { type: 'boolean', default: false, description: '确认当前升级计划已经审阅 / Confirm the current plan was reviewed' },
3007
+ lang: { type: 'string', default: 'zh', description: '输出语言 zh/en / Output language' },
3008
+ json: { type: 'boolean', default: false, description: '输出 JSON / Print JSON output' },
2984
3009
  },
2985
3010
  run({ args }) {
3011
+ const lang = normalizeLangArg(args.lang);
2986
3012
  const result = applyUpgradePlan({
2987
3013
  projectDir: args.dir,
2988
3014
  confirm: isTruthyFlag(args.confirm),
@@ -2993,25 +3019,27 @@ const upgradeApply = defineCommand({
2993
3019
  process.exitCode = 1;
2994
3020
  return;
2995
3021
  }
2996
- console.log('SCALE Upgrade Apply');
2997
- console.log(` Applied: ${result.applied}`);
2998
- console.log(` Reason: ${result.reason}`);
2999
- console.log(` Apply mode: ${result.plan.applyMode}`);
3022
+ console.log(lang === 'zh' ? 'SCALE 应用升级' : 'SCALE Upgrade Apply');
3023
+ console.log(lang === 'zh' ? ` 已应用: ${result.applied}` : ` Applied: ${result.applied}`);
3024
+ console.log(lang === 'zh' ? ` 原因: ${formatUpgradeApplyReason(result.reason, lang)}` : ` Reason: ${result.reason}`);
3025
+ console.log(lang === 'zh' ? ` 应用模式: ${result.plan.applyMode}` : ` Apply mode: ${result.plan.applyMode}`);
3000
3026
  if (result.backup)
3001
- console.log(` Backup: ${result.backup.manifestPath}`);
3027
+ console.log(lang === 'zh' ? ` 备份: ${result.backup.manifestPath}` : ` Backup: ${result.backup.manifestPath}`);
3002
3028
  for (const path of result.changedFiles)
3003
- console.log(` changed: ${path}`);
3029
+ console.log(lang === 'zh' ? ` 已变更: ${path}` : ` changed: ${path}`);
3004
3030
  if (!result.ok)
3005
3031
  process.exitCode = 1;
3006
3032
  },
3007
3033
  });
3008
3034
  const upgradeRollback = defineCommand({
3009
- meta: { name: 'rollback', description: 'Explain rollback state for SCALE upgrades' },
3035
+ meta: { name: 'rollback', description: '回滚最近一次 SCALE 托管升级 / Roll back the latest SCALE-managed upgrade' },
3010
3036
  args: {
3011
- dir: { type: 'string', default: PROJECT_DIR, description: 'Project directory' },
3012
- json: { type: 'boolean', default: false, description: 'Print JSON output' },
3037
+ dir: { type: 'string', default: PROJECT_DIR, description: '项目目录 / Project directory' },
3038
+ lang: { type: 'string', default: 'zh', description: '输出语言 zh/en / Output language' },
3039
+ json: { type: 'boolean', default: false, description: '输出 JSON / Print JSON output' },
3013
3040
  },
3014
3041
  run({ args }) {
3042
+ const lang = normalizeLangArg(args.lang);
3015
3043
  const result = rollbackLatestUpgrade({ projectDir: args.dir });
3016
3044
  if (args.json) {
3017
3045
  console.log(JSON.stringify(result, null, 2));
@@ -3019,21 +3047,78 @@ const upgradeRollback = defineCommand({
3019
3047
  process.exitCode = 1;
3020
3048
  return;
3021
3049
  }
3022
- console.log('SCALE Upgrade Rollback');
3023
- console.log(` Applied: ${result.applied}`);
3024
- console.log(` Reason: ${result.reason}`);
3050
+ console.log(lang === 'zh' ? 'SCALE 升级回滚' : 'SCALE Upgrade Rollback');
3051
+ console.log(lang === 'zh' ? ` 已回滚: ${result.applied}` : ` Applied: ${result.applied}`);
3052
+ console.log(lang === 'zh' ? ` 原因: ${formatUpgradeApplyReason(result.reason, lang)}` : ` Reason: ${result.reason}`);
3025
3053
  if (result.backup)
3026
- console.log(` Backup: ${result.backup.manifestPath}`);
3054
+ console.log(lang === 'zh' ? ` 备份: ${result.backup.manifestPath}` : ` Backup: ${result.backup.manifestPath}`);
3027
3055
  for (const path of result.restoredFiles)
3028
- console.log(` restored: ${path}`);
3056
+ console.log(lang === 'zh' ? ` 已恢复: ${path}` : ` restored: ${path}`);
3029
3057
  if (!result.ok)
3030
3058
  process.exitCode = 1;
3031
3059
  },
3032
3060
  });
3033
3061
  const upgrade = defineCommand({
3034
- meta: { name: 'upgrade', description: 'Safe update planning for SCALE workflow, generated templates, skills, MCP, and CLI tools' },
3062
+ meta: { name: 'upgrade', description: 'SCALE 工作流、模板、skills、MCP、CLI 工具的安全升级规划 / Safe update planning for workflow assets' },
3035
3063
  subCommands: { check: upgradeCheck, plan: upgradePlan, apply: upgradeApply, rollback: upgradeRollback },
3036
3064
  });
3065
+ function formatUpgradeBlockerMessage(code, fallback, lang) {
3066
+ if (lang !== 'zh')
3067
+ return fallback;
3068
+ if (code === 'missing-governance-lock')
3069
+ return '缺少治理锁文件,无法判断哪些生成文件可以安全升级。';
3070
+ if (code === 'local-generated-file-changed')
3071
+ return '受管生成文件已有本地改动,需要三方对比或人工审阅后再升级。';
3072
+ return fallback;
3073
+ }
3074
+ function formatUpgradeStepReason(action, fallback, lang) {
3075
+ if (lang !== 'zh')
3076
+ return fallback;
3077
+ switch (action) {
3078
+ case 'initialize-governance-lock':
3079
+ return '先创建治理锁文件,后续才能安全升级生成的治理资产。';
3080
+ case 'upgrade-scale-engine':
3081
+ return fallback.replace('SCALE Engine changed from', 'SCALE Engine 版本变化:').replace(' to ', ' -> ');
3082
+ case 'upgrade-governance-pack':
3083
+ return fallback.replace('Governance pack', '治理包').replace('changed from', '版本变化:').replace(' to ', ' -> ');
3084
+ case 'refresh-managed-generated-files':
3085
+ return fallback.replace('clean managed governance files can be refreshed automatically; local edits still block automatic apply.', '个干净受管治理文件可自动刷新;已有本地改动的文件仍会阻止自动应用。');
3086
+ case 'restore-missing-generated-file':
3087
+ return '该文件由治理锁管理,但当前本地缺失,可从当前治理包恢复。';
3088
+ case 'review-local-change':
3089
+ return '需要保留、合并或明确替换本地改动,不能自动覆盖。';
3090
+ case 'review-third-party-capability':
3091
+ return fallback
3092
+ .replace('updates require manual-review; SCALE never auto-installs third-party capabilities.', '更新需要人工审阅;SCALE 不会自动安装第三方能力。')
3093
+ .replace('updates require blocked; SCALE never auto-installs third-party capabilities.', '更新默认阻断;SCALE 不会自动安装第三方能力。');
3094
+ case 'run-preflight':
3095
+ return '完成已接受的升级后,运行项目级预检。';
3096
+ default:
3097
+ return fallback;
3098
+ }
3099
+ }
3100
+ function formatUpgradeApplyReason(reason, lang) {
3101
+ if (lang !== 'zh')
3102
+ return reason;
3103
+ switch (reason) {
3104
+ case 'Review scale upgrade plan first, then rerun with --confirm.':
3105
+ return '请先审阅 SCALE 升级计划,再使用 --confirm 重新运行。';
3106
+ case 'Upgrade requires manual review because generated files have local changes or the lock is missing.':
3107
+ return '生成文件存在本地改动或缺少锁文件,本次升级需要人工审阅。';
3108
+ case 'Cannot apply without a governance lock and pack id.':
3109
+ return '缺少治理锁文件或治理包 ID,无法应用升级。';
3110
+ case 'No safe upgrade changes were needed.':
3111
+ return '没有需要应用的安全升级变更。';
3112
+ case 'Safe upgrade changes were applied.':
3113
+ return '已应用安全升级变更。';
3114
+ case 'No SCALE-managed upgrade backup was found.':
3115
+ return '未找到 SCALE 管理的升级备份。';
3116
+ case 'Latest SCALE-managed upgrade backup was rolled back.':
3117
+ return '已回滚最近一次 SCALE 管理的升级备份。';
3118
+ default:
3119
+ return reason;
3120
+ }
3121
+ }
3037
3122
  // ============================================================================
3038
3123
  // assets command - Resource lifecycle governance
3039
3124
  // ============================================================================
@@ -3482,7 +3567,8 @@ function normalizeThemeArg(value) {
3482
3567
  return 'auto';
3483
3568
  }
3484
3569
  function normalizeLangArg(value) {
3485
- return String(value ?? 'zh').trim().toLowerCase() === 'en' ? 'en' : 'zh';
3570
+ const raw = String(value ?? process.env.SCALE_LANG ?? 'zh').trim().toLowerCase();
3571
+ return raw === 'en' || raw.startsWith('en-') || raw === 'english' ? 'en' : 'zh';
3486
3572
  }
3487
3573
  function launchLocalFile(path) {
3488
3574
  try {
@@ -4335,6 +4421,97 @@ const memoryImport = defineCommand({
4335
4421
  process.exitCode = 1;
4336
4422
  },
4337
4423
  });
4424
+ const memoryProviderInit = defineCommand({
4425
+ meta: { name: 'init', description: 'Create .scale/memory-providers.json for autonomous memory provider routing' },
4426
+ args: {
4427
+ force: { type: 'boolean', default: false, description: 'Overwrite existing provider configuration' },
4428
+ json: { type: 'boolean', default: false },
4429
+ },
4430
+ run({ args }) {
4431
+ const result = writeMemoryProvidersConfig({
4432
+ projectDir: PROJECT_DIR,
4433
+ scaleDir: SCALE_DIR,
4434
+ force: isTruthyFlag(args.force),
4435
+ });
4436
+ if (args.json) {
4437
+ console.log(JSON.stringify(result, null, 2));
4438
+ return;
4439
+ }
4440
+ console.log(`\nSCALE Memory Provider Config: ${result.path}`);
4441
+ console.log(` ${result.written ? 'written' : 'exists'}`);
4442
+ console.log(` Order: ${result.config.routing.defaultOrder.join(' -> ')}`);
4443
+ },
4444
+ });
4445
+ const memoryProviderStatus = defineCommand({
4446
+ meta: { name: 'status', description: 'Inspect memory provider routing, availability, and safety boundaries' },
4447
+ args: {
4448
+ json: { type: 'boolean', default: false },
4449
+ },
4450
+ run({ args }) {
4451
+ const report = inspectMemoryProviders({ projectDir: PROJECT_DIR, scaleDir: SCALE_DIR });
4452
+ if (args.json) {
4453
+ console.log(JSON.stringify(report, null, 2));
4454
+ return;
4455
+ }
4456
+ console.log('\nSCALE Memory Providers');
4457
+ console.log(` Config: ${report.configExists ? report.configPath : 'default policy (not written)'}`);
4458
+ console.log(` Mode: ${report.routing.mode}`);
4459
+ for (const provider of report.providers) {
4460
+ console.log(` [${provider.available ? 'AVAILABLE' : 'SKIP'}] ${provider.id} (${provider.kind})`);
4461
+ console.log(` safety: ${provider.safetyLevel}; write: ${provider.writeMode}; reason: ${provider.reason}`);
4462
+ }
4463
+ for (const warning of report.warnings)
4464
+ console.log(` [WARN] ${warning}`);
4465
+ },
4466
+ });
4467
+ const memoryProviderRecall = defineCommand({
4468
+ meta: { name: 'recall', description: 'Recall relevant memory through provider routing with local fallback' },
4469
+ args: {
4470
+ query: { type: 'positional', required: true, description: 'Memory query or task context' },
4471
+ task: { type: 'string', description: 'Optional task text for provider routing context' },
4472
+ files: { type: 'string', description: 'Comma-separated files or modules in scope' },
4473
+ provider: { type: 'string', description: 'Force one provider id, such as agentmemory, gbrain, or scale-local' },
4474
+ limit: { type: 'string', default: '5', description: 'Maximum results' },
4475
+ 'include-candidates': { type: 'boolean', default: false, description: 'Allow scale-local candidate memory fallback' },
4476
+ json: { type: 'boolean', default: false },
4477
+ },
4478
+ async run({ args }) {
4479
+ const limit = Number.parseInt(String(args.limit ?? '5'), 10);
4480
+ const report = await recallMemoryProviders({
4481
+ projectDir: PROJECT_DIR,
4482
+ scaleDir: SCALE_DIR,
4483
+ query: String(args.query),
4484
+ task: args.task ? String(args.task) : undefined,
4485
+ files: parseCommaList(args.files),
4486
+ provider: args.provider ? String(args.provider) : undefined,
4487
+ limit: Number.isFinite(limit) && limit > 0 ? limit : 5,
4488
+ includeCandidates: isTruthyFlag(args['include-candidates']),
4489
+ });
4490
+ if (args.json) {
4491
+ console.log(JSON.stringify(report, null, 2));
4492
+ return;
4493
+ }
4494
+ console.log('\nSCALE Memory Provider Recall');
4495
+ console.log(` Query: ${report.query}`);
4496
+ console.log(` Providers: ${report.providerOrder.join(' -> ')}`);
4497
+ console.log(` Results: ${report.items.length}`);
4498
+ for (const item of report.items) {
4499
+ console.log(` [${item.provider}] ${item.id}: ${item.title}`);
4500
+ console.log(` score: ${item.score}; confidence: ${item.confidence}; evidence: ${item.evidencePaths.join(', ') || 'none'}`);
4501
+ console.log(` ${item.summary}`);
4502
+ }
4503
+ for (const warning of report.warnings)
4504
+ console.log(` [WARN] ${warning}`);
4505
+ },
4506
+ });
4507
+ const memoryProvider = defineCommand({
4508
+ meta: { name: 'provider', description: 'Manage autonomous memory provider routing for agentmemory, gbrain, and scale-local' },
4509
+ subCommands: {
4510
+ init: memoryProviderInit,
4511
+ status: memoryProviderStatus,
4512
+ recall: memoryProviderRecall,
4513
+ },
4514
+ });
4338
4515
  const memory = defineCommand({
4339
4516
  meta: { name: 'memory', description: 'Memory Fabric context packs and project-scoped long-term memory' },
4340
4517
  subCommands: {
@@ -4349,6 +4526,7 @@ const memory = defineCommand({
4349
4526
  promote: memoryPromote,
4350
4527
  export: memoryExport,
4351
4528
  import: memoryImport,
4529
+ provider: memoryProvider,
4352
4530
  },
4353
4531
  });
4354
4532
  // ============================================================================