autosnippet 3.2.15 → 3.2.16

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 (50) hide show
  1. package/dist/bin/cli.js +10 -0
  2. package/dist/bin/cli.js.map +1 -1
  3. package/dist/lib/external/mcp/handlers/consolidated.d.ts.map +1 -1
  4. package/dist/lib/external/mcp/handlers/consolidated.js +4 -2
  5. package/dist/lib/external/mcp/handlers/consolidated.js.map +1 -1
  6. package/dist/lib/external/mcp/handlers/skill.d.ts +17 -0
  7. package/dist/lib/external/mcp/handlers/skill.d.ts.map +1 -1
  8. package/dist/lib/external/mcp/handlers/skill.js +166 -0
  9. package/dist/lib/external/mcp/handlers/skill.js.map +1 -1
  10. package/dist/lib/http/routes/skills.d.ts.map +1 -1
  11. package/dist/lib/http/routes/skills.js +73 -0
  12. package/dist/lib/http/routes/skills.js.map +1 -1
  13. package/dist/lib/injection/modules/AgentModule.d.ts +1 -0
  14. package/dist/lib/injection/modules/AgentModule.d.ts.map +1 -1
  15. package/dist/lib/injection/modules/AgentModule.js +28 -0
  16. package/dist/lib/injection/modules/AgentModule.js.map +1 -1
  17. package/dist/lib/platform/ios/spm/SpmHelper.d.ts +1 -1
  18. package/dist/lib/service/skills/AIRecallStrategy.d.ts +30 -0
  19. package/dist/lib/service/skills/AIRecallStrategy.d.ts.map +1 -0
  20. package/dist/lib/service/skills/AIRecallStrategy.js +51 -0
  21. package/dist/lib/service/skills/AIRecallStrategy.js.map +1 -0
  22. package/dist/lib/service/skills/FeedbackStore.d.ts +48 -0
  23. package/dist/lib/service/skills/FeedbackStore.d.ts.map +1 -0
  24. package/dist/lib/service/skills/FeedbackStore.js +255 -0
  25. package/dist/lib/service/skills/FeedbackStore.js.map +1 -0
  26. package/dist/lib/service/skills/RecommendationMetrics.d.ts +60 -0
  27. package/dist/lib/service/skills/RecommendationMetrics.d.ts.map +1 -0
  28. package/dist/lib/service/skills/RecommendationMetrics.js +120 -0
  29. package/dist/lib/service/skills/RecommendationMetrics.js.map +1 -0
  30. package/dist/lib/service/skills/RecommendationPipeline.d.ts +43 -0
  31. package/dist/lib/service/skills/RecommendationPipeline.d.ts.map +1 -0
  32. package/dist/lib/service/skills/RecommendationPipeline.js +235 -0
  33. package/dist/lib/service/skills/RecommendationPipeline.js.map +1 -0
  34. package/dist/lib/service/skills/RuleRecallStrategy.d.ts +16 -0
  35. package/dist/lib/service/skills/RuleRecallStrategy.d.ts.map +1 -0
  36. package/dist/lib/service/skills/RuleRecallStrategy.js +37 -0
  37. package/dist/lib/service/skills/RuleRecallStrategy.js.map +1 -0
  38. package/dist/lib/service/skills/SignalCollector.d.ts +3 -3
  39. package/dist/lib/service/skills/SignalCollector.d.ts.map +1 -1
  40. package/dist/lib/service/skills/SignalCollector.js +72 -2
  41. package/dist/lib/service/skills/SignalCollector.js.map +1 -1
  42. package/dist/lib/service/skills/SkillHooks.d.ts +33 -14
  43. package/dist/lib/service/skills/SkillHooks.d.ts.map +1 -1
  44. package/dist/lib/service/skills/SkillHooks.js +261 -30
  45. package/dist/lib/service/skills/SkillHooks.js.map +1 -1
  46. package/dist/lib/service/skills/types.d.ts +210 -0
  47. package/dist/lib/service/skills/types.d.ts.map +1 -0
  48. package/dist/lib/service/skills/types.js +7 -0
  49. package/dist/lib/service/skills/types.js.map +1 -0
  50. package/package.json +5 -1
