agentfootprint 2.3.0 → 2.5.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 (212) hide show
  1. package/README.md +293 -247
  2. package/dist/adapters/llm/AnthropicProvider.js +2 -2
  3. package/dist/adapters/llm/AnthropicProvider.js.map +1 -1
  4. package/dist/adapters/llm/BedrockProvider.js +2 -2
  5. package/dist/adapters/llm/BedrockProvider.js.map +1 -1
  6. package/dist/adapters/llm/BrowserAnthropicProvider.js +96 -28
  7. package/dist/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
  8. package/dist/adapters/llm/OpenAIProvider.js +2 -2
  9. package/dist/adapters/llm/OpenAIProvider.js.map +1 -1
  10. package/dist/adapters/memory/agentcore.js +9 -3
  11. package/dist/adapters/memory/agentcore.js.map +1 -1
  12. package/dist/adapters/memory/redis.js +9 -3
  13. package/dist/adapters/memory/redis.js.map +1 -1
  14. package/dist/core/Agent.js +493 -79
  15. package/dist/core/Agent.js.map +1 -1
  16. package/dist/core/flowchartAsTool.js +188 -0
  17. package/dist/core/flowchartAsTool.js.map +1 -0
  18. package/dist/core/outputSchema.js +119 -0
  19. package/dist/core/outputSchema.js.map +1 -0
  20. package/dist/core/slots/buildSystemPromptSlot.js +8 -0
  21. package/dist/core/slots/buildSystemPromptSlot.js.map +1 -1
  22. package/dist/core/slots/buildToolsSlot.js +56 -5
  23. package/dist/core/slots/buildToolsSlot.js.map +1 -1
  24. package/dist/esm/adapters/llm/AnthropicProvider.js +2 -2
  25. package/dist/esm/adapters/llm/AnthropicProvider.js.map +1 -1
  26. package/dist/esm/adapters/llm/BedrockProvider.js +2 -2
  27. package/dist/esm/adapters/llm/BedrockProvider.js.map +1 -1
  28. package/dist/esm/adapters/llm/BrowserAnthropicProvider.js +96 -28
  29. package/dist/esm/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
  30. package/dist/esm/adapters/llm/OpenAIProvider.js +2 -2
  31. package/dist/esm/adapters/llm/OpenAIProvider.js.map +1 -1
  32. package/dist/esm/adapters/memory/agentcore.js +9 -3
  33. package/dist/esm/adapters/memory/agentcore.js.map +1 -1
  34. package/dist/esm/adapters/memory/redis.js +9 -3
  35. package/dist/esm/adapters/memory/redis.js.map +1 -1
  36. package/dist/esm/core/Agent.js +492 -78
  37. package/dist/esm/core/Agent.js.map +1 -1
  38. package/dist/esm/core/flowchartAsTool.js +184 -0
  39. package/dist/esm/core/flowchartAsTool.js.map +1 -0
  40. package/dist/esm/core/outputSchema.js +113 -0
  41. package/dist/esm/core/outputSchema.js.map +1 -0
  42. package/dist/esm/core/slots/buildSystemPromptSlot.js +8 -0
  43. package/dist/esm/core/slots/buildSystemPromptSlot.js.map +1 -1
  44. package/dist/esm/core/slots/buildToolsSlot.js +56 -5
  45. package/dist/esm/core/slots/buildToolsSlot.js.map +1 -1
  46. package/dist/esm/index.js +34 -5
  47. package/dist/esm/index.js.map +1 -1
  48. package/dist/esm/lib/injection-engine/SkillRegistry.js +181 -0
  49. package/dist/esm/lib/injection-engine/SkillRegistry.js.map +1 -0
  50. package/dist/esm/lib/injection-engine/factories/defineSkill.js +35 -0
  51. package/dist/esm/lib/injection-engine/factories/defineSkill.js.map +1 -1
  52. package/dist/esm/lib/injection-engine/index.js +9 -1
  53. package/dist/esm/lib/injection-engine/index.js.map +1 -1
  54. package/dist/esm/lib/injection-engine/skillTools.js +125 -0
  55. package/dist/esm/lib/injection-engine/skillTools.js.map +1 -0
  56. package/dist/esm/lib/injection-engine/types.js +8 -0
  57. package/dist/esm/lib/injection-engine/types.js.map +1 -1
  58. package/dist/esm/lib/lazyRequire.js +33 -0
  59. package/dist/esm/lib/lazyRequire.js.map +1 -0
  60. package/dist/esm/lib/mcp/mcpClient.js +4 -6
  61. package/dist/esm/lib/mcp/mcpClient.js.map +1 -1
  62. package/dist/esm/llm-providers.js +31 -0
  63. package/dist/esm/llm-providers.js.map +1 -0
  64. package/dist/esm/locales/index.js +144 -0
  65. package/dist/esm/locales/index.js.map +1 -0
  66. package/dist/esm/memory-providers.js +44 -0
  67. package/dist/esm/memory-providers.js.map +1 -0
  68. package/dist/esm/providers.js +11 -0
  69. package/dist/esm/providers.js.map +1 -1
  70. package/dist/esm/recorders/core/contextEngineering.js +155 -0
  71. package/dist/esm/recorders/core/contextEngineering.js.map +1 -0
  72. package/dist/esm/recorders/observability/commentary/commentaryTemplates.js +6 -1
  73. package/dist/esm/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
  74. package/dist/esm/security/PermissionPolicy.js +135 -0
  75. package/dist/esm/security/PermissionPolicy.js.map +1 -0
  76. package/dist/esm/security/index.js +38 -0
  77. package/dist/esm/security/index.js.map +1 -0
  78. package/dist/esm/tool-providers/gatedTools.js +52 -0
  79. package/dist/esm/tool-providers/gatedTools.js.map +1 -0
  80. package/dist/esm/tool-providers/index.js +43 -0
  81. package/dist/esm/tool-providers/index.js.map +1 -0
  82. package/dist/esm/tool-providers/skillScopedTools.js +63 -0
  83. package/dist/esm/tool-providers/skillScopedTools.js.map +1 -0
  84. package/dist/esm/tool-providers/staticTools.js +33 -0
  85. package/dist/esm/tool-providers/staticTools.js.map +1 -0
  86. package/dist/esm/tool-providers/types.js +53 -0
  87. package/dist/esm/tool-providers/types.js.map +1 -0
  88. package/dist/index.js +57 -12
  89. package/dist/index.js.map +1 -1
  90. package/dist/lib/injection-engine/SkillRegistry.js +185 -0
  91. package/dist/lib/injection-engine/SkillRegistry.js.map +1 -0
  92. package/dist/lib/injection-engine/factories/defineSkill.js +37 -1
  93. package/dist/lib/injection-engine/factories/defineSkill.js.map +1 -1
  94. package/dist/lib/injection-engine/index.js +14 -1
  95. package/dist/lib/injection-engine/index.js.map +1 -1
  96. package/dist/lib/injection-engine/skillTools.js +130 -0
  97. package/dist/lib/injection-engine/skillTools.js.map +1 -0
  98. package/dist/lib/injection-engine/types.js +8 -0
  99. package/dist/lib/injection-engine/types.js.map +1 -1
  100. package/dist/lib/lazyRequire.js +37 -0
  101. package/dist/lib/lazyRequire.js.map +1 -0
  102. package/dist/lib/mcp/mcpClient.js +4 -6
  103. package/dist/lib/mcp/mcpClient.js.map +1 -1
  104. package/dist/llm-providers.js +47 -0
  105. package/dist/llm-providers.js.map +1 -0
  106. package/dist/locales/index.js +149 -0
  107. package/dist/locales/index.js.map +1 -0
  108. package/dist/memory-providers.js +49 -0
  109. package/dist/memory-providers.js.map +1 -0
  110. package/dist/providers.js +11 -0
  111. package/dist/providers.js.map +1 -1
  112. package/dist/recorders/core/contextEngineering.js +161 -0
  113. package/dist/recorders/core/contextEngineering.js.map +1 -0
  114. package/dist/recorders/observability/commentary/commentaryTemplates.js +6 -1
  115. package/dist/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
  116. package/dist/security/PermissionPolicy.js +139 -0
  117. package/dist/security/PermissionPolicy.js.map +1 -0
  118. package/dist/security/index.js +42 -0
  119. package/dist/security/index.js.map +1 -0
  120. package/dist/tool-providers/gatedTools.js +56 -0
  121. package/dist/tool-providers/gatedTools.js.map +1 -0
  122. package/dist/tool-providers/index.js +51 -0
  123. package/dist/tool-providers/index.js.map +1 -0
  124. package/dist/tool-providers/skillScopedTools.js +67 -0
  125. package/dist/tool-providers/skillScopedTools.js.map +1 -0
  126. package/dist/tool-providers/staticTools.js +37 -0
  127. package/dist/tool-providers/staticTools.js.map +1 -0
  128. package/dist/tool-providers/types.js +54 -0
  129. package/dist/tool-providers/types.js.map +1 -0
  130. package/dist/types/adapters/llm/AnthropicProvider.d.ts.map +1 -1
  131. package/dist/types/adapters/llm/BedrockProvider.d.ts.map +1 -1
  132. package/dist/types/adapters/llm/BrowserAnthropicProvider.d.ts.map +1 -1
  133. package/dist/types/adapters/llm/OpenAIProvider.d.ts.map +1 -1
  134. package/dist/types/adapters/memory/agentcore.d.ts +7 -1
  135. package/dist/types/adapters/memory/agentcore.d.ts.map +1 -1
  136. package/dist/types/adapters/memory/redis.d.ts +7 -1
  137. package/dist/types/adapters/memory/redis.d.ts.map +1 -1
  138. package/dist/types/core/Agent.d.ts +216 -2
  139. package/dist/types/core/Agent.d.ts.map +1 -1
  140. package/dist/types/core/flowchartAsTool.d.ts +161 -0
  141. package/dist/types/core/flowchartAsTool.d.ts.map +1 -0
  142. package/dist/types/core/outputSchema.d.ts +128 -0
  143. package/dist/types/core/outputSchema.d.ts.map +1 -0
  144. package/dist/types/core/slots/buildSystemPromptSlot.d.ts.map +1 -1
  145. package/dist/types/core/slots/buildToolsSlot.d.ts +10 -0
  146. package/dist/types/core/slots/buildToolsSlot.d.ts.map +1 -1
  147. package/dist/types/index.d.ts +8 -4
  148. package/dist/types/index.d.ts.map +1 -1
  149. package/dist/types/lib/injection-engine/SkillRegistry.d.ts +148 -0
  150. package/dist/types/lib/injection-engine/SkillRegistry.d.ts.map +1 -0
  151. package/dist/types/lib/injection-engine/factories/defineSkill.d.ts +99 -0
  152. package/dist/types/lib/injection-engine/factories/defineSkill.d.ts.map +1 -1
  153. package/dist/types/lib/injection-engine/index.d.ts +5 -2
  154. package/dist/types/lib/injection-engine/index.d.ts.map +1 -1
  155. package/dist/types/lib/injection-engine/skillTools.d.ts +73 -0
  156. package/dist/types/lib/injection-engine/skillTools.d.ts.map +1 -0
  157. package/dist/types/lib/injection-engine/types.d.ts +28 -0
  158. package/dist/types/lib/injection-engine/types.d.ts.map +1 -1
  159. package/dist/types/lib/lazyRequire.d.ts +30 -0
  160. package/dist/types/lib/lazyRequire.d.ts.map +1 -0
  161. package/dist/types/lib/mcp/mcpClient.d.ts.map +1 -1
  162. package/dist/types/llm-providers.d.ts +31 -0
  163. package/dist/types/llm-providers.d.ts.map +1 -0
  164. package/dist/types/locales/index.d.ts +133 -0
  165. package/dist/types/locales/index.d.ts.map +1 -0
  166. package/dist/types/memory-providers.d.ts +41 -0
  167. package/dist/types/memory-providers.d.ts.map +1 -0
  168. package/dist/types/providers.d.ts +11 -0
  169. package/dist/types/providers.d.ts.map +1 -1
  170. package/dist/types/recorders/core/contextEngineering.d.ts +137 -0
  171. package/dist/types/recorders/core/contextEngineering.d.ts.map +1 -0
  172. package/dist/types/recorders/observability/commentary/commentaryTemplates.d.ts.map +1 -1
  173. package/dist/types/security/PermissionPolicy.d.ts +125 -0
  174. package/dist/types/security/PermissionPolicy.d.ts.map +1 -0
  175. package/dist/types/security/index.d.ts +40 -0
  176. package/dist/types/security/index.d.ts.map +1 -0
  177. package/dist/types/tool-providers/gatedTools.d.ts +37 -0
  178. package/dist/types/tool-providers/gatedTools.d.ts.map +1 -0
  179. package/dist/types/tool-providers/index.d.ts +42 -0
  180. package/dist/types/tool-providers/index.d.ts.map +1 -0
  181. package/dist/types/tool-providers/skillScopedTools.d.ts +46 -0
  182. package/dist/types/tool-providers/skillScopedTools.d.ts.map +1 -0
  183. package/dist/types/tool-providers/staticTools.d.ts +22 -0
  184. package/dist/types/tool-providers/staticTools.d.ts.map +1 -0
  185. package/dist/types/tool-providers/types.d.ts +103 -0
  186. package/dist/types/tool-providers/types.d.ts.map +1 -0
  187. package/package.json +62 -9
  188. package/README.proposed.md +0 -258
  189. package/dist/instructions.js +0 -21
  190. package/dist/instructions.js.map +0 -1
  191. package/dist/lib/instructions/defineInstruction.js +0 -35
  192. package/dist/lib/instructions/defineInstruction.js.map +0 -1
  193. package/dist/lib/instructions/evaluator.js +0 -38
  194. package/dist/lib/instructions/evaluator.js.map +0 -1
  195. package/dist/lib/instructions/index.js +0 -48
  196. package/dist/lib/instructions/index.js.map +0 -1
  197. package/dist/lib/instructions/types.js +0 -22
  198. package/dist/lib/instructions/types.js.map +0 -1
  199. package/dist/memory/conversationHelpers.js +0 -39
  200. package/dist/memory/conversationHelpers.js.map +0 -1
  201. package/dist/types/instructions.d.ts +0 -5
  202. package/dist/types/instructions.d.ts.map +0 -1
  203. package/dist/types/lib/instructions/defineInstruction.d.ts +0 -22
  204. package/dist/types/lib/instructions/defineInstruction.d.ts.map +0 -1
  205. package/dist/types/lib/instructions/evaluator.d.ts +0 -11
  206. package/dist/types/lib/instructions/evaluator.d.ts.map +0 -1
  207. package/dist/types/lib/instructions/index.d.ts +0 -44
  208. package/dist/types/lib/instructions/index.d.ts.map +0 -1
  209. package/dist/types/lib/instructions/types.d.ts +0 -100
  210. package/dist/types/lib/instructions/types.d.ts.map +0 -1
  211. package/dist/types/memory/conversationHelpers.d.ts +0 -19
  212. package/dist/types/memory/conversationHelpers.d.ts.map +0 -1
