agentfootprint 2.2.0 → 2.3.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/AGENTS.md +52 -0
- package/CLAUDE.md +52 -0
- package/README.md +49 -0
- package/README.proposed.md +258 -0
- package/ai-instructions/claude-code/SKILL.md +24 -5
- package/ai-instructions/clinerules +22 -5
- package/ai-instructions/copilot-instructions.md +22 -5
- package/ai-instructions/cursor/agentfootprint.md +22 -5
- package/ai-instructions/kiro/agentfootprint.md +22 -5
- package/ai-instructions/windsurfrules +22 -5
- package/dist/adapters/llm/AnthropicProvider.js +0 -31
- package/dist/adapters/llm/AnthropicProvider.js.map +1 -1
- package/dist/adapters/llm/BedrockProvider.js +2 -28
- package/dist/adapters/llm/BedrockProvider.js.map +1 -1
- package/dist/adapters/llm/BrowserAnthropicProvider.js +1 -31
- package/dist/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
- package/dist/adapters/llm/BrowserOpenAIProvider.js +1 -11
- package/dist/adapters/llm/BrowserOpenAIProvider.js.map +1 -1
- package/dist/adapters/llm/MockProvider.js +35 -1
- package/dist/adapters/llm/MockProvider.js.map +1 -1
- package/dist/adapters/llm/OpenAIProvider.js +3 -29
- package/dist/adapters/llm/OpenAIProvider.js.map +1 -1
- package/dist/adapters/memory/agentcore.js +305 -0
- package/dist/adapters/memory/agentcore.js.map +1 -0
- package/dist/adapters/memory/redis.js +287 -0
- package/dist/adapters/memory/redis.js.map +1 -0
- package/dist/esm/adapters/llm/AnthropicProvider.js +0 -31
- package/dist/esm/adapters/llm/AnthropicProvider.js.map +1 -1
- package/dist/esm/adapters/llm/BedrockProvider.js +2 -28
- package/dist/esm/adapters/llm/BedrockProvider.js.map +1 -1
- package/dist/esm/adapters/llm/BrowserAnthropicProvider.js +1 -31
- package/dist/esm/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
- package/dist/esm/adapters/llm/BrowserOpenAIProvider.js +1 -11
- package/dist/esm/adapters/llm/BrowserOpenAIProvider.js.map +1 -1
- package/dist/esm/adapters/llm/MockProvider.js +35 -1
- package/dist/esm/adapters/llm/MockProvider.js.map +1 -1
- package/dist/esm/adapters/llm/OpenAIProvider.js +3 -29
- package/dist/esm/adapters/llm/OpenAIProvider.js.map +1 -1
- package/dist/esm/adapters/memory/agentcore.js +301 -0
- package/dist/esm/adapters/memory/agentcore.js.map +1 -0
- package/dist/esm/adapters/memory/redis.js +283 -0
- package/dist/esm/adapters/memory/redis.js.map +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/injection-engine/index.js +0 -54
- package/dist/esm/lib/injection-engine/index.js.map +1 -1
- package/dist/esm/lib/mcp/index.js +1 -0
- package/dist/esm/lib/mcp/index.js.map +1 -1
- package/dist/esm/lib/mcp/mcpClient.js +29 -24
- package/dist/esm/lib/mcp/mcpClient.js.map +1 -1
- package/dist/esm/lib/mcp/mockMcpClient.js +97 -0
- package/dist/esm/lib/mcp/mockMcpClient.js.map +1 -0
- package/dist/esm/lib/rag/defineRAG.js +0 -18
- package/dist/esm/lib/rag/defineRAG.js.map +1 -1
- package/dist/esm/lib/rag/indexDocuments.js +39 -4
- package/dist/esm/lib/rag/indexDocuments.js.map +1 -1
- package/dist/esm/memory/causal/loadSnapshot.js +1 -1
- package/dist/esm/memory/define.js +0 -14
- package/dist/esm/memory/define.js.map +1 -1
- package/dist/esm/memory/define.types.js +0 -10
- package/dist/esm/memory/define.types.js.map +1 -1
- package/dist/esm/resilience/index.js +0 -44
- package/dist/esm/resilience/index.js.map +1 -1
- package/dist/esm/stream.js +0 -29
- package/dist/esm/stream.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/instructions.js +21 -0
- package/dist/instructions.js.map +1 -0
- package/dist/lib/injection-engine/index.js +0 -54
- package/dist/lib/injection-engine/index.js.map +1 -1
- package/dist/lib/instructions/defineInstruction.js +35 -0
- package/dist/lib/instructions/defineInstruction.js.map +1 -0
- package/dist/lib/instructions/evaluator.js +38 -0
- package/dist/lib/instructions/evaluator.js.map +1 -0
- package/dist/lib/instructions/index.js +48 -0
- package/dist/lib/instructions/index.js.map +1 -0
- package/dist/lib/instructions/types.js +22 -0
- package/dist/lib/instructions/types.js.map +1 -0
- package/dist/lib/mcp/index.js +3 -1
- package/dist/lib/mcp/index.js.map +1 -1
- package/dist/lib/mcp/mcpClient.js +29 -24
- package/dist/lib/mcp/mcpClient.js.map +1 -1
- package/dist/lib/mcp/mockMcpClient.js +101 -0
- package/dist/lib/mcp/mockMcpClient.js.map +1 -0
- package/dist/lib/rag/defineRAG.js +0 -18
- package/dist/lib/rag/defineRAG.js.map +1 -1
- package/dist/lib/rag/indexDocuments.js +39 -4
- package/dist/lib/rag/indexDocuments.js.map +1 -1
- package/dist/memory/causal/loadSnapshot.js +1 -1
- package/dist/memory/conversationHelpers.js +39 -0
- package/dist/memory/conversationHelpers.js.map +1 -0
- package/dist/memory/define.js +0 -14
- package/dist/memory/define.js.map +1 -1
- package/dist/memory/define.types.js +0 -10
- package/dist/memory/define.types.js.map +1 -1
- package/dist/resilience/index.js +0 -44
- package/dist/resilience/index.js.map +1 -1
- package/dist/stream.js +0 -29
- package/dist/stream.js.map +1 -1
- package/dist/types/adapters/llm/AnthropicProvider.d.ts +0 -31
- package/dist/types/adapters/llm/AnthropicProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/BedrockProvider.d.ts +2 -28
- package/dist/types/adapters/llm/BedrockProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/BrowserAnthropicProvider.d.ts +1 -31
- package/dist/types/adapters/llm/BrowserAnthropicProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/BrowserOpenAIProvider.d.ts +1 -11
- package/dist/types/adapters/llm/BrowserOpenAIProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/MockProvider.d.ts +45 -0
- package/dist/types/adapters/llm/MockProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/OpenAIProvider.d.ts +3 -29
- package/dist/types/adapters/llm/OpenAIProvider.d.ts.map +1 -1
- package/dist/types/adapters/memory/agentcore.d.ts +157 -0
- package/dist/types/adapters/memory/agentcore.d.ts.map +1 -0
- package/dist/types/adapters/memory/redis.d.ts +126 -0
- package/dist/types/adapters/memory/redis.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/instructions.d.ts +5 -0
- package/dist/types/instructions.d.ts.map +1 -0
- package/dist/types/lib/injection-engine/index.d.ts +0 -54
- package/dist/types/lib/injection-engine/index.d.ts.map +1 -1
- package/dist/types/lib/instructions/defineInstruction.d.ts +22 -0
- package/dist/types/lib/instructions/defineInstruction.d.ts.map +1 -0
- package/dist/types/lib/instructions/evaluator.d.ts +11 -0
- package/dist/types/lib/instructions/evaluator.d.ts.map +1 -0
- package/dist/types/lib/instructions/index.d.ts +44 -0
- package/dist/types/lib/instructions/index.d.ts.map +1 -0
- package/dist/types/lib/instructions/types.d.ts +100 -0
- package/dist/types/lib/instructions/types.d.ts.map +1 -0
- package/dist/types/lib/mcp/index.d.ts +1 -0
- package/dist/types/lib/mcp/index.d.ts.map +1 -1
- package/dist/types/lib/mcp/mcpClient.d.ts +0 -17
- package/dist/types/lib/mcp/mcpClient.d.ts.map +1 -1
- package/dist/types/lib/mcp/mockMcpClient.d.ts +66 -0
- package/dist/types/lib/mcp/mockMcpClient.d.ts.map +1 -0
- package/dist/types/lib/mcp/types.d.ts +2 -0
- package/dist/types/lib/mcp/types.d.ts.map +1 -1
- package/dist/types/lib/rag/defineRAG.d.ts +18 -21
- package/dist/types/lib/rag/defineRAG.d.ts.map +1 -1
- package/dist/types/lib/rag/indexDocuments.d.ts +30 -1
- package/dist/types/lib/rag/indexDocuments.d.ts.map +1 -1
- package/dist/types/memory/causal/loadSnapshot.d.ts +1 -1
- package/dist/types/memory/conversationHelpers.d.ts +19 -0
- package/dist/types/memory/conversationHelpers.d.ts.map +1 -0
- package/dist/types/memory/define.d.ts +0 -14
- package/dist/types/memory/define.d.ts.map +1 -1
- package/dist/types/memory/define.types.d.ts +2 -12
- package/dist/types/memory/define.types.d.ts.map +1 -1
- package/dist/types/resilience/index.d.ts +0 -44
- package/dist/types/resilience/index.d.ts.map +1 -1
- package/dist/types/stream.d.ts +0 -29
- package/dist/types/stream.d.ts.map +1 -1
- package/package.json +20 -1
package/dist/esm/stream.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -22,7 +22,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
22
22
|
};
|
|
23
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
24
|
exports.ConditionalBuilder = exports.Conditional = exports.ParallelBuilder = exports.Parallel = exports.SequenceBuilder = exports.Sequence = exports.defineTool = 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.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.mcpClient = exports.indexDocuments = exports.defineRAG = 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.defineSkill = exports.defineInstruction = exports.buildInjectionEngineSubflow = exports.evaluateInjections = exports.encodeSSE = exports.SSEFormatter = exports.toSSE = exports.createProvider = exports.BrowserOpenAIProvider = exports.browserOpenai = exports.BrowserAnthropicProvider = exports.browserAnthropic = exports.BedrockProvider = exports.bedrock = exports.ollama = exports.OpenAIProvider = exports.openai = exports.AnthropicProvider = exports.anthropic = exports.mock = exports.MockProvider = exports.LoopBuilder = exports.Loop = void 0;
|
|
25
|
+
exports.mockMcpClient = exports.mcpClient = exports.indexDocuments = exports.defineRAG = 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.defineSkill = exports.defineInstruction = exports.buildInjectionEngineSubflow = exports.evaluateInjections = exports.encodeSSE = exports.SSEFormatter = exports.toSSE = exports.createProvider = exports.BrowserOpenAIProvider = exports.browserOpenai = exports.BrowserAnthropicProvider = exports.browserAnthropic = exports.BedrockProvider = exports.bedrock = exports.ollama = exports.OpenAIProvider = exports.openai = exports.AnthropicProvider = exports.anthropic = exports.mock = exports.MockProvider = exports.LoopBuilder = exports.Loop = void 0;
|
|
26
26
|
// Events — registry, types, payloads
|
|
27
27
|
__exportStar(require("./events/types.js"), exports);
|
|
28
28
|
__exportStar(require("./events/payloads.js"), exports);
|
|
@@ -235,4 +235,5 @@ Object.defineProperty(exports, "indexDocuments", { enumerable: true, get: functi
|
|
|
235
235
|
// cost when MCP isn't used).
|
|
236
236
|
var index_js_7 = require("./lib/mcp/index.js");
|
|
237
237
|
Object.defineProperty(exports, "mcpClient", { enumerable: true, get: function () { return index_js_7.mcpClient; } });
|
|
238
|
+
Object.defineProperty(exports, "mockMcpClient", { enumerable: true, get: function () { return index_js_7.mockMcpClient; } });
|
|
238
239
|
//# 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":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* agentfootprint/instructions — public re-export for the Instructions subsystem.
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
17
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
__exportStar(require("./lib/instructions/index.js"), exports);
|
|
21
|
+
//# sourceMappingURL=instructions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,8DAA4C"}
|
|
@@ -5,60 +5,6 @@
|
|
|
5
5
|
* The unifying primitive of agentfootprint context engineering.
|
|
6
6
|
* One `Injection` type. One `InjectionEngine` subflow. N typed sugar
|
|
7
7
|
* factories. See `README.md` in this folder for the full concept.
|
|
8
|
-
*
|
|
9
|
-
* ─── 7-panel design review (2026-04-28) ─────────────────────────────
|
|
10
|
-
*
|
|
11
|
-
* LLM-AI system design ✓ ONE primitive replaces N feature-specific
|
|
12
|
-
* subsystems. Skill, Steering, Instruction,
|
|
13
|
-
* Context (and RAG, Memory, Guardrail)
|
|
14
|
-
* are typed sugar producing the same shape.
|
|
15
|
-
* Engine is shared; observability is shared;
|
|
16
|
-
* Lens chips are shared.
|
|
17
|
-
*
|
|
18
|
-
* Performance ✓ Trigger evaluation O(N) per iteration.
|
|
19
|
-
* Subflow ceremony ~50µs per iteration.
|
|
20
|
-
* Negligible. Active set materialized once,
|
|
21
|
-
* consumed by 3 slot subflows.
|
|
22
|
-
*
|
|
23
|
-
* Scalability ✓ Adding a flavor = adding a sugar factory
|
|
24
|
-
* file. Zero engine change. Library scales
|
|
25
|
-
* to 50+ flavors without bloating the
|
|
26
|
-
* engine. The "narrow waist" pattern.
|
|
27
|
-
*
|
|
28
|
-
* Research alignment ✓ Maps to "Augmented LM" framing
|
|
29
|
-
* (Mialon et al. 2023): every external
|
|
30
|
-
* input is an augmentation; agentfootprint
|
|
31
|
-
* calls them Injections. Factory names
|
|
32
|
-
* preserve research vocabulary (Skill, RAG,
|
|
33
|
-
* Memory, Steering) at the API surface.
|
|
34
|
-
*
|
|
35
|
-
* Flexibility ✓ Discriminated `trigger` union handles
|
|
36
|
-
* always / rule / on-tool-return /
|
|
37
|
-
* llm-activated. New trigger kinds extend
|
|
38
|
-
* cleanly. Multi-slot per Injection covers
|
|
39
|
-
* Skills (system-prompt + tools).
|
|
40
|
-
*
|
|
41
|
-
* Abstraction-modular ✓ Engine = subflow (drill-able). Factories
|
|
42
|
-
* = small files (one per flavor). Slot
|
|
43
|
-
* subflows are unchanged consumers.
|
|
44
|
-
* Textbook narrow-waist architecture.
|
|
45
|
-
*
|
|
46
|
-
* Software engineering ✓ Predicate exceptions caught + reported
|
|
47
|
-
* via `skipped[]`, never propagate. Frozen
|
|
48
|
-
* Injections. Validation in factories.
|
|
49
|
-
* 7-pattern test coverage. Subpath export
|
|
50
|
-
* for tree-shake.
|
|
51
|
-
*
|
|
52
|
-
* Plus footprintjs integration check ✓ — uses existing slot subflow
|
|
53
|
-
* convention (writes activeInjections to scope; slots filter by
|
|
54
|
-
* targeted slot) + ContextRecorder picks up source field zero-change.
|
|
55
|
-
*
|
|
56
|
-
* Plus TypeScript engineer check ✓ — discriminated union, no `any`,
|
|
57
|
-
* frozen returns, exhaustiveness check on trigger kind.
|
|
58
|
-
*
|
|
59
|
-
* ─── 7-pattern test coverage ────────────────────────────────────────
|
|
60
|
-
*
|
|
61
|
-
* See `test/lib/injection-engine/*.test.ts`.
|
|
62
8
|
*/
|
|
63
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
64
10
|
exports.defineFact = exports.defineSteering = exports.defineSkill = exports.defineInstruction = exports.buildInjectionEngineSubflow = exports.evaluateInjections = void 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/injection-engine/index.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/injection-engine/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAWH,SAAS;AACT,+CAAoD;AAA3C,kHAAA,kBAAkB,OAAA;AAC3B,mFAG0C;AAFxC,6IAAA,2BAA2B,OAAA;AAI7B,gFAAgF;AAChF,yEAAoG;AAA3F,yHAAA,iBAAiB,OAAA;AAE1B,6DAAkF;AAAzE,6GAAA,WAAW,OAAA;AAEpB,mEAA2F;AAAlF,mHAAA,cAAc,OAAA;AAEvB,2DAA+E;AAAtE,2GAAA,UAAU,OAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* defineInstruction — ergonomic builder for `Instruction`.
|
|
4
|
+
*
|
|
5
|
+
* Pattern: Builder pattern (GoF) for the Strategy interface.
|
|
6
|
+
* Role: Public surface — used by consumers to declare instructions.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* import { defineInstruction } from 'agentfootprint';
|
|
10
|
+
* import type { InstructionContext } from 'agentfootprint';
|
|
11
|
+
*
|
|
12
|
+
* const refundEmpathy = defineInstruction({
|
|
13
|
+
* id: 'refund-empathy',
|
|
14
|
+
* description: 'Calm tone for refund denials.',
|
|
15
|
+
* activeWhen: (ctx) => ctx.lastToolResult?.toolName === 'check_refund'
|
|
16
|
+
* && ctx.lastToolResult.result.includes('denied'),
|
|
17
|
+
* prompt: 'Be empathetic. Do NOT promise refund reversal.',
|
|
18
|
+
* });
|
|
19
|
+
*/
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.defineInstruction = void 0;
|
|
22
|
+
function defineInstruction(options) {
|
|
23
|
+
if (!options.id || options.id.trim().length === 0) {
|
|
24
|
+
throw new Error('defineInstruction: `id` is required and must be non-empty.');
|
|
25
|
+
}
|
|
26
|
+
if (options.prompt === undefined
|
|
27
|
+
&& (!options.tools || options.tools.length === 0)) {
|
|
28
|
+
throw new Error(`defineInstruction(${options.id}): instruction must declare at least one of \`prompt\` or \`tools\`.`);
|
|
29
|
+
}
|
|
30
|
+
// Freeze for consumer protection — instructions should be immutable
|
|
31
|
+
// after construction so the agent can cache evaluations.
|
|
32
|
+
return Object.freeze({ ...options });
|
|
33
|
+
}
|
|
34
|
+
exports.defineInstruction = defineInstruction;
|
|
35
|
+
//# sourceMappingURL=defineInstruction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineInstruction.js","sourceRoot":"","sources":["../../../src/lib/instructions/defineInstruction.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;AAMH,SAAgB,iBAAiB,CAAC,OAAiC;IACjE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,IACE,OAAO,CAAC,MAAM,KAAK,SAAS;WACzB,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EACjD,CAAC;QACD,MAAM,IAAI,KAAK,CACb,qBAAqB,OAAO,CAAC,EAAE,sEAAsE,CACtG,CAAC;IACJ,CAAC;IACD,oEAAoE;IACpE,yDAAyD;IACzD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,CAAgB,CAAC;AACtD,CAAC;AAfD,8CAeC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Instruction evaluator — runs the `activeWhen` predicates and
|
|
4
|
+
* returns the active set + any skipped predicates.
|
|
5
|
+
*
|
|
6
|
+
* Pattern: Pure function. Stateless.
|
|
7
|
+
* Role: Internal helper used by Agent during pre-LLM stage.
|
|
8
|
+
* Emits: N/A — caller handles emit + observability.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.evaluateInstructions = void 0;
|
|
12
|
+
function evaluateInstructions(instructions, ctx) {
|
|
13
|
+
const active = [];
|
|
14
|
+
const skipped = [];
|
|
15
|
+
for (const inst of instructions) {
|
|
16
|
+
if (!inst.activeWhen) {
|
|
17
|
+
// No predicate → always active (unconditional injection).
|
|
18
|
+
active.push(inst);
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
let matched = false;
|
|
22
|
+
try {
|
|
23
|
+
matched = inst.activeWhen(ctx);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
skipped.push({
|
|
27
|
+
id: inst.id,
|
|
28
|
+
error: err instanceof Error ? err.message : String(err),
|
|
29
|
+
});
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (matched)
|
|
33
|
+
active.push(inst);
|
|
34
|
+
}
|
|
35
|
+
return { active, skipped };
|
|
36
|
+
}
|
|
37
|
+
exports.evaluateInstructions = evaluateInstructions;
|
|
38
|
+
//# sourceMappingURL=evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../../src/lib/instructions/evaluator.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAQH,SAAgB,oBAAoB,CAClC,YAAoC,EACpC,GAAuB;IAEvB,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,OAAO,GAAoC,EAAE,CAAC;IAEpD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,0DAA0D;YAC1D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,IAAI,OAAO;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AA3BD,oDA2BC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Instructions — declarative rule-based system-prompt injection.
|
|
4
|
+
*
|
|
5
|
+
* Public API for the v2 Instructions subsystem. See `types.ts` for the
|
|
6
|
+
* full interface + the unified context-engineering model placement.
|
|
7
|
+
*
|
|
8
|
+
* ─── 7-panel design review (2026-04-28) ─────────────────────────────
|
|
9
|
+
*
|
|
10
|
+
* LLM-AI system design ✓ Maps cleanly to the unified context-
|
|
11
|
+
* engineering model: slot=system-prompt
|
|
12
|
+
* (+optional tools), role=system, timing=
|
|
13
|
+
* per-iteration, decision=rule.
|
|
14
|
+
* Performance ✓ Predicates run once per iteration (not
|
|
15
|
+
* per token / per event). O(N) in number
|
|
16
|
+
* of instructions; typical N ≤ 20.
|
|
17
|
+
* Scalability ✓ Stateless evaluator; many concurrent
|
|
18
|
+
* agents share the same instruction list
|
|
19
|
+
* via Object.freeze.
|
|
20
|
+
* Research alignment ✓ Mirrors v1 AgentInstruction's `activeWhen`
|
|
21
|
+
* shape (origin/main `c6e11d0`) but drops
|
|
22
|
+
* `onToolResult`, `safety`, decision-scope
|
|
23
|
+
* wrapping for v2 simplicity. Equivalent
|
|
24
|
+
* tool-result-driven behavior is expressed
|
|
25
|
+
* via `activeWhen: (ctx) =>
|
|
26
|
+
* ctx.lastToolResult?.toolName === 'X'`.
|
|
27
|
+
* Flexibility ✓ Same Instruction can be active across
|
|
28
|
+
* multiple iterations; can inject tools
|
|
29
|
+
* in addition to prompt; predicates can
|
|
30
|
+
* inspect history + last tool result.
|
|
31
|
+
* Abstraction-modular ✓ Three small files: types, builder,
|
|
32
|
+
* evaluator. Agent integration is one
|
|
33
|
+
* call into `evaluateInstructions()`.
|
|
34
|
+
* Software engineering ✓ Predicate errors are caught + surfaced
|
|
35
|
+
* (no crash). Frozen instructions prevent
|
|
36
|
+
* mutation. 7-pattern test coverage.
|
|
37
|
+
*
|
|
38
|
+
* ─── 7-pattern test coverage ────────────────────────────────────────
|
|
39
|
+
*
|
|
40
|
+
* See `test/lib/instructions/*.test.ts`.
|
|
41
|
+
*/
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.evaluateInstructions = exports.defineInstruction = void 0;
|
|
44
|
+
var defineInstruction_js_1 = require("./defineInstruction.js");
|
|
45
|
+
Object.defineProperty(exports, "defineInstruction", { enumerable: true, get: function () { return defineInstruction_js_1.defineInstruction; } });
|
|
46
|
+
var evaluator_js_1 = require("./evaluator.js");
|
|
47
|
+
Object.defineProperty(exports, "evaluateInstructions", { enumerable: true, get: function () { return evaluator_js_1.evaluateInstructions; } });
|
|
48
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/instructions/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;;;AAEH,+DAGgC;AAF9B,yHAAA,iBAAiB,OAAA;AAInB,+CAEwB;AADtB,oHAAA,oBAAoB,OAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Instructions — types.
|
|
4
|
+
*
|
|
5
|
+
* An Instruction is a declarative rule for conditional system-prompt
|
|
6
|
+
* injection. The agent evaluates each Instruction's `activeWhen`
|
|
7
|
+
* predicate at the start of every iteration; matching instructions'
|
|
8
|
+
* `prompt` text is prepended to the system prompt for that iteration.
|
|
9
|
+
*
|
|
10
|
+
* This is the rule-based flavor of the unified context-engineering
|
|
11
|
+
* model: slot=system-prompt, role=system, timing=per-iteration,
|
|
12
|
+
* decision=rule. (Compare with Skills: timing=on-activation,
|
|
13
|
+
* decision=LLM-guided.)
|
|
14
|
+
*
|
|
15
|
+
* Pattern: Strategy (GoF) — each Instruction is a strategy for
|
|
16
|
+
* "should I add this prompt to the next iteration?"
|
|
17
|
+
* Role: Consumer-facing shape. Agent.create(...).instruction(...).
|
|
18
|
+
* Emits: `agentfootprint.context.injected` with source='instruction'
|
|
19
|
+
* when an instruction activates.
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/instructions/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG"}
|
package/dist/lib/mcp/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.mcpClient = void 0;
|
|
3
|
+
exports.mockMcpClient = exports.mcpClient = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* MCP — Model Context Protocol client integration. Connect to an MCP
|
|
6
6
|
* server, register its tools on your Agent. Server-side support is
|
|
@@ -9,4 +9,6 @@ exports.mcpClient = void 0;
|
|
|
9
9
|
*/
|
|
10
10
|
var mcpClient_js_1 = require("./mcpClient.js");
|
|
11
11
|
Object.defineProperty(exports, "mcpClient", { enumerable: true, get: function () { return mcpClient_js_1.mcpClient; } });
|
|
12
|
+
var mockMcpClient_js_1 = require("./mockMcpClient.js");
|
|
13
|
+
Object.defineProperty(exports, "mockMcpClient", { enumerable: true, get: function () { return mockMcpClient_js_1.mockMcpClient; } });
|
|
12
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/mcp/index.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,+CAA2C;AAAlC,yGAAA,SAAS,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/mcp/index.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,+CAA2C;AAAlC,yGAAA,SAAS,OAAA;AAClB,uDAAgG;AAAvF,iHAAA,aAAa,OAAA"}
|
|
@@ -30,32 +30,18 @@
|
|
|
30
30
|
* `McpClientOptions` so observability surfaces can group
|
|
31
31
|
* tool calls by server.
|
|
32
32
|
*
|
|
33
|
-
* 7-panel review (2026-04-29):
|
|
34
|
-
* - LLM Systems ✅ inputSchema preserved verbatim — the LLM sees
|
|
35
|
-
* the same tool schema MCP advertised
|
|
36
|
-
* - Architect ✅ pure adapter; no engine code. New tool sources
|
|
37
|
-
* slot in via the same `Tool` interface
|
|
38
|
-
* - API Designer ✅ three methods (.tools / .refresh / .close)
|
|
39
|
-
* mirror the MCP SDK lifecycle
|
|
40
|
-
* - Performance ✅ tool list cached after first fetch; .refresh
|
|
41
|
-
* is opt-in. callTool round-trip is one network
|
|
42
|
-
* hop per tool call (same as direct LLM-tool flow)
|
|
43
|
-
* - Privacy ✅ no implicit logging; consumer controls auth
|
|
44
|
-
* via transport headers
|
|
45
|
-
* - SoftEng ✅ lazy-required SDK + friendly install error;
|
|
46
|
-
* mock injection point for tests
|
|
47
|
-
* - TS Engineer ✅ structural McpSdkClient shim — works against
|
|
48
|
-
* any future SDK version with the same shape
|
|
49
|
-
*
|
|
50
33
|
* Lazy-require pattern: the `@modelcontextprotocol/sdk` peer-dep
|
|
51
34
|
* loads only when a consumer actually constructs a client. Tests
|
|
52
35
|
* inject `_client` and skip the import path entirely.
|
|
53
36
|
*/
|
|
54
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
55
38
|
exports.mcpClient = void 0;
|
|
39
|
+
// Version-less identity. The MCP `clientInfo` field is informational
|
|
40
|
+
// (server logs it); a hardcoded number drifts every release. Consumers
|
|
41
|
+
// who care about wire-level identity pass `clientInfo` explicitly.
|
|
56
42
|
const DEFAULT_CLIENT_INFO = {
|
|
57
43
|
name: 'agentfootprint',
|
|
58
|
-
version: '
|
|
44
|
+
version: '0.0.0',
|
|
59
45
|
};
|
|
60
46
|
/**
|
|
61
47
|
* Connect to an MCP server. Returns an `McpClient` that exposes the
|
|
@@ -72,22 +58,33 @@ async function mcpClient(opts) {
|
|
|
72
58
|
// Tool cache so consumers calling `.tools()` more than once don't
|
|
73
59
|
// hammer the server. `.refresh()` invalidates it.
|
|
74
60
|
let cache = null;
|
|
61
|
+
let closed = false;
|
|
62
|
+
const ensureOpen = (op) => {
|
|
63
|
+
if (closed) {
|
|
64
|
+
throw new Error(`mcpClient[${name}].${op}() called after close(). Construct a new client to reconnect.`);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
75
67
|
const buildTools = async () => {
|
|
76
68
|
const listed = await sdk.listTools();
|
|
77
|
-
return listed.tools.map((t) => wrapMcpTool(sdk, t));
|
|
69
|
+
return listed.tools.map((t) => wrapMcpTool(name, sdk, t, opts.signal));
|
|
78
70
|
};
|
|
79
71
|
return {
|
|
80
72
|
name,
|
|
81
73
|
async tools() {
|
|
74
|
+
ensureOpen('tools');
|
|
82
75
|
if (!cache)
|
|
83
76
|
cache = await buildTools();
|
|
84
77
|
return cache;
|
|
85
78
|
},
|
|
86
79
|
async refresh() {
|
|
80
|
+
ensureOpen('refresh');
|
|
87
81
|
cache = await buildTools();
|
|
88
82
|
return cache;
|
|
89
83
|
},
|
|
90
84
|
async close() {
|
|
85
|
+
if (closed)
|
|
86
|
+
return;
|
|
87
|
+
closed = true;
|
|
91
88
|
cache = null;
|
|
92
89
|
await sdk.close();
|
|
93
90
|
},
|
|
@@ -146,30 +143,38 @@ async function buildTransport(t) {
|
|
|
146
143
|
});
|
|
147
144
|
}
|
|
148
145
|
// ─── Tool wrapping ─────────────────────────────────────────────────
|
|
149
|
-
function wrapMcpTool(sdk, mcp) {
|
|
150
|
-
|
|
146
|
+
function wrapMcpTool(serverName, sdk, mcp, signal) {
|
|
147
|
+
const tool = {
|
|
151
148
|
schema: {
|
|
152
149
|
name: mcp.name,
|
|
153
150
|
description: mcp.description ?? `MCP tool: ${mcp.name}`,
|
|
154
151
|
inputSchema: mcp.inputSchema,
|
|
155
152
|
},
|
|
156
153
|
execute: async (args) => {
|
|
154
|
+
// The agent passes args as `unknown` per Tool contract. MCP
|
|
155
|
+
// expects a JSON object — non-object inputs become `{}` rather
|
|
156
|
+
// than failing the SDK call.
|
|
157
|
+
const argsObj = args !== null && typeof args === 'object' && !Array.isArray(args)
|
|
158
|
+
? args
|
|
159
|
+
: {};
|
|
157
160
|
const result = await sdk.callTool({
|
|
158
161
|
name: mcp.name,
|
|
159
|
-
arguments:
|
|
162
|
+
arguments: argsObj,
|
|
163
|
+
...(signal && { signal }),
|
|
160
164
|
});
|
|
161
165
|
// MCP returns content blocks. We concatenate text blocks into
|
|
162
166
|
// a single string for the agent's tool-result event payload.
|
|
163
167
|
// Non-text blocks (images, resources) are summarized with their
|
|
164
|
-
// type — full multi-modal mapping is a
|
|
168
|
+
// type — full multi-modal mapping is a future-release follow-up.
|
|
165
169
|
const text = result.content
|
|
166
170
|
.map((c) => (c.type === 'text' && c.text ? c.text : `[${c.type}]`))
|
|
167
171
|
.join('\n');
|
|
168
172
|
if (result.isError) {
|
|
169
|
-
throw new Error(`MCP tool '${mcp.name}' returned an error: ${text}`);
|
|
173
|
+
throw new Error(`MCP tool '${mcp.name}' (server '${serverName}') returned an error: ${text}`);
|
|
170
174
|
}
|
|
171
175
|
return text;
|
|
172
176
|
},
|
|
173
177
|
};
|
|
178
|
+
return tool;
|
|
174
179
|
}
|
|
175
180
|
//# sourceMappingURL=mcpClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcpClient.js","sourceRoot":"","sources":["../../../src/lib/mcp/mcpClient.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"mcpClient.js","sourceRoot":"","sources":["../../../src/lib/mcp/mcpClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* mockMcpClient — in-memory MCP client for development and tests.
|
|
4
|
+
*
|
|
5
|
+
* const slack = mockMcpClient({
|
|
6
|
+
* tools: [
|
|
7
|
+
* {
|
|
8
|
+
* name: 'send_message',
|
|
9
|
+
* description: 'Post a message to a channel',
|
|
10
|
+
* inputSchema: { type: 'object' },
|
|
11
|
+
* handler: async ({ text }) => `Posted: ${text}`,
|
|
12
|
+
* },
|
|
13
|
+
* ],
|
|
14
|
+
* });
|
|
15
|
+
*
|
|
16
|
+
* const agent = Agent.create({ provider: mock({ reply: 'ok' }) })
|
|
17
|
+
* .tools(await slack.tools())
|
|
18
|
+
* .build();
|
|
19
|
+
*
|
|
20
|
+
* Pattern: Adapter (GoF) — produces an `McpClient` with the same shape
|
|
21
|
+
* as `mcpClient(opts)` but driven by an in-memory tool table
|
|
22
|
+
* instead of the MCP SDK + transport. Drop-in for development:
|
|
23
|
+
* start with `mockMcpClient`, swap to `mcpClient` once the
|
|
24
|
+
* real server is ready.
|
|
25
|
+
*
|
|
26
|
+
* Why public: `mcpClient`'s `_client` injection is `@internal` because
|
|
27
|
+
* the SDK shape isn't a stable public surface. `mockMcpClient` exposes
|
|
28
|
+
* a curated tool-handler shape that's tied to OUR Tool contract instead
|
|
29
|
+
* — stable, documented, and the right level of abstraction for
|
|
30
|
+
* mock-first development.
|
|
31
|
+
*/
|
|
32
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
+
exports.mockMcpClient = void 0;
|
|
34
|
+
/**
|
|
35
|
+
* Build an in-memory `McpClient`. Useful when you want to develop
|
|
36
|
+
* against MCP semantics without spawning subprocesses, hitting the
|
|
37
|
+
* network, or installing `@modelcontextprotocol/sdk`. Same `McpClient`
|
|
38
|
+
* shape as `mcpClient(opts)` — code that consumes one accepts the other.
|
|
39
|
+
*/
|
|
40
|
+
function mockMcpClient(options) {
|
|
41
|
+
const name = options.name ?? 'mock-mcp';
|
|
42
|
+
const toolMap = new Map(options.tools.map((t) => [t.name, t]));
|
|
43
|
+
let cache = null;
|
|
44
|
+
let closed = false;
|
|
45
|
+
const ensureOpen = (op) => {
|
|
46
|
+
if (closed) {
|
|
47
|
+
throw new Error(`mockMcpClient[${name}].${op}() called after close(). Construct a new client to reuse.`);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
const buildTools = () => options.tools.map((mcp) => wrapMockTool(name, toolMap, mcp));
|
|
51
|
+
return {
|
|
52
|
+
name,
|
|
53
|
+
async tools() {
|
|
54
|
+
ensureOpen('tools');
|
|
55
|
+
if (!cache)
|
|
56
|
+
cache = buildTools();
|
|
57
|
+
return cache;
|
|
58
|
+
},
|
|
59
|
+
async refresh() {
|
|
60
|
+
ensureOpen('refresh');
|
|
61
|
+
cache = buildTools();
|
|
62
|
+
return cache;
|
|
63
|
+
},
|
|
64
|
+
async close() {
|
|
65
|
+
if (closed)
|
|
66
|
+
return;
|
|
67
|
+
closed = true;
|
|
68
|
+
cache = null;
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
exports.mockMcpClient = mockMcpClient;
|
|
73
|
+
function wrapMockTool(serverName, toolMap, mcp) {
|
|
74
|
+
const tool = {
|
|
75
|
+
schema: {
|
|
76
|
+
name: mcp.name,
|
|
77
|
+
description: mcp.description ?? `Mock MCP tool: ${mcp.name}`,
|
|
78
|
+
inputSchema: mcp.inputSchema,
|
|
79
|
+
},
|
|
80
|
+
execute: async (args) => {
|
|
81
|
+
const argsObj = args !== null && typeof args === 'object' && !Array.isArray(args)
|
|
82
|
+
? args
|
|
83
|
+
: {};
|
|
84
|
+
// Look up by name at call time so mid-test handler swaps via a
|
|
85
|
+
// mutable Map could be supported later. For now `toolMap` is
|
|
86
|
+
// built once at factory time.
|
|
87
|
+
const handler = toolMap.get(mcp.name)?.handler;
|
|
88
|
+
if (!handler)
|
|
89
|
+
return '[mock result]';
|
|
90
|
+
try {
|
|
91
|
+
return await handler(argsObj);
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
95
|
+
throw new Error(`Mock MCP tool '${mcp.name}' (server '${serverName}') threw: ${msg}`);
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
return tool;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=mockMcpClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockMcpClient.js","sourceRoot":"","sources":["../../../src/lib/mcp/mockMcpClient.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;;;AAkCH;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,OAA6B;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,UAAU,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAsB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpF,IAAI,KAAK,GAA2B,IAAI,CAAC;IACzC,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,MAAM,UAAU,GAAG,CAAC,EAAU,EAAQ,EAAE;QACtC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,iBAAiB,IAAI,KAAK,EAAE,2DAA2D,CACxF,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,GAAoB,EAAE,CACvC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAE/D,OAAO;QACL,IAAI;QACJ,KAAK,CAAC,KAAK;YACT,UAAU,CAAC,OAAO,CAAC,CAAC;YACpB,IAAI,CAAC,KAAK;gBAAE,KAAK,GAAG,UAAU,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,CAAC,OAAO;YACX,UAAU,CAAC,SAAS,CAAC,CAAC;YACtB,KAAK,GAAG,UAAU,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,CAAC,KAAK;YACT,IAAI,MAAM;gBAAE,OAAO;YACnB,MAAM,GAAG,IAAI,CAAC;YACd,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC;AApCD,sCAoCC;AAED,SAAS,YAAY,CACnB,UAAkB,EAClB,OAAyC,EACzC,GAAgB;IAEhB,MAAM,IAAI,GAAS;QACjB,MAAM,EAAE;YACN,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,kBAAkB,GAAG,CAAC,IAAI,EAAE;YAC5D,WAAW,EAAE,GAAG,CAAC,WAAW;SAC7B;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,OAAO,GACX,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC/D,CAAC,CAAE,IAAgC;gBACnC,CAAC,CAAC,EAAE,CAAC;YACT,+DAA+D;YAC/D,6DAA6D;YAC7D,8BAA8B;YAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;YAC/C,IAAI,CAAC,OAAO;gBAAE,OAAO,eAAe,CAAC;YACrC,IAAI,CAAC;gBACH,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,CAAC,IAAI,cAAc,UAAU,aAAa,GAAG,EAAE,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;KACF,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -30,24 +30,6 @@
|
|
|
30
30
|
* `agentfootprint.context.injected` when retrieved chunks
|
|
31
31
|
* land in the messages slot.
|
|
32
32
|
*
|
|
33
|
-
* 7-panel review (2026-04-29):
|
|
34
|
-
* - LLM Systems ✅ injects as 'user' role by default — RAG chunks
|
|
35
|
-
* land where the LLM treats them as authoritative
|
|
36
|
-
* retrieved context, not behavior rules
|
|
37
|
-
* - Architect ✅ composition over defineMemory; zero new engine
|
|
38
|
-
* code; multi-RAG layering works via per-id keys
|
|
39
|
-
* - API Designer ✅ one factory, mirrors defineMemory shape; consumer
|
|
40
|
-
* ergonomics: `agent.rag(defineRAG({...}))`
|
|
41
|
-
* - Performance ✅ embedding cost is one call per turn (TURN_START
|
|
42
|
-
* timing, default); strict threshold prevents
|
|
43
|
-
* injecting low-confidence noise
|
|
44
|
-
* - Privacy ✅ multi-tenant via MemoryIdentity tuple; doc
|
|
45
|
-
* content never crosses tenant boundaries
|
|
46
|
-
* - ML / IR ✅ embedder version pinned via `embedderId`; cosine
|
|
47
|
-
* score semantics inherited from MemoryStore
|
|
48
|
-
* - SoftEng ✅ thin file (this one); existing memory tests
|
|
49
|
-
* cover the underlying pipeline
|
|
50
|
-
*
|
|
51
33
|
* @see ./indexDocuments.ts for the seeding helper
|
|
52
34
|
* @see ../../memory/define.ts for the underlying factory
|
|
53
35
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defineRAG.js","sourceRoot":"","sources":["../../../src/lib/rag/defineRAG.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"defineRAG.js","sourceRoot":"","sources":["../../../src/lib/rag/defineRAG.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;;;AAMH,kEAA+E;AAC/E,sDAAsD;AAyEtD;;;;;;;GAOG;AACH,SAAgB,SAAS,CAAC,IAAsB;IAC9C,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,EAAE,2BAA2B,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,EAAE,8BAA8B,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,aAAa,IAAI,CAAC,EAAE,oCAAoC;YACtD,yEAAyE,CAC5E,CAAC;IACJ,CAAC;IAED,OAAO,IAAA,wBAAY,EAAC;QAClB,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QACxE,IAAI,EAAE,8BAAY,CAAC,QAAQ;QAC3B,QAAQ,EAAE;YACR,IAAI,EAAE,mCAAiB,CAAC,KAAK;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;YACpB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,GAAG;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB;QACD,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM;KAC9B,CAAC,CAAC;AACL,CAAC;AA9BD,8BA8BC"}
|