@jspg-ai/coding-bb 0.0.3-beta.2 → 0.0.3-beta.21

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 (101) hide show
  1. package/cbb/dev-standards/rules/cbb-ai-behavior.md +128 -116
  2. package/cbb/lib/install/claude-code.js +1 -3
  3. package/cbb/lib/install/init.js +344 -127
  4. package/cbb/lib/install/opencode.js +35 -31
  5. package/cbb/lib/install/qoder.js +1 -3
  6. package/cbb/lib/install/rule-rewrite.js +27 -0
  7. package/cbb/lib/install/setup-decision.js +48 -0
  8. package/cbb/lib/install/trae.js +43 -0
  9. package/cbb/lib/install/workbuddy.js +36 -0
  10. package/cbb/lib/openspec/index.js +337 -554
  11. package/cbb/lib/superpowers/index.js +246 -265
  12. package/cbb/lib/utils/check-update.js +13 -2
  13. package/cbb/lib/utils/gitignore.js +9 -2
  14. package/cbb/lib/utils/settings.js +17 -4
  15. package/cbb/lib/utils/tar.js +92 -0
  16. package/cbb/lib/utils/upstream.js +90 -0
  17. package/cbb/worktrees/skills/cbb-worktree-close/SKILL.md +32 -23
  18. package/cbb/worktrees/skills/cbb-worktree-close/scripts/remove-worktrees.js +2 -2
  19. package/cbb/worktrees/skills/cbb-worktree-init/SKILL.md +36 -28
  20. package/cbb/worktrees/skills/cbb-worktree-init/scripts/create-worktrees.js +15 -37
  21. package/cbb/worktrees/skills/cbb-worktree-init/scripts/update-gitignore.js +25 -9
  22. package/cbb/worktrees/skills/cbb-worktree-push/SKILL.md +108 -31
  23. package/cbb/worktrees/skills/cbb-worktree-push/scripts/make-mr-urls.js +211 -0
  24. package/config/openspec/schemas/spec-driven/schema.yaml +40 -30
  25. package/config/openspec/schemas/spec-driven/templates/design.md +0 -18
  26. package/config/openspec/schemas/spec-driven/templates/proposal.md +4 -3
  27. package/config/upstream-mirrors.json +12 -0
  28. package/config/workspace-agents.sample.md +45 -39
  29. package/openspec/.version +2 -3
  30. package/openspec/commands/apply.md +189 -175
  31. package/openspec/commands/archive.md +237 -216
  32. package/openspec/commands/bulk-archive.md +355 -327
  33. package/openspec/commands/continue.md +116 -105
  34. package/openspec/commands/explore.md +230 -199
  35. package/openspec/commands/ff.md +115 -104
  36. package/openspec/commands/new.md +74 -63
  37. package/openspec/commands/onboard.md +557 -548
  38. package/openspec/commands/propose.md +161 -150
  39. package/openspec/commands/sync.md +277 -249
  40. package/openspec/commands/update.md +92 -80
  41. package/openspec/commands/verify.md +175 -162
  42. package/openspec/skills/openspec-apply-change/SKILL.md +20 -5
  43. package/openspec/skills/openspec-archive-change/SKILL.md +30 -8
  44. package/openspec/skills/openspec-bulk-archive-change/SKILL.md +36 -6
  45. package/openspec/skills/openspec-continue-change/SKILL.md +14 -2
  46. package/openspec/skills/openspec-explore/SKILL.md +21 -9
  47. package/openspec/skills/openspec-ff-change/SKILL.md +14 -2
  48. package/openspec/skills/openspec-new-change/SKILL.md +13 -1
  49. package/openspec/skills/openspec-onboard/SKILL.md +49 -39
  50. package/openspec/skills/openspec-propose/SKILL.md +15 -3
  51. package/openspec/skills/openspec-sync-specs/SKILL.md +31 -2
  52. package/openspec/skills/openspec-update-change/SKILL.md +27 -14
  53. package/openspec/skills/openspec-verify-change/SKILL.md +17 -3
  54. package/package.json +2 -2
  55. package/superpowers/.version +4 -4
  56. package/superpowers/skills/brainstorming/SKILL.md +47 -12
  57. package/superpowers/skills/brainstorming/scripts/frame-template.html +213 -213
  58. package/superpowers/skills/brainstorming/scripts/server.cjs +723 -723
  59. package/superpowers/skills/brainstorming/visual-companion.md +6 -6
  60. package/superpowers/skills/diagnosing-superpowers/SKILL.md +120 -0
  61. package/superpowers/skills/diagnosing-superpowers/prompts/analyst-common.md +38 -0
  62. package/superpowers/skills/diagnosing-superpowers/prompts/cost-and-time.md +28 -0
  63. package/superpowers/skills/diagnosing-superpowers/prompts/plan-adherence.md +29 -0
  64. package/superpowers/skills/diagnosing-superpowers/prompts/quality-evidence.md +26 -0
  65. package/superpowers/skills/diagnosing-superpowers/prompts/repeated-work.md +30 -0
  66. package/superpowers/skills/diagnosing-superpowers/prompts/request-conflicts.md +20 -0
  67. package/superpowers/skills/diagnosing-superpowers/prompts/scrub-audit.md +33 -0
  68. package/superpowers/skills/diagnosing-superpowers/prompts/scrub.md +29 -0
  69. package/superpowers/skills/diagnosing-superpowers/prompts/similar-session.md +38 -0
  70. package/superpowers/skills/diagnosing-superpowers/prompts/skill-timeline.md +30 -0
  71. package/superpowers/skills/diagnosing-superpowers/prompts/stumbles.md +28 -0
  72. package/superpowers/skills/diagnosing-superpowers/references/context-safety.md +22 -0
  73. package/superpowers/skills/diagnosing-superpowers/references/github-issues.md +47 -0
  74. package/superpowers/skills/diagnosing-superpowers/references/redaction-policy.md +34 -0
  75. package/superpowers/skills/diagnosing-superpowers/references/session-discovery.md +31 -0
  76. package/superpowers/skills/diagnosing-superpowers/templates/bundle-README.md +77 -0
  77. package/superpowers/skills/diagnosing-superpowers/templates/case.md +64 -0
  78. package/superpowers/skills/diagnosing-superpowers/templates/issue.md +51 -0
  79. package/superpowers/skills/diagnosing-superpowers/templates/report.md +82 -0
  80. package/superpowers/skills/executing-plans/SKILL.md +350 -41
  81. package/superpowers/skills/executing-plans/scripts/task-done +52 -0
  82. package/superpowers/skills/executing-plans/scripts/task-start +28 -0
  83. package/superpowers/skills/requesting-code-review/SKILL.md +1 -1
  84. package/superpowers/skills/requesting-code-review/code-reviewer.md +17 -0
  85. package/superpowers/skills/subagent-driven-development/SKILL.md +18 -18
  86. package/superpowers/skills/subagent-driven-development/re-review-prompt.md +1 -1
  87. package/superpowers/skills/subagent-driven-development/scripts/review-package +53 -46
  88. package/superpowers/skills/subagent-driven-development/scripts/sdd-workspace +82 -40
  89. package/superpowers/skills/subagent-driven-development/scripts/task-brief +43 -41
  90. package/superpowers/skills/subagent-driven-development/task-reviewer-prompt.md +2 -2
  91. package/superpowers/skills/systematic-debugging/root-cause-tracing.md +1 -1
  92. package/superpowers/skills/test-driven-development/SKILL.md +10 -0
  93. package/superpowers/skills/using-superpowers/SKILL.md +2 -0
  94. package/superpowers/skills/using-superpowers/references/claude-code-tools.md +29 -0
  95. package/superpowers/skills/using-superpowers/references/muse-tools.md +35 -0
  96. package/superpowers/skills/writing-plans/SKILL.md +30 -9
  97. package/superpowers/skills/writing-skills/SKILL.md +4 -2
  98. package/superpowers/skills/writing-skills/graphviz-conventions.dot +171 -171
  99. package/cbb/worktrees/commands/worktree-close.md +0 -64
  100. package/cbb/worktrees/commands/worktree-init.md +0 -51
  101. package/cbb/worktrees/commands/worktree-push.md +0 -42
