@chenmk/superflow 0.1.1 → 0.1.3

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 (89) hide show
  1. package/INSTALL.en.md +32 -5
  2. package/INSTALL.md +58 -17
  3. package/README.md +121 -7
  4. package/README.zh-CN.md +92 -11
  5. package/assets/brand/superflow-banner.svg +80 -0
  6. package/assets/context-templates/business-rules.md +45 -78
  7. package/assets/context-templates/decisions.md +63 -149
  8. package/assets/context-templates/external-systems.md +64 -161
  9. package/assets/context-templates/incidents.md +40 -78
  10. package/assets/context-templates-en/business-rules.md +72 -0
  11. package/assets/context-templates-en/decisions.md +72 -0
  12. package/assets/context-templates-en/external-systems.md +78 -0
  13. package/assets/context-templates-en/incidents.md +52 -0
  14. package/assets/manifest.json +6 -4
  15. package/assets/scripts/claude-auto-backup-hook.sh +11 -6
  16. package/assets/scripts/codex-auto-backup-hook.sh +11 -6
  17. package/assets/skills/superflow-design/SKILL.md +16 -8
  18. package/assets/skills/superflow-docs/SKILL.md +17 -8
  19. package/assets/skills/superflow-pipeline/references/api-design-template.md +99 -63
  20. package/assets/skills/superflow-pipeline/references/batch-prompt-template.md +62 -14
  21. package/assets/skills/superflow-pipeline/references/implementation-prompt-template.md +114 -67
  22. package/assets/skills/superflow-pipeline/references/quality-gate.md +104 -102
  23. package/assets/skills/superflow-pipeline/references/superpower-technical-design-template.md +45 -19
  24. package/assets/skills/superflow-pipeline/scripts/superflow-guard.sh +35 -0
  25. package/assets/skills-en/api-doc-changelog/SKILL.md +64 -151
  26. package/assets/skills-en/superflow-clarify/SKILL.md +4 -4
  27. package/assets/skills-en/superflow-clarify/agents/openai.yaml +1 -1
  28. package/assets/skills-en/superflow-design/agents/openai.yaml +1 -1
  29. package/assets/skills-en/superflow-docs/SKILL.md +27 -27
  30. package/assets/skills-en/superflow-docs/agents/openai.yaml +1 -1
  31. package/assets/skills-en/superflow-implement/SKILL.md +113 -457
  32. package/assets/skills-en/superflow-implement/agents/openai.yaml +1 -1
  33. package/assets/skills-en/superflow-pipeline/SKILL.md +167 -840
  34. package/assets/skills-en/superflow-pipeline/agents/openai.yaml +1 -1
  35. package/assets/skills-en/superflow-pipeline/references/api-design-template.md +17 -426
  36. package/assets/skills-en/superflow-pipeline/references/architecture-design-template.md +15 -114
  37. package/assets/skills-en/superflow-pipeline/references/batch-prompt-template.md +36 -524
  38. package/assets/skills-en/superflow-pipeline/references/batch-split-guide.md +19 -133
  39. package/assets/skills-en/superflow-pipeline/references/document-templates.md +50 -123
  40. package/assets/skills-en/superflow-pipeline/references/feature-gated-workflow.md +12 -119
  41. package/assets/skills-en/superflow-pipeline/references/implementation-prompt-template.md +22 -1044
  42. package/assets/skills-en/superflow-pipeline/references/mock-strategy-guide.md +11 -81
  43. package/assets/skills-en/superflow-pipeline/references/openspec-format.md +17 -51
  44. package/assets/skills-en/superflow-pipeline/references/orchestration.md +17 -632
  45. package/assets/skills-en/superflow-pipeline/references/p0-baseline-template.md +10 -169
  46. package/assets/skills-en/superflow-pipeline/references/prompt-usage-template.md +29 -128
  47. package/assets/skills-en/superflow-pipeline/references/quality-gate.md +36 -299
  48. package/assets/skills-en/superflow-pipeline/references/quality-standards.md +12 -186
  49. package/assets/skills-en/superflow-pipeline/references/reviewer-checklist.md +12 -154
  50. package/assets/skills-en/superflow-pipeline/references/sql-risk-review-checklist.md +19 -316
  51. package/assets/skills-en/superflow-pipeline/references/test-execution-template.md +22 -220
  52. package/assets/skills-en/superflow-pipeline/references/test-guide.md +12 -26
  53. package/assets/skills-en/superflow-pipeline/references/traceability-matrix.md +5 -103
  54. package/assets/skills-en/superflow-pipeline/references/validation-integrity.md +12 -130
  55. package/assets/skills-en/superflow-pipeline/scripts/superflow-guard.sh +23 -23
  56. package/assets/skills-en/superflow-pipeline/scripts/superflow-state.sh +1 -1
  57. package/assets/skills-en/superflow-pipeline/scripts/superflow-status.sh +15 -15
  58. package/assets/skills-en/superflow-table-impact-analysis/SKILL.md +3 -3
  59. package/dist/cli/index.js +61 -54
  60. package/dist/cli/index.js.map +1 -1
  61. package/dist/commands/design.js +25 -3
  62. package/dist/commands/design.js.map +1 -1
  63. package/dist/commands/doctor.js +31 -12
  64. package/dist/commands/doctor.js.map +1 -1
  65. package/dist/commands/init.js +75 -27
  66. package/dist/commands/init.js.map +1 -1
  67. package/dist/commands/scan.js +8 -4
  68. package/dist/commands/scan.js.map +1 -1
  69. package/dist/commands/uninstall.js +3 -3
  70. package/dist/commands/uninstall.js.map +1 -1
  71. package/dist/commands/update.js +8 -3
  72. package/dist/commands/update.js.map +1 -1
  73. package/dist/core/cli-help.js +98 -0
  74. package/dist/core/cli-help.js.map +1 -0
  75. package/dist/core/context.js +40 -17
  76. package/dist/core/context.js.map +1 -1
  77. package/dist/core/detect.js +58 -5
  78. package/dist/core/detect.js.map +1 -1
  79. package/dist/core/i18n.js +10 -8
  80. package/dist/core/i18n.js.map +1 -1
  81. package/dist/core/manifest.js +3 -0
  82. package/dist/core/manifest.js.map +1 -1
  83. package/dist/core/scripts.js +8 -0
  84. package/dist/core/scripts.js.map +1 -1
  85. package/dist/core/skills.js +6 -0
  86. package/dist/core/skills.js.map +1 -1
  87. package/dist/core/state.js +12 -1
  88. package/dist/core/state.js.map +1 -1
  89. package/package.json +4 -3
