@kynver-app/runtime 0.1.8 → 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 CHANGED
@@ -153,6 +153,8 @@ function saveApiKey(apiKey) {
153
153
  saveCredentialsFile({ ...loadCredentialsFile(), apiKey });
154
154
  }
155
155
  function loadRunnerToken(agentOsId) {
156
+ const envToken = process.env.KYNVER_RUNNER_TOKEN?.trim();
157
+ if (envToken) return envToken;
156
158
  const creds = loadCredentialsFile();
157
159
  if (!creds.runnerToken) return void 0;
158
160
  if (agentOsId && creds.runnerTokenAgentOsId && creds.runnerTokenAgentOsId !== agentOsId) {
@@ -168,11 +170,15 @@ function saveRunnerToken(agentOsId, token) {
168
170
  });
169
171
  }
170
172
  function resolveBaseUrl(argsBaseUrl) {
171
- const baseUrl = argsBaseUrl || process.env.KYNVER_API_URL || process.env.OPENCLAW_CRON_FIRE_BASE_URL || loadUserConfig().apiBaseUrl;
173
+ const baseUrl = resolveConfiguredBaseUrl(argsBaseUrl);
172
174
  if (!baseUrl) failConfig("requires --base-url, KYNVER_API_URL, OPENCLAW_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl");
173
- return trimTrailingSlash(String(baseUrl));
175
+ return baseUrl;
176
+ }
177
+ function resolveConfiguredBaseUrl(argsBaseUrl) {
178
+ const baseUrl = argsBaseUrl || process.env.KYNVER_API_URL || process.env.OPENCLAW_CRON_FIRE_BASE_URL || loadUserConfig().apiBaseUrl;
179
+ return baseUrl ? trimTrailingSlash(String(baseUrl)) : void 0;
174
180
  }
175
- function resolveCallbackSecret(argsSecret, agentOsId) {
181
+ function resolveConfiguredCallbackSecret(argsSecret, agentOsId) {
176
182
  const scoped = argsSecret || loadRunnerToken(agentOsId) || loadRunnerToken(loadUserConfig().agentOsId);
177
183
  if (scoped) return String(scoped);
178
184
  const globalSecret = process.env.KYNVER_RUNTIME_SECRET || process.env.OPENCLAW_CRON_SECRET;
@@ -182,8 +188,24 @@ function resolveCallbackSecret(argsSecret, agentOsId) {
182
188
  );
183
189
  return String(globalSecret);
184
190
  }
191
+ return void 0;
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
+ }
185
207
  failConfig(
186
- "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"
187
209
  );
188
210
  }
189
211
  async function fetchRunnerCredential(agentOsId, opts) {
@@ -1057,7 +1079,7 @@ async function dispatchRun(args) {
1057
1079
  const run = loadRun(String(required(String(args.run || ""), "--run")));
1058
1080
  const agentOsId = String(required(String(args.agentOsId || ""), "--agent-os-id"));
1059
1081
  const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : void 0);
1060
- const secret = resolveCallbackSecret(args.secret ? String(args.secret) : void 0, agentOsId);
1082
+ const secret = await resolveCallbackSecretWithMint(args.secret ? String(args.secret) : void 0, agentOsId, { baseUrl: base });
1061
1083
  const execute = args.execute === true || args.execute === "true";
1062
1084
  const dryRun = !execute;
1063
1085
  const leaseOwner = `openclaw-harness:${run.id}`;
@@ -1201,7 +1223,7 @@ async function sweepRun(args) {
1201
1223
  const run = loadRun(String(required(String(args.run || ""), "--run")));
1202
1224
  const agentOsId = String(required(String(args.agentOsId || ""), "--agent-os-id"));
1203
1225
  const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : void 0);
1204
- const secret = resolveCallbackSecret(args.secret ? String(args.secret) : void 0, agentOsId);
1226
+ const secret = await resolveCallbackSecretWithMint(args.secret ? String(args.secret) : void 0, agentOsId, { baseUrl: base });
1205
1227
  const leaseOwner = `openclaw-harness:${run.id}`;
1206
1228
  const releasedLocalOrphans = [];
1207
1229
  for (const name of Object.keys(run.workers || {})) {
@@ -1319,7 +1341,7 @@ async function tryCompleteWorker(args) {
1319
1341
  return { ok: true, skipped: true, reason: "worker-not-finished" };
1320
1342
  }
1321
1343
  const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : void 0);
1322
- const secret = resolveCallbackSecret(args.secret ? String(args.secret) : void 0, agentOsId);
1344
+ const secret = await resolveCallbackSecretWithMint(args.secret ? String(args.secret) : void 0, agentOsId, { baseUrl: base });
1323
1345
  const url = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/harness/completion`;
1324
1346
  const body = {
1325
1347
  source: "openclaw-harness",
@@ -1476,7 +1498,7 @@ import path12 from "node:path";
1476
1498
  // src/plan-progress-sync.ts
1477
1499
  async function syncPlanProgress(args) {
1478
1500
  const base = resolveBaseUrl(args.baseUrl);
1479
- const secret = resolveCallbackSecret(args.secret, args.agentOsId);
1501
+ const secret = await resolveCallbackSecretWithMint(args.secret, args.agentOsId, { baseUrl: base });
1480
1502
  const url = `${base}/api/agent-os/by-id/${encodeURIComponent(args.agentOsId)}/tasks/${encodeURIComponent(args.taskId)}/plan-progress-sync`;
1481
1503
  const res = await postJson(url, secret, {
1482
1504
  phase: args.phase,
@@ -1525,7 +1547,7 @@ async function syncActiveWorkerPlanProgress(runId, args) {
1525
1547
  // src/workspace-runtime-config.ts
1526
1548
  async function fetchWorkspaceRuntimePreferences(agentOsId, args) {
1527
1549
  const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : void 0);
1528
- const secret = resolveCallbackSecret(args.secret ? String(args.secret) : void 0, agentOsId);
1550
+ const secret = await resolveCallbackSecretWithMint(args.secret ? String(args.secret) : void 0, agentOsId, { baseUrl: base });
1529
1551
  const url = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/runtime`;
1530
1552
  try {
1531
1553
  const res = await getJson(url, secret);
@@ -1568,7 +1590,7 @@ async function completeFinishedWorkers(runId, args) {
1568
1590
  }
1569
1591
  async function postOperatorTick(agentOsId, runId, resourceGate, args) {
1570
1592
  const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : void 0);
1571
- const secret = resolveCallbackSecret(args.secret ? String(args.secret) : void 0, agentOsId);
1593
+ const secret = await resolveCallbackSecretWithMint(args.secret ? String(args.secret) : void 0, agentOsId, { baseUrl: base });
1572
1594
  const url = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/operator/tick`;
1573
1595
  const res = await postJson(url, secret, {
1574
1596
  agentOsId,
@@ -1692,7 +1714,7 @@ async function emitPlanProgress(args) {
1692
1714
  evidence.push(parseEvidenceArg(rawEvidence));
1693
1715
  }
1694
1716
  const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : void 0);
1695
- const secret = resolveCallbackSecret(args.secret ? String(args.secret) : void 0, agentOsId);
1717
+ const secret = await resolveCallbackSecretWithMint(args.secret ? String(args.secret) : void 0, agentOsId, { baseUrl: base });
1696
1718
  const url = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/plans/${encodeURIComponent(planId)}/progress-events`;
1697
1719
  const cfg = loadUserConfig();
1698
1720
  const provider = cfg.workerProvider ? `provider:${cfg.workerProvider}` : void 0;