agentfootprint 2.10.2 → 2.11.1

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 (50) hide show
  1. package/README.md +2 -1
  2. package/dist/core/Agent.js +10 -105
  3. package/dist/core/Agent.js.map +1 -1
  4. package/dist/core/agent/types.js +12 -0
  5. package/dist/core/agent/types.js.map +1 -0
  6. package/dist/core/agent/validators.js +131 -0
  7. package/dist/core/agent/validators.js.map +1 -0
  8. package/dist/esm/core/Agent.js +5 -100
  9. package/dist/esm/core/Agent.js.map +1 -1
  10. package/dist/esm/core/agent/types.js +11 -0
  11. package/dist/esm/core/agent/types.js.map +1 -0
  12. package/dist/esm/core/agent/validators.js +124 -0
  13. package/dist/esm/core/agent/validators.js.map +1 -0
  14. package/dist/esm/reliability/CircuitBreaker.js +156 -0
  15. package/dist/esm/reliability/CircuitBreaker.js.map +1 -0
  16. package/dist/esm/reliability/buildReliabilityGateChart.js +359 -0
  17. package/dist/esm/reliability/buildReliabilityGateChart.js.map +1 -0
  18. package/dist/esm/reliability/classifyError.js +56 -0
  19. package/dist/esm/reliability/classifyError.js.map +1 -0
  20. package/dist/esm/reliability/index.js +36 -0
  21. package/dist/esm/reliability/index.js.map +1 -0
  22. package/dist/esm/reliability/types.js +44 -0
  23. package/dist/esm/reliability/types.js.map +1 -0
  24. package/dist/reliability/CircuitBreaker.js +165 -0
  25. package/dist/reliability/CircuitBreaker.js.map +1 -0
  26. package/dist/reliability/buildReliabilityGateChart.js +363 -0
  27. package/dist/reliability/buildReliabilityGateChart.js.map +1 -0
  28. package/dist/reliability/classifyError.js +60 -0
  29. package/dist/reliability/classifyError.js.map +1 -0
  30. package/dist/reliability/index.js +42 -0
  31. package/dist/reliability/index.js.map +1 -0
  32. package/dist/reliability/types.js +48 -0
  33. package/dist/reliability/types.js.map +1 -0
  34. package/dist/types/core/Agent.d.ts +2 -67
  35. package/dist/types/core/Agent.d.ts.map +1 -1
  36. package/dist/types/core/agent/types.d.ts +154 -0
  37. package/dist/types/core/agent/types.d.ts.map +1 -0
  38. package/dist/types/core/agent/validators.d.ts +48 -0
  39. package/dist/types/core/agent/validators.d.ts.map +1 -0
  40. package/dist/types/reliability/CircuitBreaker.d.ts +76 -0
  41. package/dist/types/reliability/CircuitBreaker.d.ts.map +1 -0
  42. package/dist/types/reliability/buildReliabilityGateChart.d.ts +54 -0
  43. package/dist/types/reliability/buildReliabilityGateChart.d.ts.map +1 -0
  44. package/dist/types/reliability/classifyError.d.ts +29 -0
  45. package/dist/types/reliability/classifyError.d.ts.map +1 -0
  46. package/dist/types/reliability/index.d.ts +34 -0
  47. package/dist/types/reliability/index.d.ts.map +1 -0
  48. package/dist/types/reliability/types.d.ts +256 -0
  49. package/dist/types/reliability/types.d.ts.map +1 -0
  50. package/package.json +1 -1