package/dist/esm/index.js CHANGED
@@ -26,6 +26,7 @@ export { COMPOSITION_KEYS, } from './recorders/core/types.js';
26
26
  export { buildEventMeta, parseSubflowPath } from './bridge/eventMeta.js';
27
27
  // Core recorders
28
28
  export { ContextRecorder } from './recorders/core/ContextRecorder.js';
29
+ export { contextEngineering, isEngineeredSource, isBaselineSource, ENGINEERED_SOURCES, BASELINE_SOURCES, } from './recorders/core/contextEngineering.js';
29
30
  export { EmitBridge } from './recorders/core/EmitBridge.js';
30
31
  export { streamRecorder } from './recorders/core/StreamRecorder.js';
31
32
  export { agentRecorder } from './recorders/core/AgentRecorder.js';
@@ -62,6 +63,8 @@ export { defaultThinkingTemplates, selectThinkingState, renderThinkingLine, } fr
62
63
  // Primitives (core/)
63
64
  export { LLMCall, LLMCallBuilder, } from './core/LLMCall.js';
64
65
  export { Agent, AgentBuilder, } from './core/Agent.js';
66
+ export { OutputSchemaError, applyOutputSchema, buildDefaultInstruction, } from './core/outputSchema.js';
67
+ export { flowchartAsTool, } from './core/flowchartAsTool.js';
65
68
  export { defineTool } from './core/tools.js';
