@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.
Files changed (46) hide show
  1. package/README.md +98 -78
  2. package/dist/activation.d.ts.map +1 -1
  3. package/dist/activation.js +26 -1
  4. package/dist/activation.js.map +1 -1
  5. package/dist/config-schema.d.ts +2 -1
  6. package/dist/config-schema.d.ts.map +1 -1
  7. package/dist/config-schema.js +1 -0
  8. package/dist/config-schema.js.map +1 -1
  9. package/dist/fs/file-system-tool.d.ts.map +1 -1
  10. package/dist/fs/file-system-tool.js +4 -0
  11. package/dist/fs/file-system-tool.js.map +1 -1
  12. package/dist/git/cc-git-tool.d.ts +19 -0
  13. package/dist/git/cc-git-tool.d.ts.map +1 -0
  14. package/dist/git/cc-git-tool.js +170 -0
  15. package/dist/git/cc-git-tool.js.map +1 -0
  16. package/dist/git/index.d.ts +2 -0
  17. package/dist/git/index.d.ts.map +1 -0
  18. package/dist/git/index.js +2 -0
  19. package/dist/git/index.js.map +1 -0
  20. package/dist/hooks/compacting.d.ts.map +1 -1
  21. package/dist/hooks/compacting.js +38 -1
  22. package/dist/hooks/compacting.js.map +1 -1
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +3 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/init/init-wizard.d.ts +19 -13
  28. package/dist/init/init-wizard.d.ts.map +1 -1
  29. package/dist/init/init-wizard.js +247 -123
  30. package/dist/init/init-wizard.js.map +1 -1
  31. package/dist/session/session-tool.d.ts.map +1 -1
  32. package/dist/session/session-tool.js +16 -8
  33. package/dist/session/session-tool.js.map +1 -1
  34. package/dist/skills/template-loader.d.ts +3 -1
  35. package/dist/skills/template-loader.d.ts.map +1 -1
  36. package/dist/skills/template-loader.js +6 -5
  37. package/dist/skills/template-loader.js.map +1 -1
  38. package/dist/state.d.ts +2 -0
  39. package/dist/state.d.ts.map +1 -1
  40. package/dist/state.js +6 -0
  41. package/dist/state.js.map +1 -1
  42. package/dist/types/index.d.ts +4 -0
  43. package/dist/types/index.d.ts.map +1 -1
  44. package/dist/types/index.js +2 -0
  45. package/dist/types/index.js.map +1 -1
  46. 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":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAuB,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,GAAG,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAE3D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AAE5B,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAU,CAAC;AAEjE,kBAAkB;AAElB,SAAS,OAAO,CAAC,IAAc,EAAE,GAAW;IAC1C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE;YACvC,GAAG;YACH,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM;SAC/B,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAClD,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;IAChE,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IACxE,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACxE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,gBAAgB;AAEhB,MAAM,CAAC,MAAM,SAAS,GAAmB,IAAI,CAAC;IAC5C,WAAW,EACT,0BAA0B,OAAO,KAAK;QACtC,6DAA6D;QAC7D,sHAAsH;QACtH,0DAA0D;QAC1D,yEAAyE;IAC3E,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC;aACV,IAAI,CAAC,WAAW,CAAC;aACjB,QAAQ,CACP,8CAA8C;YAC9C,yCAAyC;YACzC,+BAA+B;YAC/B,yBAAyB,CAC1B;QACH,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,iDAAiD,CAAC;QAC9D,CAAC,EAAE,CAAC;aACD,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,GAAG,CAAC;aACR,QAAQ,EAAE;aACV,OAAO,CAAC,EAAE,CAAC;aACX,QAAQ,CAAC,8DAA8D,CAAC;KAC5E;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC5B,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC;QAE7B,eAAe;QACf,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,CAAC;YAC5D,yBAAyB;YACzB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACjC,wDAAwD;gBACxD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;gBAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,SAAS,CACnB;gBACE,KAAK,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;gBAC3B,KAAK,EAAE,OAAO;gBACd,OAAO,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,uBAAuB;aACrF,EACD,IAAI,EACJ,CAAC,CACF,CAAC;QACJ,CAAC;QAED,eAAe;QACf,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAClD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YACnE,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,OAAO,0CAA0C,CAAC;YACpD,CAAC;YAED,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;YAC/C,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CAAC,kCAAkC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;YACxE,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;gBACpE,IAAI,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;oBAC7E,OAAO,0CAA0C,CAAC;gBACpD,CAAC;gBACD,2DAA2D;gBAC3D,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,IAAI,WAAW,CAAC;gBACzE,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC;YAC1B,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC3D,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,aAAa;QACb,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CACb,oDAAoD;oBACpD,+BAA+B,CAChC,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAEtC,qCAAqC;YACrC,IAAI,CAAC;gBACH,OAAO,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;YAC7C,CAAC;YAAC,MAAM,CAAC;gBACP,iDAAiD;YACnD,CAAC;YAED,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAChC,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAC1B,IAAI,CACL,CAAC;YAEF,UAAU;YACV,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;gBACtD,OAAO,MAAM,IAAI,oBAAoB,MAAM,EAAE,CAAC;YAChD,CAAC;YAED,6BAA6B;YAC7B,IAAI,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACxG,OAAO,6BAA6B,MAAM;iCACjB,MAAM;oCACH,MAAM;+BACX,MAAM,wBAAwB,MAAM;;uBAE5C,CAAC;YAClB,CAAC;YAED,eAAe;YACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,YAAY;QACZ,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YAClB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YACxB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACxE,IAAI,CAAC,MAAM;gBAAE,OAAO,cAAc,CAAC;YACnC,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,GAAG,CAAC,CAAC;IACzD,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ccGitTool } from './cc-git-tool.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export { ccGitTool } from './cc-git-tool.js';
