@coralai/sps-cli 0.56.1 → 0.56.3

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 (99) hide show
  1. package/dist/console/index.d.ts.map +1 -1
  2. package/dist/console/index.js +31 -0
  3. package/dist/console/index.js.map +1 -1
  4. package/dist/console/routes/chat.d.ts +8 -0
  5. package/dist/console/routes/chat.d.ts.map +1 -1
  6. package/dist/console/routes/chat.js +157 -30
  7. package/dist/console/routes/chat.js.map +1 -1
  8. package/dist/main.js +0 -0
  9. package/dist/services/ChatService.d.ts +10 -0
  10. package/dist/services/ChatService.d.ts.map +1 -1
  11. package/dist/services/ChatService.js +9 -1
  12. package/dist/services/ChatService.js.map +1 -1
  13. package/package.json +3 -2
  14. package/profiles/_template.md +48 -0
  15. package/profiles/architect.md +139 -0
  16. package/profiles/backend.md +163 -0
  17. package/profiles/critic.md +35 -0
  18. package/profiles/frontend.md +122 -0
  19. package/profiles/fullstack.md +179 -0
  20. package/profiles/optimizer.md +151 -0
  21. package/profiles/phaser.md +109 -0
  22. package/profiles/prototyper.md +171 -0
  23. package/profiles/reviewer.md +122 -0
  24. package/profiles/security.md +154 -0
  25. package/profiles/senior.md +155 -0
  26. package/profiles/typescript.md +65 -0
  27. package/profiles/writer.md +201 -0
  28. package/dist/commands/wikiCommand.d.ts +0 -77
  29. package/dist/commands/wikiCommand.d.ts.map +0 -1
  30. package/dist/commands/wikiCommand.js +0 -489
  31. package/dist/commands/wikiCommand.js.map +0 -1
  32. package/dist/core/skillStore.d.ts +0 -55
  33. package/dist/core/skillStore.d.ts.map +0 -1
  34. package/dist/core/skillStore.js +0 -224
  35. package/dist/core/skillStore.js.map +0 -1
  36. package/dist/core/wiki/frontmatter.d.ts +0 -55
  37. package/dist/core/wiki/frontmatter.d.ts.map +0 -1
  38. package/dist/core/wiki/frontmatter.js +0 -109
  39. package/dist/core/wiki/frontmatter.js.map +0 -1
  40. package/dist/core/wiki/hot.d.ts +0 -27
  41. package/dist/core/wiki/hot.d.ts.map +0 -1
  42. package/dist/core/wiki/hot.js +0 -124
  43. package/dist/core/wiki/hot.js.map +0 -1
  44. package/dist/core/wiki/index-builder.d.ts +0 -37
  45. package/dist/core/wiki/index-builder.d.ts.map +0 -1
  46. package/dist/core/wiki/index-builder.js +0 -130
  47. package/dist/core/wiki/index-builder.js.map +0 -1
  48. package/dist/core/wiki/linter.d.ts +0 -76
  49. package/dist/core/wiki/linter.d.ts.map +0 -1
  50. package/dist/core/wiki/linter.js +0 -280
  51. package/dist/core/wiki/linter.js.map +0 -1
  52. package/dist/core/wiki/log.d.ts +0 -24
  53. package/dist/core/wiki/log.d.ts.map +0 -1
  54. package/dist/core/wiki/log.js +0 -107
  55. package/dist/core/wiki/log.js.map +0 -1
  56. package/dist/core/wiki/manifest.d.ts +0 -59
  57. package/dist/core/wiki/manifest.d.ts.map +0 -1
  58. package/dist/core/wiki/manifest.js +0 -180
  59. package/dist/core/wiki/manifest.js.map +0 -1
  60. package/dist/core/wiki/page.d.ts +0 -72
  61. package/dist/core/wiki/page.d.ts.map +0 -1
  62. package/dist/core/wiki/page.js +0 -221
  63. package/dist/core/wiki/page.js.map +0 -1
  64. package/dist/core/wiki/reader.d.ts +0 -102
  65. package/dist/core/wiki/reader.d.ts.map +0 -1
  66. package/dist/core/wiki/reader.js +0 -225
  67. package/dist/core/wiki/reader.js.map +0 -1
  68. package/dist/core/wiki/scaffold.d.ts +0 -42
  69. package/dist/core/wiki/scaffold.d.ts.map +0 -1
  70. package/dist/core/wiki/scaffold.js +0 -223
  71. package/dist/core/wiki/scaffold.js.map +0 -1
  72. package/dist/core/wiki/searcher.d.ts +0 -73
  73. package/dist/core/wiki/searcher.d.ts.map +0 -1
  74. package/dist/core/wiki/searcher.js +0 -216
  75. package/dist/core/wiki/searcher.js.map +0 -1
  76. package/dist/core/wiki/sources.d.ts +0 -84
  77. package/dist/core/wiki/sources.d.ts.map +0 -1
  78. package/dist/core/wiki/sources.js +0 -261
  79. package/dist/core/wiki/sources.js.map +0 -1
  80. package/dist/core/wiki/types.d.ts +0 -441
  81. package/dist/core/wiki/types.d.ts.map +0 -1
  82. package/dist/core/wiki/types.js +0 -109
  83. package/dist/core/wiki/types.js.map +0 -1
  84. package/dist/shared/wikiPaths.d.ts +0 -38
  85. package/dist/shared/wikiPaths.d.ts.map +0 -1
  86. package/dist/shared/wikiPaths.js +0 -89
  87. package/dist/shared/wikiPaths.js.map +0 -1
  88. package/project-template/.claude/CLAUDE.md +0 -66
  89. package/project-template/.claude/hooks/start.sh +0 -44
  90. package/project-template/.claude/hooks/stop.sh +0 -54
  91. package/project-template/.claude/rules/.gitkeep +0 -0
  92. package/project-template/.claude/settings.json +0 -32
  93. package/project-template/.claude/settings.local.json.template +0 -3
  94. package/project-template/.claude/skills/.gitkeep +0 -0
  95. package/project-template/README.md +0 -10
  96. package/project-template/batch_scheduler.sh +0 -8
  97. package/project-template/conf.template +0 -61
  98. package/project-template/deploy.sh +0 -3
  99. package/project-template/pm_meta/.gitkeep +0 -0
