@qodo/sdk 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/qodo-agent/SKILL.md +233 -3
- package/.claude/skills/qodo-agent/assets/programmatic-agent.ts +74 -1
- package/.claude/skills/qodo-agent/references/common-issues.md +79 -0
- package/dist/api/agent.d.ts.map +1 -1
- package/dist/api/agent.js +13 -8
- package/dist/api/agent.js.map +1 -1
- package/dist/api/http.d.ts.map +1 -1
- package/dist/api/http.js +5 -2
- package/dist/api/http.js.map +1 -1
- package/dist/api/websocket.d.ts.map +1 -1
- package/dist/api/websocket.js +6 -3
- package/dist/api/websocket.js.map +1 -1
- package/dist/auth/index.d.ts +18 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +69 -10
- package/dist/auth/index.js.map +1 -1
- package/dist/context/messageManager.d.ts +1 -1
- package/dist/context/messageManager.d.ts.map +1 -1
- package/dist/context/messageManager.js +1 -1
- package/dist/context/messageManager.js.map +1 -1
- package/dist/index.d.ts +21 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/MCPManager.js +2 -2
- package/dist/mcp/MCPManager.js.map +1 -1
- package/dist/mcp/baseServer.js +1 -1
- package/dist/mcp/baseServer.js.map +1 -1
- package/dist/mcp/servers/ripgrep.d.ts.map +1 -1
- package/dist/mcp/servers/ripgrep.js +6 -2
- package/dist/mcp/servers/ripgrep.js.map +1 -1
- package/dist/mcp/servers/shell.js +1 -1
- package/dist/mcp/servers/shell.js.map +1 -1
- package/dist/mcp/serversRegistry.d.ts.map +1 -1
- package/dist/mcp/serversRegistry.js +7 -1
- package/dist/mcp/serversRegistry.js.map +1 -1
- package/dist/mcp/toolProcessor.d.ts +44 -4
- package/dist/mcp/toolProcessor.d.ts.map +1 -1
- package/dist/mcp/toolProcessor.js +255 -20
- package/dist/mcp/toolProcessor.js.map +1 -1
- package/dist/messages/index.d.ts +8 -0
- package/dist/messages/index.d.ts.map +1 -0
- package/dist/messages/index.js +7 -0
- package/dist/messages/index.js.map +1 -0
- package/dist/messages/openai.d.ts +26 -0
- package/dist/messages/openai.d.ts.map +1 -0
- package/dist/messages/openai.js +55 -0
- package/dist/messages/openai.js.map +1 -0
- package/dist/messages/types.d.ts +73 -0
- package/dist/messages/types.d.ts.map +1 -0
- package/dist/messages/types.js +78 -0
- package/dist/messages/types.js.map +1 -0
- package/dist/parser/index.js +3 -3
- package/dist/parser/index.js.map +1 -1
- package/dist/sdk/QodoSDK.d.ts +30 -10
- package/dist/sdk/QodoSDK.d.ts.map +1 -1
- package/dist/sdk/QodoSDK.js +165 -33
- package/dist/sdk/QodoSDK.js.map +1 -1
- package/dist/sdk/artifacts.d.ts +156 -0
- package/dist/sdk/artifacts.d.ts.map +1 -0
- package/dist/sdk/artifacts.js +166 -0
- package/dist/sdk/artifacts.js.map +1 -0
- package/dist/sdk/bootstrap.d.ts.map +1 -1
- package/dist/sdk/bootstrap.js +11 -4
- package/dist/sdk/bootstrap.js.map +1 -1
- package/dist/sdk/discovery.js +1 -1
- package/dist/sdk/discovery.js.map +1 -1
- package/dist/sdk/events.d.ts +46 -1
- package/dist/sdk/events.d.ts.map +1 -1
- package/dist/sdk/events.js +6 -0
- package/dist/sdk/events.js.map +1 -1
- package/dist/sdk/middleware.d.ts +59 -0
- package/dist/sdk/middleware.d.ts.map +1 -0
- package/dist/sdk/middleware.js +69 -0
- package/dist/sdk/middleware.js.map +1 -0
- package/dist/sdk/pipeline/PipelineBuilder.d.ts +61 -0
- package/dist/sdk/pipeline/PipelineBuilder.d.ts.map +1 -0
- package/dist/sdk/pipeline/PipelineBuilder.js +91 -0
- package/dist/sdk/pipeline/PipelineBuilder.js.map +1 -0
- package/dist/sdk/pipeline/PipelineRunner.d.ts +28 -0
- package/dist/sdk/pipeline/PipelineRunner.d.ts.map +1 -0
- package/dist/sdk/pipeline/PipelineRunner.js +210 -0
- package/dist/sdk/pipeline/PipelineRunner.js.map +1 -0
- package/dist/sdk/pipeline/compiler.d.ts +24 -0
- package/dist/sdk/pipeline/compiler.d.ts.map +1 -0
- package/dist/sdk/pipeline/compiler.js +197 -0
- package/dist/sdk/pipeline/compiler.js.map +1 -0
- package/dist/sdk/pipeline/declarative.d.ts +34 -0
- package/dist/sdk/pipeline/declarative.d.ts.map +1 -0
- package/dist/sdk/pipeline/declarative.js +9 -0
- package/dist/sdk/pipeline/declarative.js.map +1 -0
- package/dist/sdk/pipeline/index.d.ts +20 -0
- package/dist/sdk/pipeline/index.d.ts.map +1 -0
- package/dist/sdk/pipeline/index.js +19 -0
- package/dist/sdk/pipeline/index.js.map +1 -0
- package/dist/sdk/pipeline/types.d.ts +75 -0
- package/dist/sdk/pipeline/types.d.ts.map +1 -0
- package/dist/sdk/pipeline/types.js +10 -0
- package/dist/sdk/pipeline/types.js.map +1 -0
- package/dist/sdk/policies.d.ts +163 -0
- package/dist/sdk/policies.d.ts.map +1 -0
- package/dist/sdk/policies.js +243 -0
- package/dist/sdk/policies.js.map +1 -0
- package/dist/sdk/runner/AgentRunner.js +5 -5
- package/dist/sdk/runner/AgentRunner.js.map +1 -1
- package/dist/sdk/runner/finalize.d.ts +47 -0
- package/dist/sdk/runner/finalize.d.ts.map +1 -1
- package/dist/sdk/runner/finalize.js +42 -2
- package/dist/sdk/runner/finalize.js.map +1 -1
- package/dist/sdk/runner/formats.d.ts +1 -1
- package/dist/sdk/runner/formats.d.ts.map +1 -1
- package/dist/sdk/runner/formats.js +22 -37
- package/dist/sdk/runner/formats.js.map +1 -1
- package/dist/sdk/runner/progress.d.ts +1 -1
- package/dist/sdk/runner/progress.d.ts.map +1 -1
- package/dist/sdk/runner/progress.js +1 -1
- package/dist/sdk/runner/progress.js.map +1 -1
- package/dist/session/SessionContext.d.ts +1 -0
- package/dist/session/SessionContext.d.ts.map +1 -1
- package/dist/session/SessionContext.js +3 -0
- package/dist/session/SessionContext.js.map +1 -1
- package/dist/session/environment.d.ts +16 -6
- package/dist/session/environment.d.ts.map +1 -1
- package/dist/session/environment.js.map +1 -1
- package/dist/session/serverData.d.ts.map +1 -1
- package/dist/session/serverData.js +21 -3
- package/dist/session/serverData.js.map +1 -1
- package/dist/tracing/PipelineTracer.d.ts +37 -0
- package/dist/tracing/PipelineTracer.d.ts.map +1 -0
- package/dist/tracing/PipelineTracer.js +64 -0
- package/dist/tracing/PipelineTracer.js.map +1 -0
- package/dist/tracing/SdkTracer.d.ts +91 -0
- package/dist/tracing/SdkTracer.d.ts.map +1 -0
- package/dist/tracing/SdkTracer.js +243 -0
- package/dist/tracing/SdkTracer.js.map +1 -0
- package/dist/tracing/index.d.ts +6 -0
- package/dist/tracing/index.d.ts.map +1 -0
- package/dist/tracing/index.js +3 -0
- package/dist/tracing/index.js.map +1 -0
- package/dist/tracing/pipelineHelpers.d.ts +20 -0
- package/dist/tracing/pipelineHelpers.d.ts.map +1 -0
- package/dist/tracing/pipelineHelpers.js +140 -0
- package/dist/tracing/pipelineHelpers.js.map +1 -0
- package/dist/tracing/types.d.ts +46 -0
- package/dist/tracing/types.d.ts.map +1 -0
- package/dist/tracing/types.js +9 -0
- package/dist/tracing/types.js.map +1 -0
- package/package.json +10 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PipelineTracer.d.ts","sourceRoot":"","sources":["../../src/tracing/PipelineTracer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAuC,MAAM,mBAAmB,CAAC;AACtF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAW,MAAM,0BAA0B,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAyB,MAAM,YAAY,CAAC;AAEjE,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CAC5D;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,EAChH,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,EACjC,YAAY,EAAE,KAAK,EACnB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAkDjC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipeline-level tracing adapter.
|
|
3
|
+
*
|
|
4
|
+
* Creates a parent span for the entire pipeline execution, with
|
|
5
|
+
* child spans for each step (sequential or parallel). Tool-level
|
|
6
|
+
* spans from SdkTracer nest inside the step spans automatically
|
|
7
|
+
* when using OTel context propagation.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
*
|
|
11
|
+
* import * as otel from '@opentelemetry/api';
|
|
12
|
+
* import { createSdkTracer, tracePipeline } from '@qodo/sdk';
|
|
13
|
+
*
|
|
14
|
+
* const result = await tracePipeline(otel, sdk, pipeline, initialState);
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Execute a pipeline with OTel tracing.
|
|
18
|
+
*
|
|
19
|
+
* Creates a root span for the pipeline, and child spans for each step.
|
|
20
|
+
* This is a convenience wrapper around runPipeline that adds tracing.
|
|
21
|
+
*/
|
|
22
|
+
export async function tracePipeline(otel, sdk, pipeline, initialState, options) {
|
|
23
|
+
// Lazy import to avoid circular dependency
|
|
24
|
+
const { runPipeline: runPipelineFn } = await import('../sdk/pipeline/PipelineRunner.js');
|
|
25
|
+
const { isParallelGroup, executeStepWithTracing, executeParallelGroupWithTracing } = await import('./pipelineHelpers.js');
|
|
26
|
+
const tracer = otel.trace.getTracer(options?.tracerName ?? '@qodo/sdk');
|
|
27
|
+
const rootSpan = tracer.startSpan('qodo.pipeline', {
|
|
28
|
+
attributes: {
|
|
29
|
+
'qodo.pipeline.step_count': pipeline.entries.length,
|
|
30
|
+
...(options?.rootAttributes ?? {}),
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
const rootContext = otel.trace.setSpan(otel.context.active(), rootSpan);
|
|
34
|
+
try {
|
|
35
|
+
// State starts as TInit and accumulates step outputs to become TState at runtime
|
|
36
|
+
let state = { ...initialState };
|
|
37
|
+
const stepLogs = [];
|
|
38
|
+
for (const entry of pipeline.entries) {
|
|
39
|
+
if (isParallelGroup(entry)) {
|
|
40
|
+
const { newState, logs } = await executeParallelGroupWithTracing(otel, tracer, rootContext, sdk, entry, state);
|
|
41
|
+
state = { ...state, ...newState };
|
|
42
|
+
stepLogs.push(...logs);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const { newState, log } = await executeStepWithTracing(otel, tracer, rootContext, sdk, entry, state);
|
|
46
|
+
state = { ...state, ...newState };
|
|
47
|
+
stepLogs.push(log);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
rootSpan.setAttribute('qodo.pipeline.success', true);
|
|
51
|
+
rootSpan.setStatus({ code: otel.SpanStatusCode.OK });
|
|
52
|
+
rootSpan.end();
|
|
53
|
+
return { state, steps: stepLogs };
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
rootSpan.setAttribute('qodo.pipeline.success', false);
|
|
57
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
58
|
+
rootSpan.setStatus({ code: otel.SpanStatusCode.ERROR, message });
|
|
59
|
+
rootSpan.recordException(err instanceof Error ? err : new Error(message));
|
|
60
|
+
rootSpan.end();
|
|
61
|
+
throw err;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=PipelineTracer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PipelineTracer.js","sourceRoot":"","sources":["../../src/tracing/PipelineTracer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTelemetry tracing adapter for @qodo/sdk.
|
|
3
|
+
*
|
|
4
|
+
* Consumes the SDK event stream and produces OTel spans:
|
|
5
|
+
*
|
|
6
|
+
* - One root span per sdk.run() / pipeline execution
|
|
7
|
+
* - Child spans per tool call (ToolRequested -> ToolExecuted)
|
|
8
|
+
* - Error recording on sdk.error and tool failures
|
|
9
|
+
* - Span attributes: tool_name, server_name, approved, dry_run, model, etc.
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
*
|
|
13
|
+
* import * as otel from '@opentelemetry/api';
|
|
14
|
+
* import { createSdkTracer } from '@qodo/sdk';
|
|
15
|
+
*
|
|
16
|
+
* const tracer = createSdkTracer(otel);
|
|
17
|
+
*
|
|
18
|
+
* for await (const ev of sdk.stream('review')) {
|
|
19
|
+
* tracer.onEvent(ev);
|
|
20
|
+
* }
|
|
21
|
+
* // Or use the stream wrapper:
|
|
22
|
+
* for await (const ev of tracer.wrapStream(sdk.stream('review'))) {
|
|
23
|
+
* // events pass through unchanged
|
|
24
|
+
* }
|
|
25
|
+
*/
|
|
26
|
+
import type { QodoSdkEvent } from '../sdk/events.js';
|
|
27
|
+
import type { OTelAPI } from './types.js';
|
|
28
|
+
export interface SdkTracerOptions {
|
|
29
|
+
/**
|
|
30
|
+
* Custom tracer name (default: '@qodo/sdk').
|
|
31
|
+
*/
|
|
32
|
+
tracerName?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Tracer version (default: SDK version from events).
|
|
35
|
+
*/
|
|
36
|
+
tracerVersion?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Additional attributes to add to every root span.
|
|
39
|
+
*/
|
|
40
|
+
rootAttributes?: Record<string, string | number | boolean>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Stateful tracing adapter. Tracks in-flight spans by run_id and tool_call_id.
|
|
44
|
+
*/
|
|
45
|
+
export declare class SdkTracer {
|
|
46
|
+
private readonly otel;
|
|
47
|
+
private readonly tracer;
|
|
48
|
+
private readonly rootAttributes;
|
|
49
|
+
private readonly runSpans;
|
|
50
|
+
private readonly toolSpans;
|
|
51
|
+
constructor(otel: OTelAPI, options?: SdkTracerOptions);
|
|
52
|
+
/**
|
|
53
|
+
* Process a single SDK event and update tracing state.
|
|
54
|
+
*
|
|
55
|
+
* Call this for each event from sdk.stream() or as an event handler.
|
|
56
|
+
*/
|
|
57
|
+
onEvent(ev: QodoSdkEvent): void;
|
|
58
|
+
/**
|
|
59
|
+
* Wrap an async generator, processing each event for tracing and yielding it unchanged.
|
|
60
|
+
*
|
|
61
|
+
* This is the recommended way to integrate tracing with sdk.stream():
|
|
62
|
+
*
|
|
63
|
+
* for await (const ev of tracer.wrapStream(sdk.stream('cmd'))) {
|
|
64
|
+
* // process events as usual
|
|
65
|
+
* }
|
|
66
|
+
*/
|
|
67
|
+
wrapStream(stream: AsyncGenerator<QodoSdkEvent, void, unknown>): AsyncGenerator<QodoSdkEvent, void, unknown>;
|
|
68
|
+
/**
|
|
69
|
+
* End all in-flight spans. Call this if you need to force-close tracing
|
|
70
|
+
* (e.g., on process exit or error recovery).
|
|
71
|
+
*/
|
|
72
|
+
flush(): void;
|
|
73
|
+
private onRunStarted;
|
|
74
|
+
private onToolRequested;
|
|
75
|
+
private onToolApproved;
|
|
76
|
+
private onToolExecuted;
|
|
77
|
+
private onError;
|
|
78
|
+
private onFinal;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Factory function to create an SdkTracer.
|
|
82
|
+
*
|
|
83
|
+
* Usage:
|
|
84
|
+
* import * as otel from '@opentelemetry/api';
|
|
85
|
+
* import { createSdkTracer } from '@qodo/sdk';
|
|
86
|
+
*
|
|
87
|
+
* const tracer = createSdkTracer(otel);
|
|
88
|
+
* for await (const ev of tracer.wrapStream(sdk.stream('review'))) { ... }
|
|
89
|
+
*/
|
|
90
|
+
export declare function createSdkTracer(otel: OTelAPI, options?: SdkTracerOptions): SdkTracer;
|
|
91
|
+
//# sourceMappingURL=SdkTracer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SdkTracer.d.ts","sourceRoot":"","sources":["../../src/tracing/SdkTracer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAqC,MAAM,YAAY,CAAC;AAI7E,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CAC5D;AAED;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4C;IAG3E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+D;IAGxF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;gBAE7C,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,gBAAgB;IASrD;;;;OAIG;IACH,OAAO,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI;IAwB/B;;;;;;;;OAQG;IACI,UAAU,CACf,MAAM,EAAE,cAAc,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,GAClD,cAAc,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC;IAY9C;;;OAGG;IACH,KAAK,IAAI,IAAI;IAkBb,OAAO,CAAC,YAAY;IA4BpB,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,cAAc;IAwBtB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,OAAO;CAgChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAEpF"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTelemetry tracing adapter for @qodo/sdk.
|
|
3
|
+
*
|
|
4
|
+
* Consumes the SDK event stream and produces OTel spans:
|
|
5
|
+
*
|
|
6
|
+
* - One root span per sdk.run() / pipeline execution
|
|
7
|
+
* - Child spans per tool call (ToolRequested -> ToolExecuted)
|
|
8
|
+
* - Error recording on sdk.error and tool failures
|
|
9
|
+
* - Span attributes: tool_name, server_name, approved, dry_run, model, etc.
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
*
|
|
13
|
+
* import * as otel from '@opentelemetry/api';
|
|
14
|
+
* import { createSdkTracer } from '@qodo/sdk';
|
|
15
|
+
*
|
|
16
|
+
* const tracer = createSdkTracer(otel);
|
|
17
|
+
*
|
|
18
|
+
* for await (const ev of sdk.stream('review')) {
|
|
19
|
+
* tracer.onEvent(ev);
|
|
20
|
+
* }
|
|
21
|
+
* // Or use the stream wrapper:
|
|
22
|
+
* for await (const ev of tracer.wrapStream(sdk.stream('review'))) {
|
|
23
|
+
* // events pass through unchanged
|
|
24
|
+
* }
|
|
25
|
+
*/
|
|
26
|
+
import { SdkEventType } from '../sdk/events.js';
|
|
27
|
+
const TRACER_NAME = '@qodo/sdk';
|
|
28
|
+
/**
|
|
29
|
+
* Stateful tracing adapter. Tracks in-flight spans by run_id and tool_call_id.
|
|
30
|
+
*/
|
|
31
|
+
export class SdkTracer {
|
|
32
|
+
otel;
|
|
33
|
+
tracer;
|
|
34
|
+
rootAttributes;
|
|
35
|
+
// Active root spans keyed by run_id
|
|
36
|
+
runSpans = new Map();
|
|
37
|
+
// Active tool spans keyed by `${run_id}:${tool_call_id}`
|
|
38
|
+
toolSpans = new Map();
|
|
39
|
+
constructor(otel, options) {
|
|
40
|
+
this.otel = otel;
|
|
41
|
+
this.tracer = otel.trace.getTracer(options?.tracerName ?? TRACER_NAME, options?.tracerVersion);
|
|
42
|
+
this.rootAttributes = options?.rootAttributes ?? {};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Process a single SDK event and update tracing state.
|
|
46
|
+
*
|
|
47
|
+
* Call this for each event from sdk.stream() or as an event handler.
|
|
48
|
+
*/
|
|
49
|
+
onEvent(ev) {
|
|
50
|
+
switch (ev.type) {
|
|
51
|
+
case SdkEventType.RunStarted:
|
|
52
|
+
this.onRunStarted(ev);
|
|
53
|
+
break;
|
|
54
|
+
case SdkEventType.ToolRequested:
|
|
55
|
+
this.onToolRequested(ev);
|
|
56
|
+
break;
|
|
57
|
+
case SdkEventType.ToolApproved:
|
|
58
|
+
this.onToolApproved(ev);
|
|
59
|
+
break;
|
|
60
|
+
case SdkEventType.ToolExecuted:
|
|
61
|
+
this.onToolExecuted(ev);
|
|
62
|
+
break;
|
|
63
|
+
case SdkEventType.Error:
|
|
64
|
+
this.onError(ev);
|
|
65
|
+
break;
|
|
66
|
+
case SdkEventType.Final:
|
|
67
|
+
this.onFinal(ev);
|
|
68
|
+
break;
|
|
69
|
+
// Init, MessageDelta, MessageFull, Progress: no tracing action needed
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Wrap an async generator, processing each event for tracing and yielding it unchanged.
|
|
74
|
+
*
|
|
75
|
+
* This is the recommended way to integrate tracing with sdk.stream():
|
|
76
|
+
*
|
|
77
|
+
* for await (const ev of tracer.wrapStream(sdk.stream('cmd'))) {
|
|
78
|
+
* // process events as usual
|
|
79
|
+
* }
|
|
80
|
+
*/
|
|
81
|
+
async *wrapStream(stream) {
|
|
82
|
+
try {
|
|
83
|
+
for await (const ev of stream) {
|
|
84
|
+
this.onEvent(ev);
|
|
85
|
+
yield ev;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
// Ensure any orphaned spans are cleaned up
|
|
90
|
+
this.flush();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* End all in-flight spans. Call this if you need to force-close tracing
|
|
95
|
+
* (e.g., on process exit or error recovery).
|
|
96
|
+
*/
|
|
97
|
+
flush() {
|
|
98
|
+
for (const span of this.toolSpans.values()) {
|
|
99
|
+
span.setStatus({ code: this.otel.SpanStatusCode.ERROR, message: 'orphaned' });
|
|
100
|
+
span.end();
|
|
101
|
+
}
|
|
102
|
+
this.toolSpans.clear();
|
|
103
|
+
for (const { span } of this.runSpans.values()) {
|
|
104
|
+
span.setStatus({ code: this.otel.SpanStatusCode.ERROR, message: 'orphaned' });
|
|
105
|
+
span.end();
|
|
106
|
+
}
|
|
107
|
+
this.runSpans.clear();
|
|
108
|
+
}
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
// Event handlers
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
onRunStarted(ev) {
|
|
113
|
+
const attrs = {
|
|
114
|
+
'qodo.run_id': ev.run_id,
|
|
115
|
+
'qodo.session_id': ev.session_id,
|
|
116
|
+
'qodo.command': ev.data.command || '(prompt)',
|
|
117
|
+
'qodo.prompt_mode': ev.data.prompt_mode,
|
|
118
|
+
'qodo.tools_auto_approved': ev.data.tools_auto_approved,
|
|
119
|
+
'qodo.cwd': ev.data.cwd,
|
|
120
|
+
'qodo.agent.source': ev.data.agent.source,
|
|
121
|
+
...this.rootAttributes,
|
|
122
|
+
};
|
|
123
|
+
if (ev.data.agent.path) {
|
|
124
|
+
attrs['qodo.agent.path'] = ev.data.agent.path;
|
|
125
|
+
}
|
|
126
|
+
if (ev.data.dry_run) {
|
|
127
|
+
attrs['qodo.dry_run'] = true;
|
|
128
|
+
}
|
|
129
|
+
const span = this.tracer.startSpan(`qodo.run ${ev.data.command || 'prompt'}`, {
|
|
130
|
+
attributes: attrs,
|
|
131
|
+
startTime: ev.timestamp,
|
|
132
|
+
});
|
|
133
|
+
const context = this.otel.trace.setSpan(this.otel.context.active(), span);
|
|
134
|
+
this.runSpans.set(ev.run_id, { span, context });
|
|
135
|
+
}
|
|
136
|
+
onToolRequested(ev) {
|
|
137
|
+
const parentCtx = this.runSpans.get(ev.run_id);
|
|
138
|
+
const toolKey = `${ev.run_id}:${ev.data.tool_call_id}`;
|
|
139
|
+
const attrs = {
|
|
140
|
+
'qodo.tool.call_id': ev.data.tool_call_id,
|
|
141
|
+
'qodo.tool.server_name': ev.data.server_name,
|
|
142
|
+
'qodo.tool.name': ev.data.tool_name,
|
|
143
|
+
'qodo.tool.pending_approval': ev.data.pending_approval,
|
|
144
|
+
};
|
|
145
|
+
if (ev.data.reasoning) {
|
|
146
|
+
// Truncate reasoning to avoid huge span attributes
|
|
147
|
+
attrs['qodo.tool.reasoning'] = ev.data.reasoning.slice(0, 500);
|
|
148
|
+
}
|
|
149
|
+
const span = this.tracer.startSpan(`tool ${ev.data.server_name}/${ev.data.tool_name}`, { attributes: attrs, startTime: ev.timestamp }, parentCtx?.context);
|
|
150
|
+
this.toolSpans.set(toolKey, span);
|
|
151
|
+
}
|
|
152
|
+
onToolApproved(ev) {
|
|
153
|
+
const toolKey = `${ev.run_id}:${ev.data.tool_call_id}`;
|
|
154
|
+
const span = this.toolSpans.get(toolKey);
|
|
155
|
+
if (!span)
|
|
156
|
+
return;
|
|
157
|
+
span.setAttribute('qodo.tool.approved', ev.data.approved);
|
|
158
|
+
if (ev.data.reason) {
|
|
159
|
+
span.setAttribute('qodo.tool.approval_reason', ev.data.reason);
|
|
160
|
+
}
|
|
161
|
+
// If not approved, end the span immediately
|
|
162
|
+
if (!ev.data.approved) {
|
|
163
|
+
span.setStatus({ code: this.otel.SpanStatusCode.OK, message: 'declined' });
|
|
164
|
+
span.end(ev.timestamp);
|
|
165
|
+
this.toolSpans.delete(toolKey);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
onToolExecuted(ev) {
|
|
169
|
+
const toolKey = `${ev.run_id}:${ev.data.tool_call_id}`;
|
|
170
|
+
const span = this.toolSpans.get(toolKey);
|
|
171
|
+
if (!span)
|
|
172
|
+
return;
|
|
173
|
+
span.setAttribute('qodo.tool.is_error', ev.data.result.isError);
|
|
174
|
+
if (ev.data.dry_run) {
|
|
175
|
+
span.setAttribute('qodo.tool.dry_run', true);
|
|
176
|
+
}
|
|
177
|
+
if (ev.data.result.isError) {
|
|
178
|
+
const errorContent = typeof ev.data.result.content === 'string'
|
|
179
|
+
? ev.data.result.content
|
|
180
|
+
: JSON.stringify(ev.data.result.content);
|
|
181
|
+
span.setStatus({ code: this.otel.SpanStatusCode.ERROR, message: errorContent.slice(0, 500) });
|
|
182
|
+
span.recordException(errorContent.slice(0, 1000));
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
span.setStatus({ code: this.otel.SpanStatusCode.OK });
|
|
186
|
+
}
|
|
187
|
+
span.end(ev.timestamp);
|
|
188
|
+
this.toolSpans.delete(toolKey);
|
|
189
|
+
}
|
|
190
|
+
onError(ev) {
|
|
191
|
+
const runEntry = this.runSpans.get(ev.run_id);
|
|
192
|
+
if (!runEntry)
|
|
193
|
+
return;
|
|
194
|
+
runEntry.span.recordException(ev.data.message);
|
|
195
|
+
runEntry.span.addEvent('sdk.error', {
|
|
196
|
+
'error.message': ev.data.message,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
onFinal(ev) {
|
|
200
|
+
const runEntry = this.runSpans.get(ev.run_id);
|
|
201
|
+
if (!runEntry)
|
|
202
|
+
return;
|
|
203
|
+
const { span } = runEntry;
|
|
204
|
+
span.setAttribute('qodo.success', ev.data.success);
|
|
205
|
+
if (ev.data.model) {
|
|
206
|
+
span.setAttribute('qodo.model', ev.data.model);
|
|
207
|
+
}
|
|
208
|
+
if (ev.data.meta?.timed_out) {
|
|
209
|
+
span.setAttribute('qodo.timed_out', true);
|
|
210
|
+
}
|
|
211
|
+
if (ev.data.meta?.dry_run) {
|
|
212
|
+
span.setAttribute('qodo.dry_run', true);
|
|
213
|
+
}
|
|
214
|
+
if (ev.data.success) {
|
|
215
|
+
span.setStatus({ code: this.otel.SpanStatusCode.OK });
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
span.setStatus({
|
|
219
|
+
code: this.otel.SpanStatusCode.ERROR,
|
|
220
|
+
message: ev.data.error || 'run failed',
|
|
221
|
+
});
|
|
222
|
+
if (ev.data.error) {
|
|
223
|
+
span.recordException(ev.data.error);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
span.end(ev.timestamp);
|
|
227
|
+
this.runSpans.delete(ev.run_id);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Factory function to create an SdkTracer.
|
|
232
|
+
*
|
|
233
|
+
* Usage:
|
|
234
|
+
* import * as otel from '@opentelemetry/api';
|
|
235
|
+
* import { createSdkTracer } from '@qodo/sdk';
|
|
236
|
+
*
|
|
237
|
+
* const tracer = createSdkTracer(otel);
|
|
238
|
+
* for await (const ev of tracer.wrapStream(sdk.stream('review'))) { ... }
|
|
239
|
+
*/
|
|
240
|
+
export function createSdkTracer(otel, options) {
|
|
241
|
+
return new SdkTracer(otel, options);
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=SdkTracer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SdkTracer.js","sourceRoot":"","sources":["../../src/tracing/SdkTracer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { SdkTracer, createSdkTracer } from './SdkTracer.js';
|
|
2
|
+
export type { SdkTracerOptions } from './SdkTracer.js';
|
|
3
|
+
export { tracePipeline } from './PipelineTracer.js';
|
|
4
|
+
export type { TracePipelineOptions } from './PipelineTracer.js';
|
|
5
|
+
export type { OTelAPI, OTelSpan, OTelTracer, OTelContext, OTelContextAPI, OTelTraceAPI } from './types.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tracing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tracing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal helpers for pipeline tracing.
|
|
3
|
+
*
|
|
4
|
+
* Separated from PipelineTracer to keep the main file focused on the
|
|
5
|
+
* public API and to allow independent testing.
|
|
6
|
+
*/
|
|
7
|
+
import type { QodoSDK } from '../sdk/QodoSDK.js';
|
|
8
|
+
import type { PipelineStep, ParallelGroup, StepLog } from '../sdk/pipeline/types.js';
|
|
9
|
+
import type { PipelineEntry } from '../sdk/pipeline/types.js';
|
|
10
|
+
import type { OTelAPI, OTelTracer, OTelContext } from './types.js';
|
|
11
|
+
export declare function isParallelGroup<T>(entry: PipelineEntry<T>): entry is ParallelGroup<T>;
|
|
12
|
+
export declare function executeStepWithTracing<TState extends Record<string, any>>(otel: OTelAPI, tracer: OTelTracer, parentContext: OTelContext, sdk: QodoSDK, step: PipelineStep<TState>, state: TState): Promise<{
|
|
13
|
+
newState: Record<string, any>;
|
|
14
|
+
log: StepLog;
|
|
15
|
+
}>;
|
|
16
|
+
export declare function executeParallelGroupWithTracing<TState extends Record<string, any>>(otel: OTelAPI, tracer: OTelTracer, parentContext: OTelContext, sdk: QodoSDK, group: ParallelGroup<TState>, state: TState): Promise<{
|
|
17
|
+
newState: Record<string, any>;
|
|
18
|
+
logs: StepLog[];
|
|
19
|
+
}>;
|
|
20
|
+
//# sourceMappingURL=pipelineHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipelineHelpers.d.ts","sourceRoot":"","sources":["../../src/tracing/pipelineHelpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAuC,MAAM,mBAAmB,CAAC;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAe,MAAM,0BAA0B,CAAC;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAY,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE7E,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC,CAErF;AAED,wBAAsB,sBAAsB,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7E,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,UAAU,EAClB,aAAa,EAAE,WAAW,EAC1B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAAC,CAsG1D;AAED,wBAAsB,+BAA+B,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtF,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,UAAU,EAClB,aAAa,EAAE,WAAW,EAC1B,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,EAC5B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAAC,IAAI,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,CAiD7D"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal helpers for pipeline tracing.
|
|
3
|
+
*
|
|
4
|
+
* Separated from PipelineTracer to keep the main file focused on the
|
|
5
|
+
* public API and to allow independent testing.
|
|
6
|
+
*/
|
|
7
|
+
export function isParallelGroup(entry) {
|
|
8
|
+
return entry.kind === 'parallel';
|
|
9
|
+
}
|
|
10
|
+
export async function executeStepWithTracing(otel, tracer, parentContext, sdk, step, state) {
|
|
11
|
+
const stepSpan = tracer.startSpan(`qodo.pipeline.step ${step.name}`, {
|
|
12
|
+
attributes: {
|
|
13
|
+
'qodo.pipeline.step.name': step.name,
|
|
14
|
+
'qodo.pipeline.step.has_gate': !!step.gate,
|
|
15
|
+
},
|
|
16
|
+
}, parentContext);
|
|
17
|
+
const start = Date.now();
|
|
18
|
+
// Evaluate gate
|
|
19
|
+
if (step.gate) {
|
|
20
|
+
let pass;
|
|
21
|
+
try {
|
|
22
|
+
pass = await step.gate(state);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
pass = false;
|
|
26
|
+
}
|
|
27
|
+
if (!pass) {
|
|
28
|
+
stepSpan.setAttribute('qodo.pipeline.step.status', 'skipped');
|
|
29
|
+
stepSpan.setAttribute('qodo.pipeline.step.skip_reason', 'gate');
|
|
30
|
+
stepSpan.setStatus({ code: otel.SpanStatusCode.OK, message: 'skipped by gate' });
|
|
31
|
+
stepSpan.end();
|
|
32
|
+
return {
|
|
33
|
+
newState: {},
|
|
34
|
+
log: { name: step.name, status: 'skipped', durationMs: Date.now() - start },
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const ctx = {
|
|
39
|
+
state,
|
|
40
|
+
run: (commandOrPrompt, options) => {
|
|
41
|
+
return sdk.run(commandOrPrompt, options);
|
|
42
|
+
},
|
|
43
|
+
stepName: step.name,
|
|
44
|
+
};
|
|
45
|
+
try {
|
|
46
|
+
const output = await step.fn(ctx);
|
|
47
|
+
const durationMs = Date.now() - start;
|
|
48
|
+
stepSpan.setAttribute('qodo.pipeline.step.status', 'completed');
|
|
49
|
+
stepSpan.setAttribute('qodo.pipeline.step.duration_ms', durationMs);
|
|
50
|
+
stepSpan.setStatus({ code: otel.SpanStatusCode.OK });
|
|
51
|
+
stepSpan.end();
|
|
52
|
+
return {
|
|
53
|
+
newState: output ?? {},
|
|
54
|
+
log: { name: step.name, status: 'completed', durationMs },
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
59
|
+
const durationMs = Date.now() - start;
|
|
60
|
+
if (step.onError === 'skip') {
|
|
61
|
+
stepSpan.setAttribute('qodo.pipeline.step.status', 'skipped');
|
|
62
|
+
stepSpan.setAttribute('qodo.pipeline.step.skip_reason', 'error');
|
|
63
|
+
stepSpan.addEvent('step.error.skipped', { 'error.message': error.message });
|
|
64
|
+
stepSpan.setStatus({ code: otel.SpanStatusCode.OK, message: 'error skipped' });
|
|
65
|
+
stepSpan.end();
|
|
66
|
+
return {
|
|
67
|
+
newState: {},
|
|
68
|
+
log: { name: step.name, status: 'skipped', durationMs, error: error.message },
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
if (typeof step.onError === 'function') {
|
|
72
|
+
try {
|
|
73
|
+
const recovered = await step.onError(error, state);
|
|
74
|
+
stepSpan.setAttribute('qodo.pipeline.step.status', 'recovered');
|
|
75
|
+
stepSpan.addEvent('step.error.recovered', { 'error.message': error.message });
|
|
76
|
+
stepSpan.setStatus({ code: otel.SpanStatusCode.OK });
|
|
77
|
+
stepSpan.end();
|
|
78
|
+
return {
|
|
79
|
+
newState: recovered ?? {},
|
|
80
|
+
log: { name: step.name, status: 'completed', durationMs: Date.now() - start },
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
catch (recoveryErr) {
|
|
84
|
+
stepSpan.setAttribute('qodo.pipeline.step.status', 'error');
|
|
85
|
+
stepSpan.recordException(recoveryErr instanceof Error ? recoveryErr : new Error(String(recoveryErr)));
|
|
86
|
+
stepSpan.setStatus({ code: otel.SpanStatusCode.ERROR, message: 'recovery failed' });
|
|
87
|
+
stepSpan.end();
|
|
88
|
+
const { PipelineExecutionError } = await import('../sdk/pipeline/PipelineRunner.js');
|
|
89
|
+
throw new PipelineExecutionError(`Step "${step.name}" recovery failed: ${recoveryErr?.message || recoveryErr}`, step.name, recoveryErr instanceof Error ? recoveryErr : undefined);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// 'throw' (default)
|
|
93
|
+
stepSpan.setAttribute('qodo.pipeline.step.status', 'error');
|
|
94
|
+
stepSpan.recordException(error);
|
|
95
|
+
stepSpan.setStatus({ code: otel.SpanStatusCode.ERROR, message: error.message });
|
|
96
|
+
stepSpan.end();
|
|
97
|
+
const { PipelineExecutionError } = await import('../sdk/pipeline/PipelineRunner.js');
|
|
98
|
+
throw new PipelineExecutionError(`Step "${step.name}" failed: ${error.message}`, step.name, error);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
export async function executeParallelGroupWithTracing(otel, tracer, parentContext, sdk, group, state) {
|
|
102
|
+
const groupSpan = tracer.startSpan('qodo.pipeline.parallel', {
|
|
103
|
+
attributes: {
|
|
104
|
+
'qodo.pipeline.parallel.step_count': group.steps.length,
|
|
105
|
+
'qodo.pipeline.parallel.step_names': group.steps.map((s) => s.name).join(','),
|
|
106
|
+
},
|
|
107
|
+
}, parentContext);
|
|
108
|
+
const groupContext = otel.trace.setSpan(parentContext, groupSpan);
|
|
109
|
+
try {
|
|
110
|
+
const results = await Promise.allSettled(group.steps.map((step) => executeStepWithTracing(otel, tracer, groupContext, sdk, step, state)));
|
|
111
|
+
let merged = {};
|
|
112
|
+
const logs = [];
|
|
113
|
+
for (let i = 0; i < results.length; i++) {
|
|
114
|
+
const result = results[i];
|
|
115
|
+
if (result.status === 'fulfilled') {
|
|
116
|
+
merged = { ...merged, ...result.value.newState };
|
|
117
|
+
logs.push(result.value.log);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
const stepName = group.steps[i].name;
|
|
121
|
+
groupSpan.setAttribute('qodo.pipeline.parallel.status', 'error');
|
|
122
|
+
groupSpan.recordException(result.reason instanceof Error ? result.reason : new Error(String(result.reason)));
|
|
123
|
+
groupSpan.setStatus({ code: otel.SpanStatusCode.ERROR, message: `step "${stepName}" failed` });
|
|
124
|
+
groupSpan.end();
|
|
125
|
+
const { PipelineExecutionError } = await import('../sdk/pipeline/PipelineRunner.js');
|
|
126
|
+
throw new PipelineExecutionError(`Parallel step "${stepName}" failed: ${result.reason?.message || result.reason}`, stepName, result.reason instanceof Error ? result.reason : undefined);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
groupSpan.setAttribute('qodo.pipeline.parallel.status', 'completed');
|
|
130
|
+
groupSpan.setStatus({ code: otel.SpanStatusCode.OK });
|
|
131
|
+
groupSpan.end();
|
|
132
|
+
return { newState: merged, logs };
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
// If the span is already ended by the loop above, this is a no-op
|
|
136
|
+
// but we still need to rethrow
|
|
137
|
+
throw err;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=pipelineHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipelineHelpers.js","sourceRoot":"","sources":["../../src/tracing/pipelineHelpers.ts"],"names":[],"mappings":"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"}
|