agentfootprint 1.14.0 → 1.16.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 (89) hide show
  1. package/dist/esm/index.js +2 -0
  2. package/dist/esm/index.js.map +1 -1
  3. package/dist/esm/lib/concepts/AgentBuilder.js +66 -1
  4. package/dist/esm/lib/concepts/AgentBuilder.js.map +1 -1
  5. package/dist/esm/lib/skills/defineSkill.js +13 -0
  6. package/dist/esm/lib/skills/defineSkill.js.map +1 -0
  7. package/dist/esm/lib/skills/index.js +5 -0
  8. package/dist/esm/lib/skills/index.js.map +1 -0
  9. package/dist/esm/lib/skills/registry.js +197 -0
  10. package/dist/esm/lib/skills/registry.js.map +1 -0
  11. package/dist/esm/lib/skills/renderBody.js +34 -0
  12. package/dist/esm/lib/skills/renderBody.js.map +1 -0
  13. package/dist/esm/lib/skills/surfaceMode.js +52 -0
  14. package/dist/esm/lib/skills/surfaceMode.js.map +1 -0
  15. package/dist/esm/lib/skills/types.js +2 -0
  16. package/dist/esm/lib/skills/types.js.map +1 -0
  17. package/dist/esm/memory/pipeline/auto.js +177 -0
  18. package/dist/esm/memory/pipeline/auto.js.map +1 -0
  19. package/dist/esm/memory/pipeline/index.js +1 -0
  20. package/dist/esm/memory/pipeline/index.js.map +1 -1
  21. package/dist/esm/memory.barrel.js +1 -0
  22. package/dist/esm/memory.barrel.js.map +1 -1
  23. package/dist/esm/providers/prompt/skillBasedPrompt.js.map +1 -1
  24. package/dist/esm/skills.barrel.js +42 -0
  25. package/dist/esm/skills.barrel.js.map +1 -0
  26. package/dist/esm/tools/ToolRegistry.js +13 -0
  27. package/dist/esm/tools/ToolRegistry.js.map +1 -1
  28. package/dist/index.js +6 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/lib/concepts/AgentBuilder.js +66 -1
  31. package/dist/lib/concepts/AgentBuilder.js.map +1 -1
  32. package/dist/lib/skills/defineSkill.js +17 -0
  33. package/dist/lib/skills/defineSkill.js.map +1 -0
  34. package/dist/lib/skills/index.js +15 -0
  35. package/dist/lib/skills/index.js.map +1 -0
  36. package/dist/lib/skills/registry.js +201 -0
  37. package/dist/lib/skills/registry.js.map +1 -0
  38. package/dist/lib/skills/renderBody.js +39 -0
  39. package/dist/lib/skills/renderBody.js.map +1 -0
  40. package/dist/lib/skills/surfaceMode.js +58 -0
  41. package/dist/lib/skills/surfaceMode.js.map +1 -0
  42. package/dist/lib/skills/types.js +3 -0
  43. package/dist/lib/skills/types.js.map +1 -0
  44. package/dist/memory/pipeline/auto.js +181 -0
  45. package/dist/memory/pipeline/auto.js.map +1 -0
  46. package/dist/memory/pipeline/index.js +3 -1
  47. package/dist/memory/pipeline/index.js.map +1 -1
  48. package/dist/memory.barrel.js +3 -1
  49. package/dist/memory.barrel.js.map +1 -1
  50. package/dist/providers/prompt/skillBasedPrompt.js.map +1 -1
  51. package/dist/skills.barrel.js +48 -0
  52. package/dist/skills.barrel.js.map +1 -0
  53. package/dist/tools/ToolRegistry.js +13 -0
  54. package/dist/tools/ToolRegistry.js.map +1 -1
  55. package/dist/types/index.d.ts +2 -0
  56. package/dist/types/index.d.ts.map +1 -1
  57. package/dist/types/lib/concepts/AgentBuilder.d.ts +27 -1
  58. package/dist/types/lib/concepts/AgentBuilder.d.ts.map +1 -1
  59. package/dist/types/lib/skills/defineSkill.d.ts +10 -0
  60. package/dist/types/lib/skills/defineSkill.d.ts.map +1 -0
  61. package/dist/types/lib/skills/index.d.ts +6 -0
  62. package/dist/types/lib/skills/index.d.ts.map +1 -0
  63. package/dist/types/lib/skills/registry.d.ts +82 -0
  64. package/dist/types/lib/skills/registry.d.ts.map +1 -0
  65. package/dist/types/lib/skills/renderBody.d.ts +22 -0
  66. package/dist/types/lib/skills/renderBody.d.ts.map +1 -0
  67. package/dist/types/lib/skills/surfaceMode.d.ts +34 -0
  68. package/dist/types/lib/skills/surfaceMode.d.ts.map +1 -0
  69. package/dist/types/lib/skills/types.d.ts +128 -0
  70. package/dist/types/lib/skills/types.d.ts.map +1 -0
  71. package/dist/types/memory/pipeline/auto.d.ts +60 -0
  72. package/dist/types/memory/pipeline/auto.d.ts.map +1 -0
  73. package/dist/types/memory/pipeline/index.d.ts +2 -0
  74. package/dist/types/memory/pipeline/index.d.ts.map +1 -1
  75. package/dist/types/memory.barrel.d.ts +2 -0
  76. package/dist/types/memory.barrel.d.ts.map +1 -1
  77. package/dist/types/providers/index.d.ts +1 -1
  78. package/dist/types/providers/index.d.ts.map +1 -1
  79. package/dist/types/providers/prompt/index.d.ts +1 -1
  80. package/dist/types/providers/prompt/index.d.ts.map +1 -1
  81. package/dist/types/providers/prompt/skillBasedPrompt.d.ts +2 -2
  82. package/dist/types/providers/prompt/skillBasedPrompt.d.ts.map +1 -1
  83. package/dist/types/providers.barrel.d.ts +1 -1
  84. package/dist/types/providers.barrel.d.ts.map +1 -1
  85. package/dist/types/skills.barrel.d.ts +43 -0
  86. package/dist/types/skills.barrel.d.ts.map +1 -0
  87. package/dist/types/tools/ToolRegistry.d.ts +10 -0
  88. package/dist/types/tools/ToolRegistry.d.ts.map +1 -1
  89. package/package.json +6 -1