66
69
  // Slot subflow builders are intentionally NOT exported. They are
67
70
  // internal helpers used only by `Agent.buildChart()` and
@@ -79,10 +82,22 @@ export { Loop, LoopBuilder, } from './core-flow/Loop.js';
79
82
  // Adapters — LLM providers
80
83
  // `mock(...)` is the lowercase factory equivalent to `new MockProvider(...)`.
81
84
  // `anthropic(...)` is the real Claude provider via `@anthropic-ai/sdk`.
85
+ // Zero-peer-dep providers — safe to re-export from the main barrel
86
+ // because bundlers walking these never touch optional peer-dep code.
87
+ //
88
+ // Vendor-SDK-backed providers (AnthropicProvider, OpenAIProvider,
89
+ // BedrockProvider) live ONLY at `agentfootprint/llm-providers` (or
90
+ // the legacy `agentfootprint/providers` alias). That subpath
91
+ // segregation means bundlers walking from `agentfootprint` main
92
+ // never see the lazy peer-dep requires for `@anthropic-ai/sdk`,
93
+ // `openai`, `@aws-sdk/client-bedrock-runtime`, etc. — automatic
94
+ // tree-shaking, no bundler-side workarounds.
95
+ //
96
+ // Migration (v2.4 → v2.5):
97
+ // import { AnthropicProvider } from 'agentfootprint'; // ❌ removed
98
+ // import { AnthropicProvider } from 'agentfootprint/llm-providers'; // ✓ canonical
99
+ // import { AnthropicProvider } from 'agentfootprint/providers'; // ✓ legacy alias
82
100
  export { MockProvider, mock, } from './adapters/llm/MockProvider.js';
83
- export { anthropic, AnthropicProvider, } from './adapters/llm/AnthropicProvider.js';
84
- export { openai, OpenAIProvider, ollama, } from './adapters/llm/OpenAIProvider.js';
85
- export { bedrock, BedrockProvider, } from './adapters/llm/BedrockProvider.js';
86
101
  export { browserAnthropic, BrowserAnthropicProvider, } from './adapters/llm/BrowserAnthropicProvider.js';
87
102
  export { browserOpenai, BrowserOpenAIProvider, } from './adapters/llm/BrowserOpenAIProvider.js';
88
103
  export { createProvider, } from './adapters/llm/createProvider.js';
@@ -92,9 +107,9 @@ export { toSSE, SSEFormatter, encodeSSE } from './stream.js';
92
107
  // One Injection type, four sugar factories, one engine subflow.
93
108
  export {
94
109
  // Engine
95
- evaluateInjections, buildInjectionEngineSubflow,
110
+ evaluateInjections, buildInjectionEngineSubflow, projectActiveInjection,
96
111
  // Sugar factories — one per injection flavor
97
- defineInstruction, defineSkill, defineSteering, defineFact, } from './lib/injection-engine/index.js';
112
+ defineInstruction, defineSkill, resolveSurfaceMode, SkillRegistry, buildListSkillsTool, buildReadSkillTool, defineSteering, defineFact, } from './lib/injection-engine/index.js';
98
113
  // Patterns — factory functions composing primitives + core-flow into
