@shgroup/opencode-serenity-plugin 0.2.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 (151) hide show
  1. package/README.md +199 -0
  2. package/bin/opencode-serenity-plugin.js +316 -0
  3. package/dist/activation.d.ts +40 -0
  4. package/dist/activation.d.ts.map +1 -0
  5. package/dist/activation.js +133 -0
  6. package/dist/activation.js.map +1 -0
  7. package/dist/bash-override.d.ts +10 -0
  8. package/dist/bash-override.d.ts.map +1 -0
  9. package/dist/bash-override.js +24 -0
  10. package/dist/bash-override.js.map +1 -0
  11. package/dist/bash-toggle.d.ts +17 -0
  12. package/dist/bash-toggle.d.ts.map +1 -0
  13. package/dist/bash-toggle.js +42 -0
  14. package/dist/bash-toggle.js.map +1 -0
  15. package/dist/config-schema.d.ts +300 -0
  16. package/dist/config-schema.d.ts.map +1 -0
  17. package/dist/config-schema.js +185 -0
  18. package/dist/config-schema.js.map +1 -0
  19. package/dist/errors.d.ts +90 -0
  20. package/dist/errors.d.ts.map +1 -0
  21. package/dist/errors.js +151 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/fs/file-system-tool.d.ts +25 -0
  24. package/dist/fs/file-system-tool.d.ts.map +1 -0
  25. package/dist/fs/file-system-tool.js +318 -0
  26. package/dist/fs/file-system-tool.js.map +1 -0
  27. package/dist/fs/resolve-path.d.ts +53 -0
  28. package/dist/fs/resolve-path.d.ts.map +1 -0
  29. package/dist/fs/resolve-path.js +100 -0
  30. package/dist/fs/resolve-path.js.map +1 -0
  31. package/dist/hooks/compacting.d.ts +23 -0
  32. package/dist/hooks/compacting.d.ts.map +1 -0
  33. package/dist/hooks/compacting.js +90 -0
  34. package/dist/hooks/compacting.js.map +1 -0
  35. package/dist/hooks/permission-auto-reply.d.ts +91 -0
  36. package/dist/hooks/permission-auto-reply.d.ts.map +1 -0
  37. package/dist/hooks/permission-auto-reply.js +158 -0
  38. package/dist/hooks/permission-auto-reply.js.map +1 -0
  39. package/dist/hooks/permission-guards.d.ts +41 -0
  40. package/dist/hooks/permission-guards.d.ts.map +1 -0
  41. package/dist/hooks/permission-guards.js +153 -0
  42. package/dist/hooks/permission-guards.js.map +1 -0
  43. package/dist/hooks/shell-env.d.ts +20 -0
  44. package/dist/hooks/shell-env.d.ts.map +1 -0
  45. package/dist/hooks/shell-env.js +38 -0
  46. package/dist/hooks/shell-env.js.map +1 -0
  47. package/dist/hooks/util.d.ts +81 -0
  48. package/dist/hooks/util.d.ts.map +1 -0
  49. package/dist/hooks/util.js +172 -0
  50. package/dist/hooks/util.js.map +1 -0
  51. package/dist/index.d.ts +26 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +63 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/init/init-wizard.d.ts +39 -0
  56. package/dist/init/init-wizard.d.ts.map +1 -0
  57. package/dist/init/init-wizard.js +297 -0
  58. package/dist/init/init-wizard.js.map +1 -0
  59. package/dist/install.d.ts +117 -0
  60. package/dist/install.d.ts.map +1 -0
  61. package/dist/install.js +255 -0
  62. package/dist/install.js.map +1 -0
  63. package/dist/msm-schema.d.ts +76 -0
  64. package/dist/msm-schema.d.ts.map +1 -0
  65. package/dist/msm-schema.js +207 -0
  66. package/dist/msm-schema.js.map +1 -0
  67. package/dist/msm.d.ts +25 -0
  68. package/dist/msm.d.ts.map +1 -0
  69. package/dist/msm.js +317 -0
  70. package/dist/msm.js.map +1 -0
  71. package/dist/session/lib.d.ts +33 -0
  72. package/dist/session/lib.d.ts.map +1 -0
  73. package/dist/session/lib.js +475 -0
  74. package/dist/session/lib.js.map +1 -0
  75. package/dist/session/session-tool.d.ts +17 -0
  76. package/dist/session/session-tool.d.ts.map +1 -0
  77. package/dist/session/session-tool.js +109 -0
  78. package/dist/session/session-tool.js.map +1 -0
  79. package/dist/skills/install-skill.d.ts +36 -0
  80. package/dist/skills/install-skill.d.ts.map +1 -0
  81. package/dist/skills/install-skill.js +91 -0
  82. package/dist/skills/install-skill.js.map +1 -0
  83. package/dist/skills/template-loader.d.ts +79 -0
  84. package/dist/skills/template-loader.d.ts.map +1 -0
  85. package/dist/skills/template-loader.js +170 -0
  86. package/dist/skills/template-loader.js.map +1 -0
  87. package/dist/state.d.ts +35 -0
  88. package/dist/state.d.ts.map +1 -0
  89. package/dist/state.js +62 -0
  90. package/dist/state.js.map +1 -0
  91. package/dist/tui.d.ts +61 -0
  92. package/dist/tui.d.ts.map +1 -0
  93. package/dist/tui.js +279 -0
  94. package/dist/tui.js.map +1 -0
  95. package/dist/types/index.d.ts +30 -0
  96. package/dist/types/index.d.ts.map +1 -0
  97. package/dist/types/index.js +17 -0
  98. package/dist/types/index.js.map +1 -0
  99. package/dist/util/config-patch.d.ts +58 -0
  100. package/dist/util/config-patch.d.ts.map +1 -0
  101. package/dist/util/config-patch.js +117 -0
  102. package/dist/util/config-patch.js.map +1 -0
  103. package/dist/util/git.d.ts +29 -0
  104. package/dist/util/git.d.ts.map +1 -0
  105. package/dist/util/git.js +74 -0
  106. package/dist/util/git.js.map +1 -0
  107. package/dist/util/init-check.d.ts +22 -0
  108. package/dist/util/init-check.d.ts.map +1 -0
  109. package/dist/util/init-check.js +76 -0
  110. package/dist/util/init-check.js.map +1 -0
  111. package/dist/util/init.d.ts +54 -0
  112. package/dist/util/init.d.ts.map +1 -0
  113. package/dist/util/init.js +87 -0
  114. package/dist/util/init.js.map +1 -0
  115. package/dist/util/log.d.ts +25 -0
  116. package/dist/util/log.d.ts.map +1 -0
  117. package/dist/util/log.js +28 -0
  118. package/dist/util/log.js.map +1 -0
  119. package/dist/util/msm-call.d.ts +48 -0
  120. package/dist/util/msm-call.d.ts.map +1 -0
  121. package/dist/util/msm-call.js +86 -0
  122. package/dist/util/msm-call.js.map +1 -0
  123. package/dist/util/msm-exec-runtime.d.ts +123 -0
  124. package/dist/util/msm-exec-runtime.d.ts.map +1 -0
  125. package/dist/util/msm-exec-runtime.js +532 -0
  126. package/dist/util/msm-exec-runtime.js.map +1 -0
  127. package/dist/util/path.d.ts +10 -0
  128. package/dist/util/path.d.ts.map +1 -0
  129. package/dist/util/path.js +21 -0
  130. package/dist/util/path.js.map +1 -0
  131. package/dist/util/ready-state.d.ts +43 -0
  132. package/dist/util/ready-state.d.ts.map +1 -0
  133. package/dist/util/ready-state.js +104 -0
  134. package/dist/util/ready-state.js.map +1 -0
  135. package/dist/util/serenity-file.d.ts +30 -0
  136. package/dist/util/serenity-file.d.ts.map +1 -0
  137. package/dist/util/serenity-file.js +69 -0
  138. package/dist/util/serenity-file.js.map +1 -0
  139. package/dist/util/tui-install.d.ts +61 -0
  140. package/dist/util/tui-install.d.ts.map +1 -0
  141. package/dist/util/tui-install.js +94 -0
  142. package/dist/util/tui-install.js.map +1 -0
  143. package/docs/architecture-v0.md +294 -0
  144. package/docs/contract-v0.md +417 -0
  145. package/docs/plugin-self-contained-msm-v1.md +182 -0
  146. package/docs/refactor-direction-v1.11.md +78 -0
  147. package/docs/requirements-v0-scope.md +104 -0
  148. package/docs/requirements-v0-summary.md +108 -0
  149. package/docs/rr7-init-design.md +304 -0
  150. package/docs/v0.1-candidates.md +132 -0
  151. package/package.json +54 -0
