@senpi/runtime 3.0.6-dev.runtime-phase-2.20260630134327 → 3.0.6-dev.runtime-phase-2.20260630134410
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/actions/llm-decision/anthropic-llm-decision.d.ts +5 -9
- package/dist/actions/llm-decision/anthropic-llm-decision.d.ts.map +1 -1
- package/dist/actions/llm-decision/anthropic-llm-decision.js +6 -86
- package/dist/actions/llm-decision/anthropic-llm-decision.js.map +1 -1
- package/dist/actions/llm-decision/factory.d.ts +0 -6
- package/dist/actions/llm-decision/factory.d.ts.map +1 -1
- package/dist/actions/llm-decision/factory.js +0 -2
- package/dist/actions/llm-decision/factory.js.map +1 -1
- package/dist/actions/llm-decision/openclaw-llm-decision.d.ts.map +1 -1
- package/dist/actions/llm-decision/openclaw-llm-decision.js +20 -0
- package/dist/actions/llm-decision/openclaw-llm-decision.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -11
- package/dist/index.js.map +1 -1
- package/dist/recording/wiring/emitter-factory.d.ts +0 -5
- package/dist/recording/wiring/emitter-factory.d.ts.map +1 -1
- package/dist/recording/wiring/emitter-factory.js +0 -18
- package/dist/recording/wiring/emitter-factory.js.map +1 -1
- package/dist/recording/wiring/index.d.ts +1 -1
- package/dist/recording/wiring/index.d.ts.map +1 -1
- package/dist/recording/wiring/index.js +1 -1
- package/dist/recording/wiring/index.js.map +1 -1
- package/dist/runtime/runtime-schema.d.ts +4 -53
- package/dist/runtime/runtime-schema.d.ts.map +1 -1
- package/dist/runtime/runtime-schema.js +4 -4
- package/dist/runtime/runtime-schema.js.map +1 -1
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +9 -15
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/senpi/client.d.ts +10 -0
- package/dist/senpi/client.d.ts.map +1 -1
- package/dist/senpi/client.js +69 -49
- package/dist/senpi/client.js.map +1 -1
- package/dist/telemetry/metrics.d.ts +47 -0
- package/dist/telemetry/metrics.d.ts.map +1 -0
- package/dist/telemetry/metrics.js +154 -0
- package/dist/telemetry/metrics.js.map +1 -0
- package/dist/telemetry/otel-sdk.d.ts +21 -33
- package/dist/telemetry/otel-sdk.d.ts.map +1 -1
- package/dist/telemetry/otel-sdk.js +77 -50
- package/dist/telemetry/otel-sdk.js.map +1 -1
- package/dist/telemetry/tracing.d.ts +2 -1
- package/dist/telemetry/tracing.d.ts.map +1 -1
- package/dist/telemetry/tracing.js +1 -1
- package/dist/telemetry/tracing.js.map +1 -1
- package/dist/tracking/spans/constants.d.ts +4 -11
- package/dist/tracking/spans/constants.d.ts.map +1 -1
- package/dist/tracking/spans/constants.js +4 -23
- package/dist/tracking/spans/constants.js.map +1 -1
- package/dist/tracking/spans/gen-ai.d.ts +70 -0
- package/dist/tracking/spans/gen-ai.d.ts.map +1 -0
- package/dist/tracking/spans/gen-ai.js +330 -0
- package/dist/tracking/spans/gen-ai.js.map +1 -0
- package/dist/tracking/spans/index.d.ts +6 -8
- package/dist/tracking/spans/index.d.ts.map +1 -1
- package/dist/tracking/spans/index.js +6 -11
- package/dist/tracking/spans/index.js.map +1 -1
- package/dist/tracking/spans/redact-pii.d.ts +18 -20
- package/dist/tracking/spans/redact-pii.d.ts.map +1 -1
- package/dist/tracking/spans/redact-pii.js +30 -29
- package/dist/tracking/spans/redact-pii.js.map +1 -1
- package/dist/tracking/spans/span-hooks.d.ts +0 -17
- package/dist/tracking/spans/span-hooks.d.ts.map +1 -1
- package/dist/tracking/spans/span-hooks.js +407 -207
- package/dist/tracking/spans/span-hooks.js.map +1 -1
- package/package.json +1 -1
- package/dist/tracking/spans/fan-out-span-transport.d.ts +0 -22
- package/dist/tracking/spans/fan-out-span-transport.d.ts.map +0 -1
- package/dist/tracking/spans/fan-out-span-transport.js +0 -49
- package/dist/tracking/spans/fan-out-span-transport.js.map +0 -1
- package/dist/tracking/spans/otel/fit-row-budget.d.ts +0 -22
- package/dist/tracking/spans/otel/fit-row-budget.d.ts.map +0 -1
- package/dist/tracking/spans/otel/fit-row-budget.js +0 -91
- package/dist/tracking/spans/otel/fit-row-budget.js.map +0 -1
- package/dist/tracking/spans/otel/map-span-to-trace-row.d.ts +0 -16
- package/dist/tracking/spans/otel/map-span-to-trace-row.d.ts.map +0 -1
- package/dist/tracking/spans/otel/map-span-to-trace-row.js +0 -227
- package/dist/tracking/spans/otel/map-span-to-trace-row.js.map +0 -1
- package/dist/tracking/spans/otel/recording-span-transport.d.ts +0 -43
- package/dist/tracking/spans/otel/recording-span-transport.d.ts.map +0 -1
- package/dist/tracking/spans/otel/recording-span-transport.js +0 -67
- package/dist/tracking/spans/otel/recording-span-transport.js.map +0 -1
- package/dist/tracking/spans/otel/span-ids.d.ts +0 -22
- package/dist/tracking/spans/otel/span-ids.d.ts.map +0 -1
- package/dist/tracking/spans/otel/span-ids.js +0 -32
- package/dist/tracking/spans/otel/span-ids.js.map +0 -1
- package/dist/tracking/spans/plugin-span-tracker.d.ts +0 -9
- package/dist/tracking/spans/plugin-span-tracker.d.ts.map +0 -1
- package/dist/tracking/spans/plugin-span-tracker.js +0 -115
- package/dist/tracking/spans/plugin-span-tracker.js.map +0 -1
- package/dist/tracking/spans/span-tracker.d.ts +0 -133
- package/dist/tracking/spans/span-tracker.d.ts.map +0 -1
- package/dist/tracking/spans/span-tracker.js +0 -721
- package/dist/tracking/spans/span-tracker.js.map +0 -1
- package/dist/tracking/spans/span-transport.d.ts +0 -71
- package/dist/tracking/spans/span-transport.d.ts.map +0 -1
- package/dist/tracking/spans/span-transport.js +0 -240
- package/dist/tracking/spans/span-transport.js.map +0 -1
- package/dist/tracking/spans/types.d.ts +0 -101
- package/dist/tracking/spans/types.d.ts.map +0 -1
- package/dist/tracking/spans/types.js +0 -6
- package/dist/tracking/spans/types.js.map +0 -1
|
@@ -1,21 +1,17 @@
|
|
|
1
1
|
import type { LlmDecision, LlmDecisionRequest, LlmDecisionResponse } from '../types.js';
|
|
2
|
-
import type { SpanTracker } from '../../tracking/spans/index.js';
|
|
3
2
|
export interface AnthropicLlmDecisionOptions {
|
|
4
3
|
apiKey?: string;
|
|
5
4
|
defaultModel?: string;
|
|
6
|
-
/**
|
|
7
|
-
* Optional SpanTracker for manual span emission. The direct-SDK path
|
|
8
|
-
* bypasses OpenClaw, so we have to capture the LLM call ourselves.
|
|
9
|
-
* When omitted, no spans are emitted (existing behavior preserved).
|
|
10
|
-
*/
|
|
11
|
-
spanTracker?: SpanTracker;
|
|
12
5
|
}
|
|
6
|
+
/**
|
|
7
|
+
* Direct-Anthropic decision path. Retained as a standalone fallback; the production
|
|
8
|
+
* LLM provider is litellm via OpenClaw (see OpenClawLlmDecision), whose hooks emit the
|
|
9
|
+
* gen_ai spans. This path therefore carries no telemetry of its own.
|
|
10
|
+
*/
|
|
13
11
|
export declare class AnthropicLlmDecision implements LlmDecision {
|
|
14
12
|
private readonly client;
|
|
15
13
|
private readonly defaultModel;
|
|
16
|
-
private readonly spanTracker;
|
|
17
14
|
constructor(options?: AnthropicLlmDecisionOptions);
|
|
18
15
|
decide<T>(request: LlmDecisionRequest): Promise<LlmDecisionResponse<T>>;
|
|
19
|
-
private emitSpan;
|
|
20
16
|
}
|
|
21
17
|
//# sourceMappingURL=anthropic-llm-decision.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-llm-decision.d.ts","sourceRoot":"","sources":["../../../src/actions/llm-decision/anthropic-llm-decision.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"anthropic-llm-decision.d.ts","sourceRoot":"","sources":["../../../src/actions/llm-decision/anthropic-llm-decision.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGxF,MAAM,WAAW,2BAA2B;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAKD;;;;GAIG;AACH,qBAAa,oBAAqB,YAAW,WAAW;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,OAAO,CAAC,EAAE,2BAA2B;IAM3C,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;CA+C9E"}
|
|
@@ -1,32 +1,25 @@
|
|
|
1
1
|
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
-
import { randomUUID } from 'node:crypto';
|
|
3
2
|
import { ACTION_DECISION_SCHEMA, SYSTEM_PROMPT } from './shared.js';
|
|
4
|
-
import { getTrackingContext } from '../../tracking/context.js';
|
|
5
|
-
import { createLogger } from '../../utils/logger.js';
|
|
6
|
-
const logger = createLogger('[actions][anthropic-llm-decision]');
|
|
7
3
|
const DEFAULT_MODEL = 'claude-sonnet-4-20250514';
|
|
8
4
|
const DEFAULT_MAX_TOKENS = 1024;
|
|
5
|
+
/**
|
|
6
|
+
* Direct-Anthropic decision path. Retained as a standalone fallback; the production
|
|
7
|
+
* LLM provider is litellm via OpenClaw (see OpenClawLlmDecision), whose hooks emit the
|
|
8
|
+
* gen_ai spans. This path therefore carries no telemetry of its own.
|
|
9
|
+
*/
|
|
9
10
|
export class AnthropicLlmDecision {
|
|
10
11
|
client;
|
|
11
12
|
defaultModel;
|
|
12
|
-
spanTracker;
|
|
13
13
|
constructor(options) {
|
|
14
14
|
const apiKey = options?.apiKey?.replace(/\s+/g, '');
|
|
15
15
|
this.client = new Anthropic(apiKey ? { apiKey } : undefined);
|
|
16
16
|
this.defaultModel = options?.defaultModel ?? DEFAULT_MODEL;
|
|
17
|
-
this.spanTracker = options?.spanTracker ?? null;
|
|
18
17
|
}
|
|
19
18
|
async decide(request) {
|
|
20
19
|
const startedAt = Date.now();
|
|
21
20
|
const model = request.model ?? this.defaultModel;
|
|
22
21
|
const userContent = `## Task\n${request.prompt}\n\n## Context\n${JSON.stringify(request.context, null, 2)}`;
|
|
23
|
-
// Per-call synthetic ids: session_key groups all direct-path spans from
|
|
24
|
-
// this runtime boot; run_id makes each call individually identifiable.
|
|
25
|
-
const ctx = getTrackingContext();
|
|
26
|
-
const synthSessionKey = `direct:${ctx?.runtimeBootId ?? 'unknown'}`;
|
|
27
|
-
const synthRunId = `direct:${randomUUID()}`;
|
|
28
22
|
let response;
|
|
29
|
-
let errorForSpan;
|
|
30
23
|
try {
|
|
31
24
|
response = await this.client.messages.create({
|
|
32
25
|
model,
|
|
@@ -45,48 +38,15 @@ export class AnthropicLlmDecision {
|
|
|
45
38
|
});
|
|
46
39
|
}
|
|
47
40
|
catch (error) {
|
|
48
|
-
errorForSpan = error;
|
|
49
|
-
// Capture the failed call as a span before rethrowing.
|
|
50
|
-
this.emitSpan({
|
|
51
|
-
startedAt,
|
|
52
|
-
endedAt: Date.now(),
|
|
53
|
-
model,
|
|
54
|
-
synthSessionKey,
|
|
55
|
-
synthRunId,
|
|
56
|
-
userContent,
|
|
57
|
-
error: error,
|
|
58
|
-
});
|
|
59
41
|
throw classifyAnthropicError(error);
|
|
60
42
|
}
|
|
61
|
-
const
|
|
62
|
-
const latencyMs = endedAt - startedAt;
|
|
43
|
+
const latencyMs = Date.now() - startedAt;
|
|
63
44
|
const toolBlock = response.content.find((block) => block.type === 'tool_use');
|
|
64
45
|
if (!toolBlock) {
|
|
65
|
-
// No tool_use block — capture as a span-with-error before throwing.
|
|
66
|
-
this.emitSpan({
|
|
67
|
-
startedAt,
|
|
68
|
-
endedAt,
|
|
69
|
-
model,
|
|
70
|
-
synthSessionKey,
|
|
71
|
-
synthRunId,
|
|
72
|
-
userContent,
|
|
73
|
-
response,
|
|
74
|
-
error: 'Anthropic response contained no tool_use block',
|
|
75
|
-
});
|
|
76
46
|
throw new Error('Anthropic response contained no tool_use block');
|
|
77
47
|
}
|
|
78
48
|
const decision = toolBlock.input;
|
|
79
49
|
const tokensUsed = response.usage.input_tokens + response.usage.output_tokens;
|
|
80
|
-
this.emitSpan({
|
|
81
|
-
startedAt,
|
|
82
|
-
endedAt,
|
|
83
|
-
model,
|
|
84
|
-
synthSessionKey,
|
|
85
|
-
synthRunId,
|
|
86
|
-
userContent,
|
|
87
|
-
response,
|
|
88
|
-
});
|
|
89
|
-
void errorForSpan; // (kept for symmetry — unused in success path)
|
|
90
50
|
return {
|
|
91
51
|
decision,
|
|
92
52
|
rawResponse: JSON.stringify(response.content),
|
|
@@ -94,46 +54,6 @@ export class AnthropicLlmDecision {
|
|
|
94
54
|
latencyMs,
|
|
95
55
|
};
|
|
96
56
|
}
|
|
97
|
-
emitSpan(args) {
|
|
98
|
-
// This method is invoked inside catch blocks before rethrow and inside
|
|
99
|
-
// success paths before return. If it throws, it would mask the real
|
|
100
|
-
// outcome — replacing the Anthropic error with our span-emission error,
|
|
101
|
-
// or turning a successful decision into a failure. Wrap the body so any
|
|
102
|
-
// throw here (serialization, tracker bug, etc.) is logged and swallowed.
|
|
103
|
-
try {
|
|
104
|
-
if (!this.spanTracker)
|
|
105
|
-
return;
|
|
106
|
-
const ctx = getTrackingContext();
|
|
107
|
-
const usage = args.response?.usage;
|
|
108
|
-
this.spanTracker.captureLlmSpan({
|
|
109
|
-
sessionKey: args.synthSessionKey,
|
|
110
|
-
runId: args.synthRunId,
|
|
111
|
-
startedAt: args.startedAt,
|
|
112
|
-
endedAt: args.endedAt,
|
|
113
|
-
model: args.response?.model ?? args.model,
|
|
114
|
-
tokensIn: usage?.input_tokens ?? null,
|
|
115
|
-
tokensOut: usage?.output_tokens ?? null,
|
|
116
|
-
costUsd: null,
|
|
117
|
-
input: {
|
|
118
|
-
system: SYSTEM_PROMPT,
|
|
119
|
-
messages: [{ role: 'user', content: args.userContent }],
|
|
120
|
-
},
|
|
121
|
-
...(args.response ? { output: { content: args.response.content } } : {}),
|
|
122
|
-
...(args.error !== undefined ? { error: args.error } : {}),
|
|
123
|
-
correlationId: ctx?.correlationId ?? null,
|
|
124
|
-
address: ctx?.address ?? null,
|
|
125
|
-
recipeName: ctx?.recipeName ?? null,
|
|
126
|
-
runtimeId: ctx?.runtimeId ?? null,
|
|
127
|
-
runtimeVersion: ctx?.runtimeVersion ?? null,
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
catch (spanErr) {
|
|
131
|
-
logger.warn('emitSpan threw — original call outcome preserved', spanErr, {
|
|
132
|
-
model: args.model,
|
|
133
|
-
synthRunId: args.synthRunId,
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
57
|
}
|
|
138
58
|
// ─── Error classification ───────────────────────────────────────────────────
|
|
139
59
|
function classifyAnthropicError(error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-llm-decision.js","sourceRoot":"","sources":["../../../src/actions/llm-decision/anthropic-llm-decision.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"anthropic-llm-decision.js","sourceRoot":"","sources":["../../../src/actions/llm-decision/anthropic-llm-decision.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
import type { LlmDecision } from '../types.js';
|
|
2
|
-
import { type SpanTracker } from '../../tracking/spans/index.js';
|
|
3
2
|
export interface LlmDecisionOptions {
|
|
4
3
|
provider?: 'anthropic' | 'openclaw';
|
|
5
4
|
anthropicApiKey?: string;
|
|
6
5
|
defaultModel?: string;
|
|
7
6
|
gatewayUrl?: string;
|
|
8
7
|
gatewayToken?: string;
|
|
9
|
-
/**
|
|
10
|
-
* Optional SpanTracker; when present, the direct-SDK path emits LLM spans
|
|
11
|
-
* for every call. The OpenClaw path uses hook-based capture and ignores this.
|
|
12
|
-
*/
|
|
13
|
-
spanTracker?: SpanTracker;
|
|
14
8
|
}
|
|
15
9
|
/**
|
|
16
10
|
* Create an LlmDecision client based on the given options.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/actions/llm-decision/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/actions/llm-decision/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW,CAoB/E"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { getDefaultSpanTracker, } from '../../tracking/spans/index.js';
|
|
2
1
|
import { AnthropicLlmDecision } from './anthropic-llm-decision.js';
|
|
3
2
|
import { OpenClawLlmDecision } from './openclaw-llm-decision.js';
|
|
4
3
|
/**
|
|
@@ -16,7 +15,6 @@ export function createLlmDecision(options = {}) {
|
|
|
16
15
|
return new AnthropicLlmDecision({
|
|
17
16
|
apiKey: options.anthropicApiKey,
|
|
18
17
|
defaultModel: options.defaultModel,
|
|
19
|
-
spanTracker: options.spanTracker ?? getDefaultSpanTracker() ?? undefined,
|
|
20
18
|
});
|
|
21
19
|
case 'openclaw':
|
|
22
20
|
return new OpenClawLlmDecision({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/actions/llm-decision/factory.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/actions/llm-decision/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAUjE;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAA8B,EAAE;IAChE,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ;QAChB,CAAC,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAExF,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,IAAI,oBAAoB,CAAC;gBAC9B,MAAM,EAAE,OAAO,CAAC,eAAe;gBAC/B,YAAY,EAAE,OAAO,CAAC,YAAY;aACnC,CAAC,CAAC;QACL,KAAK,UAAU;YACb,OAAO,IAAI,mBAAmB,CAAC;gBAC7B,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,YAAY,EAAE,OAAO,CAAC,YAAY;aACnC,CAAC,CAAC;QACL;YACE,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAkB,EAAE,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw-llm-decision.d.ts","sourceRoot":"","sources":["../../../src/actions/llm-decision/openclaw-llm-decision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"openclaw-llm-decision.d.ts","sourceRoot":"","sources":["../../../src/actions/llm-decision/openclaw-llm-decision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAuBxF,MAAM,WAAW,0BAA0B;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CASjG;AAED,qBAAa,mBAAoB,YAAW,WAAW;IACrD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;gBAE3B,OAAO,CAAC,EAAE,0BAA0B;IAM1C,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;CAyF9E"}
|
|
@@ -4,6 +4,7 @@ import { getTrackingContext } from '../../tracking/context.js';
|
|
|
4
4
|
import { HEADER_ADDRESS, HEADER_CORRELATION_ID, HEADER_RECIPE_NAME, HEADER_RUNTIME_ID, HEADER_RUNTIME_VERSION, } from '../../tracking/spans/constants.js';
|
|
5
5
|
import { withRetry } from '../../utils/retry.js';
|
|
6
6
|
import { isRetryableDecisionError } from '../../runtime/decision-errors.js';
|
|
7
|
+
import { context as otelContext, propagation } from '@opentelemetry/api';
|
|
7
8
|
/** Max retries (total attempts = MAX_DECISION_RETRIES + 1) for transient llm-task failures. */
|
|
8
9
|
const MAX_DECISION_RETRIES = 2;
|
|
9
10
|
/** Fixed delay between retry attempts (ms). Backoff is intentionally simple for now. */
|
|
@@ -99,6 +100,10 @@ export class OpenClawLlmDecision {
|
|
|
99
100
|
'Authorization': `Bearer ${token}`,
|
|
100
101
|
'Content-Type': 'application/json',
|
|
101
102
|
...buildSenpiTrackingHeaders(),
|
|
103
|
+
// W3C traceparent: lets the gateway-side hook parent the gen_ai span
|
|
104
|
+
// under this signal's trading trace (one unified waterfall). No-op
|
|
105
|
+
// when no span is active (the API injects nothing).
|
|
106
|
+
...buildTraceparentHeaders(),
|
|
102
107
|
},
|
|
103
108
|
body: JSON.stringify({ tool: 'llm-task', args }),
|
|
104
109
|
});
|
|
@@ -159,4 +164,19 @@ function buildSenpiTrackingHeaders() {
|
|
|
159
164
|
headers[HEADER_RUNTIME_VERSION] = ctx.runtimeVersion;
|
|
160
165
|
return headers;
|
|
161
166
|
}
|
|
167
|
+
/**
|
|
168
|
+
* Inject the active span context as W3C `traceparent`/`tracestate` headers. Returns
|
|
169
|
+
* an empty record when no span is active (e.g. telemetry off). Best-effort — a
|
|
170
|
+
* propagation failure must never break the decision call.
|
|
171
|
+
*/
|
|
172
|
+
function buildTraceparentHeaders() {
|
|
173
|
+
try {
|
|
174
|
+
const carrier = {};
|
|
175
|
+
propagation.inject(otelContext.active(), carrier);
|
|
176
|
+
return carrier;
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
return {};
|
|
180
|
+
}
|
|
181
|
+
}
|
|
162
182
|
//# sourceMappingURL=openclaw-llm-decision.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw-llm-decision.js","sourceRoot":"","sources":["../../../src/actions/llm-decision/openclaw-llm-decision.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"openclaw-llm-decision.js","sourceRoot":"","sources":["../../../src/actions/llm-decision/openclaw-llm-decision.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -11,8 +11,6 @@
|
|
|
11
11
|
* that reason. Keeping every export in a single file (this one) avoids
|
|
12
12
|
* the loader's relative-import path entirely.
|
|
13
13
|
*/
|
|
14
|
-
// OpenTelemetry SDK init runs from `Runtime.start()` (see src/telemetry/otel-sdk.ts),
|
|
15
|
-
// not here — it needs the runtime's config/identity, which don't exist this early.
|
|
16
14
|
import { readFileSync } from "node:fs";
|
|
17
15
|
import { join, dirname } from "node:path";
|
|
18
16
|
import { SenpiClient } from "./senpi/client.js";
|
|
@@ -35,7 +33,9 @@ import { resolvePackageName } from "./runtime/auto-update/resolve-package-name.j
|
|
|
35
33
|
import { runOpenClawPluginsUpdate } from "./runtime/auto-update/run-update-command.js";
|
|
36
34
|
import { BUS_EVENT_MAP } from "./tracking/constants.js";
|
|
37
35
|
import { createPluginEventTracker } from "./tracking/plugin-event-tracker.js";
|
|
38
|
-
import {
|
|
36
|
+
import { registerSpanHooks } from "./tracking/spans/index.js";
|
|
37
|
+
import { initDefaultPiiRedactor } from "./tracking/spans/redact-pii.js";
|
|
38
|
+
import { initOtelSdk } from "./telemetry/otel-sdk.js";
|
|
39
39
|
import { getLogLevel, getLogLevelSource, parseLogLevel, setErrorNotifier, setLogLevel, } from "./utils/logger.js";
|
|
40
40
|
import { ExternalScannerIngestError, } from "./scanners/external-scanner-receiver.js";
|
|
41
41
|
import { createLogger } from "./utils/logger.js";
|
|
@@ -262,15 +262,27 @@ const senpiRuntimePlugin = {
|
|
|
262
262
|
// (lazy connect — the R7 boot-resilience path). No secret is logged, only presence + url.
|
|
263
263
|
pluginLogger.info(`[senpi-runtime] MCP transport: ${mcpTransport ? "mcpTransport (gateway-injected)" : "apiKey (self-managed SenpiClient)"}; mcpUrl=${process.env.SENPI_MCP_URL ?? "(default)"}`);
|
|
264
264
|
const pluginEventTracker = createPluginEventTracker(apiKey ?? process.env.SENPI_AUTH_TOKEN ?? process.env.SENPI_API_KEY);
|
|
265
|
-
//
|
|
266
|
-
//
|
|
267
|
-
//
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
265
|
+
// Register the process-wide default PII redactor at boot (always on, no env gate)
|
|
266
|
+
// so `logger.event()` redact fields are scrubbed on the live path. Fire-and-forget;
|
|
267
|
+
// see initDefaultPiiRedactor in tracking/spans/redact-pii.ts.
|
|
268
|
+
initDefaultPiiRedactor();
|
|
269
|
+
// OTel SDK stand-up at process scope. register() must stay synchronous (the gateway
|
|
270
|
+
// loader doesn't await it; awaiting init would defer the registrations below), so it's
|
|
271
|
+
// fire-and-forget — the hooks resolve their tracer lazily at fire time, by which point
|
|
272
|
+
// init has run. Self-guarding; see src/telemetry/otel-sdk.ts.
|
|
273
|
+
void initOtelSdk({
|
|
274
|
+
userToken: apiKey ?? process.env.SENPI_AUTH_TOKEN ?? process.env.SENPI_API_KEY,
|
|
275
|
+
serviceVersion: VERSION,
|
|
276
|
+
}).catch((err) => {
|
|
277
|
+
pluginLogger.warn("[senpi-runtime] OTel SDK init failed", {
|
|
278
|
+
err: err instanceof Error ? err.message : String(err),
|
|
279
|
+
});
|
|
280
|
+
});
|
|
281
|
+
// Agent telemetry — gateway hooks emit gen_ai spans (llm/tool/subagent) through
|
|
282
|
+
// the shared tracer; on-site MCP calls emit their own spans from SenpiClient.
|
|
271
283
|
try {
|
|
272
|
-
registerSpanHooks({ api
|
|
273
|
-
pluginLogger.info("[senpi-runtime] span hooks registered (9 hooks)");
|
|
284
|
+
registerSpanHooks({ api });
|
|
285
|
+
pluginLogger.info("[senpi-runtime] gen_ai span hooks registered (9 hooks)");
|
|
274
286
|
}
|
|
275
287
|
catch (err) {
|
|
276
288
|
pluginLogger.warn("[senpi-runtime] failed to register span hooks", {
|