agentfootprint 2.2.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/AGENTS.md +52 -0
  2. package/CLAUDE.md +52 -0
  3. package/README.md +286 -209
  4. package/ai-instructions/claude-code/SKILL.md +24 -5
  5. package/ai-instructions/clinerules +22 -5
  6. package/ai-instructions/copilot-instructions.md +22 -5
  7. package/ai-instructions/cursor/agentfootprint.md +22 -5
  8. package/ai-instructions/kiro/agentfootprint.md +22 -5
  9. package/ai-instructions/windsurfrules +22 -5
  10. package/dist/adapters/llm/AnthropicProvider.js +0 -31
  11. package/dist/adapters/llm/AnthropicProvider.js.map +1 -1
  12. package/dist/adapters/llm/BedrockProvider.js +2 -28
  13. package/dist/adapters/llm/BedrockProvider.js.map +1 -1
  14. package/dist/adapters/llm/BrowserAnthropicProvider.js +1 -31
  15. package/dist/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
  16. package/dist/adapters/llm/BrowserOpenAIProvider.js +1 -11
  17. package/dist/adapters/llm/BrowserOpenAIProvider.js.map +1 -1
  18. package/dist/adapters/llm/MockProvider.js +35 -1
  19. package/dist/adapters/llm/MockProvider.js.map +1 -1
  20. package/dist/adapters/llm/OpenAIProvider.js +3 -29
  21. package/dist/adapters/llm/OpenAIProvider.js.map +1 -1
  22. package/dist/adapters/memory/agentcore.js +305 -0
  23. package/dist/adapters/memory/agentcore.js.map +1 -0
  24. package/dist/adapters/memory/redis.js +287 -0
  25. package/dist/adapters/memory/redis.js.map +1 -0
  26. package/dist/core/Agent.js +16 -0
  27. package/dist/core/Agent.js.map +1 -1
  28. package/dist/esm/adapters/llm/AnthropicProvider.js +0 -31
  29. package/dist/esm/adapters/llm/AnthropicProvider.js.map +1 -1
  30. package/dist/esm/adapters/llm/BedrockProvider.js +2 -28
  31. package/dist/esm/adapters/llm/BedrockProvider.js.map +1 -1
  32. package/dist/esm/adapters/llm/BrowserAnthropicProvider.js +1 -31
  33. package/dist/esm/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
  34. package/dist/esm/adapters/llm/BrowserOpenAIProvider.js +1 -11
  35. package/dist/esm/adapters/llm/BrowserOpenAIProvider.js.map +1 -1
  36. package/dist/esm/adapters/llm/MockProvider.js +35 -1
  37. package/dist/esm/adapters/llm/MockProvider.js.map +1 -1
  38. package/dist/esm/adapters/llm/OpenAIProvider.js +3 -29
  39. package/dist/esm/adapters/llm/OpenAIProvider.js.map +1 -1
  40. package/dist/esm/adapters/memory/agentcore.js +301 -0
  41. package/dist/esm/adapters/memory/agentcore.js.map +1 -0
  42. package/dist/esm/adapters/memory/redis.js +283 -0
  43. package/dist/esm/adapters/memory/redis.js.map +1 -0
  44. package/dist/esm/core/Agent.js +16 -0
  45. package/dist/esm/core/Agent.js.map +1 -1
  46. package/dist/esm/index.js +3 -3
  47. package/dist/esm/index.js.map +1 -1
  48. package/dist/esm/lib/injection-engine/SkillRegistry.js +83 -0
  49. package/dist/esm/lib/injection-engine/SkillRegistry.js.map +1 -0
  50. package/dist/esm/lib/injection-engine/factories/defineSkill.js +34 -0
  51. package/dist/esm/lib/injection-engine/factories/defineSkill.js.map +1 -1
  52. package/dist/esm/lib/injection-engine/index.js +2 -55
  53. package/dist/esm/lib/injection-engine/index.js.map +1 -1
  54. package/dist/esm/lib/injection-engine/types.js.map +1 -1
  55. package/dist/esm/lib/mcp/index.js +1 -0
  56. package/dist/esm/lib/mcp/index.js.map +1 -1
  57. package/dist/esm/lib/mcp/mcpClient.js +29 -24
  58. package/dist/esm/lib/mcp/mcpClient.js.map +1 -1
  59. package/dist/esm/lib/mcp/mockMcpClient.js +97 -0
  60. package/dist/esm/lib/mcp/mockMcpClient.js.map +1 -0
  61. package/dist/esm/lib/rag/defineRAG.js +0 -18
  62. package/dist/esm/lib/rag/defineRAG.js.map +1 -1
  63. package/dist/esm/lib/rag/indexDocuments.js +39 -4
  64. package/dist/esm/lib/rag/indexDocuments.js.map +1 -1
  65. package/dist/esm/memory/causal/loadSnapshot.js +1 -1
  66. package/dist/esm/memory/define.js +0 -14
  67. package/dist/esm/memory/define.js.map +1 -1
  68. package/dist/esm/memory/define.types.js +0 -10
  69. package/dist/esm/memory/define.types.js.map +1 -1
  70. package/dist/esm/resilience/index.js +0 -44
  71. package/dist/esm/resilience/index.js.map +1 -1
  72. package/dist/esm/stream.js +0 -29
  73. package/dist/esm/stream.js.map +1 -1
  74. package/dist/index.js +4 -1
  75. package/dist/index.js.map +1 -1
  76. package/dist/lib/injection-engine/SkillRegistry.js +87 -0
  77. package/dist/lib/injection-engine/SkillRegistry.js.map +1 -0
  78. package/dist/lib/injection-engine/factories/defineSkill.js +36 -1
  79. package/dist/lib/injection-engine/factories/defineSkill.js.map +1 -1
  80. package/dist/lib/injection-engine/index.js +4 -55
  81. package/dist/lib/injection-engine/index.js.map +1 -1
  82. package/dist/lib/injection-engine/types.js.map +1 -1
  83. package/dist/lib/mcp/index.js +3 -1
  84. package/dist/lib/mcp/index.js.map +1 -1
  85. package/dist/lib/mcp/mcpClient.js +29 -24
  86. package/dist/lib/mcp/mcpClient.js.map +1 -1
  87. package/dist/lib/mcp/mockMcpClient.js +101 -0
  88. package/dist/lib/mcp/mockMcpClient.js.map +1 -0
  89. package/dist/lib/rag/defineRAG.js +0 -18
  90. package/dist/lib/rag/defineRAG.js.map +1 -1
  91. package/dist/lib/rag/indexDocuments.js +39 -4
  92. package/dist/lib/rag/indexDocuments.js.map +1 -1
  93. package/dist/memory/causal/loadSnapshot.js +1 -1
  94. package/dist/memory/define.js +0 -14
  95. package/dist/memory/define.js.map +1 -1
  96. package/dist/memory/define.types.js +0 -10
  97. package/dist/memory/define.types.js.map +1 -1
  98. package/dist/resilience/index.js +0 -44
  99. package/dist/resilience/index.js.map +1 -1
  100. package/dist/stream.js +0 -29
  101. package/dist/stream.js.map +1 -1
  102. package/dist/types/adapters/llm/AnthropicProvider.d.ts +0 -31
  103. package/dist/types/adapters/llm/AnthropicProvider.d.ts.map +1 -1
  104. package/dist/types/adapters/llm/BedrockProvider.d.ts +2 -28
  105. package/dist/types/adapters/llm/BedrockProvider.d.ts.map +1 -1
  106. package/dist/types/adapters/llm/BrowserAnthropicProvider.d.ts +1 -31
  107. package/dist/types/adapters/llm/BrowserAnthropicProvider.d.ts.map +1 -1
  108. package/dist/types/adapters/llm/BrowserOpenAIProvider.d.ts +1 -11
  109. package/dist/types/adapters/llm/BrowserOpenAIProvider.d.ts.map +1 -1
  110. package/dist/types/adapters/llm/MockProvider.d.ts +45 -0
  111. package/dist/types/adapters/llm/MockProvider.d.ts.map +1 -1
  112. package/dist/types/adapters/llm/OpenAIProvider.d.ts +3 -29
  113. package/dist/types/adapters/llm/OpenAIProvider.d.ts.map +1 -1
  114. package/dist/types/adapters/memory/agentcore.d.ts +157 -0
  115. package/dist/types/adapters/memory/agentcore.d.ts.map +1 -0
  116. package/dist/types/adapters/memory/redis.d.ts +126 -0
  117. package/dist/types/adapters/memory/redis.d.ts.map +1 -0
  118. package/dist/types/core/Agent.d.ts +14 -0
  119. package/dist/types/core/Agent.d.ts.map +1 -1
  120. package/dist/types/index.d.ts +3 -3
  121. package/dist/types/index.d.ts.map +1 -1
  122. package/dist/types/lib/injection-engine/SkillRegistry.d.ts +50 -0
  123. package/dist/types/lib/injection-engine/SkillRegistry.d.ts.map +1 -0
  124. package/dist/types/lib/injection-engine/factories/defineSkill.d.ts +72 -0
  125. package/dist/types/lib/injection-engine/factories/defineSkill.d.ts.map +1 -1
  126. package/dist/types/lib/injection-engine/index.d.ts +2 -55
  127. package/dist/types/lib/injection-engine/index.d.ts.map +1 -1
  128. package/dist/types/lib/injection-engine/types.d.ts +10 -0
  129. package/dist/types/lib/injection-engine/types.d.ts.map +1 -1
  130. package/dist/types/lib/mcp/index.d.ts +1 -0
  131. package/dist/types/lib/mcp/index.d.ts.map +1 -1
  132. package/dist/types/lib/mcp/mcpClient.d.ts +0 -17
  133. package/dist/types/lib/mcp/mcpClient.d.ts.map +1 -1
  134. package/dist/types/lib/mcp/mockMcpClient.d.ts +66 -0
  135. package/dist/types/lib/mcp/mockMcpClient.d.ts.map +1 -0
  136. package/dist/types/lib/mcp/types.d.ts +2 -0
  137. package/dist/types/lib/mcp/types.d.ts.map +1 -1
  138. package/dist/types/lib/rag/defineRAG.d.ts +18 -21
  139. package/dist/types/lib/rag/defineRAG.d.ts.map +1 -1
  140. package/dist/types/lib/rag/indexDocuments.d.ts +30 -1
  141. package/dist/types/lib/rag/indexDocuments.d.ts.map +1 -1
  142. package/dist/types/memory/causal/loadSnapshot.d.ts +1 -1
  143. package/dist/types/memory/define.d.ts +0 -14
  144. package/dist/types/memory/define.d.ts.map +1 -1
  145. package/dist/types/memory/define.types.d.ts +2 -12
  146. package/dist/types/memory/define.types.d.ts.map +1 -1
  147. package/dist/types/resilience/index.d.ts +0 -44
  148. package/dist/types/resilience/index.d.ts.map +1 -1
  149. package/dist/types/stream.d.ts +0 -29
  150. package/dist/types/stream.d.ts.map +1 -1
  151. package/package.json +39 -1
