elasticdash-test 0.1.18-alpha-11 → 0.1.18-alpha-13
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/index.cjs +4 -0
- package/dist/tool-runner-worker.js +54 -37
- package/dist/tool-runner-worker.js.map +1 -1
- package/dist/trigger-executor.d.ts.map +1 -1
- package/dist/trigger-executor.js +3 -0
- package/dist/trigger-executor.js.map +1 -1
- package/package.json +1 -1
- package/src/tool-runner-worker.ts +57 -40
- package/src/trigger-executor.ts +4 -0
package/dist/index.cjs
CHANGED
|
@@ -2975,6 +2975,10 @@ async function executeTrigger(serverUrl, apiKey, trigger) {
|
|
|
2975
2975
|
cwd,
|
|
2976
2976
|
tools
|
|
2977
2977
|
);
|
|
2978
|
+
if (!result.ok) {
|
|
2979
|
+
debugLog(`[elasticdash] Trigger ${trigger.triggerId} step=${step.eventName} run=${i} FAILED:
|
|
2980
|
+
${result.error}`);
|
|
2981
|
+
}
|
|
2978
2982
|
runs.push({
|
|
2979
2983
|
runIndex: i,
|
|
2980
2984
|
input: step.input,
|
|
@@ -18,7 +18,6 @@ import 'dotenv/config';
|
|
|
18
18
|
* will replay from frozen data instead of hitting real services.
|
|
19
19
|
*/
|
|
20
20
|
import { pathToFileURL } from 'node:url';
|
|
21
|
-
import { interceptFetch, restoreFetch } from './interceptors/http.js';
|
|
22
21
|
const RESULT_PREFIX = '__ELASTICDASH_RESULT__:';
|
|
23
22
|
function writeResult(result) {
|
|
24
23
|
return new Promise((resolve, reject) => {
|
|
@@ -27,50 +26,70 @@ function writeResult(result) {
|
|
|
27
26
|
}
|
|
28
27
|
/**
|
|
29
28
|
* Set up frozen event replay context.
|
|
30
|
-
*
|
|
31
|
-
*
|
|
29
|
+
*
|
|
30
|
+
* For HTTP events: uses **URL-based matching** via a fetch wrapper. The
|
|
31
|
+
* ID-based matching in HttpRunContext doesn't work for observability-mode
|
|
32
|
+
* reruns because wrapTool/wrapAI also consume nextId() IDs, causing the
|
|
33
|
+
* sequential counter to drift away from the frozen event IDs.
|
|
34
|
+
*
|
|
35
|
+
* For DB events: uses the HttpRunContext frozen map so wrapDB-wrapped
|
|
36
|
+
* clients can replay them by sequential ID (DB calls don't share the
|
|
37
|
+
* counter with tool/AI wrappers in the same way).
|
|
32
38
|
*/
|
|
33
39
|
async function setupFrozenContext(frozenEvents) {
|
|
34
40
|
if (frozenEvents.length === 0)
|
|
35
41
|
return;
|
|
36
|
-
//
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
42
|
+
// Always install URL-based fetch replay for HTTP events — this is the
|
|
43
|
+
// reliable matching strategy for tool reruns in subprocesses.
|
|
44
|
+
installFrozenFetchFallback(frozenEvents);
|
|
45
|
+
// Also set up HttpRunContext for DB frozen events (wrapDB uses ID-based matching).
|
|
46
|
+
const dbEvents = frozenEvents.filter(e => e.type === 'db');
|
|
47
|
+
if (dbEvents.length > 0) {
|
|
48
|
+
try {
|
|
49
|
+
const telemetryPush = await import('./interceptors/telemetry-push.js');
|
|
50
|
+
const workflowEvents = dbEvents.map((e, i) => ({
|
|
51
|
+
id: i + 1,
|
|
52
|
+
type: e.type,
|
|
53
|
+
name: e.name,
|
|
54
|
+
input: e.input,
|
|
55
|
+
output: e.output,
|
|
56
|
+
timestamp: e.timestamp,
|
|
57
|
+
durationMs: e.durationMs ?? 0,
|
|
58
|
+
streamed: e.streamed,
|
|
59
|
+
streamRaw: e.streamRaw,
|
|
60
|
+
}));
|
|
61
|
+
telemetryPush.setHttpRunContext('frozen-rerun', '');
|
|
62
|
+
const ctx = telemetryPush.getHttpRunContext();
|
|
63
|
+
if (ctx) {
|
|
64
|
+
for (const e of workflowEvents) {
|
|
65
|
+
ctx.frozenEvents.set(e.id, e);
|
|
66
|
+
}
|
|
59
67
|
}
|
|
60
68
|
}
|
|
69
|
+
catch {
|
|
70
|
+
// DB replay not available — tool will hit real DB
|
|
71
|
+
}
|
|
61
72
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
73
|
+
}
|
|
74
|
+
/** Saved original fetch so we can restore after the tool runs. */
|
|
75
|
+
let savedOriginalFetch = null;
|
|
76
|
+
function restoreFrozenFetch() {
|
|
77
|
+
if (savedOriginalFetch) {
|
|
78
|
+
globalThis.fetch = savedOriginalFetch;
|
|
79
|
+
savedOriginalFetch = null;
|
|
65
80
|
}
|
|
66
81
|
}
|
|
67
82
|
/**
|
|
68
|
-
*
|
|
83
|
+
* Intercept fetch for HTTP frozen events using URL-based matching.
|
|
84
|
+
* This is the primary replay mechanism for tool reruns — it matches
|
|
85
|
+
* by request URL rather than sequential ID, which is robust against
|
|
86
|
+
* ID counter drift from wrapTool/wrapAI consuming IDs.
|
|
69
87
|
*/
|
|
70
88
|
function installFrozenFetchFallback(frozenEvents) {
|
|
71
89
|
const httpEvents = frozenEvents.filter(e => e.type === 'http');
|
|
72
90
|
if (httpEvents.length === 0)
|
|
73
91
|
return;
|
|
92
|
+
savedOriginalFetch = globalThis.fetch;
|
|
74
93
|
const originalFetch = globalThis.fetch;
|
|
75
94
|
const usageCounts = new Map();
|
|
76
95
|
globalThis.fetch = async (input, init) => {
|
|
@@ -110,15 +129,12 @@ async function main() {
|
|
|
110
129
|
return;
|
|
111
130
|
}
|
|
112
131
|
const { toolsModulePath, toolName, args, frozenEvents } = payload;
|
|
113
|
-
// Set up frozen event context before running the tool
|
|
132
|
+
// Set up frozen event context before running the tool.
|
|
133
|
+
// Uses URL-based matching for HTTP events (reliable for observability reruns)
|
|
134
|
+
// and ID-based matching for DB events.
|
|
114
135
|
const hasFrozen = frozenEvents && frozenEvents.length > 0;
|
|
115
136
|
if (hasFrozen) {
|
|
116
137
|
await setupFrozenContext(frozenEvents);
|
|
117
|
-
// Install the full fetch interceptor so frozen HTTP events are replayed.
|
|
118
|
-
// setupFrozenContext loads frozen events into HttpRunContext, but without
|
|
119
|
-
// interceptFetch() the events are never read — fetch hits real services
|
|
120
|
-
// which can fail (e.g. "Invalid URL" for relative URLs).
|
|
121
|
-
interceptFetch();
|
|
122
138
|
}
|
|
123
139
|
try {
|
|
124
140
|
let mod;
|
|
@@ -144,12 +160,13 @@ async function main() {
|
|
|
144
160
|
catch (e) {
|
|
145
161
|
const err = e;
|
|
146
162
|
const errorMsg = err.stack || err.message || String(e);
|
|
163
|
+
process.stderr.write(`[elasticdash-worker] Tool execution failed:\n${errorMsg}\n`);
|
|
147
164
|
await writeResult({ ok: false, error: errorMsg });
|
|
148
165
|
originalExit(1);
|
|
149
166
|
}
|
|
150
167
|
finally {
|
|
151
168
|
if (hasFrozen)
|
|
152
|
-
|
|
169
|
+
restoreFrozenFetch();
|
|
153
170
|
}
|
|
154
171
|
}
|
|
155
172
|
main();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-runner-worker.js","sourceRoot":"","sources":["../src/tool-runner-worker.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,CAAC;AAAC,UAAkB,CAAC,sBAAsB,GAAG,IAAI,CAAA;AAElD,iDAAiD;AACjD,OAAO,eAAe,CAAA;AAEtB;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"tool-runner-worker.js","sourceRoot":"","sources":["../src/tool-runner-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trigger-executor.d.ts","sourceRoot":"","sources":["../src/trigger-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,wBAAwB,CAAA;AA8BxE;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"trigger-executor.d.ts","sourceRoot":"","sources":["../src/trigger-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,wBAAwB,CAAA;AA8BxE;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAuHf"}
|
package/dist/trigger-executor.js
CHANGED
|
@@ -71,6 +71,9 @@ export async function executeTrigger(serverUrl, apiKey, trigger) {
|
|
|
71
71
|
provider: step.provider,
|
|
72
72
|
frozenEvents,
|
|
73
73
|
}, cwd, tools);
|
|
74
|
+
if (!result.ok) {
|
|
75
|
+
debugLog(`[elasticdash] Trigger ${trigger.triggerId} step=${step.eventName} run=${i} FAILED:\n${result.error}`);
|
|
76
|
+
}
|
|
74
77
|
runs.push({
|
|
75
78
|
runIndex: i,
|
|
76
79
|
input: step.input,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trigger-executor.js","sourceRoot":"","sources":["../src/trigger-executor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"trigger-executor.js","sourceRoot":"","sources":["../src/trigger-executor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -20,7 +20,6 @@ import 'dotenv/config'
|
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
22
|
import { pathToFileURL } from 'node:url'
|
|
23
|
-
import { interceptFetch, restoreFetch } from './interceptors/http.js'
|
|
24
23
|
|
|
25
24
|
const RESULT_PREFIX = '__ELASTICDASH_RESULT__:'
|
|
26
25
|
|
|
@@ -46,53 +45,73 @@ interface FrozenEvent {
|
|
|
46
45
|
|
|
47
46
|
/**
|
|
48
47
|
* Set up frozen event replay context.
|
|
49
|
-
*
|
|
50
|
-
*
|
|
48
|
+
*
|
|
49
|
+
* For HTTP events: uses **URL-based matching** via a fetch wrapper. The
|
|
50
|
+
* ID-based matching in HttpRunContext doesn't work for observability-mode
|
|
51
|
+
* reruns because wrapTool/wrapAI also consume nextId() IDs, causing the
|
|
52
|
+
* sequential counter to drift away from the frozen event IDs.
|
|
53
|
+
*
|
|
54
|
+
* For DB events: uses the HttpRunContext frozen map so wrapDB-wrapped
|
|
55
|
+
* clients can replay them by sequential ID (DB calls don't share the
|
|
56
|
+
* counter with tool/AI wrappers in the same way).
|
|
51
57
|
*/
|
|
52
58
|
async function setupFrozenContext(frozenEvents: FrozenEvent[]): Promise<void> {
|
|
53
59
|
if (frozenEvents.length === 0) return
|
|
54
60
|
|
|
55
|
-
//
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
61
|
+
// Always install URL-based fetch replay for HTTP events — this is the
|
|
62
|
+
// reliable matching strategy for tool reruns in subprocesses.
|
|
63
|
+
installFrozenFetchFallback(frozenEvents)
|
|
64
|
+
|
|
65
|
+
// Also set up HttpRunContext for DB frozen events (wrapDB uses ID-based matching).
|
|
66
|
+
const dbEvents = frozenEvents.filter(e => e.type === 'db')
|
|
67
|
+
if (dbEvents.length > 0) {
|
|
68
|
+
try {
|
|
69
|
+
const telemetryPush = await import('./interceptors/telemetry-push.js')
|
|
70
|
+
const workflowEvents = dbEvents.map((e, i) => ({
|
|
71
|
+
id: i + 1,
|
|
72
|
+
type: e.type as 'db',
|
|
73
|
+
name: e.name,
|
|
74
|
+
input: e.input,
|
|
75
|
+
output: e.output,
|
|
76
|
+
timestamp: e.timestamp,
|
|
77
|
+
durationMs: e.durationMs ?? 0,
|
|
78
|
+
streamed: e.streamed,
|
|
79
|
+
streamRaw: e.streamRaw,
|
|
80
|
+
}))
|
|
81
|
+
telemetryPush.setHttpRunContext('frozen-rerun', '')
|
|
82
|
+
const ctx = telemetryPush.getHttpRunContext()
|
|
83
|
+
if (ctx) {
|
|
84
|
+
for (const e of workflowEvents) {
|
|
85
|
+
ctx.frozenEvents.set(e.id, e as any)
|
|
86
|
+
}
|
|
81
87
|
}
|
|
88
|
+
} catch {
|
|
89
|
+
// DB replay not available — tool will hit real DB
|
|
82
90
|
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** Saved original fetch so we can restore after the tool runs. */
|
|
95
|
+
let savedOriginalFetch: typeof globalThis.fetch | null = null
|
|
96
|
+
|
|
97
|
+
function restoreFrozenFetch(): void {
|
|
98
|
+
if (savedOriginalFetch) {
|
|
99
|
+
globalThis.fetch = savedOriginalFetch
|
|
100
|
+
savedOriginalFetch = null
|
|
86
101
|
}
|
|
87
102
|
}
|
|
88
103
|
|
|
89
104
|
/**
|
|
90
|
-
*
|
|
105
|
+
* Intercept fetch for HTTP frozen events using URL-based matching.
|
|
106
|
+
* This is the primary replay mechanism for tool reruns — it matches
|
|
107
|
+
* by request URL rather than sequential ID, which is robust against
|
|
108
|
+
* ID counter drift from wrapTool/wrapAI consuming IDs.
|
|
91
109
|
*/
|
|
92
110
|
function installFrozenFetchFallback(frozenEvents: FrozenEvent[]): void {
|
|
93
111
|
const httpEvents = frozenEvents.filter(e => e.type === 'http')
|
|
94
112
|
if (httpEvents.length === 0) return
|
|
95
113
|
|
|
114
|
+
savedOriginalFetch = globalThis.fetch
|
|
96
115
|
const originalFetch = globalThis.fetch
|
|
97
116
|
const usageCounts = new Map<string, number>()
|
|
98
117
|
|
|
@@ -141,15 +160,12 @@ async function main() {
|
|
|
141
160
|
|
|
142
161
|
const { toolsModulePath, toolName, args, frozenEvents } = payload
|
|
143
162
|
|
|
144
|
-
// Set up frozen event context before running the tool
|
|
163
|
+
// Set up frozen event context before running the tool.
|
|
164
|
+
// Uses URL-based matching for HTTP events (reliable for observability reruns)
|
|
165
|
+
// and ID-based matching for DB events.
|
|
145
166
|
const hasFrozen = frozenEvents && frozenEvents.length > 0
|
|
146
167
|
if (hasFrozen) {
|
|
147
168
|
await setupFrozenContext(frozenEvents)
|
|
148
|
-
// Install the full fetch interceptor so frozen HTTP events are replayed.
|
|
149
|
-
// setupFrozenContext loads frozen events into HttpRunContext, but without
|
|
150
|
-
// interceptFetch() the events are never read — fetch hits real services
|
|
151
|
-
// which can fail (e.g. "Invalid URL" for relative URLs).
|
|
152
|
-
interceptFetch()
|
|
153
169
|
}
|
|
154
170
|
|
|
155
171
|
try {
|
|
@@ -175,10 +191,11 @@ async function main() {
|
|
|
175
191
|
} catch (e) {
|
|
176
192
|
const err = e as Error
|
|
177
193
|
const errorMsg = err.stack || err.message || String(e)
|
|
194
|
+
process.stderr.write(`[elasticdash-worker] Tool execution failed:\n${errorMsg}\n`)
|
|
178
195
|
await writeResult({ ok: false, error: errorMsg })
|
|
179
196
|
originalExit(1)
|
|
180
197
|
} finally {
|
|
181
|
-
if (hasFrozen)
|
|
198
|
+
if (hasFrozen) restoreFrozenFetch()
|
|
182
199
|
}
|
|
183
200
|
}
|
|
184
201
|
|
package/src/trigger-executor.ts
CHANGED
|
@@ -108,6 +108,10 @@ export async function executeTrigger(
|
|
|
108
108
|
tools,
|
|
109
109
|
)
|
|
110
110
|
|
|
111
|
+
if (!result.ok) {
|
|
112
|
+
debugLog(`[elasticdash] Trigger ${trigger.triggerId} step=${step.eventName} run=${i} FAILED:\n${result.error}`)
|
|
113
|
+
}
|
|
114
|
+
|
|
111
115
|
runs.push({
|
|
112
116
|
runIndex: i,
|
|
113
117
|
input: step.input,
|