@jspg-ai/coding-bb 0.0.1 → 0.0.2-beta.22

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 (145) hide show
  1. package/cbb/bin/cbb.js +6 -0
  2. package/cbb/bin/cbbm.js +6 -0
  3. package/cbb/dev-standards/rules/cbb-ai-behavior.md +103 -103
  4. package/cbb/dev-standards/rules/cbb-priority.md +55 -55
  5. package/cbb/lib/install/claude-code.js +2 -0
  6. package/cbb/lib/install/init.js +496 -290
  7. package/cbb/lib/install/opencode.js +31 -0
  8. package/cbb/lib/install/qoder.js +2 -0
  9. package/cbb/lib/install/workspaces.js +53 -13
  10. package/cbb/lib/openspec/index.js +3 -3
  11. package/cbb/lib/superpowers/index.js +1 -1
  12. package/cbb/lib/utils/check-update.js +16 -14
  13. package/cbb/lib/utils/gitignore.js +2 -1
  14. package/cbb/lib/utils/output.js +92 -4
  15. package/cbb/lib/utils/version.js +2 -31
  16. package/cbb/lib/wiki/cli.js +25 -25
  17. package/cbb/lib/wiki/index.js +16 -16
  18. package/cbb/tools/cbb-design-to-wiki/SKILL.md +14 -14
  19. package/cbb/tools/cbb-wiki-ops/SKILL.md +22 -22
  20. package/cbb/worktrees/_shared/scripts/find-target-worktree.js +2 -2
  21. package/cbb/worktrees/_shared/scripts/find-workspace-root.js +7 -7
  22. package/cbb/worktrees/_shared/scripts/push-core.js +18 -0
  23. package/cbb/worktrees/commands/{close.md → worktree-close.md} +8 -8
  24. package/cbb/worktrees/commands/{init.md → worktree-init.md} +9 -9
  25. package/cbb/worktrees/commands/{push.md → worktree-push.md} +3 -3
  26. package/cbb/worktrees/skills/{openspec-close-worktree → cbb-worktree-close}/SKILL.md +20 -20
  27. package/cbb/worktrees/skills/{openspec-close-worktree → cbb-worktree-close}/scripts/check-env.js +4 -4
  28. package/cbb/worktrees/skills/{openspec-close-worktree → cbb-worktree-close}/scripts/check-unarchived.js +1 -1
  29. package/cbb/worktrees/skills/{openspec-close-worktree → cbb-worktree-close}/scripts/delete-branches.js +3 -3
  30. package/cbb/worktrees/skills/{openspec-close-worktree → cbb-worktree-close}/scripts/discover-apps.js +6 -6
  31. package/cbb/worktrees/skills/{openspec-extend-worktree → cbb-worktree-close}/scripts/find-target-worktree.js +2 -2
  32. package/cbb/worktrees/skills/{openspec-push-worktrees → cbb-worktree-close}/scripts/find-workspace-root.js +7 -7
  33. package/cbb/worktrees/skills/{openspec-close-worktree → cbb-worktree-close}/scripts/remove-worktrees.js +4 -4
  34. package/cbb/worktrees/skills/{openspec-close-worktree → cbb-worktree-close}/scripts/safety-check.js +4 -4
  35. package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/SKILL.md +81 -107
  36. package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/auto-open.js +1 -1
  37. package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/check-env-deep.js +4 -4
  38. package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/check-env.js +6 -6
  39. package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/check-repos.js +4 -4
  40. package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/create-branches.js +4 -4
  41. package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/create-worktrees.js +8 -7
  42. package/cbb/worktrees/skills/{openspec-close-worktree → cbb-worktree-init}/scripts/find-workspace-root.js +7 -7
  43. package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/install-ai.js +33 -33
  44. package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/parse-config.js +7 -7
  45. package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/push-branches.js +9 -7
  46. package/cbb/worktrees/skills/{openspec-extend-worktree → cbb-worktree-init}/scripts/push-core.js +18 -0
  47. package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/sync-repos.js +10 -12
  48. package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/update-gitignore.js +19 -6
  49. package/cbb/worktrees/skills/{openspec-push-worktrees → cbb-worktree-push}/SKILL.md +16 -16
  50. package/cbb/worktrees/skills/{openspec-push-worktrees → cbb-worktree-push}/scripts/commit-worktrees.js +2 -2
  51. package/cbb/worktrees/skills/{openspec-push-worktrees → cbb-worktree-push}/scripts/find-target-worktree.js +2 -2
  52. package/cbb/worktrees/skills/{openspec-extend-worktree → cbb-worktree-push}/scripts/find-workspace-root.js +7 -7
  53. package/cbb/worktrees/skills/{openspec-push-worktrees → cbb-worktree-push}/scripts/push-core.js +18 -0
  54. package/cbb/worktrees/skills/{openspec-push-worktrees → cbb-worktree-push}/scripts/push-worktrees.js +7 -5
  55. package/config/workspace-config.sample.json +18 -0
  56. package/config/workspaces.json +11 -6
  57. package/openspec/.version +6 -6
  58. package/openspec/commands/apply.md +7 -7
  59. package/openspec/commands/archive.md +7 -7
  60. package/openspec/commands/bulk-archive.md +7 -7
  61. package/openspec/commands/continue.md +7 -7
  62. package/openspec/commands/explore.md +7 -7
  63. package/openspec/commands/ff.md +7 -7
  64. package/openspec/commands/new.md +7 -7
  65. package/openspec/commands/onboard.md +7 -7
  66. package/openspec/commands/propose.md +7 -7
  67. package/openspec/commands/sync.md +7 -7
  68. package/openspec/commands/update.md +7 -7
  69. package/openspec/commands/verify.md +7 -7
  70. package/openspec/skills/openspec-apply-change/SKILL.md +187 -187
  71. package/openspec/skills/openspec-archive-change/SKILL.md +181 -181
  72. package/openspec/skills/openspec-bulk-archive-change/SKILL.md +338 -338
  73. package/openspec/skills/openspec-continue-change/SKILL.md +117 -117
  74. package/openspec/skills/openspec-explore/SKILL.md +342 -342
  75. package/openspec/skills/openspec-ff-change/SKILL.md +116 -116
  76. package/openspec/skills/openspec-new-change/SKILL.md +76 -76
  77. package/openspec/skills/openspec-onboard/SKILL.md +560 -560
  78. package/openspec/skills/openspec-propose/SKILL.md +162 -162
  79. package/openspec/skills/openspec-sync-specs/SKILL.md +261 -261
  80. package/openspec/skills/openspec-update-change/SKILL.md +90 -90
  81. package/openspec/skills/openspec-verify-change/SKILL.md +174 -174
  82. package/package.json +4 -3
  83. package/superpowers/.version +6 -6
  84. package/superpowers/skills/brainstorming/SKILL.md +250 -250
  85. package/superpowers/skills/brainstorming/scripts/helper.js +167 -167
  86. package/superpowers/skills/brainstorming/scripts/start-server.sh +209 -209
  87. package/superpowers/skills/brainstorming/scripts/stop-server.sh +120 -120
  88. package/superpowers/skills/brainstorming/spec-document-reviewer-prompt.md +49 -49
  89. package/superpowers/skills/brainstorming/visual-companion.md +299 -299
  90. package/superpowers/skills/dispatching-parallel-agents/SKILL.md +167 -167
  91. package/superpowers/skills/executing-plans/SKILL.md +64 -64
  92. package/superpowers/skills/finishing-a-development-branch/SKILL.md +225 -225
  93. package/superpowers/skills/receiving-code-review/SKILL.md +205 -205
  94. package/superpowers/skills/requesting-code-review/SKILL.md +95 -95
  95. package/superpowers/skills/requesting-code-review/code-reviewer.md +181 -181
  96. package/superpowers/skills/subagent-driven-development/SKILL.md +568 -568
  97. package/superpowers/skills/subagent-driven-development/implementer-prompt.md +154 -154
  98. package/superpowers/skills/subagent-driven-development/re-review-prompt.md +115 -115
  99. package/superpowers/skills/subagent-driven-development/task-reviewer-prompt.md +207 -207
  100. package/superpowers/skills/systematic-debugging/CREATION-LOG.md +119 -119
  101. package/superpowers/skills/systematic-debugging/SKILL.md +283 -283
  102. package/superpowers/skills/systematic-debugging/condition-based-waiting-example.ts +158 -158
  103. package/superpowers/skills/systematic-debugging/condition-based-waiting.md +115 -115
  104. package/superpowers/skills/systematic-debugging/defense-in-depth.md +122 -122
  105. package/superpowers/skills/systematic-debugging/find-polluter.sh +72 -72
  106. package/superpowers/skills/systematic-debugging/root-cause-tracing.md +169 -169
  107. package/superpowers/skills/systematic-debugging/test-academic.md +14 -14
  108. package/superpowers/skills/systematic-debugging/test-pressure-1.md +58 -58
  109. package/superpowers/skills/systematic-debugging/test-pressure-2.md +68 -68
  110. package/superpowers/skills/systematic-debugging/test-pressure-3.md +69 -69
  111. package/superpowers/skills/test-driven-development/SKILL.md +320 -320
  112. package/superpowers/skills/test-driven-development/writing-good-tests.md +198 -198
  113. package/superpowers/skills/using-git-worktrees/SKILL.md +167 -167
  114. package/superpowers/skills/using-superpowers/SKILL.md +63 -63
  115. package/superpowers/skills/using-superpowers/references/antigravity-tools.md +23 -23
  116. package/superpowers/skills/using-superpowers/references/codex-tools.md +108 -108
  117. package/superpowers/skills/using-superpowers/references/gemini-tools.md +63 -63
  118. package/superpowers/skills/using-superpowers/references/hermes-tools.md +56 -56
  119. package/superpowers/skills/using-superpowers/references/pi-tools.md +16 -16
  120. package/superpowers/skills/verification-before-completion/SKILL.md +120 -120
  121. package/superpowers/skills/writing-plans/SKILL.md +171 -171
  122. package/superpowers/skills/writing-plans/plan-document-reviewer-prompt.md +49 -49
  123. package/superpowers/skills/writing-skills/SKILL.md +679 -679
  124. package/superpowers/skills/writing-skills/anthropic-best-practices.md +1150 -1150
  125. package/superpowers/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -189
  126. package/superpowers/skills/writing-skills/persuasion-principles.md +187 -187
  127. package/superpowers/skills/writing-skills/render-graphs.js +169 -169
  128. package/superpowers/skills/writing-skills/testing-skills-with-subagents.md +384 -384
  129. package/cbb/worktrees/commands/extend.md +0 -65
  130. package/cbb/worktrees/skills/openspec-close-worktree/scripts/find-target-worktree.js +0 -96
  131. package/cbb/worktrees/skills/openspec-extend-worktree/SKILL.md +0 -390
  132. package/cbb/worktrees/skills/openspec-extend-worktree/scripts/check-env.js +0 -95
  133. package/cbb/worktrees/skills/openspec-extend-worktree/scripts/check-repos.js +0 -98
  134. package/cbb/worktrees/skills/openspec-extend-worktree/scripts/create-branches-and-worktrees.js +0 -135
  135. package/cbb/worktrees/skills/openspec-extend-worktree/scripts/install-ai.js +0 -150
  136. package/cbb/worktrees/skills/openspec-extend-worktree/scripts/list-available-apps.js +0 -88
  137. package/cbb/worktrees/skills/openspec-extend-worktree/scripts/sync-repos.js +0 -93
  138. package/cbb/worktrees/skills/openspec-init-worktree/scripts/find-workspace-root.js +0 -67
  139. package/cbb/worktrees/skills/openspec-init-worktree/scripts/generate-app-options.js +0 -93
  140. package/cbb/worktrees/skills/openspec-init-worktree/scripts/push-core.js +0 -136
  141. package/cbb/worktrees/skills/openspec-push-worktrees/scripts/silence-popup.js +0 -23
  142. package/config/config.sample.json +0 -16
  143. /package/cbb/worktrees/skills/{openspec-close-worktree → cbb-worktree-close}/scripts/silence-popup.js +0 -0
  144. /package/cbb/worktrees/skills/{openspec-extend-worktree → cbb-worktree-init}/scripts/silence-popup.js +0 -0
  145. /package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-push}/scripts/silence-popup.js +0 -0