package/AGENTS.md CHANGED
@@ -32,6 +32,58 @@ The flavors are how you *mark intent* — but they all reduce to one `Injection`
32
32
  | **Instruction** | Predicate (`activeWhen` / `on-tool-return`) | system-prompt or messages |
33
33
  | **Fact** | Always-on (data) | system-prompt or messages |
34
34
 
35
+ ## Mock-first development (RECOMMENDED workflow)
36
+
37
+ Build the entire app — agent, context engineering, tools, memory, RAG, MCP — against in-memory mocks first. Validate logic and patterns end-to-end with $0 API cost. Swap real infrastructure in, one boundary at a time, only after the flow is right.
38
+
39
+ ```typescript
40
+ import { Agent, mock, InMemoryStore, mockEmbedder, defineTool } from 'agentfootprint';
41
+
42
+ // Mock LLM provider — no API key, deterministic reply.
43
+ const provider = mock({ reply: 'Refunds take 3 business days.' });
44
+
45
+ // Inline-mocked tool — no real backend yet.
46
+ const lookup = defineTool({
47
+ schema: { name: 'lookup', description: '...', inputSchema: {} },
48
+ execute: async () => 'mock data',
49
+ });
50
+
51
+ const agent = Agent.create({ provider, model: 'mock' }).tool(lookup).build();
52
+ await agent.run({ message: 'How long does a refund take?' });
53
+ ```
54
+
55
+ | Boundary | Mock for development | Production swap |
56
+ |---|---|---|
57
+ | LLM provider | `mock({ reply })` · `mock({ replies })` for scripted ReAct | `anthropic()` · `openai()` · `bedrock()` · `ollama()` |
58
+ | Embedder | `mockEmbedder()` | OpenAI / Cohere / Bedrock embedder factory |
59
+ | Memory store | `InMemoryStore` | `RedisStore` (`agentfootprint/memory-redis`) · `AgentCoreStore` (`agentfootprint/memory-agentcore`) · DynamoDB / Postgres / Pinecone (planned) |
60
+ | MCP server | `mockMcpClient({ tools })` — in-memory, no SDK | `mcpClient({ transport })` to a real server |
61
+ | Tool execute | inline `async () => '...'` closure | real implementation |
62
+
63
+ When generating starter code for users, **default to the mock surface** unless they explicitly say they have a key / endpoint / store ready. Show real-provider code as the "swap" step, not the first step.
64
+
65
+ **Subpath imports** for memory adapters keep the main barrel small + tree-shaking clean:
66
+
67
+ ```typescript
68
+ import { RedisStore } from 'agentfootprint/memory-redis';
69
+ import { AgentCoreStore } from 'agentfootprint/memory-agentcore';
70
+ ```
71
+
72
+ Both lazy-require their SDK (`ioredis` / `@aws-sdk/client-bedrock-agent-runtime`) and accept `_client` for test injection.
73
+
74
+ **Multi-turn mock for tool-using ReAct:**
75
+
76
+ ```typescript
77
+ const provider = mock({
78
+ replies: [
79
+ { toolCalls: [{ id: '1', name: 'lookup', args: { topic: 'refunds' } }] },
80
+ { content: 'Refunds take 3 business days.' },
81
+ ],
82
+ });
83
+ ```
84
+
85
+ Each `complete()` consumes one reply in order. Exhaustion throws loud — misnumbered scripts fail tests instead of silently looping.
86
+
35
87
  ## Public API
