@rallycry/conveyor-agent 11.0.35 → 11.0.36
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/{chunk-VDK54VLS.js → chunk-B4YQABDZ.js} +38 -16
- package/dist/{chunk-MYJQXN6E.js → chunk-PLDR42JP.js} +19 -6
- package/dist/{chunk-6WVCWKDN.js → chunk-WQC2YQT4.js} +1 -1
- package/dist/cli.js +4 -4
- package/dist/index.js +2 -2
- package/dist/{serve-boot-QOXREHJK.js → serve-boot-KXWMUVAG.js} +2 -2
- package/package.json +1 -1
|
@@ -383,8 +383,8 @@ var AgentConnection = class _AgentConnection {
|
|
|
383
383
|
/** (Re)arm the recycle timer — called on every successful (re)connect. */
|
|
384
384
|
scheduleSocketRecycle() {
|
|
385
385
|
this.clearSocketRecycle();
|
|
386
|
-
const
|
|
387
|
-
this.armRecycleTimer(
|
|
386
|
+
const delay3 = _AgentConnection.SOCKET_RECYCLE_BASE_MS + Math.random() * _AgentConnection.SOCKET_RECYCLE_JITTER_MS;
|
|
387
|
+
this.armRecycleTimer(delay3);
|
|
388
388
|
}
|
|
389
389
|
clearSocketRecycle() {
|
|
390
390
|
if (this.recycleTimer) {
|
|
@@ -392,11 +392,11 @@ var AgentConnection = class _AgentConnection {
|
|
|
392
392
|
this.recycleTimer = null;
|
|
393
393
|
}
|
|
394
394
|
}
|
|
395
|
-
armRecycleTimer(
|
|
395
|
+
armRecycleTimer(delay3) {
|
|
396
396
|
this.recycleTimer = setTimeout(() => {
|
|
397
397
|
this.recycleTimer = null;
|
|
398
398
|
this.attemptSocketRecycle();
|
|
399
|
-
},
|
|
399
|
+
}, delay3);
|
|
400
400
|
this.recycleTimer.unref?.();
|
|
401
401
|
}
|
|
402
402
|
attemptSocketRecycle() {
|
|
@@ -4313,6 +4313,25 @@ async function verifyGitCredential(cwd) {
|
|
|
4313
4313
|
// src/runner/git-utils.ts
|
|
4314
4314
|
import { realpathSync } from "fs";
|
|
4315
4315
|
|
|
4316
|
+
// src/runner/git-fetch-retry.ts
|
|
4317
|
+
import { setTimeout as delay } from "timers/promises";
|
|
4318
|
+
async function fetchWithRetry(cwd, args) {
|
|
4319
|
+
for (let attempt = 0; ; attempt++) {
|
|
4320
|
+
try {
|
|
4321
|
+
return await git(cwd, ["fetch", ...args]);
|
|
4322
|
+
} catch (error) {
|
|
4323
|
+
const detail = error;
|
|
4324
|
+
const transient = detail.killed === true || /connection reset|could not resolve host|failed to connect|timed out|early EOF|HTTP\/2 stream|remote end hung up|TLS connection was non-properly terminated/i.test(
|
|
4325
|
+
`${detail.message ?? ""}
|
|
4326
|
+
${detail.stderr ?? ""}`
|
|
4327
|
+
);
|
|
4328
|
+
if (!transient || attempt >= 2) throw error;
|
|
4329
|
+
process.stderr.write("[conveyor-agent] Retrying git fetch after a transport failure\n");
|
|
4330
|
+
await delay(1e3 * (attempt + 1));
|
|
4331
|
+
}
|
|
4332
|
+
}
|
|
4333
|
+
}
|
|
4334
|
+
|
|
4316
4335
|
// src/runner/force-fresh-cooldown.ts
|
|
4317
4336
|
var FORCE_FRESH_COOLDOWN_MS = 30 * 60 * 1e3;
|
|
4318
4337
|
var blockedUntil = 0;
|
|
@@ -4340,8 +4359,7 @@ async function ensureOnTaskBranch(cwd, taskBranch, baseBranch) {
|
|
|
4340
4359
|
if (await getCurrentBranch(cwd) === taskBranch) return true;
|
|
4341
4360
|
let existsOnOrigin = true;
|
|
4342
4361
|
try {
|
|
4343
|
-
await
|
|
4344
|
-
"fetch",
|
|
4362
|
+
await fetchWithRetry(cwd, [
|
|
4345
4363
|
"origin",
|
|
4346
4364
|
`+refs/heads/${taskBranch}:refs/remotes/origin/${taskBranch}`
|
|
4347
4365
|
]);
|
|
@@ -4362,8 +4380,7 @@ async function ensureOnTaskBranch(cwd, taskBranch, baseBranch) {
|
|
|
4362
4380
|
);
|
|
4363
4381
|
return false;
|
|
4364
4382
|
}
|
|
4365
|
-
await
|
|
4366
|
-
"fetch",
|
|
4383
|
+
await fetchWithRetry(cwd, [
|
|
4367
4384
|
"origin",
|
|
4368
4385
|
`+refs/heads/${baseBranch}:refs/remotes/origin/${baseBranch}`
|
|
4369
4386
|
]);
|
|
@@ -4524,7 +4541,7 @@ async function restoreWipSnapshot(cwd, branch) {
|
|
|
4524
4541
|
if (!branch) return "none";
|
|
4525
4542
|
const ref = wipRefForBranch(branch);
|
|
4526
4543
|
try {
|
|
4527
|
-
await
|
|
4544
|
+
await fetchWithRetry(cwd, ["origin", `+refs/heads/${ref}:refs/remotes/origin/${ref}`]);
|
|
4528
4545
|
} catch (err) {
|
|
4529
4546
|
if (isMissingRefError(err)) return "none";
|
|
4530
4547
|
wipRefPreserved.add(cwd);
|
|
@@ -4549,7 +4566,12 @@ async function restoreWipSnapshot(cwd, branch) {
|
|
|
4549
4566
|
return "stale";
|
|
4550
4567
|
}
|
|
4551
4568
|
}
|
|
4552
|
-
|
|
4569
|
+
try {
|
|
4570
|
+
await git(cwd, ["stash", "apply", sha], GIT_SLOW_TIMEOUT_MS);
|
|
4571
|
+
} catch {
|
|
4572
|
+
wipRefPreserved.add(cwd);
|
|
4573
|
+
return "conflict";
|
|
4574
|
+
}
|
|
4553
4575
|
wipRefPushed.add(cwd);
|
|
4554
4576
|
wipRefPreserved.delete(cwd);
|
|
4555
4577
|
return "applied";
|
|
@@ -4916,11 +4938,11 @@ var Lifecycle = class {
|
|
|
4916
4938
|
* window every time it defers. */
|
|
4917
4939
|
startIdleTimer(overrideMs) {
|
|
4918
4940
|
this.clearIdleTimers();
|
|
4919
|
-
const
|
|
4941
|
+
const delay3 = Math.max(0, overrideMs ?? this.config.idleTimeoutMs);
|
|
4920
4942
|
this.idleTimer = setTimeout(() => {
|
|
4921
4943
|
this.idleTimer = null;
|
|
4922
4944
|
this.callbacks.onIdleTimeout();
|
|
4923
|
-
},
|
|
4945
|
+
}, delay3);
|
|
4924
4946
|
}
|
|
4925
4947
|
cancelIdleTimer() {
|
|
4926
4948
|
this.clearIdleTimers();
|
|
@@ -4941,10 +4963,10 @@ var Lifecycle = class {
|
|
|
4941
4963
|
* deadline regardless of message volume. */
|
|
4942
4964
|
startDormantTimer(overrideMs) {
|
|
4943
4965
|
this.cancelDormantTimer();
|
|
4944
|
-
const
|
|
4966
|
+
const delay3 = Math.max(0, overrideMs ?? this.config.dormantTimeoutMs);
|
|
4945
4967
|
this.dormantTimer = setTimeout(() => {
|
|
4946
4968
|
this.callbacks.onDormantTimeout();
|
|
4947
|
-
},
|
|
4969
|
+
}, delay3);
|
|
4948
4970
|
}
|
|
4949
4971
|
cancelDormantTimer() {
|
|
4950
4972
|
if (this.dormantTimer) {
|
|
@@ -4988,7 +5010,7 @@ function awaitGitReady(opts = {}) {
|
|
|
4988
5010
|
opts.onLog?.("waiting for workspace git (workbench daemon)");
|
|
4989
5011
|
return pollDaemon(clientFn, timeoutMs, pollMs, opts.onLog, opts.signal);
|
|
4990
5012
|
}
|
|
4991
|
-
function
|
|
5013
|
+
function delay2(ms, signal) {
|
|
4992
5014
|
if (!signal) {
|
|
4993
5015
|
return new Promise((resolve) => {
|
|
4994
5016
|
setTimeout(resolve, ms);
|
|
@@ -5047,7 +5069,7 @@ async function pollDaemon(clientFn, timeoutMs, pollMs, onLog, signal) {
|
|
|
5047
5069
|
onLog?.(`workspace git not ready after ${timeoutMs}ms \u2014 giving up`);
|
|
5048
5070
|
return "timeout";
|
|
5049
5071
|
}
|
|
5050
|
-
await
|
|
5072
|
+
await delay2(pollMs, signal);
|
|
5051
5073
|
}
|
|
5052
5074
|
}
|
|
5053
5075
|
|
|
@@ -97,7 +97,7 @@ import {
|
|
|
97
97
|
statWorkspacePath,
|
|
98
98
|
updateRemoteToken,
|
|
99
99
|
verifyGitCredential
|
|
100
|
-
} from "./chunk-
|
|
100
|
+
} from "./chunk-B4YQABDZ.js";
|
|
101
101
|
import {
|
|
102
102
|
registerBootMilestoneSocketFallback,
|
|
103
103
|
reportBootMilestone
|
|
@@ -15380,14 +15380,18 @@ var SessionRunner = class _SessionRunner {
|
|
|
15380
15380
|
this.fullContext.baseBranch ?? void 0
|
|
15381
15381
|
);
|
|
15382
15382
|
if (!ok) {
|
|
15383
|
-
|
|
15383
|
+
const message = "Task branch checkout failed; workspace startup stopped. Resume to retry.";
|
|
15384
|
+
process.stderr.write(`[conveyor-agent] ${message}
|
|
15385
|
+
`);
|
|
15386
|
+
this.connection.sendEvent({ type: "error", message });
|
|
15387
|
+
await this.callbacks.onEvent({ type: "error", message });
|
|
15388
|
+
await prewarmInitial;
|
|
15389
|
+
await this.shutdown("error");
|
|
15390
|
+
return;
|
|
15384
15391
|
}
|
|
15385
|
-
|
|
15392
|
+
void reportBootMilestone({ key: "branch_ready" });
|
|
15386
15393
|
}
|
|
15387
15394
|
if (this.fullContext?.githubBranch) await this.refreshSkillsForCheckout();
|
|
15388
|
-
if (!this.stopped) {
|
|
15389
|
-
this.lifecycle.startGitFlush();
|
|
15390
|
-
}
|
|
15391
15395
|
if (this.fullContext?.githubBranch) {
|
|
15392
15396
|
const restored = await restoreWipSnapshot(
|
|
15393
15397
|
this.config.workspaceDir,
|
|
@@ -15397,7 +15401,16 @@ var SessionRunner = class _SessionRunner {
|
|
|
15397
15401
|
process.stderr.write(`[conveyor-agent] WIP snapshot restore: ${restored}
|
|
15398
15402
|
`);
|
|
15399
15403
|
}
|
|
15404
|
+
if (restored === "failed") {
|
|
15405
|
+
const message = "Saved work could not be restored; workspace startup stopped. Resume to retry.";
|
|
15406
|
+
this.connection.sendEvent({ type: "error", message });
|
|
15407
|
+
await this.callbacks.onEvent({ type: "error", message });
|
|
15408
|
+
await prewarmInitial;
|
|
15409
|
+
await this.shutdown("error");
|
|
15410
|
+
return;
|
|
15411
|
+
}
|
|
15400
15412
|
}
|
|
15413
|
+
if (!this.stopped) this.lifecycle.startGitFlush();
|
|
15401
15414
|
this.workspaceCommands?.notifyWorkspaceReady();
|
|
15402
15415
|
if (this.fullContext?.isAuto && PRE_BUILD_TASK_STATUSES.has(this.taskContext.status) && this.mode.isBuildCapable && hasTaskPlan(this.fullContext.plan)) {
|
|
15403
15416
|
void this.connection.triggerIdentification().catch(() => {
|
package/dist/cli.js
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
WorkspaceCommandSupervisor,
|
|
8
8
|
startWorkspaceCommandsAfterConnect,
|
|
9
9
|
stopWorkspaceCommands
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-WQC2YQT4.js";
|
|
11
11
|
import {
|
|
12
12
|
PtyHarness,
|
|
13
13
|
SessionRunner,
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
runUsageProbe,
|
|
28
28
|
sampleKeyUsage,
|
|
29
29
|
usesNativeUsageReporting
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-PLDR42JP.js";
|
|
31
31
|
import "./chunk-37J5MMQT.js";
|
|
32
32
|
import {
|
|
33
33
|
inheritedEnv,
|
|
@@ -46,7 +46,7 @@ import {
|
|
|
46
46
|
createServiceLogger,
|
|
47
47
|
fetchBootstrap,
|
|
48
48
|
loadConveyorConfig
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-B4YQABDZ.js";
|
|
50
50
|
import "./chunk-Q4FQOJ7D.js";
|
|
51
51
|
import "./chunk-W4LZ7R6Z.js";
|
|
52
52
|
import "./chunk-372R6E4C.js";
|
|
@@ -1468,7 +1468,7 @@ if (!RUNNER_MODES.includes(CONVEYOR_MODE)) {
|
|
|
1468
1468
|
process.exit(1);
|
|
1469
1469
|
}
|
|
1470
1470
|
if (CONVEYOR_MODE === "serving") {
|
|
1471
|
-
const { runServingSession } = await import("./serve-boot-
|
|
1471
|
+
const { runServingSession } = await import("./serve-boot-KXWMUVAG.js");
|
|
1472
1472
|
exitContext.runnerMode = "serving";
|
|
1473
1473
|
exitContext.sessionId = process.env.CONVEYOR_SESSION_ID ?? exitContext.sessionId;
|
|
1474
1474
|
const outcome = await runServingSession({
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SessionRunner,
|
|
3
3
|
unshallowRepo
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-PLDR42JP.js";
|
|
5
5
|
import "./chunk-37J5MMQT.js";
|
|
6
6
|
import "./chunk-EKTPDG3G.js";
|
|
7
7
|
import {
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
stageAndCommit,
|
|
18
18
|
updateRemoteToken,
|
|
19
19
|
workspacePathExists
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-B4YQABDZ.js";
|
|
21
21
|
import "./chunk-Q4FQOJ7D.js";
|
|
22
22
|
import {
|
|
23
23
|
runAuthTokenCommand,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
WorkspaceCommandSupervisor
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WQC2YQT4.js";
|
|
4
4
|
import {
|
|
5
5
|
AgentConnection,
|
|
6
6
|
CodespacePortVisibility,
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
createServiceLogger,
|
|
12
12
|
ensureOnTaskBranch,
|
|
13
13
|
loadConveyorConfig
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-B4YQABDZ.js";
|
|
15
15
|
import "./chunk-Q4FQOJ7D.js";
|
|
16
16
|
import "./chunk-W4LZ7R6Z.js";
|
|
17
17
|
import "./chunk-IA45XHOA.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rallycry/conveyor-agent",
|
|
3
|
-
"version": "11.0.
|
|
3
|
+
"version": "11.0.36",
|
|
4
4
|
"description": "Conveyor Agent Runner v10 - PTY harness for the task chat (SDK harness for audit/project-chat). Agent-as-User architecture with BaseService patterns. Works locally too.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent",
|