agentfootprint 2.7.2 → 2.8.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/dist/core/RunnerBase.js +6 -0
- package/dist/core/RunnerBase.js.map +1 -1
- package/dist/esm/core/RunnerBase.js +6 -0
- package/dist/esm/core/RunnerBase.js.map +1 -1
- package/dist/esm/strategies/attach.js +227 -0
- package/dist/esm/strategies/attach.js.map +1 -0
- package/dist/esm/strategies/compose.js +158 -0
- package/dist/esm/strategies/compose.js.map +1 -0
- package/dist/esm/strategies/defaults/chatBubbleLiveStatus.js +34 -0
- package/dist/esm/strategies/defaults/chatBubbleLiveStatus.js.map +1 -0
- package/dist/esm/strategies/defaults/consoleObservability.js +61 -0
- package/dist/esm/strategies/defaults/consoleObservability.js.map +1 -0
- package/dist/esm/strategies/defaults/inMemorySinkCost.js +48 -0
- package/dist/esm/strategies/defaults/inMemorySinkCost.js.map +1 -0
- package/dist/esm/strategies/defaults/index.js +31 -0
- package/dist/esm/strategies/defaults/index.js.map +1 -0
- package/dist/esm/strategies/defaults/noopLens.js +29 -0
- package/dist/esm/strategies/defaults/noopLens.js.map +1 -0
- package/dist/esm/strategies/index.js +23 -0
- package/dist/esm/strategies/index.js.map +1 -0
- package/dist/esm/strategies/registry.js +102 -0
- package/dist/esm/strategies/registry.js.map +1 -0
- package/dist/esm/strategies/types.js +36 -0
- package/dist/esm/strategies/types.js.map +1 -0
- package/dist/strategies/attach.js +256 -0
- package/dist/strategies/attach.js.map +1 -0
- package/dist/strategies/compose.js +165 -0
- package/dist/strategies/compose.js.map +1 -0
- package/dist/strategies/defaults/chatBubbleLiveStatus.js +38 -0
- package/dist/strategies/defaults/chatBubbleLiveStatus.js.map +1 -0
- package/dist/strategies/defaults/consoleObservability.js +65 -0
- package/dist/strategies/defaults/consoleObservability.js.map +1 -0
- package/dist/strategies/defaults/inMemorySinkCost.js +52 -0
- package/dist/strategies/defaults/inMemorySinkCost.js.map +1 -0
- package/dist/strategies/defaults/index.js +38 -0
- package/dist/strategies/defaults/index.js.map +1 -0
- package/dist/strategies/defaults/noopLens.js +33 -0
- package/dist/strategies/defaults/noopLens.js.map +1 -0
- package/dist/strategies/index.js +47 -0
- package/dist/strategies/index.js.map +1 -0
- package/dist/strategies/registry.js +118 -0
- package/dist/strategies/registry.js.map +1 -0
- package/dist/strategies/types.js +37 -0
- package/dist/strategies/types.js.map +1 -0
- package/dist/types/core/RunnerBase.d.ts.map +1 -1
- package/dist/types/core/runner.d.ts +29 -2
- package/dist/types/core/runner.d.ts.map +1 -1
- package/dist/types/strategies/attach.d.ts +48 -0
- package/dist/types/strategies/attach.d.ts.map +1 -0
- package/dist/types/strategies/compose.d.ts +49 -0
- package/dist/types/strategies/compose.d.ts.map +1 -0
- package/dist/types/strategies/defaults/chatBubbleLiveStatus.d.ts +37 -0
- package/dist/types/strategies/defaults/chatBubbleLiveStatus.d.ts.map +1 -0
- package/dist/types/strategies/defaults/consoleObservability.d.ts +43 -0
- package/dist/types/strategies/defaults/consoleObservability.d.ts.map +1 -0
- package/dist/types/strategies/defaults/inMemorySinkCost.d.ts +51 -0
- package/dist/types/strategies/defaults/inMemorySinkCost.d.ts.map +1 -0
- package/dist/types/strategies/defaults/index.d.ts +31 -0
- package/dist/types/strategies/defaults/index.d.ts.map +1 -0
- package/dist/types/strategies/defaults/noopLens.d.ts +29 -0
- package/dist/types/strategies/defaults/noopLens.d.ts.map +1 -0
- package/dist/types/strategies/index.d.ts +23 -0
- package/dist/types/strategies/index.d.ts.map +1 -0
- package/dist/types/strategies/registry.d.ts +71 -0
- package/dist/types/strategies/registry.d.ts.map +1 -0
- package/dist/types/strategies/types.d.ts +304 -0
- package/dist/types/strategies/types.d.ts.map +1 -0
- package/package.json +5 -5
package/dist/core/RunnerBase.js
CHANGED
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.RunnerBase = exports.makeRunId = void 0;
|
|
13
13
|
const dispatcher_js_1 = require("../events/dispatcher.js");
|
|
14
14
|
const LoggingRecorder_js_1 = require("../recorders/observability/LoggingRecorder.js");
|
|
15
|
+
const attach_js_1 = require("../strategies/attach.js");
|
|
15
16
|
const ThinkingRecorder_js_1 = require("../recorders/observability/ThinkingRecorder.js");
|
|
16
17
|
const FlowchartRecorder_js_1 = require("../recorders/observability/FlowchartRecorder.js");
|
|
17
18
|
let _runIdSeq = 0;
|
|
@@ -127,6 +128,11 @@ class RunnerBase {
|
|
|
127
128
|
// via the attach path AND subscribes to the event dispatcher
|
|
128
129
|
// for ReAct step transitions (stream.llm_* / stream.tool_*).
|
|
129
130
|
(0, FlowchartRecorder_js_1.attachFlowchart)((r) => this.attach(r), this.dispatcher, opts),
|
|
131
|
+
// v2.8 grouped strategy enablers — see
|
|
132
|
+
// `docs/inspiration/strategy-everywhere.md`.
|
|
133
|
+
observability: (opts) => (0, attach_js_1.attachObservabilityStrategy)(this.dispatcher, opts),
|
|
134
|
+
cost: (opts) => (0, attach_js_1.attachCostStrategy)(this.dispatcher, opts),
|
|
135
|
+
liveStatus: (opts) => (0, attach_js_1.attachLiveStatusStrategy)(this.dispatcher, opts),
|
|
130
136
|
};
|
|
131
137
|
// ─── Consumer custom emit ──────────────────────────────────────
|
|
132
138
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunnerBase.js","sourceRoot":"","sources":["../../src/core/RunnerBase.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"RunnerBase.js","sourceRoot":"","sources":["../../src/core/RunnerBase.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { EventDispatcher } from '../events/dispatcher.js';
|
|
11
11
|
import { attachLogging } from '../recorders/observability/LoggingRecorder.js';
|
|
12
|
+
import { attachObservabilityStrategy, attachCostStrategy, attachLiveStatusStrategy, } from '../strategies/attach.js';
|
|
12
13
|
import { attachThinking, } from '../recorders/observability/ThinkingRecorder.js';
|
|
13
14
|
import { attachFlowchart, } from '../recorders/observability/FlowchartRecorder.js';
|
|
14
15
|
let _runIdSeq = 0;
|
|
@@ -123,6 +124,11 @@ export class RunnerBase {
|
|
|
123
124
|
// via the attach path AND subscribes to the event dispatcher
|
|
124
125
|
// for ReAct step transitions (stream.llm_* / stream.tool_*).
|
|
125
126
|
attachFlowchart((r) => this.attach(r), this.dispatcher, opts),
|
|
127
|
+
// v2.8 grouped strategy enablers — see
|
|
128
|
+
// `docs/inspiration/strategy-everywhere.md`.
|
|
129
|
+
observability: (opts) => attachObservabilityStrategy(this.dispatcher, opts),
|
|
130
|
+
cost: (opts) => attachCostStrategy(this.dispatcher, opts),
|
|
131
|
+
liveStatus: (opts) => attachLiveStatusStrategy(this.dispatcher, opts),
|
|
126
132
|
};
|
|
127
133
|
// ─── Consumer custom emit ──────────────────────────────────────
|
|
128
134
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunnerBase.js","sourceRoot":"","sources":["../../../src/core/RunnerBase.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"RunnerBase.js","sourceRoot":"","sources":["../../../src/core/RunnerBase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire each grouped strategy to its data source on the dispatcher /
|
|
3
|
+
* recorder substrate. These are the 4 `enable.*` facades' actual
|
|
4
|
+
* implementations; `RunnerBase.enable` calls them with the right
|
|
5
|
+
* dispatcher / attach handle.
|
|
6
|
+
*
|
|
7
|
+
* Pattern: every facade follows the same shape:
|
|
8
|
+
*
|
|
9
|
+
* 1. Resolve strategy (consumer-supplied OR default)
|
|
10
|
+
* 2. Run `strategy.validate?()` — early-fail on misconfig (New Relic
|
|
11
|
+
* panel review)
|
|
12
|
+
* 3. Set up subscription / projection
|
|
13
|
+
* 4. Apply per-strategy event-type filter (`relevantEventTypes`)
|
|
14
|
+
* 5. Apply per-call sample rate
|
|
15
|
+
* 6. Wrap calls in try/catch — route errors to `_onError` (passive
|
|
16
|
+
* recorder rule: never throw to caller)
|
|
17
|
+
* 7. Return Unsubscribe (or handle for lens)
|
|
18
|
+
*/
|
|
19
|
+
import { flowChart } from 'footprintjs';
|
|
20
|
+
import { selectThinkingState, renderThinkingLine, defaultThinkingTemplates, } from '../recorders/observability/thinking/thinkingTemplates.js';
|
|
21
|
+
// Registry-lookup helpers (`getObservabilityStrategy` etc.) are
|
|
22
|
+
// defined in `./registry.js` and used by consumers via the
|
|
23
|
+
// `enable.*({ vendor, config })` path elsewhere — not used in the
|
|
24
|
+
// current attach() implementations, which take `opts.strategy` directly.
|
|
25
|
+
/**
|
|
26
|
+
* Sentinel returned when consumer calls `enable.X()` without supplying
|
|
27
|
+
* a strategy or vendor. We DON'T auto-default — that would be an
|
|
28
|
+
* unwelcome opinion. Consumer chose to call `enable.X` but didn't hand
|
|
29
|
+
* us anywhere to ship; just no-op silently and return a stoppable
|
|
30
|
+
* unsubscribe so the call site stays composable.
|
|
31
|
+
*/
|
|
32
|
+
const NOOP_UNSUBSCRIBE = () => { };
|
|
33
|
+
/** Build a one-stage flowchart that performs `args.work(event)` and
|
|
34
|
+
* routes any thrown error to `args.onError`. The driver schedules
|
|
35
|
+
* this chart per event. */
|
|
36
|
+
function buildDetachWrapperChart(args) {
|
|
37
|
+
return flowChart('agentfootprint:detach:wrapper', async (scope) => {
|
|
38
|
+
const event = scope.$getArgs();
|
|
39
|
+
try {
|
|
40
|
+
args.work(event);
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
args.onError?.(err instanceof Error ? err : new Error(String(err)), event);
|
|
44
|
+
}
|
|
45
|
+
}, 'wrap').build();
|
|
46
|
+
}
|
|
47
|
+
let detachExecutorSingleton;
|
|
48
|
+
/** Lazy-import a shared `FlowChartExecutor` we use purely as the
|
|
49
|
+
* bare-executor entry point for `detachAndForget` / `detachAndJoinLater`.
|
|
50
|
+
* No chart actually runs through it — we just need its detach methods. */
|
|
51
|
+
async function getDetachExecutor() {
|
|
52
|
+
if (detachExecutorSingleton)
|
|
53
|
+
return detachExecutorSingleton;
|
|
54
|
+
const fp = await import('footprintjs');
|
|
55
|
+
// Trivial host chart — never run, just satisfies the constructor.
|
|
56
|
+
const noopChart = fp.flowChart('agentfootprint:detach:host', async () => { }, 'host').build();
|
|
57
|
+
detachExecutorSingleton = new fp.FlowChartExecutor(noopChart);
|
|
58
|
+
return detachExecutorSingleton;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Build an event-handling function that respects `opts.detach`.
|
|
62
|
+
*
|
|
63
|
+
* - `opts.detach` undefined → returns a sync handler that runs
|
|
64
|
+
* `work(event)` inline and routes errors to `onError`. Same as
|
|
65
|
+
* pre-v2.8 behavior.
|
|
66
|
+
*
|
|
67
|
+
* - `opts.detach` set → returns a handler that schedules a wrapper
|
|
68
|
+
* chart on the driver. `mode === 'forget'` discards the handle;
|
|
69
|
+
* `mode === 'join-later'` delivers it to `opts.detach.onHandle`.
|
|
70
|
+
*
|
|
71
|
+
* The detached path is async-loaded — the executor singleton is built
|
|
72
|
+
* on first call so consumers who don't enable detach pay zero cost.
|
|
73
|
+
*/
|
|
74
|
+
function buildEventHandler(detach, args) {
|
|
75
|
+
if (!detach) {
|
|
76
|
+
// Sync path — current behavior.
|
|
77
|
+
return (event) => {
|
|
78
|
+
try {
|
|
79
|
+
args.work(event);
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
args.onError?.(err instanceof Error ? err : new Error(String(err)), event);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// Detached path — schedule via the driver. We need the wrapper chart
|
|
87
|
+
// (for the runChild side) and the executor (for the bare-executor
|
|
88
|
+
// entry point that returns / discards the handle).
|
|
89
|
+
const wrapperChart = buildDetachWrapperChart(args);
|
|
90
|
+
const mode = detach.mode ?? 'forget';
|
|
91
|
+
const onHandle = detach.onHandle;
|
|
92
|
+
if (mode === 'join-later' && !onHandle) {
|
|
93
|
+
throw new TypeError(`[enable.*] detach.mode === 'join-later' requires \`onHandle\`. ` +
|
|
94
|
+
`Without it, the returned DetachHandle would be unreachable. ` +
|
|
95
|
+
`Pass \`onHandle: (h) => myHandles.push(h)\` (and await later via ` +
|
|
96
|
+
`Promise.all(myHandles.map(h => h.wait()))).`);
|
|
97
|
+
}
|
|
98
|
+
return (event) => {
|
|
99
|
+
// Lazy-resolve the executor. The Promise here is fire-and-forget
|
|
100
|
+
// itself — we never await it, so the agent loop returns sync. Any
|
|
101
|
+
// error from the import OR the schedule call routes to onError.
|
|
102
|
+
getDetachExecutor()
|
|
103
|
+
.then((exec) => {
|
|
104
|
+
if (mode === 'forget') {
|
|
105
|
+
exec.detachAndForget(detach.driver, wrapperChart, event);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
const handle = exec.detachAndJoinLater(detach.driver, wrapperChart, event);
|
|
109
|
+
onHandle(handle);
|
|
110
|
+
}
|
|
111
|
+
})
|
|
112
|
+
.catch((err) => {
|
|
113
|
+
args.onError?.(err instanceof Error ? err : new Error(String(err)), event);
|
|
114
|
+
});
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
const TIER_FILTER = {
|
|
118
|
+
minimal: (t) => t.startsWith('agentfootprint.error.') || t.startsWith('agentfootprint.agent.'),
|
|
119
|
+
standard: (t) => !t.startsWith('agentfootprint.stream.token'),
|
|
120
|
+
firehose: () => true,
|
|
121
|
+
};
|
|
122
|
+
export function attachObservabilityStrategy(dispatcher, opts = {}) {
|
|
123
|
+
const strategy = opts.strategy;
|
|
124
|
+
// Consumer chose to call enable.observability() but didn't supply
|
|
125
|
+
// a strategy. Don't auto-default — that imposes an opinion. Just
|
|
126
|
+
// no-op so the call site stays composable.
|
|
127
|
+
if (!strategy)
|
|
128
|
+
return NOOP_UNSUBSCRIBE;
|
|
129
|
+
strategy.validate?.();
|
|
130
|
+
const tierFilter = TIER_FILTER[opts.tier ?? 'standard'];
|
|
131
|
+
const sampleRate = opts.sampleRate ?? 1;
|
|
132
|
+
const relevant = strategy.relevantEventTypes
|
|
133
|
+
? new Set(strategy.relevantEventTypes)
|
|
134
|
+
: null;
|
|
135
|
+
// Build the event handler ONCE per attach call. Sync if no
|
|
136
|
+
// `opts.detach`; otherwise schedules on the driver so the agent
|
|
137
|
+
// loop never blocks on slow exporters.
|
|
138
|
+
const handle = buildEventHandler(opts.detach, {
|
|
139
|
+
work: (event) => strategy.exportEvent(event),
|
|
140
|
+
onError: (err, event) => strategy._onError?.(err, event),
|
|
141
|
+
});
|
|
142
|
+
return dispatcher.on('*', (event) => {
|
|
143
|
+
if (!tierFilter(event.type))
|
|
144
|
+
return;
|
|
145
|
+
if (relevant && !relevant.has(event.type))
|
|
146
|
+
return;
|
|
147
|
+
if (sampleRate < 1 && Math.random() > sampleRate)
|
|
148
|
+
return;
|
|
149
|
+
handle(event);
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Subscribe to `agentfootprint.cost.tick` events, project payload into
|
|
154
|
+
* the canonical `CostTick` shape, hand to strategy.
|
|
155
|
+
*/
|
|
156
|
+
export function attachCostStrategy(dispatcher, opts = {}) {
|
|
157
|
+
const strategy = opts.strategy;
|
|
158
|
+
if (!strategy)
|
|
159
|
+
return NOOP_UNSUBSCRIBE;
|
|
160
|
+
strategy.validate?.();
|
|
161
|
+
// Cost strategy detach mirrors observability — sync by default,
|
|
162
|
+
// schedules on the driver when `opts.detach` is set. Useful when
|
|
163
|
+
// `recordCost` does heavy work (per-tick DB write, vendor budget
|
|
164
|
+
// API, etc.).
|
|
165
|
+
const handle = buildEventHandler(opts.detach, {
|
|
166
|
+
work: (tickInput) => strategy.recordCost(tickInput),
|
|
167
|
+
onError: (err, tickInput) => strategy._onError?.(err, tickInput),
|
|
168
|
+
});
|
|
169
|
+
return dispatcher.on('agentfootprint.cost.tick', (event) => {
|
|
170
|
+
const p = event.payload;
|
|
171
|
+
const tick = {
|
|
172
|
+
cumulativeInputTokens: Number(p.cumulativeInputTokens ?? 0),
|
|
173
|
+
cumulativeOutputTokens: Number(p.cumulativeOutputTokens ?? 0),
|
|
174
|
+
cumulativeCostUsd: Number(p.cumulativeCostUsd ?? 0),
|
|
175
|
+
recentInputTokens: Number(p.recentInputTokens ?? 0),
|
|
176
|
+
recentOutputTokens: Number(p.recentOutputTokens ?? 0),
|
|
177
|
+
recentCostUsd: Number(p.recentCostUsd ?? 0),
|
|
178
|
+
model: String(p.model ?? 'unknown'),
|
|
179
|
+
...(typeof p.iteration === 'number' ? { iteration: p.iteration } : {}),
|
|
180
|
+
...(typeof p.runtimeStageId === 'string' ? { runtimeStageId: p.runtimeStageId } : {}),
|
|
181
|
+
};
|
|
182
|
+
handle(tick);
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Subscribe to '*', maintain a rolling event log, project current
|
|
187
|
+
* thinking state on each event, render via templates, hand to strategy.
|
|
188
|
+
*
|
|
189
|
+
* Lower bound on emissions: dedupes — only fires `renderStatus` when
|
|
190
|
+
* the rendered line CHANGES (avoids floods on every token).
|
|
191
|
+
*/
|
|
192
|
+
/** Sliding-window cap for `attachLiveStatusStrategy`'s internal event
|
|
193
|
+
* log. Long-lived agent servers would otherwise leak memory through
|
|
194
|
+
* unbounded growth (per OTel SIG panel review). The cap is high
|
|
195
|
+
* enough that `selectThinkingState` always sees the relevant recent
|
|
196
|
+
* history. */
|
|
197
|
+
const LIVE_STATUS_LOG_CAP = 1000;
|
|
198
|
+
export function attachLiveStatusStrategy(dispatcher, opts) {
|
|
199
|
+
opts.strategy.validate?.();
|
|
200
|
+
const templates = { ...defaultThinkingTemplates, ...(opts.templates ?? {}) };
|
|
201
|
+
const ctx = { appName: opts.appName ?? 'Agent' };
|
|
202
|
+
const eventLog = [];
|
|
203
|
+
let lastLine = null;
|
|
204
|
+
return dispatcher.on('*', (event) => {
|
|
205
|
+
eventLog.push(event);
|
|
206
|
+
// Sliding-window — drop oldest when over cap. O(1) amortized
|
|
207
|
+
// because shift() runs only once per overflow.
|
|
208
|
+
while (eventLog.length > LIVE_STATUS_LOG_CAP)
|
|
209
|
+
eventLog.shift();
|
|
210
|
+
const state = selectThinkingState(eventLog);
|
|
211
|
+
if (!state) {
|
|
212
|
+
lastLine = null;
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
const line = renderThinkingLine(state, ctx, templates);
|
|
216
|
+
if (line === null || line === lastLine)
|
|
217
|
+
return;
|
|
218
|
+
lastLine = line;
|
|
219
|
+
try {
|
|
220
|
+
opts.strategy.renderStatus({ line, state });
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
opts.strategy._onError?.(err instanceof Error ? err : new Error(String(err)), event);
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=attach.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attach.js","sourceRoot":"","sources":["../../../src/strategies/attach.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `compose([...])` — fan-out combinator.
|
|
3
|
+
*
|
|
4
|
+
* Pattern: Composite. Same shape as React's children array, RxJS's
|
|
5
|
+
* `merge`, OTel's `MultiSpanProcessor`. Pass an array of
|
|
6
|
+
* strategies; get back a single strategy that fan-outs each
|
|
7
|
+
* call to every child.
|
|
8
|
+
*
|
|
9
|
+
* Use when:
|
|
10
|
+
* - Multi-vendor pipelines (`compose([datadog(), otel(), console()])`)
|
|
11
|
+
* - Test instrumentation alongside production sink
|
|
12
|
+
* (`compose([inMemorySink(), stripeBilling()])`) so test assertions
|
|
13
|
+
* can read ticks while production also ships
|
|
14
|
+
* - Tier-staging — local dev mirrors what production sees
|
|
15
|
+
*
|
|
16
|
+
* Per-child error isolation: if one child's `exportEvent` throws, the
|
|
17
|
+
* other children still receive the event. The throwing child's
|
|
18
|
+
* `_onError` is called (if present); otherwise the error is logged
|
|
19
|
+
* via `console.warn` once. One bad sink never breaks the chain.
|
|
20
|
+
*
|
|
21
|
+
* Capabilities are OR-ed across children — if any child supports a
|
|
22
|
+
* capability, the composite reports it as supported. The dispatcher
|
|
23
|
+
* uses this to decide whether to bother building event objects at all.
|
|
24
|
+
*
|
|
25
|
+
* Idempotent operations:
|
|
26
|
+
* - `flush()` — calls every child's `flush()` (sync or async)
|
|
27
|
+
* concurrently, awaits all
|
|
28
|
+
* - `stop()` — calls every child's `stop()` once, in order; failures
|
|
29
|
+
* in one child don't block the others
|
|
30
|
+
*/
|
|
31
|
+
// ─── Internal helpers ────────────────────────────────────────────────
|
|
32
|
+
/** Run `cb()` for every child; isolate errors via the child's
|
|
33
|
+
* `_onError` or a single `console.warn`. */
|
|
34
|
+
function safeForEach(children, cb) {
|
|
35
|
+
for (const child of children) {
|
|
36
|
+
try {
|
|
37
|
+
cb(child);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
const e = err instanceof Error ? err : new Error(String(err));
|
|
41
|
+
if (child._onError) {
|
|
42
|
+
try {
|
|
43
|
+
child._onError(e);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Even _onError can throw; final fallback is silent drop —
|
|
47
|
+
// we MUST NOT propagate to the caller (passive recorder rule).
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
// eslint-disable-next-line no-console
|
|
52
|
+
console.warn('[compose] child threw and has no _onError:', e.message);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** OR-merge a capability bag across children. Generic over the
|
|
58
|
+
* concrete capability type — the runtime walk treats every entry as
|
|
59
|
+
* `boolean | undefined` regardless of the typed shape. */
|
|
60
|
+
function mergeCaps(children) {
|
|
61
|
+
const merged = {};
|
|
62
|
+
for (const c of children) {
|
|
63
|
+
for (const [k, v] of Object.entries(c.capabilities)) {
|
|
64
|
+
if (v === true)
|
|
65
|
+
merged[k] = true;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return merged;
|
|
69
|
+
}
|
|
70
|
+
/** Run every child's optional `flush` concurrently. */
|
|
71
|
+
async function flushAll(children) {
|
|
72
|
+
const promises = [];
|
|
73
|
+
for (const c of children) {
|
|
74
|
+
if (!c.flush)
|
|
75
|
+
continue;
|
|
76
|
+
try {
|
|
77
|
+
const result = c.flush();
|
|
78
|
+
if (result instanceof Promise)
|
|
79
|
+
promises.push(result.catch(() => { }));
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// ignore — passive recorder rule
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (promises.length > 0)
|
|
86
|
+
await Promise.all(promises);
|
|
87
|
+
}
|
|
88
|
+
function stopAll(children) {
|
|
89
|
+
for (const c of children) {
|
|
90
|
+
if (!c.stop)
|
|
91
|
+
continue;
|
|
92
|
+
try {
|
|
93
|
+
c.stop();
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// ignore — passive recorder rule
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// ─── Composite factories — one per strategy kind ─────────────────────
|
|
101
|
+
/**
|
|
102
|
+
* Compose multiple ObservabilityStrategies into a single fan-out.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* const all = composeObservability([
|
|
106
|
+
* consoleObservability(),
|
|
107
|
+
* datadogObservability({ apiKey }),
|
|
108
|
+
* otelObservability(tracer),
|
|
109
|
+
* ]);
|
|
110
|
+
*/
|
|
111
|
+
export function composeObservability(children) {
|
|
112
|
+
return {
|
|
113
|
+
name: 'compose',
|
|
114
|
+
capabilities: mergeCaps(children),
|
|
115
|
+
exportEvent(event) {
|
|
116
|
+
safeForEach(children, (c) => c.exportEvent(event));
|
|
117
|
+
},
|
|
118
|
+
flush: () => flushAll(children),
|
|
119
|
+
stop: () => stopAll(children),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/** Compose CostStrategies. */
|
|
123
|
+
export function composeCost(children) {
|
|
124
|
+
return {
|
|
125
|
+
name: 'compose',
|
|
126
|
+
capabilities: mergeCaps(children),
|
|
127
|
+
recordCost(tick) {
|
|
128
|
+
safeForEach(children, (c) => c.recordCost(tick));
|
|
129
|
+
},
|
|
130
|
+
flush: () => flushAll(children),
|
|
131
|
+
stop: () => stopAll(children),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/** Compose LiveStatusStrategies. */
|
|
135
|
+
export function composeLiveStatus(children) {
|
|
136
|
+
return {
|
|
137
|
+
name: 'compose',
|
|
138
|
+
capabilities: mergeCaps(children),
|
|
139
|
+
renderStatus(update) {
|
|
140
|
+
safeForEach(children, (c) => c.renderStatus(update));
|
|
141
|
+
},
|
|
142
|
+
flush: () => flushAll(children),
|
|
143
|
+
stop: () => stopAll(children),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/** Compose LensStrategies. */
|
|
147
|
+
export function composeLens(children) {
|
|
148
|
+
return {
|
|
149
|
+
name: 'compose',
|
|
150
|
+
capabilities: mergeCaps(children),
|
|
151
|
+
renderGraph(update) {
|
|
152
|
+
safeForEach(children, (c) => c.renderGraph(update));
|
|
153
|
+
},
|
|
154
|
+
flush: () => flushAll(children),
|
|
155
|
+
stop: () => stopAll(children),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=compose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../../../src/strategies/compose.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chatBubbleLiveStatus()` — default LiveStatusStrategy.
|
|
3
|
+
*
|
|
4
|
+
* Pattern: Strategy. Adapter for a consumer-supplied callback.
|
|
5
|
+
* Role: The "every chat UI" sink. Wraps a `(line: string) => void`
|
|
6
|
+
* callback so the consumer just hands us the function their
|
|
7
|
+
* chat-bubble component needs and we drive it on every
|
|
8
|
+
* rendered status update.
|
|
9
|
+
*
|
|
10
|
+
* Use when:
|
|
11
|
+
* - Building a chat UI (Neo, Lens, embedded widget) where the
|
|
12
|
+
* consumer owns rendering but not state derivation
|
|
13
|
+
* - Tier-1 of compose chains (`compose([chatBubble(setLine), stdout()])`
|
|
14
|
+
* so dev console mirrors what the user sees)
|
|
15
|
+
*
|
|
16
|
+
* The callback runs on EVERY status transition. Consumer can debounce
|
|
17
|
+
* / coalesce per their needs (we don't impose UI policy).
|
|
18
|
+
*/
|
|
19
|
+
export function chatBubbleLiveStatus(opts) {
|
|
20
|
+
return {
|
|
21
|
+
name: 'chat-bubble',
|
|
22
|
+
capabilities: { streaming: true },
|
|
23
|
+
renderStatus(update) {
|
|
24
|
+
opts.onLine(update.line);
|
|
25
|
+
},
|
|
26
|
+
validate() {
|
|
27
|
+
if (typeof opts.onLine !== 'function') {
|
|
28
|
+
throw new Error('chatBubbleLiveStatus: required `onLine` callback is missing or not a function. ' +
|
|
29
|
+
'Pass the function that should receive each rendered status line.');
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=chatBubbleLiveStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatBubbleLiveStatus.js","sourceRoot":"","sources":["../../../../src/strategies/defaults/chatBubbleLiveStatus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAqBH,MAAM,UAAU,oBAAoB,CAAC,IAAiC;IACpE,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;QACjC,YAAY,CAAC,MAAoB;YAC/B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,QAAQ;YACN,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CACb,iFAAiF;oBAC/E,kEAAkE,CACrE,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `consoleObservability()` — default ObservabilityStrategy.
|
|
3
|
+
*
|
|
4
|
+
* Pattern: Strategy. Adapter for `globalThis.console`. Used when no
|
|
5
|
+
* vendor-specific strategy is configured (zero-config dev
|
|
6
|
+
* experience). Same role as `NoOpCacheStrategy` is for the
|
|
7
|
+
* cache layer.
|
|
8
|
+
* Role: Tier-1 fallback — print every event to the console with a
|
|
9
|
+
* one-line type+payload summary. Vendor-neutral, dependency-
|
|
10
|
+
* free, works in browser + Node + Deno + Bun.
|
|
11
|
+
*
|
|
12
|
+
* Use when:
|
|
13
|
+
* - Local development (`agent.enable.observability()` with no opts)
|
|
14
|
+
* - CI logs ("what events fired during this test?")
|
|
15
|
+
* - Tier-1 of compose chains (`compose([console(), datadog()])`)
|
|
16
|
+
*
|
|
17
|
+
* Don't use when: production. Console output is unstructured + can't
|
|
18
|
+
* be queried; switch to a vendor strategy (Datadog, OTel, CloudWatch).
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Default formatter — emits a single structured JSON line per event.
|
|
22
|
+
* Honeycomb / Datadog / Loki / any structured-log pipeline can ingest
|
|
23
|
+
* directly; `grep` still works because every line is `{` … `}`.
|
|
24
|
+
*
|
|
25
|
+
* Shape: `{type, ...payload}` — flattens payload to top level so
|
|
26
|
+
* filter expressions like `.type == "agentfootprint.cost.tick"` work
|
|
27
|
+
* without nesting.
|
|
28
|
+
*/
|
|
29
|
+
const DEFAULT_FORMAT = (event) => {
|
|
30
|
+
const payload = typeof event.payload === 'object' && event.payload !== null
|
|
31
|
+
? event.payload
|
|
32
|
+
: { value: event.payload };
|
|
33
|
+
return safeJson({ type: event.type, ...payload });
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Factory. Returns a fresh ObservabilityStrategy each call so multiple
|
|
37
|
+
* agents in the same process get independent instances.
|
|
38
|
+
*/
|
|
39
|
+
export function consoleObservability(opts = {}) {
|
|
40
|
+
const sink = opts.logger ?? globalThis.console;
|
|
41
|
+
const format = opts.format ?? DEFAULT_FORMAT;
|
|
42
|
+
return {
|
|
43
|
+
name: 'console',
|
|
44
|
+
capabilities: { events: true, logs: true },
|
|
45
|
+
exportEvent(event) {
|
|
46
|
+
sink.log(format(event));
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/** JSON.stringify with circular-safety. Avoids breaking the agent loop
|
|
51
|
+
* if a payload contains a circular ref. Returns the type alone if
|
|
52
|
+
* serialization fails. */
|
|
53
|
+
function safeJson(value) {
|
|
54
|
+
try {
|
|
55
|
+
return JSON.stringify(value);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return '[unserializable]';
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=consoleObservability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consoleObservability.js","sourceRoot":"","sources":["../../../../src/strategies/defaults/consoleObservability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAoBH;;;;;;;;GAQG;AACH,MAAM,cAAc,GAAG,CAAC,KAA0B,EAAU,EAAE;IAC5D,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI;QACzD,CAAC,CAAC,KAAK,CAAC,OAAO;QACf,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IAC/B,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAoC,EAAE;IAEtC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,cAAc,CAAC;IAC7C,OAAO;QACL,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;QAC1C,WAAW,CAAC,KAA0B;YACpC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;2BAE2B;AAC3B,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,kBAAkB,CAAC;IAC5B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `inMemorySinkCost()` — default CostStrategy.
|
|
3
|
+
*
|
|
4
|
+
* Pattern: Strategy. In-process accumulator. Same role as InMemoryStore
|
|
5
|
+
* for memory-providers.
|
|
6
|
+
* Role: Tier-1 fallback — accumulate cost ticks in a process-local
|
|
7
|
+
* array. Consumer reads via `getTicks()` or hooks `onRecord`
|
|
8
|
+
* for streaming. Vendor-free.
|
|
9
|
+
*
|
|
10
|
+
* Use when:
|
|
11
|
+
* - Tests / CI ("what cost did this run accrue?")
|
|
12
|
+
* - Local dev before billing integration
|
|
13
|
+
* - Tier-1 of compose chains (`compose([inMemorySink(), stripeBilling()])`
|
|
14
|
+
* so test assertions can read ticks while production also ships)
|
|
15
|
+
*
|
|
16
|
+
* Don't use when: process is long-running with high cost-tick volume —
|
|
17
|
+
* the buffer grows unbounded. Add a `maxTicks` cap (drops oldest) or
|
|
18
|
+
* pair with a streaming strategy (`stripeBilling`, `webhook`).
|
|
19
|
+
*/
|
|
20
|
+
export function inMemorySinkCost(opts = {}) {
|
|
21
|
+
const buffer = [];
|
|
22
|
+
const cap = opts.maxTicks ?? Infinity;
|
|
23
|
+
return {
|
|
24
|
+
name: 'in-memory-sink',
|
|
25
|
+
capabilities: { streaming: true, enforcement: false },
|
|
26
|
+
recordCost(tick) {
|
|
27
|
+
buffer.push(tick);
|
|
28
|
+
// FIFO eviction when over cap.
|
|
29
|
+
while (buffer.length > cap)
|
|
30
|
+
buffer.shift();
|
|
31
|
+
opts.onRecord?.(tick);
|
|
32
|
+
},
|
|
33
|
+
getTicks() {
|
|
34
|
+
return buffer.slice();
|
|
35
|
+
},
|
|
36
|
+
getTicksCount() {
|
|
37
|
+
return buffer.length;
|
|
38
|
+
},
|
|
39
|
+
getTicksSince(idx) {
|
|
40
|
+
// Clamp negative / out-of-range. `slice` handles bounds.
|
|
41
|
+
return buffer.slice(Math.max(0, idx));
|
|
42
|
+
},
|
|
43
|
+
clear() {
|
|
44
|
+
buffer.length = 0;
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=inMemorySinkCost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inMemorySinkCost.js","sourceRoot":"","sources":["../../../../src/strategies/defaults/inMemorySinkCost.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAmCH,MAAM,UAAU,gBAAgB,CAAC,OAAgC,EAAE;IACjE,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC;IACtC,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE;QACrD,UAAU,CAAC,IAAc;YACvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,+BAA+B;YAC/B,OAAO,MAAM,CAAC,MAAM,GAAG,GAAG;gBAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,QAAQ;YACN,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QACD,aAAa;YACX,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QACD,aAAa,CAAC,GAAW;YACvB,yDAAyD;YACzD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,KAAK;YACH,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC"}
|