99
114
  // well-known agent patterns from the research literature.
100
115
  export * from './patterns/index.js';
@@ -128,4 +143,18 @@ export { defineRAG, indexDocuments, } from './lib/rag/index.js';
128
143
  // `@modelcontextprotocol/sdk` is a lazy-required peer-dep (no runtime
129
144
  // cost when MCP isn't used).
130
145
  export { mcpClient, mockMcpClient, } from './lib/mcp/index.js';
146
+ // Tool dispatch primitives (v2.5+). New `agentfootprint/tool-providers`
147
+ // subpath bundles tool sources (mcpClient / mockMcpClient) with tool
148
+ // dispatch primitives (staticTools / gatedTools) so consumers find
149
+ // "everything tool-related" in one place. Top-level barrel re-exports
150
+ // the dispatch primitives too — `mcpClient` already re-exports above.
151
+ export { staticTools, gatedTools, skillScopedTools, } from './tool-providers/index.js';
152
+ // Cross-cutting authorization (v2.5+). `agentfootprint/security` is the
153
+ // dedicated subpath; the root barrel also re-exports `PermissionPolicy`
154
+ // so existing v2.4 consumers find it at the top level.
155
+ export { PermissionPolicy, } from './security/index.js';
156
+ // Message Catalog Pattern (v2.5+). `agentfootprint/locales` is the
157
+ // dedicated subpath; the root barrel also re-exports the helpers so
158
+ // existing v2.4 consumers find them at the top level.
159
+ export { defaultCommentaryMessages, defaultThinkingMessages, composeMessages, validateMessages, } from './locales/index.js';
131
160
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * SkillRegistry — centralized governance for Skills across one or
3
+ * more Agents.
4
+ *
5
+ * Most apps register Skills directly on the Agent via `.skill(s)`.
6
+ * Once you have multiple Agents that share a common skill catalog
7
+ * (a customer-support pool, a research team, a multi-step workflow
8
+ * where each step uses different overlapping skills), hand-syncing
9
+ * `.skill()` calls per Agent gets fragile.
10
+ *
11
+ * `SkillRegistry` is the answer: register once, attach to many
12
+ * Agents via `.skills(registry)`. Add a Skill to the registry and
13
+ * every consumer Agent picks it up at next build.
14
+ *
15
+ * @example
16
+ * const registry = new SkillRegistry();
17
+ * registry.register(billingSkill);
18
+ * registry.register(refundSkill);
19
+ *
20
+ * const supportAgent = Agent.create({ provider }).skills(registry).build();
21
+ * const escalationAgent = Agent.create({ provider }).skills(registry).build();
22
+ *
23
+ * // Add a new skill — both agents pick it up at next build.
24
+ * registry.register(complianceSkill);
25
+ */
26
+ import { buildListSkillsTool, buildReadSkillTool } from './skillTools.js';
27
+ import { resolveSurfaceMode } from './factories/defineSkill.js';
28
+ export class SkillRegistry {
29
+ skills = new Map();
30
+ opts;
31
+ /**
32
+ * Construct an empty registry. Optional `{ surfaceMode, providerHint }`
33
+ * fields set registry-level defaults; absent both, the registry is a
34
+ * pure container (the v2.4 surface).
35
+ */
36
+ constructor(opts = {}) {
37
+ this.opts = Object.freeze({ ...opts });
38
+ }
39
+ /** Registry-level default `surfaceMode`, or `undefined` if unset. */
40
+ get surfaceMode() {
41
+ return this.opts.surfaceMode;
42
+ }
43
+ /** Registry-level provider hint, or `undefined` if unset. */
44
+ get providerHint() {
45
+ return this.opts.providerHint;
46
+ }
47
+ /**
48
+ * Register a skill. Throws if `skill.flavor !== 'skill'` or if a
49
+ * skill with the same id is already registered (use `.replace(...)`
50
+ * to overwrite intentionally).
51
+ */
52
+ register(skill) {
53
+ if (skill.flavor !== 'skill') {
54
+ throw new Error(`SkillRegistry.register: expected a Skill (flavor: 'skill'), got flavor: '${skill.flavor}' (id: '${skill.id}'). Use defineSkill(...) to construct.`);
55
+ }
56
+ if (this.skills.has(skill.id)) {
57
+ throw new Error(`SkillRegistry.register: skill '${skill.id}' is already registered. Use .replace('${skill.id}', skill) to overwrite.`);
58
+ }
59
+ this.skills.set(skill.id, skill);
60
+ return this;
61
+ }
62
+ /** Replace an existing skill by id. Throws if id is not registered. */
63
+ replace(id, skill) {
64
+ if (!this.skills.has(id)) {
65
+ throw new Error(`SkillRegistry.replace: no skill registered at '${id}'. Use .register(...) for new skills.`);
66
+ }
67
+ if (skill.flavor !== 'skill') {
68
+ throw new Error(`SkillRegistry.replace: expected a Skill (flavor: 'skill'), got '${skill.flavor}'.`);
69
+ }
70
+ if (skill.id !== id) {
71
+ throw new Error(`SkillRegistry.replace: skill.id ('${skill.id}') does not match the slot id ('${id}'). Either use .register(...) for the new id or pass a skill with the matching id.`);
72
+ }
73
+ this.skills.set(id, skill);
74
+ return this;
75
+ }
76
+ /** Remove a skill by id. No-op if not registered. */
77
+ unregister(id) {
78
+ this.skills.delete(id);
79
+ return this;
80
+ }
81
+ /** Look up by id. Returns undefined if not registered. */
82
+ get(id) {
83
+ return this.skills.get(id);
84
+ }
85
+ /** True iff a skill with the given id is registered. */
86
+ has(id) {
87
+ return this.skills.has(id);
88
+ }
89
+ /** All registered skills. Order matches registration order. */
90
+ list() {
91
+ return [...this.skills.values()];
92
+ }
93
+ /** Number of registered skills. */
94
+ get size() {
95
+ return this.skills.size;
96
+ }
97
+ /** Drop all registrations. */
98
+ clear() {
99
+ this.skills.clear();
100
+ }
101
+ /**
102
+ * Materialize the LLM-facing skill discovery tools from the current
103
+ * registry contents. Returns `{ listSkills, readSkill }`:
104
+ *
105
+ * - `list_skills` — no-arg tool the LLM calls to enumerate
106
+ * `{ id, description }` for every registered skill. Lets the
107
+ * LLM discover skills without paying the prompt-token cost of
108
+ * a static catalog in the system prompt.
109
+ *
110
+ * - `read_skill({ id })` — activates the named skill for the
111
+ * NEXT iteration. The Agent's tool-calls subflow inspects this
112
+ * tool call by name and updates `scope.activatedInjectionIds`
113
+ * so the InjectionEngine on iter N+1 includes the skill in the
114
+ * active set (body lands in the system slot; gated tools land
115
+ * in the tools slot).
116
+ *
117
+ * Both entries are `undefined` when the registry is empty — filter
118
+ * before adding to a tool list:
119
+ *
120
+ * const { listSkills, readSkill } = registry.toTools();
121
+ * const tools = [listSkills, readSkill, ...other].filter(Boolean) as Tool[];
122
+ *
123
+ * Composes with `gatedTools` from `agentfootprint/tool-providers`
124
+ * so PermissionPolicy can scope which roles see the skill discovery
125
+ * surface.
126
+ *
127
+ * @returns A `SkillToolPair` (`{ listSkills, readSkill }`).
128
+ */
129
+ toTools() {
130
+ const skills = this.list();
131
+ return {
132
+ listSkills: buildListSkillsTool(skills),
133
+ readSkill: buildReadSkillTool(skills),
134
+ };
135
+ }
136
+ /**
137
+ * Resolve the effective `surfaceMode` for a skill, applying the
138
+ * cascade:
139
+ *
140
+ * 1. If the skill's own `metadata.surfaceMode` is concrete
141
+ * (`'system-prompt'` / `'tool-only'` / `'both'`), return it.
142
+ * Per-skill explicit choice always wins.
143
+ * 2. Else if the registry was constructed with a concrete
144
+ * `surfaceMode`, return that.
145
+ * 3. Else delegate to `resolveSurfaceMode(provider, model)` using
146
+ * the explicit `provider` arg (or `this.providerHint` if
147
+ * omitted). Falls back to `'tool-only'` when no provider is
148
+ * known.
149
+ *
150
+ * Forward-compat for Block C / v2.5 per-mode runtime routing: the
151
+ * runtime calls this with the agent's provider + model to decide
152
+ * how to materialize the skill's body into slots.
153
+ *
154
+ * Throws if the skill is not registered (catches typos at the
155
+ * caller site rather than silently resolving against a stranger).
156
+ *
157
+ * @param skillOrId A registered Skill `Injection` OR its `id`.
158
+ * @param provider Provider name override (wins over `providerHint`).
159
+ * @param model Model name for the per-provider attention rule.
160
+ */
161
+ resolveForSkill(skillOrId, provider, model) {
162
+ const skill = typeof skillOrId === 'string' ? this.get(skillOrId) : skillOrId;
163
+ if (!skill) {
164
+ const id = typeof skillOrId === 'string' ? skillOrId : skillOrId.id;
165
+ throw new Error(`SkillRegistry.resolveForSkill: no skill registered at id '${id}'.`);
166
+ }
167
+ if (skill.flavor !== 'skill') {
168
+ throw new Error(`SkillRegistry.resolveForSkill: '${skill.id}' has flavor '${skill.flavor}', expected 'skill'.`);
169
+ }
170
+ const meta = skill.metadata;
171
+ const skillMode = meta?.surfaceMode;
172
+ if (skillMode && skillMode !== 'auto')
173
+ return skillMode;
174
+ if (this.opts.surfaceMode && this.opts.surfaceMode !== 'auto') {
175
+ return this.opts.surfaceMode;
176
+ }
177
+ const effectiveProvider = provider ?? this.opts.providerHint ?? 'unknown';
178
+ return resolveSurfaceMode(effectiveProvider, model);
179
+ }
180
+ }
181
+ //# sourceMappingURL=SkillRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillRegistry.js","sourceRoot":"","sources":["../../../../src/lib/injection-engine/SkillRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAsB,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAoB,MAAM,4BAA4B,CAAC;AAkClF,MAAM,OAAO,aAAa;IACP,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;IACtC,IAAI,CAAuB;IAE5C;;;;OAIG;IACH,YAAY,OAA6B,EAAE;QACzC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,qEAAqE;IACrE,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IAC/B,CAAC;IAED,6DAA6D;IAC7D,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,KAAgB;QACvB,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,4EAA4E,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC,EAAE,wCAAwC,CACpJ,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,kCAAkC,KAAK,CAAC,EAAE,0CAA0C,KAAK,CAAC,EAAE,yBAAyB,CACtH,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uEAAuE;IACvE,OAAO,CAAC,EAAU,EAAE,KAAgB;QAClC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,kDAAkD,EAAE,uCAAuC,CAC5F,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,mEAAmE,KAAK,CAAC,MAAM,IAAI,CACpF,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,qCAAqC,KAAK,CAAC,EAAE,mCAAmC,EAAE,oFAAoF,CACvK,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qDAAqD;IACrD,UAAU,CAAC,EAAU;QACnB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0DAA0D;IAC1D,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,wDAAwD;IACxD,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,+DAA+D;IAC/D,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,mCAAmC;IACnC,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,8BAA8B;IAC9B,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,OAAO;QACL,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3B,OAAO;YACL,UAAU,EAAE,mBAAmB,CAAC,MAAM,CAAC;YACvC,SAAS,EAAE,kBAAkB,CAAC,MAAM,CAAC;SACtC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,eAAe,CACb,SAA6B,EAC7B,QAAiB,EACjB,KAAc;QAEd,MAAM,KAAK,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,EAAE,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,6DAA6D,EAAE,IAAI,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,mCAAmC,KAAK,CAAC,EAAE,iBAAiB,KAAK,CAAC,MAAM,sBAAsB,CAC/F,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,QAAqD,CAAC;QACzE,MAAM,SAAS,GAAG,IAAI,EAAE,WAAW,CAAC;QACpC,IAAI,SAAS,IAAI,SAAS,KAAK,MAAM;YAAE,OAAO,SAAS,CAAC;QAExD,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;YAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QAC/B,CAAC;QAED,MAAM,iBAAiB,GAAG,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC;QAC1E,OAAO,kBAAkB,CAAC,iBAAiB,EAAE,KAAK,CAAiC,CAAC;IACtF,CAAC;CACF"}
@@ -26,6 +26,32 @@
26
26
  * tools: [refundTool, chargeHistoryTool],
