agentic-pi 0.2.4 → 0.2.6
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/README.md +165 -2
- package/dist/args.d.ts +32 -0
- package/dist/args.js +52 -0
- package/dist/args.js.map +1 -1
- package/dist/extensions/skills/index.d.ts +83 -0
- package/dist/extensions/skills/index.js +84 -0
- package/dist/extensions/skills/index.js.map +1 -0
- package/dist/run.d.ts +53 -0
- package/dist/run.js +23 -0
- package/dist/run.js.map +1 -1
- package/dist/runner.js +59 -0
- package/dist/runner.js.map +1 -1
- package/dist/telemetry/config.d.ts +59 -0
- package/dist/telemetry/config.js +70 -0
- package/dist/telemetry/config.js.map +1 -0
- package/dist/telemetry/index.d.ts +49 -0
- package/dist/telemetry/index.js +45 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/mapper.d.ts +80 -0
- package/dist/telemetry/mapper.js +334 -0
- package/dist/telemetry/mapper.js.map +1 -0
- package/dist/telemetry/sdk.d.ts +13 -0
- package/dist/telemetry/sdk.js +147 -0
- package/dist/telemetry/sdk.js.map +1 -0
- package/dist/telemetry/semconv.d.ts +72 -0
- package/dist/telemetry/semconv.js +73 -0
- package/dist/telemetry/semconv.js.map +1 -0
- package/package.json +10 -1
package/dist/runner.js
CHANGED
|
@@ -15,11 +15,16 @@ import { Emitter } from "./emitter.js";
|
|
|
15
15
|
import { loadGitHubExtension, isMisconfigurationSkip } from "./extensions/github/index.js";
|
|
16
16
|
import { loadWebSearchExtension, isMisconfigurationSkip as isWebSearchMisconfig, } from "./extensions/web-search/index.js";
|
|
17
17
|
import { loadFileSearchExtension, isMisconfigurationSkip as isFileSearchMisconfig, } from "./extensions/file-search/index.js";
|
|
18
|
+
import { loadSkillsExtension, buildSkillsStatusEvent } from "./extensions/skills/index.js";
|
|
18
19
|
import { resolveModel } from "./models.js";
|
|
19
20
|
import { buildSandbox } from "./sandbox/index.js";
|
|
20
21
|
import { ensureImage, ImageLoaderError } from "./sandbox/images/loader.js";
|
|
22
|
+
import { createTelemetry, resolveTelemetryConfig } from "./telemetry/index.js";
|
|
21
23
|
export async function runOnce(config, prompt, deps) {
|
|
22
24
|
const warn = deps.onWarn ?? (() => undefined);
|
|
25
|
+
// Resolved up front so the telemetry extension_status can be emitted in the
|
|
26
|
+
// same block as the others. Off unless explicitly enabled (see resolver).
|
|
27
|
+
const telemetryConfig = resolveTelemetryConfig(config, process.env);
|
|
23
28
|
const authStorage = AuthStorage.create();
|
|
24
29
|
const modelRegistry = ModelRegistry.create(authStorage);
|
|
25
30
|
const model = resolveModel(config.model, modelRegistry);
|
|
@@ -75,6 +80,16 @@ export async function runOnce(config, prompt, deps) {
|
|
|
75
80
|
if (isFileSearchMisconfig(fileSearch)) {
|
|
76
81
|
warn(`file-search extension disabled (${fileSearch.reason}): ${fileSearch.message ?? ""}`);
|
|
77
82
|
}
|
|
83
|
+
// Agent Skills (https://agentskills.io). Pi discovers skills from default
|
|
84
|
+
// locations on its own; this only normalizes operator-mapped --skill paths
|
|
85
|
+
// (tilde/relative → absolute, drop missing) for the resource loader below.
|
|
86
|
+
const skills = loadSkillsExtension({
|
|
87
|
+
skillPaths: config.skillPaths,
|
|
88
|
+
noSkills: config.noSkills,
|
|
89
|
+
cwd: config.cwd,
|
|
90
|
+
});
|
|
91
|
+
for (const w of skills.warnings)
|
|
92
|
+
warn(`skills: ${w}`);
|
|
78
93
|
// Compose the env for the sandbox VM. Order (later wins):
|
|
79
94
|
// 1. Auto-injected GITHUB_TOKEN/GH_TOKEN from a minted installation
|
|
80
95
|
// token (when sandbox=gondolin AND github extension is configured).
|
|
@@ -163,6 +178,11 @@ export async function runOnce(config, prompt, deps) {
|
|
|
163
178
|
cwd: config.cwd,
|
|
164
179
|
agentDir,
|
|
165
180
|
additionalExtensionPaths: fileSearch.packageDir ? [fileSearch.packageDir] : [],
|
|
181
|
+
// Operator-mapped skill folders (e.g. --skill ~/.claude/skills). Additive
|
|
182
|
+
// even when noSkills is true (Pi semantics): --skill X --no-skills loads
|
|
183
|
+
// exactly X and nothing from default discovery.
|
|
184
|
+
additionalSkillPaths: skills.additionalSkillPaths,
|
|
185
|
+
noSkills: skills.noSkills,
|
|
166
186
|
});
|
|
167
187
|
await resourceLoader.reload();
|
|
168
188
|
// A load failure (e.g. missing native binary for this platform) is
|
|
@@ -192,6 +212,16 @@ export async function runOnce(config, prompt, deps) {
|
|
|
192
212
|
noTools: noToolsMode,
|
|
193
213
|
customTools: [...sandbox.customTools, ...github.customTools, ...webSearch.customTools],
|
|
194
214
|
});
|
|
215
|
+
// Telemetry observes the raw event stream below. Built after the session so
|
|
216
|
+
// it can stamp spans with the real sessionId. When disabled this is a cheap
|
|
217
|
+
// no-op that imports no OTEL SDK; init failures degrade to a skip + warning.
|
|
218
|
+
const telemetry = await createTelemetry({
|
|
219
|
+
config: telemetryConfig,
|
|
220
|
+
sessionId: session.sessionId,
|
|
221
|
+
model: config.model,
|
|
222
|
+
sandboxBackend: sandbox.backend,
|
|
223
|
+
onWarn: warn,
|
|
224
|
+
});
|
|
195
225
|
const emitter = new Emitter({
|
|
196
226
|
sessionId: session.sessionId,
|
|
197
227
|
cwd: config.cwd,
|
|
@@ -231,9 +261,34 @@ export async function runOnce(config, prompt, deps) {
|
|
|
231
261
|
mode: fileSearch.mode,
|
|
232
262
|
toolCount: fileSearch.toolNames.length,
|
|
233
263
|
});
|
|
264
|
+
// Pi emits no skill-specific event, so we synthesize one from the resource
|
|
265
|
+
// loader's discovery. Gated (status !== "default" OR ≥1 skill discovered) so
|
|
266
|
+
// a default run in a clean env stays silent and the JSONL fixtures stay valid.
|
|
267
|
+
const skillsStatus = buildSkillsStatusEvent(skills, resourceLoader.getSkills().skills.map((s) => ({
|
|
268
|
+
name: s.name,
|
|
269
|
+
source: s.filePath,
|
|
270
|
+
modelInvocable: !s.disableModelInvocation,
|
|
271
|
+
})));
|
|
272
|
+
if (skillsStatus) {
|
|
273
|
+
emitter.event(skillsStatus);
|
|
274
|
+
}
|
|
275
|
+
// Only surfaced when telemetry was actually requested (enabled, or explicitly
|
|
276
|
+
// --no-otel). A silent default run emits nothing here, so the existing JSONL
|
|
277
|
+
// fixtures stay valid (AGENTS.md rule #2).
|
|
278
|
+
if (telemetryConfig.enabled || telemetryConfig.reason === "disabled-by-flag") {
|
|
279
|
+
emitter.event({
|
|
280
|
+
type: "extension_status",
|
|
281
|
+
extension: "telemetry",
|
|
282
|
+
status: telemetry.status,
|
|
283
|
+
reason: telemetry.reason,
|
|
284
|
+
message: telemetry.message,
|
|
285
|
+
includeContent: telemetryConfig.includeContent,
|
|
286
|
+
});
|
|
287
|
+
}
|
|
234
288
|
let sawError = false;
|
|
235
289
|
let agentEndSeen = false;
|
|
236
290
|
const unsubscribe = session.subscribe((event) => {
|
|
291
|
+
telemetry.onEvent(event);
|
|
237
292
|
emitter.event(event);
|
|
238
293
|
if (event.type === "tool_execution_end" && event.isError) {
|
|
239
294
|
sawError = true;
|
|
@@ -251,6 +306,8 @@ export async function runOnce(config, prompt, deps) {
|
|
|
251
306
|
error: { name: err.name, message: err.message },
|
|
252
307
|
});
|
|
253
308
|
unsubscribe();
|
|
309
|
+
telemetry.recordFatal(err);
|
|
310
|
+
await telemetry.shutdown();
|
|
254
311
|
session.dispose();
|
|
255
312
|
await sandbox.close();
|
|
256
313
|
return 1;
|
|
@@ -259,6 +316,7 @@ export async function runOnce(config, prompt, deps) {
|
|
|
259
316
|
// does not carry per-event token/cost; lastlight reads this terminal event.
|
|
260
317
|
try {
|
|
261
318
|
const stats = session.getSessionStats();
|
|
319
|
+
telemetry.recordSessionStats(stats);
|
|
262
320
|
emitter.event({
|
|
263
321
|
type: "usage_snapshot",
|
|
264
322
|
stats: {
|
|
@@ -278,6 +336,7 @@ export async function runOnce(config, prompt, deps) {
|
|
|
278
336
|
});
|
|
279
337
|
}
|
|
280
338
|
unsubscribe();
|
|
339
|
+
await telemetry.shutdown();
|
|
281
340
|
session.dispose();
|
|
282
341
|
await sandbox.close();
|
|
283
342
|
if (sawError && !agentEndSeen)
|
package/dist/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telemetry enablement + content-gating resolution.
|
|
3
|
+
*
|
|
4
|
+
* Pure and SDK-free on purpose: no `@opentelemetry/*` imports here, so the
|
|
5
|
+
* precedence rules are trivially unit-testable and importing this module
|
|
6
|
+
* costs nothing on the common (telemetry-disabled) path.
|
|
7
|
+
*/
|
|
8
|
+
/** Inputs the resolver reads off `RunConfig` (kept structural to avoid a cycle). */
|
|
9
|
+
export interface TelemetryConfigInput {
|
|
10
|
+
/** Tri-state: true = --otel, false = --no-otel, undefined = env decides. */
|
|
11
|
+
otel?: boolean;
|
|
12
|
+
/** Export raw prompt/message/tool content (bounded). Default false. */
|
|
13
|
+
otelIncludeContent?: boolean;
|
|
14
|
+
/** Override OTEL_SERVICE_NAME. */
|
|
15
|
+
otelServiceName?: string;
|
|
16
|
+
/** Override OTEL_EXPORTER_OTLP_ENDPOINT. */
|
|
17
|
+
otelEndpoint?: string;
|
|
18
|
+
}
|
|
19
|
+
export type TelemetrySkipReason = "not-enabled" | "disabled-by-flag";
|
|
20
|
+
export interface TelemetryConfig {
|
|
21
|
+
enabled: boolean;
|
|
22
|
+
/** Why telemetry is off (only set when `enabled` is false). */
|
|
23
|
+
reason?: TelemetrySkipReason;
|
|
24
|
+
/** Whether raw content may be attached to spans. */
|
|
25
|
+
includeContent: boolean;
|
|
26
|
+
/** Resolved service name (flag > OTEL_SERVICE_NAME > default applied at init). */
|
|
27
|
+
serviceName?: string;
|
|
28
|
+
/** Explicit OTLP endpoint override (flag); env is honored by the SDK directly. */
|
|
29
|
+
endpoint?: string;
|
|
30
|
+
}
|
|
31
|
+
type Env = Record<string, string | undefined>;
|
|
32
|
+
/**
|
|
33
|
+
* Resolve whether telemetry is enabled and how content is treated.
|
|
34
|
+
*
|
|
35
|
+
* Enablement precedence (highest first):
|
|
36
|
+
* 1. `--no-otel` (otel === false) → disabled, reason "disabled-by-flag".
|
|
37
|
+
* 2. `--otel` (otel === true) → enabled.
|
|
38
|
+
* 3. env `AGENTIC_PI_OTEL_ENABLED` truthy → enabled.
|
|
39
|
+
* 4. otherwise → disabled, reason "not-enabled".
|
|
40
|
+
*
|
|
41
|
+
* A bare `OTEL_EXPORTER_OTLP_ENDPOINT` does NOT enable telemetry: the spec is
|
|
42
|
+
* "off unless explicitly enabled", and many environments export `OTEL_*`
|
|
43
|
+
* globally. Enablement must be intentional.
|
|
44
|
+
*
|
|
45
|
+
* Content gating: on iff `--otel-include-content` OR env
|
|
46
|
+
* `AGENTIC_PI_OTEL_INCLUDE_CONTENT` is truthy. Default is metadata-only.
|
|
47
|
+
*/
|
|
48
|
+
export declare function resolveTelemetryConfig(cfg: TelemetryConfigInput, env: Env): TelemetryConfig;
|
|
49
|
+
/** Cap on a single content attribute's length when content export is enabled. */
|
|
50
|
+
export declare const MAX_CONTENT_CHARS = 4096;
|
|
51
|
+
/**
|
|
52
|
+
* Render a value for a content-gated span attribute.
|
|
53
|
+
*
|
|
54
|
+
* Returns `undefined` when content export is off (the attribute is then simply
|
|
55
|
+
* never set). When on, stringifies and truncates to {@link MAX_CONTENT_CHARS}
|
|
56
|
+
* with a marker so oversized prompts/results don't bloat OTLP payloads.
|
|
57
|
+
*/
|
|
58
|
+
export declare function redact(value: unknown, includeContent: boolean): string | undefined;
|
|
59
|
+
export {};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telemetry enablement + content-gating resolution.
|
|
3
|
+
*
|
|
4
|
+
* Pure and SDK-free on purpose: no `@opentelemetry/*` imports here, so the
|
|
5
|
+
* precedence rules are trivially unit-testable and importing this module
|
|
6
|
+
* costs nothing on the common (telemetry-disabled) path.
|
|
7
|
+
*/
|
|
8
|
+
function isTruthy(v) {
|
|
9
|
+
if (v === undefined)
|
|
10
|
+
return false;
|
|
11
|
+
const s = v.trim().toLowerCase();
|
|
12
|
+
return s === "1" || s === "true" || s === "yes" || s === "on";
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Resolve whether telemetry is enabled and how content is treated.
|
|
16
|
+
*
|
|
17
|
+
* Enablement precedence (highest first):
|
|
18
|
+
* 1. `--no-otel` (otel === false) → disabled, reason "disabled-by-flag".
|
|
19
|
+
* 2. `--otel` (otel === true) → enabled.
|
|
20
|
+
* 3. env `AGENTIC_PI_OTEL_ENABLED` truthy → enabled.
|
|
21
|
+
* 4. otherwise → disabled, reason "not-enabled".
|
|
22
|
+
*
|
|
23
|
+
* A bare `OTEL_EXPORTER_OTLP_ENDPOINT` does NOT enable telemetry: the spec is
|
|
24
|
+
* "off unless explicitly enabled", and many environments export `OTEL_*`
|
|
25
|
+
* globally. Enablement must be intentional.
|
|
26
|
+
*
|
|
27
|
+
* Content gating: on iff `--otel-include-content` OR env
|
|
28
|
+
* `AGENTIC_PI_OTEL_INCLUDE_CONTENT` is truthy. Default is metadata-only.
|
|
29
|
+
*/
|
|
30
|
+
export function resolveTelemetryConfig(cfg, env) {
|
|
31
|
+
const includeContent = cfg.otelIncludeContent === true || isTruthy(env.AGENTIC_PI_OTEL_INCLUDE_CONTENT);
|
|
32
|
+
const serviceName = cfg.otelServiceName ?? env.OTEL_SERVICE_NAME;
|
|
33
|
+
const endpoint = cfg.otelEndpoint;
|
|
34
|
+
const base = { includeContent, serviceName, endpoint };
|
|
35
|
+
if (cfg.otel === false) {
|
|
36
|
+
return { ...base, enabled: false, reason: "disabled-by-flag" };
|
|
37
|
+
}
|
|
38
|
+
if (cfg.otel === true || isTruthy(env.AGENTIC_PI_OTEL_ENABLED)) {
|
|
39
|
+
return { ...base, enabled: true };
|
|
40
|
+
}
|
|
41
|
+
return { ...base, enabled: false, reason: "not-enabled" };
|
|
42
|
+
}
|
|
43
|
+
/** Cap on a single content attribute's length when content export is enabled. */
|
|
44
|
+
export const MAX_CONTENT_CHARS = 4096;
|
|
45
|
+
/**
|
|
46
|
+
* Render a value for a content-gated span attribute.
|
|
47
|
+
*
|
|
48
|
+
* Returns `undefined` when content export is off (the attribute is then simply
|
|
49
|
+
* never set). When on, stringifies and truncates to {@link MAX_CONTENT_CHARS}
|
|
50
|
+
* with a marker so oversized prompts/results don't bloat OTLP payloads.
|
|
51
|
+
*/
|
|
52
|
+
export function redact(value, includeContent) {
|
|
53
|
+
if (!includeContent)
|
|
54
|
+
return undefined;
|
|
55
|
+
if (value === undefined || value === null)
|
|
56
|
+
return undefined;
|
|
57
|
+
const str = typeof value === "string" ? value : safeStringify(value);
|
|
58
|
+
if (str.length <= MAX_CONTENT_CHARS)
|
|
59
|
+
return str;
|
|
60
|
+
return `${str.slice(0, MAX_CONTENT_CHARS)}…[truncated ${str.length - MAX_CONTENT_CHARS} chars]`;
|
|
61
|
+
}
|
|
62
|
+
function safeStringify(value) {
|
|
63
|
+
try {
|
|
64
|
+
return JSON.stringify(value) ?? String(value);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return String(value);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/telemetry/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA8BH,SAAS,QAAQ,CAAC,CAAqB;IACrC,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAClC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC;AAChE,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAAyB,EACzB,GAAQ;IAER,MAAM,cAAc,GAClB,GAAG,CAAC,kBAAkB,KAAK,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IACnF,MAAM,WAAW,GAAG,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,iBAAiB,CAAC;IACjE,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC;IAElC,MAAM,IAAI,GAAG,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;IAEvD,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;IACjE,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC/D,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AAC5D,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAEtC;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAC,KAAc,EAAE,cAAuB;IAC5D,IAAI,CAAC,cAAc;QAAE,OAAO,SAAS,CAAC;IACtC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5D,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACrE,IAAI,GAAG,CAAC,MAAM,IAAI,iBAAiB;QAAE,OAAO,GAAG,CAAC;IAChD,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,eAAe,GAAG,CAAC,MAAM,GAAG,iBAAiB,SAAS,CAAC;AAClG,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telemetry lifecycle entry point.
|
|
3
|
+
*
|
|
4
|
+
* `createTelemetry()` returns a {@link TelemetryHandle} the runner drives with
|
|
5
|
+
* the raw Pi event stream. When telemetry is disabled (the common case) it
|
|
6
|
+
* returns a cheap no-op handle and imports NO OpenTelemetry SDK — the heavy
|
|
7
|
+
* `@opentelemetry/sdk-*` packages are pulled in via a dynamic `import("./sdk.js")`
|
|
8
|
+
* only on the enabled path, so a default run pays ~zero cost.
|
|
9
|
+
*
|
|
10
|
+
* Nothing here writes to `process.stdout`/`process.stderr`: SDK diagnostics are
|
|
11
|
+
* routed to the `onWarn` callback (see `sdk.ts`), preserving the library
|
|
12
|
+
* contract that `run()` never touches those streams.
|
|
13
|
+
*/
|
|
14
|
+
import type { AgentSessionEvent } from "@earendil-works/pi-coding-agent";
|
|
15
|
+
import type { TelemetryConfig } from "./config.js";
|
|
16
|
+
import type { SessionStatsLike } from "./mapper.js";
|
|
17
|
+
export type { TelemetryConfig, TelemetrySkipReason } from "./config.js";
|
|
18
|
+
export { resolveTelemetryConfig } from "./config.js";
|
|
19
|
+
export interface TelemetryHandle {
|
|
20
|
+
/** Whether the OTEL pipeline is live. */
|
|
21
|
+
status: "configured" | "skipped";
|
|
22
|
+
/** Why it is skipped (or "init-failed" when enabled but setup threw). */
|
|
23
|
+
reason?: string;
|
|
24
|
+
message?: string;
|
|
25
|
+
/** Feed every raw Pi session event, in order. No-op when skipped. */
|
|
26
|
+
onEvent(event: AgentSessionEvent): void;
|
|
27
|
+
/** Decorate the root span with terminal aggregate stats. No-op when skipped. */
|
|
28
|
+
recordSessionStats(stats: SessionStatsLike): void;
|
|
29
|
+
/** Mark the run as fatally errored before shutdown. No-op when skipped. */
|
|
30
|
+
recordFatal(err: Error): void;
|
|
31
|
+
/** Flush + shut down exporters. Always resolves; never throws. */
|
|
32
|
+
shutdown(): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
export interface CreateTelemetryDeps {
|
|
35
|
+
config: TelemetryConfig;
|
|
36
|
+
sessionId: string;
|
|
37
|
+
/** "provider/model_id" — split into gen_ai.system + gen_ai.request.model. */
|
|
38
|
+
model: string;
|
|
39
|
+
sandboxBackend: string;
|
|
40
|
+
onWarn: (message: string) => void;
|
|
41
|
+
/** Defaults to process.env; injected by tests. */
|
|
42
|
+
env?: Record<string, string | undefined>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Build a telemetry handle from the resolved config. Async because the enabled
|
|
46
|
+
* path dynamically imports the OTEL SDK. Initialization failures degrade to a
|
|
47
|
+
* skipped handle with a warning — telemetry never breaks the run.
|
|
48
|
+
*/
|
|
49
|
+
export declare function createTelemetry(deps: CreateTelemetryDeps): Promise<TelemetryHandle>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telemetry lifecycle entry point.
|
|
3
|
+
*
|
|
4
|
+
* `createTelemetry()` returns a {@link TelemetryHandle} the runner drives with
|
|
5
|
+
* the raw Pi event stream. When telemetry is disabled (the common case) it
|
|
6
|
+
* returns a cheap no-op handle and imports NO OpenTelemetry SDK — the heavy
|
|
7
|
+
* `@opentelemetry/sdk-*` packages are pulled in via a dynamic `import("./sdk.js")`
|
|
8
|
+
* only on the enabled path, so a default run pays ~zero cost.
|
|
9
|
+
*
|
|
10
|
+
* Nothing here writes to `process.stdout`/`process.stderr`: SDK diagnostics are
|
|
11
|
+
* routed to the `onWarn` callback (see `sdk.ts`), preserving the library
|
|
12
|
+
* contract that `run()` never touches those streams.
|
|
13
|
+
*/
|
|
14
|
+
export { resolveTelemetryConfig } from "./config.js";
|
|
15
|
+
function noopHandle(reason, message) {
|
|
16
|
+
return {
|
|
17
|
+
status: "skipped",
|
|
18
|
+
reason,
|
|
19
|
+
message,
|
|
20
|
+
onEvent: () => undefined,
|
|
21
|
+
recordSessionStats: () => undefined,
|
|
22
|
+
recordFatal: () => undefined,
|
|
23
|
+
shutdown: async () => undefined,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Build a telemetry handle from the resolved config. Async because the enabled
|
|
28
|
+
* path dynamically imports the OTEL SDK. Initialization failures degrade to a
|
|
29
|
+
* skipped handle with a warning — telemetry never breaks the run.
|
|
30
|
+
*/
|
|
31
|
+
export async function createTelemetry(deps) {
|
|
32
|
+
if (!deps.config.enabled) {
|
|
33
|
+
return noopHandle(deps.config.reason);
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const { startTelemetrySdk } = await import("./sdk.js");
|
|
37
|
+
return startTelemetrySdk(deps);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
const message = err.message;
|
|
41
|
+
deps.onWarn(`telemetry: initialization failed (${message}); continuing without OTEL`);
|
|
42
|
+
return noopHandle("init-failed", message);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AA6BrD,SAAS,UAAU,CAAC,MAAe,EAAE,OAAgB;IACnD,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,MAAM;QACN,OAAO;QACP,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;QACxB,kBAAkB,EAAE,GAAG,EAAE,CAAC,SAAS;QACnC,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS;QAC5B,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS;KAChC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAyB;IAC7D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,CAAC;QACH,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QACvD,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAI,GAAa,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,qCAAqC,OAAO,4BAA4B,CAAC,CAAC;QACtF,OAAO,UAAU,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Translates Pi's raw session event stream into an OpenTelemetry span tree
|
|
3
|
+
* plus metrics.
|
|
4
|
+
*
|
|
5
|
+
* Span tree (one-shot run → short-lived, so a real root span is correct):
|
|
6
|
+
*
|
|
7
|
+
* agentic_pi.session (root)
|
|
8
|
+
* └── agentic_pi.turn (per turn_start/turn_end)
|
|
9
|
+
* ├── chat <model> (per assistant message_start→message_end)
|
|
10
|
+
* └── execute_tool <name> (per tool_execution_start→end, keyed by toolCallId)
|
|
11
|
+
*
|
|
12
|
+
* Spans and metrics are both sourced from the SAME per-message / per-tool
|
|
13
|
+
* events (never from the aggregate session stats), so they agree and nothing
|
|
14
|
+
* is double-counted. Aggregate stats only decorate the root span.
|
|
15
|
+
*
|
|
16
|
+
* Every public method is defensive: missing/out-of-order pairs warn once and
|
|
17
|
+
* never throw — a telemetry glitch must never break the run.
|
|
18
|
+
*/
|
|
19
|
+
import { type Context, type Meter, type Tracer } from "@opentelemetry/api";
|
|
20
|
+
import type { AgentSessionEvent } from "@earendil-works/pi-coding-agent";
|
|
21
|
+
/** Terminal aggregate stats (subset of Pi's SessionStats) for root decoration. */
|
|
22
|
+
export interface SessionStatsLike {
|
|
23
|
+
tokens?: {
|
|
24
|
+
input?: number;
|
|
25
|
+
output?: number;
|
|
26
|
+
total?: number;
|
|
27
|
+
};
|
|
28
|
+
cost?: number;
|
|
29
|
+
}
|
|
30
|
+
export interface SpanMapperDeps {
|
|
31
|
+
tracer: Tracer;
|
|
32
|
+
meter: Meter;
|
|
33
|
+
/** Inbound parent context (extracted traceparent) or ROOT_CONTEXT. */
|
|
34
|
+
rootParentContext: Context;
|
|
35
|
+
sessionId: string;
|
|
36
|
+
/** gen_ai.system (provider, e.g. "openai"). */
|
|
37
|
+
genAiSystem: string;
|
|
38
|
+
/** gen_ai.request.model (model id, e.g. "gpt-5.4-nano"). */
|
|
39
|
+
requestModel: string;
|
|
40
|
+
sandboxBackend: string;
|
|
41
|
+
includeContent: boolean;
|
|
42
|
+
onWarn: (message: string) => void;
|
|
43
|
+
/** Milliseconds clock seam (tests inject a deterministic one). */
|
|
44
|
+
now?: () => number;
|
|
45
|
+
}
|
|
46
|
+
export declare class SpanMapper {
|
|
47
|
+
private readonly d;
|
|
48
|
+
private readonly now;
|
|
49
|
+
private readonly inst;
|
|
50
|
+
private rootSpan?;
|
|
51
|
+
private rootCtx;
|
|
52
|
+
private turnSpan?;
|
|
53
|
+
private turnCtx?;
|
|
54
|
+
private turnIndex;
|
|
55
|
+
private llm?;
|
|
56
|
+
private readonly toolSpans;
|
|
57
|
+
private ended;
|
|
58
|
+
private warnedUnknownTool;
|
|
59
|
+
constructor(deps: SpanMapperDeps);
|
|
60
|
+
onEvent(event: AgentSessionEvent): void;
|
|
61
|
+
/** Decorate the root span with terminal aggregate stats (reconciliation only). */
|
|
62
|
+
recordSessionStats(stats: SessionStatsLike): void;
|
|
63
|
+
/** Mark the root span as errored (called before shutdown on the fatal path). */
|
|
64
|
+
recordFatal(err: Error): void;
|
|
65
|
+
/** Close any still-open spans (ERROR) and end the root. Idempotent. */
|
|
66
|
+
end(): void;
|
|
67
|
+
private ensureRoot;
|
|
68
|
+
private parentCtx;
|
|
69
|
+
private onTurnStart;
|
|
70
|
+
private onTurnEnd;
|
|
71
|
+
private onMessageStart;
|
|
72
|
+
private onMessageEnd;
|
|
73
|
+
private onToolStart;
|
|
74
|
+
private onToolEnd;
|
|
75
|
+
private onAgentEnd;
|
|
76
|
+
private setAndMeasureToken;
|
|
77
|
+
private abandonTurn;
|
|
78
|
+
private assistantText;
|
|
79
|
+
private buildInstruments;
|
|
80
|
+
}
|