@@ -1,14 +1,15 @@
1
1
  /**
2
- * SkillHooks — Skill 生命周期钩子管理器
2
+ * SkillHooks — Skill 生命周期钩子管理器 (v2)
3
3
  *
4
4
  * 每个 Skill 目录可以包含一个 hooks.js 文件,导出生命周期回调。
5
- * SkillHooks 在启动时扫描并注册所有钩子,在特定事件发生时按序调用。
5
+ * SkillHooks 在启动时扫描并注册所有钩子,在特定事件发生时按模式调用。
6
6
  *
7
- * 支持的钩子:
8
- * - onCandidateSubmit(candidate, ctx) → { block?: boolean, reason?: string }
9
- * - onRecipeCreated(recipe, ctx) void
10
- * - onGuardCheck(violation, ctx) violation (可修改)
11
- * - onBootstrapComplete(stats, ctx) → void
7
+ * v2 升级:
8
+ * - 扩展到 16+ 钩子,覆盖知识/Guard/Skill/搜索/推荐/Bootstrap/信号全生命周期
9
+ * - 4 种执行模式: series / parallel / waterfall / bail
10
+ * - Handler 支持 priority、timeout、name 元数据
11
+ * - 完全向后兼容旧版 hooks.js (直接导出函数)
12
+ * - 新格式支持: export default { hooks: { onXxx: { handler, priority, timeout } } }
12
13
  *
13
14
  * 加载顺序: 内置 skills/ → 项目级 AutoSnippet/skills/(同名覆盖)
14
15
  */
@@ -18,6 +19,45 @@ import { resolveProjectRoot } from '#shared/resolveProjectRoot.js';
18
19
  import { getProjectSkillsPath } from '../../infrastructure/config/Paths.js';
19
20
  import Logger from '../../infrastructure/logging/Logger.js';
20
21
  import { SKILLS_DIR } from '../../shared/package-root.js';