@@ -1,6 +1,6 @@
1
1
  require('./silence-popup');
2
2
  /**
3
- * openspec-push-worktrees 批量 commit 所有 worktree 仓库
3
+ * cbb-worktree-push 批量 commit 所有 worktree 仓库
4
4
  *
5
5
  * 用法:
6
6
  * node commit-worktrees.js <ws_root> <branch> --message "msg" [--untracked] [--per-repo "ep-foo:m1;ep-bar:m2"] [--allow-empty] [--dry-run] [--skip-repo name]
@@ -109,7 +109,7 @@ function scanWorktreeRepos(wsRoot, branch) {
109
109
  if (!e.isDirectory() || e.name.startsWith('.')) continue;
110
110
  const appWt = path.join(wtRoot, e.name);
111
111
  if (!isGitRepo(appWt)) continue;
112
- repos.push({ name: e.name, wt: appWt, repo: path.join(wsRoot, '.code', e.name) });
112
+ repos.push({ name: e.name, wt: appWt, repo: path.join(wsRoot, '.codespace', e.name) });
113
113
  }
114
114
  return { wtRoot, repos, error: null };
115
115
  }
@@ -47,7 +47,7 @@ if (cwdMatch) {
47
47
  const worktreesDir = path.join(wsRoot, '.worktrees');
48
48
  if (!fs.existsSync(worktreesDir)) {
49
49
  console.error('❌ .worktrees 目录不存在:' + worktreesDir);
50
- console.error(' 请先执行 openspec-init-worktree 创建 worktree');
50
+ console.error(' 请先执行 cbb-worktree-init 创建 worktree');
51
51
  console.log('---');
52
52
  console.log('NO_WORKTREE');
53
53
  process.exit(2);
@@ -65,7 +65,7 @@ const entries = fs.readdirSync(worktreesDir, { withFileTypes: true })
65
65
 
66
66
  if (entries.length === 0) {
67
67
  console.error('❌ 未找到任何 worktree');
68
- console.error(' 请先执行 openspec-init-worktree 创建 worktree');
68
+ console.error(' 请先执行 cbb-worktree-init 创建 worktree');
69
69
  console.log('---');
70
70
  console.log('NO_WORKTREE');
71
71
  process.exit(2);
@@ -5,8 +5,8 @@ require('./silence-popup');
5
5
  * 唯一真源:cbb/worktrees/_shared/scripts/find-workspace-root.js
6
6
  * 由 scripts/sync-shared.js 展开到各 skill 的 scripts/ 下(init / extend / close / push)。
7
7
  *
8
- * 优先:git worktree list 第一行(主仓库根目录,不受 worktree 内 CONFIG.json 副本干扰)
9
- * 兜底:当前目录含 CONFIG.json
8
+ * 优先:git worktree list 第一行(主仓库根目录,不受 worktree 内 workspace-config.json 副本干扰)
9
+ * 兜底:当前目录含 workspace-config.json
10
10
  *
11
11
  * 退出码:
12
12
  * 0 - 定位成功,输出 WS_ROOT 绝对路径
@@ -44,19 +44,19 @@ if (worktreeList.ok) {
44
44
  }
45
45
  }
46
46
 
47
- // 兜底:当前目录含 CONFIG.json
47
+ // 兜底:当前目录含 workspace-config.json
48
48
  if (!wsRoot) {
49
49
  const cwd = process.cwd();
50
- if (fs.existsSync(path.join(cwd, 'CONFIG.json'))) {
50
+ if (fs.existsSync(path.join(cwd, 'workspace-config.json'))) {
51
51
  wsRoot = cwd;
52
52
  }
53
53
  }
54
54
 
55
55
  // 校验
56
- if (!wsRoot || !fs.existsSync(path.join(wsRoot, 'CONFIG.json'))) {
56
+ if (!wsRoot || !fs.existsSync(path.join(wsRoot, 'workspace-config.json'))) {
57
57
  console.error('❌ 未找到工作空间根目录');
58
- console.error(' 原因:git worktree list 失败且当前目录无 CONFIG.json');
59
- console.error(' 请在业务工作空间根目录(由 cbb setup 初始化、包含 CONFIG.json)下执行本技能');
58
+ console.error(' 原因:git worktree list 失败且当前目录无 workspace-config.json');
59
+ console.error(' 请在业务工作空间根目录(由 cbb setup 初始化、包含 workspace-config.json)下执行本技能');
60
60
  process.exit(1);
61
61
  }
62
62
 
@@ -12,6 +12,12 @@ require('./silence-popup');
12
12
  * - pushSingle(repoPath, repoName, branch) 推送单个仓库并建立 upstream
13
13
  * - collectRemoteMetadata(repoPath, branch, remote) 采集远程 commit 元信息
14
14
  *
15
+ * pushSingle 状态契约:
16
+ * - pushed 本次推送成功(新建分支或快进)
17
+ * - skipped 远程同名分支已存在且与本地一致 → 无需推送(幂等,重跑 init 场景)
18
+ * - remote-exists 远程同名分支存在但与本地不一致 → 需用户决策(附 metadata)
19
+ * - failed 推送失败,error 见错误码契约
20
+ *
15
21
  * 错误码契约(classifyError 输出):
16
22
  * - ssh-auth-failed Permission denied (publickey)
17
23
  * - https-auth-failed Authentication failed
@@ -115,6 +121,18 @@ function pushSingle(repoPath, repoName, branch, opts) {
115
121
  const r = remote.out.split(/\r?\n/)[0];
116
122
  const branchEsc = escapeBranch(branch);
117
123
  const remoteEsc = '"' + String(r).replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"';
124
+
125
+ // 幂等:远程同名分支已存在且 hash 与本地完全一致 → 此前已推送,直接跳过。
126
+ // 让 init-worktree 可安全重跑(补齐新增应用/中断恢复),且不会重复推送或误报 remote-exists。
127
+ const lsRemote = tryExec('git ls-remote --heads ' + remoteEsc + ' ' + escapeBranch('refs/heads/' + branch), repoPath, execImpl);
128
+ if (lsRemote.ok && lsRemote.out) {
129
+ const remoteHash = lsRemote.out.split(/\s+/)[0];
130
+ const localHash = tryExec('git rev-parse --verify ' + branchEsc, repoPath, execImpl);
131
+ if (localHash.ok && localHash.out && localHash.out === remoteHash) {
132
+ return { name: repoName, status: 'skipped', upstream: r + '/' + branch, message: '远程分支与本地一致,无需推送' };
133
+ }
134
+ }
135
+
118
136
  const pushResult = tryExec('git push -u ' + remoteEsc + ' ' + branchEsc, repoPath, execImpl);
119
137
  if (pushResult.ok) {
120
138
  return { name: repoName, status: 'pushed', upstream: r + '/' + branch };
@@ -1,6 +1,6 @@
1
1
  require('./silence-popup');
2
2
  /**
3
- * openspec-push-worktrees 推送所有 worktree 仓库
3
+ * cbb-worktree-push 推送所有 worktree 仓库
4
4
  *
5
5
  * 用法:
6
6
  * node push-worktrees.js <ws_root> <branch>
@@ -17,12 +17,12 @@ require('./silence-popup');
17
17
  * 2 - 部分或全部推送失败(AI agent 必须阻塞流程)
18
18
  *
19
19
  * 与 init-worktree/scripts/push-branches.js 的区别:
20
- * - push-branches.js 推送 workspace 主目录 + .code/<app>/(创建 worktree 时使用)
20
+ * - push-branches.js 推送 workspace 主目录 + .codespace/<app>/(创建 worktree 时使用)
21
21
  * - push-worktrees.js 推送 .worktrees/worktree-<branch>/ 下所有 worktree(开发完成时使用)
22
22
  *
23
23
  * 错误码契约复用 push-core.classifyError:
24
- * - pushed / remote-exists / failed(ssh-auth-failed / https-auth-failed / network-unreachable
25
- * / branch-protected / no-remote / non-fast-forward / unknown)
24
+ * - pushed / skipped(远程已一致)/ remote-exists / failed(ssh-auth-failed / https-auth-failed
25
+ * / network-unreachable / branch-protected / no-remote / non-fast-forward / unknown)
26
26
  */
