@kynver-app/runtime 0.1.7 → 0.1.9
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/cli.js +50 -21
- package/dist/cli.js.map +2 -2
- package/dist/index.js +58 -21
- package/dist/index.js.map +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -146,6 +146,8 @@ function saveApiKey(apiKey) {
|
|
|
146
146
|
saveCredentialsFile({ ...loadCredentialsFile(), apiKey });
|
|
147
147
|
}
|
|
148
148
|
function loadRunnerToken(agentOsId) {
|
|
149
|
+
const envToken = process.env.KYNVER_RUNNER_TOKEN?.trim();
|
|
150
|
+
if (envToken) return envToken;
|
|
149
151
|
const creds = loadCredentialsFile();
|
|
150
152
|
if (!creds.runnerToken) return void 0;
|
|
151
153
|
if (agentOsId && creds.runnerTokenAgentOsId && creds.runnerTokenAgentOsId !== agentOsId) {
|
|
@@ -161,11 +163,15 @@ function saveRunnerToken(agentOsId, token) {
|
|
|
161
163
|
});
|
|
162
164
|
}
|
|
163
165
|
function resolveBaseUrl(argsBaseUrl) {
|
|
164
|
-
const baseUrl = argsBaseUrl
|
|
166
|
+
const baseUrl = resolveConfiguredBaseUrl(argsBaseUrl);
|
|
165
167
|
if (!baseUrl) failConfig("requires --base-url, KYNVER_API_URL, OPENCLAW_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl");
|
|
166
|
-
return
|
|
168
|
+
return baseUrl;
|
|
167
169
|
}
|
|
168
|
-
function
|
|
170
|
+
function resolveConfiguredBaseUrl(argsBaseUrl) {
|
|
171
|
+
const baseUrl = argsBaseUrl || process.env.KYNVER_API_URL || process.env.OPENCLAW_CRON_FIRE_BASE_URL || loadUserConfig().apiBaseUrl;
|
|
172
|
+
return baseUrl ? trimTrailingSlash(String(baseUrl)) : void 0;
|
|
173
|
+
}
|
|
174
|
+
function resolveConfiguredCallbackSecret(argsSecret, agentOsId) {
|
|
169
175
|
const scoped = argsSecret || loadRunnerToken(agentOsId) || loadRunnerToken(loadUserConfig().agentOsId);
|
|
170
176
|
if (scoped) return String(scoped);
|
|
171
177
|
const globalSecret = process.env.KYNVER_RUNTIME_SECRET || process.env.OPENCLAW_CRON_SECRET;
|
|
@@ -175,8 +181,31 @@ function resolveCallbackSecret(argsSecret, agentOsId) {
|
|
|
175
181
|
);
|
|
176
182
|
return String(globalSecret);
|
|
177
183
|
}
|
|
184
|
+
return void 0;
|
|
185
|
+
}
|
|
186
|
+
function resolveCallbackSecret(argsSecret, agentOsId) {
|
|
187
|
+
const configured = resolveConfiguredCallbackSecret(argsSecret, agentOsId);
|
|
188
|
+
if (configured) return configured;
|
|
189
|
+
failConfig(
|
|
190
|
+
"requires --secret, KYNVER_RUNNER_TOKEN, a scoped runner token (`kynver runner credential`), ~/.kynver/credentials runnerToken, KYNVER_API_KEY with an API base URL to mint one, or (legacy) KYNVER_RUNTIME_SECRET / OPENCLAW_CRON_SECRET"
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
async function resolveCallbackSecretWithMint(argsSecret, agentOsId, opts) {
|
|
194
|
+
const configured = resolveConfiguredCallbackSecret(argsSecret, agentOsId);
|
|
195
|
+
if (configured) return configured;
|
|
196
|
+
const apiKey = loadApiKey();
|
|
197
|
+
const baseUrl = resolveConfiguredBaseUrl(opts?.baseUrl);
|
|
198
|
+
if (apiKey && agentOsId && baseUrl) {
|
|
199
|
+
try {
|
|
200
|
+
const token = await fetchRunnerCredential(agentOsId, { baseUrl, apiKey });
|
|
201
|
+
saveRunnerToken(agentOsId, token);
|
|
202
|
+
return token;
|
|
203
|
+
} catch (error) {
|
|
204
|
+
failConfig(`runner credential mint failed: ${error.message}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
178
207
|
failConfig(
|
|
179
|
-
"requires --secret, a scoped runner token (`kynver runner credential`), ~/.kynver/credentials runnerToken, or (legacy) KYNVER_RUNTIME_SECRET / OPENCLAW_CRON_SECRET"
|
|
208
|
+
"requires --secret, KYNVER_RUNNER_TOKEN, a scoped runner token (`kynver runner credential`), ~/.kynver/credentials runnerToken, KYNVER_API_KEY with an API base URL to mint one, or (legacy) KYNVER_RUNTIME_SECRET / OPENCLAW_CRON_SECRET"
|
|
180
209
|
);
|
|
181
210
|
}
|
|
182
211
|
async function fetchRunnerCredential(agentOsId, opts) {
|
|
@@ -1050,7 +1079,7 @@ async function dispatchRun(args) {
|
|
|
1050
1079
|
const run = loadRun(String(required(String(args.run || ""), "--run")));
|
|
1051
1080
|
const agentOsId = String(required(String(args.agentOsId || ""), "--agent-os-id"));
|
|
1052
1081
|
const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : void 0);
|
|
1053
|
-
const secret =
|
|
1082
|
+
const secret = await resolveCallbackSecretWithMint(args.secret ? String(args.secret) : void 0, agentOsId, { baseUrl: base });
|
|
1054
1083
|
const execute = args.execute === true || args.execute === "true";
|
|
1055
1084
|
const dryRun = !execute;
|
|
1056
1085
|
const leaseOwner = `openclaw-harness:${run.id}`;
|
|
@@ -1278,7 +1307,7 @@ async function sweepRun(args) {
|
|
|
1278
1307
|
const run = loadRun(String(required(String(args.run || ""), "--run")));
|
|
1279
1308
|
const agentOsId = String(required(String(args.agentOsId || ""), "--agent-os-id"));
|
|
1280
1309
|
const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : void 0);
|
|
1281
|
-
const secret =
|
|
1310
|
+
const secret = await resolveCallbackSecretWithMint(args.secret ? String(args.secret) : void 0, agentOsId, { baseUrl: base });
|
|
1282
1311
|
const leaseOwner = `openclaw-harness:${run.id}`;
|
|
1283
1312
|
const releasedLocalOrphans = [];
|
|
1284
1313
|
for (const name of Object.keys(run.workers || {})) {
|
|
@@ -1339,7 +1368,7 @@ async function tryCompleteWorker(args) {
|
|
|
1339
1368
|
return { ok: true, skipped: true, reason: "worker-not-finished" };
|
|
1340
1369
|
}
|
|
1341
1370
|
const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : void 0);
|
|
1342
|
-
const secret =
|
|
1371
|
+
const secret = await resolveCallbackSecretWithMint(args.secret ? String(args.secret) : void 0, agentOsId, { baseUrl: base });
|
|
1343
1372
|
const url = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/harness/completion`;
|
|
1344
1373
|
const body = {
|
|
1345
1374
|
source: "openclaw-harness",
|
|
@@ -1501,7 +1530,7 @@ import path12 from "node:path";
|
|
|
1501
1530
|
// src/plan-progress-sync.ts
|
|
1502
1531
|
async function syncPlanProgress(args) {
|
|
1503
1532
|
const base = resolveBaseUrl(args.baseUrl);
|
|
1504
|
-
const secret =
|
|
1533
|
+
const secret = await resolveCallbackSecretWithMint(args.secret, args.agentOsId, { baseUrl: base });
|
|
1505
1534
|
const url = `${base}/api/agent-os/by-id/${encodeURIComponent(args.agentOsId)}/tasks/${encodeURIComponent(args.taskId)}/plan-progress-sync`;
|
|
1506
1535
|
const res = await postJson(url, secret, {
|
|
1507
1536
|
phase: args.phase,
|
|
@@ -1525,17 +1554,24 @@ async function syncActiveWorkerPlanProgress(runId, args) {
|
|
|
1525
1554
|
);
|
|
1526
1555
|
if (!worker?.dispatched || !worker.taskId) continue;
|
|
1527
1556
|
const status = computeWorkerStatus(worker);
|
|
1528
|
-
if (status.heartbeatBlocker)
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1557
|
+
if (!status.heartbeatBlocker) continue;
|
|
1558
|
+
if (worker.lastSyncedHeartbeatBlocker === status.heartbeatBlocker) {
|
|
1559
|
+
outcomes.push({ worker: name, phase: "heartbeat_blocker", ok: true, skipped: true });
|
|
1560
|
+
continue;
|
|
1561
|
+
}
|
|
1562
|
+
const res = await syncPlanProgress({
|
|
1563
|
+
agentOsId,
|
|
1564
|
+
taskId: worker.taskId,
|
|
1565
|
+
phase: "heartbeat_blocker",
|
|
1566
|
+
blocker: status.heartbeatBlocker,
|
|
1567
|
+
baseUrl: args.baseUrl ? String(args.baseUrl) : void 0,
|
|
1568
|
+
secret: args.secret ? String(args.secret) : void 0
|
|
1569
|
+
});
|
|
1570
|
+
if (res.ok) {
|
|
1571
|
+
worker.lastSyncedHeartbeatBlocker = status.heartbeatBlocker;
|
|
1572
|
+
saveWorker(run.id, worker);
|
|
1538
1573
|
}
|
|
1574
|
+
outcomes.push({ worker: name, phase: "heartbeat_blocker", ok: res.ok });
|
|
1539
1575
|
}
|
|
1540
1576
|
return outcomes;
|
|
1541
1577
|
}
|
|
@@ -1543,7 +1579,7 @@ async function syncActiveWorkerPlanProgress(runId, args) {
|
|
|
1543
1579
|
// src/workspace-runtime-config.ts
|
|
1544
1580
|
async function fetchWorkspaceRuntimePreferences(agentOsId, args) {
|
|
1545
1581
|
const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : void 0);
|
|
1546
|
-
const secret =
|
|
1582
|
+
const secret = await resolveCallbackSecretWithMint(args.secret ? String(args.secret) : void 0, agentOsId, { baseUrl: base });
|
|
1547
1583
|
const url = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/runtime`;
|
|
1548
1584
|
try {
|
|
1549
1585
|
const res = await getJson(url, secret);
|
|
@@ -1586,7 +1622,7 @@ async function completeFinishedWorkers(runId, args) {
|
|
|
1586
1622
|
}
|
|
1587
1623
|
async function postOperatorTick(agentOsId, runId, resourceGate, args) {
|
|
1588
1624
|
const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : void 0);
|
|
1589
|
-
const secret =
|
|
1625
|
+
const secret = await resolveCallbackSecretWithMint(args.secret ? String(args.secret) : void 0, agentOsId, { baseUrl: base });
|
|
1590
1626
|
const url = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/operator/tick`;
|
|
1591
1627
|
const res = await postJson(url, secret, {
|
|
1592
1628
|
agentOsId,
|
|
@@ -1710,7 +1746,7 @@ async function emitPlanProgress(args) {
|
|
|
1710
1746
|
evidence.push(parseEvidenceArg(rawEvidence));
|
|
1711
1747
|
}
|
|
1712
1748
|
const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : void 0);
|
|
1713
|
-
const secret =
|
|
1749
|
+
const secret = await resolveCallbackSecretWithMint(args.secret ? String(args.secret) : void 0, agentOsId, { baseUrl: base });
|
|
1714
1750
|
const url = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/plans/${encodeURIComponent(planId)}/progress-events`;
|
|
1715
1751
|
const cfg = loadUserConfig();
|
|
1716
1752
|
const provider = cfg.workerProvider ? `provider:${cfg.workerProvider}` : void 0;
|
|
@@ -1877,6 +1913,7 @@ export {
|
|
|
1877
1913
|
redactHarness,
|
|
1878
1914
|
resolveBaseUrl,
|
|
1879
1915
|
resolveCallbackSecret,
|
|
1916
|
+
resolveCallbackSecretWithMint,
|
|
1880
1917
|
resolveHarnessRoot,
|
|
1881
1918
|
runDaemon,
|
|
1882
1919
|
runStatus,
|