@@ -1,77 +0,0 @@
1
- export interface WikiInitOptions {
2
- readonly json?: boolean;
3
- }
4
- export declare function executeWikiInit(projectName: string, opts?: WikiInitOptions): void;
5
- export interface WikiUpdateOptions {
6
- /** Skip Worker invocation; just print the diff */
7
- readonly plan?: boolean;
8
- /** Re-scan and rewrite manifest from current FS state (post-Worker finalize) */
9
- readonly finalize?: boolean;
10
- readonly json?: boolean;
11
- }
12
- export declare function executeWikiUpdate(projectName: string, opts?: WikiUpdateOptions): void;
13
- export interface WikiReadOptions {
14
- readonly query: string;
15
- readonly skills?: readonly string[];
16
- readonly pinned?: readonly string[];
17
- readonly json?: boolean;
18
- readonly budgetTokens?: number;
19
- }
20
- export declare function executeWikiRead(projectName: string, opts: WikiReadOptions): void;
21
- export interface WikiCheckOptions {
22
- readonly json?: boolean;
23
- /** Reserved for future auto-fix; v0 only reports. */
24
- readonly fix?: boolean;
25
- }
26
- export declare function executeWikiCheck(projectName: string, opts?: WikiCheckOptions): void;
27
- export interface WikiAddOptions {
28
- readonly src: string;
29
- /** Subdir under .raw/ to drop the file in (default: 'misc') */
30
- readonly category?: string;
31
- /** Suppress the post-copy update --plan invocation */
32
- readonly noIngest?: boolean;
33
- readonly json?: boolean;
34
- }
35
- export declare function executeWikiAdd(projectName: string, opts: WikiAddOptions): void;
36
- export interface WikiListOptions {
37
- readonly type?: string;
38
- readonly tag?: string;
39
- readonly json?: boolean;
40
- }
41
- export declare function executeWikiList(projectName: string, opts?: WikiListOptions): void;
42
- export interface WikiGetOptions {
43
- readonly pageId: string;
44
- readonly json?: boolean;
45
- }
46
- export declare function executeWikiGet(projectName: string, opts: WikiGetOptions): void;
47
- export interface WikiStatusOptions {
48
- readonly json?: boolean;
49
- }
50
- export declare function executeWikiStatus(projectName: string, opts?: WikiStatusOptions): void;
51
- export interface WikiRouteArgs {
52
- /** Subcommand: init / update / read / check / add / list / get / status */
53
- readonly subcommand: string | null;
54
- /** Project name */
55
- readonly project: string;
56
- /** Positional args after project */
57
- readonly positionals: readonly string[];
58
- /** Boolean flag map */
59
- readonly flags: Record<string, boolean>;
60
- /** Optional skills array (parsed by main.ts from --skills) */
61
- readonly skills?: readonly string[];
62
- /** Optional pinned pages array */
63
- readonly pinned?: readonly string[];
64
- /** Optional budget tokens override */
65
- readonly budgetTokens?: number;
66
- /** Filter values for list */
67
- readonly type?: string;
68
- readonly tag?: string;
69
- /** Add subcommand options */
70
- readonly category?: string;
71
- }
72
- /**
73
- * Dispatches to the correct subcommand. Throws on usage errors so main.ts can
74
- * print + exit(2).
75
- */
76
- export declare function executeWikiCommand(args: WikiRouteArgs): void;
77
- //# sourceMappingURL=wikiCommand.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wikiCommand.d.ts","sourceRoot":"","sources":["../../src/commands/wikiCommand.ts"],"names":[],"mappings":"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"}
@@ -1,489 +0,0 @@
1
- /**
2
- * @module commands/wikiCommand
3
- * @description `sps wiki <init|update|read|check|add|list|get|status>` CLI 入口
4
- *
5
- * @layer delivery
6
- *
7
- * 主命令(doc-28 §7):
8
- * - init — 物理脚手架(建目录 + 写模板)
9
- * - update — 计算 source diff,输出 plan / 写 finalize
10
- * - read — 5 层 wikiRead + format → 打印
11
- *
12
- * 辅助命令(doc-28 §10):
13
- * - check — lint:orphan / dead-link / fm-gap / stale
14
- * - add — 复制外部源到 wiki/.raw/<type>/ 并触发更新
15
- * - list — 按 type/tag 过滤列页
16
- * - get — 取单页全文
17
- * - status — 哪些 source 比对应 page 新(待 update)
18
- *
19
- * **commands/ 层只做参数解析 + I/O 编排**。所有逻辑下沉到 core/wiki/。
20
- */
21
- import { copyFileSync, existsSync, mkdirSync, readFileSync, statSync } from 'node:fs';
22
- import { basename, isAbsolute, resolve } from 'node:path';
23
- import { ProjectContext } from '../core/context.js';
24
- import { findOutdatedPages, lintWiki, } from '../core/wiki/linter.js';
25
- import { appendLog } from '../core/wiki/log.js';
26
- import { readManifest, writeManifest } from '../core/wiki/manifest.js';
27
- import { getPageById, listValidPages } from '../core/wiki/page.js';
28
- import { formatWikiContext, wikiRead } from '../core/wiki/reader.js';
29
- import { initWiki } from '../core/wiki/scaffold.js';
30
- import { diffAgainstManifest, discoverSources } from '../core/wiki/sources.js';
31
- import { wikiManifestFile, wikiRawDir } from '../shared/wikiPaths.js';
32
- function resolveTarget(projectName) {
33
- const ctx = ProjectContext.load(projectName);
34
- if (!existsSync(ctx.paths.repoDir)) {
35
- throw new Error(`Repo dir not found for project "${projectName}": ${ctx.paths.repoDir}`);
36
- }
37
- return { projectName, repoDir: ctx.paths.repoDir };
38
- }
39
- export function executeWikiInit(projectName, opts = {}) {
40
- const target = resolveTarget(projectName);
41
- const report = initWiki(target.repoDir, { projectName });
42
- // Best-effort log entry
43
- try {
44
- appendLog(target.repoDir, {
45
- action: 'init',
46
- target: 'wiki/',
47
- message: `Initialized wiki for ${projectName}`,
48
- });
49
- }
50
- catch {
51
- // log failure isn't fatal
52
- }
53
- if (opts.json) {
54
- console.log(JSON.stringify(report, null, 2));
55
- return;
56
- }
57
- console.log(`✓ Wiki ready at ${report.wikiDir}`);
58
- if (report.created.length > 0) {
59
- console.log(` Created ${report.created.length} dir(s)`);
60
- }
61
- if (report.filesWritten.length > 0) {
62
- console.log(` Wrote ${report.filesWritten.length} file(s):`);
63
- for (const f of report.filesWritten)
64
- console.log(` + ${f}`);
65
- }
66
- if (report.filesSkipped.length > 0) {
67
- console.log(` Preserved ${report.filesSkipped.length} existing file(s)`);
68
- }
69
- if (report.gitignoreUpdated) {
70
- console.log(' Updated .gitignore');
71
- }
72
- console.log('');
73
- console.log('Next: review wiki/WIKI.md sources config, then run:');
74
- console.log(` sps wiki update ${projectName}`);
75
- }
76
- export function executeWikiUpdate(projectName, opts = {}) {
77
- const target = resolveTarget(projectName);
78
- const wikiPresent = existsSync(resolve(target.repoDir, 'wiki', 'WIKI.md'));
79
- if (!wikiPresent) {
80
- throw new Error(`wiki/WIKI.md missing — run "sps wiki init ${projectName}" first.`);
81
- }
82
- const { sources, emptyPatterns } = discoverSources(target.repoDir);
83
- const manifestPath = wikiManifestFile(target.repoDir);
84
- const manifest = readManifest(manifestPath, (msg) => console.warn(` ⚠ ${msg}`));
85
- const diff = diffAgainstManifest(sources, manifest);
86
- const plan = {
87
- added: [...diff.added],
88
- changed: [...diff.changed],
89
- removed: [...diff.removed],
90
- unchanged: [...diff.unchanged],
91
- emptyPatterns: [...emptyPatterns],
92
- };
93
- if (opts.finalize) {
94
- finalizeManifest(target.repoDir, sources, manifest, manifestPath);
95
- if (!opts.json) {
96
- console.log(`✓ Manifest finalized: ${sources.length} source(s) tracked`);
97
- }
98
- else {
99
- console.log(JSON.stringify({ ...plan, finalized: true }, null, 2));
100
- }
101
- return;
102
- }
103
- if (opts.json) {
104
- console.log(JSON.stringify(plan, null, 2));
105
- return;
106
- }
107
- printPlan(plan, projectName);
108
- }
109
- function finalizeManifest(repoDir, sources, prev, manifestPath) {
110
- const now = new Date().toISOString();
111
- const next = {
112
- version: 1,
113
- updated_at: now,
114
- sources: {},
115
- };
116
- for (const s of sources) {
117
- if (!s.hash)
118
- continue;
119
- const existing = prev.sources[s.path];
120
- next.sources[s.path] = {
121
- type: existing?.type ?? 'unknown',
122
- sha256: s.hash,
123
- ingested_at: existing?.sha256 === s.hash ? (existing.ingested_at ?? now) : now,
124
- pages: existing?.pages ?? [],
125
- };
126
- }
127
- writeManifest(manifestPath, next);
128
- try {
129
- appendLog(repoDir, {
130
- action: 'update',
131
- target: 'wiki/.manifest.json',
132
- message: `Finalized manifest with ${Object.keys(next.sources).length} source(s)`,
133
- });
134
- }
135
- catch {
136
- // non-fatal
137
- }
138
- }
139
- function printPlan(plan, projectName) {
140
- const totalChanged = plan.added.length + plan.changed.length + plan.removed.length;
141
- console.log(`Wiki source diff for "${projectName}":`);
142
- console.log(` ${plan.added.length} added · ${plan.changed.length} changed · ${plan.removed.length} removed · ${plan.unchanged.length} unchanged`);
143
- console.log('');
144
- if (plan.added.length > 0) {
145
- console.log('Added:');
146
- for (const p of plan.added.slice(0, 50))
147
- console.log(` + ${p}`);
148
- if (plan.added.length > 50)
149
- console.log(` … (+${plan.added.length - 50} more)`);
150
- console.log('');
151
- }
152
- if (plan.changed.length > 0) {
153
- console.log('Changed:');
154
- for (const p of plan.changed.slice(0, 50))
155
- console.log(` ~ ${p}`);
156
- if (plan.changed.length > 50)
157
- console.log(` … (+${plan.changed.length - 50} more)`);
158
- console.log('');
159
- }
160
- if (plan.removed.length > 0) {
161
- console.log('Removed:');
162
- for (const p of plan.removed.slice(0, 50))
163
- console.log(` - ${p}`);
164
- if (plan.removed.length > 50)
165
- console.log(` … (+${plan.removed.length - 50} more)`);
166
- console.log('');
167
- }
168
- if (plan.emptyPatterns.length > 0) {
169
- console.log('Patterns matched 0 files (check WIKI.md):');
170
- for (const p of plan.emptyPatterns)
171
- console.log(` ? ${p}`);
172
- console.log('');
173
- }
174
- if (totalChanged === 0) {
175
- console.log('✓ Wiki is up to date.');
176
- return;
177
- }
178
- console.log('Next steps:');
179
- console.log(' 1. Open the wiki-update skill to ingest these sources via Worker');
180
- console.log(' (the skill walks Worker through reading sources + writing pages)');
181
- console.log(` 2. After pages are written, run:`);
182
- console.log(` sps wiki update ${projectName} --finalize`);
183
- console.log(' to flush the manifest with current FS state.');
184
- }
185
- export function executeWikiRead(projectName, opts) {
186
- const target = resolveTarget(projectName);
187
- const ctx = wikiRead({
188
- repoDir: target.repoDir,
189
- cardTitle: opts.query,
190
- cardDesc: '',
191
- cardSkills: opts.skills ?? [],
192
- pinnedPages: opts.pinned ?? [],
193
- }, opts.budgetTokens ? { budgetTokens: opts.budgetTokens } : {});
194
- if (opts.json) {
195
- console.log(JSON.stringify({
196
- tokensEstimate: ctx.tokensEstimate,
197
- hot: ctx.hot,
198
- indexSummary: ctx.indexSummary,
199
- pages: ctx.pages,
200
- }, null, 2));
201
- return;
202
- }
203
- const md = formatWikiContext(ctx);
204
- console.log(md);
205
- console.error(`\n— ${ctx.pages.length} page(s) · ~${ctx.tokensEstimate} token(s)`);
206
- }
207
- export function executeWikiCheck(projectName, opts = {}) {
208
- const target = resolveTarget(projectName);
209
- const pages = listValidPages(target.repoDir);
210
- const manifest = readManifest(wikiManifestFile(target.repoDir));
211
- const report = lintWiki({ pages, manifest, repoDir: target.repoDir });
212
- if (opts.json) {
213
- console.log(JSON.stringify(report, null, 2));
214
- }
215
- else {
216
- printLintReport(report);
217
- }
218
- if (opts.fix) {
219
- console.error('\nNote: --fix is not yet implemented. Open issues are reported above; resolve manually.');
220
- }
221
- // Exit code is set by the caller (router); leave that to main.ts after
222
- // we throw / return.
223
- if (report.errorCount > 0) {
224
- throw new LintFailure(report);
225
- }
226
- }
227
- class LintFailure extends Error {
228
- report;
229
- constructor(report) {
230
- super(`Wiki lint failed: ${report.errorCount} error(s), ${report.warnCount} warning(s)`);
231
- this.report = report;
232
- this.name = 'LintFailure';
233
- }
234
- }
235
- function printLintReport(report) {
236
- if (report.issues.length === 0) {
237
- console.log('✓ Wiki check passed: no issues.');
238
- return;
239
- }
240
- console.log(`Wiki check: ${report.errorCount} error(s), ${report.warnCount} warning(s)`);
241
- console.log(` by kind — orphan: ${report.counts.orphan}, dead-link: ${report.counts['dead-link']}, fm-gap: ${report.counts['fm-gap']}, stale: ${report.counts.stale}`);
242
- console.log('');
243
- const grouped = new Map();
244
- for (const issue of report.issues) {
245
- const key = issue.kind;
246
- if (!grouped.has(key))
247
- grouped.set(key, []);
248
- grouped.get(key).push(issue);
249
- }
250
- for (const [kind, list] of grouped) {
251
- console.log(`── ${kind} (${list.length}) ──`);
252
- for (const i of list.slice(0, 30)) {
253
- const sev = i.severity === 'error' ? '✗' : '!';
254
- const where = i.pageId ?? i.target ?? '(repo)';
255
- console.log(` ${sev} [${where}] ${i.message}`);
256
- }
257
- if (list.length > 30)
258
- console.log(` … (+${list.length - 30} more)`);
259
- console.log('');
260
- }
261
- }
262
- export function executeWikiAdd(projectName, opts) {
263
- const target = resolveTarget(projectName);
264
- if (!existsSync(resolve(target.repoDir, 'wiki', 'WIKI.md'))) {
265
- throw new Error(`wiki/WIKI.md missing — run "sps wiki init ${projectName}" first.`);
266
- }
267
- const srcPath = isAbsolute(opts.src) ? opts.src : resolve(process.cwd(), opts.src);
268
- if (!existsSync(srcPath)) {
269
- throw new Error(`Source not found: ${srcPath}`);
270
- }
271
- const st = statSync(srcPath);
272
- if (!st.isFile()) {
273
- throw new Error(`Source must be a file (got: ${srcPath})`);
274
- }
275
- const category = (opts.category ?? 'misc').replace(/[^a-z0-9_-]/gi, '_');
276
- const destDir = resolve(wikiRawDir(target.repoDir), category);
277
- if (!existsSync(destDir))
278
- mkdirSync(destDir, { recursive: true });
279
- const destPath = resolve(destDir, basename(srcPath));
280
- copyFileSync(srcPath, destPath);
281
- try {
282
- appendLog(target.repoDir, {
283
- action: 'add',
284
- target: destPath,
285
- message: `Copied ${basename(srcPath)} → wiki/.raw/${category}/`,
286
- });
287
- }
288
- catch {
289
- // non-fatal
290
- }
291
- const result = {
292
- src: srcPath,
293
- dest: destPath,
294
- category,
295
- };
296
- if (opts.json) {
297
- console.log(JSON.stringify(result, null, 2));
298
- }
299
- else {
300
- console.log(`✓ Copied: ${srcPath}`);
301
- console.log(` → ${destPath}`);
302
- if (!opts.noIngest) {
303
- console.log('');
304
- console.log(`Run \`sps wiki update ${projectName}\` to ingest the new source.`);
305
- }
306
- }
307
- }
308
- export function executeWikiList(projectName, opts = {}) {
309
- const target = resolveTarget(projectName);
310
- const types = opts.type ? [opts.type] : undefined;
311
- const pages = listValidPages(target.repoDir, types ? { types } : {});
312
- const filtered = opts.tag
313
- ? pages.filter((p) => p.frontmatter.tags.some((t) => t.toLowerCase() === opts.tag.toLowerCase()))
314
- : pages;
315
- filtered.sort((a, b) => a.pageId.localeCompare(b.pageId));
316
- if (opts.json) {
317
- const out = filtered.map((p) => ({
318
- pageId: p.pageId,
319
- title: p.frontmatter.title,
320
- type: p.frontmatter.type,
321
- tags: p.frontmatter.tags,
322
- status: p.frontmatter.status,
323
- }));
324
- console.log(JSON.stringify(out, null, 2));
325
- return;
326
- }
327
- if (filtered.length === 0) {
328
- console.log('(no pages match)');
329
- return;
330
- }
331
- for (const p of filtered) {
332
- const tags = p.frontmatter.tags.length > 0 ? `[${p.frontmatter.tags.join(', ')}]` : '';
333
- console.log(` ${p.frontmatter.type.padEnd(8)} ${p.pageId.padEnd(40)} ${p.frontmatter.status.padEnd(11)} ${tags}`);
334
- }
335
- console.log(`\n— ${filtered.length} page(s)`);
336
- }
337
- export function executeWikiGet(projectName, opts) {
338
- const target = resolveTarget(projectName);
339
- const page = getPageById(target.repoDir, opts.pageId);
340
- if (!page) {
341
- throw new Error(`Page not found: ${opts.pageId}`);
342
- }
343
- if (opts.json) {
344
- console.log(JSON.stringify({
345
- pageId: page.pageId,
346
- filePath: page.filePath,
347
- frontmatter: page.frontmatter,
348
- body: page.body,
349
- }, null, 2));
350
- return;
351
- }
352
- // Print the raw file contents to stdout (frontmatter + body)
353
- const raw = readFileSync(page.filePath, 'utf-8');
354
- console.log(raw);
355
- }
356
- export function executeWikiStatus(projectName, opts = {}) {
357
- const target = resolveTarget(projectName);
358
- const wikiPresent = existsSync(resolve(target.repoDir, 'wiki', 'WIKI.md'));
359
- if (!wikiPresent) {
360
- throw new Error(`wiki/WIKI.md missing — run "sps wiki init ${projectName}" first.`);
361
- }
362
- const { sources } = discoverSources(target.repoDir);
363
- const manifest = readManifest(wikiManifestFile(target.repoDir));
364
- const diff = diffAgainstManifest(sources, manifest);
365
- const pages = listValidPages(target.repoDir);
366
- const outdated = findOutdatedPages(manifest, pages, target.repoDir);
367
- const status = {
368
- pages: pages.length,
369
- sources: sources.length,
370
- sourcesTracked: Object.keys(manifest.sources).length,
371
- diff: {
372
- added: diff.added.length,
373
- changed: diff.changed.length,
374
- removed: diff.removed.length,
375
- unchanged: diff.unchanged.length,
376
- },
377
- outdated: outdated.map((o) => ({
378
- sourcePath: o.sourcePath,
379
- pageIds: o.pageIds,
380
- sourceMtime: o.sourceMtime.toISOString(),
381
- })),
382
- };
383
- if (opts.json) {
384
- console.log(JSON.stringify(status, null, 2));
385
- return;
386
- }
387
- console.log(`Wiki status — ${projectName}`);
388
- console.log(` Pages tracked: ${status.pages}`);
389
- console.log(` Sources discovered: ${status.sources}`);
390
- console.log(` Sources in manifest: ${status.sourcesTracked}`);
391
- console.log('');
392
- console.log(` Diff: +${status.diff.added} ~${status.diff.changed} -${status.diff.removed} =${status.diff.unchanged}`);
393
- if (status.diff.added + status.diff.changed + status.diff.removed > 0) {
394
- console.log(` Run \`sps wiki update ${projectName}\` to see details.`);
395
- }
396
- if (status.outdated.length > 0) {
397
- console.log('');
398
- console.log(` Pages with stale source (${status.outdated.length}):`);
399
- for (const o of status.outdated.slice(0, 10)) {
400
- console.log(` ${o.sourcePath}`);
401
- for (const pid of o.pageIds)
402
- console.log(` → ${pid}`);
403
- }
404
- if (status.outdated.length > 10) {
405
- console.log(` … (+${status.outdated.length - 10} more)`);
406
- }
407
- }
408
- }
409
- /**
410
- * Dispatches to the correct subcommand. Throws on usage errors so main.ts can
411
- * print + exit(2).
412
- */
413
- export function executeWikiCommand(args) {
414
- const sub = args.subcommand;
415
- if (!sub) {
416
- throw new Error('Usage: sps wiki <init|update|read|check|add|list|get|status> <project> [args]');
417
- }
418
- if (sub === 'init') {
419
- executeWikiInit(args.project, { json: args.flags.json });
420
- return;
421
- }
422
- if (sub === 'update') {
423
- executeWikiUpdate(args.project, {
424
- plan: args.flags.plan,
425
- finalize: args.flags.finalize,
426
- json: args.flags.json,
427
- });
428
- return;
429
- }
430
- if (sub === 'read') {
431
- const query = args.positionals.join(' ').trim();
432
- if (!query) {
433
- throw new Error(`Usage: sps wiki read <project> "<query>"`);
434
- }
435
- executeWikiRead(args.project, {
436
- query,
437
- skills: args.skills,
438
- pinned: args.pinned,
439
- json: args.flags.json,
440
- budgetTokens: args.budgetTokens,
441
- });
442
- return;
443
- }
444
- if (sub === 'check') {
445
- executeWikiCheck(args.project, {
446
- json: args.flags.json,
447
- fix: args.flags.fix,
448
- });
449
- return;
450
- }
451
- if (sub === 'add') {
452
- const src = args.positionals[0];
453
- if (!src) {
454
- throw new Error('Usage: sps wiki add <project> <file> [--category <name>] [--no-ingest]');
455
- }
456
- executeWikiAdd(args.project, {
457
- src,
458
- category: args.category,
459
- noIngest: args.flags['no-ingest'],
460
- json: args.flags.json,
461
- });
462
- return;
463
- }
464
- if (sub === 'list') {
465
- executeWikiList(args.project, {
466
- type: args.type,
467
- tag: args.tag,
468
- json: args.flags.json,
469
- });
470
- return;
471
- }
472
- if (sub === 'get') {
473
- const pageId = args.positionals[0];
474
- if (!pageId) {
475
- throw new Error('Usage: sps wiki get <project> <pageId>');
476
- }
477
- executeWikiGet(args.project, {
478
- pageId,
479
- json: args.flags.json,
480
- });
481
- return;
482
- }
483
- if (sub === 'status') {
484
- executeWikiStatus(args.project, { json: args.flags.json });
485
- return;
486
- }
487
- throw new Error(`Unknown wiki subcommand: "${sub}". Expected one of: init, update, read, check, add, list, get, status.`);
488
- }
489
- //# sourceMappingURL=wikiCommand.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wikiCommand.js","sourceRoot":"","sources":["../../src/commands/wikiCommand.ts"],"names":[],"mappings":"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"}
@@ -1,55 +0,0 @@
1
- export type SkillLinkState = 'absent' | 'linked' | 'frozen';
2
- export interface SkillInfo {
3
- name: string;
4
- userPath: string;
5
- hasSkillMd: boolean;
6
- }
7
- export interface ProjectSkillState extends SkillInfo {
8
- state: SkillLinkState;
9
- target?: string;
10
- }
11
- export declare function userSkillsRoot(): string;
12
- export declare function listUserSkills(): SkillInfo[];
13
- export declare function projectSkillsDir(projectDir: string): string;
14
- export declare function projectSkillPath(projectDir: string, name: string): string;
15
- export declare function inspectProjectSkill(projectDir: string, name: string): ProjectSkillState | null;
16
- export type AddResult = 'linked' | 'copied' | 'skipped-linked' | 'skipped-frozen' | 'skipped-absent';
17
- export declare function addSkillToProject(projectDir: string, name: string): AddResult;
18
- export declare function removeSkillFromProject(projectDir: string, name: string): boolean;
19
- export declare function freezeSkillInProject(projectDir: string, name: string): boolean;
20
- export declare function unfreezeSkillInProject(projectDir: string, name: string): boolean;
21
- /**
22
- * Bulk link every user-level skill into the project. Idempotent:
23
- * - absent → symlink(或回退 cpSync)
24
- * - linked → 保留
25
- * - frozen → 保留(用户已 freeze 的不重建)
26
- */
27
- export declare function syncAllSkillsToProject(projectDir: string): {
28
- linked: number;
29
- copied: number;
30
- kept: number;
31
- };
32
- /**
33
- * 把 bundled skills(npm 包内 skills/)拷贝到 ~/.coral/skills/。
34
- *
35
- * 默认 non-destructive:已存在的 skill 目录保留,不覆盖用户改动。
36
- * `force=true`(v0.51.2+):用 bundled 的 SKILL.md 覆盖(升级 sps-cli 后拉新 SOP)。
37
- * 注意:force 会覆盖用户对 ~/.coral/skills/<name>/ 的直接编辑。如想保留定制,
38
- * 先 `sps skill freeze <name> --project <p>` 把它固化到项目级(项目级副本不受
39
- * sync 影响)。
40
- *
41
- * Bundled → user 必须是 cpSync,因为 npm 包路径会随重装变化,symlink 会失效。
42
- */
43
- export declare function syncBundledSkillsToUser(bundledSkillsDir: string, opts?: {
44
- force?: boolean;
45
- }): {
46
- copied: number;
47
- updated: number;
48
- skipped: number;
49
- };
50
- /**
51
- * 把 .claude/skills/ 条目追加到 .gitignore(幂等)。
52
- * 项目级 skill 是 symlink 到本机 ~/.coral/,不该进仓库。
53
- */
54
- export declare function ensureSkillsGitignore(projectDir: string): void;
55
- //# sourceMappingURL=skillStore.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skillStore.d.ts","sourceRoot":"","sources":["../../src/core/skillStore.ts"],"names":[],"mappings":"AAiCA,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE5D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IAClD,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,cAAc,IAAI,SAAS,EAAE,CAoB5C;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAgB9F;AAED,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,QAAQ,GACR,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,CAAC;AAErB,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAmB7E;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAKhF;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAU9E;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAahF;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,GACjB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAYlD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,gBAAgB,EAAE,MAAM,EACxB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAC7B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA0BtD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAY9D"}