@shgroup/opencode-serenity-plugin 0.3.3 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +98 -78
- package/dist/activation.d.ts.map +1 -1
- package/dist/activation.js +26 -1
- package/dist/activation.js.map +1 -1
- package/dist/config-schema.d.ts +2 -1
- package/dist/config-schema.d.ts.map +1 -1
- package/dist/config-schema.js +1 -0
- package/dist/config-schema.js.map +1 -1
- package/dist/fs/file-system-tool.d.ts.map +1 -1
- package/dist/fs/file-system-tool.js +4 -0
- package/dist/fs/file-system-tool.js.map +1 -1
- package/dist/git/cc-git-tool.d.ts +19 -0
- package/dist/git/cc-git-tool.d.ts.map +1 -0
- package/dist/git/cc-git-tool.js +170 -0
- package/dist/git/cc-git-tool.js.map +1 -0
- package/dist/git/index.d.ts +2 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +2 -0
- package/dist/git/index.js.map +1 -0
- package/dist/hooks/compacting.d.ts.map +1 -1
- package/dist/hooks/compacting.js +38 -1
- package/dist/hooks/compacting.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/init/init-wizard.d.ts +19 -13
- package/dist/init/init-wizard.d.ts.map +1 -1
- package/dist/init/init-wizard.js +247 -123
- package/dist/init/init-wizard.js.map +1 -1
- package/dist/session/session-tool.d.ts.map +1 -1
- package/dist/session/session-tool.js +16 -8
- package/dist/session/session-tool.js.map +1 -1
- package/dist/skills/template-loader.d.ts +3 -1
- package/dist/skills/template-loader.d.ts.map +1 -1
- package/dist/skills/template-loader.js +6 -5
- package/dist/skills/template-loader.js.map +1 -1
- package/dist/state.d.ts +2 -0
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +6 -0
- package/dist/state.js.map +1 -1
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cc-git-tool.ts — CCC git 管理工具(ACC 内置 tool)
|
|
3
|
+
*
|
|
4
|
+
* 提供无 bash 依赖的 git 操作,覆盖最频繁的无风险操作。
|
|
5
|
+
* pull/merge/rebase/conflict resolution 不 Mech 化 — Agent 协调 + bash 人工决策。
|
|
6
|
+
*
|
|
7
|
+
* 子命令:
|
|
8
|
+
* status — git status --porcelain(返回 JSON)
|
|
9
|
+
* commit — git add -A && git commit -m <msg>
|
|
10
|
+
* push — git push origin <current-branch>
|
|
11
|
+
* log — git log --oneline [-n <count>]
|
|
12
|
+
*
|
|
13
|
+
* 冲突约定(设计文档 §8.4):
|
|
14
|
+
* - push 被 non-fast-forward 拒绝时输出 [REJECTED] + 操作建议
|
|
15
|
+
* - push 成功时输出简洁摘要
|
|
16
|
+
*/
|
|
17
|
+
import { execFileSync } from 'node:child_process';
|
|
18
|
+
import { tool } from '@opencode-ai/plugin';
|
|
19
|
+
import { z } from 'zod';
|
|
20
|
+
import { findSerenityRoot } from '../fs/resolve-path.js';
|
|
21
|
+
import pkg from '../../package.json' with { type: 'json' };
|
|
22
|
+
const VERSION = pkg.version;
|
|
23
|
+
const SUBCOMMANDS = ['status', 'commit', 'push', 'log'];
|
|
24
|
+
// ── 内部 helper ──
|
|
25
|
+
function execGit(args, cwd) {
|
|
26
|
+
try {
|
|
27
|
+
const stdout = execFileSync('git', args, {
|
|
28
|
+
cwd,
|
|
29
|
+
encoding: 'utf8',
|
|
30
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
31
|
+
maxBuffer: 1024 * 1024, // 1MB
|
|
32
|
+
});
|
|
33
|
+
return { stdout: stdout.trimEnd(), stderr: '' };
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
const stderr = err.stderr?.toString() || '';
|
|
37
|
+
const stdout = err.stdout?.toString() || '';
|
|
38
|
+
return { stdout: stdout.trimEnd(), stderr: stderr.trimEnd() };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function getCurrentBranch(root) {
|
|
42
|
+
const { stdout } = execGit(['rev-parse', '--abbrev-ref', 'HEAD'], root);
|
|
43
|
+
if (!stdout)
|
|
44
|
+
throw new Error('cc-git: cannot determine current branch');
|
|
45
|
+
return stdout;
|
|
46
|
+
}
|
|
47
|
+
function hasChanges(root) {
|
|
48
|
+
const { stdout } = execGit(['status', '--porcelain'], root);
|
|
49
|
+
return stdout.length > 0;
|
|
50
|
+
}
|
|
51
|
+
function hasRemote(root) {
|
|
52
|
+
const { stdout } = execGit(['remote'], root);
|
|
53
|
+
return stdout.length > 0;
|
|
54
|
+
}
|
|
55
|
+
// ── Tool 定义 ──
|
|
56
|
+
export const ccGitTool = tool({
|
|
57
|
+
description: `Serenity git utility (v${VERSION}). ` +
|
|
58
|
+
`Git operations for the CCC (Concrete Cognitive Container). ` +
|
|
59
|
+
`Subcommands: status (porcelain status), commit (git add -A + commit), push (push to origin), log (oneline history). ` +
|
|
60
|
+
`Use this for git operations when bash is not available. ` +
|
|
61
|
+
`Conflict resolution is NOT automated — use bash for merges and rebases.`,
|
|
62
|
+
args: {
|
|
63
|
+
subcommand: z
|
|
64
|
+
.enum(SUBCOMMANDS)
|
|
65
|
+
.describe('Operation: status (git status --porcelain), ' +
|
|
66
|
+
'commit (git add -A + commit -m <msg>), ' +
|
|
67
|
+
'push (git push origin HEAD), ' +
|
|
68
|
+
'log (git log --oneline)'),
|
|
69
|
+
message: z
|
|
70
|
+
.string()
|
|
71
|
+
.optional()
|
|
72
|
+
.describe('Commit message (required for commit subcommand)'),
|
|
73
|
+
n: z
|
|
74
|
+
.number()
|
|
75
|
+
.int()
|
|
76
|
+
.min(1)
|
|
77
|
+
.max(100)
|
|
78
|
+
.optional()
|
|
79
|
+
.default(10)
|
|
80
|
+
.describe('Number of commits for log subcommand (default: 10, max: 100)'),
|
|
81
|
+
},
|
|
82
|
+
execute: async (input, ctx) => {
|
|
83
|
+
const root = findSerenityRoot(ctx.directory);
|
|
84
|
+
const sub = input.subcommand;
|
|
85
|
+
// ── status ──
|
|
86
|
+
if (sub === 'status') {
|
|
87
|
+
const { stdout } = execGit(['status', '--porcelain'], root);
|
|
88
|
+
// Parse porcelain output
|
|
89
|
+
const lines = stdout ? stdout.split('\n') : [];
|
|
90
|
+
const entries = lines.map((line) => {
|
|
91
|
+
// porcelain format: XY filename (X=staging, Y=worktree)
|
|
92
|
+
const status = line.slice(0, 2).trim() || '??';
|
|
93
|
+
const file = line.slice(3);
|
|
94
|
+
return { status, file };
|
|
95
|
+
});
|
|
96
|
+
return JSON.stringify({
|
|
97
|
+
clean: entries.length === 0,
|
|
98
|
+
files: entries,
|
|
99
|
+
summary: entries.length === 0 ? '(clean)' : `${entries.length} file(s) with changes`,
|
|
100
|
+
}, null, 2);
|
|
101
|
+
}
|
|
102
|
+
// ── commit ──
|
|
103
|
+
if (sub === 'commit') {
|
|
104
|
+
if (!input.message || input.message.trim() === '') {
|
|
105
|
+
throw new Error('cc-git commit: missing required arg "message"');
|
|
106
|
+
}
|
|
107
|
+
if (!hasChanges(root)) {
|
|
108
|
+
return '(nothing to commit — working tree clean)';
|
|
109
|
+
}
|
|
110
|
+
const addResult = execGit(['add', '-A'], root);
|
|
111
|
+
if (addResult.stderr) {
|
|
112
|
+
throw new Error(`cc-git commit: git add failed\n${addResult.stderr}`);
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
const commitResult = execGit(['commit', '-m', input.message], root);
|
|
116
|
+
if (commitResult.stderr && commitResult.stderr.includes('nothing to commit')) {
|
|
117
|
+
return '(nothing to commit — working tree clean)';
|
|
118
|
+
}
|
|
119
|
+
// git commit outputs to stderr by convention; include both
|
|
120
|
+
const output = commitResult.stdout || commitResult.stderr || 'committed';
|
|
121
|
+
return output.trimEnd();
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
const stderr = err.stderr?.toString() || err.message || '';
|
|
125
|
+
throw new Error(`cc-git commit: git commit failed\n${stderr}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// ── push ──
|
|
129
|
+
if (sub === 'push') {
|
|
130
|
+
if (!hasRemote(root)) {
|
|
131
|
+
throw new Error('cc-git push: no remote configured. Add one with:\n' +
|
|
132
|
+
' git remote add origin <url>');
|
|
133
|
+
}
|
|
134
|
+
const branch = getCurrentBranch(root);
|
|
135
|
+
// Check if there are commits to push
|
|
136
|
+
try {
|
|
137
|
+
execGit(['fetch', 'origin', branch], root);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// fetch failure is not fatal — proceed with push
|
|
141
|
+
}
|
|
142
|
+
const { stdout, stderr } = execGit(['push', 'origin', branch], root);
|
|
143
|
+
// Success
|
|
144
|
+
if (!stderr || stderr.includes('->') || stderr === '') {
|
|
145
|
+
return stdout || `Pushed to origin/${branch}`;
|
|
146
|
+
}
|
|
147
|
+
// Non-fast-forward rejection
|
|
148
|
+
if (stderr.includes('non-fast-forward') || stderr.includes('rejected') || stderr.includes('[rejected]')) {
|
|
149
|
+
return `[REJECTED] Push to origin/${branch} was rejected (non-fast-forward).\n\n远程有新的提交,本地落后。操作建议:
|
|
150
|
+
1. 先用 bash: git fetch origin ${branch}
|
|
151
|
+
2. 查看远程变更: git log HEAD..origin/${branch}
|
|
152
|
+
3. 合并或变基: git merge origin/${branch} 或 git rebase origin/${branch}
|
|
153
|
+
4. 有冲突则手动解决后: git add ... && git commit
|
|
154
|
+
5. 再次推送: cc-git push`;
|
|
155
|
+
}
|
|
156
|
+
// Other errors
|
|
157
|
+
throw new Error(`cc-git push failed:\n${stderr}`);
|
|
158
|
+
}
|
|
159
|
+
// ── log ──
|
|
160
|
+
if (sub === 'log') {
|
|
161
|
+
const n = input.n ?? 10;
|
|
162
|
+
const { stdout } = execGit(['log', '--oneline', `-n`, String(n)], root);
|
|
163
|
+
if (!stdout)
|
|
164
|
+
return '(no commits)';
|
|
165
|
+
return stdout;
|
|
166
|
+
}
|
|
167
|
+
throw new Error(`cc-git: unknown subcommand "${sub}"`);
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
//# sourceMappingURL=cc-git-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cc-git-tool.js","sourceRoot":"","sources":["../../src/git/cc-git-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/git/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/git/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compacting.d.ts","sourceRoot":"","sources":["../../src/hooks/compacting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"compacting.d.ts","sourceRoot":"","sources":["../../src/hooks/compacting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAkL5D;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CA4BzE"}
|
package/dist/hooks/compacting.js
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* 通过检查 output.system 是否已包含目标内容实现 idempotent dedup(无状态)
|
|
16
16
|
* - compacting 保留:避免 serenity 关键状态被压缩丢失
|
|
17
17
|
*/
|
|
18
|
-
import { getState, ensureReady } from '../state.js';
|
|
18
|
+
import { getState, ensureReady, clearPhase2Flag } from '../state.js';
|
|
19
19
|
import { safeCreateHook } from './util.js';
|
|
20
20
|
import pkg from '../../package.json' with { type: 'json' };
|
|
21
21
|
const VERSION = pkg.version;
|
|
@@ -70,6 +70,42 @@ const systemTransformImpl = async (_input, output) => {
|
|
|
70
70
|
return;
|
|
71
71
|
output.system.push(state.skillContent);
|
|
72
72
|
};
|
|
73
|
+
/**
|
|
74
|
+
* messages.transform — Phase 2 强制访谈(DCP 同款模式)。
|
|
75
|
+
*
|
|
76
|
+
* 当 activation 检测到 SKILL.md 为骨架模板(needsPhase2=true),
|
|
77
|
+
* 将最后一条用户消息替换为 Phase 2 访谈提示词,实现"无论用户发了什么都进入初始化"。
|
|
78
|
+
*
|
|
79
|
+
* 替换后立即清除 needsPhase2,确保后续消息不被重复注入。
|
|
80
|
+
*/
|
|
81
|
+
const messagesTransformImpl = async (_input, output) => {
|
|
82
|
+
try {
|
|
83
|
+
await ensureReady();
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const state = getState();
|
|
89
|
+
if (!state.needsPhase2 || !state.phase2Prompt)
|
|
90
|
+
return;
|
|
91
|
+
// 从后往前找最后一个真实用户消息(跳过 synthetic / ignored / non-user)
|
|
92
|
+
const messages = output.messages ?? [];
|
|
93
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
94
|
+
const msg = messages[i];
|
|
95
|
+
if (!msg || msg.info.role !== 'user')
|
|
96
|
+
continue;
|
|
97
|
+
for (const part of msg.parts) {
|
|
98
|
+
if (part.type !== 'text')
|
|
99
|
+
continue;
|
|
100
|
+
if (part.ignored || part.synthetic)
|
|
101
|
+
continue;
|
|
102
|
+
// 替换消息文本为 Phase 2 访谈提示词
|
|
103
|
+
part.text = state.phase2Prompt;
|
|
104
|
+
clearPhase2Flag();
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
};
|
|
73
109
|
const sessionCompactingImpl = async (_input, output) => {
|
|
74
110
|
try {
|
|
75
111
|
await ensureReady();
|
|
@@ -146,6 +182,7 @@ const toolDefinitionImpl = async (input, output) => {
|
|
|
146
182
|
export function createCompactingHooks(config) {
|
|
147
183
|
const hooks = {};
|
|
148
184
|
hooks['experimental.chat.system.transform'] = safeCreateHook('experimental.chat.system.transform', () => systemTransformImpl, config);
|
|
185
|
+
hooks['experimental.chat.messages.transform'] = safeCreateHook('experimental.chat.messages.transform', () => messagesTransformImpl, config);
|
|
149
186
|
hooks['experimental.session.compacting'] = safeCreateHook('experimental.session.compacting', () => sessionCompactingImpl, config);
|
|
150
187
|
hooks['tool.definition'] = safeCreateHook('tool.definition', () => toolDefinitionImpl, config);
|
|
151
188
|
return hooks;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compacting.js","sourceRoot":"","sources":["../../src/hooks/compacting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"compacting.js","sourceRoot":"","sources":["../../src/hooks/compacting.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAS,MAAM,qBAAqB,CAAC;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAS,MAAM,qBAAqB,CAAC;;;;;AA4DzD,wBAGE"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* opencode-serenity-plugin — server entry
|
|
3
3
|
*
|
|
4
|
-
* 职责:注册
|
|
4
|
+
* 职责:注册 9 个自定义工具 + 6 个 system hook,实现 serenity 认知基础设施的
|
|
5
5
|
* plugin 层(MSM 框架、文件系统操作、会话管理、路径守卫、skill 注入等)。
|
|
6
6
|
*
|
|
7
7
|
* 设计文档见 docs/:
|
|
@@ -24,6 +24,7 @@ import { sessionTool } from './session/session-tool.js';
|
|
|
24
24
|
import { cccStatusTool } from './ccc-status.js';
|
|
25
25
|
import { eapTool } from './eap-tool.js';
|
|
26
26
|
import { neatTool } from './neat-tool.js';
|
|
27
|
+
import { ccGitTool } from './git/cc-git-tool.js';
|
|
27
28
|
import { createPermissionGuards } from './hooks/permission-guards.js';
|
|
28
29
|
import { createCompactingHooks } from './hooks/compacting.js';
|
|
29
30
|
import { createShellEnv } from './hooks/shell-env.js';
|
|
@@ -50,6 +51,7 @@ const plugin = async (input) => {
|
|
|
50
51
|
cc_ck: cccStatusTool, // v0.3 D18: CCC 三原则状态检查
|
|
51
52
|
eap: eapTool, // v0.3: EAP 认知质量框架 (渐进式披露)
|
|
52
53
|
neat: neatTool, // v0.3: Neat 设计协作协议 (渐进式披露)
|
|
54
|
+
cc_git: ccGitTool, // v0.4: CCC git 管理工具 (status/commit/push/log)
|
|
53
55
|
},
|
|
54
56
|
...createPermissionGuards(),
|
|
55
57
|
...createCompactingHooks(),
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,WAAW,EACX,WAAW,EACX,YAAY,GAEb,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,MAAM,MAAM,GAAW,KAAK,EAAE,KAAK,EAAE,EAAE;IACrC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE9F,+BAA+B;IAC/B,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAE9D,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnB,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACzE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,+CAA+C;IAC/C,8CAA8C;IAE9C,+DAA+D;IAC/D,MAAM,KAAK,GAAU;QACnB,IAAI,EAAE;YACJ,QAAQ,EAAE,WAAW;YACrB,QAAQ,EAAE,WAAW;YACrB,SAAS,EAAE,YAAY;YACvB,KAAK,EAAE,cAAc,EAAE,6CAA6C;YACpE,OAAO,EAAE,WAAW,EAAE,oBAAoB;YAC1C,KAAK,EAAE,aAAa,EAAE,wBAAwB;YAC9C,GAAG,EAAE,OAAO,EAAS,2BAA2B;YAChD,IAAI,EAAE,QAAQ,EAAO,4BAA4B;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,WAAW,EACX,WAAW,EACX,YAAY,GAEb,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,MAAM,MAAM,GAAW,KAAK,EAAE,KAAK,EAAE,EAAE;IACrC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE9F,+BAA+B;IAC/B,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAE9D,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnB,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACzE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,+CAA+C;IAC/C,8CAA8C;IAE9C,+DAA+D;IAC/D,MAAM,KAAK,GAAU;QACnB,IAAI,EAAE;YACJ,QAAQ,EAAE,WAAW;YACrB,QAAQ,EAAE,WAAW;YACrB,SAAS,EAAE,YAAY;YACvB,KAAK,EAAE,cAAc,EAAE,6CAA6C;YACpE,OAAO,EAAE,WAAW,EAAE,oBAAoB;YAC1C,KAAK,EAAE,aAAa,EAAE,wBAAwB;YAC9C,GAAG,EAAE,OAAO,EAAS,2BAA2B;YAChD,IAAI,EAAE,QAAQ,EAAO,4BAA4B;YACjD,MAAM,EAAE,SAAS,EAAI,8CAA8C;SACpE;QACD,GAAG,sBAAsB,EAAE;QAC3B,GAAG,qBAAqB,EAAE;QAC1B,GAAG,cAAc,EAAE;QACnB,KAAK,EAAE,gCAAgC,CAAC;YACtC,YAAY,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS;SACpC,CAAC;KACH,CAAC;IAEF,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,2CAA2C,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IAChG,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAChF,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,eAAe;IACb,EAAE,EAAE,iCAAiC;IACrC,MAAM,EAAE,MAAM;CACf,CAAC"}
|
|
@@ -1,28 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* init-wizard.ts — D1 Init 向导 Phase 1
|
|
3
3
|
*
|
|
4
|
-
* CLI 交互式创建认知容器 (CCC)
|
|
4
|
+
* CLI 交互式创建认知容器 (CCC) 的目录骨架、git 初始化并复制标准技能模板。
|
|
5
|
+
*
|
|
6
|
+
* 设计文档:docs/ccc-init-flow-design.md(home-serenity 仓)
|
|
5
7
|
*
|
|
6
8
|
* 流程:
|
|
7
|
-
* 1.
|
|
8
|
-
* 2.
|
|
9
|
-
* 3.
|
|
10
|
-
* 4.
|
|
11
|
-
* 5.
|
|
12
|
-
* 6.
|
|
9
|
+
* 1. 交互问答 4 题(prefix / description / remote / scope)
|
|
10
|
+
* 2. git init → add → commit(Phase 1 写骨架前)
|
|
11
|
+
* 3. 创建目录骨架(.serenity, opencode.json, AGENT_SESSIONS/, docs/)
|
|
12
|
+
* 4. 复制 3 个标准技能模板到 .opencode/skills/
|
|
13
|
+
* 5. git remote add → push(如果提供了 remote)
|
|
14
|
+
* 6. 写入 Phase 2 Agent prompt
|
|
15
|
+
* 7. 输出完成信息
|
|
13
16
|
*/
|
|
14
17
|
export interface InitOptions {
|
|
15
18
|
/** 目标路径 */
|
|
16
19
|
targetPath: string;
|
|
17
|
-
/** 实例前缀(如 home,
|
|
20
|
+
/** 实例前缀(如 home, work) */
|
|
18
21
|
prefix?: string;
|
|
19
|
-
/**
|
|
20
|
-
name?: string;
|
|
21
|
-
/** 实例描述(一句话) */
|
|
22
|
+
/** 一句话描述 */
|
|
22
23
|
description?: string;
|
|
24
|
+
/** Git SSH URL(如 git@github.com:user/work-serenity.git) */
|
|
25
|
+
remote?: string;
|
|
26
|
+
/** 规模:单人/小团队/多人/企业 */
|
|
27
|
+
scope?: string;
|
|
23
28
|
/** Plugin 根路径(用于定位模板) */
|
|
24
29
|
pluginRoot: string;
|
|
25
|
-
/**
|
|
30
|
+
/** 非交互模式(必须提供 prefix + description + remote) */
|
|
26
31
|
nonInteractive?: boolean;
|
|
27
32
|
/** 强制覆盖已有文件 */
|
|
28
33
|
force?: boolean;
|
|
@@ -30,10 +35,11 @@ export interface InitOptions {
|
|
|
30
35
|
export interface InitResult {
|
|
31
36
|
success: boolean;
|
|
32
37
|
prefix: string;
|
|
33
|
-
|
|
38
|
+
cccName: string;
|
|
34
39
|
message: string;
|
|
35
40
|
createdDirs: string[];
|
|
36
41
|
installedSkills: string[];
|
|
42
|
+
gitPushed: boolean;
|
|
37
43
|
}
|
|
38
44
|
export declare function initWizard(opts: InitOptions): Promise<InitResult>;
|
|
39
45
|
//# sourceMappingURL=init-wizard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-wizard.d.ts","sourceRoot":"","sources":["../../src/init/init-wizard.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"init-wizard.d.ts","sourceRoot":"","sources":["../../src/init/init-wizard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAiBH,MAAM,WAAW,WAAW;IAC1B,WAAW;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;CACpB;AAuSD,wBAAsB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAmKvE"}
|