@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 +90 -37
- package/dist/config.d.ts +27 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +13 -0
- package/dist/config.js.map +1 -0
- package/dist/extension.d.ts +3 -0
- package/dist/extension.d.ts.map +1 -0
- package/dist/extension.js +313 -0
- package/dist/extension.js.map +1 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/langfuse.d.ts +4 -25
- package/dist/langfuse.d.ts.map +1 -1
- package/dist/langfuse.js +184 -412
- package/dist/langfuse.js.map +1 -1
- package/dist/otel.d.ts +6 -3
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +32 -9
- package/dist/otel.js.map +1 -1
- package/package.json +38 -3
- package/preview.png +0 -0
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# @amaster.ai/pi-telemetry
|
|
2
2
|
|
|
3
|
+

|
|
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/
|
|
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
|
-
##
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
68
|
+
### Config Fields
|
|
22
69
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
76
|
+
### Langfuse Config
|
|
33
77
|
|
|
34
|
-
|
|
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
|
-
|
|
37
|
-
import { createOtelRuntimeEventExporterFromEnv } from "@amaster.ai/pi-telemetry/otel";
|
|
87
|
+
### OTEL Config
|
|
38
88
|
|
|
39
|
-
|
|
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
|
-
|
|
98
|
+
When the endpoint does not end with `/v1/traces`, the exporter appends `/v1/traces`.
|
|
43
99
|
|
|
44
|
-
|
|
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
|
-
|
|
57
|
-
|
|
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.
|
|
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`.
|
package/dist/config.d.ts
ADDED
|
@@ -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 @@
|
|
|
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
|
|
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:
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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":"
|
|
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"}
|