@agentqueue/worker 0.0.0 → 0.3.1-ci.g02c90ca5cd192c5a75a7d1d19329683cefb22d6e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +159 -0
- package/THIRD_PARTY_NOTICES.md +27 -0
- package/dist/bin/aq-askpass.d.ts +2 -0
- package/dist/bin/aq-askpass.js +5 -0
- package/dist/bin/aq-askpass.js.map +1 -0
- package/dist/bin/aq.d.ts +2 -0
- package/dist/bin/aq.js +9 -0
- package/dist/bin/aq.js.map +1 -0
- package/dist/release.json +16 -0
- package/dist/src/app-server/checkpoint-codec.d.ts +4 -0
- package/dist/src/app-server/checkpoint-codec.js +31 -0
- package/dist/src/app-server/checkpoint-codec.js.map +1 -0
- package/dist/src/app-server/codex-token-snapshot.d.ts +11 -0
- package/dist/src/app-server/codex-token-snapshot.js +45 -0
- package/dist/src/app-server/codex-token-snapshot.js.map +1 -0
- package/dist/src/app-server/index.d.ts +70 -0
- package/dist/src/app-server/index.js +319 -0
- package/dist/src/app-server/index.js.map +1 -0
- package/dist/src/app-server/native-checkpoint.d.ts +12 -0
- package/dist/src/app-server/native-checkpoint.js +179 -0
- package/dist/src/app-server/native-checkpoint.js.map +1 -0
- package/dist/src/app-server/process-group.d.ts +6 -0
- package/dist/src/app-server/process-group.js +122 -0
- package/dist/src/app-server/process-group.js.map +1 -0
- package/dist/src/app-server/transports.d.ts +68 -0
- package/dist/src/app-server/transports.js +228 -0
- package/dist/src/app-server/transports.js.map +1 -0
- package/dist/src/app-server/worker-checkpoint.d.ts +15 -0
- package/dist/src/app-server/worker-checkpoint.js +76 -0
- package/dist/src/app-server/worker-checkpoint.js.map +1 -0
- package/dist/src/broker.d.ts +4 -0
- package/dist/src/broker.js +104 -0
- package/dist/src/broker.js.map +1 -0
- package/dist/src/cli.d.ts +14 -0
- package/dist/src/cli.js +212 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/client.d.ts +19 -0
- package/dist/src/client.js +116 -0
- package/dist/src/client.js.map +1 -0
- package/dist/src/codex-owner-auth.d.ts +14 -0
- package/dist/src/codex-owner-auth.js +155 -0
- package/dist/src/codex-owner-auth.js.map +1 -0
- package/dist/src/codex-runtime.d.ts +32 -0
- package/dist/src/codex-runtime.js +383 -0
- package/dist/src/codex-runtime.js.map +1 -0
- package/dist/src/completion-outbox.d.ts +38 -0
- package/dist/src/completion-outbox.js +90 -0
- package/dist/src/completion-outbox.js.map +1 -0
- package/dist/src/config.d.ts +16 -0
- package/dist/src/config.js +57 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/diagnostics.d.ts +3 -0
- package/dist/src/diagnostics.js +40 -0
- package/dist/src/diagnostics.js.map +1 -0
- package/dist/src/isolation.d.ts +34 -0
- package/dist/src/isolation.js +690 -0
- package/dist/src/isolation.js.map +1 -0
- package/dist/src/planning-dev/analysis-runtime.d.ts +6 -0
- package/dist/src/planning-dev/analysis-runtime.js +65 -0
- package/dist/src/planning-dev/analysis-runtime.js.map +1 -0
- package/dist/src/planning-dev/index.d.ts +35 -0
- package/dist/src/planning-dev/index.js +244 -0
- package/dist/src/planning-dev/index.js.map +1 -0
- package/dist/src/planning-dev/native-binary.d.ts +1 -0
- package/dist/src/planning-dev/native-binary.js +67 -0
- package/dist/src/planning-dev/native-binary.js.map +1 -0
- package/dist/src/planning-dev/protocol.d.ts +30 -0
- package/dist/src/planning-dev/protocol.js +43 -0
- package/dist/src/planning-dev/protocol.js.map +1 -0
- package/dist/src/planning-dev/runtime.d.ts +11 -0
- package/dist/src/planning-dev/runtime.js +437 -0
- package/dist/src/planning-dev/runtime.js.map +1 -0
- package/dist/src/process-lock.d.ts +4 -0
- package/dist/src/process-lock.js +44 -0
- package/dist/src/process-lock.js.map +1 -0
- package/dist/src/provider-status.d.ts +21 -0
- package/dist/src/provider-status.js +73 -0
- package/dist/src/provider-status.js.map +1 -0
- package/dist/src/readiness.d.ts +15 -0
- package/dist/src/readiness.js +145 -0
- package/dist/src/readiness.js.map +1 -0
- package/dist/src/register.d.ts +5 -0
- package/dist/src/register.js +178 -0
- package/dist/src/register.js.map +1 -0
- package/dist/src/runtime.d.ts +100 -0
- package/dist/src/runtime.js +2288 -0
- package/dist/src/runtime.js.map +1 -0
- package/dist/src/service.d.ts +11 -0
- package/dist/src/service.js +119 -0
- package/dist/src/service.js.map +1 -0
- package/dist/src/supervisor.d.ts +9 -0
- package/dist/src/supervisor.js +157 -0
- package/dist/src/supervisor.js.map +1 -0
- package/dist/src/turn-checkpoint.d.ts +58 -0
- package/dist/src/turn-checkpoint.js +314 -0
- package/dist/src/turn-checkpoint.js.map +1 -0
- package/dist/src/types.d.ts +168 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/usage-limit.d.ts +13 -0
- package/dist/src/usage-limit.js +75 -0
- package/dist/src/usage-limit.js.map +1 -0
- package/dist/src/version.d.ts +6 -0
- package/dist/src/version.js +49 -0
- package/dist/src/version.js.map +1 -0
- package/dist/src/worker-types.d.ts +12 -0
- package/dist/src/worker-types.js +2 -0
- package/dist/src/worker-types.js.map +1 -0
- package/package.json +56 -4
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
const TURN_CHECKPOINT_REF_PREFIX = "refs/aq/checkpoints/";
|
|
3
|
+
const MAX_TURN_CHECKPOINT_FILES = 300;
|
|
4
|
+
const DAY_MS = 86_400_000;
|
|
5
|
+
const RUN_ID = /^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/;
|
|
6
|
+
const SHA = /^[0-9a-f]{40}(?:[0-9a-f]{24})?$/;
|
|
7
|
+
const STATUSES = new Set(["A", "M", "D", "R", "C", "T"]);
|
|
8
|
+
export const shellQuote = (value) => `'${value.replace(/'/g, `'\\''`)}'`;
|
|
9
|
+
function utcDay(at) {
|
|
10
|
+
return new Date(at).toISOString().slice(0, 10).replaceAll("-", "");
|
|
11
|
+
}
|
|
12
|
+
const REF = /^refs\/aq\/checkpoints\/(\d{4})(\d{2})(\d{2})\/([A-Za-z0-9][A-Za-z0-9_-]{0,127})\/([1-9]\d{0,5})$/;
|
|
13
|
+
export function turnCheckpointRef(runId, attempt, at) {
|
|
14
|
+
if (!RUN_ID.test(runId) || !Number.isSafeInteger(attempt) || attempt < 1 || attempt > 999_999)
|
|
15
|
+
throw new Error("invalid Run identity for a turn checkpoint");
|
|
16
|
+
return `${TURN_CHECKPOINT_REF_PREFIX}${utcDay(at)}/${runId}/${attempt}`;
|
|
17
|
+
}
|
|
18
|
+
export function turnCheckpointRefAllowed(ref, run, now) {
|
|
19
|
+
const match = REF.exec(ref);
|
|
20
|
+
return (match?.[4] === run.id &&
|
|
21
|
+
match[5] === String(run.attempt) &&
|
|
22
|
+
[now, now - DAY_MS].some((at) => utcDay(at) === `${match[1]}${match[2]}${match[3]}`));
|
|
23
|
+
}
|
|
24
|
+
export function turnCheckpointRefDay(ref) {
|
|
25
|
+
const match = REF.exec(ref);
|
|
26
|
+
if (!match)
|
|
27
|
+
return null;
|
|
28
|
+
const at = Date.UTC(Number(match[1]), Number(match[2]) - 1, Number(match[3]));
|
|
29
|
+
return Number.isFinite(at) && utcDay(at) === `${match[1]}${match[2]}${match[3]}` ? at : null;
|
|
30
|
+
}
|
|
31
|
+
const PRELUDE = [
|
|
32
|
+
"set -eu",
|
|
33
|
+
"unset AGENT_CREDENTIAL_TOKEN",
|
|
34
|
+
"export GIT_CONFIG_NOSYSTEM=1 GIT_TERMINAL_PROMPT=0 GIT_OPTIONAL_LOCKS=0",
|
|
35
|
+
"export GIT_AUTHOR_NAME='Agent Queue' GIT_AUTHOR_EMAIL='checkpoints@agentqueue.invalid'",
|
|
36
|
+
"export GIT_COMMITTER_NAME='Agent Queue' GIT_COMMITTER_EMAIL='checkpoints@agentqueue.invalid'",
|
|
37
|
+
'g() { command git -c core.hooksPath=/dev/null -c core.fsmonitor=false "$@"; }',
|
|
38
|
+
'work=$(mktemp -d "$(g rev-parse --git-path aq-turn-checkpoint).XXXXXX")',
|
|
39
|
+
"trap 'rm -rf \"$work\"' EXIT",
|
|
40
|
+
'index="$work/index"',
|
|
41
|
+
'real=$(g rev-parse --git-path index); [ ! -f "$real" ] || cp "$real" "$index"',
|
|
42
|
+
`GIT_INDEX_FILE="$index" g add -A -- ':/' ':(top,exclude).agent-turn' ':(top,exclude).codex/skills'`,
|
|
43
|
+
'tree=$(GIT_INDEX_FILE="$index" g write-tree)',
|
|
44
|
+
"head=$(g rev-parse -q --verify 'HEAD^{commit}' || true)",
|
|
45
|
+
];
|
|
46
|
+
function startSubject(runId) {
|
|
47
|
+
if (!RUN_ID.test(runId))
|
|
48
|
+
throw new Error("invalid Run id for a turn checkpoint");
|
|
49
|
+
return `Agent Queue turn start ${runId}`;
|
|
50
|
+
}
|
|
51
|
+
export function turnCheckpointStartScript(runId) {
|
|
52
|
+
return [
|
|
53
|
+
...PRELUDE,
|
|
54
|
+
`start=$(g commit-tree "$tree" \${head:+-p "$head"} -m ${shellQuote(startSubject(runId))})`,
|
|
55
|
+
'g update-ref refs/worktree/aq/turn-start "$start"',
|
|
56
|
+
].join("\n");
|
|
57
|
+
}
|
|
58
|
+
export function turnCheckpointEndScript(runId, nonce, baseSha) {
|
|
59
|
+
if (!/^[0-9a-f]{16,64}$/.test(nonce))
|
|
60
|
+
throw new Error("invalid turn checkpoint nonce");
|
|
61
|
+
const base = baseSha && SHA.test(baseSha) ? baseSha : "";
|
|
62
|
+
const names = "--no-ext-diff --no-textconv --name-status -z -M";
|
|
63
|
+
const counts = "--no-ext-diff --no-textconv --numstat -z -M";
|
|
64
|
+
const paths = "--format= --name-only -z --no-renames";
|
|
65
|
+
const since = '"@$at" ${started:+"^$started"} "$head"';
|
|
66
|
+
return [
|
|
67
|
+
...PRELUDE,
|
|
68
|
+
"start=$(g rev-parse -q --verify 'refs/worktree/aq/turn-start^{commit}') || { echo 'turn start checkpoint is missing' >&2; exit 3; }",
|
|
69
|
+
`[ "$(g show -s --format=%s "$start")" = ${shellQuote(startSubject(runId))} ] || { echo 'turn start checkpoint belongs to another Run' >&2; exit 3; }`,
|
|
70
|
+
"g update-ref -d refs/worktree/aq/turn-start",
|
|
71
|
+
'end=$(g commit-tree "$tree" ${head:+-p "$head"} -p "$start" -m "Agent Queue turn checkpoint")',
|
|
72
|
+
'started=$(g rev-parse -q --verify "$start^1" || true)',
|
|
73
|
+
'at=$(g show -s --format=%ct "$start")',
|
|
74
|
+
"empty=$(g hash-object -t tree /dev/null)",
|
|
75
|
+
'out="$work/out"',
|
|
76
|
+
`emit() { printf '\\n@@${nonce} %s\\n' "$1"; base64 < "$out"; }`,
|
|
77
|
+
'printf \'%s %s %s %s %s\' "$start" "$end" "${started:--}" "${head:--}" "$at" > "$out"',
|
|
78
|
+
"emit meta",
|
|
79
|
+
`g diff ${names} "$start" "$end" > "$out"`,
|
|
80
|
+
"emit turn-status",
|
|
81
|
+
`g diff ${counts} "$start" "$end" > "$out"`,
|
|
82
|
+
"emit turn-numstat",
|
|
83
|
+
'if [ "$started" != "$head" ]; then',
|
|
84
|
+
` g diff --no-ext-diff --name-only -z --no-renames "\${started:-$empty}" "$start" > "$out"`,
|
|
85
|
+
` g diff --no-ext-diff --name-only -z --no-renames "\${head:-$empty}" "$end" >> "$out"`,
|
|
86
|
+
' if [ -n "$started" ] && [ -n "$head" ]; then',
|
|
87
|
+
` g log ${paths} --diff-merges=remerge "$head..$started" >> "$out" 2>/dev/null || g log ${paths} "$head..$started" >> "$out"`,
|
|
88
|
+
" fi",
|
|
89
|
+
' if [ -n "$head" ]; then',
|
|
90
|
+
` g log ${paths} --diff-merges=remerge --since-as-filter=${since} >> "$out" 2>/dev/null || g log ${paths} --since=${since} >> "$out"`,
|
|
91
|
+
" fi",
|
|
92
|
+
" emit authored",
|
|
93
|
+
"fi",
|
|
94
|
+
...(base
|
|
95
|
+
? [
|
|
96
|
+
`if g cat-file -e ${shellQuote(`${base}^{commit}`)} 2>/dev/null && merged=$(g merge-base ${shellQuote(base)} "$end"); then`,
|
|
97
|
+
' printf %s "$merged" > "$out"',
|
|
98
|
+
" emit branch-from",
|
|
99
|
+
` g diff ${names} "$merged" "$end" > "$out"`,
|
|
100
|
+
" emit branch-status",
|
|
101
|
+
` g diff ${counts} "$merged" "$end" > "$out"`,
|
|
102
|
+
" emit branch-numstat",
|
|
103
|
+
"fi",
|
|
104
|
+
]
|
|
105
|
+
: []),
|
|
106
|
+
': > "$out"',
|
|
107
|
+
"emit done",
|
|
108
|
+
].join("\n");
|
|
109
|
+
}
|
|
110
|
+
export function turnCheckpointPushScript(git, remote, end, ref) {
|
|
111
|
+
if (!SHA.test(end))
|
|
112
|
+
throw new Error("invalid turn checkpoint commit");
|
|
113
|
+
return [
|
|
114
|
+
"set -eu",
|
|
115
|
+
'plain() { env -u AGENT_CREDENTIAL_TOKEN GIT_CONFIG_NOSYSTEM=1 git -c core.fsmonitor=false "$@"; }',
|
|
116
|
+
"common=$(plain rev-parse --git-common-dir)",
|
|
117
|
+
"path=$(plain rev-parse --git-path aq-turn-checkpoint-push)",
|
|
118
|
+
"format=$(plain rev-parse --show-object-format 2>/dev/null || true)",
|
|
119
|
+
'case "$format" in sha1 | sha256) format="--object-format=$format" ;; *) format= ;; esac',
|
|
120
|
+
'objects=$(cd "$common" && pwd -P)/objects',
|
|
121
|
+
'push=$(mktemp -d "$path.XXXXXX")',
|
|
122
|
+
"trap 'rm -rf \"$push\"' EXIT",
|
|
123
|
+
'push=$(cd "$push" && pwd -P)',
|
|
124
|
+
'cd "$push"',
|
|
125
|
+
"plain init --quiet --bare --template= $format .",
|
|
126
|
+
"mkdir -p objects/info && printf '%s\\n' \"$objects\" >objects/info/alternates",
|
|
127
|
+
`GIT_DIR="$push" ${git} -c core.hooksPath=/dev/null push --no-verify --quiet ${shellQuote(remote)} ${shellQuote(`${end}:${ref}`)}`,
|
|
128
|
+
].join("\n");
|
|
129
|
+
}
|
|
130
|
+
export function turnCheckpointNonce() {
|
|
131
|
+
return randomBytes(12).toString("hex");
|
|
132
|
+
}
|
|
133
|
+
function sections(output, nonce) {
|
|
134
|
+
const marker = `@@${nonce} `;
|
|
135
|
+
const found = new Map();
|
|
136
|
+
let current = null;
|
|
137
|
+
for (const line of output.split("\n")) {
|
|
138
|
+
if (line.startsWith(marker)) {
|
|
139
|
+
const name = line.slice(marker.length).trim();
|
|
140
|
+
if (found.has(name))
|
|
141
|
+
return null;
|
|
142
|
+
current = [];
|
|
143
|
+
found.set(name, current);
|
|
144
|
+
}
|
|
145
|
+
else if (current && line.trim())
|
|
146
|
+
current.push(line.trim());
|
|
147
|
+
}
|
|
148
|
+
if (!found.has("done") || !found.has("meta"))
|
|
149
|
+
return null;
|
|
150
|
+
const decoded = new Map();
|
|
151
|
+
for (const [name, lines] of found) {
|
|
152
|
+
const text = lines.join("");
|
|
153
|
+
if (!/^[A-Za-z0-9+/]*={0,2}$/.test(text))
|
|
154
|
+
return null;
|
|
155
|
+
decoded.set(name, Buffer.from(text, "base64"));
|
|
156
|
+
}
|
|
157
|
+
return decoded;
|
|
158
|
+
}
|
|
159
|
+
function nulFields(value) {
|
|
160
|
+
if (!value?.length)
|
|
161
|
+
return [];
|
|
162
|
+
const fields = value.toString("utf8").split("\0");
|
|
163
|
+
if (fields.at(-1) === "")
|
|
164
|
+
fields.pop();
|
|
165
|
+
return fields;
|
|
166
|
+
}
|
|
167
|
+
function count(value) {
|
|
168
|
+
if (value === "-")
|
|
169
|
+
return null;
|
|
170
|
+
return /^\d{1,9}$/.test(value) ? Number(value) : Number.NaN;
|
|
171
|
+
}
|
|
172
|
+
function validPath(path) {
|
|
173
|
+
return typeof path === "string" && path.length > 0 && path.length <= 4096 && !path.includes("\n");
|
|
174
|
+
}
|
|
175
|
+
function scope(from, to, status, numstat, include) {
|
|
176
|
+
const entries = [];
|
|
177
|
+
const statusFields = nulFields(status);
|
|
178
|
+
for (let index = 0; index < statusFields.length;) {
|
|
179
|
+
const code = statusFields[index++];
|
|
180
|
+
const letter = code.charAt(0);
|
|
181
|
+
if (!STATUSES.has(letter))
|
|
182
|
+
return null;
|
|
183
|
+
const renamed = letter === "R" || letter === "C";
|
|
184
|
+
const oldPath = renamed ? statusFields[index++] : undefined;
|
|
185
|
+
const path = statusFields[index++];
|
|
186
|
+
if (!validPath(path) || (renamed && !validPath(oldPath)))
|
|
187
|
+
return null;
|
|
188
|
+
entries.push({
|
|
189
|
+
path,
|
|
190
|
+
...(renamed ? { oldPath: oldPath } : {}),
|
|
191
|
+
status: letter,
|
|
192
|
+
additions: 0,
|
|
193
|
+
deletions: 0,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
const counted = new Map();
|
|
197
|
+
const countFields = nulFields(numstat);
|
|
198
|
+
for (let index = 0; index < countFields.length;) {
|
|
199
|
+
const match = /^(-|\d+)\t(-|\d+)\t([\s\S]*)$/.exec(countFields[index++]);
|
|
200
|
+
if (!match)
|
|
201
|
+
return null;
|
|
202
|
+
let path = match[3];
|
|
203
|
+
if (path === "") {
|
|
204
|
+
index += 1;
|
|
205
|
+
path = countFields[index++];
|
|
206
|
+
}
|
|
207
|
+
const additions = count(match[1]);
|
|
208
|
+
const deletions = count(match[2]);
|
|
209
|
+
if (!validPath(path) || Number.isNaN(additions) || Number.isNaN(deletions))
|
|
210
|
+
return null;
|
|
211
|
+
counted.set(path, { additions, deletions });
|
|
212
|
+
}
|
|
213
|
+
for (const entry of entries) {
|
|
214
|
+
const found = counted.get(entry.path);
|
|
215
|
+
if (!found)
|
|
216
|
+
return null;
|
|
217
|
+
Object.assign(entry, found);
|
|
218
|
+
}
|
|
219
|
+
const files = include ? entries.filter(include) : entries;
|
|
220
|
+
files.sort((a, b) => Number(a.path > b.path) - Number(a.path < b.path));
|
|
221
|
+
return {
|
|
222
|
+
from,
|
|
223
|
+
to,
|
|
224
|
+
files: files.slice(0, MAX_TURN_CHECKPOINT_FILES),
|
|
225
|
+
fileCount: files.length,
|
|
226
|
+
additions: files.reduce((sum, file) => sum + (file.additions ?? 0), 0),
|
|
227
|
+
deletions: files.reduce((sum, file) => sum + (file.deletions ?? 0), 0),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
export function parseTurnCheckpointCapture(output, nonce) {
|
|
231
|
+
const found = sections(output, nonce);
|
|
232
|
+
if (!found)
|
|
233
|
+
return null;
|
|
234
|
+
const meta = found.get("meta").toString("utf8").split(" ");
|
|
235
|
+
if (meta.length !== 5)
|
|
236
|
+
return null;
|
|
237
|
+
const [start, end, rawStarted, rawHead] = meta;
|
|
238
|
+
const headStart = rawStarted === "-" ? null : rawStarted;
|
|
239
|
+
const headEnd = rawHead === "-" ? null : rawHead;
|
|
240
|
+
if (![start, end, headStart, headEnd].every((sha) => sha === null || SHA.test(sha)))
|
|
241
|
+
return null;
|
|
242
|
+
const headMoved = headStart !== headEnd;
|
|
243
|
+
const authored = new Set(nulFields(found.get("authored")).filter(Boolean));
|
|
244
|
+
if (headMoved && !found.has("authored"))
|
|
245
|
+
return null;
|
|
246
|
+
const turn = scope(start, end, found.get("turn-status"), found.get("turn-numstat"), headMoved
|
|
247
|
+
? (file) => authored.has(file.path) || (file.oldPath !== undefined && authored.has(file.oldPath))
|
|
248
|
+
: undefined);
|
|
249
|
+
if (!turn)
|
|
250
|
+
return null;
|
|
251
|
+
let branch = null;
|
|
252
|
+
if (found.has("branch-from")) {
|
|
253
|
+
const from = found.get("branch-from").toString("utf8");
|
|
254
|
+
if (!SHA.test(from))
|
|
255
|
+
return null;
|
|
256
|
+
branch = scope(from, end, found.get("branch-status"), found.get("branch-numstat"));
|
|
257
|
+
if (!branch)
|
|
258
|
+
return null;
|
|
259
|
+
}
|
|
260
|
+
return { start, end, headStart, headEnd, headMoved, turn, branch };
|
|
261
|
+
}
|
|
262
|
+
export function turnCheckpointFailureReason(stderr, fallback) {
|
|
263
|
+
const lines = stderr
|
|
264
|
+
.split("\n")
|
|
265
|
+
.map((value) => value.trim())
|
|
266
|
+
.filter(Boolean);
|
|
267
|
+
const line = [...lines].reverse().find((value) => /^(!|remote:)\s/.test(value)) ?? lines.at(-1);
|
|
268
|
+
return (line ?? fallback).replace(/'?https?:\/\/[^\s']+'?/g, "[url]").slice(0, 200);
|
|
269
|
+
}
|
|
270
|
+
export function turnCheckpointResult(capture, ref, capturedAt, pushFailure) {
|
|
271
|
+
return {
|
|
272
|
+
status: pushFailure ? "push_rejected" : "pushed",
|
|
273
|
+
...(pushFailure ? { reason: pushFailure } : {}),
|
|
274
|
+
capturedAt,
|
|
275
|
+
ref,
|
|
276
|
+
headStart: capture.headStart,
|
|
277
|
+
headEnd: capture.headEnd,
|
|
278
|
+
headMoved: capture.headMoved,
|
|
279
|
+
turn: capture.turn,
|
|
280
|
+
branch: capture.branch,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
export const MAX_TURN_CHECKPOINT_CAPTURE_CHARS = 1_000_000;
|
|
284
|
+
export const TOO_LARGE = "workspace changes are too large to summarize";
|
|
285
|
+
export function turnCheckpointFromWorker(value, run, window) {
|
|
286
|
+
if (!value || typeof value !== "object")
|
|
287
|
+
return undefined;
|
|
288
|
+
const input = value;
|
|
289
|
+
const capturedAt = input.capturedAt;
|
|
290
|
+
if (typeof capturedAt !== "number" ||
|
|
291
|
+
!Number.isSafeInteger(capturedAt) ||
|
|
292
|
+
capturedAt < window.notBefore ||
|
|
293
|
+
capturedAt > window.notAfter)
|
|
294
|
+
return undefined;
|
|
295
|
+
if (typeof input.failure === "string")
|
|
296
|
+
return {
|
|
297
|
+
status: "unavailable",
|
|
298
|
+
reason: turnCheckpointFailureReason(input.failure, "workspace changes could not be captured"),
|
|
299
|
+
capturedAt,
|
|
300
|
+
};
|
|
301
|
+
if (typeof input.output === "string" && input.output.length > MAX_TURN_CHECKPOINT_CAPTURE_CHARS)
|
|
302
|
+
return { status: "unavailable", reason: TOO_LARGE, capturedAt };
|
|
303
|
+
if (typeof input.nonce !== "string" ||
|
|
304
|
+
typeof input.output !== "string" ||
|
|
305
|
+
typeof input.ref !== "string" ||
|
|
306
|
+
!turnCheckpointRefAllowed(input.ref, run, capturedAt) ||
|
|
307
|
+
(input.pushFailure !== null && typeof input.pushFailure !== "string"))
|
|
308
|
+
return undefined;
|
|
309
|
+
const capture = parseTurnCheckpointCapture(input.output, input.nonce);
|
|
310
|
+
if (!capture)
|
|
311
|
+
return undefined;
|
|
312
|
+
return turnCheckpointResult(capture, input.ref, capturedAt, input.pushFailure === null ? null : turnCheckpointFailureReason(input.pushFailure, "checkpoint push was rejected"));
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=turn-checkpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn-checkpoint.js","sourceRoot":"","sources":["../../src/turn-checkpoint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
export interface WorkerConfig {
|
|
2
|
+
server: string;
|
|
3
|
+
worker: {
|
|
4
|
+
id: string;
|
|
5
|
+
ownerId: string;
|
|
6
|
+
name: string;
|
|
7
|
+
publicKey: string;
|
|
8
|
+
fingerprint: string;
|
|
9
|
+
};
|
|
10
|
+
privateKey: string;
|
|
11
|
+
installedAt: number;
|
|
12
|
+
runtimeModels?: Record<string, string[]>;
|
|
13
|
+
}
|
|
14
|
+
interface WorkerControl {
|
|
15
|
+
maxConcurrentAssignments: number;
|
|
16
|
+
revision: number;
|
|
17
|
+
}
|
|
18
|
+
export interface ClaimResponse {
|
|
19
|
+
assignment: Assignment | null;
|
|
20
|
+
control: WorkerControl;
|
|
21
|
+
}
|
|
22
|
+
export interface CapabilityEntry {
|
|
23
|
+
audience: string;
|
|
24
|
+
toolIds: string[];
|
|
25
|
+
actionIds: string[];
|
|
26
|
+
approvalId?: string;
|
|
27
|
+
operationHash?: string;
|
|
28
|
+
token: string;
|
|
29
|
+
expiresAt: number;
|
|
30
|
+
}
|
|
31
|
+
type WorkerTrustRequirement = "brokered_tools" | "local_model_auth" | "ephemeral_secret_injection" | "user_cli_auth";
|
|
32
|
+
export interface Assignment {
|
|
33
|
+
version: 2;
|
|
34
|
+
run: {
|
|
35
|
+
id: string;
|
|
36
|
+
sessionId: string;
|
|
37
|
+
attempt: number;
|
|
38
|
+
leaseToken: string;
|
|
39
|
+
leaseExpiresAt: number;
|
|
40
|
+
prompt: string;
|
|
41
|
+
};
|
|
42
|
+
workflow: {
|
|
43
|
+
id: string;
|
|
44
|
+
revision: number;
|
|
45
|
+
contentHash: string;
|
|
46
|
+
name: string;
|
|
47
|
+
profile: {
|
|
48
|
+
instructions: {
|
|
49
|
+
project: string;
|
|
50
|
+
workflow: string;
|
|
51
|
+
};
|
|
52
|
+
skills: Array<{
|
|
53
|
+
id: string;
|
|
54
|
+
version?: string;
|
|
55
|
+
}>;
|
|
56
|
+
setup?: {
|
|
57
|
+
command: string;
|
|
58
|
+
timeoutMs: number;
|
|
59
|
+
};
|
|
60
|
+
repository?: {
|
|
61
|
+
workingDirectory?: string;
|
|
62
|
+
};
|
|
63
|
+
harness: {
|
|
64
|
+
id: string;
|
|
65
|
+
model?: string;
|
|
66
|
+
thinkingLevel?: string;
|
|
67
|
+
fastMode?: boolean;
|
|
68
|
+
agentMode?: "plan" | "goal";
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
systemPrompt?: string;
|
|
73
|
+
snapshot: {
|
|
74
|
+
kind: string;
|
|
75
|
+
id: string;
|
|
76
|
+
revision: number;
|
|
77
|
+
hash: string;
|
|
78
|
+
actor: {
|
|
79
|
+
id: string;
|
|
80
|
+
type: string;
|
|
81
|
+
displayName?: string;
|
|
82
|
+
};
|
|
83
|
+
scopeId?: string;
|
|
84
|
+
projectId?: string;
|
|
85
|
+
workspaceKey?: string;
|
|
86
|
+
toolManifestHash?: string;
|
|
87
|
+
authorizationContext?: string;
|
|
88
|
+
trustRequirements: WorkerTrustRequirement[];
|
|
89
|
+
};
|
|
90
|
+
ticket?: Record<string, unknown>;
|
|
91
|
+
transcript: unknown[];
|
|
92
|
+
skills: Array<{
|
|
93
|
+
id: string;
|
|
94
|
+
name: string;
|
|
95
|
+
version: string;
|
|
96
|
+
contentHash: string;
|
|
97
|
+
body: string;
|
|
98
|
+
files: Array<{
|
|
99
|
+
path: string;
|
|
100
|
+
content: string;
|
|
101
|
+
executable: boolean;
|
|
102
|
+
}>;
|
|
103
|
+
}>;
|
|
104
|
+
repository?: {
|
|
105
|
+
owner: string;
|
|
106
|
+
name: string;
|
|
107
|
+
defaultBranch: string;
|
|
108
|
+
baseRef: string;
|
|
109
|
+
baseSha?: string;
|
|
110
|
+
branch: string;
|
|
111
|
+
gitUrl: string;
|
|
112
|
+
};
|
|
113
|
+
credentials: {
|
|
114
|
+
version: 1;
|
|
115
|
+
capabilities: CapabilityEntry[];
|
|
116
|
+
approvalRequired: Array<{
|
|
117
|
+
toolId: string;
|
|
118
|
+
actionId: string;
|
|
119
|
+
}>;
|
|
120
|
+
};
|
|
121
|
+
unavailableTools?: string[];
|
|
122
|
+
attachments?: Array<{
|
|
123
|
+
index: number;
|
|
124
|
+
name: string;
|
|
125
|
+
mimetype: string;
|
|
126
|
+
sizeBytes: number;
|
|
127
|
+
}>;
|
|
128
|
+
auxiliary?: {
|
|
129
|
+
title: boolean;
|
|
130
|
+
memory: boolean;
|
|
131
|
+
titleOnly?: boolean;
|
|
132
|
+
};
|
|
133
|
+
securityScreen?: {
|
|
134
|
+
content: string;
|
|
135
|
+
forceStrict?: string;
|
|
136
|
+
};
|
|
137
|
+
security?: {
|
|
138
|
+
screenToolResults: boolean;
|
|
139
|
+
};
|
|
140
|
+
checkpoint?: {
|
|
141
|
+
generation: number;
|
|
142
|
+
contentHash: string;
|
|
143
|
+
archive: string;
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
export interface CheckpointUpload {
|
|
147
|
+
expectedGeneration: number;
|
|
148
|
+
contentHash: string;
|
|
149
|
+
archive: string;
|
|
150
|
+
}
|
|
151
|
+
export interface WorkerOutgoingAttachment {
|
|
152
|
+
name: string;
|
|
153
|
+
mimetype: string;
|
|
154
|
+
sizeBytes: number;
|
|
155
|
+
blobId: string;
|
|
156
|
+
artifactId: string;
|
|
157
|
+
artifactViewerId: string;
|
|
158
|
+
}
|
|
159
|
+
export interface ActiveAssignment {
|
|
160
|
+
server: string;
|
|
161
|
+
workerId: string;
|
|
162
|
+
runId: string;
|
|
163
|
+
leaseToken: string;
|
|
164
|
+
leaseExpiresAt: number;
|
|
165
|
+
repository?: Assignment["repository"];
|
|
166
|
+
capabilities: CapabilityEntry[];
|
|
167
|
+
}
|
|
168
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class UsageLimitError extends Error {
|
|
2
|
+
readonly resetAt: number | undefined;
|
|
3
|
+
constructor(message: string, resetAt?: number);
|
|
4
|
+
}
|
|
5
|
+
export declare class UnstartedRunError extends Error {
|
|
6
|
+
constructor(cause: unknown);
|
|
7
|
+
}
|
|
8
|
+
export declare function codexUsageLimitResetAt(rateLimits: unknown): number | undefined;
|
|
9
|
+
export declare function createHarnessResultTracker(): {
|
|
10
|
+
observe(line: string): void;
|
|
11
|
+
readonly workStarted: boolean;
|
|
12
|
+
failure(exitError: string | null): Error | null;
|
|
13
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export class UsageLimitError extends Error {
|
|
2
|
+
resetAt;
|
|
3
|
+
constructor(message, resetAt) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = "UsageLimitError";
|
|
6
|
+
this.resetAt = resetAt;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class UnstartedRunError extends Error {
|
|
10
|
+
constructor(cause) {
|
|
11
|
+
super(cause instanceof Error ? cause.message : String(cause), { cause });
|
|
12
|
+
this.name = "UnstartedRunError";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function codexUsageLimitResetAt(rateLimits) {
|
|
16
|
+
if (!rateLimits || typeof rateLimits !== "object")
|
|
17
|
+
return undefined;
|
|
18
|
+
const snapshot = rateLimits;
|
|
19
|
+
const resets = [snapshot.primary, snapshot.secondary].flatMap((window) => {
|
|
20
|
+
if (!window || typeof window !== "object")
|
|
21
|
+
return [];
|
|
22
|
+
const { usedPercent, resetsAt } = window;
|
|
23
|
+
return typeof usedPercent === "number" && usedPercent >= 100 && typeof resetsAt === "number" && resetsAt > 0
|
|
24
|
+
? [resetsAt * 1000]
|
|
25
|
+
: [];
|
|
26
|
+
});
|
|
27
|
+
return resets.length ? Math.max(...resets) : undefined;
|
|
28
|
+
}
|
|
29
|
+
function usesTool(event) {
|
|
30
|
+
const message = event.message;
|
|
31
|
+
return (event.type === "assistant" &&
|
|
32
|
+
Array.isArray(message?.content) &&
|
|
33
|
+
message.content.some((part) => part?.type === "tool_use"));
|
|
34
|
+
}
|
|
35
|
+
export function createHarnessResultTracker() {
|
|
36
|
+
let limit = null;
|
|
37
|
+
let resultError = null;
|
|
38
|
+
let workStarted = false;
|
|
39
|
+
return {
|
|
40
|
+
observe(line) {
|
|
41
|
+
let event;
|
|
42
|
+
try {
|
|
43
|
+
event = JSON.parse(line);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (!event || typeof event !== "object")
|
|
49
|
+
return;
|
|
50
|
+
if (usesTool(event))
|
|
51
|
+
workStarted = true;
|
|
52
|
+
const info = event.rate_limit_info;
|
|
53
|
+
if (event.type === "rate_limit_event" && info) {
|
|
54
|
+
if (info.status !== "rejected" || info.errorCode === "credits_required")
|
|
55
|
+
limit = null;
|
|
56
|
+
else if (info.isUsingOverage !== true)
|
|
57
|
+
limit = typeof info.resetsAt === "number" && info.resetsAt > 0 ? { resetAt: info.resetsAt * 1000 } : {};
|
|
58
|
+
}
|
|
59
|
+
if (event.type === "result")
|
|
60
|
+
resultError = event.is_error === true ? String(event.result ?? "").trim() || "Harness returned an error" : null;
|
|
61
|
+
},
|
|
62
|
+
get workStarted() {
|
|
63
|
+
return workStarted;
|
|
64
|
+
},
|
|
65
|
+
failure(exitError) {
|
|
66
|
+
const message = resultError ?? exitError;
|
|
67
|
+
if (!message)
|
|
68
|
+
return null;
|
|
69
|
+
if (limit)
|
|
70
|
+
return new UsageLimitError(message, limit.resetAt);
|
|
71
|
+
return resultError ? new Error(resultError) : null;
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=usage-limit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-limit.js","sourceRoot":"","sources":["../../src/usage-limit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const WORKER_PROTOCOL_VERSION = 3;
|
|
2
|
+
export declare const WORKER_ASSIGNMENT_VERSION = 2;
|
|
3
|
+
export declare const WORKER_CHECKPOINT_VERSION = 2;
|
|
4
|
+
export declare const WORKER_VERSION: string;
|
|
5
|
+
export declare const WORKER_COMMIT: string;
|
|
6
|
+
export declare function workerVersionLabel(): string;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
export const WORKER_PROTOCOL_VERSION = 3;
|
|
5
|
+
export const WORKER_ASSIGNMENT_VERSION = 2;
|
|
6
|
+
export const WORKER_CHECKPOINT_VERSION = 2;
|
|
7
|
+
function releaseMetadata() {
|
|
8
|
+
try {
|
|
9
|
+
const value = JSON.parse(readFileSync(new URL("../release.json", import.meta.url), "utf8"));
|
|
10
|
+
return value.package.name === "@agentqueue/worker" ? value : null;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function packageVersion() {
|
|
17
|
+
for (const relative of ["../package.json", "../../package.json"]) {
|
|
18
|
+
try {
|
|
19
|
+
const value = JSON.parse(readFileSync(new URL(relative, import.meta.url), "utf8"));
|
|
20
|
+
if (value.name === "@agentqueue/worker" && value.version)
|
|
21
|
+
return value.version;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
throw new Error("worker package version is unavailable");
|
|
28
|
+
}
|
|
29
|
+
function commitHash() {
|
|
30
|
+
const embedded = releaseMetadata()?.source.commit;
|
|
31
|
+
if (embedded && /^[0-9a-f]{12,64}$/.test(embedded))
|
|
32
|
+
return embedded.slice(0, 12);
|
|
33
|
+
try {
|
|
34
|
+
return execFileSync("git", ["rev-parse", "--short=12", "HEAD"], {
|
|
35
|
+
cwd: fileURLToPath(new URL("../..", import.meta.url)),
|
|
36
|
+
encoding: "utf8",
|
|
37
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
38
|
+
}).trim();
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return "unknown";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export const WORKER_VERSION = packageVersion();
|
|
45
|
+
export const WORKER_COMMIT = commitHash();
|
|
46
|
+
export function workerVersionLabel() {
|
|
47
|
+
return `${WORKER_VERSION} (${WORKER_COMMIT})`;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=version.js.map
|