36
88
 
37
89
  ### MCP — `mcpClient` (connect to MCP servers, register their tools)
package/CLAUDE.md CHANGED
@@ -32,6 +32,58 @@ The flavors are how you *mark intent* — but they all reduce to one `Injection`
32
32
  | **Instruction** | Predicate (`activeWhen` / `on-tool-return`) | system-prompt or messages |
33
33
  | **Fact** | Always-on (data) | system-prompt or messages |
34
34
 
35
+ ## Mock-first development (RECOMMENDED workflow)
36
+
37
+ Build the entire app — agent, context engineering, tools, memory, RAG, MCP — against in-memory mocks first. Validate logic and patterns end-to-end with $0 API cost. Swap real infrastructure in, one boundary at a time, only after the flow is right.
38
+
39
+ ```typescript
40
+ import { Agent, mock, InMemoryStore, mockEmbedder, defineTool } from 'agentfootprint';
41
+
42
+ // Mock LLM provider — no API key, deterministic reply.
43
+ const provider = mock({ reply: 'Refunds take 3 business days.' });
44
+
45
+ // Inline-mocked tool — no real backend yet.
46
+ const lookup = defineTool({
47
+ schema: { name: 'lookup', description: '...', inputSchema: {} },
48
+ execute: async () => 'mock data',
49
+ });
50
+
51
+ const agent = Agent.create({ provider, model: 'mock' }).tool(lookup).build();
52
+ await agent.run({ message: 'How long does a refund take?' });
53
+ ```
54
+
55
+ | Boundary | Mock for development | Production swap |
56
+ |---|---|---|
57
+ | LLM provider | `mock({ reply })` · `mock({ replies })` for scripted ReAct | `anthropic()` · `openai()` · `bedrock()` · `ollama()` |
58
+ | Embedder | `mockEmbedder()` | OpenAI / Cohere / Bedrock embedder factory |
59
+ | Memory store | `InMemoryStore` | `RedisStore` (`agentfootprint/memory-redis`) · `AgentCoreStore` (`agentfootprint/memory-agentcore`) · DynamoDB / Postgres / Pinecone (planned) |
60
+ | MCP server | `mockMcpClient({ tools })` — in-memory, no SDK | `mcpClient({ transport })` to a real server |
61
+ | Tool execute | inline `async () => '...'` closure | real implementation |
62
+
63
+ When generating starter code for users, **default to the mock surface** unless they explicitly say they have a key / endpoint / store ready. Show real-provider code as the "swap" step, not the first step.
64
+
65
+ **Subpath imports** for memory adapters keep the main barrel small + tree-shaking clean:
66
+
67
+ ```typescript
68
+ import { RedisStore } from 'agentfootprint/memory-redis';
69
+ import { AgentCoreStore } from 'agentfootprint/memory-agentcore';
70
+ ```
71
+
72
+ Both lazy-require their SDK (`ioredis` / `@aws-sdk/client-bedrock-agent-runtime`) and accept `_client` for test injection.
73
+
74
+ **Multi-turn mock for tool-using ReAct:**
75
+
76
+ ```typescript
77
+ const provider = mock({
78
+ replies: [
79
+ { toolCalls: [{ id: '1', name: 'lookup', args: { topic: 'refunds' } }] },
80
+ { content: 'Refunds take 3 business days.' },
81
+ ],
82
+ });
83
+ ```
84
+
85
+ Each `complete()` consumes one reply in order. Exhaustion throws loud — misnumbered scripts fail tests instead of silently looping.
86
+
35
87
  ## Public API
36
88
 
37
89
  ### MCP — `mcpClient` (connect to MCP servers, register their tools)