package/dist/msm.js ADDED
@@ -0,0 +1,317 @@
1
+ /**
2
+ * msm.ts
3
+ *
4
+ * 工具集(3 个):
5
+ * - msm_list : PRIMARY — 列出所有 MSM
6
+ * - msm_exec : PRIMARY — 执行 MSM / 协议元命令
7
+ * - msm_admin : 注册 / 注销 MSM(合并 register/deregister)
8
+ *
9
+ * 注意:bash override (RR3) 已于 2026-06-08 移除。
10
+ */
11
+ import { readFileSync, writeFileSync, existsSync } from 'node:fs';
12
+ import { join, resolve } from 'node:path';
13
+ import { tool } from '@opencode-ai/plugin';
14
+ import { z } from 'zod';
15
+ import { log } from './util/log.js';
16
+ import { MsmAlreadyRegisteredError, MsmExecutionError, MsmNotInRegistryError, MsmNotRegisteredError, MsmPathEscapeError, MsmScriptNotFoundError, } from './errors.js';
17
+ import { getState, ensureReady } from './state.js';
18
+ import { isPathInside, gitAddAndCommit } from './util/git.js';
19
+ import { normalizeFlags, validatePathArgsFromTokens } from './msm-schema.js';
20
+ import { callMsmExec } from './util/msm-call.js';
21
+ import { parseMechRegistryFile, } from './config-schema.js';
22
+ import pkg from '../package.json' with { type: 'json' };
23
+ /** v0.0.3 — plugin version exposed via msmExecTool description + msmListTool output (was silent) */
24
+ const VERSION = pkg.version;
25
+ /** 加载 mech-registry.json(v0 简化:实例内一份) */
26
+ /** 支持两种 schema:
27
+ * - v1 包装格式:{ version, description, entries: [...] }
28
+ * - 数组格式:[...]
29
+ * 返回统一 MechEntry[]
30
+ */
31
+ export function loadMechRegistryFrom(cwdRoot, instanceName) {
32
+ return loadRegistryFile(cwdRoot, instanceName).entries;
33
+ }
34
+ function registryFilePath(cwdRoot, instanceName) {
35
+ return join(cwdRoot, '.opencode', 'skills', instanceName, 'references', 'mech-registry.json');
36
+ }
37
+ export function loadRegistryFile(cwdRoot, instanceName) {
38
+ const path = registryFilePath(cwdRoot, instanceName);
39
+ try {
40
+ const raw = readFileSync(path, 'utf8');
41
+ const parsed = JSON.parse(raw);
42
+ // v1.13: 先用 zod 校验顶层结构,失败则降级为旧宽松解析
43
+ const validated = parseMechRegistryFile(parsed);
44
+ if (validated.success) {
45
+ const data = validated.data;
46
+ if (Array.isArray(data)) {
47
+ return { entries: data, isV1Wrapped: false };
48
+ }
49
+ return {
50
+ entries: data.entries,
51
+ isV1Wrapped: true,
52
+ version: data.version,
53
+ description: data.description,
54
+ };
55
+ }
56
+ // zod 失败 — 降级为旧逻辑 (向后兼容, 部分 v0/v1 schema 字段可能不严格)
57
+ if (Array.isArray(parsed)) {
58
+ return { entries: parsed, isV1Wrapped: false };
59
+ }
60
+ if (parsed && typeof parsed === 'object' && Array.isArray(parsed.entries)) {
61
+ return {
62
+ entries: parsed.entries,
63
+ isV1Wrapped: true,
64
+ version: typeof parsed.version === 'number' ? parsed.version : undefined,
65
+ description: typeof parsed.description === 'string' ? parsed.description : undefined,
66
+ };
67
+ }
68
+ log.warn('msm', 'mech-registry.json 顶层既不是数组也无 entries 字段', { path });
69
+ return { entries: [], isV1Wrapped: false };
70
+ }
71
+ catch (err) {
72
+ log.warn('msm', 'mech-registry.json 读取/解析失败', { path, err: String(err) });
73
+ return { entries: [], isV1Wrapped: false };
74
+ }
75
+ }
76
+ export function writeRegistryFile(cwdRoot, instanceName, file) {
77
+ const path = registryFilePath(cwdRoot, instanceName);
78
+ const payload = file.isV1Wrapped
79
+ ? {
80
+ version: file.version ?? 1,
81
+ description: file.description ?? 'serenity plugin: MSM registry',
82
+ entries: file.entries,
83
+ }
84
+ : file.entries;
85
+ writeFileSync(path, JSON.stringify(payload, null, 2) + '\n', 'utf8');
86
+ }
87
+ function loadMechRegistry() {
88
+ const state = getState();
89
+ if (!state.activated)
90
+ return [];
91
+ return loadMechRegistryFrom(state.cwdRoot, state.instanceName);
92
+ }
93
+ /** 查找 MSM(严格相等 + 路径必须在 cwdRoot 内) */
94
+ function findMsm(name, registry) {
95
+ const entry = registry.find((e) => e.name === name);
96
+ if (!entry) {
97
+ throw new MsmNotRegisteredError(name);
98
+ }
99
+ return entry;
100
+ }
101
+ /* ===== msm_list tool ===== */
102
+ export const msmListTool = tool({
103
+ description: '[PRIMARY] List all available MSM (Mech & Semi-Mech) tools in the current serenity instance. ' +
104
+ '**This is the FIRST tool to call for any shell/exec operation** — bash, read (path arguments), ' +
105
+ 'and most plugin tools are intentionally limited. ' +
106
+ 'Each MSM is a deterministic, audited operation registered in `mech-registry.json`. ' +
107
+ 'Returns one MSM per line: `name | skill | category | description`. ' +
108
+ 'If you need an operation that has no MSM, ask the user to register a new one before running arbitrary commands.',
109
+ args: {},
110
+ execute: async () => {
111
+ log.info('msm', 'msm_list called');
112
+ try {
113
+ await ensureReady();
114
+ }
115
+ catch (err) {
116
+ const reason = err instanceof Error ? err.message : String(err);
117
+ log.warn('msm', 'msm_list: plugin not active', { reason });
118
+ return `serenity plugin is not active: ${reason}`;
119
+ }
120
+ const registry = loadMechRegistry();
121
+ log.info('msm', 'msm_list result', { count: registry.length, cwdRoot: getState().cwdRoot });
122
+ if (registry.length === 0) {
123
+ return `(serenity-plugin v${VERSION})\n(no MSM registered)`;
124
+ }
125
+ return `(serenity-plugin v${VERSION})\n` + registry.map((e) => `${e.name} | ${e.skill} | ${e.category} | ${e.description}`).join('\n');
126
+ },
127
+ });
128
+ /* ===== msm_exec tool (纯执行,无协议元命令) =====
129
+ *
130
+ * S028 D5 极简版:只讲 msmName + args + 1 示例。
131
+ * - 不再写"ALWAYS call msm_list first"(LLM 已知)
132
+ * - 不再写"30s timeout"(实际 600s,runtime 内统一)
133
+ * - 不再写"bash is disabled (RR3)"(已在 init-check / 工具面板冗余告知)
134
+ * - 不再写"args 是 string array"(zod schema 已在 args 字段定义)
135
+ */
136
+ export const msmExecTool = tool({
137
+ description: 'Execute a registered MSM tool. ' +
138
+ 'Call msm_list first to discover MSM names. ' +
139
+ 'Example: msm_name="ssh-connect", args=["exec", "ubuntu", "ls -la"]. ' +
140
+ `(serenity-plugin v${VERSION})`,
141
+ args: {
142
+ msm_name: z.string().describe('MSM name as registered in mech-registry.json.'),
143
+ args: z
144
+ .array(z.string())
145
+ .default([])
146
+ .describe('Business args; each element is one argument, preserved losslessly (spaces, newlines, special chars).'),
147
+ },
148
+ execute: async (input) => {
149
+ log.info('msm', 'msm_exec called', {
150
+ msm_name: input.msm_name,
151
+ args: input.args,
152
+ });
153
+ await ensureReady();
154
+ const state = getState();
155
+ // 1. find msm in registry
156
+ const registry = loadMechRegistry();
157
+ const entry = findMsm(input.msm_name, registry);
158
+ log.info('msm', 'msm found in registry', { name: entry.name, skill: entry.skill });
159
+ const normalized = normalizeFlags(entry.flags);
160
+ try {
161
+ // path-arg 校验直接对 input.args(string[])跑
162
+ validatePathArgsFromTokens(input.args, normalized, state.cwdRoot);
163
+ }
164
+ catch (err) {
165
+ log.warn('msm', 'msm_exec path-arg validation failed', { msm: entry.name, err: String(err) });
166
+ throw err;
167
+ }
168
+ // 2. 调 msm-exec.ts(纯执行,无协议 flag)
169
+ const result = await callMsmExec({
170
+ msm_name: input.msm_name,
171
+ businessArgs: input.args,
172
+ });
173
+ log.info('msm', 'msm_exec result', {
174
+ name: input.msm_name,
175
+ exitCode: result.exitCode,
176
+ stdoutLen: result.stdout.length,
177
+ stderrLen: result.stderr.length,
178
+ });
179
+ // v1.15.1 §9: 错误路径保留 stdout
180
+ if (result.exitCode !== 0) {
181
+ throw new MsmExecutionError(input.msm_name, result.exitCode, result.stdout, result.stderr);
182
+ }
183
+ return result.stdout || '(no output)';
184
+ },
185
+ });
186
+ /** 内部 register 实现(v1.17 从 msmRegisterTool 抽出) */
187
+ async function registerMsmInner(input) {
188
+ log.info('msm', 'msm_admin register called', { name: input.name, path: input.path });
189
+ const state = getState();
190
+ // 1. 读 registry(含 schema 信息)
191
+ const file = loadRegistryFile(state.cwdRoot, state.instanceName);
192
+ // 2. 查重
193
+ if (file.entries.some((e) => e.name === input.name)) {
194
+ throw new MsmAlreadyRegisteredError(input.name);
195
+ }
196
+ // 3. 路径必须在 cwdRoot 内
197
+ const absPath = resolve(state.cwdRoot, input.path);
198
+ if (!isPathInside(state.cwdRoot, absPath)) {
199
+ throw new MsmPathEscapeError(input.name, 'path', input.path, absPath);
200
+ }
201
+ // 4. 脚本文件必须存在
202
+ if (!existsSync(absPath)) {
203
+ throw new MsmScriptNotFoundError(input.name, absPath);
204
+ }
205
+ // 5. 构造 entry
206
+ const usage = input.usage ?? `npx tsx ${input.path}`;
207
+ const newEntry = {
208
+ name: input.name,
209
+ path: input.path,
210
+ skill: state.instanceName,
211
+ category: input.category,
212
+ description: input.description,
213
+ usage,
214
+ flags: input.flags.map((f) => ({
215
+ name: f.name,
216
+ type: f.type,
217
+ ...(f.description !== undefined ? { description: f.description } : {}),
218
+ ...(f.required !== undefined ? { required: f.required } : {}),
219
+ ...(f.default !== undefined ? { default: f.default } : {}),
220
+ })),
221
+ };
222
+ // 6. 写回(保留 schema)
223
+ file.entries.push(newEntry);
224
+ writeRegistryFile(state.cwdRoot, state.instanceName, file);
225
+ log.info('msm', 'msm_admin register wrote registry', { name: input.name, absPath });
226
+ // 7. 自动 commit
227
+ const relRegistry = `.opencode/skills/${state.instanceName}/references/mech-registry.json`;
228
+ try {
229
+ gitAddAndCommit(state.cwdRoot, relRegistry, `chore(msm): register ${input.name}`);
230
+ }
231
+ catch (err) {
232
+ log.warn('msm', 'git commit failed (continuing)', { err: String(err) });
233
+ }
234
+ return `registered "${input.name}" at ${absPath} (commit created)`;
235
+ }
236
+ /** 内部 deregister 实现(v1.17 从 msmDeregisterTool 抽出) */
237
+ async function deregisterMsmInner(input) {
238
+ log.info('msm', 'msm_admin deregister called', { name: input.name });
239
+ const state = getState();
240
+ const file = loadRegistryFile(state.cwdRoot, state.instanceName);
241
+ const idx = file.entries.findIndex((e) => e.name === input.name);
242
+ if (idx === -1) {
243
+ throw new MsmNotInRegistryError(input.name);
244
+ }
245
+ const removed = file.entries.splice(idx, 1)[0];
246
+ writeRegistryFile(state.cwdRoot, state.instanceName, file);
247
+ log.info('msm', 'msm_admin deregister wrote registry', { name: input.name, path: removed.path });
248
+ const relRegistry = `.opencode/skills/${state.instanceName}/references/mech-registry.json`;
249
+ try {
250
+ gitAddAndCommit(state.cwdRoot, relRegistry, `chore(msm): deregister ${input.name}`);
251
+ }
252
+ catch (err) {
253
+ log.warn('msm', 'git commit failed (continuing)', { err: String(err) });
254
+ }
255
+ return `deregistered "${input.name}" (was at ${removed.path}; script file NOT deleted — clean up manually if needed)`;
256
+ }
257
+ export const msmAdminTool = tool({
258
+ description: 'Register or deregister an MSM (Mech/Semi-Mech) in mech-registry.json. ' +
259
+ '**v1.17**: replaces the old msm_register + msm_deregister tools with a single tool + action enum. ' +
260
+ 'Auto-commits the registry change as "chore(msm): register <name>" or "chore(msm): deregister <name>".',
261
+ args: {
262
+ action: z
263
+ .enum(['register', 'deregister'])
264
+ .describe('operation to perform: register (add MSM to registry) or deregister (remove from registry)'),
265
+ name: z
266
+ .string()
267
+ .min(1)
268
+ .describe('unique MSM name (kebab-case recommended); for both register and deregister'),
269
+ // register-specific (required when action=register, ignored otherwise)
270
+ path: z
271
+ .string()
272
+ .optional()
273
+ .describe('[register] script path, relative to cwd root (e.g. ".opencode/skills/home-serenity/scripts/foo.ts"). Required for register.'),
274
+ description: z
275
+ .string()
276
+ .optional()
277
+ .describe('[register] one-line description of what the MSM does. Required for register.'),
278
+ category: z
279
+ .enum(['mech', 'semi-mech'])
280
+ .optional()
281
+ .describe('[register] mech = pure TS, no LLM; semi-mech = TS + LLM decision points. Required for register.'),
282
+ flags: z
283
+ .array(z.object({
284
+ name: z.string(),
285
+ type: z.string().default('string'),
286
+ description: z.string().optional(),
287
+ required: z.boolean().optional(),
288
+ default: z.unknown().optional(),
289
+ }))
290
+ .optional()
291
+ .describe('[register] flag schema; type:"path" enables v0.1-2 path-escape guard. Defaults to [] when omitted.'),
292
+ usage: z
293
+ .string()
294
+ .optional()
295
+ .describe('[register] one-line usage hint; default = "npx tsx <path>"'),
296
+ },
297
+ execute: async (input) => {
298
+ await ensureReady();
299
+ if (input.action === 'register') {
300
+ if (!input.path || !input.description || !input.category) {
301
+ throw new Error('msm_admin: action=register requires path, description, category. ' +
302
+ 'deregister only needs name.');
303
+ }
304
+ return await registerMsmInner({
305
+ name: input.name,
306
+ path: input.path,
307
+ description: input.description,
308
+ category: input.category,
309
+ flags: input.flags ?? [],
310
+ usage: input.usage,
311
+ });
312
+ }
313
+ return await deregisterMsmInner({ name: input.name });
314
+ },
315
+ });
316
+ /* 最终 4 tool slot:bash (override) + msm_list + msm_exec + msm_admin */
317
+ //# sourceMappingURL=msm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msm.js","sourceRoot":"","sources":["../src/msm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * session/lib.ts — 会话管理核心逻辑
3
+ *
4
+ * 供 session-tool.ts 消费,实现会话 CRUD + 健康检查 + 归档。
5
+ */
6
+ /** list 子命令 */
7
+ export declare function listSessions(sessionsDir: string): string;
8
+ /** show 子命令 */
9
+ export declare function showSession(sessionsDir: string, name: string): string;
10
+ /** create 子命令 */
11
+ export interface CreateSessionOptions {
12
+ sessionsDir: string;
13
+ root: string;
14
+ desc: string;
15
+ type: 'item' | 'project';
16
+ goal?: string;
17
+ dryRun: boolean;
18
+ }
19
+ export declare function createSession(opts: CreateSessionOptions): string;
20
+ /** health 子命令 */
21
+ export declare function healthCheck(sessionsDir: string): string;
22
+ /** archive 子命令 */
23
+ export interface ArchiveOptions {
24
+ sessionsDir: string;
25
+ name?: string;
26
+ dryRun: boolean;
27
+ }
28
+ export declare function archiveSessions(opts: ArchiveOptions): string;
29
+ /** summary 子命令 */
30
+ export declare function sessionSummary(sessionsDir: string): string;
31
+ /** 事实核对:检查 SESSION.md 声明与实际情况的一致性 */
32
+ export declare function qaSession(sessionsDir: string, name: string): string;
33
+ //# sourceMappingURL=lib.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../src/session/lib.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAsHH,eAAe;AACf,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAcxD;AAED,eAAe;AACf,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAarE;AAED,iBAAiB;AACjB,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAmEhE;AAED,iBAAiB;AACjB,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAkDvD;AAED,kBAAkB;AAClB,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CA6D5D;AAED,kBAAkB;AAClB,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAqC1D;AAUD,qCAAqC;AACrC,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CA2MnE"}