2
+ //# sourceMappingURL=index.js.map
@@ -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;AA2I5D;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAsBzE"}
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"}
@@ -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;AACpD,OAAO,EAAE,cAAc,EAAmB,MAAM,WAAW,CAAC;AAC5D,OAAO,GAAG,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAE3D,MAAM,OAAO,GAAW,GAAG,CAAC,OAAO,CAAC;AAEpC,MAAM,mBAAmB,GAA6D,KAAK,EACzF,MAAM,EACN,MAAM,EACN,EAAE;IACF,IAAI,CAAC;QACH,MAAM,WAAW,EAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,4CAA4C;IAC5C,gBAAgB;IAChB,MAAM,SAAS,GAAG,sBAAsB,CAAC;IACzC,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QAChG,MAAM,QAAQ,GAAG;YACf,EAAE;YACF,sBAAsB;YACtB,kCAAkC,OAAO,EAAE;YAC3C,QAAQ,KAAK,CAAC,OAAO,WAAW,KAAK,CAAC,OAAO,EAAE;YAC/C,EAAE;YACF,4DAA4D;YAC5D,+DAA+D;YAC/D,gEAAgE;YAChE,oEAAoE;YACpE,sEAAsE;YACtE,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,6BAA6B;IAC7B,wCAAwC;IACxC,MAAM,MAAM,GAAG,8BAA8B,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,KAAK,GAAG;YACZ,EAAE;YACF,8BAA8B;YAC9B,SAAS,KAAK,CAAC,OAAO,EAAE;YACxB,mEAAmE;YACnE,sFAAsF;YACtF,qDAAqD;YACrD,yCAAyC;YACzC,uCAAuC;YACvC,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,iBAAiB;IACjB,IAAI,CAAC,KAAK,CAAC,YAAY;QAAE,OAAO,CAAE,uBAAuB;IACzD,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;QAAE,OAAO;IACvD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAA0D,KAAK,EACxF,MAAM,EACN,MAAM,EACN,EAAE;IACF,IAAI,CAAC;QACH,MAAM,WAAW,EAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,CAAC,OAAO,CAAC,IAAI,CACjB,4BAA4B,KAAK,CAAC,OAAO,aAAa,KAAK,CAAC,OAAO,eAAe,KAAK,CAAC,SAAS,EAAE,CACpG,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,kBAAkB,GAA0C,KAAK,EACrE,KAAK,EACL,MAAM,EACN,EAAE;IACF,6BAA6B;IAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO;IAEpC,IAAI,CAAC;QACH,MAAM,WAAW,EAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,OAAO;IAE/C,MAAM,OAAO,GAAG;QACd,iCAAiC;QACjC,QAAQ,KAAK,CAAC,OAAO,EAAE;QACvB,SAAS,KAAK,CAAC,OAAO,EAAE;QACxB,EAAE;QACF,sDAAsD;QACtD,4DAA4D;QAC5D,EAAE;QACF,2CAA2C;QAC3C,8EAA8E;QAC9E,qBAAqB,KAAK,CAAC,OAAO,oBAAoB;QACtD,gEAAgE;QAChE,+DAA+D;QAC/D,EAAE;QACF,oFAAoF;QACpF,sEAAsE;QACtE,EAAE;QACF,oDAAoD;QACpD,iEAAiE;QACjE,+DAA+D;QAC/D,uDAAuD;QACvD,+DAA+D;QAC/D,kEAAkE;QAClE,4CAA4C;QAC5C,EAAE;QACF,0DAA0D;QAC1D,mDAAmD;QACnD,8BAA8B;KAC/B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,CAAC,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;AAC7D,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAmB;IACvD,MAAM,KAAK,GAAmB,EAAE,CAAC;IAEjC,KAAK,CAAC,oCAAoC,CAAC,GAAG,cAAc,CAC1D,oCAAoC,EACpC,GAAG,EAAE,CAAC,mBAAmB,EACzB,MAAM,CACP,CAAC;IAEF,KAAK,CAAC,iCAAiC,CAAC,GAAG,cAAc,CACvD,iCAAiC,EACjC,GAAG,EAAE,CAAC,qBAAqB,EAC3B,MAAM,CACP,CAAC;IAEF,KAAK,CAAC,iBAAiB,CAAC,GAAG,cAAc,CACvC,iBAAiB,EACjB,GAAG,EAAE,CAAC,kBAAkB,EACxB,MAAM,CACP,CAAC;IAEF,OAAO,KAAK,CAAC;AACf,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
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * opencode-serenity-plugin — server entry
3
3
  *
