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.
- package/README.md +293 -247
- package/dist/adapters/llm/AnthropicProvider.js +2 -2
- package/dist/adapters/llm/AnthropicProvider.js.map +1 -1
- package/dist/adapters/llm/BedrockProvider.js +2 -2
- package/dist/adapters/llm/BedrockProvider.js.map +1 -1
- package/dist/adapters/llm/BrowserAnthropicProvider.js +96 -28
- package/dist/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
- package/dist/adapters/llm/OpenAIProvider.js +2 -2
- package/dist/adapters/llm/OpenAIProvider.js.map +1 -1
- package/dist/adapters/memory/agentcore.js +9 -3
- package/dist/adapters/memory/agentcore.js.map +1 -1
- package/dist/adapters/memory/redis.js +9 -3
- package/dist/adapters/memory/redis.js.map +1 -1
- package/dist/core/Agent.js +493 -79
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/flowchartAsTool.js +188 -0
- package/dist/core/flowchartAsTool.js.map +1 -0
- package/dist/core/outputSchema.js +119 -0
- package/dist/core/outputSchema.js.map +1 -0
- package/dist/core/slots/buildSystemPromptSlot.js +8 -0
- package/dist/core/slots/buildSystemPromptSlot.js.map +1 -1
- package/dist/core/slots/buildToolsSlot.js +56 -5
- package/dist/core/slots/buildToolsSlot.js.map +1 -1
- package/dist/esm/adapters/llm/AnthropicProvider.js +2 -2
- package/dist/esm/adapters/llm/AnthropicProvider.js.map +1 -1
- package/dist/esm/adapters/llm/BedrockProvider.js +2 -2
- package/dist/esm/adapters/llm/BedrockProvider.js.map +1 -1
- package/dist/esm/adapters/llm/BrowserAnthropicProvider.js +96 -28
- package/dist/esm/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
- package/dist/esm/adapters/llm/OpenAIProvider.js +2 -2
- package/dist/esm/adapters/llm/OpenAIProvider.js.map +1 -1
- package/dist/esm/adapters/memory/agentcore.js +9 -3
- package/dist/esm/adapters/memory/agentcore.js.map +1 -1
- package/dist/esm/adapters/memory/redis.js +9 -3
- package/dist/esm/adapters/memory/redis.js.map +1 -1
- package/dist/esm/core/Agent.js +492 -78
- package/dist/esm/core/Agent.js.map +1 -1
- package/dist/esm/core/flowchartAsTool.js +184 -0
- package/dist/esm/core/flowchartAsTool.js.map +1 -0
- package/dist/esm/core/outputSchema.js +113 -0
- package/dist/esm/core/outputSchema.js.map +1 -0
- package/dist/esm/core/slots/buildSystemPromptSlot.js +8 -0
- package/dist/esm/core/slots/buildSystemPromptSlot.js.map +1 -1
- package/dist/esm/core/slots/buildToolsSlot.js +56 -5
- package/dist/esm/core/slots/buildToolsSlot.js.map +1 -1
- package/dist/esm/index.js +34 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/injection-engine/SkillRegistry.js +181 -0
- package/dist/esm/lib/injection-engine/SkillRegistry.js.map +1 -0
- package/dist/esm/lib/injection-engine/factories/defineSkill.js +35 -0
- package/dist/esm/lib/injection-engine/factories/defineSkill.js.map +1 -1
- package/dist/esm/lib/injection-engine/index.js +9 -1
- package/dist/esm/lib/injection-engine/index.js.map +1 -1
- package/dist/esm/lib/injection-engine/skillTools.js +125 -0
- package/dist/esm/lib/injection-engine/skillTools.js.map +1 -0
- package/dist/esm/lib/injection-engine/types.js +8 -0
- package/dist/esm/lib/injection-engine/types.js.map +1 -1
- package/dist/esm/lib/lazyRequire.js +33 -0
- package/dist/esm/lib/lazyRequire.js.map +1 -0
- package/dist/esm/lib/mcp/mcpClient.js +4 -6
- package/dist/esm/lib/mcp/mcpClient.js.map +1 -1
- package/dist/esm/llm-providers.js +31 -0
- package/dist/esm/llm-providers.js.map +1 -0
- package/dist/esm/locales/index.js +144 -0
- package/dist/esm/locales/index.js.map +1 -0
- package/dist/esm/memory-providers.js +44 -0
- package/dist/esm/memory-providers.js.map +1 -0
- package/dist/esm/providers.js +11 -0
- package/dist/esm/providers.js.map +1 -1
- package/dist/esm/recorders/core/contextEngineering.js +155 -0
- package/dist/esm/recorders/core/contextEngineering.js.map +1 -0
- package/dist/esm/recorders/observability/commentary/commentaryTemplates.js +6 -1
- package/dist/esm/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
- package/dist/esm/security/PermissionPolicy.js +135 -0
- package/dist/esm/security/PermissionPolicy.js.map +1 -0
- package/dist/esm/security/index.js +38 -0
- package/dist/esm/security/index.js.map +1 -0
- package/dist/esm/tool-providers/gatedTools.js +52 -0
- package/dist/esm/tool-providers/gatedTools.js.map +1 -0
- package/dist/esm/tool-providers/index.js +43 -0
- package/dist/esm/tool-providers/index.js.map +1 -0
- package/dist/esm/tool-providers/skillScopedTools.js +63 -0
- package/dist/esm/tool-providers/skillScopedTools.js.map +1 -0
- package/dist/esm/tool-providers/staticTools.js +33 -0
- package/dist/esm/tool-providers/staticTools.js.map +1 -0
- package/dist/esm/tool-providers/types.js +53 -0
- package/dist/esm/tool-providers/types.js.map +1 -0
- package/dist/index.js +57 -12
- package/dist/index.js.map +1 -1
- package/dist/lib/injection-engine/SkillRegistry.js +185 -0
- package/dist/lib/injection-engine/SkillRegistry.js.map +1 -0
- package/dist/lib/injection-engine/factories/defineSkill.js +37 -1
- package/dist/lib/injection-engine/factories/defineSkill.js.map +1 -1
- package/dist/lib/injection-engine/index.js +14 -1
- package/dist/lib/injection-engine/index.js.map +1 -1
- package/dist/lib/injection-engine/skillTools.js +130 -0
- package/dist/lib/injection-engine/skillTools.js.map +1 -0
- package/dist/lib/injection-engine/types.js +8 -0
- package/dist/lib/injection-engine/types.js.map +1 -1
- package/dist/lib/lazyRequire.js +37 -0
- package/dist/lib/lazyRequire.js.map +1 -0
- package/dist/lib/mcp/mcpClient.js +4 -6
- package/dist/lib/mcp/mcpClient.js.map +1 -1
- package/dist/llm-providers.js +47 -0
- package/dist/llm-providers.js.map +1 -0
- package/dist/locales/index.js +149 -0
- package/dist/locales/index.js.map +1 -0
- package/dist/memory-providers.js +49 -0
- package/dist/memory-providers.js.map +1 -0
- package/dist/providers.js +11 -0
- package/dist/providers.js.map +1 -1
- package/dist/recorders/core/contextEngineering.js +161 -0
- package/dist/recorders/core/contextEngineering.js.map +1 -0
- package/dist/recorders/observability/commentary/commentaryTemplates.js +6 -1
- package/dist/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
- package/dist/security/PermissionPolicy.js +139 -0
- package/dist/security/PermissionPolicy.js.map +1 -0
- package/dist/security/index.js +42 -0
- package/dist/security/index.js.map +1 -0
- package/dist/tool-providers/gatedTools.js +56 -0
- package/dist/tool-providers/gatedTools.js.map +1 -0
- package/dist/tool-providers/index.js +51 -0
- package/dist/tool-providers/index.js.map +1 -0
- package/dist/tool-providers/skillScopedTools.js +67 -0
- package/dist/tool-providers/skillScopedTools.js.map +1 -0
- package/dist/tool-providers/staticTools.js +37 -0
- package/dist/tool-providers/staticTools.js.map +1 -0
- package/dist/tool-providers/types.js +54 -0
- package/dist/tool-providers/types.js.map +1 -0
- package/dist/types/adapters/llm/AnthropicProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/BedrockProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/BrowserAnthropicProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/OpenAIProvider.d.ts.map +1 -1
- package/dist/types/adapters/memory/agentcore.d.ts +7 -1
- package/dist/types/adapters/memory/agentcore.d.ts.map +1 -1
- package/dist/types/adapters/memory/redis.d.ts +7 -1
- package/dist/types/adapters/memory/redis.d.ts.map +1 -1
- package/dist/types/core/Agent.d.ts +216 -2
- package/dist/types/core/Agent.d.ts.map +1 -1
- package/dist/types/core/flowchartAsTool.d.ts +161 -0
- package/dist/types/core/flowchartAsTool.d.ts.map +1 -0
- package/dist/types/core/outputSchema.d.ts +128 -0
- package/dist/types/core/outputSchema.d.ts.map +1 -0
- package/dist/types/core/slots/buildSystemPromptSlot.d.ts.map +1 -1
- package/dist/types/core/slots/buildToolsSlot.d.ts +10 -0
- package/dist/types/core/slots/buildToolsSlot.d.ts.map +1 -1
- package/dist/types/index.d.ts +8 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/SkillRegistry.d.ts +148 -0
- package/dist/types/lib/injection-engine/SkillRegistry.d.ts.map +1 -0
- package/dist/types/lib/injection-engine/factories/defineSkill.d.ts +99 -0
- package/dist/types/lib/injection-engine/factories/defineSkill.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/index.d.ts +5 -2
- package/dist/types/lib/injection-engine/index.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/skillTools.d.ts +73 -0
- package/dist/types/lib/injection-engine/skillTools.d.ts.map +1 -0
- package/dist/types/lib/injection-engine/types.d.ts +28 -0
- package/dist/types/lib/injection-engine/types.d.ts.map +1 -1
- package/dist/types/lib/lazyRequire.d.ts +30 -0
- package/dist/types/lib/lazyRequire.d.ts.map +1 -0
- package/dist/types/lib/mcp/mcpClient.d.ts.map +1 -1
- package/dist/types/llm-providers.d.ts +31 -0
- package/dist/types/llm-providers.d.ts.map +1 -0
- package/dist/types/locales/index.d.ts +133 -0
- package/dist/types/locales/index.d.ts.map +1 -0
- package/dist/types/memory-providers.d.ts +41 -0
- package/dist/types/memory-providers.d.ts.map +1 -0
- package/dist/types/providers.d.ts +11 -0
- package/dist/types/providers.d.ts.map +1 -1
- package/dist/types/recorders/core/contextEngineering.d.ts +137 -0
- package/dist/types/recorders/core/contextEngineering.d.ts.map +1 -0
- package/dist/types/recorders/observability/commentary/commentaryTemplates.d.ts.map +1 -1
- package/dist/types/security/PermissionPolicy.d.ts +125 -0
- package/dist/types/security/PermissionPolicy.d.ts.map +1 -0
- package/dist/types/security/index.d.ts +40 -0
- package/dist/types/security/index.d.ts.map +1 -0
- package/dist/types/tool-providers/gatedTools.d.ts +37 -0
- package/dist/types/tool-providers/gatedTools.d.ts.map +1 -0
- package/dist/types/tool-providers/index.d.ts +42 -0
- package/dist/types/tool-providers/index.d.ts.map +1 -0
- package/dist/types/tool-providers/skillScopedTools.d.ts +46 -0
- package/dist/types/tool-providers/skillScopedTools.d.ts.map +1 -0
- package/dist/types/tool-providers/staticTools.d.ts +22 -0
- package/dist/types/tool-providers/staticTools.d.ts.map +1 -0
- package/dist/types/tool-providers/types.d.ts +103 -0
- package/dist/types/tool-providers/types.d.ts.map +1 -0
- package/package.json +62 -9
- package/README.proposed.md +0 -258
- package/dist/instructions.js +0 -21
- package/dist/instructions.js.map +0 -1
- package/dist/lib/instructions/defineInstruction.js +0 -35
- package/dist/lib/instructions/defineInstruction.js.map +0 -1
- package/dist/lib/instructions/evaluator.js +0 -38
- package/dist/lib/instructions/evaluator.js.map +0 -1
- package/dist/lib/instructions/index.js +0 -48
- package/dist/lib/instructions/index.js.map +0 -1
- package/dist/lib/instructions/types.js +0 -22
- package/dist/lib/instructions/types.js.map +0 -1
- package/dist/memory/conversationHelpers.js +0 -39
- package/dist/memory/conversationHelpers.js.map +0 -1
- package/dist/types/instructions.d.ts +0 -5
- package/dist/types/instructions.d.ts.map +0 -1
- package/dist/types/lib/instructions/defineInstruction.d.ts +0 -22
- package/dist/types/lib/instructions/defineInstruction.d.ts.map +0 -1
- package/dist/types/lib/instructions/evaluator.d.ts +0 -11
- package/dist/types/lib/instructions/evaluator.d.ts.map +0 -1
- package/dist/types/lib/instructions/index.d.ts +0 -44
- package/dist/types/lib/instructions/index.d.ts.map +0 -1
- package/dist/types/lib/instructions/types.d.ts +0 -100
- package/dist/types/lib/instructions/types.d.ts.map +0 -1
- package/dist/types/memory/conversationHelpers.d.ts +0 -19
- package/dist/types/memory/conversationHelpers.d.ts.map +0 -1
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* gatedTools — wrap any ToolProvider with a per-tool gating predicate.
|
|
3
|
+
*
|
|
4
|
+
* The DECORATOR for tool providers. Filters the inner provider's
|
|
5
|
+
* output by running the predicate against each tool name. Composes
|
|
6
|
+
* freely:
|
|
7
|
+
*
|
|
8
|
+
* gatedTools(
|
|
9
|
+
* gatedTools(staticTools(allTools), readOnlyPredicate),
|
|
10
|
+
* skillGatePredicate,
|
|
11
|
+
* )
|
|
12
|
+
*
|
|
13
|
+
* Reads as: "static list of all tools, filtered by readonly policy,
|
|
14
|
+
* then further filtered by the active skill's tool set." Each gate
|
|
15
|
+
* is one concern; composition handles the rest.
|
|
16
|
+
*
|
|
17
|
+
* Pattern: Decorator (GoF) — wraps any ToolProvider with an additional
|
|
18
|
+
* filter. Mirrors `withRetry` / `withFallback` over LLMProvider.
|
|
19
|
+
*
|
|
20
|
+
* @example Read-only enforcement
|
|
21
|
+
* const readOnly = gatedTools(
|
|
22
|
+
* staticTools([read, write]),
|
|
23
|
+
* (toolName) => toolName.startsWith('read_'),
|
|
24
|
+
* );
|
|
25
|
+
* readOnly.list(ctx); // → [read]
|
|
26
|
+
*
|
|
27
|
+
* @example Skill-gated dispatch (autoActivate use case)
|
|
28
|
+
* const skillGated = gatedTools(
|
|
29
|
+
* staticTools(allTools),
|
|
30
|
+
* (toolName, ctx) => ctx.activeSkillId
|
|
31
|
+
* ? skillToolMap[ctx.activeSkillId].includes(toolName)
|
|
32
|
+
* : alwaysVisible.includes(toolName),
|
|
33
|
+
* );
|
|
34
|
+
*/
|
|
35
|
+
// #region gatedTools
|
|
36
|
+
export function gatedTools(inner, predicate) {
|
|
37
|
+
return {
|
|
38
|
+
id: 'gated',
|
|
39
|
+
list(ctx) {
|
|
40
|
+
// Pull from the inner provider first; each recomputation sees
|
|
41
|
+
// the freshest state from any nested gates.
|
|
42
|
+
const innerTools = inner.list(ctx);
|
|
43
|
+
// Filter by predicate — tool name from `tool.schema.name`.
|
|
44
|
+
// Predicates throwing escape: a buggy predicate should crash
|
|
45
|
+
// loudly, not silently allow tools through. Per the
|
|
46
|
+
// permission-as-defense-in-depth principle.
|
|
47
|
+
return innerTools.filter((t) => predicate(t.schema.name, ctx));
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
// #endregion gatedTools
|
|
52
|
+
//# sourceMappingURL=gatedTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gatedTools.js","sourceRoot":"","sources":["../../../src/tool-providers/gatedTools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAIH,qBAAqB;AACrB,MAAM,UAAU,UAAU,CAAC,KAAmB,EAAE,SAA4B;IAC1E,OAAO;QACL,EAAE,EAAE,OAAO;QACX,IAAI,CAAC,GAAwB;YAC3B,8DAA8D;YAC9D,4CAA4C;YAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnC,2DAA2D;YAC3D,6DAA6D;YAC7D,oDAAoD;YACpD,4CAA4C;YAC5C,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QACjE,CAAC;KACF,CAAC;AACJ,CAAC;AACD,wBAAwB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentfootprint/tool-providers — chainable tool dispatch + tool sources.
|
|
3
|
+
*
|
|
4
|
+
* Two layers under one subpath:
|
|
5
|
+
*
|
|
6
|
+
* 1. Tool dispatch (this folder)
|
|
7
|
+
* - `staticTools(arr)` — wrap a flat tool list
|
|
8
|
+
* - `gatedTools(inner, predicate)` — decorator that filters
|
|
9
|
+
* - `ToolProvider` interface — the contract
|
|
10
|
+
* - `ToolDispatchContext` — read-only context per iteration
|
|
11
|
+
*
|
|
12
|
+
* 2. Tool sources (re-exported from existing modules)
|
|
13
|
+
* - `mcpClient(opts)` — connect to an MCP server (real)
|
|
14
|
+
* - `mockMcpClient({ tools })` — in-memory MCP source for dev / tests
|
|
15
|
+
*
|
|
16
|
+
* Compose freely. The dispatch layer is decorator-shaped (mirroring
|
|
17
|
+
* `withRetry` / `withFallback` over LLMProvider). Tool sources produce
|
|
18
|
+
* `Tool[]` that flow into a `staticTools(arr)` provider, which can
|
|
19
|
+
* then be wrapped by `gatedTools(...)` for permission gating or
|
|
20
|
+
* per-skill filtering.
|
|
21
|
+
*
|
|
22
|
+
* @example Static (90% case — what `agent.tools(arr)` does today)
|
|
23
|
+
* const provider = staticTools([weatherTool, lookupTool]);
|
|
24
|
+
*
|
|
25
|
+
* @example Read-only enforcement
|
|
26
|
+
* const readOnly = gatedTools(
|
|
27
|
+
* staticTools(allTools),
|
|
28
|
+
* (name) => policy.isAllowed(name),
|
|
29
|
+
* );
|
|
30
|
+
*
|
|
31
|
+
* @example MCP source + permission gate
|
|
32
|
+
* const slack = await mcpClient({ transport: ... });
|
|
33
|
+
* const slackTools = await slack.tools();
|
|
34
|
+
* const provider = gatedTools(staticTools(slackTools), (name) => allowed(name));
|
|
35
|
+
*/
|
|
36
|
+
export { staticTools } from './staticTools.js';
|
|
37
|
+
export { gatedTools } from './gatedTools.js';
|
|
38
|
+
export { skillScopedTools } from './skillScopedTools.js';
|
|
39
|
+
// Re-export tool sources from the MCP module so consumers find them in
|
|
40
|
+
// one place. The top-level barrel still exports `mcpClient` for v2.2
|
|
41
|
+
// back-compat.
|
|
42
|
+
export { mcpClient, mockMcpClient } from '../lib/mcp/index.js';
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tool-providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,uEAAuE;AACvE,qEAAqE;AACrE,eAAe;AACf,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* skillScopedTools — ToolProvider that exposes a tool subset only when
|
|
3
|
+
* a specific Skill is active in the current iteration's context.
|
|
4
|
+
*
|
|
5
|
+
* The Block A5 piece. Pairs with `defineSkill({ autoActivate: 'currentSkill' })`
|
|
6
|
+
* to give the LLM a sharper choice space: when `billing` activates, the
|
|
7
|
+
* tool list flips from "all 25 agent tools" to "the 7 billing tools" +
|
|
8
|
+
* any baseline (always-on) tools the consumer composes alongside.
|
|
9
|
+
*
|
|
10
|
+
* Pattern: gated ToolProvider keyed by `ctx.activeSkillId`. Pure compute;
|
|
11
|
+
* no Agent-runtime dependency. Composes freely with `staticTools`
|
|
12
|
+
* for the always-on baseline.
|
|
13
|
+
*
|
|
14
|
+
* @example One skill's tools, scoped by activation
|
|
15
|
+
* const billingTools = skillScopedTools('billing', [refundTool, chargeTool]);
|
|
16
|
+
* billingTools.list({ iteration: 1, activeSkillId: 'billing', identity: ... });
|
|
17
|
+
* // → [refundTool, chargeTool]
|
|
18
|
+
* billingTools.list({ iteration: 1, activeSkillId: 'refund', identity: ... });
|
|
19
|
+
* // → [] (different skill active)
|
|
20
|
+
* billingTools.list({ iteration: 1, identity: ... });
|
|
21
|
+
* // → [] (no skill active)
|
|
22
|
+
*
|
|
23
|
+
* @example Compose with baseline + multiple skills
|
|
24
|
+
* const baseline = staticTools([lookupOrderTool, listSkills, readSkill]);
|
|
25
|
+
* const billingTbx = skillScopedTools('billing', [refundTool, chargeTool]);
|
|
26
|
+
* const refundTbx = skillScopedTools('refund', [reverseTool]);
|
|
27
|
+
*
|
|
28
|
+
* // Wrap each scope-provider in a gatedTools for downstream composition,
|
|
29
|
+
* // OR build a small wrapper that concatenates list(ctx) outputs:
|
|
30
|
+
* const provider: ToolProvider = {
|
|
31
|
+
* id: 'composite',
|
|
32
|
+
* list: (ctx) => [
|
|
33
|
+
* ...baseline.list(ctx),
|
|
34
|
+
* ...billingTbx.list(ctx),
|
|
35
|
+
* ...refundTbx.list(ctx),
|
|
36
|
+
* ],
|
|
37
|
+
* };
|
|
38
|
+
*
|
|
39
|
+
* Note: the runtime that POPULATES `ctx.activeSkillId` from
|
|
40
|
+
* `scope.activatedInjectionIds` lands in Block C / v2.5+. Today,
|
|
41
|
+
* consumers can drive it manually for tests + design-time inspection.
|
|
42
|
+
*/
|
|
43
|
+
// #region skillScopedTools
|
|
44
|
+
export function skillScopedTools(skillId, tools) {
|
|
45
|
+
if (!skillId || skillId.trim().length === 0) {
|
|
46
|
+
throw new Error('skillScopedTools: `skillId` is required and must be non-empty.');
|
|
47
|
+
}
|
|
48
|
+
// Capture the tool list once. `list()` returns a fresh array each
|
|
49
|
+
// call (matches the staticTools / gatedTools convention so the
|
|
50
|
+
// agent's reference-equality check always sees an update).
|
|
51
|
+
const captured = [...tools];
|
|
52
|
+
return {
|
|
53
|
+
id: `skill-scoped:${skillId}`,
|
|
54
|
+
list(ctx) {
|
|
55
|
+
// Empty list when the skill is not active.
|
|
56
|
+
if (ctx.activeSkillId !== skillId)
|
|
57
|
+
return [];
|
|
58
|
+
return [...captured];
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
// #endregion skillScopedTools
|
|
63
|
+
//# sourceMappingURL=skillScopedTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillScopedTools.js","sourceRoot":"","sources":["../../../src/tool-providers/skillScopedTools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAKH,2BAA2B;AAC3B,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,KAAsB;IACtE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACpF,CAAC;IACD,kEAAkE;IAClE,+DAA+D;IAC/D,2DAA2D;IAC3D,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC5B,OAAO;QACL,EAAE,EAAE,gBAAgB,OAAO,EAAE;QAC7B,IAAI,CAAC,GAAwB;YAC3B,2CAA2C;YAC3C,IAAI,GAAG,CAAC,aAAa,KAAK,OAAO;gBAAE,OAAO,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC;AACD,8BAA8B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* staticTools — the simplest ToolProvider. Wraps a fixed Tool[] list.
|
|
3
|
+
*
|
|
4
|
+
* 90% case. What `agent.tools(arr)` does today, made composable.
|
|
5
|
+
* Equivalent to passing `arr` directly EXCEPT that `staticTools(arr)`
|
|
6
|
+
* is now a `ToolProvider` you can wrap with `gatedTools(...)` for
|
|
7
|
+
* permission filtering or per-skill gating.
|
|
8
|
+
*
|
|
9
|
+
* Pattern: identity ToolProvider — no filtering, just exposes the
|
|
10
|
+
* underlying list verbatim.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const provider = staticTools([weatherTool, lookupTool]);
|
|
14
|
+
* // Materialize the visible list and register via .tools(...).
|
|
15
|
+
* // Direct .toolProvider(...) wiring on the builder lands in Block A5 / v2.5+.
|
|
16
|
+
* const visible = provider.list({ iteration: 0, identity: { conversationId: '_' } });
|
|
17
|
+
* const agent = Agent.create({ provider: llm, model }).tools(visible).build();
|
|
18
|
+
*/
|
|
19
|
+
// #region staticTools
|
|
20
|
+
export function staticTools(tools) {
|
|
21
|
+
// Capture the input list once. `list()` returns a fresh array each
|
|
22
|
+
// call so the agent's reference-equality check always sees an update
|
|
23
|
+
// (matches the `gatedTools` decorator's per-call recomputation).
|
|
24
|
+
const captured = [...tools];
|
|
25
|
+
return {
|
|
26
|
+
id: 'static',
|
|
27
|
+
list(_ctx) {
|
|
28
|
+
return [...captured];
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
// #endregion staticTools
|
|
33
|
+
//# sourceMappingURL=staticTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staticTools.js","sourceRoot":"","sources":["../../../src/tool-providers/staticTools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,sBAAsB;AACtB,MAAM,UAAU,WAAW,CAAC,KAAsB;IAChD,mEAAmE;IACnE,qEAAqE;IACrE,iEAAiE;IACjE,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC5B,OAAO;QACL,EAAE,EAAE,QAAQ;QACZ,IAAI,CAAC,IAAyB;YAC5B,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC;AACD,yBAAyB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ToolProvider — abstraction over tool dispatch.
|
|
3
|
+
*
|
|
4
|
+
* v2.4 shipped tools as a flat array on the agent (registered via
|
|
5
|
+
* `agent.tool(t)` / `agent.tools(arr)`). That model breaks down once
|
|
6
|
+
* production agents need:
|
|
7
|
+
* 1. Permission gating per-tool, per-caller (read-only roles, etc.)
|
|
8
|
+
* 2. Per-skill tool gating (only show the active skill's tools to
|
|
9
|
+
* the LLM each turn)
|
|
10
|
+
* 3. Composable filters (a `withReadonly` decorator over a `withSkill`
|
|
11
|
+
* decorator over the base tool list)
|
|
12
|
+
*
|
|
13
|
+
* `ToolProvider` is the answer: a chainable abstraction over "what
|
|
14
|
+
* tools does the LLM see right now?". The agent asks the provider
|
|
15
|
+
* each iteration; the provider returns the visible tool set computed
|
|
16
|
+
* from whatever predicates / role gates / skill filters the consumer
|
|
17
|
+
* composed.
|
|
18
|
+
*
|
|
19
|
+
* Pattern: Strategy (GoF) — each ToolProvider is a strategy for
|
|
20
|
+
* "compute the visible tool list given current context".
|
|
21
|
+
* Decorator (GoF) — `gatedTools(inner, predicate)` wraps any
|
|
22
|
+
* provider with an additional filter, mirroring how `withRetry`
|
|
23
|
+
* / `withFallback` decorate `LLMProvider`.
|
|
24
|
+
* Role: Layer-3 tool-dispatch primitive. Agent calls `provider.list(ctx)`
|
|
25
|
+
* each iteration to compute the visible tool set.
|
|
26
|
+
* Emits: N/A (pure compute; permission denials emit elsewhere via the
|
|
27
|
+
* permission subsystem).
|
|
28
|
+
*
|
|
29
|
+
* @example Static tool list (90% case — what `.tools(arr)` does today)
|
|
30
|
+
* const provider = staticTools([weather, lookupOrder]);
|
|
31
|
+
*
|
|
32
|
+
* @example Read-only enforcement (role-based gate)
|
|
33
|
+
* const readOnlyProvider = gatedTools(
|
|
34
|
+
* staticTools([weather, lookupOrder, processRefund]),
|
|
35
|
+
* (toolName) => policy.isAllowed(toolName),
|
|
36
|
+
* );
|
|
37
|
+
*
|
|
38
|
+
* @example Skill-gated dispatch (only active skill's tools visible)
|
|
39
|
+
* const skillGated = gatedTools(
|
|
40
|
+
* staticTools(allTools),
|
|
41
|
+
* (toolName, ctx) => ctx.activeSkillId
|
|
42
|
+
* ? skillsToolMap[ctx.activeSkillId].includes(toolName)
|
|
43
|
+
* : alwaysVisible.includes(toolName),
|
|
44
|
+
* );
|
|
45
|
+
*
|
|
46
|
+
* @example Stack: read-only over skill-gated
|
|
47
|
+
* const provider = gatedTools(
|
|
48
|
+
* gatedTools(staticTools(allTools), readOnlyPredicate),
|
|
49
|
+
* skillGatePredicate,
|
|
50
|
+
* );
|
|
51
|
+
*/
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tool-providers/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG"}
|
package/dist/index.js
CHANGED
|
@@ -21,8 +21,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
21
21
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
22
22
|
};
|
|
23
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
-
exports.
|
|
25
|
-
exports.
|
|
24
|
+
exports.applyOutputSchema = exports.OutputSchemaError = exports.AgentBuilder = exports.Agent = exports.LLMCallBuilder = exports.LLMCall = exports.renderThinkingLine = exports.selectThinkingState = exports.defaultThinkingTemplates = exports.renderCommentary = exports.extractCommentaryVars = exports.selectCommentaryKey = exports.defaultCommentaryTemplates = exports.boundaryRecorder = exports.BoundaryRecorder = exports.attachFlowchart = exports.LoggingDomains = exports.attachLogging = exports.attachThinking = exports.isPaused = exports.isPauseRequest = exports.askHuman = exports.pauseHere = exports.makeRunId = exports.RunnerBase = exports.typedEmit = exports.skillRecorder = exports.memoryRecorder = exports.evalRecorder = exports.permissionRecorder = exports.costRecorder = exports.compositionRecorder = exports.agentRecorder = exports.streamRecorder = exports.EmitBridge = exports.BASELINE_SOURCES = exports.ENGINEERED_SOURCES = exports.isBaselineSource = exports.isEngineeredSource = exports.contextEngineering = exports.ContextRecorder = exports.parseSubflowPath = exports.buildEventMeta = exports.COMPOSITION_KEYS = exports.isInjectionKey = exports.injectionKeyForSlot = exports.INJECTION_KEYS = exports.EventDispatcher = exports.ALL_EVENT_TYPES = exports.EVENT_NAMES = void 0;
|
|
25
|
+
exports.identityNamespace = exports.mockEmbedder = exports.InMemoryStore = exports.SNAPSHOT_PROJECTIONS = exports.MEMORY_TIMING = exports.MEMORY_STRATEGIES = exports.MEMORY_TYPES = exports.defineMemory = exports.llmFactExtractor = exports.patternFactExtractor = exports.llmExtractor = exports.heuristicExtractor = exports.autoPipeline = exports.semanticPipeline = exports.narrativePipeline = exports.factPipeline = exports.ephemeralPipeline = exports.defaultPipeline = exports.defineFact = exports.defineSteering = exports.buildReadSkillTool = exports.buildListSkillsTool = exports.SkillRegistry = exports.resolveSurfaceMode = exports.defineSkill = exports.defineInstruction = exports.projectActiveInjection = exports.buildInjectionEngineSubflow = exports.evaluateInjections = exports.encodeSSE = exports.SSEFormatter = exports.toSSE = exports.createProvider = exports.BrowserOpenAIProvider = exports.browserOpenai = exports.BrowserAnthropicProvider = exports.browserAnthropic = exports.mock = exports.MockProvider = exports.LoopBuilder = exports.Loop = exports.ConditionalBuilder = exports.Conditional = exports.ParallelBuilder = exports.Parallel = exports.SequenceBuilder = exports.Sequence = exports.defineTool = exports.flowchartAsTool = exports.buildDefaultInstruction = void 0;
|
|
26
|
+
exports.validateMessages = exports.composeMessages = exports.defaultThinkingMessages = exports.defaultCommentaryMessages = exports.PermissionPolicy = exports.skillScopedTools = exports.gatedTools = exports.staticTools = exports.mockMcpClient = exports.mcpClient = exports.indexDocuments = exports.defineRAG = void 0;
|
|
26
27
|
// Events — registry, types, payloads
|
|
27
28
|
__exportStar(require("./events/types.js"), exports);
|
|
28
29
|
__exportStar(require("./events/payloads.js"), exports);
|
|
@@ -54,6 +55,12 @@ Object.defineProperty(exports, "parseSubflowPath", { enumerable: true, get: func
|
|
|
54
55
|
// Core recorders
|
|
55
56
|
var ContextRecorder_js_1 = require("./recorders/core/ContextRecorder.js");
|
|
56
57
|
Object.defineProperty(exports, "ContextRecorder", { enumerable: true, get: function () { return ContextRecorder_js_1.ContextRecorder; } });
|
|
58
|
+
var contextEngineering_js_1 = require("./recorders/core/contextEngineering.js");
|
|
59
|
+
Object.defineProperty(exports, "contextEngineering", { enumerable: true, get: function () { return contextEngineering_js_1.contextEngineering; } });
|
|
60
|
+
Object.defineProperty(exports, "isEngineeredSource", { enumerable: true, get: function () { return contextEngineering_js_1.isEngineeredSource; } });
|
|
61
|
+
Object.defineProperty(exports, "isBaselineSource", { enumerable: true, get: function () { return contextEngineering_js_1.isBaselineSource; } });
|
|
62
|
+
Object.defineProperty(exports, "ENGINEERED_SOURCES", { enumerable: true, get: function () { return contextEngineering_js_1.ENGINEERED_SOURCES; } });
|
|
63
|
+
Object.defineProperty(exports, "BASELINE_SOURCES", { enumerable: true, get: function () { return contextEngineering_js_1.BASELINE_SOURCES; } });
|
|
57
64
|
var EmitBridge_js_1 = require("./recorders/core/EmitBridge.js");
|
|
58
65
|
Object.defineProperty(exports, "EmitBridge", { enumerable: true, get: function () { return EmitBridge_js_1.EmitBridge; } });
|
|
59
66
|
var StreamRecorder_js_1 = require("./recorders/core/StreamRecorder.js");
|
|
@@ -123,6 +130,12 @@ Object.defineProperty(exports, "LLMCallBuilder", { enumerable: true, get: functi
|
|
|
123
130
|
var Agent_js_1 = require("./core/Agent.js");
|
|
124
131
|
Object.defineProperty(exports, "Agent", { enumerable: true, get: function () { return Agent_js_1.Agent; } });
|
|
125
132
|
Object.defineProperty(exports, "AgentBuilder", { enumerable: true, get: function () { return Agent_js_1.AgentBuilder; } });
|
|
133
|
+
var outputSchema_js_1 = require("./core/outputSchema.js");
|
|
134
|
+
Object.defineProperty(exports, "OutputSchemaError", { enumerable: true, get: function () { return outputSchema_js_1.OutputSchemaError; } });
|
|
135
|
+
Object.defineProperty(exports, "applyOutputSchema", { enumerable: true, get: function () { return outputSchema_js_1.applyOutputSchema; } });
|
|
136
|
+
Object.defineProperty(exports, "buildDefaultInstruction", { enumerable: true, get: function () { return outputSchema_js_1.buildDefaultInstruction; } });
|
|
137
|
+
var flowchartAsTool_js_1 = require("./core/flowchartAsTool.js");
|
|
138
|
+
Object.defineProperty(exports, "flowchartAsTool", { enumerable: true, get: function () { return flowchartAsTool_js_1.flowchartAsTool; } });
|
|
126
139
|
var tools_js_1 = require("./core/tools.js");
|
|
127
140
|
Object.defineProperty(exports, "defineTool", { enumerable: true, get: function () { return tools_js_1.defineTool; } });
|
|
128
141
|
// Slot subflow builders are intentionally NOT exported. They are
|
|
@@ -149,19 +162,24 @@ Object.defineProperty(exports, "LoopBuilder", { enumerable: true, get: function
|
|
|
149
162
|
// Adapters — LLM providers
|
|
150
163
|
// `mock(...)` is the lowercase factory equivalent to `new MockProvider(...)`.
|
|
151
164
|
// `anthropic(...)` is the real Claude provider via `@anthropic-ai/sdk`.
|
|
165
|
+
// Zero-peer-dep providers — safe to re-export from the main barrel
|
|
166
|
+
// because bundlers walking these never touch optional peer-dep code.
|
|
167
|
+
//
|
|
168
|
+
// Vendor-SDK-backed providers (AnthropicProvider, OpenAIProvider,
|
|
169
|
+
// BedrockProvider) live ONLY at `agentfootprint/llm-providers` (or
|
|
170
|
+
// the legacy `agentfootprint/providers` alias). That subpath
|
|
171
|
+
// segregation means bundlers walking from `agentfootprint` main
|
|
172
|
+
// never see the lazy peer-dep requires for `@anthropic-ai/sdk`,
|
|
173
|
+
// `openai`, `@aws-sdk/client-bedrock-runtime`, etc. — automatic
|
|
174
|
+
// tree-shaking, no bundler-side workarounds.
|
|
175
|
+
//
|
|
176
|
+
// Migration (v2.4 → v2.5):
|
|
177
|
+
// import { AnthropicProvider } from 'agentfootprint'; // ❌ removed
|
|
178
|
+
// import { AnthropicProvider } from 'agentfootprint/llm-providers'; // ✓ canonical
|
|
179
|
+
// import { AnthropicProvider } from 'agentfootprint/providers'; // ✓ legacy alias
|
|
152
180
|
var MockProvider_js_1 = require("./adapters/llm/MockProvider.js");
|
|
153
181
|
Object.defineProperty(exports, "MockProvider", { enumerable: true, get: function () { return MockProvider_js_1.MockProvider; } });
|
|
154
182
|
Object.defineProperty(exports, "mock", { enumerable: true, get: function () { return MockProvider_js_1.mock; } });
|
|
155
|
-
var AnthropicProvider_js_1 = require("./adapters/llm/AnthropicProvider.js");
|
|
156
|
-
Object.defineProperty(exports, "anthropic", { enumerable: true, get: function () { return AnthropicProvider_js_1.anthropic; } });
|
|
157
|
-
Object.defineProperty(exports, "AnthropicProvider", { enumerable: true, get: function () { return AnthropicProvider_js_1.AnthropicProvider; } });
|
|
158
|
-
var OpenAIProvider_js_1 = require("./adapters/llm/OpenAIProvider.js");
|
|
159
|
-
Object.defineProperty(exports, "openai", { enumerable: true, get: function () { return OpenAIProvider_js_1.openai; } });
|
|
160
|
-
Object.defineProperty(exports, "OpenAIProvider", { enumerable: true, get: function () { return OpenAIProvider_js_1.OpenAIProvider; } });
|
|
161
|
-
Object.defineProperty(exports, "ollama", { enumerable: true, get: function () { return OpenAIProvider_js_1.ollama; } });
|
|
162
|
-
var BedrockProvider_js_1 = require("./adapters/llm/BedrockProvider.js");
|
|
163
|
-
Object.defineProperty(exports, "bedrock", { enumerable: true, get: function () { return BedrockProvider_js_1.bedrock; } });
|
|
164
|
-
Object.defineProperty(exports, "BedrockProvider", { enumerable: true, get: function () { return BedrockProvider_js_1.BedrockProvider; } });
|
|
165
183
|
var BrowserAnthropicProvider_js_1 = require("./adapters/llm/BrowserAnthropicProvider.js");
|
|
166
184
|
Object.defineProperty(exports, "browserAnthropic", { enumerable: true, get: function () { return BrowserAnthropicProvider_js_1.browserAnthropic; } });
|
|
167
185
|
Object.defineProperty(exports, "BrowserAnthropicProvider", { enumerable: true, get: function () { return BrowserAnthropicProvider_js_1.BrowserAnthropicProvider; } });
|
|
@@ -181,9 +199,14 @@ var index_js_1 = require("./lib/injection-engine/index.js");
|
|
|
181
199
|
// Engine
|
|
182
200
|
Object.defineProperty(exports, "evaluateInjections", { enumerable: true, get: function () { return index_js_1.evaluateInjections; } });
|
|
183
201
|
Object.defineProperty(exports, "buildInjectionEngineSubflow", { enumerable: true, get: function () { return index_js_1.buildInjectionEngineSubflow; } });
|
|
202
|
+
Object.defineProperty(exports, "projectActiveInjection", { enumerable: true, get: function () { return index_js_1.projectActiveInjection; } });
|
|
184
203
|
// Sugar factories — one per injection flavor
|
|
185
204
|
Object.defineProperty(exports, "defineInstruction", { enumerable: true, get: function () { return index_js_1.defineInstruction; } });
|
|
186
205
|
Object.defineProperty(exports, "defineSkill", { enumerable: true, get: function () { return index_js_1.defineSkill; } });
|
|
206
|
+
Object.defineProperty(exports, "resolveSurfaceMode", { enumerable: true, get: function () { return index_js_1.resolveSurfaceMode; } });
|
|
207
|
+
Object.defineProperty(exports, "SkillRegistry", { enumerable: true, get: function () { return index_js_1.SkillRegistry; } });
|
|
208
|
+
Object.defineProperty(exports, "buildListSkillsTool", { enumerable: true, get: function () { return index_js_1.buildListSkillsTool; } });
|
|
209
|
+
Object.defineProperty(exports, "buildReadSkillTool", { enumerable: true, get: function () { return index_js_1.buildReadSkillTool; } });
|
|
187
210
|
Object.defineProperty(exports, "defineSteering", { enumerable: true, get: function () { return index_js_1.defineSteering; } });
|
|
188
211
|
Object.defineProperty(exports, "defineFact", { enumerable: true, get: function () { return index_js_1.defineFact; } });
|
|
189
212
|
// Patterns — factory functions composing primitives + core-flow into
|
|
@@ -236,4 +259,26 @@ Object.defineProperty(exports, "indexDocuments", { enumerable: true, get: functi
|
|
|
236
259
|
var index_js_7 = require("./lib/mcp/index.js");
|
|
237
260
|
Object.defineProperty(exports, "mcpClient", { enumerable: true, get: function () { return index_js_7.mcpClient; } });
|
|
238
261
|
Object.defineProperty(exports, "mockMcpClient", { enumerable: true, get: function () { return index_js_7.mockMcpClient; } });
|
|
262
|
+
// Tool dispatch primitives (v2.5+). New `agentfootprint/tool-providers`
|
|
263
|
+
// subpath bundles tool sources (mcpClient / mockMcpClient) with tool
|
|
264
|
+
// dispatch primitives (staticTools / gatedTools) so consumers find
|
|
265
|
+
// "everything tool-related" in one place. Top-level barrel re-exports
|
|
266
|
+
// the dispatch primitives too — `mcpClient` already re-exports above.
|
|
267
|
+
var index_js_8 = require("./tool-providers/index.js");
|
|
268
|
+
Object.defineProperty(exports, "staticTools", { enumerable: true, get: function () { return index_js_8.staticTools; } });
|
|
269
|
+
Object.defineProperty(exports, "gatedTools", { enumerable: true, get: function () { return index_js_8.gatedTools; } });
|
|
270
|
+
Object.defineProperty(exports, "skillScopedTools", { enumerable: true, get: function () { return index_js_8.skillScopedTools; } });
|
|
271
|
+
// Cross-cutting authorization (v2.5+). `agentfootprint/security` is the
|
|
272
|
+
// dedicated subpath; the root barrel also re-exports `PermissionPolicy`
|
|
273
|
+
// so existing v2.4 consumers find it at the top level.
|
|
274
|
+
var index_js_9 = require("./security/index.js");
|
|
275
|
+
Object.defineProperty(exports, "PermissionPolicy", { enumerable: true, get: function () { return index_js_9.PermissionPolicy; } });
|
|
276
|
+
// Message Catalog Pattern (v2.5+). `agentfootprint/locales` is the
|
|
277
|
+
// dedicated subpath; the root barrel also re-exports the helpers so
|
|
278
|
+
// existing v2.4 consumers find them at the top level.
|
|
279
|
+
var index_js_10 = require("./locales/index.js");
|
|
280
|
+
Object.defineProperty(exports, "defaultCommentaryMessages", { enumerable: true, get: function () { return index_js_10.defaultCommentaryMessages; } });
|
|
281
|
+
Object.defineProperty(exports, "defaultThinkingMessages", { enumerable: true, get: function () { return index_js_10.defaultThinkingMessages; } });
|
|
282
|
+
Object.defineProperty(exports, "composeMessages", { enumerable: true, get: function () { return index_js_10.composeMessages; } });
|
|
283
|
+
Object.defineProperty(exports, "validateMessages", { enumerable: true, get: function () { return index_js_10.validateMessages; } });
|
|
239
284
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SkillRegistry — centralized governance for Skills across one or
|
|
4
|
+
* more Agents.
|
|
5
|
+
*
|
|
6
|
+
* Most apps register Skills directly on the Agent via `.skill(s)`.
|
|
7
|
+
* Once you have multiple Agents that share a common skill catalog
|
|
8
|
+
* (a customer-support pool, a research team, a multi-step workflow
|
|
9
|
+
* where each step uses different overlapping skills), hand-syncing
|
|
10
|
+
* `.skill()` calls per Agent gets fragile.
|
|
11
|
+
*
|
|
12
|
+
* `SkillRegistry` is the answer: register once, attach to many
|
|
13
|
+
* Agents via `.skills(registry)`. Add a Skill to the registry and
|
|
14
|
+
* every consumer Agent picks it up at next build.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* const registry = new SkillRegistry();
|
|
18
|
+
* registry.register(billingSkill);
|
|
19
|
+
* registry.register(refundSkill);
|
|
20
|
+
*
|
|
21
|
+
* const supportAgent = Agent.create({ provider }).skills(registry).build();
|
|
22
|
+
* const escalationAgent = Agent.create({ provider }).skills(registry).build();
|
|
23
|
+
*
|
|
24
|
+
* // Add a new skill — both agents pick it up at next build.
|
|
25
|
+
* registry.register(complianceSkill);
|
|
26
|
+
*/
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.SkillRegistry = void 0;
|
|
29
|
+
const skillTools_js_1 = require("./skillTools.js");
|
|
30
|
+
const defineSkill_js_1 = require("./factories/defineSkill.js");
|
|
31
|
+
class SkillRegistry {
|
|
32
|
+
skills = new Map();
|
|
33
|
+
opts;
|
|
34
|
+
/**
|
|
35
|
+
* Construct an empty registry. Optional `{ surfaceMode, providerHint }`
|
|
36
|
+
* fields set registry-level defaults; absent both, the registry is a
|
|
37
|
+
* pure container (the v2.4 surface).
|
|
38
|
+
*/
|
|
39
|
+
constructor(opts = {}) {
|
|
40
|
+
this.opts = Object.freeze({ ...opts });
|
|
41
|
+
}
|
|
42
|
+
/** Registry-level default `surfaceMode`, or `undefined` if unset. */
|
|
43
|
+
get surfaceMode() {
|
|
44
|
+
return this.opts.surfaceMode;
|
|
45
|
+
}
|
|
46
|
+
/** Registry-level provider hint, or `undefined` if unset. */
|
|
47
|
+
get providerHint() {
|
|
48
|
+
return this.opts.providerHint;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Register a skill. Throws if `skill.flavor !== 'skill'` or if a
|
|
52
|
+
* skill with the same id is already registered (use `.replace(...)`
|
|
53
|
+
* to overwrite intentionally).
|
|
54
|
+
*/
|
|
55
|
+
register(skill) {
|
|
56
|
+
if (skill.flavor !== 'skill') {
|
|
57
|
+
throw new Error(`SkillRegistry.register: expected a Skill (flavor: 'skill'), got flavor: '${skill.flavor}' (id: '${skill.id}'). Use defineSkill(...) to construct.`);
|
|
58
|
+
}
|
|
59
|
+
if (this.skills.has(skill.id)) {
|
|
60
|
+
throw new Error(`SkillRegistry.register: skill '${skill.id}' is already registered. Use .replace('${skill.id}', skill) to overwrite.`);
|
|
61
|
+
}
|
|
62
|
+
this.skills.set(skill.id, skill);
|
|
63
|
+
return this;
|
|
64
|
+
}
|
|
65
|
+
/** Replace an existing skill by id. Throws if id is not registered. */
|
|
66
|
+
replace(id, skill) {
|
|
67
|
+
if (!this.skills.has(id)) {
|
|
68
|
+
throw new Error(`SkillRegistry.replace: no skill registered at '${id}'. Use .register(...) for new skills.`);
|
|
69
|
+
}
|
|
70
|
+
if (skill.flavor !== 'skill') {
|
|
71
|
+
throw new Error(`SkillRegistry.replace: expected a Skill (flavor: 'skill'), got '${skill.flavor}'.`);
|
|
72
|
+
}
|
|
73
|
+
if (skill.id !== id) {
|
|
74
|
+
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.`);
|
|
75
|
+
}
|
|
76
|
+
this.skills.set(id, skill);
|
|
77
|
+
return this;
|
|
78
|
+
}
|
|
79
|
+
/** Remove a skill by id. No-op if not registered. */
|
|
80
|
+
unregister(id) {
|
|
81
|
+
this.skills.delete(id);
|
|
82
|
+
return this;
|
|
83
|
+
}
|
|
84
|
+
/** Look up by id. Returns undefined if not registered. */
|
|
85
|
+
get(id) {
|
|
86
|
+
return this.skills.get(id);
|
|
87
|
+
}
|
|
88
|
+
/** True iff a skill with the given id is registered. */
|
|
89
|
+
has(id) {
|
|
90
|
+
return this.skills.has(id);
|
|
91
|
+
}
|
|
92
|
+
/** All registered skills. Order matches registration order. */
|
|
93
|
+
list() {
|
|
94
|
+
return [...this.skills.values()];
|
|
95
|
+
}
|
|
96
|
+
/** Number of registered skills. */
|
|
97
|
+
get size() {
|
|
98
|
+
return this.skills.size;
|
|
99
|
+
}
|
|
100
|
+
/** Drop all registrations. */
|
|
101
|
+
clear() {
|
|
102
|
+
this.skills.clear();
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Materialize the LLM-facing skill discovery tools from the current
|
|
106
|
+
* registry contents. Returns `{ listSkills, readSkill }`:
|
|
107
|
+
*
|
|
108
|
+
* - `list_skills` — no-arg tool the LLM calls to enumerate
|
|
109
|
+
* `{ id, description }` for every registered skill. Lets the
|
|
110
|
+
* LLM discover skills without paying the prompt-token cost of
|
|
111
|
+
* a static catalog in the system prompt.
|
|
112
|
+
*
|
|
113
|
+
* - `read_skill({ id })` — activates the named skill for the
|
|
114
|
+
* NEXT iteration. The Agent's tool-calls subflow inspects this
|
|
115
|
+
* tool call by name and updates `scope.activatedInjectionIds`
|
|
116
|
+
* so the InjectionEngine on iter N+1 includes the skill in the
|
|
117
|
+
* active set (body lands in the system slot; gated tools land
|
|
118
|
+
* in the tools slot).
|
|
119
|
+
*
|
|
120
|
+
* Both entries are `undefined` when the registry is empty — filter
|
|
121
|
+
* before adding to a tool list:
|
|
122
|
+
*
|
|
123
|
+
* const { listSkills, readSkill } = registry.toTools();
|
|
124
|
+
* const tools = [listSkills, readSkill, ...other].filter(Boolean) as Tool[];
|
|
125
|
+
*
|
|
126
|
+
* Composes with `gatedTools` from `agentfootprint/tool-providers`
|
|
127
|
+
* so PermissionPolicy can scope which roles see the skill discovery
|
|
128
|
+
* surface.
|
|
129
|
+
*
|
|
130
|
+
* @returns A `SkillToolPair` (`{ listSkills, readSkill }`).
|
|
131
|
+
*/
|
|
132
|
+
toTools() {
|
|
133
|
+
const skills = this.list();
|
|
134
|
+
return {
|
|
135
|
+
listSkills: (0, skillTools_js_1.buildListSkillsTool)(skills),
|
|
136
|
+
readSkill: (0, skillTools_js_1.buildReadSkillTool)(skills),
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Resolve the effective `surfaceMode` for a skill, applying the
|
|
141
|
+
* cascade:
|
|
142
|
+
*
|
|
143
|
+
* 1. If the skill's own `metadata.surfaceMode` is concrete
|
|
144
|
+
* (`'system-prompt'` / `'tool-only'` / `'both'`), return it.
|
|
145
|
+
* Per-skill explicit choice always wins.
|
|
146
|
+
* 2. Else if the registry was constructed with a concrete
|
|
147
|
+
* `surfaceMode`, return that.
|
|
148
|
+
* 3. Else delegate to `resolveSurfaceMode(provider, model)` using
|
|
149
|
+
* the explicit `provider` arg (or `this.providerHint` if
|
|
150
|
+
* omitted). Falls back to `'tool-only'` when no provider is
|
|
151
|
+
* known.
|
|
152
|
+
*
|
|
153
|
+
* Forward-compat for Block C / v2.5 per-mode runtime routing: the
|
|
154
|
+
* runtime calls this with the agent's provider + model to decide
|
|
155
|
+
* how to materialize the skill's body into slots.
|
|
156
|
+
*
|
|
157
|
+
* Throws if the skill is not registered (catches typos at the
|
|
158
|
+
* caller site rather than silently resolving against a stranger).
|
|
159
|
+
*
|
|
160
|
+
* @param skillOrId A registered Skill `Injection` OR its `id`.
|
|
161
|
+
* @param provider Provider name override (wins over `providerHint`).
|
|
162
|
+
* @param model Model name for the per-provider attention rule.
|
|
163
|
+
*/
|
|
164
|
+
resolveForSkill(skillOrId, provider, model) {
|
|
165
|
+
const skill = typeof skillOrId === 'string' ? this.get(skillOrId) : skillOrId;
|
|
166
|
+
if (!skill) {
|
|
167
|
+
const id = typeof skillOrId === 'string' ? skillOrId : skillOrId.id;
|
|
168
|
+
throw new Error(`SkillRegistry.resolveForSkill: no skill registered at id '${id}'.`);
|
|
169
|
+
}
|
|
170
|
+
if (skill.flavor !== 'skill') {
|
|
171
|
+
throw new Error(`SkillRegistry.resolveForSkill: '${skill.id}' has flavor '${skill.flavor}', expected 'skill'.`);
|
|
172
|
+
}
|
|
173
|
+
const meta = skill.metadata;
|
|
174
|
+
const skillMode = meta?.surfaceMode;
|
|
175
|
+
if (skillMode && skillMode !== 'auto')
|
|
176
|
+
return skillMode;
|
|
177
|
+
if (this.opts.surfaceMode && this.opts.surfaceMode !== 'auto') {
|
|
178
|
+
return this.opts.surfaceMode;
|
|
179
|
+
}
|
|
180
|
+
const effectiveProvider = provider ?? this.opts.providerHint ?? 'unknown';
|
|
181
|
+
return (0, defineSkill_js_1.resolveSurfaceMode)(effectiveProvider, model);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
exports.SkillRegistry = SkillRegistry;
|
|
185
|
+
//# sourceMappingURL=SkillRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillRegistry.js","sourceRoot":"","sources":["../../../src/lib/injection-engine/SkillRegistry.ts"],"names":[],"mappings":"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"}
|