@amaster.ai/pi-telemetry 0.1.0-beta.0 → 0.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/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # @amaster.ai/pi-telemetry
2
2
 
3
+ ![pi-telemetry preview](https://raw.githubusercontent.com/TGYD-helige/pi/master/packages/pi-telemetry/preview.png)
4
+
3
5
  Runtime telemetry contracts and exporters for pi.
4
6
 
5
7
  The root package exposes stable exporter contracts plus no-op and composite exporters. Provider-specific implementations live behind explicit subpath entry points so applications can depend on the smallest public surface they need.
@@ -7,55 +9,106 @@ The root package exposes stable exporter contracts plus no-op and composite expo
7
9
  ## Entry Points
8
10
 
9
11
  - `@amaster.ai/pi-telemetry`: stable contracts, `NoopRuntimeEventExporter`, and `CompositeRuntimeEventExporter`.
10
- - `@amaster.ai/pi-telemetry/langfuse`: Langfuse SDK and ingestion API exporters.
12
+ - `@amaster.ai/pi-telemetry/config`: `TelemetryConfig` type, `resolveConfig`, and `loadConfigFromFile`.
13
+ - `@amaster.ai/pi-telemetry/langfuse`: Langfuse SDK exporter.
11
14
  - `@amaster.ai/pi-telemetry/otel`: generic OTLP/HTTP traces exporter.
12
15
 
13
- ## Langfuse
14
-
15
- ```ts
16
- import { createRuntimeEventExporterFromEnv } from "@amaster.ai/pi-telemetry/langfuse";
17
-
18
- const exporter = createRuntimeEventExporterFromEnv(process.env);
16
+ ## Events
17
+
18
+ The extension hooks into the following Pi lifecycle events:
19
+
20
+ | Event | Telemetry action |
21
+ |-------|-----------------|
22
+ | `session_start` | Initialize exporters from config |
23
+ | `input` | Start a new trace (traceId boundary = user input) |
24
+ | `turn_start` | Begin a generation span |
25
+ | `before_provider_request` | Record model input |
26
+ | `after_provider_response` | Record model output, usage, latency |
27
+ | `turn_end` | End generation span |
28
+ | `tool_execution_start` | Begin tool span |
29
+ | `tool_execution_end` | End tool span with result |
30
+ | `message_end` | Publish accumulated trace to exporters |
31
+ | `model_select` | Record model switch events |
32
+ | `session_compact` | Record context compaction events |
33
+ | `session_shutdown` | Flush and shutdown exporters |
34
+
35
+ ### Trace lifecycle
36
+
37
+ Traces are scoped to user input boundaries (not individual turns). A single user message may trigger multiple LLM turns and tool calls — all grouped under one trace. The trace is published on `message_end`.
38
+
39
+ ## Configuration
40
+
41
+ Configuration is read from `.pi/settings.json` under the `"pi-telemetry"` key. Project-level settings (`.pi/settings.json` in the working directory) take priority over user-level settings (`~/.pi/agent/settings.json`).
42
+
43
+ ```json
44
+ {
45
+ "pi-telemetry": {
46
+ "serviceName": "my-service",
47
+ "serviceVersion": "1.0.0",
48
+ "includePayloads": true,
49
+ "langfuse": {
50
+ "enabled": true,
51
+ "publicKey": "pk-lf-...",
52
+ "secretKey": "sk-lf-...",
53
+ "baseUrl": "https://cloud.langfuse.com",
54
+ "flushAt": 20,
55
+ "flushIntervalMs": 5000
56
+ },
57
+ "otel": {
58
+ "enabled": true,
59
+ "endpoint": "https://otel-collector.example.com",
60
+ "headers": { "Authorization": "Bearer ..." },
61
+ "flushAt": 20,
62
+ "flushIntervalMs": 5000
63
+ }
64
+ }
65
+ }
19
66
  ```
20
67
 
21
- Telemetry is disabled unless credentials are present. Supported environment variables include:
68
+ ### Config Fields
22
69
 
23
- - `LANGFUSE_ENABLED`
24
- - `LANGFUSE_PUBLIC_KEY`
25
- - `LANGFUSE_SECRET_KEY`
26
- - `LANGFUSE_BASE_URL`
27
- - `LANGFUSE_TRANSPORT`
28
- - `TELEMETRY_SERVICE_NAME`
29
- - `TELEMETRY_SERVICE_VERSION`
30
- - `TELEMETRY_INCLUDE_PAYLOADS`
70
+ | Field | Type | Default | Description |
71
+ |-------|------|---------|-------------|
72
+ | `serviceName` | `string` | `"pi-server"` | Service name for traces |
73
+ | `serviceVersion` | `string` | — | Service version for traces |
74
+ | `includePayloads` | `boolean` | `true` | Include chat payloads, tool args, LLM I/O |
31
75
 
32
- Set `TELEMETRY_INCLUDE_PAYLOADS=false` to remove chat payloads, tool args, and LLM input/output from exported telemetry. For finer control, construct a Langfuse exporter directly and pass `redactEvent`.
76
+ ### Langfuse Config
33
77
 
34
- ## Generic OTEL
78
+ | Field | Type | Default | Description |
79
+ |-------|------|---------|-------------|
80
+ | `enabled` | `boolean` | `false` | Enable Langfuse exporter |
81
+ | `publicKey` | `string` | — | Langfuse public API key |
82
+ | `secretKey` | `string` | — | Langfuse secret API key |
83
+ | `baseUrl` | `string` | `"https://cloud.langfuse.com"` | Langfuse server URL |
84
+ | `flushAt` | `number` | `20` | Batch size before flush |
85
+ | `flushIntervalMs` | `number` | `5000` | Flush interval in ms |
35
86
 
36
- ```ts
37
- import { createOtelRuntimeEventExporterFromEnv } from "@amaster.ai/pi-telemetry/otel";
87
+ ### OTEL Config
38
88
 
39
- const exporter = createOtelRuntimeEventExporterFromEnv(process.env);
40
- ```
89
+ | Field | Type | Default | Description |
90
+ |-------|------|---------|-------------|
91
+ | `enabled` | `boolean` | `false` | Enable OTEL exporter |
92
+ | `endpoint` | `string` | — | OTLP traces endpoint |
93
+ | `headers` | `Record<string, string>` | — | Request headers |
94
+ | `flushAt` | `number` | `20` | Batch size before flush |
95
+ | `flushIntervalMs` | `number` | `5000` | Flush interval in ms |
96
+ | `errorLabel` | `string` | — | Custom label for error messages |
41
97
 
42
- Supported generic OTEL environment variables include:
98
+ When the endpoint does not end with `/v1/traces`, the exporter appends `/v1/traces`.
43
99
 
44
- - `OTEL_EXPORTER_OTLP_ENDPOINT`
45
- - `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT`
46
- - `OTEL_EXPORTER_OTLP_HEADERS`
47
- - `OTEL_EXPORTER_OTLP_TRACES_HEADERS`
48
- - `OTEL_BSP_MAX_EXPORT_BATCH_SIZE`
49
- - `OTEL_BSP_SCHEDULE_DELAY`
50
- - `OTEL_SERVICE_NAME`
51
- - `OTEL_RESOURCE_ATTRIBUTES`
52
- - `OTEL_SDK_DISABLED`
53
- - `TELEMETRY_INCLUDE_PAYLOADS`
54
- - `TELEMETRY_SERVICE_VERSION`
100
+ ## Programmatic Usage
55
101
 
56
- When the endpoint does not end with `/v1/traces`, the exporter appends `/v1/traces`.
57
- Use this entry point for any OTLP/HTTP collector, including Langfuse's OTEL endpoint.
102
+ ```ts
103
+ import { loadConfigFromFile, resolveConfig } from "@amaster.ai/pi-telemetry/config";
104
+ import { createLangfuseExporter } from "@amaster.ai/pi-telemetry/langfuse";
105
+ import { createOtelExporter } from "@amaster.ai/pi-telemetry/otel";
106
+
107
+ const config = resolveConfig(loadConfigFromFile());
108
+ const langfuse = createLangfuseExporter(config);
109
+ const otel = createOtelExporter(config);
110
+ ```
58
111
 
59
112
  ## Privacy
60
113
 
61
- Runtime events may include user prompts, assistant responses, tool arguments, tool outputs, and model inputs/outputs. Keep telemetry disabled by default in downstream applications unless users explicitly configure an exporter.
114
+ Runtime events may include user prompts, assistant responses, tool arguments, tool outputs, and model inputs/outputs. Set `includePayloads: false` to strip these from exported telemetry. For finer control, construct an exporter directly and pass `redactEvent`.
@@ -0,0 +1,27 @@
1
+ import { type PiSettingsOptions } from '@amaster.ai/pi-shared/settings';
2
+ export interface LangfuseConfig {
3
+ enabled?: boolean;
4
+ publicKey?: string;
5
+ secretKey?: string;
6
+ baseUrl?: string;
7
+ flushAt?: number;
8
+ flushIntervalMs?: number;
9
+ }
10
+ export interface OtelConfig {
11
+ enabled?: boolean;
12
+ endpoint?: string;
13
+ headers?: Record<string, string>;
14
+ flushAt?: number;
15
+ flushIntervalMs?: number;
16
+ errorLabel?: string;
17
+ }
18
+ export interface TelemetryConfig {
19
+ serviceName?: string;
20
+ serviceVersion?: string;
21
+ includePayloads?: boolean;
22
+ langfuse?: LangfuseConfig;
23
+ otel?: OtelConfig;
24
+ }
25
+ export declare function resolveConfig(config?: TelemetryConfig): TelemetryConfig;
26
+ export declare function loadConfigFromFile(options?: PiSettingsOptions): TelemetryConfig;
27
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGxF,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAOD,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,eAAe,CAEvE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,eAAe,CAE/E"}
package/dist/config.js ADDED
@@ -0,0 +1,13 @@
1
+ import { loadPiSettings } from '@amaster.ai/pi-shared/settings';
2
+ import { getAgentDir } from '@earendil-works/pi-coding-agent';
3
+ const DEFAULTS = {
4
+ serviceName: 'pi-server',
5
+ includePayloads: true,
6
+ };
7
+ export function resolveConfig(config) {
8
+ return { ...DEFAULTS, ...config };
9
+ }
10
+ export function loadConfigFromFile(options) {
11
+ return loadPiSettings('pi-telemetry', { agentDir: getAgentDir(), ...options });
12
+ }
13
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA0B,MAAM,gCAAgC,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AA6B9D,MAAM,QAAQ,GAAoB;IAChC,WAAW,EAAE,WAAW;IACxB,eAAe,EAAE,IAAI;CACtB,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,MAAwB;IACpD,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA2B;IAC5D,OAAO,cAAc,CAAkB,cAAc,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AAClG,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExtensionAPI } from '@earendil-works/pi-coding-agent';
2
+ export default function telemetryExtension(pi: ExtensionAPI): void;
3
+ //# sourceMappingURL=extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,iCAAiC,CAAC;AAkEtF,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAoQjE"}
@@ -0,0 +1,313 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { loadConfigFromFile, resolveConfig } from './config.js';
3
+ import { CompositeRuntimeEventExporter, NoopRuntimeEventExporter, } from './index.js';
4
+ import { createLangfuseExporter } from './langfuse.js';
5
+ import { createOtelExporter } from './otel.js';
6
+ function modelConfigFromCtx(ctx) {
7
+ const model = ctx.model;
8
+ if (!model) {
9
+ return { provider: 'unknown', model: 'unknown' };
10
+ }
11
+ return {
12
+ provider: model.provider ?? 'unknown',
13
+ model: model.id ?? model.name ?? 'unknown',
14
+ };
15
+ }
16
+ function extractOutput(message) {
17
+ if (!message || typeof message !== 'object')
18
+ return undefined;
19
+ const msg = message;
20
+ if (msg.role !== 'assistant' || !Array.isArray(msg.content))
21
+ return undefined;
22
+ const texts = [];
23
+ for (const block of msg.content) {
24
+ if (block &&
25
+ typeof block === 'object' &&
26
+ 'type' in block &&
27
+ block.type === 'text' &&
28
+ 'text' in block) {
29
+ texts.push(String(block.text));
30
+ }
31
+ }
32
+ return texts.length > 0 ? texts.join('\n') : undefined;
33
+ }
34
+ function simplifyContent(content) {
35
+ if (typeof content === 'string')
36
+ return content;
37
+ if (!Array.isArray(content) || content.length === 0)
38
+ return content;
39
+ const allText = content.every((b) => b && typeof b === 'object' && 'type' in b && b.type === 'text');
40
+ if (allText) {
41
+ const texts = content.map((b) => String(b.text));
42
+ return texts.join('\n');
43
+ }
44
+ return content;
45
+ }
46
+ function mapUsage(usage) {
47
+ const result = {};
48
+ if (typeof usage.input === 'number')
49
+ result.input = usage.input;
50
+ if (typeof usage.output === 'number')
51
+ result.output = usage.output;
52
+ if (typeof usage.cacheRead === 'number')
53
+ result.cacheRead = usage.cacheRead;
54
+ if (typeof usage.cacheWrite === 'number')
55
+ result.cacheWrite = usage.cacheWrite;
56
+ if (typeof usage.totalTokens === 'number')
57
+ result.totalTokens = usage.totalTokens;
58
+ if (usage.cost != null && typeof usage.cost === 'object')
59
+ result.cost = usage.cost;
60
+ return result;
61
+ }
62
+ export default function telemetryExtension(pi) {
63
+ const inheritedTraceId = process.env.PI_TELEMETRY_TRACE_ID;
64
+ const inheritedSessionId = process.env.PI_TELEMETRY_SESSION_ID;
65
+ const ownerPid = process.env.PI_TELEMETRY_OWNER_PID;
66
+ const isSubagent = Boolean(inheritedTraceId && ownerPid && ownerPid !== String(process.pid));
67
+ let exporter = new NoopRuntimeEventExporter();
68
+ const localSessionId = randomUUID();
69
+ const sessionId = isSubagent && inheritedSessionId ? inheritedSessionId : localSessionId;
70
+ let currentTraceId = isSubagent ? inheritedTraceId : undefined;
71
+ let traceStartTime;
72
+ let tracePublished = false;
73
+ let llmGenerationCounter = 0;
74
+ let pendingInput;
75
+ let lastModelConfig = { provider: 'unknown', model: 'unknown' };
76
+ pi.on('session_start', async (_event, ctx) => {
77
+ const config = resolveConfig(loadConfigFromFile({ cwd: ctx.cwd }));
78
+ const langfuse = createLangfuseExporter(config);
79
+ const otel = createOtelExporter(config);
80
+ const active = [langfuse, otel].filter((e) => !(e instanceof NoopRuntimeEventExporter));
81
+ if (active.length > 1) {
82
+ exporter = new CompositeRuntimeEventExporter(active);
83
+ }
84
+ else if (active.length === 1) {
85
+ exporter = active[0];
86
+ }
87
+ });
88
+ pi.on('input', async (event) => {
89
+ pendingInput = event.text;
90
+ if (!isSubagent) {
91
+ currentTraceId = randomUUID().replace(/-/g, '');
92
+ process.env.PI_TELEMETRY_TRACE_ID = currentTraceId;
93
+ process.env.PI_TELEMETRY_SESSION_ID = sessionId;
94
+ process.env.PI_TELEMETRY_OWNER_PID = String(process.pid);
95
+ }
96
+ traceStartTime = undefined;
97
+ tracePublished = false;
98
+ llmGenerationCounter = 0;
99
+ });
100
+ pi.on('turn_start', async (event) => {
101
+ if (!currentTraceId) {
102
+ currentTraceId = randomUUID().replace(/-/g, '');
103
+ llmGenerationCounter = 0;
104
+ tracePublished = false;
105
+ }
106
+ if (!traceStartTime) {
107
+ traceStartTime = event.timestamp;
108
+ }
109
+ if (!tracePublished) {
110
+ tracePublished = true;
111
+ if (isSubagent) {
112
+ await exporter.publish({
113
+ id: randomUUID(),
114
+ traceId: currentTraceId,
115
+ type: 'subagent_started',
116
+ sessionId,
117
+ childSessionId: localSessionId,
118
+ createdAt: new Date(event.timestamp).toISOString(),
119
+ ...(pendingInput !== undefined ? { details: { input: pendingInput } } : {}),
120
+ });
121
+ }
122
+ else {
123
+ await exporter.publish({
124
+ id: randomUUID(),
125
+ traceId: currentTraceId,
126
+ type: 'chat_turn_started',
127
+ sessionId,
128
+ createdAt: new Date(event.timestamp).toISOString(),
129
+ ...(pendingInput !== undefined ? { details: { input: pendingInput } } : {}),
130
+ });
131
+ }
132
+ pendingInput = undefined;
133
+ }
134
+ });
135
+ pi.on('turn_end', async (event) => {
136
+ if (!currentTraceId)
137
+ return;
138
+ const now = Date.now();
139
+ const durationMs = traceStartTime ? now - traceStartTime : undefined;
140
+ const output = extractOutput(event.message);
141
+ if (isSubagent) {
142
+ await exporter.publish({
143
+ id: randomUUID(),
144
+ traceId: currentTraceId,
145
+ type: 'subagent_completed',
146
+ sessionId,
147
+ childSessionId: localSessionId,
148
+ createdAt: new Date(now).toISOString(),
149
+ ...(durationMs !== undefined ? { durationMs } : {}),
150
+ ...(output !== undefined ? { details: { output } } : {}),
151
+ });
152
+ }
153
+ else {
154
+ await exporter.publish({
155
+ id: randomUUID(),
156
+ traceId: currentTraceId,
157
+ type: 'chat_turn_completed',
158
+ sessionId,
159
+ createdAt: new Date(now).toISOString(),
160
+ ...(durationMs !== undefined ? { durationMs } : {}),
161
+ ...(output !== undefined ? { details: { output } } : {}),
162
+ });
163
+ }
164
+ });
165
+ pi.on('tool_execution_start', async (event) => {
166
+ if (!currentTraceId)
167
+ return;
168
+ await exporter.publish({
169
+ id: randomUUID(),
170
+ traceId: currentTraceId,
171
+ sessionId: localSessionId,
172
+ conversationId: localSessionId,
173
+ ...(isSubagent ? { childSessionId: localSessionId } : {}),
174
+ toolCallId: event.toolCallId,
175
+ toolName: event.toolName,
176
+ status: 'started',
177
+ createdAt: new Date().toISOString(),
178
+ args: event.args,
179
+ });
180
+ });
181
+ pi.on('tool_execution_end', async (event) => {
182
+ if (!currentTraceId)
183
+ return;
184
+ await exporter.publish({
185
+ id: randomUUID(),
186
+ traceId: currentTraceId,
187
+ sessionId: localSessionId,
188
+ conversationId: localSessionId,
189
+ ...(isSubagent ? { childSessionId: localSessionId } : {}),
190
+ toolCallId: event.toolCallId,
191
+ toolName: event.toolName,
192
+ status: event.isError ? 'failed' : 'completed',
193
+ createdAt: new Date().toISOString(),
194
+ ...(event.isError
195
+ ? { error: typeof event.result === 'string' ? event.result : JSON.stringify(event.result) }
196
+ : {}),
197
+ });
198
+ });
199
+ pi.on('before_provider_request', async (event, ctx) => {
200
+ if (!currentTraceId)
201
+ return;
202
+ llmGenerationCounter++;
203
+ lastModelConfig = modelConfigFromCtx(ctx);
204
+ await exporter.publish({
205
+ id: randomUUID(),
206
+ traceId: currentTraceId,
207
+ sessionId: localSessionId,
208
+ conversationId: localSessionId,
209
+ ...(isSubagent ? { childSessionId: localSessionId } : {}),
210
+ llmGenerationId: `gen-${llmGenerationCounter}`,
211
+ status: 'started',
212
+ createdAt: new Date().toISOString(),
213
+ model: lastModelConfig,
214
+ input: event.payload,
215
+ });
216
+ });
217
+ pi.on('after_provider_response', async (event, ctx) => {
218
+ if (!currentTraceId)
219
+ return;
220
+ if (event.status < 400)
221
+ return;
222
+ await exporter.publish({
223
+ id: randomUUID(),
224
+ traceId: currentTraceId,
225
+ sessionId: localSessionId,
226
+ conversationId: localSessionId,
227
+ ...(isSubagent ? { childSessionId: localSessionId } : {}),
228
+ llmGenerationId: `gen-${llmGenerationCounter}`,
229
+ status: 'failed',
230
+ createdAt: new Date().toISOString(),
231
+ model: modelConfigFromCtx(ctx),
232
+ error: `HTTP ${event.status}`,
233
+ });
234
+ });
235
+ pi.on('message_end', async (event) => {
236
+ if (!currentTraceId)
237
+ return;
238
+ const msg = event.message;
239
+ if (msg.role !== 'assistant')
240
+ return;
241
+ const content = simplifyContent(msg.content) ?? extractOutput(event.message);
242
+ const usage = msg.usage;
243
+ const mapped = usage ? mapUsage(usage) : undefined;
244
+ const output = {};
245
+ if (content !== undefined)
246
+ output.content = content;
247
+ if (usage !== undefined)
248
+ output.usage = usage;
249
+ await exporter.publish({
250
+ id: randomUUID(),
251
+ traceId: currentTraceId,
252
+ sessionId: localSessionId,
253
+ conversationId: localSessionId,
254
+ ...(isSubagent ? { childSessionId: localSessionId } : {}),
255
+ llmGenerationId: `gen-${llmGenerationCounter}`,
256
+ status: 'completed',
257
+ createdAt: new Date().toISOString(),
258
+ model: lastModelConfig,
259
+ ...(Object.keys(output).length > 0 ? { output } : {}),
260
+ ...(mapped ? { usage: mapped } : {}),
261
+ ...(typeof msg.responseId === 'string' ? { responseId: msg.responseId } : {}),
262
+ ...(typeof msg.stopReason === 'string' ? { stopReason: msg.stopReason } : {}),
263
+ });
264
+ });
265
+ pi.on('model_select', async (event) => {
266
+ if (!currentTraceId)
267
+ return;
268
+ const evt = event;
269
+ const model = evt.model;
270
+ const previousModel = evt.previousModel;
271
+ await exporter.publish({
272
+ id: randomUUID(),
273
+ traceId: currentTraceId,
274
+ type: 'chat_turn_steered',
275
+ sessionId,
276
+ createdAt: new Date().toISOString(),
277
+ details: {
278
+ eventType: 'model_switch',
279
+ from: previousModel
280
+ ? {
281
+ provider: String(previousModel.provider ?? 'unknown'),
282
+ model: String(previousModel.id ?? 'unknown'),
283
+ }
284
+ : null,
285
+ to: model
286
+ ? { provider: String(model.provider ?? 'unknown'), model: String(model.id ?? 'unknown') }
287
+ : null,
288
+ source: String(evt.source ?? 'unknown'),
289
+ },
290
+ });
291
+ });
292
+ pi.on('session_compact', async (event) => {
293
+ if (!currentTraceId)
294
+ return;
295
+ const evt = event;
296
+ await exporter.publish({
297
+ id: randomUUID(),
298
+ traceId: currentTraceId,
299
+ type: 'chat_turn_steered',
300
+ sessionId,
301
+ createdAt: new Date().toISOString(),
302
+ details: {
303
+ eventType: 'session_compact',
304
+ fromExtension: evt.fromExtension ?? false,
305
+ },
306
+ });
307
+ });
308
+ pi.on('session_shutdown', async () => {
309
+ await exporter.flush?.();
310
+ await exporter.close?.();
311
+ });
312
+ }
313
+ //# sourceMappingURL=extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { RuntimeLifecycleEvent, RuntimeLlmGenerationEvent, RuntimeToolEvent } from "@amaster.ai/pi-types";
1
+ import type { RuntimeLifecycleEvent, RuntimeLlmGenerationEvent, RuntimeToolEvent } from '@amaster.ai/pi-shared';
2
2
  export type RuntimeTelemetryEvent = RuntimeLifecycleEvent | RuntimeToolEvent | RuntimeLlmGenerationEvent;
3
3
  export interface RuntimeEventExporter {
4
4
  publish(event: RuntimeTelemetryEvent): Promise<void>;
@@ -7,7 +7,7 @@ export interface RuntimeEventExporter {
7
7
  }
8
8
  export type TelemetryEnvironment = Record<string, string | undefined>;
9
9
  export type TelemetryFetch = (input: string, init: {
10
- method: "POST";
10
+ method: 'POST';
11
11
  headers: Record<string, string>;
12
12
  body: string;
13
13
  }) => Promise<{
@@ -23,7 +23,7 @@ export type RuntimeTelemetryOptions = {
23
23
  redactEvent?: TelemetryRedactor | undefined;
24
24
  };
25
25
  export declare class NoopRuntimeEventExporter implements RuntimeEventExporter {
26
- publish(): Promise<void>;
26
+ publish(_event: RuntimeTelemetryEvent): Promise<void>;
27
27
  flush(): Promise<void>;
28
28
  close(): Promise<void>;
29
29
  }
@@ -34,4 +34,5 @@ export declare class CompositeRuntimeEventExporter implements RuntimeEventExport
34
34
  flush(): Promise<void>;
35
35
  close(): Promise<void>;
36
36
  }
37
+ export { default } from './extension.js';
37
38
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,yBAAyB,EACzB,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,qBAAqB,GAAG,qBAAqB,GAAG,gBAAgB,GAAG,yBAAyB,CAAC;AAEzG,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAEtE,MAAM,MAAM,cAAc,GAAG,CAC3B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;IACJ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd,KACE,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,CAAC;AAEvE,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,qBAAqB,KAAK,qBAAqB,GAAG,SAAS,CAAC;AAEpG,MAAM,MAAM,uBAAuB,GAAG;IACpC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;CAC7C,CAAC;AAEF,qBAAa,wBAAyB,YAAW,oBAAoB;IAC7D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAC7B;AAED,qBAAa,6BAA8B,YAAW,oBAAoB;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,oBAAoB,EAAE;IAExD,OAAO,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,yBAAyB,EACzB,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,qBAAqB,GAC7B,qBAAqB,GACrB,gBAAgB,GAChB,yBAAyB,CAAC;AAE9B,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAEtE,MAAM,MAAM,cAAc,GAAG,CAC3B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;IACJ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd,KACE,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,CAAC;AAEvE,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,qBAAqB,KAAK,qBAAqB,GAAG,SAAS,CAAC;AAEpG,MAAM,MAAM,uBAAuB,GAAG;IACpC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;CAC7C,CAAC;AAEF,qBAAa,wBAAyB,YAAW,oBAAoB;IAC7D,OAAO,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IACrD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAC7B;AAED,qBAAa,6BAA8B,YAAW,oBAAoB;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,oBAAoB,EAAE;IAExD,OAAO,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B;AAED,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export class NoopRuntimeEventExporter {
2
- async publish() { }
2
+ async publish(_event) { }
3
3
  async flush() { }
4
4
  async close() { }
5
5
  }
@@ -19,4 +19,5 @@ export class CompositeRuntimeEventExporter {
19
19
  await Promise.allSettled(this.exporters.map((exporter) => exporter.close?.()));
20
20
  }
21
21
  }
22
+ export { default } from './extension.js';
22
23
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkCA,MAAM,OAAO,wBAAwB;IACnC,KAAK,CAAC,OAAO,KAAmB,CAAC;IACjC,KAAK,CAAC,KAAK,KAAmB,CAAC;IAC/B,KAAK,CAAC,KAAK,KAAmB,CAAC;CAChC;AAED,MAAM,OAAO,6BAA6B;IACX;IAA7B,YAA6B,SAAiC;QAAjC,cAAS,GAAT,SAAS,CAAwB;IAAG,CAAC;IAElE,KAAK,CAAC,OAAO,CAAC,KAA4B;QACxC,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC;CACF"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAqCA,MAAM,OAAO,wBAAwB;IACnC,KAAK,CAAC,OAAO,CAAC,MAA6B,IAAkB,CAAC;IAC9D,KAAK,CAAC,KAAK,KAAmB,CAAC;IAC/B,KAAK,CAAC,KAAK,KAAmB,CAAC;CAChC;AAED,MAAM,OAAO,6BAA6B;IACX;IAA7B,YAA6B,SAAiC;QAAjC,cAAS,GAAT,SAAS,CAAwB;IAAG,CAAC;IAElE,KAAK,CAAC,OAAO,CAAC,KAA4B;QACxC,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC;CACF;AAED,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC"}