@coralai/sps-cli 0.62.1 → 0.63.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 (165) hide show
  1. package/dist/commands/cardAdd.d.ts.map +1 -1
  2. package/dist/commands/cardAdd.js +14 -2
  3. package/dist/commands/cardAdd.js.map +1 -1
  4. package/dist/commands/projectInit.d.ts +1 -10
  5. package/dist/commands/projectInit.d.ts.map +1 -1
  6. package/dist/commands/projectInit.js +0 -26
  7. package/dist/commands/projectInit.js.map +1 -1
  8. package/dist/commands/skillCommand.d.ts.map +1 -1
  9. package/dist/commands/skillCommand.js +76 -4
  10. package/dist/commands/skillCommand.js.map +1 -1
  11. package/dist/commands/tick.d.ts +0 -2
  12. package/dist/commands/tick.d.ts.map +1 -1
  13. package/dist/commands/tick.js +2 -61
  14. package/dist/commands/tick.js.map +1 -1
  15. package/dist/console/index.d.ts.map +1 -1
  16. package/dist/console/index.js +0 -2
  17. package/dist/console/index.js.map +1 -1
  18. package/dist/console/routes/cards.d.ts.map +1 -1
  19. package/dist/console/routes/cards.js +1 -0
  20. package/dist/console/routes/cards.js.map +1 -1
  21. package/dist/console/routes/chat.d.ts.map +1 -1
  22. package/dist/console/routes/chat.js +3 -4
  23. package/dist/console/routes/chat.js.map +1 -1
  24. package/dist/console/routes/fs.js +8 -0
  25. package/dist/console/routes/fs.js.map +1 -1
  26. package/dist/console/routes/projects.d.ts.map +1 -1
  27. package/dist/console/routes/projects.js +0 -3
  28. package/dist/console/routes/projects.js.map +1 -1
  29. package/dist/console/routes/workers.d.ts.map +1 -1
  30. package/dist/console/routes/workers.js +4 -36
  31. package/dist/console/routes/workers.js.map +1 -1
  32. package/dist/console-assets/assets/index-DdWQnwf0.js +849 -0
  33. package/dist/console-assets/assets/index-kvQdjMeT.css +1 -0
  34. package/dist/console-assets/fonts/saiba-45.woff2 +0 -0
  35. package/dist/console-assets/index.html +2 -2
  36. package/dist/core/config.d.ts +2 -4
  37. package/dist/core/config.d.ts.map +1 -1
  38. package/dist/core/config.js +0 -2
  39. package/dist/core/config.js.map +1 -1
  40. package/dist/core/intel/types.d.ts +2 -51
  41. package/dist/core/intel/types.d.ts.map +1 -1
  42. package/dist/core/intel/types.js +2 -2
  43. package/dist/core/skills/SkillsManager.d.ts +7 -1
  44. package/dist/core/skills/SkillsManager.d.ts.map +1 -1
  45. package/dist/core/skills/SkillsManager.js +60 -15
  46. package/dist/core/skills/SkillsManager.js.map +1 -1
  47. package/dist/core/skills/match/embeddingRecall.d.ts +4 -0
  48. package/dist/core/skills/match/embeddingRecall.d.ts.map +1 -0
  49. package/dist/core/skills/match/embeddingRecall.js +101 -0
  50. package/dist/core/skills/match/embeddingRecall.js.map +1 -0
  51. package/dist/core/skills/match/skillEnrich.d.ts +36 -0
  52. package/dist/core/skills/match/skillEnrich.d.ts.map +1 -0
  53. package/dist/core/skills/match/skillEnrich.js +90 -0
  54. package/dist/core/skills/match/skillEnrich.js.map +1 -0
  55. package/dist/core/skills/match/skillMatcher.d.ts +26 -0
  56. package/dist/core/skills/match/skillMatcher.d.ts.map +1 -0
  57. package/dist/core/skills/match/skillMatcher.js +69 -0
  58. package/dist/core/skills/match/skillMatcher.js.map +1 -0
  59. package/dist/core/skills/match/skillSelect.d.ts +20 -0
  60. package/dist/core/skills/match/skillSelect.d.ts.map +1 -0
  61. package/dist/core/skills/match/skillSelect.js +55 -0
  62. package/dist/core/skills/match/skillSelect.js.map +1 -0
  63. package/dist/core/skills/registration.d.ts +32 -0
  64. package/dist/core/skills/registration.d.ts.map +1 -0
  65. package/dist/core/skills/registration.js +141 -0
  66. package/dist/core/skills/registration.js.map +1 -0
  67. package/dist/core/skills/types.d.ts +10 -0
  68. package/dist/core/skills/types.d.ts.map +1 -1
  69. package/dist/engines/StageEngine.d.ts +13 -2
  70. package/dist/engines/StageEngine.d.ts.map +1 -1
  71. package/dist/engines/StageEngine.js +42 -23
  72. package/dist/engines/StageEngine.js.map +1 -1
  73. package/dist/im/router.d.ts +1 -1
  74. package/dist/im/router.d.ts.map +1 -1
  75. package/dist/im/router.js +3 -10
  76. package/dist/im/router.js.map +1 -1
  77. package/dist/interfaces/TaskBackend.d.ts +2 -0
  78. package/dist/interfaces/TaskBackend.d.ts.map +1 -1
  79. package/dist/main.js +2 -46
  80. package/dist/main.js.map +1 -1
  81. package/dist/providers/LLMClient.d.ts +1 -22
  82. package/dist/providers/LLMClient.d.ts.map +1 -1
  83. package/dist/providers/LLMClient.js +5 -90
  84. package/dist/providers/LLMClient.js.map +1 -1
  85. package/dist/providers/MarkdownTaskBackend.d.ts +1 -0
  86. package/dist/providers/MarkdownTaskBackend.d.ts.map +1 -1
  87. package/dist/providers/MarkdownTaskBackend.js +8 -0
  88. package/dist/providers/MarkdownTaskBackend.js.map +1 -1
  89. package/dist/providers/llm/chatTools.d.ts +0 -5
  90. package/dist/providers/llm/chatTools.d.ts.map +1 -1
  91. package/dist/providers/llm/chatTools.js +4 -9
  92. package/dist/providers/llm/chatTools.js.map +1 -1
  93. package/dist/providers/mcp/spsMcpServer.d.ts.map +1 -1
  94. package/dist/providers/mcp/spsMcpServer.js +42 -11
  95. package/dist/providers/mcp/spsMcpServer.js.map +1 -1
  96. package/dist/providers/media/mediaProviders.d.ts +1 -1
  97. package/dist/providers/media/mediaProviders.d.ts.map +1 -1
  98. package/dist/providers/media/mediaProviders.js +1 -1
  99. package/dist/providers/media/mediaProviders.js.map +1 -1
  100. package/dist/providers/models/utilityModels.d.ts +26 -0
  101. package/dist/providers/models/utilityModels.d.ts.map +1 -0
  102. package/dist/providers/models/utilityModels.js +75 -0
  103. package/dist/providers/models/utilityModels.js.map +1 -0
  104. package/dist/services/CardService.d.ts +6 -0
  105. package/dist/services/CardService.d.ts.map +1 -1
  106. package/dist/services/CardService.js +17 -0
  107. package/dist/services/CardService.js.map +1 -1
  108. package/dist/services/ProjectService.d.ts +1 -9
  109. package/dist/services/ProjectService.d.ts.map +1 -1
  110. package/dist/services/ProjectService.js +0 -1
  111. package/dist/services/ProjectService.js.map +1 -1
  112. package/dist/services/WorkerService.d.ts +0 -8
  113. package/dist/services/WorkerService.d.ts.map +1 -1
  114. package/dist/services/WorkerService.js +2 -72
  115. package/dist/services/WorkerService.js.map +1 -1
  116. package/dist/services/container.d.ts +0 -2
  117. package/dist/services/container.d.ts.map +1 -1
  118. package/dist/services/container.js +0 -2
  119. package/dist/services/container.js.map +1 -1
  120. package/dist/shared/types.d.ts +6 -0
  121. package/dist/shared/types.d.ts.map +1 -1
  122. package/package.json +1 -1
  123. package/skills/checklist-review/SKILL.md +2 -0
  124. package/skills/probe-playbook/SKILL.md +10 -1
  125. package/skills/registry.yaml +8 -1
  126. package/skills/skill-creator/SKILL.md +14 -1
  127. package/skills/sps-chat/SKILL.md +33 -11
  128. package/skills/sps-pipeline/SKILL.md +26 -4
  129. package/skills/sps-subagent/SKILL.md +13 -4
  130. package/skills/visual-rubric/SKILL.md +2 -0
  131. package/skills/writer/SKILL.md +2 -0
  132. package/dist/console/routes/smartarrange.d.ts +0 -4
  133. package/dist/console/routes/smartarrange.d.ts.map +0 -1
  134. package/dist/console/routes/smartarrange.js +0 -107
  135. package/dist/console/routes/smartarrange.js.map +0 -1
  136. package/dist/console-assets/assets/index-B5aqtaR6.js +0 -859
  137. package/dist/console-assets/assets/index-IdqQLk1r.css +0 -10
  138. package/dist/core/intel/planStore.d.ts +0 -23
  139. package/dist/core/intel/planStore.d.ts.map +0 -1
  140. package/dist/core/intel/planStore.js +0 -67
  141. package/dist/core/intel/planStore.js.map +0 -1
  142. package/dist/engines/SmartArrangeEngine.d.ts +0 -75
  143. package/dist/engines/SmartArrangeEngine.d.ts.map +0 -1
  144. package/dist/engines/SmartArrangeEngine.js +0 -112
  145. package/dist/engines/SmartArrangeEngine.js.map +0 -1
  146. package/dist/engines/smartarrange/PipelineWorkerExec.d.ts +0 -37
  147. package/dist/engines/smartarrange/PipelineWorkerExec.d.ts.map +0 -1
  148. package/dist/engines/smartarrange/PipelineWorkerExec.js +0 -43
  149. package/dist/engines/smartarrange/PipelineWorkerExec.js.map +0 -1
  150. package/dist/engines/smartarrange/cardSink.d.ts +0 -29
  151. package/dist/engines/smartarrange/cardSink.d.ts.map +0 -1
  152. package/dist/engines/smartarrange/cardSink.js +0 -43
  153. package/dist/engines/smartarrange/cardSink.js.map +0 -1
  154. package/dist/engines/smartarrange/runner.d.ts +0 -24
  155. package/dist/engines/smartarrange/runner.d.ts.map +0 -1
  156. package/dist/engines/smartarrange/runner.js +0 -72
  157. package/dist/engines/smartarrange/runner.js.map +0 -1
  158. package/dist/engines/smartarrange/screenshot.d.ts +0 -5
  159. package/dist/engines/smartarrange/screenshot.d.ts.map +0 -1
  160. package/dist/engines/smartarrange/screenshot.js +0 -117
  161. package/dist/engines/smartarrange/screenshot.js.map +0 -1
  162. package/dist/services/SmartArrangeService.d.ts +0 -22
  163. package/dist/services/SmartArrangeService.d.ts.map +0 -1
  164. package/dist/services/SmartArrangeService.js +0 -58
  165. package/dist/services/SmartArrangeService.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SkillsManager.js","sourceRoot":"","sources":["../../../src/core/skills/SkillsManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SkillsManager.js","sourceRoot":"","sources":["../../../src/core/skills/SkillsManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { SkillMeta } from '../types.js';
