@acpus/runtime 0.1.0 → 0.2.1
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/agent-telemetry.d.ts +49 -0
- package/dist/agent-telemetry.d.ts.map +1 -0
- package/dist/agent-telemetry.js +255 -0
- package/dist/agent-telemetry.js.map +1 -0
- package/dist/artifacts.d.ts +16 -1
- package/dist/artifacts.d.ts.map +1 -1
- package/dist/artifacts.js +92 -29
- package/dist/artifacts.js.map +1 -1
- package/dist/attempt-artifacts.d.ts +35 -0
- package/dist/attempt-artifacts.d.ts.map +1 -0
- package/dist/attempt-artifacts.js +90 -0
- package/dist/attempt-artifacts.js.map +1 -0
- package/dist/client.d.ts +32 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +35 -2
- package/dist/client.js.map +1 -1
- package/dist/executors/agent.d.ts +7 -3
- package/dist/executors/agent.d.ts.map +1 -1
- package/dist/executors/agent.js +58 -61
- package/dist/executors/agent.js.map +1 -1
- package/dist/executors/mock-program.d.ts +2 -0
- package/dist/executors/mock-program.d.ts.map +1 -1
- package/dist/executors/mock-program.js +27 -6
- package/dist/executors/mock-program.js.map +1 -1
- package/dist/executors/output-preview.d.ts +2 -0
- package/dist/executors/output-preview.d.ts.map +1 -0
- package/dist/executors/output-preview.js +20 -0
- package/dist/executors/output-preview.js.map +1 -0
- package/dist/executors/program.d.ts +10 -3
- package/dist/executors/program.d.ts.map +1 -1
- package/dist/executors/program.js +39 -4
- package/dist/executors/program.js.map +1 -1
- package/dist/executors/types.d.ts +2 -0
- package/dist/executors/types.d.ts.map +1 -1
- package/dist/fork.d.ts +80 -0
- package/dist/fork.d.ts.map +1 -0
- package/dist/fork.js +203 -0
- package/dist/fork.js.map +1 -0
- package/dist/index.d.ts +9 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/interpreter.d.ts +7 -49
- package/dist/interpreter.d.ts.map +1 -1
- package/dist/interpreter.js +232 -461
- package/dist/interpreter.js.map +1 -1
- package/dist/keys.d.ts +50 -2
- package/dist/keys.d.ts.map +1 -1
- package/dist/keys.js +261 -1
- package/dist/keys.js.map +1 -1
- package/dist/run-control.d.ts +45 -0
- package/dist/run-control.d.ts.map +1 -0
- package/dist/run-control.js +255 -0
- package/dist/run-control.js.map +1 -0
- package/dist/state-machine.d.ts +5 -1
- package/dist/state-machine.d.ts.map +1 -1
- package/dist/state-machine.js +16 -1
- package/dist/state-machine.js.map +1 -1
- package/dist/store.d.ts +29 -2
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +129 -28
- package/dist/store.js.map +1 -1
- package/dist/supervisor-app.d.ts.map +1 -1
- package/dist/supervisor-app.js +145 -42
- package/dist/supervisor-app.js.map +1 -1
- package/dist/supervisor-discovery.d.ts +1 -0
- package/dist/supervisor-discovery.d.ts.map +1 -1
- package/dist/supervisor-discovery.js +9 -15
- package/dist/supervisor-discovery.js.map +1 -1
- package/dist/types.d.ts +94 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/workflow-outputs.d.ts +9 -0
- package/dist/workflow-outputs.d.ts.map +1 -0
- package/dist/workflow-outputs.js +59 -0
- package/dist/workflow-outputs.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { AgentAttemptTelemetry, AgentAttemptTelemetryState, AgentContextUsage, AgentTelemetry } from "./types.js";
|
|
2
|
+
export interface AgentTelemetryAccumulatorOptions {
|
|
3
|
+
attempt: number;
|
|
4
|
+
inputText: string;
|
|
5
|
+
inputArtifactRef?: string;
|
|
6
|
+
startedAt?: string;
|
|
7
|
+
now?: () => number;
|
|
8
|
+
previewEdgeBytes?: number;
|
|
9
|
+
maxToolCalls?: number;
|
|
10
|
+
flushIntervalMs?: number;
|
|
11
|
+
onTelemetry?: (attempt: AgentAttemptTelemetry) => void;
|
|
12
|
+
}
|
|
13
|
+
export declare class AgentTelemetryAccumulator {
|
|
14
|
+
private readonly attempt;
|
|
15
|
+
private readonly now;
|
|
16
|
+
private readonly previewEdgeBytes;
|
|
17
|
+
private readonly maxToolCalls;
|
|
18
|
+
private readonly flushIntervalMs;
|
|
19
|
+
private readonly onTelemetry?;
|
|
20
|
+
private readonly startedAt;
|
|
21
|
+
private readonly seenToolIds;
|
|
22
|
+
private readonly tools;
|
|
23
|
+
private partialLine;
|
|
24
|
+
private response;
|
|
25
|
+
private stopReason;
|
|
26
|
+
private latestContext;
|
|
27
|
+
private outputArtifactRef;
|
|
28
|
+
private lastPublishedAt;
|
|
29
|
+
private toolSeq;
|
|
30
|
+
private totalToolCallCount;
|
|
31
|
+
constructor(options: AgentTelemetryAccumulatorOptions);
|
|
32
|
+
private readonly input;
|
|
33
|
+
append(chunk: string): void;
|
|
34
|
+
flush(): void;
|
|
35
|
+
responseText(): string;
|
|
36
|
+
setResponseText(text: string): void;
|
|
37
|
+
finalStopReason(): string | undefined;
|
|
38
|
+
context(): AgentContextUsage | undefined;
|
|
39
|
+
setOutputArtifactRef(ref: string | undefined): void;
|
|
40
|
+
snapshot(state?: AgentAttemptTelemetryState, completedAt?: string): AgentAttemptTelemetry;
|
|
41
|
+
private parseLine;
|
|
42
|
+
private captureResult;
|
|
43
|
+
private captureTool;
|
|
44
|
+
private trimRecentTools;
|
|
45
|
+
private publish;
|
|
46
|
+
}
|
|
47
|
+
export declare function upsertAgentAttemptTelemetry(current: AgentTelemetry | undefined, attempt: AgentAttemptTelemetry): AgentTelemetry;
|
|
48
|
+
export declare function latestAgentAttemptTelemetry(telemetry: AgentTelemetry | undefined): AgentAttemptTelemetry | undefined;
|
|
49
|
+
//# sourceMappingURL=agent-telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-telemetry.d.ts","sourceRoot":"","sources":["../src/agent-telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,0BAA0B,EAC1B,iBAAiB,EAEjB,cAAc,EAEf,MAAM,YAAY,CAAC;AAOpB,MAAM,WAAW,gCAAgC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACxD;AAED,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAA2C;IACxE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsC;IAC5D,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,kBAAkB,CAAK;gBAEnB,OAAO,EAAE,gCAAgC;IAWrD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;IAEvC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ3B,KAAK,IAAI,IAAI;IAMb,YAAY,IAAI,MAAM;IAItB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAInC,eAAe,IAAI,MAAM,GAAG,SAAS;IAIrC,OAAO,IAAI,iBAAiB,GAAG,SAAS;IAIxC,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAInD,QAAQ,CAAC,KAAK,GAAE,0BAAsC,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,qBAAqB;IA0BpG,OAAO,CAAC,SAAS;IAoCjB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,WAAW;IAuCnB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,OAAO;CAOhB;AAMD,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,OAAO,EAAE,qBAAqB,GAC7B,cAAc,CAMhB;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,cAAc,GAAG,SAAS,GAAG,qBAAqB,GAAG,SAAS,CAIpH"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
const DEFAULT_PREVIEW_EDGE_BYTES = 8 * 1024;
|
|
2
|
+
const DEFAULT_MAX_TOOL_CALLS = 200;
|
|
3
|
+
const DEFAULT_FLUSH_INTERVAL_MS = 1_000;
|
|
4
|
+
const FINAL_TOOL_STATUSES = new Set(["completed", "failed", "cancelled"]);
|
|
5
|
+
export class AgentTelemetryAccumulator {
|
|
6
|
+
attempt;
|
|
7
|
+
now;
|
|
8
|
+
previewEdgeBytes;
|
|
9
|
+
maxToolCalls;
|
|
10
|
+
flushIntervalMs;
|
|
11
|
+
onTelemetry;
|
|
12
|
+
startedAt;
|
|
13
|
+
seenToolIds = new Set();
|
|
14
|
+
tools = new Map();
|
|
15
|
+
partialLine = "";
|
|
16
|
+
response = "";
|
|
17
|
+
stopReason;
|
|
18
|
+
latestContext;
|
|
19
|
+
outputArtifactRef;
|
|
20
|
+
lastPublishedAt = 0;
|
|
21
|
+
toolSeq = 0;
|
|
22
|
+
totalToolCallCount = 0;
|
|
23
|
+
constructor(options) {
|
|
24
|
+
this.attempt = options.attempt;
|
|
25
|
+
this.now = options.now ?? Date.now;
|
|
26
|
+
this.previewEdgeBytes = options.previewEdgeBytes ?? DEFAULT_PREVIEW_EDGE_BYTES;
|
|
27
|
+
this.maxToolCalls = options.maxToolCalls ?? DEFAULT_MAX_TOOL_CALLS;
|
|
28
|
+
this.flushIntervalMs = options.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS;
|
|
29
|
+
this.onTelemetry = options.onTelemetry;
|
|
30
|
+
this.startedAt = options.startedAt ?? new Date(this.now()).toISOString();
|
|
31
|
+
this.input = buildPreview(options.inputText, this.previewEdgeBytes, options.inputArtifactRef);
|
|
32
|
+
}
|
|
33
|
+
input;
|
|
34
|
+
append(chunk) {
|
|
35
|
+
if (chunk.length === 0)
|
|
36
|
+
return;
|
|
37
|
+
const text = this.partialLine + chunk;
|
|
38
|
+
const lines = text.split("\n");
|
|
39
|
+
this.partialLine = lines.pop() ?? "";
|
|
40
|
+
for (const line of lines)
|
|
41
|
+
this.parseLine(line);
|
|
42
|
+
}
|
|
43
|
+
flush() {
|
|
44
|
+
if (this.partialLine.trim().length > 0)
|
|
45
|
+
this.parseLine(this.partialLine);
|
|
46
|
+
this.partialLine = "";
|
|
47
|
+
this.publish("running", true);
|
|
48
|
+
}
|
|
49
|
+
responseText() {
|
|
50
|
+
return this.response;
|
|
51
|
+
}
|
|
52
|
+
setResponseText(text) {
|
|
53
|
+
this.response = text;
|
|
54
|
+
}
|
|
55
|
+
finalStopReason() {
|
|
56
|
+
return this.stopReason;
|
|
57
|
+
}
|
|
58
|
+
context() {
|
|
59
|
+
return this.latestContext;
|
|
60
|
+
}
|
|
61
|
+
setOutputArtifactRef(ref) {
|
|
62
|
+
this.outputArtifactRef = ref;
|
|
63
|
+
}
|
|
64
|
+
snapshot(state = "running", completedAt) {
|
|
65
|
+
const updatedAt = completedAt ?? new Date(this.now()).toISOString();
|
|
66
|
+
const recentCalls = [...this.tools.values()]
|
|
67
|
+
.sort((a, b) => b.lastSeq - a.lastSeq)
|
|
68
|
+
.map(({ lastSeq: _lastSeq, ...tool }) => tool);
|
|
69
|
+
return {
|
|
70
|
+
attempt: this.attempt,
|
|
71
|
+
state,
|
|
72
|
+
startedAt: this.startedAt,
|
|
73
|
+
updatedAt,
|
|
74
|
+
completedAt,
|
|
75
|
+
context: this.latestContext,
|
|
76
|
+
input: this.input,
|
|
77
|
+
output: this.response.length > 0
|
|
78
|
+
? buildPreview(this.response, this.previewEdgeBytes, this.outputArtifactRef)
|
|
79
|
+
: this.outputArtifactRef
|
|
80
|
+
? buildPreview("", this.previewEdgeBytes, this.outputArtifactRef)
|
|
81
|
+
: undefined,
|
|
82
|
+
tools: {
|
|
83
|
+
totalToolCallCount: this.totalToolCallCount,
|
|
84
|
+
droppedToolCallCount: Math.max(0, this.totalToolCallCount - recentCalls.length),
|
|
85
|
+
recentCalls
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
parseLine(line) {
|
|
90
|
+
const trimmed = line.trim();
|
|
91
|
+
if (!trimmed)
|
|
92
|
+
return;
|
|
93
|
+
const parsed = parseObject(trimmed);
|
|
94
|
+
if (!parsed)
|
|
95
|
+
return;
|
|
96
|
+
this.captureResult(parsed);
|
|
97
|
+
const update = extractUpdate(parsed);
|
|
98
|
+
if (!update)
|
|
99
|
+
return;
|
|
100
|
+
const kind = update.sessionUpdate;
|
|
101
|
+
if (kind === "agent_message_chunk") {
|
|
102
|
+
const text = readContentText(update.content);
|
|
103
|
+
if (text) {
|
|
104
|
+
this.response += text;
|
|
105
|
+
this.publish("running", false);
|
|
106
|
+
}
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (kind === "usage_update") {
|
|
110
|
+
const used = readNonNegativeNumber(update.used);
|
|
111
|
+
const size = readNonNegativeNumber(update.size);
|
|
112
|
+
if (used !== undefined && size !== undefined) {
|
|
113
|
+
this.latestContext = { used, size, updatedAt: new Date(this.now()).toISOString() };
|
|
114
|
+
this.publish("running", false);
|
|
115
|
+
}
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
if (isToolUpdate(update)) {
|
|
119
|
+
const changed = this.captureTool(update);
|
|
120
|
+
this.publish("running", changed);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
captureResult(obj) {
|
|
124
|
+
const result = readRecord(obj.result);
|
|
125
|
+
if (typeof result?.stopReason === "string")
|
|
126
|
+
this.stopReason = result.stopReason;
|
|
127
|
+
}
|
|
128
|
+
captureTool(update) {
|
|
129
|
+
const toolCallId = readString(update.toolCallId);
|
|
130
|
+
if (!toolCallId)
|
|
131
|
+
return false;
|
|
132
|
+
const now = new Date(this.now()).toISOString();
|
|
133
|
+
const wasSeen = this.seenToolIds.has(toolCallId);
|
|
134
|
+
if (!wasSeen) {
|
|
135
|
+
this.seenToolIds.add(toolCallId);
|
|
136
|
+
this.totalToolCallCount += 1;
|
|
137
|
+
}
|
|
138
|
+
const previous = this.tools.get(toolCallId);
|
|
139
|
+
const status = readString(update.status);
|
|
140
|
+
const current = previous ?? {
|
|
141
|
+
toolCallId,
|
|
142
|
+
startedAt: now,
|
|
143
|
+
updatedAt: now,
|
|
144
|
+
lastSeq: 0
|
|
145
|
+
};
|
|
146
|
+
const statusChanged = status !== undefined && status !== previous?.status;
|
|
147
|
+
current.updatedAt = now;
|
|
148
|
+
current.lastSeq = ++this.toolSeq;
|
|
149
|
+
const title = readString(update.title);
|
|
150
|
+
const kind = readString(update.kind);
|
|
151
|
+
const toolName = readString(readRecord(readRecord(update._meta)?.claudeCode)?.toolName);
|
|
152
|
+
if (title)
|
|
153
|
+
current.title = title;
|
|
154
|
+
if (kind)
|
|
155
|
+
current.kind = kind;
|
|
156
|
+
if (toolName)
|
|
157
|
+
current.toolName = toolName;
|
|
158
|
+
if (status) {
|
|
159
|
+
current.status = status;
|
|
160
|
+
if (FINAL_TOOL_STATUSES.has(status))
|
|
161
|
+
current.completedAt = now;
|
|
162
|
+
}
|
|
163
|
+
this.tools.set(toolCallId, current);
|
|
164
|
+
this.trimRecentTools();
|
|
165
|
+
return !wasSeen || statusChanged || (status !== undefined && FINAL_TOOL_STATUSES.has(status));
|
|
166
|
+
}
|
|
167
|
+
trimRecentTools() {
|
|
168
|
+
if (this.tools.size <= this.maxToolCalls)
|
|
169
|
+
return;
|
|
170
|
+
const ordered = [...this.tools.entries()].sort((a, b) => b[1].lastSeq - a[1].lastSeq);
|
|
171
|
+
const keep = new Set(ordered.slice(0, this.maxToolCalls).map(([id]) => id));
|
|
172
|
+
for (const id of this.tools.keys()) {
|
|
173
|
+
if (!keep.has(id))
|
|
174
|
+
this.tools.delete(id);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
publish(state, force) {
|
|
178
|
+
if (!this.onTelemetry)
|
|
179
|
+
return;
|
|
180
|
+
const now = this.now();
|
|
181
|
+
if (!force && now - this.lastPublishedAt < this.flushIntervalMs)
|
|
182
|
+
return;
|
|
183
|
+
this.lastPublishedAt = now;
|
|
184
|
+
this.onTelemetry(this.snapshot(state));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
export function upsertAgentAttemptTelemetry(current, attempt) {
|
|
188
|
+
const previous = current?.attempts.filter((item) => item.attempt !== attempt.attempt) ?? [];
|
|
189
|
+
return {
|
|
190
|
+
currentAttempt: attempt.attempt,
|
|
191
|
+
attempts: [...previous, attempt].sort((a, b) => a.attempt - b.attempt)
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
export function latestAgentAttemptTelemetry(telemetry) {
|
|
195
|
+
if (!telemetry)
|
|
196
|
+
return undefined;
|
|
197
|
+
return telemetry.attempts.find((attempt) => attempt.attempt === telemetry.currentAttempt)
|
|
198
|
+
?? telemetry.attempts[telemetry.attempts.length - 1];
|
|
199
|
+
}
|
|
200
|
+
function buildPreview(text, edgeBytes, artifactRef) {
|
|
201
|
+
const originalBytes = Buffer.byteLength(text);
|
|
202
|
+
const maxBytes = edgeBytes * 2;
|
|
203
|
+
if (originalBytes <= maxBytes) {
|
|
204
|
+
return { preview: text, truncated: false, originalBytes, headBytes: originalBytes, artifactRef };
|
|
205
|
+
}
|
|
206
|
+
const bytes = Buffer.from(text);
|
|
207
|
+
const head = bytes.subarray(0, edgeBytes).toString("utf8");
|
|
208
|
+
const tail = bytes.subarray(Math.max(edgeBytes, bytes.length - edgeBytes)).toString("utf8");
|
|
209
|
+
return {
|
|
210
|
+
preview: `${head}\n[acpus truncated: originalBytes=${originalBytes}]\n${tail}`,
|
|
211
|
+
truncated: true,
|
|
212
|
+
originalBytes,
|
|
213
|
+
headBytes: edgeBytes,
|
|
214
|
+
tailBytes: edgeBytes,
|
|
215
|
+
artifactRef
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
function parseObject(line) {
|
|
219
|
+
try {
|
|
220
|
+
return readRecord(JSON.parse(line));
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
return undefined;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
function extractUpdate(obj) {
|
|
227
|
+
return readRecord(readRecord(obj.params)?.update);
|
|
228
|
+
}
|
|
229
|
+
function isToolUpdate(update) {
|
|
230
|
+
const kind = update.sessionUpdate;
|
|
231
|
+
return kind === "tool_call" || kind === "tool_call_update";
|
|
232
|
+
}
|
|
233
|
+
function readContentText(value) {
|
|
234
|
+
if (typeof value === "string")
|
|
235
|
+
return value;
|
|
236
|
+
const record = readRecord(value);
|
|
237
|
+
if (!record)
|
|
238
|
+
return undefined;
|
|
239
|
+
if (typeof record.text === "string")
|
|
240
|
+
return record.text;
|
|
241
|
+
const nested = readRecord(record.content);
|
|
242
|
+
return typeof nested?.text === "string" ? nested.text : undefined;
|
|
243
|
+
}
|
|
244
|
+
function readString(value) {
|
|
245
|
+
return typeof value === "string" && value.trim().length > 0 ? value : undefined;
|
|
246
|
+
}
|
|
247
|
+
function readNonNegativeNumber(value) {
|
|
248
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : undefined;
|
|
249
|
+
}
|
|
250
|
+
function readRecord(value) {
|
|
251
|
+
return value !== null && typeof value === "object" && !Array.isArray(value)
|
|
252
|
+
? value
|
|
253
|
+
: undefined;
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=agent-telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-telemetry.js","sourceRoot":"","sources":["../src/agent-telemetry.ts"],"names":[],"mappings":"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"}
|
package/dist/artifacts.d.ts
CHANGED
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
import type { ArtifactRef } from "./types.js";
|
|
2
|
+
export interface ParsedArtifactReference {
|
|
3
|
+
uri: string;
|
|
4
|
+
runId: string;
|
|
5
|
+
/** URI-encoded resolved Node Key as it appears in the artifact URI. */
|
|
6
|
+
encodedNodeKey: string;
|
|
7
|
+
/** Decoded (resolved) Node Key with slashes (e.g. "workflow/step-a"). */
|
|
8
|
+
nodeKey: string;
|
|
9
|
+
filename: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const ArtifactReferences: {
|
|
12
|
+
make(runId: string, nodeKey: string, filename: string): ArtifactRef;
|
|
13
|
+
parse(uri: string): ParsedArtifactReference;
|
|
14
|
+
tryParse(uri: string): ParsedArtifactReference | undefined;
|
|
15
|
+
rewriteRunId(uri: string, fromRunId: string, toRunId: string): string;
|
|
16
|
+
resolvePath(baseDir: string, uri: string, isUnsafeRunId: (runId: string) => boolean): string | undefined;
|
|
17
|
+
};
|
|
2
18
|
/**
|
|
3
19
|
* Local filesystem artifact store under .acpus/state/runs/<run_id>/artifacts/.
|
|
4
20
|
* Artifact URIs follow the format: artifact://runs/<runId>/nodes/<nodeKey>/<filename>
|
|
@@ -25,6 +41,5 @@ export declare class ArtifactStore {
|
|
|
25
41
|
/** Parse an artifact URI into its components. */
|
|
26
42
|
parseArtifactRef(uri: string): ArtifactRef;
|
|
27
43
|
private nodeDir;
|
|
28
|
-
private makeRef;
|
|
29
44
|
}
|
|
30
45
|
//# sourceMappingURL=artifacts.d.ts.map
|
package/dist/artifacts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,cAAc,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,kBAAkB;gBACjB,MAAM,WAAW,MAAM,YAAY,MAAM,GAAG,WAAW;eAOxD,MAAM,GAAG,uBAAuB;kBA2B7B,MAAM,GAAG,uBAAuB,GAAG,SAAS;sBAQxC,MAAM,aAAa,MAAM,WAAW,MAAM,GAAG,MAAM;yBAMhD,MAAM,OAAO,MAAM,iBAAiB,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,GAAG,SAAS;CAmBzG,CAAC;AAEF;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,CAAC,EAAE,MAAM;IAI5B;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW;IAa9F;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW;IAQrE,qEAAqE;IACrE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW;IAQ/F,qCAAqC;IACrC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAM9D,yCAAyC;IACzC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE;IASnD,iDAAiD;IACjD,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW;IAO1C,OAAO,CAAC,OAAO;CAIhB"}
|
package/dist/artifacts.js
CHANGED
|
@@ -1,6 +1,73 @@
|
|
|
1
1
|
import { appendFileSync, existsSync, mkdirSync, readdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
3
|
import { encodeNodeKeyForDir } from "./keys.js";
|
|
4
|
+
const ARTIFACT_URI_PREFIX = "artifact://runs/";
|
|
5
|
+
export const ArtifactReferences = {
|
|
6
|
+
make(runId, nodeKey, filename) {
|
|
7
|
+
validateArtifactFilename(filename);
|
|
8
|
+
const encodedNodeKey = encodeURIComponent(nodeKey);
|
|
9
|
+
const uri = `${ARTIFACT_URI_PREFIX}${runId}/nodes/${encodedNodeKey}/${filename}`;
|
|
10
|
+
return { uri, runId, nodeKey, filename };
|
|
11
|
+
},
|
|
12
|
+
parse(uri) {
|
|
13
|
+
if (!uri.startsWith(ARTIFACT_URI_PREFIX)) {
|
|
14
|
+
throw new Error(`Invalid artifact URI: ${uri}`);
|
|
15
|
+
}
|
|
16
|
+
const parts = uri.slice(ARTIFACT_URI_PREFIX.length).split("/");
|
|
17
|
+
if (parts.length !== 4 || parts[1] !== "nodes") {
|
|
18
|
+
throw new Error(`Invalid artifact URI format: ${uri}`);
|
|
19
|
+
}
|
|
20
|
+
const runId = parts[0];
|
|
21
|
+
const encodedNodeKey = parts[2];
|
|
22
|
+
const filename = parts[3];
|
|
23
|
+
if (!runId || !encodedNodeKey || !filename) {
|
|
24
|
+
throw new Error(`Invalid artifact URI format: ${uri}`);
|
|
25
|
+
}
|
|
26
|
+
let nodeKey;
|
|
27
|
+
try {
|
|
28
|
+
nodeKey = decodeURIComponent(encodedNodeKey);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
throw new Error(`Invalid artifact URI format: ${uri}`);
|
|
32
|
+
}
|
|
33
|
+
return { uri, runId, encodedNodeKey, nodeKey, filename };
|
|
34
|
+
},
|
|
35
|
+
tryParse(uri) {
|
|
36
|
+
try {
|
|
37
|
+
return this.parse(uri);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
rewriteRunId(uri, fromRunId, toRunId) {
|
|
44
|
+
const ref = this.tryParse(uri);
|
|
45
|
+
if (!ref || ref.runId !== fromRunId)
|
|
46
|
+
return uri;
|
|
47
|
+
return `${ARTIFACT_URI_PREFIX}${toRunId}/nodes/${ref.encodedNodeKey}/${ref.filename}`;
|
|
48
|
+
},
|
|
49
|
+
resolvePath(baseDir, uri, isUnsafeRunId) {
|
|
50
|
+
const ref = this.tryParse(uri);
|
|
51
|
+
if (!ref || isUnsafeRunId(ref.runId))
|
|
52
|
+
return undefined;
|
|
53
|
+
if (!isSafeEncodedNodeKey(ref.encodedNodeKey) || !isSafeUriPathSegment(ref.filename))
|
|
54
|
+
return undefined;
|
|
55
|
+
try {
|
|
56
|
+
validateArtifactFilename(ref.filename);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
const safeNodeDir = encodeNodeKeyForDir(ref.nodeKey);
|
|
62
|
+
if (!isSafeUriPathSegment(safeNodeDir))
|
|
63
|
+
return undefined;
|
|
64
|
+
const runDir = join(baseDir, ref.runId);
|
|
65
|
+
const resolved = resolve(join(runDir, "artifacts", safeNodeDir, ref.filename));
|
|
66
|
+
if (!isPathAtOrBelow(resolved, runDir))
|
|
67
|
+
return undefined;
|
|
68
|
+
return resolved;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
4
71
|
/**
|
|
5
72
|
* Local filesystem artifact store under .acpus/state/runs/<run_id>/artifacts/.
|
|
6
73
|
* Artifact URIs follow the format: artifact://runs/<runId>/nodes/<nodeKey>/<filename>
|
|
@@ -15,33 +82,33 @@ export class ArtifactStore {
|
|
|
15
82
|
* Returns the ArtifactRef for the written file.
|
|
16
83
|
*/
|
|
17
84
|
write(runId, nodeKey, filename, content) {
|
|
18
|
-
|
|
85
|
+
const ref = ArtifactReferences.make(runId, nodeKey, filename);
|
|
19
86
|
const dir = this.nodeDir(runId, nodeKey);
|
|
20
87
|
mkdirSync(dir, { recursive: true });
|
|
21
88
|
const filePath = join(dir, filename);
|
|
22
89
|
const tmpPath = filePath + ".tmp";
|
|
23
90
|
writeFileSync(tmpPath, content);
|
|
24
91
|
renameSync(tmpPath, filePath);
|
|
25
|
-
return
|
|
92
|
+
return ref;
|
|
26
93
|
}
|
|
27
94
|
/**
|
|
28
95
|
* Create or truncate an artifact file and return its reference.
|
|
29
96
|
* Used for artifacts that will be appended while an execution is still live.
|
|
30
97
|
*/
|
|
31
98
|
create(runId, nodeKey, filename) {
|
|
32
|
-
|
|
99
|
+
const ref = ArtifactReferences.make(runId, nodeKey, filename);
|
|
33
100
|
const dir = this.nodeDir(runId, nodeKey);
|
|
34
101
|
mkdirSync(dir, { recursive: true });
|
|
35
102
|
writeFileSync(join(dir, filename), "");
|
|
36
|
-
return
|
|
103
|
+
return ref;
|
|
37
104
|
}
|
|
38
105
|
/** Append content to an existing artifact, creating it if needed. */
|
|
39
106
|
append(runId, nodeKey, filename, content) {
|
|
40
|
-
|
|
107
|
+
const ref = ArtifactReferences.make(runId, nodeKey, filename);
|
|
41
108
|
const dir = this.nodeDir(runId, nodeKey);
|
|
42
109
|
mkdirSync(dir, { recursive: true });
|
|
43
110
|
appendFileSync(join(dir, filename), content);
|
|
44
|
-
return
|
|
111
|
+
return ref;
|
|
45
112
|
}
|
|
46
113
|
/** Read an artifact file content. */
|
|
47
114
|
read(runId, nodeKey, filename) {
|
|
@@ -56,37 +123,18 @@ export class ArtifactStore {
|
|
|
56
123
|
return [];
|
|
57
124
|
return readdirSync(dir)
|
|
58
125
|
.filter((f) => !f.endsWith(".tmp"))
|
|
59
|
-
.map((filename) =>
|
|
126
|
+
.map((filename) => ArtifactReferences.make(runId, nodeKey, filename));
|
|
60
127
|
}
|
|
61
128
|
/** Parse an artifact URI into its components. */
|
|
62
129
|
parseArtifactRef(uri) {
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
throw new Error(`Invalid artifact URI: ${uri}`);
|
|
66
|
-
}
|
|
67
|
-
const rest = uri.slice(prefix.length);
|
|
68
|
-
// Format: <runId>/nodes/<nodeKey>/<filename>
|
|
69
|
-
// nodeKey may contain : but not /
|
|
70
|
-
const parts = rest.split("/");
|
|
71
|
-
if (parts.length < 4 || parts[1] !== "nodes") {
|
|
72
|
-
throw new Error(`Invalid artifact URI format: ${uri}`);
|
|
73
|
-
}
|
|
74
|
-
const runId = parts[0];
|
|
75
|
-
// Everything between "nodes/" and the last segment is the nodeKey
|
|
76
|
-
const filename = parts[parts.length - 1];
|
|
77
|
-
const nodeKey = parts.slice(2, parts.length - 1).join("/");
|
|
78
|
-
return { uri, runId, nodeKey, filename };
|
|
130
|
+
const ref = ArtifactReferences.parse(uri);
|
|
131
|
+
return { uri: ref.uri, runId: ref.runId, nodeKey: ref.nodeKey, filename: ref.filename };
|
|
79
132
|
}
|
|
80
133
|
// ─── Internal helpers ──────────────────────────────────────────
|
|
81
134
|
nodeDir(runId, nodeKey) {
|
|
82
135
|
const safeKey = encodeNodeKeyForDir(nodeKey);
|
|
83
136
|
return join(this.baseDir, runId, "artifacts", safeKey);
|
|
84
137
|
}
|
|
85
|
-
makeRef(runId, nodeKey, filename) {
|
|
86
|
-
const safeKey = encodeNodeKeyForDir(nodeKey);
|
|
87
|
-
const uri = `artifact://runs/${runId}/nodes/${safeKey}/${filename}`;
|
|
88
|
-
return { uri, runId, nodeKey, filename };
|
|
89
|
-
}
|
|
90
138
|
}
|
|
91
139
|
/** Validate that an artifact filename has no path traversal or separator characters. */
|
|
92
140
|
function validateArtifactFilename(filename) {
|
|
@@ -94,4 +142,19 @@ function validateArtifactFilename(filename) {
|
|
|
94
142
|
throw new Error(`Invalid artifact filename: ${filename}`);
|
|
95
143
|
}
|
|
96
144
|
}
|
|
145
|
+
function isSafeUriPathSegment(segment) {
|
|
146
|
+
return Boolean(segment) && !segment.split(/[/:]/).some((part) => part === "" || part === "." || part === "..");
|
|
147
|
+
}
|
|
148
|
+
function isSafeEncodedNodeKey(encodedNodeKey) {
|
|
149
|
+
return (Boolean(encodedNodeKey) &&
|
|
150
|
+
!encodedNodeKey.includes("/") &&
|
|
151
|
+
!encodedNodeKey.includes("\\") &&
|
|
152
|
+
!encodedNodeKey.includes(":") &&
|
|
153
|
+
encodedNodeKey !== "." &&
|
|
154
|
+
encodedNodeKey !== "..");
|
|
155
|
+
}
|
|
156
|
+
function isPathAtOrBelow(path, basePath) {
|
|
157
|
+
const normalizedBase = resolve(basePath);
|
|
158
|
+
return path === normalizedBase || path.startsWith(`${normalizedBase}/`);
|
|
159
|
+
}
|
|
97
160
|
//# sourceMappingURL=artifacts.js.map
|
package/dist/artifacts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,UAAU,EACV,aAAa,EACd,MAAM,SAAS,CAAC;AACjB,OAAO,
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ArtifactStore } from "./artifacts.js";
|
|
2
|
+
import type { AgentAttemptTelemetry } from "./types.js";
|
|
3
|
+
export interface AgentAttemptFinalArtifacts {
|
|
4
|
+
responseText?: string;
|
|
5
|
+
stderr?: string;
|
|
6
|
+
diagnostics?: string[];
|
|
7
|
+
}
|
|
8
|
+
export interface AgentAttemptStartArtifacts {
|
|
9
|
+
artifactRefs: string[];
|
|
10
|
+
promptRef: string;
|
|
11
|
+
rawAcpDebugRef?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface AgentAttemptFinalArtifactRefs {
|
|
14
|
+
artifactRefs: string[];
|
|
15
|
+
responseRef?: string;
|
|
16
|
+
stderrRef?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Owns runtime artifact naming and lifecycle rules for executable node attempts.
|
|
20
|
+
*/
|
|
21
|
+
export declare class AttemptArtifactRecorder {
|
|
22
|
+
private readonly artifactStore;
|
|
23
|
+
constructor(artifactStore: ArtifactStore);
|
|
24
|
+
startAgentAttempt(runId: string, nodeKey: string, attemptNo: number, prompt: string, options?: {
|
|
25
|
+
rawAcpDebug?: boolean;
|
|
26
|
+
}): AgentAttemptStartArtifacts;
|
|
27
|
+
appendAgentRawAcpDebug(runId: string, nodeKey: string, attemptNo: number, chunk: string): void;
|
|
28
|
+
finalizeAgentAttempt(runId: string, nodeKey: string, attemptNo: number, content: AgentAttemptFinalArtifacts): AgentAttemptFinalArtifactRefs;
|
|
29
|
+
writeAgentTelemetry(runId: string, nodeKey: string, attemptNo: number, telemetry: AgentAttemptTelemetry): string;
|
|
30
|
+
writeProgramArtifacts(runId: string, nodeKey: string, stdout: string, stderr: string): string[];
|
|
31
|
+
mergeAttemptRefs(target: string[], refs: string[] | undefined): void;
|
|
32
|
+
private mergeStderrDiagnostics;
|
|
33
|
+
private agentAttemptPrefix;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=attempt-artifacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attempt-artifacts.d.ts","sourceRoot":"","sources":["../src/attempt-artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,WAAW,0BAA0B;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,6BAA6B;IAC5C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,uBAAuB;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAEzD,iBAAiB,CACf,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAO,GACtC,0BAA0B;IAa7B,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI9F,oBAAoB,CAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,0BAA0B,GAClC,6BAA6B;IAiBhC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,qBAAqB,GAAG,MAAM;IAShH,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAM/F,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI;IAYpE,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,kBAAkB;CAG3B"}
|