@mindfoldhq/runtime-manager 0.1.1 → 0.1.2
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/vine-runtime-manager.js +60 -34
- package/package.json +1 -1
|
@@ -1081,7 +1081,7 @@ var RUNTIME_PROVIDER_PROFILE_BACKENDS = [
|
|
|
1081
1081
|
];
|
|
1082
1082
|
var RuntimeProviderProfileBackend = z4.enum(RUNTIME_PROVIDER_PROFILE_BACKENDS);
|
|
1083
1083
|
var RUNTIME_RUNNER_COMMAND_DEFAULT = "vine-runtime-runner";
|
|
1084
|
-
var LOCAL_DOCKER_RUNNER_IMAGE_DEFAULT = "vine-runtime-runner:dev";
|
|
1084
|
+
var LOCAL_DOCKER_RUNNER_IMAGE_DEFAULT = "taosuuuuuuu/vine-runtime-runner:dev";
|
|
1085
1085
|
var RUNLOOP_API_BASE_URL_DEFAULT = "https://api.runloop.ai/v1";
|
|
1086
1086
|
var RUNLOOP_BLUEPRINT_NAME_DEFAULT = RUNTIME_RUNNER_COMMAND_DEFAULT;
|
|
1087
1087
|
var E2B_TEMPLATE_DEFAULT = "yblue0216/vine-runtime-runner:dev";
|
|
@@ -1189,7 +1189,7 @@ var REMOTE_SANDBOX_PROVIDER_DESCRIPTORS = {
|
|
|
1189
1189
|
profileName: "E2B remote sandbox",
|
|
1190
1190
|
managerNamePrefix: "e2b",
|
|
1191
1191
|
implemented: true,
|
|
1192
|
-
onboardingAvailable:
|
|
1192
|
+
onboardingAvailable: true,
|
|
1193
1193
|
envApiKeyRef: RuntimeProviderEnvSecretRef.parse("env:E2B_API_KEY"),
|
|
1194
1194
|
defaultApiKeySecretRef: RuntimeProviderSecretRef.parse(`${ORG_SECRET_REF_PREFIX}e2b-api-key`),
|
|
1195
1195
|
secretRefKey: "e2b_api_key_ref",
|
|
@@ -1319,6 +1319,7 @@ var ErrorCode = z5.enum([
|
|
|
1319
1319
|
"PROJECT_REPOSITORY_NOT_FOUND",
|
|
1320
1320
|
"TASK_NOT_FOUND",
|
|
1321
1321
|
"TASK_THREAD_NOT_FOUND",
|
|
1322
|
+
"TASK_ARTIFACT_NOT_FOUND",
|
|
1322
1323
|
"AGENT_PROFILE_NOT_FOUND",
|
|
1323
1324
|
"SKILL_NOT_FOUND",
|
|
1324
1325
|
"AGENT_TURN_NOT_FOUND",
|
|
@@ -1408,6 +1409,7 @@ var ERROR_HTTP_STATUS = {
|
|
|
1408
1409
|
PROJECT_REPOSITORY_NOT_FOUND: 404,
|
|
1409
1410
|
TASK_NOT_FOUND: 404,
|
|
1410
1411
|
TASK_THREAD_NOT_FOUND: 404,
|
|
1412
|
+
TASK_ARTIFACT_NOT_FOUND: 404,
|
|
1411
1413
|
AGENT_PROFILE_NOT_FOUND: 404,
|
|
1412
1414
|
SKILL_NOT_FOUND: 404,
|
|
1413
1415
|
AGENT_TURN_NOT_FOUND: 404,
|
|
@@ -1740,13 +1742,20 @@ var TaskResearchFileDto = z9.object({
|
|
|
1740
1742
|
size_bytes: z9.number().int().nonnegative(),
|
|
1741
1743
|
mtime: z9.string().nullable()
|
|
1742
1744
|
});
|
|
1745
|
+
var ArtifactRootKind = z9.enum(["repo", "task"]);
|
|
1746
|
+
var SnapshotContentShape = {
|
|
1747
|
+
content: z9.string().optional(),
|
|
1748
|
+
truncated: z9.boolean().optional()
|
|
1749
|
+
};
|
|
1750
|
+
var TaskSpecRefSnapshotItem = TaskSpecRefDto.extend(SnapshotContentShape);
|
|
1751
|
+
var TaskResearchFileSnapshotItem = TaskResearchFileDto.extend(SnapshotContentShape);
|
|
1743
1752
|
var TaskRefsSnapshotPayload = z9.object({
|
|
1744
1753
|
session_id: Id,
|
|
1745
1754
|
task_id: Id,
|
|
1746
1755
|
trellis_id: z9.string().min(1),
|
|
1747
|
-
spec_refs: z9.array(
|
|
1748
|
-
check_refs: z9.array(
|
|
1749
|
-
research_files: z9.array(
|
|
1756
|
+
spec_refs: z9.array(TaskSpecRefSnapshotItem).default([]),
|
|
1757
|
+
check_refs: z9.array(TaskSpecRefSnapshotItem).default([]),
|
|
1758
|
+
research_files: z9.array(TaskResearchFileSnapshotItem).default([])
|
|
1750
1759
|
});
|
|
1751
1760
|
var TaskDto = z9.object({
|
|
1752
1761
|
id: Id,
|
|
@@ -1845,7 +1854,8 @@ var TaskImportFromTrellisInput = z9.object({
|
|
|
1845
1854
|
});
|
|
1846
1855
|
var TaskReadArtifactInput = z9.object({
|
|
1847
1856
|
task_id: Id,
|
|
1848
|
-
|
|
1857
|
+
root_kind: ArtifactRootKind,
|
|
1858
|
+
path: z9.string().min(1).max(512)
|
|
1849
1859
|
});
|
|
1850
1860
|
var TaskReadArtifactDto = z9.object({
|
|
1851
1861
|
content: z9.string(),
|
|
@@ -5733,7 +5743,7 @@ var RUNTIME_PROVIDER_UI_DESCRIPTORS = {
|
|
|
5733
5743
|
description: "Run the manager directly on this host.",
|
|
5734
5744
|
registrationAvailable: true,
|
|
5735
5745
|
channelConfigAvailable: true,
|
|
5736
|
-
onboardingAvailable:
|
|
5746
|
+
onboardingAvailable: false
|
|
5737
5747
|
},
|
|
5738
5748
|
local_docker: {
|
|
5739
5749
|
kind: "local_docker",
|
|
@@ -9441,7 +9451,7 @@ class StateEmitter {
|
|
|
9441
9451
|
last_error: lastError
|
|
9442
9452
|
});
|
|
9443
9453
|
}
|
|
9444
|
-
emitAgentSessionState(session, agentSession, status) {
|
|
9454
|
+
emitAgentSessionState(session, agentSession, status, metadata) {
|
|
9445
9455
|
this.m.serverClient.emitAgentSessionState({
|
|
9446
9456
|
agent_session_id: agentSession.agentSessionId,
|
|
9447
9457
|
session_id: session.sessionId,
|
|
@@ -9454,10 +9464,11 @@ class StateEmitter {
|
|
|
9454
9464
|
status,
|
|
9455
9465
|
external_session_id: agentSession.externalSessionId,
|
|
9456
9466
|
cwd_path: agentSession.cwdPath,
|
|
9457
|
-
last_error: null
|
|
9467
|
+
last_error: null,
|
|
9468
|
+
...metadata ? { metadata } : {}
|
|
9458
9469
|
});
|
|
9459
9470
|
}
|
|
9460
|
-
emitAgentSessionStateFailed(session, agentSession, lastError) {
|
|
9471
|
+
emitAgentSessionStateFailed(session, agentSession, lastError, metadata) {
|
|
9461
9472
|
this.m.serverClient.emitAgentSessionState({
|
|
9462
9473
|
agent_session_id: agentSession.agentSessionId,
|
|
9463
9474
|
session_id: session.sessionId,
|
|
@@ -9470,7 +9481,8 @@ class StateEmitter {
|
|
|
9470
9481
|
status: "failed",
|
|
9471
9482
|
external_session_id: agentSession.externalSessionId,
|
|
9472
9483
|
cwd_path: agentSession.cwdPath,
|
|
9473
|
-
last_error: lastError
|
|
9484
|
+
last_error: lastError,
|
|
9485
|
+
...metadata ? { metadata } : {}
|
|
9474
9486
|
});
|
|
9475
9487
|
}
|
|
9476
9488
|
emitReleasedState(session) {
|
|
@@ -9497,7 +9509,8 @@ class StateEmitter {
|
|
|
9497
9509
|
this.m.emitRunnerState(session, session.ready ? "ready" : "starting");
|
|
9498
9510
|
}
|
|
9499
9511
|
for (const agentSession of session.agentSessions.values()) {
|
|
9500
|
-
|
|
9512
|
+
const terminalMetadata = agentSession.lastTerminalTurnId ? { terminal_agent_turn_id: agentSession.lastTerminalTurnId } : undefined;
|
|
9513
|
+
this.m.emitAgentSessionState(session, agentSession, "idle", terminalMetadata);
|
|
9501
9514
|
}
|
|
9502
9515
|
}
|
|
9503
9516
|
}
|
|
@@ -10546,12 +10559,14 @@ class TurnRouter {
|
|
|
10546
10559
|
if (externalSessionId) {
|
|
10547
10560
|
agentSession.externalSessionId = externalSessionId;
|
|
10548
10561
|
}
|
|
10562
|
+
agentSession.lastTerminalTurnId = turnId;
|
|
10563
|
+
const terminalMetadata = { terminal_agent_turn_id: turnId };
|
|
10549
10564
|
if (status === "failed") {
|
|
10550
|
-
this.m.emitAgentSessionStateFailed(session, agentSession, failureDetail ?? "turn failed without detail");
|
|
10565
|
+
this.m.emitAgentSessionStateFailed(session, agentSession, failureDetail ?? "turn failed without detail", terminalMetadata);
|
|
10551
10566
|
} else if (status === "cancelled") {
|
|
10552
|
-
this.m.emitAgentSessionState(session, agentSession, "cancelled");
|
|
10567
|
+
this.m.emitAgentSessionState(session, agentSession, "cancelled", terminalMetadata);
|
|
10553
10568
|
} else {
|
|
10554
|
-
this.m.emitAgentSessionState(session, agentSession, "idle");
|
|
10569
|
+
this.m.emitAgentSessionState(session, agentSession, "idle", terminalMetadata);
|
|
10555
10570
|
}
|
|
10556
10571
|
} else {
|
|
10557
10572
|
log14.warn({ session_id: sessionId, turn_id: turnId }, "turn.finished without recorded agent_session — agent_session.state not updated");
|
|
@@ -10567,11 +10582,13 @@ import { randomUUID as randomUUID6 } from "node:crypto";
|
|
|
10567
10582
|
import { hostname } from "node:os";
|
|
10568
10583
|
import WebSocket2 from "ws";
|
|
10569
10584
|
var log15 = childLogger2({ subsystem: "server-link" });
|
|
10570
|
-
var MANAGER_VERSION = "0.1.0-
|
|
10585
|
+
var MANAGER_VERSION = "0.1.0-slice6-ref-preview";
|
|
10571
10586
|
var HEARTBEAT_INTERVAL_MS = 30000;
|
|
10572
10587
|
var RECONNECT_BASE_MS = 1000;
|
|
10573
10588
|
var RECONNECT_MAX_MS = 30000;
|
|
10574
10589
|
var TASK_REQUEST_TIMEOUT_MS = 30000;
|
|
10590
|
+
var SUPERSEDED_CLOSE_CODE = 4000;
|
|
10591
|
+
var SUPERSEDED_CLOSE_REASON = "runtime manager connection superseded";
|
|
10575
10592
|
|
|
10576
10593
|
class ServerClient {
|
|
10577
10594
|
opts;
|
|
@@ -10650,20 +10667,29 @@ class ServerClient {
|
|
|
10650
10667
|
this.onMessage(rawDataToText2(data));
|
|
10651
10668
|
});
|
|
10652
10669
|
ws.on("close", (code, reason) => {
|
|
10653
|
-
|
|
10654
|
-
this.ws = null;
|
|
10655
|
-
this.organizationId = null;
|
|
10656
|
-
this.managerId = null;
|
|
10657
|
-
this.serverSupportsRebuiltResumeRetry_ = false;
|
|
10658
|
-
this.clearHeartbeat();
|
|
10659
|
-
this.rejectPendingTaskRequests(new Error("server websocket closed"));
|
|
10660
|
-
this.opts.onServerDisconnected?.();
|
|
10661
|
-
this.scheduleReconnect();
|
|
10670
|
+
this.handleClose(code, reason.toString());
|
|
10662
10671
|
});
|
|
10663
10672
|
ws.on("error", (err) => {
|
|
10664
10673
|
log15.warn({ err: asAppError(err) }, "server ws error event");
|
|
10665
10674
|
});
|
|
10666
10675
|
}
|
|
10676
|
+
handleClose(code, reason) {
|
|
10677
|
+
log15.warn({ code, reason }, "server ws closed");
|
|
10678
|
+
this.ws = null;
|
|
10679
|
+
this.organizationId = null;
|
|
10680
|
+
this.managerId = null;
|
|
10681
|
+
this.serverSupportsRebuiltResumeRetry_ = false;
|
|
10682
|
+
this.clearHeartbeat();
|
|
10683
|
+
this.rejectPendingTaskRequests(new Error("server websocket closed"));
|
|
10684
|
+
this.opts.onServerDisconnected?.();
|
|
10685
|
+
if (code === SUPERSEDED_CLOSE_CODE && reason === SUPERSEDED_CLOSE_REASON) {
|
|
10686
|
+
this.stopped = true;
|
|
10687
|
+
this.clearTimers();
|
|
10688
|
+
log15.warn("server ws superseded this runtime-manager; reconnect stopped");
|
|
10689
|
+
return;
|
|
10690
|
+
}
|
|
10691
|
+
this.scheduleReconnect();
|
|
10692
|
+
}
|
|
10667
10693
|
scheduleReconnect() {
|
|
10668
10694
|
if (this.stopped || this.reconnectTimer)
|
|
10669
10695
|
return;
|
|
@@ -11668,11 +11694,11 @@ class RuntimeManager {
|
|
|
11668
11694
|
emitRunnerStateFailed(session, lastError) {
|
|
11669
11695
|
this.stateEmitter.emitRunnerStateFailed(session, lastError);
|
|
11670
11696
|
}
|
|
11671
|
-
emitAgentSessionState(session, agentSession, status) {
|
|
11672
|
-
this.stateEmitter.emitAgentSessionState(session, agentSession, status);
|
|
11697
|
+
emitAgentSessionState(session, agentSession, status, metadata) {
|
|
11698
|
+
this.stateEmitter.emitAgentSessionState(session, agentSession, status, metadata);
|
|
11673
11699
|
}
|
|
11674
|
-
emitAgentSessionStateFailed(session, agentSession, lastError) {
|
|
11675
|
-
this.stateEmitter.emitAgentSessionStateFailed(session, agentSession, lastError);
|
|
11700
|
+
emitAgentSessionStateFailed(session, agentSession, lastError, metadata) {
|
|
11701
|
+
this.stateEmitter.emitAgentSessionStateFailed(session, agentSession, lastError, metadata);
|
|
11676
11702
|
}
|
|
11677
11703
|
}
|
|
11678
11704
|
|
|
@@ -12516,11 +12542,11 @@ class RuntimeManager2 {
|
|
|
12516
12542
|
emitRunnerStateFailed(session, lastError) {
|
|
12517
12543
|
this.stateEmitter.emitRunnerStateFailed(session, lastError);
|
|
12518
12544
|
}
|
|
12519
|
-
emitAgentSessionState(session, agentSession, status) {
|
|
12520
|
-
this.stateEmitter.emitAgentSessionState(session, agentSession, status);
|
|
12545
|
+
emitAgentSessionState(session, agentSession, status, metadata) {
|
|
12546
|
+
this.stateEmitter.emitAgentSessionState(session, agentSession, status, metadata);
|
|
12521
12547
|
}
|
|
12522
|
-
emitAgentSessionStateFailed(session, agentSession, lastError) {
|
|
12523
|
-
this.stateEmitter.emitAgentSessionStateFailed(session, agentSession, lastError);
|
|
12548
|
+
emitAgentSessionStateFailed(session, agentSession, lastError, metadata) {
|
|
12549
|
+
this.stateEmitter.emitAgentSessionStateFailed(session, agentSession, lastError, metadata);
|
|
12524
12550
|
}
|
|
12525
12551
|
}
|
|
12526
12552
|
|
|
@@ -12545,7 +12571,7 @@ Env:
|
|
|
12545
12571
|
local_process, local_docker, remote_sandbox:<backend>
|
|
12546
12572
|
VINE_DEFAULT_PROVIDER fallback registration when dispatch has no provider hint
|
|
12547
12573
|
VINE_PROVIDER legacy single-provider fallback when VINE_PROVIDERS is unset
|
|
12548
|
-
VINE_RUNNER_IMAGE docker provider runner image (default vine-runtime-runner:dev)
|
|
12574
|
+
VINE_RUNNER_IMAGE docker provider runner image (default taosuuuuuuu/vine-runtime-runner:dev)
|
|
12549
12575
|
VINE_RUNNER_LINK_HOST runner-link bind host (optional)
|
|
12550
12576
|
VINE_RUNNER_LINK_PORT runner-link bind port (optional)
|
|
12551
12577
|
VINE_RUNNER_LINK_PUBLIC_URL public/tunneled runner-link URL for remote_sandbox
|