27
27
  * });
28
28
  */
29
+ /**
30
+ * Resolve `surfaceMode: 'auto'` to a concrete mode based on provider
31
+ * + model. The defaults match the per-provider attention profile
32
+ * documented in the Skills, explained essay:
33
+ *
34
+ * - Claude >= 3.5 → 'both' (cheap to cache, high adherence)
35
+ * - Claude pre-3.5 → 'tool-only' (recency-first more reliable)
36
+ * - OpenAI / Bedrock / Ollama / Mock / unknown → 'tool-only'
37
+ *
38
+ * Pure function — no side effects. Consumers can call directly to
39
+ * inspect what `'auto'` will resolve to in their stack.
40
+ */
41
+ export function resolveSurfaceMode(provider, model) {
42
+ const p = provider.toLowerCase();
43
+ if (p === 'anthropic') {
44
+ // Match both naming styles in current use:
45
+ // - claude-3-5-sonnet-..., claude-3.5-...
46
+ // - claude-sonnet-4-..., claude-haiku-4-..., claude-opus-4-..., claude-4-...
47
+ // Anything matching "Claude >= 3.5" gets 'both'; older Claudes get 'tool-only'.
48
+ if (model && /(claude-3-5|claude-3\.5|claude-(?:opus-|sonnet-|haiku-)?[4-9])/i.test(model)) {
49
+ return 'both';
50
+ }
51
+ return 'tool-only';
52
+ }
53
+ return 'tool-only';
54
+ }
29
55
  export function defineSkill(opts) {
30
56
  if (!opts.id || opts.id.trim().length === 0) {
31
57
  throw new Error('defineSkill: `id` is required and must be non-empty.');
@@ -48,6 +74,15 @@ export function defineSkill(opts) {
48
74
  systemPrompt: opts.body,
49
75
  ...(opts.tools && opts.tools.length > 0 && { tools: opts.tools }),
50
76
  },
77
+ // Skill-specific options live in metadata. The engine reads them
78
+ // when present; absent metadata = current behavior. Forward-compat:
79
+ // when v2.5 implements per-mode routing diversity, this field is
80
+ // already where the runtime looks.
81
+ metadata: Object.freeze({
82
+ surfaceMode: opts.surfaceMode ?? 'auto',
83
+ ...(opts.refreshPolicy && { refreshPolicy: opts.refreshPolicy }),
84
+ ...(opts.autoActivate && { autoActivate: opts.autoActivate }),
85
+ }),
51
86
  });