@@ -1,31 +1,35 @@
1
- /**
2
- * opencode 适配器
3
- *
4
- * 将编码规范分发到 .opencode/ 目录(opencode 项目级配置域)。
5
- *
6
- * 与 Claude Code / Qoder 的映射差异:
7
- * - rules:opencode 无原生 rules 目录,部署到 .opencode/rules/ 并由安装流程
8
- * 将 glob 注册进项目根 opencode.json 的 instructions 字段(官方支持的加载方式)
9
- * - skills:.opencode/skills/<name>/SKILL.md,结构与 Claude 同构
10
- * - commands:命令名 = 文件名(嵌套目录无命名空间,且 init.md 等会撞内置 /init),
11
- * 因此扁平化为 opsx-<name>.md(/opsx-propose);worktree 管理命令同理扁平化为
12
- * cbb-<name>.md(/cbb-worktree-init),部署副本中的 /opsx: 与 /cbb: 引用同步改写
13
- * - hooks:opencode 无 UserPromptSubmit 等价事件,版本检查 hook 不安装(settingsFile 留空即跳过)
14
- */
15
-
16
- module.exports = {
17
- name: 'opencode',
18
- displayName: 'opencode',
19
- rulesDir: '.opencode/rules',
20
- skillsDir: '.opencode/skills',
21
- commandsDir: '.opencode/commands',
22
- // 部署时给命令文件名加此前缀(规避内置命令名冲突)
23
- commandPrefix: 'opsx-',
24
- // worktree 管理命令(非 openspec 上游)落在同一扁平目录,用 cbb- 前缀区分
25
- worktreeCommandsDir: '.opencode/commands',
26
- worktreeCommandPrefix: 'cbb-',
27
- // 部署副本中将该引用串改写为 opencode 的命令风格(配合 commandPrefix)
28
- contentRewrites: [['/opsx:', '/opsx-'], ['/cbb:', '/cbb-']],
29
- // rules 加载登记:注入项目根 opencode.json 的 instructions(glob,相对项目根)
30
- instructionsPattern: '.opencode/rules/*.md',
31
- };
1
+ /**
2
+ * opencode 适配器
3
+ *
4
+ * 将编码规范分发到 .opencode/ 目录(opencode 项目级配置域)。
5
+ *
6
+ * 与 Claude Code / Qoder 的映射差异:
7
+ * - rules:opencode 无原生 rules 目录,部署到 .opencode/rules/ 并由安装流程
8
+ * 将 glob 登记进 .opencode/opencode.json 的 instructions 字段(opencode V2
9
+ * 官方支持的配置位置:全局目录 / 项目根 / .opencode 目录内均会被发现)
10
+ * - skills:.opencode/skills/<name>/SKILL.md,结构与 Claude 同构
11
+ * - commands:命令名 = 文件名(嵌套目录无命名空间,且 init.md 等会撞内置 /init),
12
+ * 因此扁平化为 opsx-<name>.md(/opsx-propose);部署副本中的 /opsx: 与 /cbb: 引用同步改写
13
+ * - hooks:opencode 无 UserPromptSubmit 等价事件,版本检查 hook 不安装(settingsFile 留空即跳过)
14
+ */
15
+
16
+ module.exports = {
17
+ name: 'opencode',
18
+ displayName: 'opencode',
19
+ rulesDir: '.opencode/rules',
20
+ skillsDir: '.opencode/skills',
21
+ commandsDir: '.opencode/commands',
22
+ // 部署时给命令文件名加此前缀(规避内置命令名冲突)
23
+ commandPrefix: 'opsx-',
24
+ // 部署副本中将该引用串改写为 opencode 的命令风格(配合 commandPrefix)
25
+ contentRewrites: [['/opsx:', '/opsx-'], ['/cbb:', '/cbb-']],
26
+ // 命令显示名取自 frontmatter name,部署副本重写为 kebab-case(/opsx-propose,与文档一致)
27
+ commandNameKebab: true,
28
+ // rules 加载登记:写入 .opencode/opencode.json 的 instructions。
29
+ // instructions 相对路径的解析基准(配置文件目录 vs 项目根)文档未写死,
30
+ // 登记双 glob 对冲:任一基准下恰有一个命中,另一个空匹配。
31
+ instructionsFile: '.opencode/opencode.json',
32
+ instructionsPatterns: ['rules/*.md', '.opencode/rules/*.md'],
33
+ // 旧版(≤0.0.3-beta.2)曾登记在项目根 opencode.json 的 pattern,迁移/卸载时识别清理用
34
+ legacyInstructionsPattern: '.opencode/rules/*.md',
35
+ };
@@ -13,9 +13,7 @@ module.exports = {
13
13
  rulesDir: '.qoder/rules',
14
14
  skillsDir: '.qoder/skills',
15
15
  commandsDir: '.qoder/commands/opsx',
16
- // worktree 管理命令(非 openspec 上游):独立命名空间 /cbb:worktree-*
17
- worktreeCommandsDir: '.qoder/commands/cbb',
18
- // 用户级 settings,写入全局生效,不污染项目目录
16
+ // 用户级 settings,写入全局生效,不污染项目目录
19
17
  settingsFile: path.join(os.homedir(), '.qoder', 'settings.json'),
20
18
  settingsFileIsUserLevel: true,
21
19
  hookEvents: ['UserPromptSubmit'],
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * 规则 frontmatter 改写(纯函数,无副作用,便于单测)。
5
+ *
6
+ * 源规则(cbb/dev-standards/rules/*.md)用 Qoder 的 frontmatter 约定
7
+ * `trigger: always_on`。各工具对"始终生效"的字段名不同:
8
+ * - Qoder:trigger: always_on(源格式)
9
+ * - Claude Code / opencode:无该字段,靠各自机制加载
10
+ * - WorkBuddy、Trae:alwaysApply: true
11
+ *
12
+ * 适配器通过 ruleRewrites([[from, to], ...])声明改写规则,部署时套用;
13
+ * 无 ruleRewrites 的适配器原样返回。
14
+ */
15
+
16
+ /**
17
+ * 按适配器的 ruleRewrites 改写规则文本。
18
+ * @param {object} adapter 适配器配置
19
+ * @param {string} text 规则文件原文
20
+ * @returns {string} 改写后的文本(无 ruleRewrites 时原样返回)
21
+ */
22
+ function applyRuleRewrites(adapter, text) {
23
+ if (!adapter || !adapter.ruleRewrites) return text;
24
+ return adapter.ruleRewrites.reduce((t, [from, to]) => t.split(from).join(to), text);
25
+ }
26
+
27
+ module.exports = { applyRuleRewrites };
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * cbb setup 空间级安装的跳过判定(纯逻辑,可单测)。
5
+ *
6
+ * 背景 bug(0.0.3-beta.15 修复):旧版 decideUpgradeIfInstalled 只比较
7
+ * 「已装版本 vs 当前包版本」,版本一致即 skip——导致「空间已是当前版本 +
8
+ * 本次新选了工具(如 WorkBuddy)」被整体跳过,新工具的空间级目录
9
+ * (.workbuddy/ 等)永不生成,.last-tools 也不更新。
10
+ */
11
+
12
+ const fs = require('fs');
13
+ const path = require('path');
14
+
15
+ /**
16
+ * 读取 <targetDir>/.cbb/.last-tools 的已装工具集合。
17
+ * @param {string} targetDir 业务空间根
18
+ * @returns {Set<string>|null} 工具名集合;无文件或解析失败返回 null
19
+ */
20
+ function readLastToolsFrom(targetDir) {
21
+ const filePath = path.join(targetDir, '.cbb', '.last-tools');
22
+ if (!fs.existsSync(filePath)) return null;
23
+ try {
24
+ const data = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
25
+ return new Set(data.tools || []);
26
+ } catch (_) {
27
+ return null;
28
+ }
29
+ }
30
+
31
+ /**
32
+ * 判定已安装空间本次 setup 应跳过还是继续安装。
33
+ * @param {object} p
34
+ * @param {boolean} p.sameVersion 已装版本 == 当前包版本
35
+ * @param {Set<string>|null} p.lastTools .last-tools 记录(null = 无记录)
36
+ * @param {string[]} p.selectedNames 本次选中的工具名
37
+ * @returns {{action:'skip'|'install', newTools:string[], reason:string}}
38
+ * reason: 'version-changed' | 'no-tools-record' | 'new-tools' | 'up-to-date'
39
+ */
40
+ function decideSetupAction({ sameVersion, lastTools, selectedNames }) {
41
+ if (!sameVersion) return { action: 'install', newTools: [], reason: 'version-changed' };
42
+ if (lastTools === null) return { action: 'install', newTools: [], reason: 'no-tools-record' };
43
+ const newTools = (selectedNames || []).filter(n => !lastTools.has(n));
44
+ if (newTools.length > 0) return { action: 'install', newTools, reason: 'new-tools' };
45
+ return { action: 'skip', newTools: [], reason: 'up-to-date' };
46
+ }
47
+
48
+ module.exports = { decideSetupAction, readLastToolsFrom };
@@ -0,0 +1,43 @@
1
+ /**
2
+ * TraeWork / TraeCode 适配器(中国版)
3
+ *
4
+ * 中国版 TraeCode IDE 与 TraeWork 的项目级配置目录为 `.trae/`
5
+ * (官方文档 docs.trae.cn:项目规则 `.trae/rules/`、项目命令 `.trae/commands`),
6
+ * `.trae-cn/` 仅是中国版**用户级**目录(~/.trae-cn/hooks.json、user_rules、commands),
7
+ * 与国际版共用项目级 `.trae/` 命名。cbb 仅支持中国版(我司均用中国版)。
8
+ *
9
+ * 与 Claude Code / Qoder 的映射差异:
10
+ * - rules:`.trae/rules/*.md`(扁平文件、支持子目录,最多 3 层),frontmatter 用
11
+ * `alwaysApply: true`(Qoder 的 `trigger: always_on` 需改写,见 ruleRewrites)
12
+ * - skills:`.trae/skills/<name>/SKILL.md`,结构与 Claude 同构
13
+ * - commands:命令名 = 文件名,无 Claude 式"目录:命令"命名空间(实测嵌套目录 +
14
+ * `name: "OPSX: Apply"` 不出现在斜杠列表),故与 opencode 同款扁平化为
15
+ * `.trae/commands/opsx-<name>.md`(/opsx-propose),frontmatter name 同步 kebab 化
16
+ * - hooks:`~/.trae-cn/hooks.json`(用户级),格式与 Claude 相近但需顶层 `version: 1`
17
+ * (由 settingsManager 的 hookDialect 处理),事件名/输出字段一致
18
+ *
19
+ * 注意:不设 legacyDirs —— `.trae/` 本就是正确的项目级目录,无需清理。
20
+ */
21
+
22
+ const path = require('path');
23
+ const os = require('os');
24
+
25
+ module.exports = {
26
+ name: 'trae',
27
+ displayName: 'TraeWork(TraeCode·中国版)',
28
+ rulesDir: '.trae/rules',
29
+ skillsDir: '.trae/skills',
30
+ commandsDir: '.trae/commands',
31
+ // 命令扁平化(同 opencode):中国版命令名 = 文件名,不支持 "目录:命令" 命名空间
32
+ commandPrefix: 'opsx-',
33
+ contentRewrites: [['/opsx:', '/opsx-'], ['/cbb:', '/cbb-']],
34
+ commandNameKebab: true,
35
+ // 规则 frontmatter 改写:Qoder 风格 → Trae 风格
36
+ ruleRewrites: [['trigger: always_on', 'alwaysApply: true']],
37
+ // 用户级 hooks 配置(中国版目录为 ~/.trae-cn/,项目级才是 .trae/)
38
+ settingsFile: path.join(os.homedir(), '.trae-cn', 'hooks.json'),
39
+ settingsFileIsUserLevel: true,
40
+ hookEvents: ['UserPromptSubmit'],
41
+ // Trae 的 hooks.json 需顶层 version: 1(Claude 风格 settings.json 无此字段)
42
+ hookDialect: 'trae',
43
+ };
@@ -0,0 +1,36 @@
1
+ /**
2
+ * WorkBuddy 适配器
3
+ *
4
+ * 腾讯 WorkBuddy 桌面工作台的项目级配置目录为 `.workbuddy/`(业务空间实测:
5
+ * skill 只有放在 `.workbuddy/skills/` 才生效;旧版假设「与 CodeBuddy 共用
6
+ * .codebuddy/」不成立)。0.0.3-beta.16 起目录与用户级 settings 切到
7
+ * `.workbuddy`;0.0.3-beta.17 起不再支持 CodeBuddy,`.codebuddy` 仅作为
8
+ * legacy 由安装流程迁移清理(legacyDirs / legacySettingsFile)。
9
+ *
10
+ * 与 Claude Code / Qoder 的映射差异:
11
+ * - rules:`.workbuddy/rules/*.md`(扁平文件、递归加载),frontmatter 用
12
+ * `alwaysApply: true`(Qoder 的 `trigger: always_on` 需改写,见 ruleRewrites)
13
+ * - skills:`.workbuddy/skills/<name>/SKILL.md`,结构与 Claude 同构
14
+ * - commands:`.workbuddy/commands/`,支持目录嵌套(`/group:command`),与 Claude 同风格
15
+ * - hooks:兼容 Claude Code Hooks 规范,settings 结构一致,直接复用 settingsManager
16
+ */
17
+
18
+ const path = require('path');
19
+ const os = require('os');
20
+
21
+ module.exports = {
22
+ name: 'workbuddy',
23
+ displayName: 'WorkBuddy',
24
+ rulesDir: '.workbuddy/rules',
25
+ skillsDir: '.workbuddy/skills',
26
+ commandsDir: '.workbuddy/commands/opsx',
27
+ // 规则 frontmatter 改写:Qoder 风格 → WorkBuddy 风格
28
+ ruleRewrites: [['trigger: always_on', 'alwaysApply: true']],
29
+ // 用户级 settings,写入全局生效,不污染项目目录
30
+ settingsFile: path.join(os.homedir(), '.workbuddy', 'settings.json'),
31
+ settingsFileIsUserLevel: true,
32
+ hookEvents: ['UserPromptSubmit'],
33
+ // 旧版(beta.15 及以前按 CodeBuddy 装的 .codebuddy):安装时迁移清理
34
+ legacyDirs: ['.codebuddy'],
35
+ legacySettingsFile: path.join(os.homedir(), '.codebuddy', 'settings.json'),
36
+ };