@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.
- package/cbb/bin/cbb.js +6 -0
- package/cbb/bin/cbbm.js +6 -0
- package/cbb/dev-standards/rules/cbb-ai-behavior.md +103 -103
- package/cbb/dev-standards/rules/cbb-priority.md +55 -55
- package/cbb/lib/install/claude-code.js +2 -0
- package/cbb/lib/install/init.js +496 -290
- package/cbb/lib/install/opencode.js +31 -0
- package/cbb/lib/install/qoder.js +2 -0
- package/cbb/lib/install/workspaces.js +53 -13
- package/cbb/lib/openspec/index.js +3 -3
- package/cbb/lib/superpowers/index.js +1 -1
- package/cbb/lib/utils/check-update.js +16 -14
- package/cbb/lib/utils/gitignore.js +2 -1
- package/cbb/lib/utils/output.js +92 -4
- package/cbb/lib/utils/version.js +2 -31
- package/cbb/lib/wiki/cli.js +25 -25
- package/cbb/lib/wiki/index.js +16 -16
- package/cbb/tools/cbb-design-to-wiki/SKILL.md +14 -14
- package/cbb/tools/cbb-wiki-ops/SKILL.md +22 -22
- package/cbb/worktrees/_shared/scripts/find-target-worktree.js +2 -2
- package/cbb/worktrees/_shared/scripts/find-workspace-root.js +7 -7
- package/cbb/worktrees/_shared/scripts/push-core.js +18 -0
- package/cbb/worktrees/commands/{close.md → worktree-close.md} +8 -8
- package/cbb/worktrees/commands/{init.md → worktree-init.md} +9 -9
- package/cbb/worktrees/commands/{push.md → worktree-push.md} +3 -3
- package/cbb/worktrees/skills/{openspec-close-worktree → cbb-worktree-close}/SKILL.md +20 -20
- package/cbb/worktrees/skills/{openspec-close-worktree → cbb-worktree-close}/scripts/check-env.js +4 -4
- package/cbb/worktrees/skills/{openspec-close-worktree → cbb-worktree-close}/scripts/check-unarchived.js +1 -1
- package/cbb/worktrees/skills/{openspec-close-worktree → cbb-worktree-close}/scripts/delete-branches.js +3 -3
- package/cbb/worktrees/skills/{openspec-close-worktree → cbb-worktree-close}/scripts/discover-apps.js +6 -6
- package/cbb/worktrees/skills/{openspec-extend-worktree → cbb-worktree-close}/scripts/find-target-worktree.js +2 -2
- package/cbb/worktrees/skills/{openspec-push-worktrees → cbb-worktree-close}/scripts/find-workspace-root.js +7 -7
- package/cbb/worktrees/skills/{openspec-close-worktree → cbb-worktree-close}/scripts/remove-worktrees.js +4 -4
- package/cbb/worktrees/skills/{openspec-close-worktree → cbb-worktree-close}/scripts/safety-check.js +4 -4
- package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/SKILL.md +81 -107
- package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/auto-open.js +1 -1
- package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/check-env-deep.js +4 -4
- package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/check-env.js +6 -6
- package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/check-repos.js +4 -4
- package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/create-branches.js +4 -4
- package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/create-worktrees.js +8 -7
- package/cbb/worktrees/skills/{openspec-close-worktree → cbb-worktree-init}/scripts/find-workspace-root.js +7 -7
- package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/install-ai.js +33 -33
- package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/parse-config.js +7 -7
- package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/push-branches.js +9 -7
- package/cbb/worktrees/skills/{openspec-extend-worktree → cbb-worktree-init}/scripts/push-core.js +18 -0
- package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/sync-repos.js +10 -12
- package/cbb/worktrees/skills/{openspec-init-worktree → cbb-worktree-init}/scripts/update-gitignore.js +19 -6
- package/cbb/worktrees/skills/{openspec-push-worktrees → cbb-worktree-push}/SKILL.md +16 -16
- package/cbb/worktrees/skills/{openspec-push-worktrees → cbb-worktree-push}/scripts/commit-worktrees.js +2 -2
- package/cbb/worktrees/skills/{openspec-push-worktrees → cbb-worktree-push}/scripts/find-target-worktree.js +2 -2
- package/cbb/worktrees/skills/{openspec-extend-worktree → cbb-worktree-push}/scripts/find-workspace-root.js +7 -7
- package/cbb/worktrees/skills/{openspec-push-worktrees → cbb-worktree-push}/scripts/push-core.js +18 -0
- package/cbb/worktrees/skills/{openspec-push-worktrees → cbb-worktree-push}/scripts/push-worktrees.js +7 -5
- package/config/workspace-config.sample.json +18 -0
- package/config/workspaces.json +11 -6
- package/openspec/.version +6 -6
- package/openspec/commands/apply.md +7 -7
- package/openspec/commands/archive.md +7 -7
- package/openspec/commands/bulk-archive.md +7 -7
- package/openspec/commands/continue.md +7 -7
- package/openspec/commands/explore.md +7 -7
- package/openspec/commands/ff.md +7 -7
- package/openspec/commands/new.md +7 -7
- package/openspec/commands/onboard.md +7 -7
- package/openspec/commands/propose.md +7 -7
- package/openspec/commands/sync.md +7 -7
- package/openspec/commands/update.md +7 -7
- package/openspec/commands/verify.md +7 -7
- package/openspec/skills/openspec-apply-change/SKILL.md +187 -187
- package/openspec/skills/openspec-archive-change/SKILL.md +181 -181
- package/openspec/skills/openspec-bulk-archive-change/SKILL.md +338 -338
- package/openspec/skills/openspec-continue-change/SKILL.md +117 -117
- package/openspec/skills/openspec-explore/SKILL.md +342 -342
- package/openspec/skills/openspec-ff-change/SKILL.md +116 -116
- package/openspec/skills/openspec-new-change/SKILL.md +76 -76
- package/openspec/skills/openspec-onboard/SKILL.md +560 -560
- package/openspec/skills/openspec-propose/SKILL.md +162 -162
- package/openspec/skills/openspec-sync-specs/SKILL.md +261 -261
- package/openspec/skills/openspec-update-change/SKILL.md +90 -90
- package/openspec/skills/openspec-verify-change/SKILL.md +174 -174
- package/package.json +4 -3
- package/superpowers/.version +6 -6
- package/superpowers/skills/brainstorming/SKILL.md +250 -250
- package/superpowers/skills/brainstorming/scripts/helper.js +167 -167
- package/superpowers/skills/brainstorming/scripts/start-server.sh +209 -209
- package/superpowers/skills/brainstorming/scripts/stop-server.sh +120 -120
- package/superpowers/skills/brainstorming/spec-document-reviewer-prompt.md +49 -49
- package/superpowers/skills/brainstorming/visual-companion.md +299 -299
- package/superpowers/skills/dispatching-parallel-agents/SKILL.md +167 -167
- package/superpowers/skills/executing-plans/SKILL.md +64 -64
- package/superpowers/skills/finishing-a-development-branch/SKILL.md +225 -225
- package/superpowers/skills/receiving-code-review/SKILL.md +205 -205
- package/superpowers/skills/requesting-code-review/SKILL.md +95 -95
- package/superpowers/skills/requesting-code-review/code-reviewer.md +181 -181
- package/superpowers/skills/subagent-driven-development/SKILL.md +568 -568
- package/superpowers/skills/subagent-driven-development/implementer-prompt.md +154 -154
- package/superpowers/skills/subagent-driven-development/re-review-prompt.md +115 -115
- package/superpowers/skills/subagent-driven-development/task-reviewer-prompt.md +207 -207
- package/superpowers/skills/systematic-debugging/CREATION-LOG.md +119 -119
- package/superpowers/skills/systematic-debugging/SKILL.md +283 -283
- package/superpowers/skills/systematic-debugging/condition-based-waiting-example.ts +158 -158
- package/superpowers/skills/systematic-debugging/condition-based-waiting.md +115 -115
- package/superpowers/skills/systematic-debugging/defense-in-depth.md +122 -122
- package/superpowers/skills/systematic-debugging/find-polluter.sh +72 -72
- package/superpowers/skills/systematic-debugging/root-cause-tracing.md +169 -169
- package/superpowers/skills/systematic-debugging/test-academic.md +14 -14
- package/superpowers/skills/systematic-debugging/test-pressure-1.md +58 -58
- package/superpowers/skills/systematic-debugging/test-pressure-2.md +68 -68
- package/superpowers/skills/systematic-debugging/test-pressure-3.md +69 -69
- package/superpowers/skills/test-driven-development/SKILL.md +320 -320
- package/superpowers/skills/test-driven-development/writing-good-tests.md +198 -198
- package/superpowers/skills/using-git-worktrees/SKILL.md +167 -167
- package/superpowers/skills/using-superpowers/SKILL.md +63 -63
- package/superpowers/skills/using-superpowers/references/antigravity-tools.md +23 -23
- package/superpowers/skills/using-superpowers/references/codex-tools.md +108 -108
- package/superpowers/skills/using-superpowers/references/gemini-tools.md +63 -63
- package/superpowers/skills/using-superpowers/references/hermes-tools.md +56 -56
- package/superpowers/skills/using-superpowers/references/pi-tools.md +16 -16
- package/superpowers/skills/verification-before-completion/SKILL.md +120 -120
- package/superpowers/skills/writing-plans/SKILL.md +171 -171
- package/superpowers/skills/writing-plans/plan-document-reviewer-prompt.md +49 -49
- package/superpowers/skills/writing-skills/SKILL.md +679 -679
- package/superpowers/skills/writing-skills/anthropic-best-practices.md +1150 -1150
- package/superpowers/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -189
- package/superpowers/skills/writing-skills/persuasion-principles.md +187 -187
- package/superpowers/skills/writing-skills/render-graphs.js +169 -169
- package/superpowers/skills/writing-skills/testing-skills-with-subagents.md +384 -384
- package/cbb/worktrees/commands/extend.md +0 -65
- package/cbb/worktrees/skills/openspec-close-worktree/scripts/find-target-worktree.js +0 -96
- package/cbb/worktrees/skills/openspec-extend-worktree/SKILL.md +0 -390
- package/cbb/worktrees/skills/openspec-extend-worktree/scripts/check-env.js +0 -95
- package/cbb/worktrees/skills/openspec-extend-worktree/scripts/check-repos.js +0 -98
- package/cbb/worktrees/skills/openspec-extend-worktree/scripts/create-branches-and-worktrees.js +0 -135
- package/cbb/worktrees/skills/openspec-extend-worktree/scripts/install-ai.js +0 -150
- package/cbb/worktrees/skills/openspec-extend-worktree/scripts/list-available-apps.js +0 -88
- package/cbb/worktrees/skills/openspec-extend-worktree/scripts/sync-repos.js +0 -93
- package/cbb/worktrees/skills/openspec-init-worktree/scripts/find-workspace-root.js +0 -67
- package/cbb/worktrees/skills/openspec-init-worktree/scripts/generate-app-options.js +0 -93
- package/cbb/worktrees/skills/openspec-init-worktree/scripts/push-core.js +0 -136
- package/cbb/worktrees/skills/openspec-push-worktrees/scripts/silence-popup.js +0 -23
- package/config/config.sample.json +0 -16
- /package/cbb/worktrees/skills/{openspec-close-worktree → cbb-worktree-close}/scripts/silence-popup.js +0 -0
- /package/cbb/worktrees/skills/{openspec-extend-worktree → cbb-worktree-init}/scripts/silence-popup.js +0 -0
- /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
|
-
*
|
|
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, '.
|
|
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(' 请先执行
|
|
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(' 请先执行
|
|
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 内
|
|
9
|
-
* 兜底:当前目录含
|
|
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
|
-
// 兜底:当前目录含
|
|
47
|
+
// 兜底:当前目录含 workspace-config.json
|
|
48
48
|
if (!wsRoot) {
|
|
49
49
|
const cwd = process.cwd();
|
|
50
|
-
if (fs.existsSync(path.join(cwd, '
|
|
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, '
|
|
56
|
+
if (!wsRoot || !fs.existsSync(path.join(wsRoot, 'workspace-config.json'))) {
|
|
57
57
|
console.error('❌ 未找到工作空间根目录');
|
|
58
|
-
console.error(' 原因:git worktree list 失败且当前目录无
|
|
59
|
-
console.error(' 请在业务工作空间根目录(由 cbb setup 初始化、包含
|
|
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
|
|
package/cbb/worktrees/skills/{openspec-push-worktrees → cbb-worktree-push}/scripts/push-core.js
RENAMED
|
@@ -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 };
|
package/cbb/worktrees/skills/{openspec-push-worktrees → cbb-worktree-push}/scripts/push-worktrees.js
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require('./silence-popup');
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
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 主目录 + .
|
|
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
|
|
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, '.
|
|
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
|
+
}
|
package/config/workspaces.json
CHANGED
|
@@ -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": "
|
|
6
|
-
"repo": "git
|
|
7
|
-
"businessLine": "
|
|
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": "
|
|
11
|
-
"repo": "git
|
|
12
|
-
"businessLine": "
|
|
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
|
package/openspec/commands/ff.md
CHANGED
|
@@ -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
|
package/openspec/commands/new.md
CHANGED
|
@@ -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"
|