package/dist/esm/index.js CHANGED
@@ -30,6 +30,8 @@ export { LLMError } from './types';
30
30
  export { agentLoop } from './executor';
31
31
  // ── Instructions (also available from agentfootprint/instructions) ──
32
32
  export { defineInstruction, AgentPattern, quickBind } from './instructions.barrel';
33
+ // ── Skills (also available from agentfootprint/skills) ──
34
+ export { defineSkill, SkillRegistry } from './skills.barrel';
33
35
  // ── Recorders (also available from agentfootprint/observe) ──
34
36
  export { TokenRecorder, ToolUsageRecorder, TurnRecorder, CostRecorder } from './observe.barrel';
35
37
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,+DAA+D;AAC/D,OAAO,EACL,KAAK,EACL,WAAW,EACX,OAAO,EACP,aAAa,EACb,GAAG,EACH,SAAS,EACT,SAAS,EACT,eAAe,EACf,KAAK,EACL,WAAW,EACX,QAAQ,EACR,cAAc,EACd,WAAW,EACX,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAQpB,sEAAsE;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,+DAA+D;AAC/D,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE7D,iEAAiE;AACjE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAc3E,+DAA+D;AAC/D,OAAO,EACL,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,WAAW,EACX,QAAQ,GACT,MAAM,SAAS,CAAC;AAEjB,+DAA+D;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AA0BnC,8DAA8D;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,uEAAuE;AACvE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGnF,+DAA+D;AAC/D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,+DAA+D;AAC/D,OAAO,EACL,KAAK,EACL,WAAW,EACX,OAAO,EACP,aAAa,EACb,GAAG,EACH,SAAS,EACT,SAAS,EACT,eAAe,EACf,KAAK,EACL,WAAW,EACX,QAAQ,EACR,cAAc,EACd,WAAW,EACX,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAQpB,sEAAsE;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,+DAA+D;AAC/D,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE7D,iEAAiE;AACjE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAc3E,+DAA+D;AAC/D,OAAO,EACL,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,WAAW,EACX,QAAQ,GACT,MAAM,SAAS,CAAC;AAEjB,+DAA+D;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AA0BnC,8DAA8D;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,uEAAuE;AACvE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGnF,2DAA2D;AAC3D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAG7D,+DAA+D;AAC/D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC"}
@@ -25,6 +25,8 @@ export class Agent {
25
25
  agentPattern = AgentPattern.Regular;
26
26
  overrides = new Map();
27
27
  agentInstructions = [];
28
+ skillsPromptAddition;
29
+ skillsTools;
28
30
  initialDecisionScope;
29
31
  enableStreaming = false;
30
32
  enableVerboseNarrative = false;
@@ -250,6 +252,63 @@ export class Agent {
250
252
  this.agentInstructions.push(i);
251
253
  return this;
252
254
  }
255
+ /**
256
+ * Attach a `SkillRegistry` — a typed, versioned bundle of procedures
257
+ * the model can discover via `list_skills` and activate via
258
+ * `read_skill(id)`. Registry's skills are wired through the existing
259
+ * AgentInstruction pipeline (each skill IS-A AgentInstruction) so
260
+ * per-skill `activeWhen` / `prompt` / `tools` / `onToolResult` rules
261
+ * fire exactly as with plain `.instruction(...)`.
262
+ *
263
+ * Idempotent: calling `.skills()` twice REPLACES the prior registry
264
+ * (panel #6). For additive composition, compose registries yourself
265
+ * before passing them in.
266
+ *
267
+ * @example
268
+ * ```ts
269
+ * const registry = new SkillRegistry<MyDecision>({ surfaceMode: 'auto' });
270
+ * registry.register(defineSkill({ id: 'port-triage', ... }));
271
+ *
272
+ * Agent.create({ provider: anthropic('claude-sonnet-4-5') })
273
+ * .skills(registry)
274
+ * .build();
275
+ * ```
276
+ */
277
+ skills(registry) {
278
+ // Drop any previously-mounted skill state — idempotent replace.
279
+ this.agentInstructions = this.agentInstructions.filter((i) => !i.__skillMount);
280
+ if (this.skillsTools) {
281
+ for (const t of this.skillsTools)
282
+ this.registry.unregister(t.id);
283
+ }
284
+ this.skillsPromptAddition = undefined;
285
+ this.skillsTools = undefined;
286
+ // 1. Skill bodies → AgentInstructions (per-skill prompt/tools/onToolResult/activeWhen)
287
+ for (const instr of registry.toInstructions()) {
288
+ // Mark so a later .skills() call can strip this one without
289
+ // affecting hand-registered instructions.
290
+ const tagged = { ...instr, __skillMount: true };
291
+ this.agentInstructions.push(tagged);
292
+ }
293
+ // 2. Auto-generated tools (list_skills, read_skill). Always registered —
294
+ // these are the discovery path for the model and must remain callable
295
+ // regardless of any skill's `activeWhen`. The `has()` guard handles
296
+ // the edge case where a caller registered a tool with the same id
297
+ // manually BEFORE calling `.skills()`.
298
+ const { listSkills, readSkill } = registry.toTools();
299
+ this.skillsTools = [listSkills, readSkill];
300
+ if (!this.registry.has(listSkills.id))
301
+ this.registry.register(listSkills);
302
+ if (!this.registry.has(readSkill.id))
303
+ this.registry.register(readSkill);
304
+ // 3. System-prompt fragment (only under 'system-prompt' / 'both' modes).
305
+ // Stored as a separate field so it can be stripped if `.skills()` is
306
+ // called again with a different registry.
307
+ const fragment = registry.toPromptFragment();
308
+ if (fragment)
309
+ this.skillsPromptAddition = fragment;
310
+ return this;
311
+ }
253
312
  /**
254
313
  * Set the initial Decision Scope values.
255
314
  * Tool handlers update these values; InstructionsToLLM reads them
@@ -303,10 +362,16 @@ export class Agent {
303
362
  }
304
363
  /** Build the agent and return a runner. */
305
364
  build() {
365
+ // If `.skills(registry)` supplied a system-prompt fragment, append
366
+ // it to the user's base prompt. Separated with a blank line so the
367
+ // two blocks read as distinct sections to the model.
368
+ const effectivePrompt = this.skillsPromptAddition
369
+ ? [this.systemPromptText, this.skillsPromptAddition].filter(Boolean).join('\n\n')
370
+ : this.systemPromptText;
306
371
  return new AgentRunner({
307
372
  provider: this.provider,
308
373
  name: this.agentName,
309
- systemPromptText: this.systemPromptText,
374
+ systemPromptText: effectivePrompt,
310
375
  registry: this.registry,
311
376
  maxIterations: this.maxIter,
312
377
  recorders: [...this.recorders],
@@ -1 +1 @@
1
- {"version":3,"file":"AgentBuilder.js","sourceRoot":"","sources":["../../../../src/lib/concepts/AgentBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AgentBuilder.js","sourceRoot":"","sources":["../../../../src/lib/concepts/AgentBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export function defineSkill(skill) {
2
+ // Dev-mode: warn on empty description (panel #3: descriptions ≤200 chars
3
+ // are load-bearing for classification; empty strings are almost certainly
4
+ // a bug).
5
+ if (typeof process !== 'undefined' &&
6
+ process.env?.['NODE_ENV'] !== 'production' &&
7
+ skill.description.trim().length === 0) {
8
+ // eslint-disable-next-line no-console
9
+ console.warn(`[agentfootprint] defineSkill('${skill.id}'): empty description — the model classifies skills by description, an empty one will never be picked.`);
10
+ }
11
+ return skill;
12
+ }
13
+ //# sourceMappingURL=defineSkill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineSkill.js","sourceRoot":"","sources":["../../../../src/lib/skills/defineSkill.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,WAAW,CAAsB,KAAuB;IACtE,yEAAyE;IACzE,0EAA0E;IAC1E,UAAU;IACV,IACE,OAAO,OAAO,KAAK,WAAW;QAC9B,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,YAAY;QAC1C,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EACrC,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CACV,iCAAiC,KAAK,CAAC,EAAE,wGAAwG,CAClJ,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { defineSkill } from './defineSkill';
2
+ export { SkillRegistry } from './registry';
3
+ export { renderSkillBody, resolveSkillBody } from './renderBody';
4
+ export { resolveSurfaceMode, parseAnthropicVersion, isClaudeStrongAdherence } from './surfaceMode';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/skills/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,197 @@
1
+ import { defineTool } from '../../tools';
2
+ import { resolveSkillBody } from './renderBody';
3
+ import { resolveSurfaceMode } from './surfaceMode';
4
+ const DEFAULT_PROMPT_HEADER = 'Available skills — call `read_skill({ id })` to activate one:';
5
+ export class SkillRegistry {
6
+ skills = new Map();
7
+ options;
8
+ constructor(options = {}) {
9
+ this.options = {
10
+ surfaceMode: options.surfaceMode ?? 'tool-only',
11
+ promptHeader: options.promptHeader ?? DEFAULT_PROMPT_HEADER,
12
+ ...(options.providerHint && { providerHint: options.providerHint }),
13
+ };
14
+ }
15
+ /**
16
+ * Register a skill.
17
+ *
18
+ * Behavior on duplicate `id`:
19
+ * - Same `version`: silent no-op (idempotent — safe to call during
20
+ * module init multiple times).
21
+ * - Different `version`: REPLACES the existing entry AND fires a
22
+ * dev-mode `console.warn`. Evals almost certainly need pinning
23
+ * to one version at a time, so the warning nudges authors to
24
+ * make the replacement intentional.
25
+ *
26
+ * Registration order is preserved by `list()` / `toPromptFragment()`.
27
+ *
28
+ * TODO(phase-2): when `refreshPolicy.afterTokens` lands, the registry
29
+ * must also expose a `hash` of its contents so the runtime can detect
30
+ * "registry changed since last read_skill surface" and re-inject.
31
+ */
32
+ register(skill) {
33
+ const existing = this.skills.get(skill.id);
34
+ if (existing) {
35
+ if (existing.version === skill.version) {
36
+ // Idempotent — same version, no-op.
37
+ return this;
38
+ }
39
+ if (typeof process !== 'undefined' && process.env?.['NODE_ENV'] !== 'production') {
40
+ // eslint-disable-next-line no-console
41
+ console.warn(`[agentfootprint] SkillRegistry: replacing skill '${skill.id}' v${existing.version} → v${skill.version}. Pin explicitly if this is not intentional.`);
42
+ }
43
+ }
44
+ this.skills.set(skill.id, skill);
45
+ return this;
46
+ }
47
+ /** Register multiple skills. */
48
+ registerAll(skills) {
49
+ for (const s of skills)
50
+ this.register(s);
51
+ return this;
52
+ }
53
+ /** Look up a skill by id. Returns undefined when unknown. */
54
+ getById(id) {
55
+ return this.skills.get(id);
56
+ }
57
+ /** All registered skills, in insertion order. */
58
+ list() {
59
+ return Array.from(this.skills.values());
60
+ }
61
+ /**
62
+ * Filter skills by scope tag and/or case-insensitive query over
63
+ * `title + description`. Used by the auto-generated `list_skills`
64
+ * tool — panel #3 (`scope` / `query` filtering in the signature
65
+ * from day one).
66
+ */
67
+ search(options = {}) {
68
+ const { scope, query } = options;
69
+ const q = query?.trim().toLowerCase();
70
+ const out = [];
71
+ for (const s of this.skills.values()) {
72
+ if (scope && !(s.scope ?? []).includes(scope))
73
+ continue;
74
+ if (q) {
75
+ const haystack = `${s.title} ${s.description}`.toLowerCase();
76
+ if (!haystack.includes(q))
77
+ continue;
78
+ }
79
+ out.push(s);
80
+ }
81
+ return out;
82
+ }
83
+ /**
84
+ * Resolve the effective surface mode for this registry, consulting
85
+ * the provider hint when `'auto'`. Stable — consumers can call this
86
+ * once at build time.
87
+ */
88
+ effectiveSurfaceMode() {
89
+ return resolveSurfaceMode(this.options.surfaceMode, this.options.providerHint);
90
+ }
91
+ /**
92
+ * Compile skills into the `AgentInstruction[]` the Agent loop already
93
+ * knows how to evaluate. Every Skill already extends AgentInstruction —
94
+ * this is a type-narrowed passthrough.
95
+ */
96
+ toInstructions() {
97
+ return Array.from(this.skills.values());
98
+ }
99
+ /**
100
+ * Generate the `list_skills` + `read_skill` tool pair. Both tools go
101
+ * through `defineTool()` so they appear correctly in manifest /
102
+ * narrative / toOpenAPI output (panel #6).
103
+ */
104
+ toTools() {
105
+ const registry = this;
106
+ const listSkills = defineTool({
107
+ id: 'list_skills',
108
+ description: 'List available skills. Returns {id, title, description, version} for each. Optional `scope` and `query` filters.',
109
+ inputSchema: {
110
+ type: 'object',
111
+ properties: {
112
+ scope: {
113
+ type: 'string',
114
+ description: 'Only return skills whose scope array includes this tag.',
115
+ },
116
+ query: {
117
+ type: 'string',
118
+ description: 'Case-insensitive search across title + description.',
119
+ },
120
+ },
121
+ },
122
+ handler: async (input) => {
123
+ const matches = registry.search({
124
+ ...(input?.scope && { scope: input.scope }),
125
+ ...(input?.query && { query: input.query }),
126
+ });
127
+ const entries = matches.map((s) => ({
128
+ id: s.id,
129
+ title: s.title,
130
+ description: s.description,
131
+ version: s.version,
132
+ ...(s.scope && { scope: s.scope }),
133
+ }));
134
+ return { content: JSON.stringify({ skills: entries }, null, 2) };
135
+ },
136
+ });
137
+ const readSkill = defineTool({
138
+ id: 'read_skill',
139
+ description: 'Read a skill body by id. The returned text is the procedure to follow — treat it as active guidance for the current turn.',
140
+ inputSchema: {
141
+ type: 'object',
142
+ properties: {
143
+ id: { type: 'string', description: 'The skill id returned by list_skills.' },
144
+ },
145
+ required: ['id'],
146
+ },
147
+ handler: async (input) => {
148
+ const id = input?.id;
149
+ if (typeof id !== 'string' || id.length === 0) {
150
+ return {
151
+ content: 'Error: read_skill requires a non-empty `id` string.',
152
+ isError: true,
153
+ };
154
+ }
155
+ const skill = registry.getById(id);
156
+ if (!skill) {
157
+ // Panel #3 + #8: unknown id is a tool-result error the model
158
+ // can recover from — NOT a thrown exception.
159
+ return {
160
+ content: `Error: skill '${id}' not found. Call list_skills to see available skills.`,
161
+ isError: true,
162
+ };
163
+ }
164
+ try {
165
+ const body = await resolveSkillBody(skill);
166
+ return { content: body };
167
+ }
168
+ catch (err) {
169
+ const msg = err instanceof Error ? err.message : String(err);
170
+ return {
171
+ content: `Error loading skill '${id}': ${msg}`,
172
+ isError: true,
173
+ };
174
+ }
175
+ },
176
+ });
177
+ return { listSkills, readSkill };
178
+ }
179
+ /**
180
+ * System-prompt fragment listing skills + their descriptions. Returns
181
+ * `null` when the effective surface mode is `'tool-only'` (no prompt
182
+ * injection) OR when the registry is empty (no ghost header).
183
+ */
184
+ toPromptFragment() {
185
+ const mode = this.effectiveSurfaceMode();
186
+ if (mode === 'tool-only')
187
+ return null;
188
+ if (this.skills.size === 0)
189
+ return null;
190
+ const lines = [this.options.promptHeader, ''];
191
+ for (const s of this.skills.values()) {
192
+ lines.push(`- ${s.id} — ${s.title}: ${s.description}`);
193
+ }
194
+ return lines.join('\n');
195
+ }
196
+ }
197
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/lib/skills/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ const TAG_REGEX = /<\/(memory|tool_use|skill)>/gi;
2
+ function escape(text) {
3
+ return text.replace(TAG_REGEX, (m) => `</m\u200D${m.slice(3)}`);
4
+ }
5
+ export function renderSkillBody(skill) {
6
+ const lines = [];
7
+ lines.push(`You are now following skill: ${skill.id} (v${skill.version}).`);
8
+ lines.push('');
9
+ lines.push(`Title: ${escape(skill.title)}`);
10
+ lines.push(`Purpose: ${escape(skill.description)}`);
11
+ if (skill.steps && skill.steps.length > 0) {
12
+ lines.push('');
13
+ lines.push('Procedure:');
14
+ for (let i = 0; i < skill.steps.length; i++) {
15
+ lines.push(`${i + 1}. ${escape(skill.steps[i])}`);
16
+ }
17
+ }
18
+ if (skill.prompt) {
19
+ lines.push('');
20
+ lines.push(`Guidance: ${escape(skill.prompt)}`);
21
+ }
22
+ return lines.join('\n');
23
+ }
24
+ /** Resolve the body override — string, async loader, or default render. */
25
+ export async function resolveSkillBody(skill) {
26
+ if (typeof skill.body === 'string')
27
+ return skill.body;
28
+ if (typeof skill.body === 'function') {
29
+ const result = skill.body();
30
+ return result instanceof Promise ? await result : result;
31
+ }
32
+ return renderSkillBody(skill);
33
+ }
34
+ //# sourceMappingURL=renderBody.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderBody.js","sourceRoot":"","sources":["../../../../src/lib/skills/renderBody.ts"],"names":[],"mappings":"AAmBA,MAAM,SAAS,GAAG,+BAA+B,CAAC;AAElD,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,eAAe,CAAI,KAAe;IAChD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,gCAAgC,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;IAC5E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAEpD,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAI,KAAe;IACvD,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IACtD,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC5B,OAAO,MAAM,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3D,CAAC;IACD,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Parse Anthropic model ids like `claude-3-5-sonnet-20240620`,
3
+ * `claude-sonnet-4-5-20250514`, `claude-opus-4-7` into a `{major, minor}`
4
+ * tuple. Returns `null` for ids we can't parse (unknown → fall back to
5
+ * the pre-3.5 path, which is the safe default).
6
+ *
7
+ * Handles the two id formats Anthropic has shipped:
8
+ * - Legacy: `claude-3-5-sonnet` / `claude-3-opus` (major.minor before family)
9
+ * - Current: `claude-sonnet-4-5` / `claude-opus-4-7` (family before major.minor)
10
+ */
11
+ export function parseAnthropicVersion(modelId) {
12
+ // Current format: claude-{family}-{major}-{minor}[-date]
13
+ const current = modelId.match(/^claude-[a-z]+-(\d+)-(\d+)(?:[-].*)?$/);
14
+ if (current) {
15
+ const major = Number(current[1]);
16
+ const minor = Number(current[2]);
17
+ if (Number.isFinite(major) && Number.isFinite(minor))
18
+ return { major, minor };
19
+ }
20
+ // Legacy format: claude-{major}-{minor}-{family}[-date]
21
+ const legacy = modelId.match(/^claude-(\d+)(?:-(\d+))?-[a-z]+(?:[-].*)?$/);
22
+ if (legacy) {
23
+ const major = Number(legacy[1]);
24
+ const minor = legacy[2] !== undefined ? Number(legacy[2]) : 0;
25
+ if (Number.isFinite(major) && Number.isFinite(minor))
26
+ return { major, minor };
27
+ }
28
+ return null;
29
+ }
30
+ /** True if the parsed version is Claude ≥ 3.5. */
31
+ export function isClaudeStrongAdherence(version) {
32
+ if (!version)
33
+ return false;
34
+ if (version.major > 3)
35
+ return true;
36
+ if (version.major === 3 && version.minor >= 5)
37
+ return true;
38
+ return false;
39
+ }
40
+ export function resolveSurfaceMode(mode, hint) {
41
+ if (mode !== 'auto')
42
+ return mode;
43
+ if (!hint)
44
+ return 'tool-only';
45
+ if (hint.provider === 'anthropic' && hint.modelId) {
46
+ const version = parseAnthropicVersion(hint.modelId);
47
+ return isClaudeStrongAdherence(version) ? 'both' : 'tool-only';
48
+ }
49
+ // OpenAI / Ollama / Bedrock / mock / unknown → portable default
50
+ return 'tool-only';
51
+ }
52
+ //# sourceMappingURL=surfaceMode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surfaceMode.js","sourceRoot":"","sources":["../../../../src/lib/skills/surfaceMode.ts"],"names":[],"mappings":"AAcA;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,yDAAyD;IACzD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACvE,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAChF,CAAC;IAED,wDAAwD;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC3E,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAChF,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,uBAAuB,CAAC,OAAgD;IACtF,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,IAAiB,EACjB,IAAmB;IAEnB,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,CAAC,IAAI;QAAE,OAAO,WAAW,CAAC;IAE9B,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpD,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;IACjE,CAAC;IAED,gEAAgE;IAChE,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/lib/skills/types.ts"],"names":[],"mappings":""}