4
- * 职责:注册 8 个自定义工具 + 6 个 system hook,实现 serenity 认知基础设施的
4
+ * 职责:注册 9 个自定义工具 + 6 个 system hook,实现 serenity 认知基础设施的
5
5
  * plugin 层(MSM 框架、文件系统操作、会话管理、路径守卫、skill 注入等)。
6
6
  *
7
7
  * 设计文档见 docs/:
@@ -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;;;;;AA0DzD,wBAGE"}
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
- * 职责:注册 8 个自定义工具 + 6 个 system hook,实现 serenity 认知基础设施的
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;SAClD;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
+ {"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. 收集基本信息(prefix, description)
8
- * 2. 创建目录骨架(.serenity, .gitignore, AGENT_SESSIONS/, docs/)
9
- * 3. 复制 9 个标准技能模板到 .opencode/skills/
10
- * 4. 生成 opencode.json(注册 plugin)
11
- * 5. 写入 Phase 2 Agent prompt
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, tg, pg) */
20
+ /** 实例前缀(如 home, work) */
18
21
  prefix?: string;
19
- /** 实例名称(如 宁静号,用于根 skill 标题) */
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
- name: string;
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;;;;;;;;;;;;GAYG;AAeH,MAAM,WAAW,WAAW;IAC1B,WAAW;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY;IACZ,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,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAsMD,wBAAsB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA2HvE"}
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"}