22
+ // ═══════════════════════════════════════════════════════
23
+ // Hook Registry — 声明所有支持的钩子及其执行模式
24
+ // ═══════════════════════════════════════════════════════
25
+ const HOOK_REGISTRY = [
26
+ // ── 知识生命周期 ──
27
+ { name: 'onKnowledgeSubmit', mode: 'bail', description: '知识提交前拦截' },
28
+ { name: 'onKnowledgeCreated', mode: 'parallel', description: '知识创建后通知' },
29
+ { name: 'onKnowledgeUpdated', mode: 'parallel', description: '知识更新后通知' },
30
+ { name: 'onKnowledgeExpired', mode: 'parallel', description: '知识过期/废弃后通知' },
31
+ // ── Guard ──
32
+ { name: 'onGuardCheck', mode: 'waterfall', description: 'Guard 检查,可修改违规结果' },
33
+ { name: 'onGuardViolation', mode: 'parallel', description: 'Guard 违规后通知' },
34
+ // ── Skill 生命周期 ──
35
+ { name: 'onSkillLoad', mode: 'series', description: 'Skill 被加载时' },
36
+ { name: 'onSkillCreated', mode: 'parallel', description: 'Skill 创建后' },
37
+ { name: 'onSkillExpired', mode: 'parallel', description: 'Skill 过期/删除后' },
38
+ // ── 搜索 ──
39
+ { name: 'onSearch', mode: 'waterfall', description: '搜索结果后处理(可修改排序)' },
40
+ { name: 'onSearchMiss', mode: 'parallel', description: '搜索无结果时' },
41
+ // ── 推荐 ──
42
+ { name: 'onRecommendation', mode: 'waterfall', description: '推荐结果后处理(可过滤/排序)' },
43
+ { name: 'onRecommendFeedback', mode: 'parallel', description: '推荐反馈事件' },
44
+ // ── Bootstrap ──
45
+ { name: 'onBootstrapStart', mode: 'series', description: '冷启动开始前' },
46
+ { name: 'onBootstrapComplete', mode: 'parallel', description: '冷启动完成后' },
47
+ // ── 信号 ──
48
+ { name: 'onSignalCollected', mode: 'parallel', description: '新信号收集完成' },
49
+ // ── 向后兼容 (旧名映射) ──
50
+ { name: 'onCandidateSubmit', mode: 'bail', description: '(compat) 同 onKnowledgeSubmit' },
51
+ { name: 'onRecipeCreated', mode: 'parallel', description: '(compat) Recipe 创建后通知' },
52
+ ];
53
+ /** hookName → HookDefinition 快速查表 */
54
+ const HOOK_DEF_MAP = new Map(HOOK_REGISTRY.map((d) => [d.name, d]));
55
+ /** 所有合法 hook 名称集合 */
56
+ const HOOK_NAMES = new Set(HOOK_REGISTRY.map((d) => d.name));
57
+ /** 默认 handler 超时 (ms) */
58
+ const DEFAULT_HANDLER_TIMEOUT = 10_000;
59
+ /** 默认 handler 优先级 */
60
+ const DEFAULT_HANDLER_PRIORITY = 100;
21
61
  /**
22
62
  * 获取项目级 Skills 目录(运行时动态解析)
23
63
  * 路径: {projectRoot}/AutoSnippet/skills/
@@ -26,33 +66,54 @@ function _getProjectSkillsDir(container) {
26
66
  const projectRoot = resolveProjectRoot(container);
27
67
  return getProjectSkillsPath(projectRoot);
28
68
  }
29
- const HOOK_NAMES = ['onCandidateSubmit', 'onRecipeCreated', 'onGuardCheck', 'onBootstrapComplete'];
69
+ /**
70
+ * 带超时的 Promise 包装
71
+ */
72
+ function withTimeout(promise, ms, label) {
73
+ if (ms <= 0) {
74
+ return promise;
75
+ }
76
+ return new Promise((resolve, reject) => {
77
+ const timer = setTimeout(() => {
78
+ reject(new Error(`Hook handler "${label}" timed out after ${ms}ms`));
79
+ }, ms);
80
+ promise.then((v) => {
81
+ clearTimeout(timer);
82
+ resolve(v);
83
+ }, (e) => {
84
+ clearTimeout(timer);
85
+ reject(e);
86
+ });
87
+ });
88
+ }
89
+ // ═══════════════════════════════════════════════════════
90
+ // SkillHooks 主类
91
+ // ═══════════════════════════════════════════════════════
30
92
  export class SkillHooks {
31
93
  hooks;
32
94
  logger;
33
95
  constructor() {
34
96
  this.logger = Logger.getInstance();
35
- /** @type {Map<string, Function[]>} hookName [handler, ...] */
36
- this.hooks = new Map(HOOK_NAMES.map((n) => [n, []]));
97
+ this.hooks = new Map([...HOOK_NAMES].map((n) => [n, []]));
37
98
  }
99
+ // ─── 公共 API ──────────────────────────────────────────
38
100
  /**
39
101
  * 扫描 skills 目录,加载所有 hooks.js
40
102
  * 项目级 hooks 覆盖同名内置 hooks
41
103
  */
42
104
  async load(container) {
43
- const loaded = new Map(); // skillName → hooks module
105
+ const loaded = new Map();
44
106
  // 1. 内置 skills
45
107
  await this.#loadFromDir(SKILLS_DIR, loaded);
46
108
  // 2. 项目级 skills(覆盖同名)
47
109
  await this.#loadFromDir(_getProjectSkillsDir(container), loaded);
48
110
  // 3. 注册所有钩子
49
111
  for (const [skillName, mod] of loaded) {
50
- for (const hookName of HOOK_NAMES) {
51
- if (typeof mod[hookName] === 'function') {
52
- this.hooks.get(hookName).push(mod[hookName]);
53
- this.logger.debug(`SkillHook registered: ${skillName}.${hookName}`);
54
- }
55
- }
112
+ this.#registerModule(skillName, mod);
113
+ }
114
+ // 4. 按优先级排序所有 hook 列表
115
+ for (const handlers of this.hooks.values()) {
116
+ handlers.sort((a, b) => a.priority - b.priority);
56
117
  }
57
118
  const totalHooks = [...this.hooks.values()].reduce((s, a) => s + a.length, 0);
58
119
  if (totalHooks > 0) {
@@ -60,22 +121,91 @@ export class SkillHooks {
60
121
  }
61
122
  }
62
123
  /**
63
- * 触发钩子 按注册顺序调用
124
+ * 手动注册 handler (用于代码级注册,非 hooks.js)
125
+ */
126
+ tap(hookName, handler, options) {
127
+ if (!HOOK_NAMES.has(hookName)) {
128
+ this.logger.warn(`SkillHooks.tap: unknown hook "${hookName}", registering dynamically`);
129
+ this.hooks.set(hookName, []);
130
+ }
131
+ const registered = {
132
+ fn: handler,
133
+ name: options?.name ?? 'anonymous',
134
+ priority: options?.priority ?? DEFAULT_HANDLER_PRIORITY,
135
+ timeout: options?.timeout ?? DEFAULT_HANDLER_TIMEOUT,
136
+ };
137
+ const handlers = this.hooks.get(hookName);
138
+ handlers.push(registered);
139
+ // 保持优先级排序
140
+ handlers.sort((a, b) => a.priority - b.priority);
141
+ }
142
+ /**
143
+ * 触发钩子 — 根据 hook 定义的模式自动选择执行策略
64
144
  *
65
- * @param {string} hookName
66
- * @param {...any} args
67
- * @returns {Promise<any>} 最后一个返回值(用于 blocking hooks 如 onCandidateSubmit)
145
+ * 向后兼容: 旧版 run() 签名不变,行为维持一致。
146
+ * - bail 模式: 首个返回 { block: true } 的 handler 立即终止
147
+ * - waterfall 模式: 前一个 handler 的返回值传给下一个
148
+ * - parallel 模式: 所有 handler 并行执行 (fire-and-forget)
149
+ * - series 模式: 按优先级顺序串行执行,忽略返回值
68
150
  */
69
151
  async run(hookName, ...args) {
70
152
  const handlers = this.hooks.get(hookName);
71
153
  if (!handlers || handlers.length === 0) {
72
154
  return undefined;
73
155
  }
156
+ const def = HOOK_DEF_MAP.get(hookName);
157
+ const mode = def?.mode ?? 'bail'; // 未知 hook 默认 bail (兼容旧行为)
158
+ switch (mode) {
159
+ case 'bail':
160
+ return this.#runBail(hookName, handlers, args);
161
+ case 'waterfall':
162
+ return this.#runWaterfall(hookName, handlers, args);
163
+ case 'parallel':
164
+ return this.#runParallel(hookName, handlers, args);
165
+ case 'series':
166
+ return this.#runSeries(hookName, handlers, args);
167
+ default:
168
+ return this.#runBail(hookName, handlers, args);
169
+ }
170
+ }
171
+ /**
172
+ * 检查是否有任何钩子注册
173
+ */
174
+ has(hookName) {
175
+ const handlers = this.hooks.get(hookName);
176
+ return handlers !== undefined && handlers.length > 0;
177
+ }
178
+ /**
179
+ * 获取指定 hook 的 handler 数量
180
+ */
181
+ count(hookName) {
182
+ return this.hooks.get(hookName)?.length ?? 0;
183
+ }
184
+ /**
185
+ * 获取已注册的所有 hook 名称
186
+ */
187
+ getRegisteredHooks() {
188
+ return [...this.hooks.entries()]
189
+ .filter(([, handlers]) => handlers.length > 0)
190
+ .map(([name]) => name);
191
+ }
192
+ /**
193
+ * 获取 Hook Registry 信息 (用于 Dashboard / 调试)
194
+ */
195
+ static getHookRegistry() {
196
+ return HOOK_REGISTRY;
197
+ }
198
+ // ─── 执行模式实现 ─────────────────────────────────────
199
+ /**
200
+ * Bail 模式: 串行执行,首个返回 truthy/{block:true} 的 handler 终止链
201
+ */
202
+ async #runBail(hookName, handlers, args) {
74
203
  let result;
75
- for (const handler of handlers) {
204
+ for (const h of handlers) {
76
205
  try {
77
- result = await handler(...args);
78
- // 如果是 blocking hook 且返回 block=true,立即中断
206
+ const promise = Promise.resolve(h.fn(...args));
207
+ result = await withTimeout(promise, h.timeout, h.name);
208
+ // block 短路
79
209
  if (result &&
80
210
  typeof result === 'object' &&
81
211
  'block' in result &&
@@ -84,7 +214,7 @@ export class SkillHooks {
84
214
  }
85
215
  }
86
216
  catch (err) {
87
- this.logger.warn(`SkillHook error in ${hookName}`, {
217
+ this.logger.warn(`SkillHook error in ${hookName} (handler: ${h.name})`, {
88
218
  error: err instanceof Error ? err.message : String(err),
89
219
  });
90
220
  }
@@ -92,13 +222,114 @@ export class SkillHooks {
92
222
  return result;
93
223
  }
94
224
  /**
95
- * 检查是否有任何钩子注册
225
+ * Waterfall 模式: 串行传值,前一个返回值替换 args[0]
96
226
  */
97
- has(hookName) {
98
- const handlers = this.hooks.get(hookName);
99
- return handlers && handlers.length > 0;
227
+ async #runWaterfall(hookName, handlers, args) {
228
+ let current = args[0];
229
+ const rest = args.slice(1);
230
+ for (const h of handlers) {
231
+ try {
232
+ const promise = Promise.resolve(h.fn(current, ...rest));
233
+ const result = await withTimeout(promise, h.timeout, h.name);
234
+ // 只有返回了有效值才替换
235
+ if (result !== undefined && result !== null) {
236
+ current = result;
237
+ }
238
+ }
239
+ catch (err) {
240
+ this.logger.warn(`SkillHook waterfall error in ${hookName} (handler: ${h.name})`, {
241
+ error: err instanceof Error ? err.message : String(err),
242
+ });
243
+ // waterfall 模式下出错继续传递当前值
244
+ }
245
+ }
246
+ return current;
247
+ }
248
+ /**
249
+ * Parallel 模式: 所有 handler 并行执行 (fire-and-forget)
250
+ */
251
+ async #runParallel(hookName, handlers, args) {
252
+ const results = await Promise.allSettled(handlers.map((h) => {
253
+ const promise = Promise.resolve(h.fn(...args));
254
+ return withTimeout(promise, h.timeout, h.name);
255
+ }));
256
+ // 记录失败但不阻塞
257
+ for (let i = 0; i < results.length; i++) {
258
+ const r = results[i];
259
+ if (r.status === 'rejected') {
260
+ this.logger.warn(`SkillHook parallel error in ${hookName} (handler: ${handlers[i].name})`, {
261
+ error: r.reason instanceof Error ? r.reason.message : String(r.reason),
262
+ });
263
+ }
264
+ }
265
+ return undefined;
266
+ }
267
+ /**
268
+ * Series 模式: 按优先级顺序串行执行,忽略返回值
269
+ */
270
+ async #runSeries(hookName, handlers, args) {
271
+ for (const h of handlers) {
272
+ try {
273
+ const promise = Promise.resolve(h.fn(...args));
274
+ await withTimeout(promise, h.timeout, h.name);
275
+ }
276
+ catch (err) {
277
+ this.logger.warn(`SkillHook series error in ${hookName} (handler: ${h.name})`, {
278
+ error: err instanceof Error ? err.message : String(err),
279
+ });
280
+ }
281
+ }
282
+ return undefined;
283
+ }
284
+ // ─── 模块注册 ─────────────────────────────────────────
285
+ /**
286
+ * 注册一个 skill 模块的钩子 — 支持新旧两种格式
287
+ *
288
+ * 旧格式 (v1):
289
+ * export function onGuardCheck(violation, ctx) { ... }
290
+ *
291
+ * 新格式 (v2):
292
+ * export default { hooks: { onGuardCheck: { handler, priority, timeout } } }
293
+ */
294
+ #registerModule(skillName, mod) {
295
+ // 尝试新格式: mod.hooks 是一个对象
296
+ const hooksObj = mod.hooks;
297
+ if (hooksObj && typeof hooksObj === 'object') {
298
+ for (const [hookName, config] of Object.entries(hooksObj)) {
299
+ if (!this.hooks.has(hookName)) {
300
+ this.logger.warn(`SkillHooks: ${skillName} exports unknown hook "${hookName}", skipping`);
301
+ continue;
302
+ }
303
+ if (typeof config === 'function') {
304
+ // 新格式但直接是函数: { hooks: { onXxx: fn } }
305
+ this.#addHandler(hookName, config, skillName);
306
+ }
307
+ else if (config && typeof config === 'object' && 'handler' in config) {
308
+ // 新格式含元数据: { hooks: { onXxx: { handler, priority, timeout } } }
309
+ const cfg = config;
310
+ this.#addHandler(hookName, cfg.handler, skillName, cfg.priority, cfg.timeout);
311
+ }
312
+ }
313
+ return;
314
+ }
315
+ // 旧格式: module 顶层直接导出函数
316
+ for (const hookName of HOOK_NAMES) {
317
+ if (typeof mod[hookName] === 'function') {
318
+ this.#addHandler(hookName, mod[hookName], skillName);
319
+ }
320
+ }
321
+ }
322
+ #addHandler(hookName, fn, skillName, priority, timeout) {
323
+ const handler = {
324
+ fn,
325
+ name: `${skillName}.${hookName}`,
326
+ priority: priority ?? DEFAULT_HANDLER_PRIORITY,
327
+ timeout: timeout ?? DEFAULT_HANDLER_TIMEOUT,
328
+ };
329
+ this.hooks.get(hookName).push(handler);
330
+ this.logger.debug(`SkillHook registered: ${handler.name} (priority=${handler.priority})`);
100
331
  }
101
- // ─── Internal ──────────────────────────────────────────
332
+ // ─── 目录扫描 ─────────────────────────────────────────
102
333
  async #loadFromDir(dir, loaded) {
103
334
  let dirs;
104
335
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"SkillHooks.js","sourceRoot":"","sources":["../../../../lib/service/skills/SkillHooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SkillHooks.js","sourceRoot":"","sources":["../../../../lib/service/skills/SkillHooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Skill 推荐系统 — 统一类型定义
3
+ *
4
+ * 覆盖: SignalProvider / RecommendationPipeline / FeedbackStore / SkillHooks
5
+ */
6
+ /**
7
+ * Hook 执行模式 — 受 Webpack Tapable 启发,简化为 4 种核心语义
8
+ */
9
+ export type HookMode =
10
+ /** 串行执行,所有 handler 按优先级顺序执行,忽略返回值 */
11
+ 'series'
12
+ /** 并行执行,所有 handler Promise.allSettled (fire-and-forget) */
13
+ | 'parallel'
14
+ /** 串行传值,前一个 handler 的返回值作为下一个的第一个参数 */
15
+ | 'waterfall'
16
+ /** 串行短路,首个返回 truthy 值(含 {block:true})的 handler 终止链 */
17
+ | 'bail';
18
+ /**
19
+ * Hook 定义
20
+ */
21
+ export interface HookDefinition {
22
+ name: string;
23
+ mode: HookMode;
24
+ description: string;
25
+ }
26
+ /**
27
+ * Handler 注册选项
28
+ */
29
+ export interface HookHandlerOptions {
30
+ /** handler 名称 (用于日志和调试) */
31
+ name: string;
32
+ /** 执行优先级 (越小越先,默认 100) */
33
+ priority?: number;
34
+ /** 超时 (ms),超时自动跳过,默认 10000 */
35
+ timeout?: number;
36
+ }
37
+ /**
38
+ * 已注册的 Handler 内部表示
39
+ */
40
+ export interface RegisteredHandler {
41
+ fn: (...args: unknown[]) => Promise<unknown> | unknown;
42
+ name: string;
43
+ priority: number;
44
+ timeout: number;
45
+ }
46
+ /**
47
+ * 标准化信号对象
48
+ */
49
+ export interface Signal {
50
+ id: string;
51
+ provider: string;
52
+ type: string;
53
+ timestamp: Date;
54
+ data: Record<string, unknown>;
55
+ /** 信号强度 0-1 */
56
+ strength: number;
57
+ /** 可选的去重 key */
58
+ dedupeKey?: string;
59
+ }
60
+ /**
61
+ * 信号收集上下文
62
+ */
63
+ export interface SignalContext {
64
+ projectRoot: string;
65
+ database?: unknown;
66
+ container?: unknown;
67
+ }
68
+ /**
69
+ * 统一信号提供者接口
70
+ */
71
+ export interface SignalProvider {
72
+ /** 提供者唯一名称 */
73
+ readonly name: string;
74
+ /** 信号类别 */
75
+ readonly category: 'behavior' | 'quality' | 'context' | 'external';
76
+ /** 优先级 (越小越先执行) */
77
+ readonly priority: number;
78
+ /**
79
+ * 收集信号 — 增量模式
80
+ * @param since 上次收集的时间戳 (null = 首次)
81
+ * @param context 全局上下文
82
+ * @returns 标准化信号对象数组
83
+ */
84
+ collect(since: Date | null, context: SignalContext): Promise<Signal[]>;
85
+ /** 信号提供者是否可用 */
86
+ isAvailable(context: SignalContext): boolean;
87
+ }
88
+ /**
89
+ * 推荐候选
90
+ */
91
+ export interface RecommendationCandidate {
92
+ /** 推荐的 Skill 名称 */
93
+ name: string;
94
+ /** 一句话描述 */
95
+ description: string;
96
+ /** 推荐理由 */
97
+ rationale: string;
98
+ /** 推荐来源策略 */
99
+ source: string;
100
+ /** 优先级 */
101
+ priority: 'high' | 'medium' | 'low';
102
+ /** 原始信号数据 */
103
+ signals: Record<string, unknown>;
104
+ /** 推荐内容草稿 (可选) */
105
+ body?: string;
106
+ }
107
+ /**
108
+ * 带分数的推荐结果
109
+ */
110
+ export interface ScoredRecommendation extends RecommendationCandidate {
111
+ /** 综合得分 0-1 */
112
+ score: number;
113
+ /** 各信号分项得分 */
114
+ signalScores?: Record<string, number>;
115
+ /** 唯一推荐 ID (用于反馈追踪) */
116
+ recommendationId: string;
117
+ /** 推荐生成时间 */
118
+ generatedAt: string;
119
+ }
120
+ /**
121
+ * 推荐管线上下文
122
+ */
123
+ export interface RecommendationContext {
124
+ projectRoot: string;
125
+ database?: unknown;
126
+ container?: unknown;
127
+ agentFactory?: unknown;
128
+ /** 已有的项目级 Skill 名称集合 (用于去重) */
129
+ existingSkills?: Set<string>;
130
+ /** 用户偏好 (来自 FeedbackStore) */
131
+ userPreference?: UserPreference;
132
+ /** AI Provider 是否可用 */
133
+ aiAvailable?: boolean;
134
+ }
135
+ /**
136
+ * 召回策略接口
137
+ */
138
+ export interface RecallStrategy {
139
+ readonly name: string;
140
+ /** 召回方法类型 */
141
+ readonly type: 'rule' | 'ai' | 'vector' | 'popularity';
142
+ /**
143
+ * 召回候选列表
144
+ */
145
+ recall(context: RecommendationContext): Promise<RecommendationCandidate[]>;
146
+ /** 策略是否可用 (例如 AI 策略需要 aiProvider) */
147
+ isAvailable(context: RecommendationContext): boolean;
148
+ }
149
+ /**
150
+ * 推荐反馈动作
151
+ */
152
+ export type FeedbackAction =
153
+ /** 用户采纳推荐并创建了 Skill */
154
+ 'adopted'
155
+ /** 用户主动关闭/忽略推荐 */
156
+ | 'dismissed'
157
+ /** 推荐过期未处理 */
158
+ | 'expired'
159
+ /** 用户查看了推荐详情 */
160
+ | 'viewed'
161
+ /** 用户采纳但修改了内容 */
162
+ | 'modified';
163
+ /**
164
+ * 推荐反馈记录
165
+ */
166
+ export interface RecommendationFeedback {
167
+ recommendationId: string;
168
+ action: FeedbackAction;
169
+ timestamp: string;
170
+ /** 推荐来源策略 */
171
+ source?: string;
172
+ /** 推荐类别 */
173
+ category?: string;
174
+ /** 用户反馈原因 */
175
+ reason?: string;
176
+ }
177
+ /**
178
+ * 用户偏好 (从反馈历史中推导)
179
+ */
180
+ export interface UserPreference {
181
+ preferredCategories: string[];
182
+ avoidedCategories: string[];
183
+ preferredSources: string[];
184
+ /** 总体采纳率 */
185
+ adoptionRate: number;
186
+ }
187
+ /**
188
+ * 推荐效果指标
189
+ */
190
+ export interface RecommendationMetricsSnapshot {
191
+ /** 总推荐数 */
192
+ totalRecommendations: number;
193
+ /** 总展示数 */
194
+ totalViewed: number;
195
+ /** 总采纳数 */
196
+ totalAdopted: number;
197
+ /** 总忽略数 */
198
+ totalDismissed: number;
199
+ /** 总过期数 */
200
+ totalExpired: number;
201
+ /** 采纳率 */
202
+ adoptionRate: number;
203
+ /** 查看率 */
204
+ viewRate: number;
205
+ /** 按来源分组的采纳率 */
206
+ adoptionRateBySource: Record<string, number>;
207
+ /** 统计时间范围 */
208
+ since: string;
209
+ }
210
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../lib/service/skills/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Skill 推荐系统 — 统一类型定义
3
+ *
4
+ * 覆盖: SignalProvider / RecommendationPipeline / FeedbackStore / SkillHooks
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../lib/service/skills/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "autosnippet",
3
- "version": "3.2.15",
3
+ "version": "3.2.16",
4
4
  "description": "Extract code patterns into a knowledge base for AI coding assistants",
5
5
  "type": "module",
6
6
  "main": "dist/lib/bootstrap.js",
@@ -20,6 +20,10 @@
20
20
  "asd-dev": "./lib/service/*",
21
21
  "default": "./dist/lib/service/*"
22
22
  },
23
+ "#agent/*": {
24
+ "asd-dev": "./lib/agent/*",
25
+ "default": "./dist/lib/agent/*"
26
+ },
23
27
  "#domain/*": {
24
28
  "asd-dev": "./lib/domain/*",
25
29
  "default": "./dist/lib/domain/*"