agentfootprint 7.28.0 → 8.1.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 +23 -18
- package/README.md +41 -12
- package/ai-instructions/claude-code/SKILL.md +3 -3
- package/ai-instructions/clinerules +2 -2
- package/ai-instructions/copilot-instructions.md +2 -2
- package/ai-instructions/cursor/agentfootprint.md +2 -2
- package/ai-instructions/kiro/agentfootprint.md +2 -2
- package/ai-instructions/windsurfrules +2 -2
- package/dist/adapters/llm/OllamaProvider.js +628 -0
- package/dist/adapters/llm/OllamaProvider.js.map +1 -0
- package/dist/adapters/llm/OpenAIProvider.js +12 -21
- package/dist/adapters/llm/OpenAIProvider.js.map +1 -1
- package/dist/adapters/llm/createProvider.js +35 -6
- package/dist/adapters/llm/createProvider.js.map +1 -1
- package/dist/core/agent/AgentBuilder.js +45 -11
- package/dist/core/agent/AgentBuilder.js.map +1 -1
- package/dist/core/agent/watch.js +39 -0
- package/dist/core/agent/watch.js.map +1 -0
- package/dist/core/agent/window/errors.js +4 -3
- package/dist/core/agent/window/errors.js.map +1 -1
- package/dist/core/agent/window/strategies/slidingWindow.js +2 -2
- package/dist/debug/finders.js +4 -0
- package/dist/debug/finders.js.map +1 -1
- package/dist/debug.js +4 -0
- package/dist/debug.js.map +1 -1
- package/dist/doors/context.js +34 -0
- package/dist/doors/context.js.map +1 -0
- package/dist/doors/hosting.js +32 -0
- package/dist/doors/hosting.js.map +1 -0
- package/dist/doors/memory.js +36 -0
- package/dist/doors/memory.js.map +1 -0
- package/dist/doors/observe.js +52 -0
- package/dist/doors/observe.js.map +1 -0
- package/dist/doors/providers.js +43 -0
- package/dist/doors/providers.js.map +1 -0
- package/dist/doors/resilience.js +61 -0
- package/dist/doors/resilience.js.map +1 -0
- package/dist/doors/security.js +39 -0
- package/dist/doors/security.js.map +1 -0
- package/dist/embedders/index.js.map +1 -1
- package/dist/esm/adapters/llm/OllamaProvider.d.ts +182 -0
- package/dist/esm/adapters/llm/OllamaProvider.js +622 -0
- package/dist/esm/adapters/llm/OllamaProvider.js.map +1 -0
- package/dist/esm/adapters/llm/OpenAIProvider.d.ts +0 -12
- package/dist/esm/adapters/llm/OpenAIProvider.js +11 -19
- package/dist/esm/adapters/llm/OpenAIProvider.js.map +1 -1
- package/dist/esm/adapters/llm/createProvider.d.ts +25 -8
- package/dist/esm/adapters/llm/createProvider.js +35 -6
- package/dist/esm/adapters/llm/createProvider.js.map +1 -1
- package/dist/esm/core/agent/AgentBuilder.d.ts +37 -7
- package/dist/esm/core/agent/AgentBuilder.js +45 -11
- package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
- package/dist/esm/core/agent/watch.d.ts +59 -0
- package/dist/esm/core/agent/watch.js +38 -0
- package/dist/esm/core/agent/watch.js.map +1 -0
- package/dist/esm/core/agent/window/errors.js +4 -3
- package/dist/esm/core/agent/window/errors.js.map +1 -1
- package/dist/esm/core/agent/window/strategies/slidingWindow.d.ts +2 -2
- package/dist/esm/core/agent/window/strategies/slidingWindow.js +2 -2
- package/dist/esm/debug/finders.d.ts +4 -0
- package/dist/esm/debug/finders.js +4 -0
- package/dist/esm/debug/finders.js.map +1 -1
- package/dist/esm/debug.d.ts +4 -0
- package/dist/esm/debug.js +4 -0
- package/dist/esm/debug.js.map +1 -1
- package/dist/esm/doors/context.d.ts +17 -0
- package/dist/esm/doors/context.js +18 -0
- package/dist/esm/doors/context.js.map +1 -0
- package/dist/esm/doors/hosting.d.ts +15 -0
- package/dist/esm/doors/hosting.js +16 -0
- package/dist/esm/doors/hosting.js.map +1 -0
- package/dist/esm/doors/memory.d.ts +19 -0
- package/dist/esm/doors/memory.js +20 -0
- package/dist/esm/doors/memory.js.map +1 -0
- package/dist/esm/doors/observe.d.ts +35 -0
- package/dist/esm/doors/observe.js +36 -0
- package/dist/esm/doors/observe.js.map +1 -0
- package/dist/esm/doors/providers.d.ts +26 -0
- package/dist/esm/doors/providers.js +27 -0
- package/dist/esm/doors/providers.js.map +1 -0
- package/dist/esm/doors/resilience.d.ts +37 -0
- package/dist/esm/doors/resilience.js +39 -0
- package/dist/esm/doors/resilience.js.map +1 -0
- package/dist/esm/doors/security.d.ts +22 -0
- package/dist/esm/doors/security.js +23 -0
- package/dist/esm/doors/security.js.map +1 -0
- package/dist/esm/embedders/index.d.ts +4 -0
- package/dist/esm/embedders/index.js.map +1 -1
- package/dist/esm/hosting-providers.d.ts +4 -0
- package/dist/esm/hosting-providers.js +4 -0
- package/dist/esm/hosting-providers.js.map +1 -1
- package/dist/esm/identity.d.ts +4 -0
- package/dist/esm/identity.js +4 -0
- package/dist/esm/identity.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/injection-engine.d.ts +4 -0
- package/dist/esm/injection-engine.js +4 -0
- package/dist/esm/injection-engine.js.map +1 -1
- package/dist/esm/llm-providers.d.ts +4 -0
- package/dist/esm/llm-providers.js +4 -0
- package/dist/esm/llm-providers.js.map +1 -1
- package/dist/esm/locales/index.d.ts +4 -0
- package/dist/esm/locales/index.js +4 -0
- package/dist/esm/locales/index.js.map +1 -1
- package/dist/esm/memory-providers.d.ts +4 -0
- package/dist/esm/memory-providers.js +4 -0
- package/dist/esm/memory-providers.js.map +1 -1
- package/dist/esm/observability/contextError/finders/index.d.ts +4 -0
- package/dist/esm/observability/contextError/finders/index.js.map +1 -1
- package/dist/esm/observability-providers.d.ts +4 -0
- package/dist/esm/observability-providers.js +4 -0
- package/dist/esm/observability-providers.js.map +1 -1
- package/dist/esm/providers.d.ts +13 -5
- package/dist/esm/providers.js +13 -5
- package/dist/esm/providers.js.map +1 -1
- package/dist/esm/reliability/index.d.ts +8 -0
- package/dist/esm/reliability/index.js +8 -0
- package/dist/esm/reliability/index.js.map +1 -1
- package/dist/esm/status.d.ts +4 -0
- package/dist/esm/status.js +4 -0
- package/dist/esm/status.js.map +1 -1
- package/dist/esm/strategies/index.d.ts +4 -0
- package/dist/esm/strategies/index.js +4 -0
- package/dist/esm/strategies/index.js.map +1 -1
- package/dist/esm/stream.d.ts +4 -0
- package/dist/esm/stream.js +4 -0
- package/dist/esm/stream.js.map +1 -1
- package/dist/esm/thinking/OllamaThinkingHandler.d.ts +60 -0
- package/dist/esm/thinking/OllamaThinkingHandler.js +107 -0
- package/dist/esm/thinking/OllamaThinkingHandler.js.map +1 -0
- package/dist/esm/thinking/index.d.ts +5 -0
- package/dist/esm/thinking/index.js +5 -0
- package/dist/esm/thinking/index.js.map +1 -1
- package/dist/esm/thinking/registry.js +2 -0
- package/dist/esm/thinking/registry.js.map +1 -1
- package/dist/esm/tool-providers/index.d.ts +4 -0
- package/dist/esm/tool-providers/index.js +4 -0
- package/dist/esm/tool-providers/index.js.map +1 -1
- package/dist/hosting-providers.js +4 -0
- package/dist/hosting-providers.js.map +1 -1
- package/dist/identity.js +4 -0
- package/dist/identity.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/injection-engine.js +4 -0
- package/dist/injection-engine.js.map +1 -1
- package/dist/llm-providers.js +4 -0
- package/dist/llm-providers.js.map +1 -1
- package/dist/locales/index.js +4 -0
- package/dist/locales/index.js.map +1 -1
- package/dist/memory-providers.js +4 -0
- package/dist/memory-providers.js.map +1 -1
- package/dist/observability/contextError/finders/index.js.map +1 -1
- package/dist/observability-providers.js +4 -0
- package/dist/observability-providers.js.map +1 -1
- package/dist/providers.js +16 -6
- package/dist/providers.js.map +1 -1
- package/dist/reliability/index.js +8 -0
- package/dist/reliability/index.js.map +1 -1
- package/dist/status.js +4 -0
- package/dist/status.js.map +1 -1
- package/dist/strategies/index.js +4 -0
- package/dist/strategies/index.js.map +1 -1
- package/dist/stream.js +4 -0
- package/dist/stream.js.map +1 -1
- package/dist/thinking/OllamaThinkingHandler.js +111 -0
- package/dist/thinking/OllamaThinkingHandler.js.map +1 -0
- package/dist/thinking/index.js +8 -1
- package/dist/thinking/index.js.map +1 -1
- package/dist/thinking/registry.js +2 -0
- package/dist/thinking/registry.js.map +1 -1
- package/dist/tool-providers/index.js +4 -0
- package/dist/tool-providers/index.js.map +1 -1
- package/dist/types/adapters/llm/OllamaProvider.d.ts +183 -0
- package/dist/types/adapters/llm/OllamaProvider.d.ts.map +1 -0
- package/dist/types/adapters/llm/OpenAIProvider.d.ts +0 -12
- package/dist/types/adapters/llm/OpenAIProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/createProvider.d.ts +25 -8
- package/dist/types/adapters/llm/createProvider.d.ts.map +1 -1
- package/dist/types/core/agent/AgentBuilder.d.ts +37 -7
- package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
- package/dist/types/core/agent/watch.d.ts +60 -0
- package/dist/types/core/agent/watch.d.ts.map +1 -0
- package/dist/types/core/agent/window/errors.d.ts.map +1 -1
- package/dist/types/core/agent/window/strategies/slidingWindow.d.ts +2 -2
- package/dist/types/debug/finders.d.ts +4 -0
- package/dist/types/debug/finders.d.ts.map +1 -1
- package/dist/types/debug.d.ts +4 -0
- package/dist/types/debug.d.ts.map +1 -1
- package/dist/types/doors/context.d.ts +18 -0
- package/dist/types/doors/context.d.ts.map +1 -0
- package/dist/types/doors/hosting.d.ts +16 -0
- package/dist/types/doors/hosting.d.ts.map +1 -0
- package/dist/types/doors/memory.d.ts +20 -0
- package/dist/types/doors/memory.d.ts.map +1 -0
- package/dist/types/doors/observe.d.ts +36 -0
- package/dist/types/doors/observe.d.ts.map +1 -0
- package/dist/types/doors/providers.d.ts +27 -0
- package/dist/types/doors/providers.d.ts.map +1 -0
- package/dist/types/doors/resilience.d.ts +38 -0
- package/dist/types/doors/resilience.d.ts.map +1 -0
- package/dist/types/doors/security.d.ts +23 -0
- package/dist/types/doors/security.d.ts.map +1 -0
- package/dist/types/embedders/index.d.ts +4 -0
- package/dist/types/embedders/index.d.ts.map +1 -1
- package/dist/types/hosting-providers.d.ts +4 -0
- package/dist/types/hosting-providers.d.ts.map +1 -1
- package/dist/types/identity.d.ts +4 -0
- package/dist/types/identity.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/injection-engine.d.ts +4 -0
- package/dist/types/injection-engine.d.ts.map +1 -1
- package/dist/types/llm-providers.d.ts +4 -0
- package/dist/types/llm-providers.d.ts.map +1 -1
- package/dist/types/locales/index.d.ts +4 -0
- package/dist/types/locales/index.d.ts.map +1 -1
- package/dist/types/memory-providers.d.ts +4 -0
- package/dist/types/memory-providers.d.ts.map +1 -1
- package/dist/types/observability/contextError/finders/index.d.ts +4 -0
- package/dist/types/observability/contextError/finders/index.d.ts.map +1 -1
- package/dist/types/observability-providers.d.ts +4 -0
- package/dist/types/observability-providers.d.ts.map +1 -1
- package/dist/types/providers.d.ts +13 -5
- package/dist/types/providers.d.ts.map +1 -1
- package/dist/types/reliability/index.d.ts +8 -0
- package/dist/types/reliability/index.d.ts.map +1 -1
- package/dist/types/status.d.ts +4 -0
- package/dist/types/status.d.ts.map +1 -1
- package/dist/types/strategies/index.d.ts +4 -0
- package/dist/types/strategies/index.d.ts.map +1 -1
- package/dist/types/stream.d.ts +4 -0
- package/dist/types/stream.d.ts.map +1 -1
- package/dist/types/thinking/OllamaThinkingHandler.d.ts +61 -0
- package/dist/types/thinking/OllamaThinkingHandler.d.ts.map +1 -0
- package/dist/types/thinking/index.d.ts +5 -0
- package/dist/types/thinking/index.d.ts.map +1 -1
- package/dist/types/thinking/registry.d.ts.map +1 -1
- package/dist/types/tool-providers/index.d.ts +4 -0
- package/dist/types/tool-providers/index.d.ts.map +1 -1
- package/package.json +184 -155
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* agentfootprint/observe — everything that watches.
|
|
4
|
+
*
|
|
5
|
+
* One door for the whole watching story, which used to be nine:
|
|
6
|
+
*
|
|
7
|
+
* • Recorders — the Tier 1/2/3 observers, `recordRun`, the
|
|
8
|
+
* offline `Trace`, the context ledger.
|
|
9
|
+
* • Diagnosis — influence scoring, trace toolpack, context-bisect,
|
|
10
|
+
* tool lint, and the pluggable context-error finders.
|
|
11
|
+
* • Vendor sinks — AgentCore / CloudWatch / X-Ray / OTel strategies,
|
|
12
|
+
* plus the tamper-evident audit export.
|
|
13
|
+
* • Strategy ports — the observability / cost / live-status / lens
|
|
14
|
+
* interfaces and their `attach*` helpers.
|
|
15
|
+
* • Delivery — `toSSE` and friends, for streaming a run to a
|
|
16
|
+
* browser.
|
|
17
|
+
* • Status + words — the chat-bubble state machine AND the message
|
|
18
|
+
* catalogs it renders with. The logic and the prose
|
|
19
|
+
* are one story, so they are one door.
|
|
20
|
+
*
|
|
21
|
+
* The typed event stream those observers consume is its own door,
|
|
22
|
+
* `agentfootprint/events` — it is the wire vocabulary, not a watching tool.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* import { recordRun, toolChoiceRecorder, selectStatus } from 'agentfootprint/observe';
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
30
|
+
if (k2 === undefined) k2 = k;
|
|
31
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
32
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
33
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
34
|
+
}
|
|
35
|
+
Object.defineProperty(o, k2, desc);
|
|
36
|
+
}) : (function(o, m, k, k2) {
|
|
37
|
+
if (k2 === undefined) k2 = k;
|
|
38
|
+
o[k2] = m[k];
|
|
39
|
+
}));
|
|
40
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
41
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
42
|
+
};
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
__exportStar(require("../observe.js"), exports);
|
|
45
|
+
__exportStar(require("../observability-providers.js"), exports);
|
|
46
|
+
__exportStar(require("../strategies/index.js"), exports);
|
|
47
|
+
__exportStar(require("../stream.js"), exports);
|
|
48
|
+
__exportStar(require("../status.js"), exports);
|
|
49
|
+
__exportStar(require("../debug.js"), exports);
|
|
50
|
+
__exportStar(require("../debug/finders.js"), exports);
|
|
51
|
+
__exportStar(require("../locales/index.js"), exports);
|
|
52
|
+
//# sourceMappingURL=observe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observe.js","sourceRoot":"","sources":["../../src/doors/observe.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;;;;;;;;;;;;;;;;AAEH,gDAA8B;AAC9B,gEAA8C;AAC9C,yDAAuC;AACvC,+CAA6B;AAC7B,+CAA6B;AAC7B,8CAA4B;AAC5B,sDAAoC;AACpC,sDAAoC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* agentfootprint/providers — everything you plug a backend into.
|
|
4
|
+
*
|
|
5
|
+
* One door for every "here is the thing that actually does the work":
|
|
6
|
+
*
|
|
7
|
+
* • LLM providers — `mock`, `anthropic`, `openai`, `bedrock`, the
|
|
8
|
+
* browser variants, `createProvider`, and the
|
|
9
|
+
* `LLMProvider` port you implement for your own.
|
|
10
|
+
* • Embedders — `openaiEmbedder`, `localEmbedder`, `staticEmbedder`.
|
|
11
|
+
* • Tool providers — `staticTools`, `gatedTools`, `skillScopedTools`,
|
|
12
|
+
* plus the MCP client/server bridge.
|
|
13
|
+
* • Thinking handlers — per-vendor parsing of extended-thinking blocks,
|
|
14
|
+
* which is a provider concern wearing another hat.
|
|
15
|
+
*
|
|
16
|
+
* Each vendor SDK is lazy-required, so importing this door loads no vendor
|
|
17
|
+
* code — only calling a factory does.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* import { anthropic, staticTools, openaiEmbedder } from 'agentfootprint/providers';
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
27
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
28
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
29
|
+
}
|
|
30
|
+
Object.defineProperty(o, k2, desc);
|
|
31
|
+
}) : (function(o, m, k, k2) {
|
|
32
|
+
if (k2 === undefined) k2 = k;
|
|
33
|
+
o[k2] = m[k];
|
|
34
|
+
}));
|
|
35
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
36
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
__exportStar(require("../llm-providers.js"), exports);
|
|
40
|
+
__exportStar(require("../embedders/index.js"), exports);
|
|
41
|
+
__exportStar(require("../tool-providers/index.js"), exports);
|
|
42
|
+
__exportStar(require("../thinking/index.js"), exports);
|
|
43
|
+
//# sourceMappingURL=providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/doors/providers.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;;;;;;;;;;;;;;AAEH,sDAAoC;AACpC,wDAAsC;AACtC,6DAA2C;AAC3C,uDAAqC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* agentfootprint/resilience — what happens when the call fails.
|
|
4
|
+
*
|
|
5
|
+
* Both halves of staying up, behind one name:
|
|
6
|
+
*
|
|
7
|
+
* • Provider decorators — `withRetry`, `withFallback`, `fallbackProvider`,
|
|
8
|
+
* `withCircuitBreaker`. Each preserves the `LLMProvider` interface, so
|
|
9
|
+
* they stack freely around any provider.
|
|
10
|
+
* • The rules engine — `.reliability({ postDecide: [...] })`'s typed rule
|
|
11
|
+
* shapes, the fail-fast error, the pure breaker state machine, and the
|
|
12
|
+
* schema-retry helpers.
|
|
13
|
+
*
|
|
14
|
+
* ## One name that exists twice, said out loud
|
|
15
|
+
*
|
|
16
|
+
* `CircuitOpenError` is TWO different classes: the decorator throws one
|
|
17
|
+
* (`src/resilience/withCircuitBreaker.ts`), the reliability gate throws
|
|
18
|
+
* another (`src/reliability/CircuitBreaker.ts`), and they differ in
|
|
19
|
+
* constructor and in `instanceof`. This door carries the DECORATOR's — the
|
|
20
|
+
* one a consumer catches, since it is the one that escapes a provider call.
|
|
21
|
+
*
|
|
22
|
+
* The gate's stays reachable at `agentfootprint/reliability` for all of 8.x.
|
|
23
|
+
* If you `instanceof`-check the error thrown by the reliability gate, keep
|
|
24
|
+
* importing it from there. Merging them would have changed the message text
|
|
25
|
+
* on one path, and this release changes packaging only.
|
|
26
|
+
*
|
|
27
|
+
* `CircuitState` also exists twice, but the two are byte-identical
|
|
28
|
+
* (`'closed' | 'open' | 'half-open'`), so the one re-exported here satisfies
|
|
29
|
+
* both and no consumer can tell the difference.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* import { withRetry, withFallback, type ReliabilityRule } from 'agentfootprint/resilience';
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
37
|
+
if (k2 === undefined) k2 = k;
|
|
38
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
39
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
40
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
41
|
+
}
|
|
42
|
+
Object.defineProperty(o, k2, desc);
|
|
43
|
+
}) : (function(o, m, k, k2) {
|
|
44
|
+
if (k2 === undefined) k2 = k;
|
|
45
|
+
o[k2] = m[k];
|
|
46
|
+
}));
|
|
47
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
48
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
49
|
+
};
|
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
exports.ValidationFailure = exports.ReliabilityFailFastError = exports.lastNValidationErrorsMatch = exports.initialBreakerState = exports.defaultStuckLoopRule = void 0;
|
|
52
|
+
// The decorators, whole. This is also where the door's `CircuitOpenError`
|
|
53
|
+
// and `CircuitState` come from — see the note above.
|
|
54
|
+
__exportStar(require("../resilience/index.js"), exports);
|
|
55
|
+
var index_js_1 = require("../reliability/index.js");
|
|
56
|
+
Object.defineProperty(exports, "defaultStuckLoopRule", { enumerable: true, get: function () { return index_js_1.defaultStuckLoopRule; } });
|
|
57
|
+
Object.defineProperty(exports, "initialBreakerState", { enumerable: true, get: function () { return index_js_1.initialBreakerState; } });
|
|
58
|
+
Object.defineProperty(exports, "lastNValidationErrorsMatch", { enumerable: true, get: function () { return index_js_1.lastNValidationErrorsMatch; } });
|
|
59
|
+
Object.defineProperty(exports, "ReliabilityFailFastError", { enumerable: true, get: function () { return index_js_1.ReliabilityFailFastError; } });
|
|
60
|
+
Object.defineProperty(exports, "ValidationFailure", { enumerable: true, get: function () { return index_js_1.ValidationFailure; } });
|
|
61
|
+
//# sourceMappingURL=resilience.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resilience.js","sourceRoot":"","sources":["../../src/doors/resilience.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;;;;;;;;;;;;;;;;;AAEH,0EAA0E;AAC1E,qDAAqD;AACrD,yDAAuC;AAgBvC,oDAMiC;AAL/B,gHAAA,oBAAoB,OAAA;AACpB,+GAAA,mBAAmB,OAAA;AACnB,sHAAA,0BAA0B,OAAA;AAC1B,oHAAA,wBAAwB,OAAA;AACxB,6GAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* agentfootprint/security — who may do what, and with whose credentials.
|
|
4
|
+
*
|
|
5
|
+
* Two halves of the same question:
|
|
6
|
+
*
|
|
7
|
+
* • Authorization — `PermissionPolicy`, `PolicyHaltError`, the
|
|
8
|
+
* `PermissionChecker` port, the remote `agentCorePolicy` engine, and
|
|
9
|
+
* thinking-block redaction.
|
|
10
|
+
* • Identity — the `CredentialProvider` port, the credential kinds
|
|
11
|
+
* (`bearer`, `apiKey`, `basic`, `headers`), `staticTokens`,
|
|
12
|
+
* `withCredentialRetry`, and `agentCoreIdentity`.
|
|
13
|
+
*
|
|
14
|
+
* A vended credential is a secret: use it locally inside a tool's `execute`
|
|
15
|
+
* and never write it to tracked scope.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* import { PermissionPolicy, agentCoreIdentity } from 'agentfootprint/security';
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
25
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
26
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
27
|
+
}
|
|
28
|
+
Object.defineProperty(o, k2, desc);
|
|
29
|
+
}) : (function(o, m, k, k2) {
|
|
30
|
+
if (k2 === undefined) k2 = k;
|
|
31
|
+
o[k2] = m[k];
|
|
32
|
+
}));
|
|
33
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
34
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
35
|
+
};
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
__exportStar(require("../security/index.js"), exports);
|
|
38
|
+
__exportStar(require("../identity.js"), exports);
|
|
39
|
+
//# sourceMappingURL=security.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/doors/security.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;;;;;;;;;;;;;;AAEH,uDAAqC;AACrC,iDAA+B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embedders/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embedders/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAoEA;;;;;;;;;GASG;AACH,MAAM,iBAAiB,GAAqC;IAC1D,wBAAwB,EAAE,IAAI;IAC9B,wBAAwB,EAAE,IAAI;IAC9B,wBAAwB,EAAE,IAAI;CAC/B,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,SAAgB,cAAc,CAAC,UAAiC,EAAE;IAChE,MAAM,MAAM,GACV,OAAO,CAAC,MAAM;QACd,CAAC,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjF,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,wBAAwB,CAAC;IACxD,yEAAyE;IACzE,wEAAwE;IACxE,qEAAqE;IACrE,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IACrC,MAAM,UAAU,GAAG,SAAS,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACzD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,kCAAkC,KAAK,8CAA8C;YACnF,wFAAwF;YACxF,yDAAyD,CAC5D,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,IAAI,2BAA2B,aAAa,CAAC;IAE3E,KAAK,UAAU,IAAI,CAAC,KAAwB,EAAE,MAAoB;QAChE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE;YAClF,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CACrF;YACD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,MAAM,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClF,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwC,CAAC;QACvE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO;QACL,UAAU;QACV,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;YAC1B,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;YAChC,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;QAClC,CAAC;KACF,CAAC;AACJ,CAAC;AA7CD,wCA6CC;AAgDD,SAAgB,aAAa,CAAC,UAAgC,EAAE;IAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,yBAAyB,CAAC;IACzD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;IACpC,IAAI,IAA0C,CAAC;IAE/C,MAAM,KAAK,GAAG,CAAC,CAAsB,EAA4B,EAAE;QACjE,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC1D,CAAC,CAAC,GAA+B,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;QACpE,CAAC;QACD,OAAO,CAAC,CAAC,QAAQ,CAAC,oBAAoB,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAA6B,CAAC;IACxF,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAA6B,EAAE;QAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;QACjC,IAAI,QAAQ;YAAE,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChD,4EAA4E;QAC5E,4EAA4E;QAC5E,yEAAyE;QACzE,+CAA+C;QAC/C,MAAM,IAAI,GAAG,2BAA2B,CAAC;QACzC,OAAO,CAAC,IAAI,KAAK,mBAAO,IAAI,wCAAE,IAAI,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,KAAK,CAAC,GAA0B,CAAC,CAAC,CAAC,CAAC;IAC3F,CAAC,CAAC;IAEF,OAAO;QACL,UAAU;QACV,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE;YAClB,MAAM,CAAC,GAAG,MAAM,OAAO,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE;YACxB,MAAM,CAAC,GAAG,MAAM,OAAO,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACtE,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC;QACtB,CAAC;KACF,CAAC;AACJ,CAAC;AArCD,sCAqCC;AA4CD,SAAgB,cAAc,CAAC,UAAiC,EAAE;IAChE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC;IAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,IAAI,yBAAyB,CAAC;IACzD,IAAI,OAA2C,CAAC;IAEhD,4EAA4E;IAC5E,yEAAyE;IACzE,4EAA4E;IAC5E,mDAAmD;IACnD,MAAM,IAAI,GAAG,CAAC,GAAY,EAAE,MAAc,EAAiB,EAAE;QAC3D,MAAM,CAAC,GAAG,GAAsD,CAAC;QACjE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAA4B,CAAC;QACvD,MAAM,EAAE,GACL,CAAC,CAAC,OAAO,CAA+B;YACxC,CAAC,CAAC,OAAO,CAA+B;YACxC,CAAC,CAAC,QAAQ,CAA+B;YACzC,CAAC,CAAC,QAAQ,CAA+B;YAC1C,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC,OAAyB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC/E,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CACb,iDAAiD,MAAM,oDAAoD,CAC5G,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,GAA2B,EAAE;QAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;QACjC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,kCAAkC,CAAC,CAAC,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,CAAC,OAAO,KAAK,mBAAO,IAAI,wCAAE,IAAI,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC,CAAC;IAEF,wEAAwE;IACxE,8EAA8E;IAC9E,MAAM,MAAM,GAAG,CAAC,GAAY,EAAc,EAAE;QAC1C,MAAM,IAAI,GAAG,GAAgC,CAAC;QAC9C,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YACnD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAyB,CAAC,CAAC,CAAC,CAAC,+BAA+B;QACjF,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAoC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC,CAAC;IAEF,OAAO;QACL,UAAU;QACV,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE;YAClB,MAAM,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE;YACxB,MAAM,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAC5B,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;KACF,CAAC;AACJ,CAAC;AA3DD,wCA2DC"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OllamaProvider — local models over Ollama's native `/api/chat`.
|
|
3
|
+
*
|
|
4
|
+
* Pattern: Adapter (GoF) + Ports-and-Adapters (Cockburn 2005).
|
|
5
|
+
* Role: Outer ring — translates `LLMRequest`/`LLMResponse` to/from
|
|
6
|
+
* Ollama's native chat wire. Knows nothing about agents,
|
|
7
|
+
* recorders, or compositions.
|
|
8
|
+
* Emits: N/A.
|
|
9
|
+
*
|
|
10
|
+
* ─── Why this exists, and why it talks the native wire ───────────────
|
|
11
|
+
*
|
|
12
|
+
* The adapter ladder is `mock()` → a local model → a paid API, and the
|
|
13
|
+
* strongest version of "the test run and the production run are the same
|
|
14
|
+
* code path" is one where the middle step costs nothing and needs no API
|
|
15
|
+
* key. Through 8.0.0 the middle step needed BOTH a competitor's SDK
|
|
16
|
+
* (`npm install openai`, because `ollama()` was a thin wrapper over
|
|
17
|
+
* `openai({ baseURL })`) and a tolerance for failures labelled `[openai]`.
|
|
18
|
+
* That is not a free rung.
|
|
19
|
+
*
|
|
20
|
+
* So this file owns the wire:
|
|
21
|
+
*
|
|
22
|
+
* • ZERO dependencies — one `fetch` POST and NDJSON. Nothing to install
|
|
23
|
+
* beyond Ollama itself. (Same choice, same reasons, as the two
|
|
24
|
+
* `Browser*Provider` adapters.)
|
|
25
|
+
* • HONEST REFUSALS — a typed {@link OllamaUnavailableError} that names
|
|
26
|
+
* the address it tried and the command to run. Owning the fetch and
|
|
27
|
+
* the status code is what makes that possible; through an SDK you get
|
|
28
|
+
* whatever the SDK decided to throw.
|
|
29
|
+
* • REAL TOKEN COUNTS — `/api/chat` returns `prompt_eval_count` /
|
|
30
|
+
* `eval_count` on every response, streaming or not, with no opt-in
|
|
31
|
+
* flag. Through the OpenAI-compatible endpoint a streamed local call
|
|
32
|
+
* reported ZERO tokens, which silently disarmed `.compaction()` and
|
|
33
|
+
* `costBudget` (see `CompactionUnmeasurableError`, whose message names
|
|
34
|
+
* this exact case).
|
|
35
|
+
* • STRUCTURED THINKING — `message.thinking` is a first-class field on
|
|
36
|
+
* this wire; the OpenAI-compatible layer renames it to a non-standard
|
|
37
|
+
* `reasoning` key that no OpenAI adapter reads. See
|
|
38
|
+
* `OllamaThinkingHandler`.
|
|
39
|
+
*
|
|
40
|
+
* Want the SDK path instead? It is still there and still supported:
|
|
41
|
+
* `openai({ baseURL: 'http://localhost:11434/v1', apiKey: 'ollama' })`.
|
|
42
|
+
*
|
|
43
|
+
* ─── Ceilings (stated, not worked around) ────────────────────────────
|
|
44
|
+
*
|
|
45
|
+
* • TOOL CALLING IS MODEL-DEPENDENT. Ollama forwards a `tools` array to
|
|
46
|
+
* any model; a model that was not trained for tools simply answers in
|
|
47
|
+
* prose and no tool call ever arrives. This adapter does not preflight
|
|
48
|
+
* `/api/show` capabilities to refuse first — a wrong refusal is worse
|
|
49
|
+
* than a weak answer, and the metadata is less reliable than the
|
|
50
|
+
* ceiling being written down. Pick a tool-capable model.
|
|
51
|
+
* • NO FORCED TOOL CHOICE. Ollama does not support `tool_choice` on
|
|
52
|
+
* either wire, so `carriesForcedToolChoice` is `false` and an agent
|
|
53
|
+
* using `.outputSchema(parser, { strategy: 'tool-forced' })` refuses at
|
|
54
|
+
* run start, naming this provider.
|
|
55
|
+
* • NO MULTI-MODAL. The wire carries `images`; `LLMMessage.content` is a
|
|
56
|
+
* string. Same ceiling as every other adapter here.
|
|
57
|
+
* • NO PROMPT CACHING — resolves to the NoOp cache strategy.
|
|
58
|
+
* • NO `providerRef`. The native wire returns no response id, and a
|
|
59
|
+
* fabricated one would point at nothing.
|
|
60
|
+
*/
|
|
61
|
+
import type { LLMCallHooks, LLMChunk, LLMProvider, LLMRequest, LLMResponse, WireRole } from '../types.js';
|
|
62
|
+
/** How hard a thinking model should think. Ollama's own vocabulary. */
|
|
63
|
+
export type ThinkLevel = 'low' | 'medium' | 'high' | 'max';
|
|
64
|
+
/**
|
|
65
|
+
* The two failures a local runtime actually has, told in words that
|
|
66
|
+
* contain the fix.
|
|
67
|
+
*
|
|
68
|
+
* Both are things the person at the keyboard can resolve in one command,
|
|
69
|
+
* which is exactly why they get a type instead of a wrapped
|
|
70
|
+
* `ECONNREFUSED` or a bare `404`. `reason` is the discriminator; the
|
|
71
|
+
* message already reads as instructions.
|
|
72
|
+
*/
|
|
73
|
+
export declare class OllamaUnavailableError extends Error {
|
|
74
|
+
readonly name = "OllamaUnavailableError";
|
|
75
|
+
/** Which of the two situations this is. */
|
|
76
|
+
readonly reason: 'daemon-unreachable' | 'model-not-pulled';
|
|
77
|
+
/** The address that was tried — the thing to check or change. */
|
|
78
|
+
readonly baseUrl: string;
|
|
79
|
+
/** The model asked for. Absent when the daemon never answered at all. */
|
|
80
|
+
readonly model?: string;
|
|
81
|
+
/** Models this machine DOES have, when the daemon could tell us. */
|
|
82
|
+
readonly availableModels?: readonly string[];
|
|
83
|
+
constructor(init: {
|
|
84
|
+
reason: 'daemon-unreachable' | 'model-not-pulled';
|
|
85
|
+
baseUrl: string;
|
|
86
|
+
model?: string;
|
|
87
|
+
availableModels?: readonly string[];
|
|
88
|
+
cause?: unknown;
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
export interface OllamaProviderOptions {
|
|
92
|
+
/**
|
|
93
|
+
* Where Ollama is listening. Defaults to `OLLAMA_HOST` when set,
|
|
94
|
+
* otherwise `http://localhost:11434`. A bare `host:port` gets `http://`.
|
|
95
|
+
*
|
|
96
|
+
* Point it at the ROOT, not at a path — this adapter talks to
|
|
97
|
+
* `/api/chat` and `/api/tags` itself. A URL ending in `/v1` (the
|
|
98
|
+
* OpenAI-compatible path) is accepted and trimmed, so a config written
|
|
99
|
+
* for the 8.0.0 factory keeps working.
|
|
100
|
+
*/
|
|
101
|
+
readonly baseUrl?: string;
|
|
102
|
+
/** Shipped-in-8.0.0 spelling of {@link baseUrl}. Still honored. */
|
|
103
|
+
readonly host?: string;
|
|
104
|
+
/** Shipped-in-8.0.0 spelling of {@link baseUrl}. Still honored. */
|
|
105
|
+
readonly baseURL?: string;
|
|
106
|
+
/**
|
|
107
|
+
* Model used when `LLMRequest.model` is the `'ollama'` shorthand.
|
|
108
|
+
* Prefer the positional form: `ollama('qwen3')`.
|
|
109
|
+
*/
|
|
110
|
+
readonly defaultModel?: string;
|
|
111
|
+
/** Default token cap when the request doesn't set one. Maps to `num_predict`. */
|
|
112
|
+
readonly defaultMaxTokens?: number;
|
|
113
|
+
/**
|
|
114
|
+
* Ask a thinking model to reason before answering. `true` turns it on;
|
|
115
|
+
* `'low' | 'medium' | 'high' | 'max'` sets how hard.
|
|
116
|
+
*
|
|
117
|
+
* Worth setting on reasoning models (deepseek-r1, qwen3, gpt-oss, …):
|
|
118
|
+
* with `think` on, Ollama lifts the reasoning OUT of the answer into
|
|
119
|
+
* `message.thinking`, where `ollamaThinkingHandler` normalizes it.
|
|
120
|
+
* With it off, the same model leaves `<think>…</think>` sitting in the
|
|
121
|
+
* answer text.
|
|
122
|
+
*
|
|
123
|
+
* A per-request `LLMRequest.thinking` (what `AgentBuilder.thinking()`
|
|
124
|
+
* sets) also turns it on; this option is the always-on default and the
|
|
125
|
+
* only way to name a level.
|
|
126
|
+
*/
|
|
127
|
+
readonly think?: boolean | ThinkLevel;
|
|
128
|
+
/** How long Ollama keeps the model in memory after a call, e.g. `'5m'`. */
|
|
129
|
+
readonly keepAlive?: string | number;
|
|
130
|
+
/**
|
|
131
|
+
* How long to wait for the daemon to ANSWER, in ms. Default 10000.
|
|
132
|
+
*
|
|
133
|
+
* This bounds the wait for response headers, NOT generation: a laptop
|
|
134
|
+
* model may take minutes to finish a long answer and that is fine. What
|
|
135
|
+
* it prevents is the failure this whole file exists to avoid — a run
|
|
136
|
+
* that hangs because nothing is listening.
|
|
137
|
+
*/
|
|
138
|
+
readonly timeoutMs?: number;
|
|
139
|
+
/** Accepted and ignored — Ollama needs no key. Kept so 8.0.0 configs still typecheck. */
|
|
140
|
+
readonly apiKey?: string;
|
|
141
|
+
/** @internal Custom fetch implementation for tests. */
|
|
142
|
+
readonly _fetch?: typeof fetch;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Build an `LLMProvider` backed by a local Ollama runtime.
|
|
146
|
+
*
|
|
147
|
+
* Free, offline, no API key. The rung between `mock()` and a paid API —
|
|
148
|
+
* and the agent code above it does not change between the three.
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* import { Agent } from 'agentfootprint';
|
|
152
|
+
* import { ollama } from 'agentfootprint/providers';
|
|
153
|
+
*
|
|
154
|
+
* const agent = Agent.create({
|
|
155
|
+
* provider: ollama('qwen3'),
|
|
156
|
+
* model: 'qwen3',
|
|
157
|
+
* }).build();
|
|
158
|
+
*
|
|
159
|
+
* @example // reasoning model, thinking lifted out of the answer
|
|
160
|
+
* ollama('deepseek-r1', { think: 'high' });
|
|
161
|
+
*
|
|
162
|
+
* @example // a runtime on another machine
|
|
163
|
+
* ollama('llama3.2', { baseUrl: 'http://192.168.1.20:11434' });
|
|
164
|
+
*/
|
|
165
|
+
export declare function ollama(model: string, options?: OllamaProviderOptions): LLMProvider;
|
|
166
|
+
/**
|
|
167
|
+
* Object form, as shipped in 8.0.0. Still supported — `host` / `baseURL` /
|
|
168
|
+
* `defaultModel` / `apiKey` all keep their meaning.
|
|
169
|
+
*/
|
|
170
|
+
export declare function ollama(options?: OllamaProviderOptions): LLMProvider;
|
|
171
|
+
/**
|
|
172
|
+
* Class form for consumers who prefer `new OllamaProvider(...)`.
|
|
173
|
+
*/
|
|
174
|
+
export declare class OllamaProvider implements LLMProvider {
|
|
175
|
+
readonly name = "ollama";
|
|
176
|
+
readonly carriesInMessages: readonly WireRole[];
|
|
177
|
+
readonly carriesForcedToolChoice = false;
|
|
178
|
+
private readonly inner;
|
|
179
|
+
constructor(model?: string | OllamaProviderOptions, options?: OllamaProviderOptions);
|
|
180
|
+
complete(req: LLMRequest, hooks?: LLMCallHooks): Promise<LLMResponse>;
|
|
181
|
+
stream(req: LLMRequest, hooks?: LLMCallHooks): AsyncIterable<LLMChunk>;
|
|
182
|
+
}
|