@@ -0,0 +1,98 @@
1
+ import { normalizeLanguage } from './i18n.js';
2
+ const CLI_TEXT = {
3
+ en: {
4
+ programDescription: 'SuperBridge Flow - SDD/TDD workflow CLI',
5
+ initDescription: 'Install and configure SuperBridge Flow',
6
+ scanDescription: 'Rerun project context scaffolding and understand-anything check',
7
+ clarifyDescription: 'Check SuperBridge Flow clarify skill deployment',
8
+ docsDescription: 'Check SuperBridge Flow docs skill deployment',
9
+ designDescription: 'Check SuperBridge Flow design skill deployment',
10
+ implementDescription: 'Check SuperBridge Flow implement skill deployment',
11
+ pipelineDescription: 'Check SuperBridge Flow pipeline skill deployment',
12
+ verifyDescription: 'Check SuperBridge Flow verify skill deployment',
13
+ archiveDescription: 'Check SuperBridge Flow archive skill deployment',
14
+ statusDescription: 'Show active SuperBridge Flow changes and next commands',
15
+ updateDescription: 'Update installed SuperBridge Flow skills, scripts, and hooks',
16
+ doctorDescription: 'Diagnose SuperBridge Flow installation health',
17
+ uninstallDescription: 'Uninstall skills, scripts, and hooks managed by SuperBridge Flow',
18
+ dryRun: 'Print the plan without writing files',
19
+ agentOption: 'Install/check target: claude | codex | opencode | both | all',
20
+ scopeOption: 'Install scope: global | project',
21
+ updateScopeOption: 'Update scope: auto | global | project',
22
+ commandScopeOption: 'Scope: auto | global | project',
23
+ languageOption: 'Language: en | zh',
24
+ yesOption: 'Run non-interactively with defaults',
25
+ jsonOption: 'Output JSON',
26
+ resumeOption: 'Resume from the failed step',
27
+ skipExistingOption: 'Keep existing skills/scripts unchanged',
28
+ overwriteOption: 'Overwrite existing skills without creating backups',
29
+ noHooksOption: 'Install skills and scripts only; skip hook registration',
30
+ noOpenspecInitOption: 'Skip native OpenSpec initialization for this project',
31
+ noScanOption: 'Skip project context scaffolding and scan hints',
32
+ forceOption: 'Overwrite existing docs/sdd-context files',
33
+ noHooksUpdateOption: 'Skip hook re-registration',
34
+ withPackageOption: 'Also run npm update for @chenmk/superflow',
35
+ uninstallForceOption: 'Skip confirmation prompt',
36
+ withDepsOption: 'Also uninstall OpenSpec, Superpowers, and Understand dependencies',
37
+ },
38
+ zh: {
39
+ programDescription: 'SuperBridge Flow - SDD/TDD 工作流 CLI',
40
+ initDescription: '一站式安装 SuperBridge Flow(detect / deps / skills / scripts / hooks / 项目扫描)',
41
+ scanDescription: '单独重跑项目扫描(脚手架 docs/sdd-context/ + understand-anything)',
42
+ clarifyDescription: '校验 SuperBridge Flow clarify 阶段技能部署状态',
43
+ docsDescription: '校验 SuperBridge Flow docs 阶段技能部署状态',
44
+ designDescription: '校验 SuperBridge Flow design 阶段技能部署状态',
45
+ implementDescription: '校验 SuperBridge Flow implement 阶段技能部署状态',
46
+ pipelineDescription: '校验 SuperBridge Flow pipeline 阶段技能部署状态',
47
+ verifyDescription: '校验 SuperBridge Flow verify 阶段技能部署状态',
48
+ archiveDescription: '校验 SuperBridge Flow archive 阶段技能部署状态',
49
+ statusDescription: '查看当前项目 active SuperBridge Flow changes 和下一步 superflow 命令',
50
+ updateDescription: '更新已安装的 SuperBridge Flow skills、scripts 和 hooks',
51
+ doctorDescription: '诊断 SuperBridge Flow 安装健康',
52
+ uninstallDescription: '卸载 SuperBridge Flow 管理的技能、脚本和 hook 注册',
53
+ dryRun: '只打印计划不执行',
54
+ agentOption: '安装/校验目标:claude | codex | opencode | both | all',
55
+ scopeOption: '安装作用域:global | project',
56
+ updateScopeOption: '更新作用域:auto | global | project',
57
+ commandScopeOption: '作用域:auto | global | project',
58
+ languageOption: '语言:en | zh',
59
+ yesOption: '非交互确认安装(默认参数)',
60
+ jsonOption: '输出 JSON',
61
+ resumeOption: '从失败步骤继续',
62
+ skipExistingOption: '已存在的 skill/script 保持不动',
63
+ overwriteOption: '已存在的 skill 直接覆盖,不额外生成 backup',
64
+ noHooksOption: '只装技能 + 脚本,跳过 hook 注册(hook 手工配)',
65
+ noOpenspecInitOption: '跳过当前项目 OpenSpec 原生初始化',
66
+ noScanOption: '跳过项目上下文脚手架和扫描提示',
67
+ forceOption: '覆盖现有 docs/sdd-context 文件',
68
+ noHooksUpdateOption: '跳过 hook 重新注册',
69
+ withPackageOption: '同时执行 npm update 更新 @chenmk/superflow 包',
70
+ uninstallForceOption: '跳过确认提示',
71
+ withDepsOption: '同时卸载 OpenSpec、Superpowers、Understand 依赖',
72
+ },
73
+ };
74
+ export function cliText(language) {
75
+ return CLI_TEXT[language];
76
+ }
77
+ export function resolveCliLanguage(argv = process.argv, env = process.env) {
78
+ const fromArg = languageFromArgv(argv);
79
+ if (fromArg)
80
+ return fromArg;
81
+ return normalizeLanguage(env.SUPERFLOW_LANG) ?? 'zh';
82
+ }
83
+ function languageFromArgv(argv) {
84
+ for (let i = 0; i < argv.length; i++) {
85
+ const arg = argv[i];
86
+ if (arg === '--language' || arg === '--lang') {
87
+ return normalizeLanguage(argv[i + 1]);
88
+ }
89
+ if (arg.startsWith('--language=')) {
90
+ return normalizeLanguage(arg.slice('--language='.length));
91
+ }
92
+ if (arg.startsWith('--lang=')) {
93
+ return normalizeLanguage(arg.slice('--lang='.length));
94
+ }
95
+ }
96
+ return null;
97
+ }
98
+ //# sourceMappingURL=cli-help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-help.js","sourceRoot":"","sources":["../../src/core/cli-help.ts"],"names":[],"mappings":"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"}
@@ -3,20 +3,23 @@ import path from 'path';
3
3
  import { fileURLToPath } from 'url';