52
87
  }
53
88
  //# sourceMappingURL=defineSkill.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defineSkill.js","sourceRoot":"","sources":["../../../../../src/lib/injection-engine/factories/defineSkill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAqBH,MAAM,UAAU,WAAW,CAAC,IAAwB;IAClD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CACb,eAAe,IAAI,CAAC,EAAE,0EAA0E,CACjG,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,EAAE,0BAA0B,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,MAAM,EAAE,OAAgB;QACxB,OAAO,EAAE;YACP,IAAI,EAAE,eAAwB;YAC9B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,YAAY;SAC9C;QACD,MAAM,EAAE;YACN,YAAY,EAAE,IAAI,CAAC,IAAI;YACvB,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;SAClE;KACF,CAAyB,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"defineSkill.js","sourceRoot":"","sources":["../../../../../src/lib/injection-engine/factories/defineSkill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AA8GH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,KAAc;IACjE,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,CAAC,KAAK,WAAW,EAAE,CAAC;QACtB,2CAA2C;QAC3C,4CAA4C;QAC5C,+EAA+E;QAC/E,gFAAgF;QAChF,IAAI,KAAK,IAAI,iEAAiE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3F,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAwB;IAClD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CACb,eAAe,IAAI,CAAC,EAAE,0EAA0E,CACjG,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,EAAE,0BAA0B,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,MAAM,EAAE,OAAgB;QACxB,OAAO,EAAE;YACP,IAAI,EAAE,eAAwB;YAC9B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,YAAY;SAC9C;QACD,MAAM,EAAE;YACN,YAAY,EAAE,IAAI,CAAC,IAAI;YACvB,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;SAClE;QACD,iEAAiE;QACjE,oEAAoE;QACpE,iEAAiE;QACjE,mCAAmC;QACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;YACtB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,MAAM;YACvC,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;YAChE,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;SAC9D,CAAC;KACH,CAAyB,CAAC;AAC7B,CAAC"}
@@ -5,12 +5,20 @@
5
5
  * One `Injection` type. One `InjectionEngine` subflow. N typed sugar
6
6
  * factories. See `README.md` in this folder for the full concept.
7
7
  */
8
+ // POJO projection — used by slot subflows + advanced consumers
9
+ export { projectActiveInjection } from './types.js';
8
10
  // Engine
9
11
  export { evaluateInjections } from './evaluator.js';
10
12
  export { buildInjectionEngineSubflow, } from './buildInjectionEngineSubflow.js';
11
13
  // Sugar factories — Ships four; more flavors planned (RAG / Memory / Guardrail)
12
14
  export { defineInstruction } from './factories/defineInstruction.js';
13
- export { defineSkill } from './factories/defineSkill.js';
15
+ export { defineSkill, resolveSurfaceMode, } from './factories/defineSkill.js';
16
+ export { SkillRegistry } from './SkillRegistry.js';
17
+ // Skill-tool builders — used by SkillRegistry.toTools() and the Agent's
18
+ // auto-attach path. Exported so consumers building custom tool wiring
19
+ // (e.g., gatedTools chains) can compose the same `list_skills` /
20
+ // `read_skill` tools directly.
21
+ export { buildListSkillsTool, buildReadSkillTool } from './skillTools.js';
14
22
  export { defineSteering } from './factories/defineSteering.js';
15
23
  export { defineFact } from './factories/defineFact.js';