@@ -0,0 +1,256 @@
1
+ /**
2
+ * Reliability — public types for the v2.11.1 rules-based reliability subsystem.
3
+ *
4
+ * Mental model: reliability is a SUBFLOW PATTERN expressed as `decide()`
5
+ * rules at PRE-call and POST-call boundaries around the LLM invocation.
6
+ * Each rule is `{when, then, kind, label?}`. The gate stage evaluates
7
+ * rules in order; the first match drives behaviour. Three channels carry
8
+ * the outcome:
9
+ *
10
+ * • SCOPE STATE — runtime data (`failKind`, `failPayload`) read by
11
+ * `Agent.run()` at the API boundary to construct `ReliabilityFailFastError`.
12
+ * • $emit — passive observability for external consumers
13
+ * (CloudWatch, X-Ray, OTel). NOT read by runtime logic.
14
+ * • $break(reason)— control flow + human-readable narrative reason.
15
+ *
16
+ * See `buildReliabilityGate.ts` for the gate stage that consumes these
17
+ * types and `Agent.create().reliability()` for the consumer-facing API.
18
+ */
19
+ import type { LLMProvider, LLMRequest, LLMResponse } from '../adapters/types.js';
20
+ /**
21
+ * The set of verbs a `ReliabilityRule.then` can specify.
22
+ *
23
+ * • `continue` — pre-check only; no issues, proceed to the LLM call.
24
+ * • `ok` — post-decide only; call succeeded, exit the gate
25
+ * loop and let the agent's next stage run.
26
+ * • `retry` — post-decide only; bump attempt counter and re-run
27
+ * the same provider via the gate's `loopTo`.
28
+ * • `retry-other` — post-decide only; advance `providerIdx` to the
29
+ * next provider in the failover list, then loop.
30
+ * • `fallback` — post-decide only; invoke the configured
31
+ * `fallback(req, lastError)` to repair the response;
32
+ * exit on success.
33
+ * • `fail-fast` — both phases; write `failKind`/`failPayload` to
34
+ * scope, $emit observability event, $break(reason).
35
+ * `Agent.run()` translates the propagated break into
36
+ * a typed `ReliabilityFailFastError` at the API
37
+ * boundary.
38
+ */
39
+ export type ReliabilityDecision = 'continue' | 'ok' | 'retry' | 'retry-other' | 'fallback' | 'fail-fast';
40
+ /**
41
+ * A single reliability rule. Evaluated by `decide()` from the gate
42
+ * stage; first-match-wins. Function-form `when` predicates are the
43
+ * common case; the filter-DSL form supported by `decide()` also works
44
+ * if your rule reads scope keys with simple comparisons.
45
+ */
46
+ export interface ReliabilityRule {
47
+ /**
48
+ * Predicate over the gate's scope. Return `true` to fire this rule.
49
+ * Pure function — no side effects, no async. The gate evaluates
50
+ * predicates in sequence and stops on the first match.
51
+ */
52
+ readonly when: (scope: ReliabilityScope) => boolean;
53
+ /** What to do when this rule matches. See `ReliabilityDecision`. */
54
+ readonly then: ReliabilityDecision;
55
+ /**
56
+ * Machine-readable label used to construct `ReliabilityFailFastError.kind`
57
+ * when `then === 'fail-fast'`. Also surfaces in narrative + emit payload.
58
+ * Must be a stable identifier — consumers branch on it programmatically.
59
+ * Example: `'cost-cap-exceeded'`, `'circuit-open-no-fallback'`,
60
+ * `'transient-5xx-retry'`.
61
+ */
62
+ readonly kind: string;
63
+ /**
64
+ * Human-readable narrative reason. Falls back to `kind` if omitted.
65
+ * Surfaces in `$break(reason)` and the auto-narrative.
66
+ */
67
+ readonly label?: string;
68
+ }
69
+ /**
70
+ * One entry in the optional provider failover list. The gate's
71
+ * `'retry-other'` decision advances through this array via `providerIdx`.
72
+ * If omitted, the gate operates against the agent's single configured
73
+ * provider with no failover.
74
+ */
75
+ export interface ReliabilityProvider {
76
+ /** Display name — also the key used in `breakerStates` and
77
+ * `attemptsPerProvider` maps. Convention: lowercase vendor name. */
78
+ readonly name: string;
79
+ /** The actual provider instance to call. */
80
+ readonly provider: LLMProvider;
81
+ /** The model identifier passed to `provider.complete({ model, ... })`. */
82
+ readonly model: string;
83
+ }
84
+ /**
85
+ * Per-provider circuit breaker tuning. State is per-instance (per pod);
86
+ * see CHANGELOG note in v2.11.1 about distributed state limitations.
87
+ */
88
+ export interface CircuitBreakerConfig {
89
+ /** Consecutive failures before the breaker OPENS. Default 5. */
90
+ readonly failureThreshold?: number;
91
+ /** How long the breaker stays OPEN before probing. Default 30_000 ms. */
92
+ readonly cooldownMs?: number;
93
+ /** Probe successes required in HALF-OPEN to fully CLOSE. Default 2. */
94
+ readonly halfOpenSuccessThreshold?: number;
95
+ /**
96
+ * Predicate — does this error count toward the failure threshold?
97
+ * Default: everything except AbortError counts. Override to ignore
98
+ * 4xx so a malformed request doesn't trip the breaker for everyone.
99
+ */
100
+ readonly shouldCount?: (error: unknown) => boolean;
101
+ }
102
+ /**
103
+ * Consumer-supplied fallback that runs when a `'fallback'` rule fires.
104
+ * Receives the original request and the most recent error; returns a
105
+ * synthesized response that the gate writes back to scope. Throwing
106
+ * from the fallback re-enters the gate's post-decide rule set with
107
+ * the new error captured — typically the next rule routes to
108
+ * `'fail-fast'` (or a canned response if you've layered that pattern).
109
+ */
110
+ export type ReliabilityFallbackFn = (request: LLMRequest, lastError: Error | undefined) => Promise<LLMResponse>;
111
+ /**
112
+ * The full reliability configuration passed to
113
+ * `Agent.create({...}).reliability(config)`. All fields optional — the
114
+ * gate stage is mounted only if at least one of `preCheck`/`postDecide`
115
+ * has rules OR `circuitBreaker` is configured. Otherwise the agent
116
+ * chart collapses to a plain `CallLLM` stage with no reliability
117
+ * overhead.
118
+ */
119
+ export interface ReliabilityConfig {
120
+ /** Rules evaluated BEFORE the LLM call. Common uses: cost-cap pre-check,
121
+ * cumulative-budget gate, prompt-size guard. The gate routes on
122
+ * `'continue'` (proceed to call) or `'fail-fast'` (skip call, $break). */
123
+ readonly preCheck?: readonly ReliabilityRule[];
124
+ /** Rules evaluated AFTER the LLM call returns or throws. The gate
125
+ * routes on `'ok'` (success exit), `'retry'` (loop), `'retry-other'`
126
+ * (advance provider, loop), `'fallback'` (invoke fallback fn, exit),
127
+ * or `'fail-fast'` ($break with reason). */
128
+ readonly postDecide?: readonly ReliabilityRule[];
129
+ /** Optional ordered failover list. The first entry is the primary;
130
+ * `'retry-other'` decisions walk through this array. If omitted,
131
+ * reliability runs with no failover. */
132
+ readonly providers?: readonly ReliabilityProvider[];
133
+ /** Per-provider circuit-breaker config. Applied to every provider in
134
+ * `providers[]` (or to the agent's single provider if no failover
135
+ * list). Omit to disable circuit-breaking entirely. */
136
+ readonly circuitBreaker?: CircuitBreakerConfig;
137
+ /** Optional fallback function invoked on `'fallback'` decisions.
138
+ * Typical use: reformat a malformed schema response, repair JSON,
139
+ * or synthesize a safe default. Throwing re-enters the rule set. */
140
+ readonly fallback?: ReliabilityFallbackFn;
141
+ }
142
+ /**
143
+ * The scope that reliability rules read. Populated by the gate stage
144
+ * each iteration. Consumer rules `(s: ReliabilityScope) => boolean`
145
+ * close over this shape; do NOT cast to `any` — the typed scope is the
146
+ * stable contract between gate state and rule predicates.
147
+ *
148
+ * Mutable scalars (attempt, providerIdx, error, errorKind, latencyMs,
149
+ * response) are OVERWRITTEN each iteration. Loop history is preserved
150
+ * by footprintjs's commitLog (one CommitBundle per stage execution),
151
+ * so time-travel scrubbing shows each attempt's snapshot independently.
152
+ */
153
+ export interface ReliabilityScope {
154
+ /** The LLM request being processed by this gate execution. */
155
+ readonly request: LLMRequest;
156
+ /** Number of providers in the failover list — derived from the
157
+ * closure-held config; mirrored into scope so rules can compare
158
+ * against `providerIdx`. (Provider OBJECTS live in the gate chart's
159
+ * closure, not in scope, because functions can't structuredClone
160
+ * across subflow boundaries.) */
161
+ readonly providersCount: number;
162
+ /** True if a `fallback` function is configured. Lets rules check
163
+ * `s.hasFallback` to decide between `fallback` and `fail-fast`. */
164
+ readonly hasFallback: boolean;
165
+ /** 1-indexed attempt counter. Incremented after each LLM call,
166
+ * whether it succeeded or threw. Rules typically check
167
+ * `s.attempt < maxAttempts` before routing to `'retry'`. */
168
+ attempt: number;
169
+ /** Index into the gate's providers list (held in closure) for the
170
+ * currently-selected provider. */
171
+ providerIdx: number;
172
+ /** Convenience: `providers[providerIdx].name`. Updated alongside
173
+ * `providerIdx` on `'retry-other'`. */
174
+ currentProvider: string;
175
+ /** True if `providerIdx < providersCount - 1`. Lets rules check
176
+ * `s.canSwitchProvider` before routing to `'retry-other'`. */
177
+ canSwitchProvider: boolean;
178
+ /** The LLM response from the most recent successful call.
179
+ * `undefined` after a throw or before the first call completes. */
180
+ response?: LLMResponse;
181
+ /** The error from the most recent failed call. `undefined` after
182
+ * a successful call. */
183
+ error?: Error;
184
+ /** Coarse classification of `error` for rule matching. See
185
+ * `classifyError.ts` for the taxonomy. `'ok'` after success. */
186
+ errorKind: 'ok' | '5xx-transient' | 'rate-limit' | 'circuit-open' | 'schema-fail' | 'unknown';
187
+ /** Wall-clock latency of the most recent call attempt, in ms. */
188
+ latencyMs: number;
189
+ /** Per-provider attempt counts within this gate execution.
190
+ * Rules use this for "max-attempts-per-provider" semantics. */
191
+ attemptsPerProvider: Record<string, number>;
192
+ /** Per-provider breaker state. Full state record (counters,
193
+ * openedAt, lastErrorMessage) — NOT just the state enum — so the
194
+ * state machine round-trips across gate invocations via
195
+ * inputMapper/outputMapper. Rules typically check
196
+ * `s.breakerStates[provider]?.state === 'open'`. */
197
+ breakerStates: Record<string, import('./CircuitBreaker.js').BreakerState>;
198
+ /** Cumulative cost across the whole agent run, set by the agent
199
+ * via `inputMapper`. `undefined` if cost tracking is off.
200
+ * Kept here for `preCheck` rules like
201
+ * `s.cumulativeCostUsd >= s.costCapUsd → fail-fast`. */
202
+ cumulativeCostUsd?: number;
203
+ /** Cumulative input/output tokens, mirrored from agent state. */
204
+ cumulativeInputTokens?: number;
205
+ cumulativeOutputTokens?: number;
206
+ /** The matched rule's `kind` when a `'fail-fast'` rule fired.
207
+ * `Agent.run()` reads this to construct `ReliabilityFailFastError.kind`. */
208
+ failKind?: string;
209
+ /** Structured payload describing the fail-fast event. Shape:
210
+ * `{ phase, attempt, providerUsed, errorKind, errorMessage }`. */
211
+ failPayload?: {
212
+ readonly phase: 'pre-check' | 'post-decide';
213
+ readonly attempt: number;
214
+ readonly providerUsed: string;
215
+ readonly errorKind: ReliabilityScope['errorKind'];
216
+ readonly errorMessage?: string;
217
+ };
218
+ }
219
+ /**
220
+ * Thrown by `Agent.run()` when a reliability rule routes to `'fail-fast'`
221
+ * and the gate $breaks with a reason. Carries:
222
+ *
223
+ * • `kind` — machine-readable identifier from the matched rule's
224
+ * `kind` field. Stable across versions; consumers
225
+ * branch on this.
226
+ * • `reason` — human-readable narrative string from `$break(reason)`.
227
+ * Format: `'reliability-{phase}: {label}'` (e.g.,
228
+ * `'reliability-post-decide: cost-cap-exceeded'`).
229
+ * • `cause` — the originating error from the LLM call, when one
230
+ * drove the fail-fast decision (e.g., the underlying
231
+ * HTTP error that tripped a circuit breaker).
232
+ * • `snapshot` — the full `executor.getSnapshot()` at fail-fast time
233
+ * for forensics. Consumers persist this for postmortem
234
+ * analysis (commitLog, narrative, scope state, etc.).
235
+ *
236
+ * Three-channel discipline: `kind`/`payload` came from scope state,
237
+ * `reason` came from $break, `snapshot` is the engine's own audit trail.
238
+ * Emit events flowed independently to any attached observability adapter
239
+ * (this error is the RUNTIME signal; emit is the OBSERVABILITY signal).
240
+ */
241
+ export declare class ReliabilityFailFastError extends Error {
242
+ readonly code: "ERR_RELIABILITY_FAIL_FAST";
243
+ readonly kind: string;
244
+ readonly reason: string;
245
+ readonly cause?: Error;
246
+ readonly snapshot?: unknown;
247
+ readonly payload?: ReliabilityScope['failPayload'];
248
+ constructor(opts: {
249
+ kind: string;
250
+ reason: string;
251
+ cause?: Error;
252
+ snapshot?: unknown;
253
+ payload?: ReliabilityScope['failPayload'];
254
+ });
255
+ }
256
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/reliability/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentfootprint",
3
- "version": "2.10.2",
3
+ "version": "2.11.1",
4
4
  "description": "The explainable agent framework — build AI agents you can explain, audit, and trust. Built on footprintjs.",
5
5
  "license": "MIT",
6
6
  "author": "Sanjay Krishna Anbalagan",