4
4
  const __filename = fileURLToPath(import.meta.url);
5
5
  const __dirname = path.dirname(__filename);
6
- // dist/core/context.js → ../../assets/context-templates
7
- const TEMPLATES_DIR = path.resolve(__dirname, '..', '..', 'assets', 'context-templates');
6
+ // dist/core/context.js -> ../../assets/context-templates*
7
+ const ASSETS_DIR = path.resolve(__dirname, '..', '..', 'assets');
8
8
  const CONTEXT_FILES = [
9
9
  'business-rules.md',
10
10
  'incidents.md',
11
11
  'decisions.md',
12
12
  'external-systems.md',
13
13
  ];
14
+ function templatesDir(language = 'zh') {
15
+ return path.join(ASSETS_DIR, language === 'en' ? 'context-templates-en' : 'context-templates');
16
+ }
14
17
  /**
15
18
  * 把 4 个初始文件从 assets/context-templates/ 复制到 <cwd>/docs/sdd-context/
16
19
  * - 已存在则跳过(保留用户已编辑的,不覆盖)
17
20
  * - 目录不存在则创建
18
21
  */
19
- export async function scaffoldBusinessContext(cwd) {
22
+ export async function scaffoldBusinessContext(cwd, language = 'zh') {
20
23
  const targetDir = path.join(cwd, 'docs', 'sdd-context');
21
24
  const copied = [];
22
25
  const skipped = [];
@@ -36,7 +39,7 @@ export async function scaffoldBusinessContext(cwd) {
36
39
  }
37
40
  catch {
38
41
  // 文件不存在,复制
39
- const source = path.join(TEMPLATES_DIR, filename);
42
+ const source = path.join(templatesDir(language), filename);
40
43
  try {
41
44
  await fs.copyFile(source, target);
42
45
  copied.push(filename);
@@ -51,7 +54,7 @@ export async function scaffoldBusinessContext(cwd) {
51
54
  }
52
55
  /**
53
56
  * 检查 understand-anything 是否已扫过当前项目
54
- * (understand-anything 是 Claude 技能,通过 /understand 触发,sdd-cli 无法直接调用)
57
+ * (understand-anything 由 agent 技能触发,CLI 只做轻量检测)
55
58
  * - 扫过:返回 ok=true, graphPath 指向 .understand-anything/knowledge-graph.json
56
59
  * - 没扫:返回 ok=false, 提示用户在 Claude 会话中跑 /understand
57
60
  */
@@ -69,30 +72,50 @@ export async function checkUnderstandScan(cwd) {
69
72
  * 打印软提示:引导用户去看 docs/sdd-context/,并提示可让 LLM 协助补全
70
73
  * 末尾用换行分隔,避免紧贴下面命令输出
71
74
  */
72
- export function printSoftPrompt(cwd, scaffolding, understand) {
75
+ export function printSoftPrompt(cwd, scaffolding, understand, language = 'zh') {
76
+ const zh = language === 'zh';
73
77
  console.log('');
74
78
  console.log('━'.repeat(70));
75
- console.log('💡 已在 docs/sdd-context/ 生成 4 个初始文件');
79
+ console.log(zh
80
+ ? '💡 已在 docs/sdd-context/ 生成 4 个初始文件'
81
+ : '💡 Generated 4 starter files under docs/sdd-context/');
76
82
  for (const f of CONTEXT_FILES) {
77
- const status = scaffolding.copied.includes(f) ? '✓ 复制' :
78
- scaffolding.skipped.includes(f) ? '○ 跳过(已存在)' : '✗ 失败';
83
+ const status = scaffolding.copied.includes(f)
84
+ ? (zh ? '✓ 复制' : '✓ copied')
85
+ : scaffolding.skipped.includes(f)
86
+ ? (zh ? '○ 跳过(已存在)' : '○ skipped (already exists)')
87
+ : (zh ? '✗ 失败' : '✗ failed');
79
88
  console.log(` [${status}] ${f}`);
80
89
  }
81
90
  console.log('');
82
- console.log('📖 建议:阅读这 4 个文件了解项目业务上下文');
83
- console.log(' 如果项目结构 / 业务规则与初始版不符,直接编辑文件即可');
84
- console.log(' 完善后的文档能帮 sdd 技能更精确地理解你的项目');
91
+ console.log(zh
92
+ ? '📖 建议:阅读这 4 个文件了解项目业务上下文'
93
+ : '📖 Recommended: review these files and fill in project-specific context');
94
+ console.log(zh
95
+ ? ' 如果项目结构 / 业务规则与初始版不符,直接编辑文件即可'
96
+ : ' Edit the files directly when project structure or rules differ');
97
+ console.log(zh
98
+ ? ' 完善后的文档能帮 sdd 技能更精确地理解你的项目'
99
+ : ' Better context helps Superflow understand the project more accurately');
85
100
  console.log('');
86
- console.log('🤖 LLM 协助补全:把这 4 个文件 + 项目源码 一起发给 Claude,');
87
- console.log(' 让其协助补全缺失内容');
101
+ console.log(zh
102
+ ? '🤖 LLM 协助补全:把这 4 个文件 + 项目源码 一起发给 Claude,'
103
+ : '🤖 LLM-assisted backfill: ask your agent to read these files plus source code');
104
+ console.log(zh
105
+ ? ' 让其协助补全缺失内容'
106
+ : ' and fill missing project-specific rules and integration facts');
88
107
  if (understand.ok) {
89
108
  console.log('');
90
- console.log('🔍 understand-anything 已扫项目:' + understand.graphPath);
109
+ console.log((zh ? '🔍 understand-anything 已扫项目:' : '🔍 understand-anything graph detected: ') + understand.graphPath);
91
110
  }
92
111
  else {
93
112
  console.log('');
94
- console.log('⚠️ understand-anything 还没扫(可选):');
95
- console.log(' 在 Claude 会话中跑 /understand(输出 .understand-anything/knowledge-graph.json)');
113
+ console.log(zh
114
+ ? '⚠️ understand-anything 还没扫(可选):'
115
+ : '⚠️ understand-anything has not scanned this project yet (optional):');
116
+ console.log(zh
117
+ ? ' 在 Claude 会话中跑 /understand(输出 .understand-anything/knowledge-graph.json)'
118
+ : ' Run /understand in an agent session to produce .understand-anything/knowledge-graph.json');
96
119
  }
97
120
  console.log('━'.repeat(70));
98
121
  console.log('');
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import { homedir } from 'os';
2
2
  import path from 'path';
3
+ export const DEFAULT_AGENTS = ['claude', 'codex'];
4
+ export const ALL_AGENTS = ['claude', 'codex', 'opencode'];
3
5
  export function detectOS() {
4
6
  const platform = process.platform;
5
7
  if (platform === 'darwin' || platform === 'linux')
@@ -38,8 +40,24 @@ export function getPlatformPaths(agent, scope = 'global', projectPath = process.
38
40
  promptsDir: path.join(base, '.codex', 'prompts'),
39
41
  settingsFile: path.join(base, '.codex', 'hooks.json'),
40
42
  };
43
+ case 'opencode': {
44
+ const root = scope === 'global'
45
+ ? path.join(homedir(), '.config', 'opencode')
46
+ : path.join(projectPath, '.opencode');
47
+ return {
48
+ id: 'opencode',
49
+ name: 'OpenCode',
50
+ skillsDir: path.join(root, 'skills'),
51
+ rulesDir: path.join(root, 'rules'),
52
+ scriptsDir: path.join(root, 'scripts'),
53
+ promptsDir: path.join(root, 'commands'),
54
+ settingsFile: scope === 'global'
55
+ ? path.join(root, 'opencode.json')
56
+ : path.join(projectPath, 'opencode.json'),
57
+ };
58
+ }
41
59
  default:
42
- throw new Error(`Unknown agent: ${agent}. Expected 'claude' or 'codex'.`);
60
+ throw new Error(`Unknown agent: ${agent}. Expected 'claude', 'codex', or 'opencode'.`);
43
61
  }
44
62
  }
45
63
  export function parseInstallScope(value) {
@@ -50,11 +68,17 @@ export function parseInstallScope(value) {
50
68
  throw new Error(`--scope must be one of: global, project`);
51
69
  }
52
70
  export function resolveAgents(selection) {
71
+ if (Array.isArray(selection)) {
72
+ return [...new Set(selection)];
73
+ }
53
74
  switch (selection) {
54
75
  case 'both':
55
- return ['claude', 'codex'];
76
+ return DEFAULT_AGENTS;
77
+ case 'all':
78
+ return ALL_AGENTS;
56
79
  case 'claude':
57
80
  case 'codex':
81
+ case 'opencode':
58
82
  return [selection];
59
83
  default:
60
84
  throw new Error(`Unknown agent selection: ${selection}`);
@@ -63,9 +87,38 @@ export function resolveAgents(selection) {
63
87
  export function parseAgentSelection(value) {
64
88
  if (value === undefined || value === null || value === '')
65
89
  return 'both';
66
- if (value === 'claude' || value === 'codex' || value === 'both') {
67
- return value;
90
+ if (typeof value !== 'string') {
91
+ throw new Error(`--agent must be one of: claude, codex, opencode, both, all`);
92
+ }
93
+ const normalized = value.trim().toLowerCase();
94
+ if (normalized === 'both')
95
+ return 'both';
96
+ if (normalized === 'all')
97
+ return 'all';
98
+ const parts = normalized
99
+ .split(/[,\s]+/)
100
+ .map((part) => part.trim())
101
+ .filter(Boolean);
102
+ if (parts.length === 0)
103
+ return 'both';
104
+ const selected = new Set();
105
+ for (const part of parts) {
106
+ if (part === 'claude' || part === 'codex' || part === 'opencode') {
107
+ selected.add(part);
108
+ }
109
+ else {
110
+ throw new Error(`--agent must be one of: claude, codex, opencode, both, all`);
111
+ }
112
+ }
113
+ const agents = [...selected];
114
+ if (agents.length === 1)
115
+ return agents[0];
116
+ if (agents.length === DEFAULT_AGENTS.length &&
117
+ DEFAULT_AGENTS.every((agent) => selected.has(agent))) {
118
+ return 'both';
68
119
  }
69
- throw new Error(`--agent must be one of: claude, codex, both`);
120
+ if (agents.length === ALL_AGENTS.length)
121
+ return 'all';
122
+ return agents;
70
123
  }
71
124
  //# sourceMappingURL=detect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/core/detect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/core/detect.ts"],"names":[],"mappings":"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"}
package/dist/core/i18n.js CHANGED
@@ -3,9 +3,10 @@ const TRANSLATIONS = {
3
3
  agentPrompt: 'Select agent tools to initialize (multi-select):',
4
4
  agentClaude: 'Claude Code',
5
5
  agentCodex: 'Codex',
6
- agentBoth: 'Install both (default)',
7
- agentAnswer: 'Enter 1,2 / 2 / a:',
8
- agentInvalid: 'Invalid input. Enter 1, 2, 1,2, claude, codex, or a.',
6
+ agentOpenCode: 'OpenCode',
7
+ agentBoth: 'Install Claude Code and Codex (default); use all for OpenCode too',
8
+ agentAnswer: 'Enter 1,2 / 2,3 / all / a:',
9
+ agentInvalid: 'Invalid input. Enter 1, 2, 3, 1,2, 2,3, claude, codex, opencode, all, or a.',
9
10
  languagePrompt: 'Select SuperBridge Flow language:',
10
11
  languageEnglish: 'English',
11
12
  languageChinese: 'Chinese',
@@ -14,7 +15,7 @@ const TRANSLATIONS = {
14
15
  stepDeps: 'Install dependencies and initialize OpenSpec',
15
16
  stepSkills: 'Deploy SuperBridge Flow/OpenSpec skills',
16
17
  stepScriptsHooks: 'Deploy scripts and register hooks',
17
- stepPrompts: 'Deploy Codex prompt aliases',
18
+ stepPrompts: 'Deploy prompt and command aliases',
18
19
  stepRules: 'Deploy SuperBridge Flow anti-drift rules',
19
20
  stepScan: 'Scaffold docs/sdd-context and check understand-anything',
20
21
  summaryTitle: 'superflow init summary',
@@ -46,9 +47,10 @@ const TRANSLATIONS = {
46
47
  agentPrompt: '请选择要初始化的 agent 工具(可多选):',
47
48
  agentClaude: 'Claude Code',
48
49
  agentCodex: 'Codex',
49
- agentBoth: '两者都安装(默认)',
50
- agentAnswer: '输入序号,例如 1,2 / 2 / a:',
51
- agentInvalid: '输入无效,请输入 1、2、1,2、claude、codex 或 a。',
50
+ agentOpenCode: 'OpenCode',
51
+ agentBoth: '安装 Claude Code + Codex(默认);输入 all 会包含 OpenCode',
52
+ agentAnswer: '输入序号,例如 1,2 / 2,3 / all / a:',
53
+ agentInvalid: '输入无效,请输入 1、2、3、1,2、2,3、claude、codex、opencode、all 或 a。',
52
54
  languagePrompt: '请选择 SuperBridge Flow 语言:',
53
55
  languageEnglish: '英文',
54
56
  languageChinese: '中文',
@@ -57,7 +59,7 @@ const TRANSLATIONS = {
57
59
  stepDeps: '安装第三方依赖并初始化 OpenSpec',
58
60
  stepSkills: '部署 SuperBridge Flow/OpenSpec 技能',
59
61
  stepScriptsHooks: '部署脚本 + 注册 hook',
60
- stepPrompts: '部署 Codex prompt alias',
62
+ stepPrompts: '部署 prompt/command alias',
61
63
  stepRules: '部署 SuperBridge Flow 防漂移规则',
62
64
  stepScan: '脚手架 docs/sdd-context/ + understand-anything 扫描 + 软提示',
63
65
  summaryTitle: 'superflow init summary',
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/core/i18n.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/core/i18n.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,9 @@ export function getManifestScripts(agent) {
13
13
  return [...manifest.scripts, ...(manifest.agentScripts[agent] ?? [])];
14
14
  }
15
15
  export function getManifestHooks(agent) {
16
+ if (agent === 'opencode') {
17
+ return [...(manifest.agentHooks[agent] ?? [])];
18
+ }
16
19
  return [...(manifest.agentHooks[agent] ?? []), ...manifest.hooks];
17
20
  }
18
21
  //# sourceMappingURL=manifest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/core/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAc5E,MAAM,QAAQ,GAAG,YAA2B,CAAC;AAE7C,MAAM,UAAU,WAAW;IACzB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAY;IAC7C,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/core/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAc5E,MAAM,QAAQ,GAAG,YAA2B,CAAC;AAE7C,MAAM,UAAU,WAAW;IACzB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAY;IAC7C,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC"}
@@ -30,6 +30,14 @@ function shouldRewriteScript(file) {
30
30
  function rewriteScriptContent(content, agent) {
31
31
  if (agent === 'codex')
32
32
  return content;
33
+ if (agent === 'opencode') {
34
+ return content
35
+ .replaceAll('$HOME/.codex/hooks', '$HOME/.opencode/scripts')
36
+ .replaceAll('~/.codex/hooks', '~/.opencode/scripts')
37
+ .replaceAll('~/.codex/skills', '~/.opencode/skills')
38
+ .replaceAll('$HOME/.codex/skills', '$HOME/.opencode/skills')
39
+ .replaceAll('codex-auto-backup-hook.sh', 'opencode-auto-backup-hook.sh');
40
+ }
33
41
  return content
34
42
  .replaceAll('$HOME/.codex/hooks', '$HOME/.claude/scripts')
35
43
  .replaceAll('~/.codex/hooks', '~/.claude/scripts')
@@ -1 +1 @@
1
- {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../src/core/scripts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAQxB,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,WAAqB,EACrB,SAAiB,EACjB,UAAkB,EAClB,UAAgC,EAAE;IAElC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;IAE9C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC;YACH,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBACzB,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACtB,SAAS;YACX,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gDAAgD;QAClD,CAAC;QACD,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7F,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAe,EAAE,KAAY;IACzD,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IACtC,OAAO,OAAO;SACX,UAAU,CAAC,oBAAoB,EAAE,uBAAuB,CAAC;SACzD,UAAU,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;SACjD,UAAU,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;SACjD,UAAU,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;SACzD,UAAU,CAAC,2BAA2B,EAAE,4BAA4B,CAAC,CAAC;AAC3E,CAAC"}
1
+ {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../src/core/scripts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAQxB,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,WAAqB,EACrB,SAAiB,EACjB,UAAkB,EAClB,UAAgC,EAAE;IAElC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;IAE9C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC;YACH,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBACzB,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACtB,SAAS;YACX,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gDAAgD;QAClD,CAAC;QACD,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7F,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAe,EAAE,KAAY;IACzD,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IACtC,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACzB,OAAO,OAAO;aACX,UAAU,CAAC,oBAAoB,EAAE,yBAAyB,CAAC;aAC3D,UAAU,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;aACnD,UAAU,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;aACnD,UAAU,CAAC,qBAAqB,EAAE,wBAAwB,CAAC;aAC3D,UAAU,CAAC,2BAA2B,EAAE,8BAA8B,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,OAAO;SACX,UAAU,CAAC,oBAAoB,EAAE,uBAAuB,CAAC;SACzD,UAAU,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;SACjD,UAAU,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;SACjD,UAAU,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;SACzD,UAAU,CAAC,2BAA2B,EAAE,4BAA4B,CAAC,CAAC;AAC3E,CAAC"}
@@ -48,6 +48,12 @@ function shouldRewriteSkillFile(file) {
48
48
  function rewriteSkillContent(content, agent) {
49
49
  if (agent === 'codex')
50
50
  return content;
51
+ if (agent === 'opencode') {
52
+ return content
53
+ .replaceAll('~/.codex/hooks', '~/.opencode/scripts')
54
+ .replaceAll('~/.codex/skills', '~/.opencode/skills')
55
+ .replaceAll('Codex Hooks', 'OpenCode Commands');
56
+ }
51
57
  return content
52
58
  .replaceAll('~/.codex/hooks', '~/.claude/scripts')
53
59
  .replaceAll('~/.codex/skills', '~/.claude/skills')
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
2
2
  import path from 'path';
3
+ const SUPPORTED_AGENTS = ['claude', 'codex', 'opencode'];
3
4
  export function loadState(file) {
4
5
  if (!existsSync(file))
5
6
  return null;
@@ -10,12 +11,21 @@ export function loadState(file) {
10
11
  if (!parsed.version || !parsed.platforms || !parsed.completedSteps) {
11
12
  throw new Error('state file missing required top-level fields');
12
13
  }
13
- return parsed;
14
+ return ensureStatePlatforms(parsed);
14
15
  }
15
16
  catch (err) {
16
17
  throw new Error(`Failed to parse state file ${file}: ${err.message}`);
17
18
  }
18
19
  }
20
+ function ensureStatePlatforms(state) {
21
+ const emptyPlatform = () => ({ skills: [], scripts: [], hooks: [] });
22
+ for (const agent of SUPPORTED_AGENTS) {
23
+ if (!state.platforms[agent]) {
24
+ state.platforms[agent] = emptyPlatform();
25
+ }
26
+ }
27
+ return state;
28
+ }
19
29
  export function saveState(file, state) {
20
30
  const dir = path.dirname(file);
21
31
  if (!existsSync(dir))
@@ -32,6 +42,7 @@ export function initState(version, _agent, language = 'zh') {
32
42
  platforms: {
33
43
  claude: { ...emptyPlatform },
34
44
  codex: { ...emptyPlatform },
45
+ opencode: { ...emptyPlatform },
35
46
  },
36
47
  backups: {
37
48
  settingsFiles: [],
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAsB,CAAC;QACpD,uBAAuB;QACvB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,MAAkB,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACnF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,KAAe;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,MAAa,EAAE,WAAqB,IAAI;IACjF,MAAM,aAAa,GAAkB,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC5E,OAAO;QACL,OAAO;QACP,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAClC,QAAQ;QACR,cAAc,EAAE,EAAE;QAClB,SAAS,EAAE;YACT,MAAM,EAAE,EAAE,GAAG,aAAa,EAAE;YAC5B,KAAK,EAAE,EAAE,GAAG,aAAa,EAAE;SAC5B;QACD,OAAO,EAAE;YACP,aAAa,EAAE,EAAE;YACjB,MAAM,EAAE,EAAE;SACX;QACD,eAAe,EAAE,IAAI;KACtB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,MAAM,gBAAgB,GAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAElE,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAsB,CAAC;QACpD,uBAAuB;QACvB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,oBAAoB,CAAC,MAAkB,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACnF,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAe;IAC3C,MAAM,aAAa,GAAG,GAAkB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACpF,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,aAAa,EAAE,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,KAAe;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,MAAa,EAAE,WAAqB,IAAI;IACjF,MAAM,aAAa,GAAkB,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC5E,OAAO;QACL,OAAO;QACP,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAClC,QAAQ;QACR,cAAc,EAAE,EAAE;QAClB,SAAS,EAAE;YACT,MAAM,EAAE,EAAE,GAAG,aAAa,EAAE;YAC5B,KAAK,EAAE,EAAE,GAAG,aAAa,EAAE;YAC3B,QAAQ,EAAE,EAAE,GAAG,aAAa,EAAE;SAC/B;QACD,OAAO,EAAE;YACP,aAAa,EAAE,EAAE;YACjB,MAAM,EAAE,EAAE;SACX;QACD,eAAe,EAAE,IAAI;KACtB,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@chenmk/superflow",
3
- "version": "0.1.1",
4
- "description": "SuperBridge Flow 工作流 CLI,支持 Claude Code 和 Codex",
3
+ "version": "0.1.3",
4
+ "description": "SuperBridge Flow workflow CLI for Claude Code, Codex, and OpenCode",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "keywords": [
@@ -12,7 +12,8 @@
12
12
  "sdd",
13
13
  "tdd",
14
14
  "codex",
15
- "claude-code"
15
+ "claude-code",
16
+ "opencode"
16
17
  ],
17
18
  "publishConfig": {
18
19
  "access": "public",