2
+ /** 语义召回:embed(query) → cosine top-K。无 provider / 任何异常 → null(调用方退化纯 BM25)。 */
3
+ export declare function embeddingRecall(need: string, metas: SkillMeta[], k?: number): Promise<SkillMeta[] | null>;
4
+ //# sourceMappingURL=embeddingRecall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddingRecall.d.ts","sourceRoot":"","sources":["../../../../src/core/skills/match/embeddingRecall.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AA6E7C,8EAA8E;AAC9E,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,SAAI,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAiB1G"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * @module core/skills/match/embeddingRecall
3
+ * @description 三段管线①的**语义召回**(与 BM25 并联,提升召回:抓同义/近义,BM25 抓词面)。
4
+ * 向量索引 = **派生·可重建缓存**(仿 memory-v2 FTS):指纹=技能数+最新mtime+model,
5
+ * 变了就重建;落 ~/.coral/skills-embed-index.json,无 DB。无 embedding provider / 失败
6
+ * → 返回 null,调用方静默降级到纯 BM25。
7
+ * @layer core
8
+ * @boundedContext skills
9
+ */
10
+ import { existsSync, readFileSync, statSync, writeFileSync } from 'node:fs';
11
+ import { resolve } from 'node:path';
12
+ import { embed, hasEmbeddingProvider } from '../../../providers/models/utilityModels.js';
13
+ function indexPath() {
14
+ return resolve(process.env.HOME ?? '/home/coral', '.coral', 'skills-embed-index.json');
15
+ }
16
+ /** 参与向量的判别文本(与 BM25 文档一致的信号面)。 */
17
+ function docText(m) {
18
+ return [m.name, m.description, m.whenToUse, m.insteadUse].filter(Boolean).join(' | ');
19
+ }
20
+ /** 全库指纹:技能数 + 最新 SKILL.md mtime(变了就重建索引)。 */
21
+ function fingerprint(metas) {
22
+ let maxM = 0;
23
+ for (const m of metas) {
24
+ try {
25
+ const t = statSync(m.path).mtimeMs;
26
+ if (t > maxM)
27
+ maxM = t;
28
+ }
29
+ catch {
30
+ /* 文件刚被删 */
31
+ }
32
+ }
33
+ return `${metas.length}:${Math.round(maxM)}`;
34
+ }
35
+ function cosine(a, b) {
36
+ let dot = 0;
37
+ let na = 0;
38
+ let nb = 0;
39
+ const n = Math.min(a.length, b.length);
40
+ for (let i = 0; i < n; i++) {
41
+ dot += a[i] * b[i];
42
+ na += a[i] * a[i];
43
+ nb += b[i] * b[i];
44
+ }
45
+ return dot / (Math.sqrt(na) * Math.sqrt(nb) || 1);
46
+ }
47
+ /** 建/读向量索引(命中缓存直接用;指纹变则批量 embed 全库重建)。无 provider → null。 */
48
+ async function ensureIndex(metas) {
49
+ if (!hasEmbeddingProvider() || metas.length === 0)
50
+ return null;
51
+ const fp = fingerprint(metas);
52
+ const p = indexPath();
53
+ if (existsSync(p)) {
54
+ try {
55
+ const cached = JSON.parse(readFileSync(p, 'utf-8'));
56
+ if (cached.fingerprint === fp && cached.entries?.length === metas.length)
57
+ return cached;
58
+ }
59
+ catch {
60
+ /* 损坏 → 重建 */
61
+ }
62
+ }
63
+ const res = await embed(metas.map(docText));
64
+ if (!res || res.vectors.length !== metas.length)
65
+ return null;
66
+ const idx = {
67
+ fingerprint: fp,
68
+ model: res.model,
69
+ entries: metas.map((m, i) => ({ name: m.name, vector: res.vectors[i] })),
70
+ };
71
+ try {
72
+ writeFileSync(p, JSON.stringify(idx));
73
+ }
74
+ catch {
75
+ /* 缓存写失败不阻塞召回 */
76
+ }
77
+ return idx;
78
+ }
79
+ /** 语义召回:embed(query) → cosine top-K。无 provider / 任何异常 → null(调用方退化纯 BM25)。 */
80
+ export async function embeddingRecall(need, metas, k = 8) {
81
+ try {
82
+ const idx = await ensureIndex(metas);
83
+ if (!idx)
84
+ return null;
85
+ const q = await embed([need]);
86
+ const qv = q?.vectors[0];
87
+ if (!qv)
88
+ return null;
89
+ const byName = new Map(metas.map((m) => [m.name, m]));
90
+ return idx.entries
91
+ .map((e) => ({ name: e.name, score: cosine(qv, e.vector) }))
92
+ .sort((a, b) => b.score - a.score)
93
+ .slice(0, k)
94
+ .map((s) => byName.get(s.name))
95
+ .filter((m) => !!m);
96
+ }
97
+ catch {
98
+ return null;
99
+ }
100
+ }
101
+ //# sourceMappingURL=embeddingRecall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddingRecall.js","sourceRoot":"","sources":["../../../../src/core/skills/match/embeddingRecall.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAYzF,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,aAAa,EAAE,QAAQ,EAAE,yBAAyB,CAAC,CAAC;AACzF,CAAC;AAED,kCAAkC;AAClC,SAAS,OAAO,CAAC,CAAY;IAC3B,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxF,CAAC;AAED,6CAA6C;AAC7C,SAAS,WAAW,CAAC,KAAkB;IACrC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YACnC,IAAI,CAAC,GAAG,IAAI;gBAAE,IAAI,GAAG,CAAC,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,WAAW;QACb,CAAC;IACH,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,MAAM,CAAC,CAAW,EAAE,CAAW;IACtC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,GAAG,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACrB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACpB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;IACtB,CAAC;IACD,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,4DAA4D;AAC5D,KAAK,UAAU,WAAW,CAAC,KAAkB;IAC3C,IAAI,CAAC,oBAAoB,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/D,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,SAAS,EAAE,CAAC;IACtB,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAe,CAAC;YAClE,IAAI,MAAM,CAAC,WAAW,KAAK,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC,MAAM;gBAAE,OAAO,MAAM,CAAC;QAC1F,CAAC;QAAC,MAAM,CAAC;YACP,aAAa;QACf,CAAC;IACH,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,GAAG,GAAe;QACtB,WAAW,EAAE,EAAE;QACf,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC;KAC1E,CAAC;IACF,IAAI,CAAC;QACH,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,KAAkB,EAAE,CAAC,GAAG,CAAC;IAC3E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACrB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO,GAAG,CAAC,OAAO;aACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;aAC3D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aACjC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aAC9B,MAAM,CAAC,CAAC,CAAC,EAAkB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { z } from 'zod';
2
+ import type { SkillsManager } from '../SkillsManager.js';
3
+ import type { SkillMeta } from '../types.js';
4
+ declare const EnrichSchema: z.ZodObject<{
5
+ description: z.ZodString;
6
+ category: z.ZodNullable<z.ZodString>;
7
+ tags: z.ZodArray<z.ZodString>;
8
+ whenToUse: z.ZodString;
9
+ insteadUse: z.ZodString;
10
+ }, z.core.$strip>;
11
+ export type EnrichResult = z.infer<typeof EnrichSchema>;
12
+ /** 读一个 skill 的正文 → LLM 提炼元数据(纯函数,不落盘)。 */
13
+ export declare function enrichSkillMeta(input: {
14
+ name: string;
15
+ body: string;
16
+ existingDescription?: string;
17
+ categories: string[];
18
+ tags: string[];
19
+ siblings: string[];
20
+ }): Promise<EnrichResult>;
21
+ /** 把提炼结果**合并**写回 SKILL.md frontmatter(默认只填缺失字段,overwrite=true 才覆盖既有)。 */
22
+ export declare function applyEnrich(path: string, e: EnrichResult, opts?: {
23
+ overwrite?: boolean;
24
+ }): string[];
25
+ /** 编排:按名找 skill → 读正文/受控词表/同类兄弟 → LLM 提炼 → 写回。返回写入的字段名。 */
26
+ export declare function enrichSkill(name: string, mgr: SkillsManager, metas: SkillMeta[], taxonomy: {
27
+ categories: string[];
28
+ tags: string[];
29
+ }, opts?: {
30
+ overwrite?: boolean;
31
+ }): Promise<{
32
+ written: string[];
33
+ result: EnrichResult;
34
+ } | null>;
35
+ export {};
36
+ //# sourceMappingURL=skillEnrich.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillEnrich.d.ts","sourceRoot":"","sources":["../../../../src/core/skills/match/skillEnrich.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,QAAA,MAAM,YAAY;;;;;;iBAMhB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,0CAA0C;AAC1C,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,GAAG,OAAO,CAAC,YAAY,CAAC,CAaxB;AAED,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,EAAE,CAqBvG;AAED,2DAA2D;AAC3D,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,SAAS,EAAE,EAClB,QAAQ,EAAE;IAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,EAClD,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG,IAAI,CAAC,CAuB7D"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * @module core/skills/match/skillEnrich
3
+ * @description 技能入口层:**检查第三方技能、从正文提炼元数据**(description/tags/category/
4
+ * whenToUse/insteadUse),写回 SKILL.md frontmatter → 无门槛接入的技能自动升为
5
+ * "一等公民"(可精准召回+消歧)。用配置的 reviewer 模型;受控词表来自 registry.yaml。
6
+ * @layer core
7
+ * @boundedContext skills
8
+ */
9
+ import { readFileSync, writeFileSync } from 'node:fs';
10
+ import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
11
+ import { Agent, run } from '@openai/agents';
12
+ import { z } from 'zod';
13
+ import { createReviewerModel } from '../../../providers/llm/modelFactory.js';
14
+ import { loadAgentsConfig } from '../../intel/agentsConfig.js';
15
+ const EnrichSchema = z.object({
16
+ description: z.string().describe('一句话:做什么 + 大致何时用(≤120字,中文)'),
17
+ category: z.string().nullable().describe('从受控 categories 选一个,不确定填 null'),
18
+ tags: z.array(z.string()).describe('从受控 tags 选(0个或多个,只填相关的)'),
19
+ whenToUse: z.string().describe('什么需求该选它——具体触发条件/典型措辞(正例)'),
20
+ insteadUse: z.string().describe('相邻/易混需求改用哪个兄弟技能(负例+指针);没有填空串'),
21
+ });
22
+ /** 读一个 skill 的正文 → LLM 提炼元数据(纯函数,不落盘)。 */
23
+ export async function enrichSkillMeta(input) {
24
+ const model = createReviewerModel(loadAgentsConfig().reviewer);
25
+ const instructions = `你在为技能库策展。读一个 skill 的正文,提炼精准元数据,用于"按需求匹配 + 相似技能消歧"。
26
+ - category: 只能从这些里选一个(不确定填 null):${input.categories.join(' / ') || '(无约束)'}。
27
+ - tags: 只能从这些里选(0个或多个,只填真正相关的):${input.tags.join(' / ') || '(无约束)'}。
28
+ - whenToUse: 写清什么样的需求该选它(正例,具体触发条件/措辞)。
29
+ - insteadUse: 相邻/易混的需求该改用哪个兄弟技能(负例+指针);兄弟名只能从这里选:${input.siblings.join(', ') || '(无)'};确实没有就填空串。
30
+ description ≤120字。忠于正文实际能力,别夸大。`;
31
+ const agent = new Agent({ name: 'skill-enricher', instructions, model, outputType: EnrichSchema });
32
+ const prompt = `skill 名:${input.name}\n${input.existingDescription ? `现有描述:${input.existingDescription}\n` : ''}\n正文:\n${input.body.slice(0, 6000)}`;
33
+ const r = await run(agent, prompt, { stream: true });
34
+ await r.completed;
35
+ return r.finalOutput;
36
+ }
37
+ /** 把提炼结果**合并**写回 SKILL.md frontmatter(默认只填缺失字段,overwrite=true 才覆盖既有)。 */
38
+ export function applyEnrich(path, e, opts = {}) {
39
+ const md = readFileSync(path, 'utf-8');
40
+ const m = md.match(/^---\n([\s\S]*?)\n---\n?/);
41
+ const fm = (m ? (parseYaml(m[1]) ?? {}) : {});
42
+ const body = m ? md.slice(m[0].length) : md;
43
+ const written = [];
44
+ const set = (k, v) => {
45
+ if (v == null || v === '' || (Array.isArray(v) && v.length === 0))
46
+ return;
47
+ if (opts.overwrite || fm[k] == null || fm[k] === '') {
48
+ fm[k] = v;
49
+ written.push(k);
50
+ }
51
+ };
52
+ set('description', e.description);
53
+ if (e.category)
54
+ set('category', e.category);
55
+ set('tags', e.tags);
56
+ set('whenToUse', e.whenToUse);
57
+ set('insteadUse', e.insteadUse);
58
+ const fmText = stringifyYaml(fm).trimEnd();
59
+ writeFileSync(path, `---\n${fmText}\n---\n${body.startsWith('\n') ? body : `\n${body}`}`);
60
+ return written;
61
+ }
62
+ /** 编排:按名找 skill → 读正文/受控词表/同类兄弟 → LLM 提炼 → 写回。返回写入的字段名。 */
63
+ export async function enrichSkill(name, mgr, metas, taxonomy, opts = {}) {
64
+ const meta = metas.find((x) => x.name === name);
65
+ if (!meta)
66
+ return null;
67
+ const body = mgr.load(name);
68
+ if (!body)
69
+ return null;
70
+ const siblings = metas
71
+ .filter((x) => x.name !== name && x.category && x.category === meta.category)
72
+ .map((x) => x.name);
73
+ const result = await enrichSkillMeta({
74
+ name,
75
+ body,
76
+ existingDescription: meta.description || undefined,
77
+ categories: taxonomy.categories,
78
+ tags: taxonomy.tags,
79
+ siblings,
80
+ });
81
+ // 健壮性:LLM 可能填出受控词表外的 category/tags(易把 tag 当 category)→ 过滤掉非法值。
82
+ const catSet = new Set(taxonomy.categories);
83
+ const tagSet = new Set(taxonomy.tags);
84
+ if (result.category && !catSet.has(result.category))
85
+ result.category = null;
86
+ result.tags = result.tags.filter((t) => tagSet.has(t));
87
+ const written = applyEnrich(meta.path, result, opts);
88
+ return { written, result };
89
+ }
90
+ //# sourceMappingURL=skillEnrich.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillEnrich.js","sourceRoot":"","sources":["../../../../src/core/skills/match/skillEnrich.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @module core/skills/match/skillMatcher
3
+ * @description 技能匹配三段管线编排(可插拔·配置驱动·可降级):
4
+ * ① 召回 recall(BM25 永在;embedding 语义召回后续接入,接口点在此)
5
+ * ② 重排 rerank(配了 rerank provider 就用,免费/快)
6
+ * ③ 定夺 select(LLM 读判别字段;低置信 → 给 top 补正文再定一次,body-aware)
7
+ * 每段输出记进 stages 供观测;没配 embedding/rerank 就自动跳过、退化成 BM25→LLM。
8
+ * @layer core
9
+ * @boundedContext skills
10
+ */
11
+ import type { SkillsManager } from '../SkillsManager.js';
12
+ import type { SkillMeta } from '../types.js';
13
+ import { type SkillSelection } from './skillSelect.js';
14
+ export interface MatchResult {
15
+ selection: SkillSelection;
16
+ /** 召回+重排后的候选顺序(name),供调用方 fallback/展示。 */
17
+ candidates: string[];
18
+ /** 走了哪几段 + 结果,可观测(如 ['bm25:8','rerank:5','select:writer@0.82'])。 */
19
+ stages: string[];
20
+ }
21
+ export declare function matchSkill(need: string, mgr: SkillsManager, metas: SkillMeta[], opts?: {
22
+ recallK?: number;
23
+ rerankN?: number;
24
+ bodyThreshold?: number;
25
+ }): Promise<MatchResult>;
26
+ //# sourceMappingURL=skillMatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillMatcher.d.ts","sourceRoot":"","sources":["../../../../src/core/skills/match/skillMatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAoC,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEzF,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,cAAc,CAAC;IAC1B,0CAA0C;IAC1C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,oEAAoE;IACpE,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAUD,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,SAAS,EAAE,EAClB,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GACxE,OAAO,CAAC,WAAW,CAAC,CA4DtB"}
@@ -0,0 +1,69 @@
1
+ import { hasEmbeddingProvider, hasRerankProvider, rerank } from '../../../providers/models/utilityModels.js';
2
+ import { embeddingRecall } from './embeddingRecall.js';
3
+ import { skillSelect } from './skillSelect.js';
4
+ function candidateDoc(m) {
5
+ return [m.name, m.description, m.whenToUse].filter(Boolean).join(' | ');
6
+ }
7
+ function toCandidate(m, body) {
8
+ return { name: m.name, description: m.description, whenToUse: m.whenToUse, insteadUse: m.insteadUse, body };
9
+ }
10
+ export async function matchSkill(need, mgr, metas, opts = {}) {
11
+ const stages = [];
12
+ const recallK = opts.recallK ?? 8;
13
+ const rerankN = opts.rerankN ?? 5;
14
+ const bodyThreshold = opts.bodyThreshold ?? 0.6;
15
+ // ① 召回:BM25 词面 ∪ embedding 语义(配了 embedding provider 就并入,抓同义/近义;失败降级纯 BM25)
16
+ let cands = mgr.search(need, metas, recallK);
17
+ stages.push(`bm25:${cands.length}`);
18
+ if (hasEmbeddingProvider()) {
19
+ const sem = await embeddingRecall(need, metas, recallK);
20
+ if (sem && sem.length) {
21
+ const seen = new Set(cands.map((m) => m.name));
22
+ let added = 0;
23
+ for (const m of sem) {
24
+ if (!seen.has(m.name)) {
25
+ cands.push(m);
26
+ seen.add(m.name);
27
+ added++;
28
+ }
29
+ }
30
+ cands = cands.slice(0, recallK + 4); // 并集留余量给 rerank 收窄
31
+ stages.push(`embed:+${added}`);
32
+ }
33
+ }
34
+ if (cands.length === 0) {
35
+ return { selection: { best: null, confidence: 0, alternatives: [], reason: '无召回候选' }, candidates: [], stages };
36
+ }
37
+ // ② 重排(配了 rerank provider 才走;失败静默降级)
38
+ if (cands.length > 1 && hasRerankProvider()) {
39
+ try {
40
+ const ranked = await rerank(need, cands.map(candidateDoc), { topN: rerankN });
41
+ if (ranked && ranked.length) {
42
+ cands = ranked.map((h) => cands[h.index]).filter((m) => !!m);
43
+ stages.push(`rerank:${cands.length}`);
44
+ }
45
+ }
46
+ catch {
47
+ stages.push('rerank:err');
48
+ }
49
+ }
50
+ cands = cands.slice(0, rerankN);
51
+ // ③ 定夺:LLM 先按元数据(whenToUse/insteadUse)
52
+ let selection = await skillSelect(need, cands.map((m) => toCandidate(m)));
53
+ stages.push(`select:${selection.best ?? 'none'}@${selection.confidence.toFixed(2)}`);
54
+ // ③b body-aware:低置信 → 给 top-2 补正文再定一次(SkillRouter:正文才是决定性信号)
55
+ if (selection.confidence < bodyThreshold && cands.length > 1) {
56
+ const top = cands.slice(0, 2).map((m) => toCandidate(m, mgr.load(m.name) ?? undefined));
57
+ try {
58
+ const s2 = await skillSelect(need, top);
59
+ stages.push(`select-body:${s2.best ?? 'none'}@${s2.confidence.toFixed(2)}`);
60
+ if (s2.confidence >= selection.confidence)
61
+ selection = s2;
62
+ }
63
+ catch {
64
+ stages.push('select-body:err');
65
+ }
66
+ }
67
+ return { selection, candidates: cands.map((m) => m.name), stages };
68
+ }
69
+ //# sourceMappingURL=skillMatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillMatcher.js","sourceRoot":"","sources":["../../../../src/core/skills/match/skillMatcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface SkillCandidate {
2
+ name: string;
3
+ description?: string;
4
+ whenToUse?: string;
5
+ insteadUse?: string;
6
+ /** 难分时提供正文节选(body-aware);不传则只按元数据判。 */
7
+ body?: string;
8
+ }
9
+ export interface SkillSelection {
10
+ best: string | null;
11
+ confidence: number;
12
+ alternatives: string[];
13
+ reason: string;
14
+ }
15
+ /**
16
+ * 从候选里选一个。0/1 个候选直接短路(不调模型)。
17
+ * body 字段可选:调用方对"难分/低置信"的候选补正文再调一次(body-aware)。
18
+ */
19
+ export declare function skillSelect(need: string, candidates: SkillCandidate[]): Promise<SkillSelection>;
20
+ //# sourceMappingURL=skillSelect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillSelect.d.ts","sourceRoot":"","sources":["../../../../src/core/skills/match/skillSelect.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAgBD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAoBrG"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @module core/skills/match/skillSelect
3
+ * @description 精排定夺(三段管线第③段):LLM 读候选的判别字段(whenToUse/insteadUse)、
4
+ * 难分时读正文(body-aware,对齐 SkillRouter 结论),出**可解释的结构化决策**
5
+ * {best, confidence, alternatives, reason}。用配置的 reviewer 模型(可指快模型)。
6
+ * @layer core
7
+ * @boundedContext skills
8
+ */
9
+ import { Agent, run } from '@openai/agents';
10
+ import { z } from 'zod';
11
+ import { createReviewerModel } from '../../../providers/llm/modelFactory.js';
12
+ import { loadAgentsConfig } from '../../intel/agentsConfig.js';
13
+ const SelectSchema = z.object({
14
+ best: z.string().nullable().describe('最匹配的 skill name;都不贴切填 null'),
15
+ confidence: z.number().min(0).max(1).describe('置信度 0-1'),
16
+ alternatives: z.array(z.string()).describe('次优候选 name(可空)'),
17
+ reason: z.string().describe('一句话理由'),
18
+ });
19
+ const INSTRUCTIONS = `你是技能路由消歧器。给定用户需求 + 若干候选 skill,选出**最匹配的一个**。
20
+ 判据(优先级从高到低):
21
+ ① 需求命中某候选的「✅何时用(whenToUse)」→ 选它;
22
+ ② 命中某候选的「↪相邻场景(insteadUse)」→ 该候选让位、选它指向的兄弟技能;
23
+ ③ 提供了正文节选时,以**正文实际能力**为准(描述常夸大)。
24
+ 都不贴切就 best=null(别硬套)。best/alternatives 只能用给定候选里出现过的 name。reason 一句话。`;
25
+ /**
26
+ * 从候选里选一个。0/1 个候选直接短路(不调模型)。
27
+ * body 字段可选:调用方对"难分/低置信"的候选补正文再调一次(body-aware)。
28
+ */
29
+ export async function skillSelect(need, candidates) {
30
+ if (candidates.length === 0)
31
+ return { best: null, confidence: 0, alternatives: [], reason: '无候选' };
32
+ if (candidates.length === 1) {
33
+ return { best: candidates[0].name, confidence: 0.5, alternatives: [], reason: '唯一候选' };
34
+ }
35
+ const model = createReviewerModel(loadAgentsConfig().reviewer);
36
+ const list = candidates
37
+ .map((c, i) => {
38
+ const lines = [`${i + 1}. ${c.name}`];
39
+ if (c.description)
40
+ lines.push(` 描述:${c.description}`);
41
+ if (c.whenToUse)
42
+ lines.push(` ✅何时用:${c.whenToUse}`);
43
+ if (c.insteadUse)
44
+ lines.push(` ↪相邻场景:${c.insteadUse}`);
45
+ if (c.body)
46
+ lines.push(` 正文节选:${c.body.slice(0, 1200)}`);
47
+ return lines.join('\n');
48
+ })
49
+ .join('\n\n');
50
+ const agent = new Agent({ name: 'skill-router', instructions: INSTRUCTIONS, model, outputType: SelectSchema });
51
+ const r = await run(agent, `用户需求:${need}\n\n候选:\n${list}\n\n选出最匹配的一个。`, { stream: true });
52
+ await r.completed;
53
+ return r.finalOutput;
54
+ }
55
+ //# sourceMappingURL=skillSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillSelect.js","sourceRoot":"","sources":["../../../../src/core/skills/match/skillSelect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export interface Provenance {
2
+ owner: string;
3
+ source: string;
4
+ version: string;
5
+ registeredAt: string;
6
+ /** copy=拷快照(发布/部署);link=软链源(本机开发/频繁维护,实时生效)。 */
7
+ mode: 'copy' | 'link';
8
+ }
9
+ type Manifest = Record<string, Provenance>;
10
+ export declare function readManifest(): Manifest;
11
+ export interface RegisterResult {
12
+ registered: string[];
13
+ skipped: Array<{
14
+ name: string;
15
+ reason: string;
16
+ }>;
17
+ }
18
+ /**
19
+ * 把 srcDir 下所有 skill 注册进 SPS 库。冲突(同名已属别的 owner)→ 跳过(除非 force)。
20
+ * 幂等:同 owner 重注册 = 覆盖更新。返回注册/跳过清单;不跑 lint/enrich(交命令层)。
21
+ */
22
+ export declare function registerSkillsFrom(srcDir: string, owner: string, opts?: {
23
+ force?: boolean;
24
+ version?: string;
25
+ link?: boolean;
26
+ }): RegisterResult;
27
+ /** 撤销某 owner 注册的全部技能(删目录 + manifest 项)。返回移除的名字。 */
28
+ export declare function unregisterByOwner(owner: string): string[];
29
+ /** 撤销单个技能(按名)。 */
30
+ export declare function unregisterOne(name: string): boolean;
31
+ export {};
32
+ //# sourceMappingURL=registration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registration.d.ts","sourceRoot":"","sources":["../../../src/core/skills/registration.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AACD,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAM3C,wBAAgB,YAAY,IAAI,QAAQ,CAMvC;AA4BD,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/D,cAAc,CAoChB;AAWD,mDAAmD;AACnD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAgBzD;AAED,kBAAkB;AAClB,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAWnD"}