16
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/injection-engine/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,SAAS;AACT,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACL,2BAA2B,GAE5B,MAAM,kCAAkC,CAAC;AAE1C,gFAAgF;AAChF,OAAO,EAAE,iBAAiB,EAAiC,MAAM,kCAAkC,CAAC;AAEpG,OAAO,EAAE,WAAW,EAA2B,MAAM,4BAA4B,CAAC;AAElF,OAAO,EAAE,cAAc,EAA8B,MAAM,+BAA+B,CAAC;AAE3F,OAAO,EAAE,UAAU,EAA0B,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/injection-engine/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,+DAA+D;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,SAAS;AACT,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACL,2BAA2B,GAE5B,MAAM,kCAAkC,CAAC;AAE1C,gFAAgF;AAChF,OAAO,EAAE,iBAAiB,EAAiC,MAAM,kCAAkC,CAAC;AAEpG,OAAO,EACL,WAAW,EACX,kBAAkB,GAKnB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,aAAa,EAA6B,MAAM,oBAAoB,CAAC;AAE9E,wEAAwE;AACxE,sEAAsE;AACtE,iEAAiE;AACjE,+BAA+B;AAC/B,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAsB,MAAM,iBAAiB,CAAC;AAE9F,OAAO,EAAE,cAAc,EAA8B,MAAM,+BAA+B,CAAC;AAE3F,OAAO,EAAE,UAAU,EAA0B,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Skill-tool builders — shared source of truth for `list_skills` and
3
+ * `read_skill` tools used by the Agent's auto-attach path AND by
4
+ * `SkillRegistry.toTools()` (explicit composition path).
5
+ *
6
+ * Both tools work over the SAME catalog (a list of `Injection` skills).
7
+ * Pulling them out of `core/Agent.ts` removes the v2.4 duplication
8
+ * risk: the Agent auto-attaches its own `read_skill`, the registry
9
+ * builds a sibling — they MUST agree on schema + execute semantics.
10
+ *
11
+ * Pattern: pure builder functions over an `Injection[]` catalog.
12
+ * Tool execute is identity-style (returns confirmation
13
+ * string); the agent's tool-calls subflow inspects the
14
+ * tool name + args and updates `scope.activatedInjectionIds`
15
+ * so the next iteration's InjectionEngine sees the new
16
+ * activation.
17
+ *
18
+ * Closes Neo gap #3 (of 8) by making the LLM-facing skill discovery
19
+ * surface composable — consumers can plug `listSkills` / `readSkill`
20
+ * into their own ToolProvider chain (e.g., gatedTools → permission
21
+ * filter → static + skill-tools).
22
+ */
23
+ import { defineTool } from '../../core/tools.js';
24
+ /**
25
+ * Build the `list_skills` tool — a no-arg tool that returns the
26
+ * registered skills as `{ id, description }[]`. Lets the LLM discover
27
+ * skills without paying the prompt-token cost of embedding the
28
+ * catalog into every system prompt.
29
+ *
30
+ * Pairs with `read_skill` (which actually activates a skill by id).
31
+ *
32
+ * Returns `undefined` when there are no skills — callers should
33
+ * guard or filter undefined out of their tool list.
34
+ */
35
+ export function buildListSkillsTool(skills) {
36
+ if (skills.length === 0)
37
+ return undefined;
38
+ // Capture a stable snapshot — the registry/agent calls this at
39
+ // build time, so the tool reflects the catalog as of registration.
40
+ const catalog = skills.map((s) => ({
41
+ id: s.id,
42
+ description: s.description ?? '(no description)',
43
+ }));
44
+ return defineTool({
45
+ name: 'list_skills',
46
+ description: 'List all available skills with their ids and descriptions. ' +
47
+ 'Use this to discover what skills exist before calling read_skill.',
48
+ inputSchema: { type: 'object', properties: {}, additionalProperties: false },
49
+ execute: () => {
50
+ // Return as a JSON-serialized string so the LLM can parse easily.
51
+ return JSON.stringify(catalog, null, 2);
52
+ },
53
+ });
54
+ }
55
+ /**
56
+ * Build the `read_skill` tool — activates a skill for the next
57
+ * iteration. The LLM picks WHICH skill via the `id` argument.
58
+ *
59
+ * Tool execute() returns a confirmation string. The actual bookkeeping
60
+ * (appending the requested skill id to `scope.activatedInjectionIds`)
61
+ * is handled by the Agent's tool-calls subflow, which inspects every
62
+ * `read_skill` tool call by name. The next iteration's InjectionEngine
63
+ * matches Skills with `trigger.kind: 'llm-activated'` by id and
64
+ * includes them in the active set; slot subflows then inject the body
65
+ * + tools.
66
+ *
67
+ * The tool's description lists each Skill's `id` + `description` so
68
+ * the LLM can choose meaningfully without first calling `list_skills`
69
+ * (a perf trade-off — small registries can afford the inline catalog;
70
+ * large ones should use `list_skills` for discovery and rely on the
71
+ * shorter `read_skill` description.) See `surfaceMode` (Block A4) for
72
+ * tunable trade-offs.
73
+ *
74
+ * Returns `undefined` when there are no skills — callers should
75
+ * guard or filter undefined out of their tool list.
76
+ */
77
+ export function buildReadSkillTool(skills) {
78
+ if (skills.length === 0)
79
+ return undefined;
80
+ const skillIds = skills.map((s) => s.id);
81
+ const skillCatalog = skills
82
+ .map((s) => ` - ${s.id}: ${s.description ?? '(no description)'}`)
83
+ .join('\n');
84
+ const byId = new Map();
85
+ for (const s of skills) {
86
+ const meta = s.metadata;
87
+ byId.set(s.id, {
88
+ body: s.inject.systemPrompt ?? '',
89
+ surfaceMode: meta?.surfaceMode ?? 'auto',
90
+ });
91
+ }
92
+ return defineTool({
93
+ name: 'read_skill',
94
+ description: `Activate a skill for the next iteration. Available skills:\n${skillCatalog}\n\n` +
95
+ `Pass the skill's id. The skill's body becomes part of the system prompt and any ` +
96
+ `gated tools become available on the next call.`,
97
+ inputSchema: {
98
+ type: 'object',
99
+ properties: {
100
+ id: {
101
+ type: 'string',
102
+ enum: skillIds,
103
+ description: 'The skill id to activate.',
104
+ },
105
+ },
106
+ required: ['id'],
107
+ },
108
+ execute: ({ id }) => {
109
+ const entry = byId.get(id);
110
+ if (!entry) {
111
+ return `Unknown skill '${id}'. Available: ${skillIds.join(', ')}`;
112
+ }
113
+ // Block C — per-mode tool-result dispatch:
114
+ // - 'tool-only' / 'both' → return body verbatim (recency-first
115
+ // delivery; LLM sees it as the most recent tool result).
116
+ // - 'system-prompt' / 'auto' / unspecified → return confirmation
117
+ // only; body lands via system slot on the next iteration.
118
+ if ((entry.surfaceMode === 'tool-only' || entry.surfaceMode === 'both') && entry.body) {
119
+ return entry.body;
120
+ }
121
+ return `Skill '${id}' activated for the next iteration.`;
122
+ },
123
+ });
124
+ }
125
+ //# sourceMappingURL=skillTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillTools.js","sourceRoot":"","sources":["../../../../src/lib/injection-engine/skillTools.ts"],"names":[],"mappings":"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"}
@@ -18,10 +18,18 @@
18
18
  */
19
19
  /** Project a full Injection (with functions) into a scope-safe POJO. */