27
27
 
28
28
  const { pushSingle } = require('./push-core');
@@ -82,7 +82,7 @@ function scanWorktreeRepos(wsRoot, branch) {
82
82
  if (e.name.startsWith('.')) continue;
83
83
  const appWt = path.join(wtRoot, e.name);
84
84
  if (!isGitRepo(appWt)) continue;
85
- repos.push({ name: e.name, wt: appWt, repo: path.join(wsRoot, '.code', e.name) });
85
+ repos.push({ name: e.name, wt: appWt, repo: path.join(wsRoot, '.codespace', e.name) });
86
86
  }
87
87
  return { wtRoot, repos, error: null };
88
88
  }
@@ -139,6 +139,8 @@ function main() {
139
139
  for (const r of results) {
140
140
  if (r.status === 'pushed') {
141
141
  console.log('✅ ' + r.name + ': 已推送 ' + r.upstream);
142
+ } else if (r.status === 'skipped') {
143
+ console.log('⏭️ ' + r.name + ': 远程分支与本地一致,跳过推送');
142
144
  } else if (r.status === 'remote-exists') {
143
145
  console.log('⚠️ ' + r.name + ': 远程分支已存在(需用户决策)');
144
146
  } else {
@@ -0,0 +1,18 @@
1
+ {
2
+ "_comment": "AI 开发工作空间配置样例(请勿修改本文件,复制为工作空间根目录的 workspace-config.json 后编辑使用)。apps 数组中每个对象需包含:name(应用名,同时作为 .codespace/ 子目录名)、repo(Git 仓库地址,支持 SSH 或 HTTPS)、side(仓库类型,'front' 表示前端工程,'back' 表示后端工程);可选 desc(该应用的职责描述,便于人与 AI 理解应用分工)。",
3
+ "apps":
4
+ [
5
+ {
6
+ "name": "ep-user-auth-app",
7
+ "repo": "git@code.example.com:team/ep-user-auth-app.git",
8
+ "side": "back",
9
+ "desc": "用户认证与授权服务:登录注册、Token 签发与校验、权限模型"
10
+ },
11
+ {
12
+ "name": "ep-user-web",
13
+ "repo": "git@code.example.com:team/ep-user-web.git",
14
+ "side": "front",
15
+ "desc": "用户中心前端:登录注册页、账号与个人信息管理界面"
16
+ }
17
+ ]
18
+ }
@@ -2,14 +2,19 @@
2
2
  "_comment": "业务空间与 GitLab 仓库映射表,由本项目维护者配置。执行 `cbb setup` 时会列出本表中的所有业务空间让用户选择,并在当前目录自动检测/拉取对应仓库,再继续安装本项目的现有能力。name 用于显示,可含中文;repo 为 `git clone` 命令接受的地址,支持 SSH(git@host:path)与 HTTPS(https://host/path)两种形式;businessLine 用于业务归类(如:直采、增值、KA 等),便于后续按业务线筛选或分组展示。",
3
3
  "workspaces": [
4
4
  {
5
- "name": "直采AI开发工作空间",
6
- "repo": "git@code.amh-group.com:yzg/ymm-ka-ai-workspace.git",
7
- "businessLine": "TMS"
5
+ "name": "江苏一港通openapi平台-AI开发工作空间",
6
+ "repo": "http://git.portjs.cn/jspg-ai/ai-workspace/jsygt-openapi-aiws.git",
7
+ "businessLine": "jsygt"
8
8
  },
9
9
  {
10
- "name": "ETC业务AI开发工作空间",
11
- "repo": "git@code.amh-group.com:etc/etc-ai-workspace.git",
12
- "businessLine": "TMS"
10
+ "name": "扬州港智能安防项目-AI开发工作空间",
11
+ "repo": "http://git.portjs.cn/jspg-ai/ai-workspace/yzg-ai-security-aiws.git",
12
+ "businessLine": "yzg-ai"
13
+ },
14
+ {
15
+ "name": "江苏港口集团数据-AI开发工作空间",
16
+ "repo": "http://git.portjs.cn/jspg-ai/ai-workspace/jspg-data-labeling-aiws.git",
17
+ "businessLine": "yzg-ai"
13
18
  }
14
19
  ]
15
20
  }
package/openspec/.version CHANGED
@@ -1,6 +1,6 @@
1
- {
2
- "sha": "9d4e5974e5c0d9a09b9c6c1e1eb0975e80ec4461",
3
- "branch": "main",
4
- "repo": "Fission-AI/OpenSpec",
5
- "updatedAt": "2026-09-12T00:00:00.000Z"
6
- }
1
+ {
2
+ "sha": "9d4e5974e5c0d9a09b9c6c1e1eb0975e80ec4461",
3
+ "branch": "main",
4
+ "repo": "Fission-AI/OpenSpec",
5
+ "updatedAt": "2026-09-12T00:00:00.000Z"
6
+ }
@@ -1,9 +1,9 @@
1
- ---
2
- name: "OPSX: Apply"
3
- description: Implement tasks from an OpenSpec change (Experimental)
4
- category: Workflow
5
- tags: [workflow, artifacts, experimental]
6
- ---
1
+ ---
2
+ name: "OPSX: Apply"
3
+ description: Implement tasks from an OpenSpec change (Experimental)
4
+ category: Workflow
5
+ tags: [workflow, artifacts, experimental]
6
+ ---
7
7
  Implement tasks from an OpenSpec change.
8
8
 
9
9
  **Store selection:** If the user names a store (a store is a standalone OpenSpec repo registered on this machine) or the work lives in one, run `openspec store list --json` to discover registered store ids, then pass `--store <id>` on the commands that read or write specs and changes (`new change`, `status`, `instructions`, `list`, `show`, `validate`, `archive`, `doctor`, `context`). Other commands do not take the flag. Hints printed by commands already carry the flag; keep it on follow-ups. Without a store, commands act on the nearest local `openspec/` root.
@@ -179,4 +179,4 @@ What would you like to do?
179
179
  This skill supports the "actions on a change" model:
180
180
 
181
181
  - **Can be invoked anytime**: Before all artifacts are done (if tasks exist), after partial implementation, interleaved with other actions
182
- - **Allows artifact updates**: If implementation reveals design issues, suggest updating artifacts - not phase-locked, work fluidly
182
+ - **Allows artifact updates**: If implementation reveals design issues, suggest updating artifacts - not phase-locked, work fluidly
@@ -1,9 +1,9 @@
1
- ---
2
- name: "OPSX: Archive"
3
- description: Archive a completed change in the experimental workflow
4
- category: Workflow
5
- tags: [workflow, archive, experimental]
6
- ---
1
+ ---
2
+ name: "OPSX: Archive"
3
+ description: Archive a completed change in the experimental workflow
4
+ category: Workflow
5
+ tags: [workflow, archive, experimental]
6
+ ---
7
7
  Archive a completed change in the experimental workflow.
8
8
 
9
9
  **Store selection:** If the user names a store (a store is a standalone OpenSpec repo registered on this machine) or the work lives in one, run `openspec store list --json` to discover registered store ids, then pass `--store <id>` on the commands that read or write specs and changes (`new change`, `status`, `instructions`, `list`, `show`, `validate`, `archive`, `doctor`, `context`). Other commands do not take the flag. Hints printed by commands already carry the flag; keep it on follow-ups. Without a store, commands act on the nearest local `openspec/` root.
@@ -220,4 +220,4 @@ Target archive directory already exists.
220
220
  - Consider every guidance entry and explain any inapplicable or conflicting advice
221
221
  - Existing CLI checks, resolved paths, prompts, and command contracts are unchanged
222
222
  - Artifact rules constrain only the specs being written and are never operation guidance
223
- - Never copy runtime context, operation guidance, or artifact-rule text verbatim into output files
223
+ - Never copy runtime context, operation guidance, or artifact-rule text verbatim into output files
@@ -1,9 +1,9 @@
1
- ---
2
- name: "OPSX: Bulk Archive"
3
- description: Archive multiple completed changes at once
4
- category: Workflow
5
- tags: [workflow, archive, experimental, bulk]
6
- ---
1
+ ---
2
+ name: "OPSX: Bulk Archive"
3
+ description: Archive multiple completed changes at once
4
+ category: Workflow
5
+ tags: [workflow, archive, experimental, bulk]
6
+ ---
7
7
  Archive multiple completed changes in a single operation.
8
8
 
9
9
  This skill allows you to batch-archive changes, handling spec conflicts intelligently by checking the codebase to determine what's actually implemented.
@@ -331,4 +331,4 @@ No active changes found. Create a new change to get started.
331
331
  - Operation guidance remains advisory; consider every entry and explain rejected advice
332
332
  - Keep runtime inputs, conflict analysis, CLI-derived values, and artifact rules separate
333
333
  - Artifact rules constrain only written specs
334
- - Never copy runtime input or artifact-rule text verbatim into output files
334
+ - Never copy runtime input or artifact-rule text verbatim into output files
@@ -1,9 +1,9 @@
1
- ---
2
- name: "OPSX: Continue"
3
- description: Continue working on a change - create the next artifact (Experimental)
4
- category: Workflow
5
- tags: [workflow, artifacts, experimental]
6
- ---
1
+ ---
2
+ name: "OPSX: Continue"
3
+ description: Continue working on a change - create the next artifact (Experimental)
4
+ category: Workflow
5
+ tags: [workflow, artifacts, experimental]
6
+ ---
7
7
  Continue working on a change by creating the next artifact.
8
8
 
9
9
  **Store selection:** If the user names a store (a store is a standalone OpenSpec repo registered on this machine) or the work lives in one, run `openspec store list --json` to discover registered store ids, then pass `--store <id>` on the commands that read or write specs and changes (`new change`, `status`, `instructions`, `list`, `show`, `validate`, `archive`, `doctor`, `context`). Other commands do not take the flag. Hints printed by commands already carry the flag; keep it on follow-ups. Without a store, commands act on the nearest local `openspec/` root.
@@ -109,4 +109,4 @@ If the `instruction` field directs you to use a specific skill or command to cre
109
109
  - Use the schema's artifact sequence, don't assume specific artifact names
110
110
  - **IMPORTANT**: `context` and `rules` are constraints for YOU, not content for the file
111
111
  - Do NOT copy `<context>`, `<rules>`, `<project_context>` blocks into the artifact
112
- - These guide what you write, but should never appear in the output
112
+ - These guide what you write, but should never appear in the output
@@ -1,9 +1,9 @@
1
- ---
2
- name: "OPSX: Explore"
3
- description: Enter explore mode - think through ideas, investigate problems, clarify requirements
4
- category: Workflow
5
- tags: [workflow, explore, experimental, thinking]
6
- ---
1
+ ---
2
+ name: "OPSX: Explore"
3
+ description: Enter explore mode - think through ideas, investigate problems, clarify requirements
4
+ category: Workflow
5
+ tags: [workflow, explore, experimental, thinking]
6
+ ---
7
7
  Enter explore mode. Think deeply. Visualize freely. Follow the conversation wherever it goes.
8
8
 
9
9
  **IMPORTANT: Explore mode is for thinking, not implementing.** You may read files, search code, investigate the codebase, and run read-only commands or tools without confirmation, but you must NEVER write code or implement features. If the user asks you to implement something, remind them to exit explore mode first and create a change proposal. You MAY create or update OpenSpec change artifacts (proposals, designs, specs) within a confirmed scope—that's capturing thinking, not implementing. Answering design or clarifying questions is never consent to write. Before the first write-capable action, name the artifacts or files you would change and what you would do, ask a direct yes/no question, and wait for the user's confirmation in a separate message. Confirmation covers only the scope you described; ask again before expanding it. For a new change, scaffold it first as described below.
@@ -203,4 +203,4 @@ When things crystallize, you might offer a summary - but it's optional. Sometime
203
203
  - **Don't manually scaffold changes** - Never create a new change directory under `openspec/changes/` by hand. Always use `openspec new change "<name>"` (with `--store <id>` when applicable) so required metadata such as `.openspec.yaml` is created before writing artifacts.
204
204
  - **Do visualize** - A good diagram is worth many paragraphs
205
205
  - **Do explore the codebase** - Ground discussions in reality
206
- - **Do question assumptions** - Including the user's and your own
206
+ - **Do question assumptions** - Including the user's and your own
@@ -1,9 +1,9 @@
1
- ---
2
- name: "OPSX: Fast Forward"
3
- description: Create a change and generate all artifacts needed for implementation in one go
4
- category: Workflow
5
- tags: [workflow, artifacts, experimental]
6
- ---
1
+ ---
2
+ name: "OPSX: Fast Forward"
3
+ description: Create a change and generate all artifacts needed for implementation in one go
4
+ category: Workflow
5
+ tags: [workflow, artifacts, experimental]
6
+ ---
7
7
  Fast-forward through artifact creation - generate everything needed to start implementation.
8
8
 
9
9
  **Store selection:** If the user names a store (a store is a standalone OpenSpec repo registered on this machine) or the work lives in one, run `openspec store list --json` to discover registered store ids, then pass `--store <id>` on the commands that read or write specs and changes (`new change`, `status`, `instructions`, `list`, `show`, `validate`, `archive`, `doctor`, `context`). Other commands do not take the flag. Hints printed by commands already carry the flag; keep it on follow-ups. Without a store, commands act on the nearest local `openspec/` root.
@@ -108,4 +108,4 @@ After completing all artifacts, summarize:
108
108
  - Always read dependency artifacts before creating a new one - re-read from disk, not from conversation memory (files may have changed since you last saw them)
109
109
  - If context is critically unclear, ask the user - but prefer making reasonable decisions to keep momentum
110
110
  - If a change with that name already exists, ask if user wants to continue it or create a new one
111
- - Verify each artifact file exists after writing before proceeding to next
111
+ - Verify each artifact file exists after writing before proceeding to next
@@ -1,9 +1,9 @@
1
- ---
2
- name: "OPSX: New"
3
- description: Start a new change using the experimental artifact workflow (OPSX)
4
- category: Workflow
5
- tags: [workflow, artifacts, experimental]
6
- ---
1
+ ---
2
+ name: "OPSX: New"
3
+ description: Start a new change using the experimental artifact workflow (OPSX)
4
+ category: Workflow
5
+ tags: [workflow, artifacts, experimental]
6
+ ---
7
7
  Start a new change using the experimental artifact-driven approach.
8
8
 
9
9
  **Store selection:** If the user names a store (a store is a standalone OpenSpec repo registered on this machine) or the work lives in one, run `openspec store list --json` to discover registered store ids, then pass `--store <id>` on the commands that read or write specs and changes (`new change`, `status`, `instructions`, `list`, `show`, `validate`, `archive`, `doctor`, `context`). Other commands do not take the flag. Hints printed by commands already carry the flag; keep it on follow-ups. Without a store, commands act on the nearest local `openspec/` root.
@@ -67,4 +67,4 @@ After completing the steps, summarize:
67
67
  - Do NOT advance beyond showing the first artifact template
68
68
  - If the name is invalid (not kebab-case), ask for a valid name
69
69
  - If a change with that name already exists, suggest using `/opsx:continue` instead
70
- - Pass --schema if using a non-default workflow
70
+ - Pass --schema if using a non-default workflow
@@ -1,9 +1,9 @@
1
- ---
2
- name: "OPSX: Onboard"
3
- description: Guided onboarding - walk through a complete OpenSpec workflow cycle with narration
4
- category: Workflow
5
- tags: [workflow, onboarding, tutorial, learning]
6
- ---
1
+ ---
2
+ name: "OPSX: Onboard"
3
+ description: Guided onboarding - walk through a complete OpenSpec workflow cycle with narration
4
+ category: Workflow
5
+ tags: [workflow, onboarding, tutorial, learning]
6
+ ---
7
7
  Guide the user through their first complete OpenSpec workflow cycle. This is a teaching experience—you'll do real work in their codebase while explaining each step.
8
8
 
9
9
  **Store selection:** If the user names a store (a store is a standalone OpenSpec repo registered on this machine) or the work lives in one, run `openspec store list --json` to discover registered store ids, then pass `--store <id>` on the commands that read or write specs and changes (`new change`, `status`, `instructions`, `list`, `show`, `validate`, `archive`, `doctor`, `context`). Other commands do not take the flag. Hints printed by commands already carry the flag; keep it on follow-ups. Without a store, commands act on the nearest local `openspec/` root.
@@ -552,4 +552,4 @@ Exit gracefully.
552
552
  - **Pause for acknowledgment** at marked points, but don't over-pause
553
553
  - **Handle exits gracefully**—never pressure the user to continue
554
554
  - **Use real codebase tasks**—don't simulate or use fake examples
555
- - **Adjust scope gently**—guide toward smaller tasks but respect user choice
555
+ - **Adjust scope gently**—guide toward smaller tasks but respect user choice
@@ -1,9 +1,9 @@
1
- ---
2
- name: "OPSX: Propose"
3
- description: Propose a new change - create it and generate all artifacts in one step
4
- category: Workflow
5
- tags: [workflow, artifacts, experimental]
6
- ---
1
+ ---
2
+ name: "OPSX: Propose"
3
+ description: Propose a new change - create it and generate all artifacts in one step
4
+ category: Workflow
5
+ tags: [workflow, artifacts, experimental]
6
+ ---
7
7
  Propose a new change - create the change and generate all artifacts in one step.
8
8
 
9
9
  **Planning boundary**: This workflow creates planning artifacts only. The user request that selected or triggered this workflow authorizes planning only, even if it asks to build or fix something. Do not edit project code. After the planning artifacts are complete, stop. Do not start implementation in the same response, even if the initial request asks for it. Wait for a new user request after the artifacts are presented; then start the apply workflow.
@@ -154,4 +154,4 @@ After completing all artifacts, summarize:
154
154
  - Always read dependency artifacts before creating a new one - re-read from disk, not from conversation memory (files may have changed since you last saw them)
155
155
  - Ask about ambiguities that would materially change scope, externally observable behavior, compatibility, or acceptance criteria; for minor details, make reasonable assumptions and record them
156
156
  - If a change with that name already exists, ask if user wants to continue it or create a new one
157
- - Verify each artifact file exists after writing before proceeding to next
157
+ - Verify each artifact file exists after writing before proceeding to next
@@ -1,9 +1,9 @@
1
- ---
2
- name: "OPSX: Sync"
3
- description: Sync delta specs from a change to main specs
4
- category: Workflow
5
- tags: [workflow, specs, experimental]
6
- ---
1
+ ---
2
+ name: "OPSX: Sync"
3
+ description: Sync delta specs from a change to main specs
4
+ category: Workflow
5
+ tags: [workflow, specs, experimental]
6
+ ---
7
7
  Sync delta specs from a change to main specs.
8
8
 
9
9
  This is an **agent-driven** operation - you will read delta specs and directly edit main specs to apply the changes. This allows intelligent merging (e.g., adding a scenario without copying the entire requirement).
@@ -253,4 +253,4 @@ Main specs are now updated. The change remains active - archive when implementat
253
253
  - Honor a caller-supplied subset of `existingOutputPaths`; never widen it back to the full list
254
254
  - Fetch specs instructions once for direct sync, or reuse the archive-supplied snapshot inline
255
255
  - Stop before every main-spec write on a non-zero or invalid JSON specs-instruction response
256
- - Artifact rules constrain only the specs being written and are never copied into output files
256
+ - Artifact rules constrain only the specs being written and are never copied into output files
@@ -1,9 +1,9 @@
1
- ---
2
- name: "OPSX: Update"
3
- description:
4
- category: Workflow
5
- tags: [workflow, artifacts, experimental]
6
- ---
1
+ ---
2
+ name: "OPSX: Update"
3
+ description:
4
+ category: Workflow
5
+ tags: [workflow, artifacts, experimental]
6
+ ---
7
7
  Revise a change's existing planning artifacts and keep them coherent. Never edit code.
8
8
 
9
9
  **Store selection:** If the user names a store (a store is a standalone OpenSpec repo registered on this machine) or the work lives in one, run `openspec store list --json` to discover registered store ids, then pass `--store <id>` on the commands that read or write specs and changes (`new change`, `status`, `instructions`, `list`, `show`, `validate`, `archive`, `doctor`, `context`). Other commands do not take the flag. Hints printed by commands already carry the flag; keep it on follow-ups. Without a store, commands act on the nearest local `openspec/` root.
@@ -82,4 +82,4 @@ After each invocation, show:
82
82
  - Edit only the concrete files in `existingOutputPaths`; never write to a glob `resolvedOutputPath`.
83
83
  - Do not advance the build frontier: no new artifacts, no new files under glob artifacts - that is `/opsx:continue`'s job.
84
84
  - Confirm every edit with the user before writing.
85
- - If the request changes the change's *intent* rather than refining it, first verify whether the optional `/opsx:new` workflow is available. If it is, recommend starting fresh with `/opsx:new` (the "Update vs. Start Fresh" heuristic). If it is unavailable, ask for a distinct unused change name and recommend `openspec new change "<new-change-name>"` instead.
85
+ - If the request changes the change's *intent* rather than refining it, first verify whether the optional `/opsx:new` workflow is available. If it is, recommend starting fresh with `/opsx:new` (the "Update vs. Start Fresh" heuristic). If it is unavailable, ask for a distinct unused change name and recommend `openspec new change "<new-change-name>"` instead.
@@ -1,9 +1,9 @@
1
- ---
2
- name: "OPSX: Verify"
3
- description: Verify implementation matches change artifacts before archiving
4
- category: Workflow
5
- tags: [workflow, verify, experimental]
6
- ---
1
+ ---
2
+ name: "OPSX: Verify"
3
+ description: Verify implementation matches change artifacts before archiving
4
+ category: Workflow
5
+ tags: [workflow, verify, experimental]
6
+ ---
7
7
  Verify that an implementation matches the change artifacts (specs, tasks, design).
8
8
 
9
9
  **Store selection:** If the user names a store (a store is a standalone OpenSpec repo registered on this machine) or the work lives in one, run `openspec store list --json` to discover registered store ids, then pass `--store <id>` on the commands that read or write specs and changes (`new change`, `status`, `instructions`, `list`, `show`, `validate`, `archive`, `doctor`, `context`). Other commands do not take the flag. Hints printed by commands already carry the flag; keep it on follow-ups. Without a store, commands act on the nearest local `openspec/` root.
@@ -166,4 +166,4 @@ Use clear markdown with:
166
166
  - Grouped lists for issues (CRITICAL/WARNING/SUGGESTION)
167
167
  - Code references in format: `file.ts:123`
168
168
  - Specific, actionable recommendations
169
- - No vague suggestions like "consider reviewing"
169
+ - No vague suggestions like "consider reviewing"