20
20
  export function projectActiveInjection(inj) {
21
+ // Project per-skill metadata that slot subflows need to dispatch on.
22
+ // `surfaceMode` drives the system-prompt-suppression decision (Block C).
23
+ // `autoActivate` is reserved for runtime tool gating (forward-compat).
24
+ const meta = inj.metadata;
21
25
  const out = {
22
26
  id: inj.id,
23
27
  flavor: inj.flavor,
24
28
  ...(inj.description && { description: inj.description }),
29
+ ...(meta?.surfaceMode && { surfaceMode: meta.surfaceMode }),
30
+ ...(meta?.autoActivate && {
31
+ autoActivate: meta.autoActivate,
32
+ }),
25
33
  inject: {
26
34
  ...(inj.inject.systemPrompt && { systemPrompt: inj.inject.systemPrompt }),
27
35
  ...(inj.inject.messages && { messages: inj.inject.messages.map((m) => ({ ...m })) }),
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/lib/injection-engine/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA2KH,wEAAwE;AACxE,MAAM,UAAU,sBAAsB,CAAC,GAAc;IACnD,MAAM,GAAG,GAAoB;QAC3B,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC;QACxD,MAAM,EAAE;YACN,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YACzE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACpF,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI;gBACtB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAClC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE;oBACvB,WAAW,EAAE,GAAG,CAAC,EAAE;iBACpB,CAAC,CAAC;aACJ,CAAC;SACH;KACF,CAAC;IACF,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/lib/injection-engine/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAuMH,wEAAwE;AACxE,MAAM,UAAU,sBAAsB,CAAC,GAAc;IACnD,qEAAqE;IACrE,yEAAyE;IACzE,uEAAuE;IACvE,MAAM,IAAI,GAAG,GAAG,CAAC,QAAuE,CAAC;IACzF,MAAM,GAAG,GAAoB;QAC3B,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC;QACxD,GAAG,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAA6C,EAAE,CAAC;QAC7F,GAAG,CAAC,IAAI,EAAE,YAAY,IAAI;YACxB,YAAY,EAAE,IAAI,CAAC,YAA+C;SACnE,CAAC;QACF,MAAM,EAAE;YACN,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YACzE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACpF,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI;gBACtB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAClC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE;oBACvB,WAAW,EAAE,GAAG,CAAC,EAAE;iBACpB,CAAC,CAAC;aACJ,CAAC;SACH;KACF,CAAC;IACF,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * lazyRequire — module-path-indirect `require()` wrapper for lazy
3
+ * peer-dep loading.
4
+ *
5
+ * Why a wrapper: bundlers (Vite, esbuild, webpack, Rollup) statically
6
+ * analyze `require('literal-string')` calls and try to resolve the
7
+ * dependency at BUILD time — even when the function is never called
8
+ * at runtime. For optional peer-deps (`@modelcontextprotocol/sdk`,
9
+ * `@anthropic-ai/sdk`, `ioredis`, `@aws-sdk/client-bedrock-*`), this
10
+ * means consumers who never instantiate the matching adapter still
11
+ * get a build error if the peer-dep isn't installed.
12
+ *
13
+ * Wrapping the call in a function with a string PARAMETER hides the
14
+ * specifier from static analysis. At runtime this is exactly the
15
+ * same as inline `require()`, including the throwing behavior when
16
+ * the peer-dep isn't installed.
17
+ *
18
+ * Pattern: indirect require — used by Node's `createRequire`-style
19
+ * fallbacks for the same reason.
20
+ *
21
+ * @example
22
+ * try {
23
+ * const mod = lazyRequire<typeof import('ioredis')>('ioredis');
24
+ * this._client = new mod.default(...);
25
+ * } catch {
26
+ * throw new Error('install ioredis to use RedisStore');
27
+ * }
28
+ */
29
+ export function lazyRequire(specifier) {
30
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
31
+ return require(specifier);
32
+ }
33
+ //# sourceMappingURL=lazyRequire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazyRequire.js","sourceRoot":"","sources":["../../../src/lib/lazyRequire.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,WAAW,CAAc,SAAiB;IACxD,iEAAiE;IACjE,OAAO,OAAO,CAAC,SAAS,CAAM,CAAC;AACjC,CAAC"}
@@ -33,6 +33,7 @@
33
33
  * loads only when a consumer actually constructs a client. Tests
34
34
  * inject `_client` and skip the import path entirely.
35
35
  */
36
+ import { lazyRequire } from '../lazyRequire.js';
36
37
  // Version-less identity. The MCP `clientInfo` field is informational
37
38
  // (server logs it); a hardcoded number drifts every release. Consumers
38
39
  // who care about wire-level identity pass `clientInfo` explicitly.
@@ -91,8 +92,7 @@ export async function mcpClient(opts) {
91
92
  async function resolveClient(transport, clientInfo) {
92
93
  let mod;
93
94
  try {
94
- // eslint-disable-next-line @typescript-eslint/no-require-imports
95
- mod = require('@modelcontextprotocol/sdk/client/index.js');
95
+ mod = lazyRequire('@modelcontextprotocol/sdk/client/index.js');
96
96
  }
97
97
  catch {
98
98
  throw new Error('mcpClient requires @modelcontextprotocol/sdk.\n' +
@@ -110,8 +110,7 @@ async function buildTransport(t) {
110
110
  if (t.transport === 'stdio') {
111
111
  let stdioMod;
112
112
  try {
113
- // eslint-disable-next-line @typescript-eslint/no-require-imports
114
- stdioMod = require('@modelcontextprotocol/sdk/client/stdio.js');
113
+ stdioMod = lazyRequire('@modelcontextprotocol/sdk/client/stdio.js');
115
114
  }
116
115
  catch {
117
116
  throw new Error('mcpClient(stdio) requires @modelcontextprotocol/sdk/client/stdio.js — ' +
@@ -127,8 +126,7 @@ async function buildTransport(t) {
127
126
  // http transport
128
127
  let httpMod;
129
128
  try {
130
- // eslint-disable-next-line @typescript-eslint/no-require-imports
131
- httpMod = require('@modelcontextprotocol/sdk/client/streamableHttp.js');
129
+ httpMod = lazyRequire('@modelcontextprotocol/sdk/client/streamableHttp.js');
132
130
  }
133
131
  catch {
134
132
  throw new Error('mcpClient(http) requires @modelcontextprotocol/sdk/client/streamableHttp.js — ' +
@@ -1 +1 @@
1
- {"version":3,"file":"mcpClient.js","sourceRoot":"","sources":["../../../../src/lib/mcp/mcpClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcpClient.js","sourceRoot":"","sources":["../../../../src/lib/mcp/mcpClient.ts"],"names":[],"mappings":"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"}