skykoi 2026.3.32 → 2026.3.34

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.
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2026.3.32",
3
- "commit": "e5dd87a50ce9315067889b9a506365fe951bba83",
4
- "builtAt": "2026-03-18T10:15:10.395Z"
2
+ "version": "2026.3.34",
3
+ "commit": "a95342253903bce1e3794c9f4cd619e8a40312bb",
4
+ "builtAt": "2026-03-18T10:25:09.920Z"
5
5
  }
@@ -1 +1 @@
1
- da41fce9ab97ac409fb0ece5889972c284ee42710df6f37b9b77e77f94f883ce
1
+ 385fcba8caf75349091c6df427b375a19cfe3909f7117d3e6b9d4c6556462955
@@ -124,7 +124,7 @@ const entries = [
124
124
  name: "gateway",
125
125
  description: "Gateway control",
126
126
  register: async (program) => {
127
- (await import("./gateway-cli-VBGOf-7z.js")).registerGatewayCli(program);
127
+ (await import("./gateway-cli-Uf3L1tlp.js")).registerGatewayCli(program);
128
128
  }
129
129
  },
130
130
  {
@@ -282,7 +282,7 @@ const entries = [
282
282
  name: "update",
283
283
  description: "CLI update helpers",
284
284
  register: async (program) => {
285
- (await import("./update-cli-D4bfteVO.js")).registerUpdateCli(program);
285
+ (await import("./update-cli-BJw0FEUf.js")).registerUpdateCli(program);
286
286
  }
287
287
  },
288
288
  {
@@ -1,6 +1,6 @@
1
1
  import { n as __exportAll } from "./chunk-BXK9XSlF.js";
2
2
  import { X as resolveStateDir } from "./entry.js";
3
- import { n as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-C00vuiWz.js";
3
+ import { n as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-CtdazzCK.js";
4
4
  import path from "node:path";
5
5
  import os from "node:os";
6
6
  import fs from "node:fs/promises";
@@ -22,7 +22,7 @@ import { a as resolveSessionTranscriptsDirForAgent, i as resolveSessionTranscrip
22
22
  import { d as loadSessionStore } from "./sandbox-DyDrMxBF.js";
23
23
  import { r as runCommandWithRuntime } from "./cli-utils-CQTTNUIq.js";
24
24
  import { n as ensurePluginRegistryLoaded, t as hasExplicitOptions } from "./command-options-YP_dvMez.js";
25
- import { l as getVerboseFlag, o as getFlagValue, r as registerSubCliCommands, s as getPositiveIntFlagValue, u as hasFlag } from "./register.subclis-C00vuiWz.js";
25
+ import { l as getVerboseFlag, o as getFlagValue, r as registerSubCliCommands, s as getPositiveIntFlagValue, u as hasFlag } from "./register.subclis-CtdazzCK.js";
26
26
  import { n as parsePositiveIntOrUndefined, t as collectOption } from "./helpers-CEFiyjZQ.js";
27
27
  import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-DQcPueX1.js";
28
28
  import { t as createDefaultDeps } from "./deps-DZVkCyfF.js";
@@ -34,12 +34,12 @@ import { d as applyAuthChoice, f as applyOpenAIConfig, h as promptAuthChoiceGrou
34
34
  import { l as healthCommand } from "./health-format-BL3M1y4s.js";
35
35
  import { $ as setOpenrouterApiKey, C as applyMoonshotConfig, D as applyOpenrouterConfig, F as applyVercelAiGatewayConfig, J as setGeminiApiKey, K as setAnthropicApiKey, L as applyXaiConfig, N as applyVeniceConfig, Q as setOpencodeZenApiKey, V as applyZaiConfig, X as setMinimaxApiKey, Y as setKimiCodingApiKey, Z as setMoonshotApiKey, at as setXiaomiApiKey, et as setQianfanApiKey, f as applyOpencodeZenConfig, ft as buildTokenProfileId, g as applyMinimaxConfig, it as setXaiApiKey, j as applySyntheticConfig, k as applyQianfanConfig, m as applyMinimaxApiConfig, nt as setVeniceApiKey, ot as setZaiApiKey, pt as validateAnthropicSetupToken, q as setCloudflareAiGatewayConfig, rt as setVercelAiGatewayApiKey, tt as setSyntheticApiKey, v as applyAuthProfileConfig, w as applyMoonshotConfigCn, x as applyKimiCodeConfig, y as applyCloudflareAiGatewayConfig, z as applyXiaomiConfig } from "./github-copilot-auth-DJ_95veW.js";
36
36
  import { n as logConfigUpdated, t as formatConfigPath } from "./logging-D15QDE2U.js";
37
- import { a as findAgentEntryIndex, c as pruneAgentConfig, d as parseIdentityMarkdown, f as runOnboardingWizard, i as buildAgentSummaries, l as identityHasValues, o as listAgentEntries, r as applyAgentConfig, s as loadAgentIdentity, t as statusCommand } from "./status-B9gw1tPc.js";
37
+ import { a as findAgentEntryIndex, c as pruneAgentConfig, d as parseIdentityMarkdown, f as runOnboardingWizard, i as buildAgentSummaries, l as identityHasValues, o as listAgentEntries, r as applyAgentConfig, s as loadAgentIdentity, t as statusCommand } from "./status-UAO83kNe.js";
38
38
  import { a as createOutboundSendDeps, n as resolveSessionKeyForRequest, t as agentCommand } from "./agent-BKhAPOvN.js";
39
39
  import { t as formatHelpExamples } from "./help-format-tZizD4BR.js";
40
40
  import { i as CONFIGURE_WIZARD_SECTIONS, n as configureCommand, r as configureCommandWithSections } from "./configure-D50d4QdJ.js";
41
41
  import { n as ensureSystemdUserLingerNonInteractive } from "./systemd-linger-CEreLGmo.js";
42
- import { n as loadAndMaybeMigrateDoctorConfig, t as doctorCommand } from "./doctor-D3FZptHG.js";
42
+ import { n as loadAndMaybeMigrateDoctorConfig, t as doctorCommand } from "./doctor-BA4__Mx7.js";
43
43
  import path from "node:path";
44
44
  import fs from "node:fs";
45
45
  import JSON5 from "json5";
@@ -29,7 +29,7 @@ import { r as isSystemdUserServiceAvailable } from "./systemd-DQvm8tRB.js";
29
29
  import { n as renderSystemdUnavailableHints, t as isSystemdUnavailableDetail } from "./systemd-hints-DiosV8jd.js";
30
30
  import { a as renderGatewayServiceCleanupHints, i as findExtraGatewayServices, n as auditGatewayServiceConfig, o as readLastGatewayErrorLine, r as needsNodeRuntimeMigration, t as SERVICE_AUDIT_CODES } from "./service-audit-CQ1bUSCH.js";
31
31
  import { i as resolveControlUiDistIndexPathForRoot, l as healthCommand, r as resolveControlUiDistIndexHealth, t as formatHealthCheckFailure } from "./health-format-BL3M1y4s.js";
32
- import { f as doctorShellCompletion, t as runGatewayUpdate } from "./update-runner-D2rkfIG-.js";
32
+ import { f as doctorShellCompletion, t as runGatewayUpdate } from "./update-runner-CqR4E_QO.js";
33
33
  import { n as logConfigUpdated } from "./logging-D15QDE2U.js";
34
34
  import { t as buildWorkspaceSkillStatus } from "./skills-status-C4wmQlJW.js";
35
35
  import { n as buildAuthHealthSummary, r as formatRemainingShort, t as DEFAULT_OAUTH_WARN_MS } from "./auth-health-BtHeU2M-.js";
@@ -26,7 +26,7 @@ import { n as logConfigUpdated } from "./logging-CLxV9Na7.js";
26
26
  import { t as note$1 } from "./note-CrCSjpk3.js";
27
27
  import { t as applyPluginAutoEnable } from "./plugin-auto-enable-KzIwJe0A.js";
28
28
  import { i as resolveControlUiDistIndexPathForRoot, l as healthCommand, r as resolveControlUiDistIndexHealth, t as formatHealthCheckFailure } from "./health-format-DUFBNWnB.js";
29
- import { c as doctorShellCompletion, t as runGatewayUpdate } from "./update-runner--JLGNdGD.js";
29
+ import { c as doctorShellCompletion, t as runGatewayUpdate } from "./update-runner-D9NZDqxe.js";
30
30
  import { i as resolveGatewayAuth } from "./auth-DSrYkGU-.js";
31
31
  import { t as buildWorkspaceSkillStatus } from "./skills-status-BVaiHzFh.js";
32
32
  import { a as repairLaunchAgentBootstrap, i as launchAgentPlistExists, n as isLaunchAgentListed, o as resolveGatewayLogPaths, r as isLaunchAgentLoaded, t as resolveGatewayService } from "./service-BKQOHHW6.js";
package/dist/entry.js CHANGED
@@ -1334,7 +1334,7 @@ if (!ensureExperimentalWarningSuppressed()) {
1334
1334
  applyCliProfileEnv({ profile: parsed.profile });
1335
1335
  process$1.argv = parsed.argv;
1336
1336
  }
1337
- import("./run-main-B4K_5H7e.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
1337
+ import("./run-main-DEA5tZby.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
1338
1338
  console.error("[SKYKOI] Failed to start CLI:", error instanceof Error ? error.stack ?? error.message : error);
1339
1339
  process$1.exitCode = 1;
1340
1340
  });
@@ -61,8 +61,8 @@ import { r as runCommandWithRuntime } from "./cli-utils-CQTTNUIq.js";
61
61
  import "./pairing-labels-DxpfDscO.js";
62
62
  import { t as buildChannelAccountSnapshot } from "./status-t7_XFd6z.js";
63
63
  import "./channels-status-issues-Cx4DwKM8.js";
64
- import "./register.subclis-C00vuiWz.js";
65
- import "./completion-cli-BT_5u1b7.js";
64
+ import "./register.subclis-CtdazzCK.js";
65
+ import "./completion-cli-DXt5J6NO.js";
66
66
  import { n as createOutboundSendDeps, t as createDefaultDeps } from "./deps-DZVkCyfF.js";
67
67
  import "./daemon-runtime-HqcnmSTj.js";
68
68
  import "./service-DV05Mtg_.js";
@@ -76,11 +76,11 @@ import { a as toOptionString, i as parsePort$1, n as extractGatewayMiskeys, r as
76
76
  import { i as probeGateway } from "./audit-D0OQ_h8g.js";
77
77
  import { g as discoverGatewayBeacons, n as installSkill } from "./onboard-skills-Bmw1Vd5a.js";
78
78
  import { a as resolveControlUiRootOverrideSync, c as getHealthSnapshot, d as runHeartbeatOnce, f as setHeartbeatsEnabled, n as ensureControlUiAssetsBuilt, o as resolveControlUiRootSync, p as startHeartbeatRunner, s as formatHealthChannelLines } from "./health-format-BL3M1y4s.js";
79
- import { S as normalizeUpdateChannel, _ as resolveNpmChannelTag, h as compareSemverStrings, m as checkUpdateStatus, t as runGatewayUpdate, y as DEFAULT_PACKAGE_CHANNEL } from "./update-runner-D2rkfIG-.js";
79
+ import { S as normalizeUpdateChannel, _ as resolveNpmChannelTag, h as compareSemverStrings, m as checkUpdateStatus, t as runGatewayUpdate, y as DEFAULT_PACKAGE_CHANNEL } from "./update-runner-CqR4E_QO.js";
80
80
  import "./github-copilot-auth-DJ_95veW.js";
81
81
  import "./logging-D15QDE2U.js";
82
82
  import { i as shouldIncludeHook, n as loadWorkspaceHookEntries, r as resolveHookConfig } from "./hooks-status-CRG1w6AU.js";
83
- import { a as findAgentEntryIndex, c as pruneAgentConfig, f as runOnboardingWizard, n as getStatusSummary, o as listAgentEntries, r as applyAgentConfig, s as loadAgentIdentity, u as loadAgentIdentityFromWorkspace } from "./status-B9gw1tPc.js";
83
+ import { a as findAgentEntryIndex, c as pruneAgentConfig, f as runOnboardingWizard, n as getStatusSummary, o as listAgentEntries, r as applyAgentConfig, s as loadAgentIdentity, u as loadAgentIdentityFromWorkspace } from "./status-UAO83kNe.js";
84
84
  import { t as buildWorkspaceSkillStatus } from "./skills-status-C4wmQlJW.js";
85
85
  import "./tui-_aG7l29T.js";
86
86
  import { i as setGatewayWsLogStyle, n as logWs, r as summarizeAgentEventForWsLog, t as formatForLog } from "./ws-log-C4lXq6b4.js";
@@ -89,11 +89,11 @@ import { a as createOutboundSendDeps$1, i as resolveAgentOutboundTarget, r as re
89
89
  import "./node-service-C2JDeXPT.js";
90
90
  import { n as forceFreePortAndWait } from "./ports-Bc_X7vVa.js";
91
91
  import { spawn, spawnSync } from "node:child_process";
92
- import path from "node:path";
93
- import os from "node:os";
92
+ import path, { join } from "node:path";
93
+ import os, { homedir } from "node:os";
94
94
  import chalk from "chalk";
95
95
  import * as fsSync from "node:fs";
96
- import fs, { constants } from "node:fs";
96
+ import fs, { constants, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
97
97
  import JSON5 from "json5";
98
98
  import fs$1 from "node:fs/promises";
99
99
  import { fileURLToPath, pathToFileURL } from "node:url";
@@ -15895,7 +15895,45 @@ async function startPluginServices(params) {
15895
15895
 
15896
15896
  //#endregion
15897
15897
  //#region src/gateway/bedrock-credentials.ts
15898
- let refreshTimer = null;
15898
+ /**
15899
+ * Auto-fetch AWS Bedrock credentials from the SkyKoi platform.
15900
+ *
15901
+ * Credential flow (ordered by priority):
15902
+ * 1. AWS env vars already set (e.g. EC2 instance profile) → use as-is
15903
+ * 2. Local credential cache (~/.skykoi/bedrock-credentials.json) → load from disk
15904
+ * 3. Platform credential proxy → fetch, inject into env, persist to disk
15905
+ *
15906
+ * Credentials are permanent IAM access keys (no expiration). Once fetched from
15907
+ * the platform they're cached locally so the gateway works after reboots without
15908
+ * any network calls to the platform.
15909
+ */
15910
+ function getCredentialCachePath() {
15911
+ const dir = join(homedir(), ".skykoi");
15912
+ if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
15913
+ return join(dir, "bedrock-credentials.json");
15914
+ }
15915
+ function loadCachedCredentials() {
15916
+ try {
15917
+ const path = getCredentialCachePath();
15918
+ if (!existsSync(path)) return null;
15919
+ const raw = readFileSync(path, "utf-8");
15920
+ const data = JSON.parse(raw);
15921
+ if (data.accessKeyId && data.secretAccessKey) return data;
15922
+ return null;
15923
+ } catch {
15924
+ return null;
15925
+ }
15926
+ }
15927
+ function saveCachedCredentials(creds) {
15928
+ try {
15929
+ writeFileSync(getCredentialCachePath(), JSON.stringify(creds, null, 2), { mode: 384 });
15930
+ } catch {}
15931
+ }
15932
+ function injectCredentials(creds) {
15933
+ process.env.AWS_ACCESS_KEY_ID = creds.accessKeyId;
15934
+ process.env.AWS_SECRET_ACCESS_KEY = creds.secretAccessKey;
15935
+ if (creds.region) process.env.AWS_REGION = creds.region;
15936
+ }
15899
15937
  function resolveGatewayToken(cfg) {
15900
15938
  const gw = cfg.gateway;
15901
15939
  if (!gw?.auth) return void 0;
@@ -15903,6 +15941,11 @@ function resolveGatewayToken(cfg) {
15903
15941
  }
15904
15942
  async function bootstrapBedrockCredentials(cfg) {
15905
15943
  if (resolveAwsSdkEnvVarName() !== void 0) return false;
15944
+ const cached = loadCachedCredentials();
15945
+ if (cached) {
15946
+ injectCredentials(cached);
15947
+ return true;
15948
+ }
15906
15949
  const appUrl = process.env.SKYKOI_APP_URL?.trim();
15907
15950
  const agentId = process.env.SKYKOI_AGENT_ID?.trim();
15908
15951
  const gatewayToken = process.env.SKYKOI_GATEWAY_TOKEN?.trim() || resolveGatewayToken(cfg);
@@ -15911,38 +15954,23 @@ async function bootstrapBedrockCredentials(cfg) {
15911
15954
  const url = `${appUrl}/api/agents/${agentId}/credentials/proxy?provider=amazon-bedrock`;
15912
15955
  const res = await fetch(url, {
15913
15956
  headers: { "x-gateway-token": gatewayToken },
15914
- signal: AbortSignal.timeout(1e4)
15957
+ signal: AbortSignal.timeout(3e4)
15915
15958
  });
15916
15959
  if (!res.ok) return false;
15917
15960
  const cred = (await res.json()).credentials?.find((c) => c.data?.accessKeyId && c.data?.secretAccessKey);
15918
15961
  if (!cred) return false;
15919
- process.env.AWS_ACCESS_KEY_ID = cred.data.accessKeyId;
15920
- process.env.AWS_SECRET_ACCESS_KEY = cred.data.secretAccessKey;
15921
- if (cred.data.sessionToken) process.env.AWS_SESSION_TOKEN = cred.data.sessionToken;
15922
- if (cred.data.region) process.env.AWS_REGION = cred.data.region;
15923
- if (cred.data.expiresAt) scheduleCredentialRefresh(cfg, cred.data.expiresAt);
15962
+ const credentials = {
15963
+ accessKeyId: cred.data.accessKeyId,
15964
+ secretAccessKey: cred.data.secretAccessKey,
15965
+ region: cred.data.region || "us-east-1"
15966
+ };
15967
+ injectCredentials(credentials);
15968
+ saveCachedCredentials(credentials);
15924
15969
  return true;
15925
15970
  } catch {
15926
15971
  return false;
15927
15972
  }
15928
15973
  }
15929
- function scheduleCredentialRefresh(cfg, expiresAt) {
15930
- if (refreshTimer) clearTimeout(refreshTimer);
15931
- const expiresMs = new Date(expiresAt).getTime();
15932
- const now = Date.now();
15933
- const refreshIn = Math.max(expiresMs - now - 10 * 6e4, 6e4);
15934
- refreshTimer = setTimeout(async () => {
15935
- try {
15936
- delete process.env.AWS_ACCESS_KEY_ID;
15937
- delete process.env.AWS_SECRET_ACCESS_KEY;
15938
- delete process.env.AWS_SESSION_TOKEN;
15939
- await bootstrapBedrockCredentials(cfg);
15940
- } catch {
15941
- scheduleCredentialRefresh(cfg, new Date(Date.now() + 15 * 6e4).toISOString());
15942
- }
15943
- }, refreshIn);
15944
- if (refreshTimer.unref) refreshTimer.unref();
15945
- }
15946
15974
 
15947
15975
  //#endregion
15948
15976
  //#region src/gateway/server-restart-sentinel.ts
@@ -55,7 +55,7 @@ import { n as createOutboundSendDeps, t as createDefaultDeps } from "./deps-DRCH
55
55
  import { i as enableTailscaleServe, n as disableTailscaleServe, o as getTailnetHostname, r as enableTailscaleFunnel, t as disableTailscaleFunnel } from "./tailscale-C9oNI3cv.js";
56
56
  import { t as ensureSKYKOICliOnPath } from "./path-env-BnUKFCos.js";
57
57
  import "./daemon-runtime-B7p4kL16.js";
58
- import { c as loadAgentIdentity, d as loadAgentIdentityFromWorkspace, i as applyAgentConfig, l as pruneAgentConfig, o as findAgentEntryIndex, p as forceFreePortAndWait, r as getStatusSummary, s as listAgentEntries, t as runOnboardingWizard } from "./onboarding-D__7Nlsl.js";
58
+ import { c as loadAgentIdentity, d as loadAgentIdentityFromWorkspace, i as applyAgentConfig, l as pruneAgentConfig, o as findAgentEntryIndex, p as forceFreePortAndWait, r as getStatusSummary, s as listAgentEntries, t as runOnboardingWizard } from "./onboarding-ByEvNN8_.js";
59
59
  import { t as resolveChannelDefaultAccountId } from "./helpers-yjIEMzi8.js";
60
60
  import "./logging-CLxV9Na7.js";
61
61
  import "./note-CrCSjpk3.js";
@@ -68,7 +68,7 @@ import "./archive-Dy3Ezb-5.js";
68
68
  import "./skill-scanner-BoGjHXUZ.js";
69
69
  import "./installs-ChtZhX65.js";
70
70
  import { a as resolveControlUiRootOverrideSync, c as getHealthSnapshot, d as runHeartbeatOnce, f as setHeartbeatsEnabled, n as ensureControlUiAssetsBuilt, o as resolveControlUiRootSync, p as startHeartbeatRunner, s as formatHealthChannelLines } from "./health-format-DUFBNWnB.js";
71
- import { S as normalizeUpdateChannel, _ as resolveNpmChannelTag, h as compareSemverStrings, m as checkUpdateStatus, t as runGatewayUpdate, y as DEFAULT_PACKAGE_CHANNEL } from "./update-runner--JLGNdGD.js";
71
+ import { S as normalizeUpdateChannel, _ as resolveNpmChannelTag, h as compareSemverStrings, m as checkUpdateStatus, t as runGatewayUpdate, y as DEFAULT_PACKAGE_CHANNEL } from "./update-runner-D9NZDqxe.js";
72
72
  import { i as resolveGatewayAuth, n as authorizeGatewayConnect, r as isLocalDirectRequest, t as assertGatewayAuthConfigured } from "./auth-DSrYkGU-.js";
73
73
  import { i as probeGateway } from "./audit-zzBGcjIg.js";
74
74
  import "./table-BOthYYmp.js";
@@ -78,7 +78,7 @@ import "./systemd-DyrxDxSB.js";
78
78
  import "./service-audit-Cyagv33t.js";
79
79
  import "./node-service-DPiAKtp-.js";
80
80
  import "./channels-status-issues-CbB072Pz.js";
81
- import "./completion-cli-52VvoM_K.js";
81
+ import "./completion-cli-BFpMGGJp.js";
82
82
  import { a as createOutboundSendDeps$1, i as resolveAgentOutboundTarget, r as resolveAgentDeliveryPlan, t as agentCommand } from "./agent-D3YXnrX0.js";
83
83
  import { n as resolveWideAreaDiscoveryDomain, r as writeWideAreaGatewayZone } from "./widearea-dns-Cr9yVcsB.js";
84
84
  import { i as shouldIncludeHook, n as loadWorkspaceHookEntries, r as resolveHookConfig } from "./hooks-status-CdjD9QYu.js";
@@ -90,10 +90,10 @@ import { a as toOptionString, i as parsePort$1, n as extractGatewayMiskeys, r as
90
90
  import { i as setGatewayWsLogStyle, n as logWs, r as summarizeAgentEventForWsLog, t as formatForLog } from "./ws-log-DQL_wvbk.js";
91
91
  import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-Dt0EMX-c.js";
92
92
  import { fileURLToPath, pathToFileURL } from "node:url";
93
- import os from "node:os";
94
- import path from "node:path";
93
+ import os, { homedir } from "node:os";
94
+ import path, { join } from "node:path";
95
95
  import * as fsSync from "node:fs";
96
- import fs, { constants } from "node:fs";
96
+ import fs, { constants, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
97
97
  import JSON5 from "json5";
98
98
  import chalk from "chalk";
99
99
  import fs$1 from "node:fs/promises";
@@ -15896,7 +15896,45 @@ async function startPluginServices(params) {
15896
15896
 
15897
15897
  //#endregion
15898
15898
  //#region src/gateway/bedrock-credentials.ts
15899
- let refreshTimer = null;
15899
+ /**
15900
+ * Auto-fetch AWS Bedrock credentials from the SkyKoi platform.
15901
+ *
15902
+ * Credential flow (ordered by priority):
15903
+ * 1. AWS env vars already set (e.g. EC2 instance profile) → use as-is
15904
+ * 2. Local credential cache (~/.skykoi/bedrock-credentials.json) → load from disk
15905
+ * 3. Platform credential proxy → fetch, inject into env, persist to disk
15906
+ *
15907
+ * Credentials are permanent IAM access keys (no expiration). Once fetched from
15908
+ * the platform they're cached locally so the gateway works after reboots without
15909
+ * any network calls to the platform.
15910
+ */
15911
+ function getCredentialCachePath() {
15912
+ const dir = join(homedir(), ".skykoi");
15913
+ if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
15914
+ return join(dir, "bedrock-credentials.json");
15915
+ }
15916
+ function loadCachedCredentials() {
15917
+ try {
15918
+ const path = getCredentialCachePath();
15919
+ if (!existsSync(path)) return null;
15920
+ const raw = readFileSync(path, "utf-8");
15921
+ const data = JSON.parse(raw);
15922
+ if (data.accessKeyId && data.secretAccessKey) return data;
15923
+ return null;
15924
+ } catch {
15925
+ return null;
15926
+ }
15927
+ }
15928
+ function saveCachedCredentials(creds) {
15929
+ try {
15930
+ writeFileSync(getCredentialCachePath(), JSON.stringify(creds, null, 2), { mode: 384 });
15931
+ } catch {}
15932
+ }
15933
+ function injectCredentials(creds) {
15934
+ process.env.AWS_ACCESS_KEY_ID = creds.accessKeyId;
15935
+ process.env.AWS_SECRET_ACCESS_KEY = creds.secretAccessKey;
15936
+ if (creds.region) process.env.AWS_REGION = creds.region;
15937
+ }
15900
15938
  function resolveGatewayToken(cfg) {
15901
15939
  const gw = cfg.gateway;
15902
15940
  if (!gw?.auth) return void 0;
@@ -15904,6 +15942,11 @@ function resolveGatewayToken(cfg) {
15904
15942
  }
15905
15943
  async function bootstrapBedrockCredentials(cfg) {
15906
15944
  if (resolveAwsSdkEnvVarName() !== void 0) return false;
15945
+ const cached = loadCachedCredentials();
15946
+ if (cached) {
15947
+ injectCredentials(cached);
15948
+ return true;
15949
+ }
15907
15950
  const appUrl = process.env.SKYKOI_APP_URL?.trim();
15908
15951
  const agentId = process.env.SKYKOI_AGENT_ID?.trim();
15909
15952
  const gatewayToken = process.env.SKYKOI_GATEWAY_TOKEN?.trim() || resolveGatewayToken(cfg);
@@ -15912,38 +15955,23 @@ async function bootstrapBedrockCredentials(cfg) {
15912
15955
  const url = `${appUrl}/api/agents/${agentId}/credentials/proxy?provider=amazon-bedrock`;
15913
15956
  const res = await fetch(url, {
15914
15957
  headers: { "x-gateway-token": gatewayToken },
15915
- signal: AbortSignal.timeout(1e4)
15958
+ signal: AbortSignal.timeout(3e4)
15916
15959
  });
15917
15960
  if (!res.ok) return false;
15918
15961
  const cred = (await res.json()).credentials?.find((c) => c.data?.accessKeyId && c.data?.secretAccessKey);
15919
15962
  if (!cred) return false;
15920
- process.env.AWS_ACCESS_KEY_ID = cred.data.accessKeyId;
15921
- process.env.AWS_SECRET_ACCESS_KEY = cred.data.secretAccessKey;
15922
- if (cred.data.sessionToken) process.env.AWS_SESSION_TOKEN = cred.data.sessionToken;
15923
- if (cred.data.region) process.env.AWS_REGION = cred.data.region;
15924
- if (cred.data.expiresAt) scheduleCredentialRefresh(cfg, cred.data.expiresAt);
15963
+ const credentials = {
15964
+ accessKeyId: cred.data.accessKeyId,
15965
+ secretAccessKey: cred.data.secretAccessKey,
15966
+ region: cred.data.region || "us-east-1"
15967
+ };
15968
+ injectCredentials(credentials);
15969
+ saveCachedCredentials(credentials);
15925
15970
  return true;
15926
15971
  } catch {
15927
15972
  return false;
15928
15973
  }
15929
15974
  }
15930
- function scheduleCredentialRefresh(cfg, expiresAt) {
15931
- if (refreshTimer) clearTimeout(refreshTimer);
15932
- const expiresMs = new Date(expiresAt).getTime();
15933
- const now = Date.now();
15934
- const refreshIn = Math.max(expiresMs - now - 10 * 6e4, 6e4);
15935
- refreshTimer = setTimeout(async () => {
15936
- try {
15937
- delete process.env.AWS_ACCESS_KEY_ID;
15938
- delete process.env.AWS_SECRET_ACCESS_KEY;
15939
- delete process.env.AWS_SESSION_TOKEN;
15940
- await bootstrapBedrockCredentials(cfg);
15941
- } catch {
15942
- scheduleCredentialRefresh(cfg, new Date(Date.now() + 15 * 6e4).toISOString());
15943
- }
15944
- }, refreshIn);
15945
- if (refreshTimer.unref) refreshTimer.unref();
15946
- }
15947
15975
 
15948
15976
  //#endregion
15949
15977
  //#region src/gateway/server-restart-sentinel.ts
package/dist/index.js CHANGED
@@ -51,7 +51,7 @@ import { l as ensureBinary, u as promptYesNo } from "./tailscale-C9oNI3cv.js";
51
51
  import { t as isMainModule } from "./is-main-B6kCyqsv.js";
52
52
  import { t as ensureSKYKOICliOnPath } from "./path-env-BnUKFCos.js";
53
53
  import { a as gatewayInstallErrorHint, g as assertSupportedRuntime, i as buildGatewayInstallPlan, r as isGatewayDaemonRuntime, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-B7p4kL16.js";
54
- import { a as buildAgentSummaries, c as loadAgentIdentity, f as parseIdentityMarkdown, i as applyAgentConfig, l as pruneAgentConfig, n as statusCommand, o as findAgentEntryIndex, s as listAgentEntries, t as runOnboardingWizard, u as identityHasValues } from "./onboarding-D__7Nlsl.js";
54
+ import { a as buildAgentSummaries, c as loadAgentIdentity, f as parseIdentityMarkdown, i as applyAgentConfig, l as pruneAgentConfig, n as statusCommand, o as findAgentEntryIndex, s as listAgentEntries, t as runOnboardingWizard, u as identityHasValues } from "./onboarding-ByEvNN8_.js";
55
55
  import { t as resolveChannelDefaultAccountId } from "./helpers-yjIEMzi8.js";
56
56
  import { n as logConfigUpdated, t as formatConfigPath } from "./logging-CLxV9Na7.js";
57
57
  import "./note-CrCSjpk3.js";
@@ -65,7 +65,7 @@ import "./archive-Dy3Ezb-5.js";
65
65
  import "./skill-scanner-BoGjHXUZ.js";
66
66
  import "./installs-ChtZhX65.js";
67
67
  import { l as healthCommand } from "./health-format-DUFBNWnB.js";
68
- import "./update-runner--JLGNdGD.js";
68
+ import "./update-runner-D9NZDqxe.js";
69
69
  import "./auth-DSrYkGU-.js";
70
70
  import "./audit-zzBGcjIg.js";
71
71
  import { t as renderTable } from "./table-BOthYYmp.js";
@@ -75,7 +75,7 @@ import { r as isSystemdUserServiceAvailable } from "./systemd-DyrxDxSB.js";
75
75
  import "./service-audit-Cyagv33t.js";
76
76
  import "./node-service-DPiAKtp-.js";
77
77
  import "./channels-status-issues-CbB072Pz.js";
78
- import { c as registerSubCliCommands, d as getPositiveIntFlagValue, f as getVerboseFlag, l as getCommandPath, m as hasHelpOrVersion, p as hasFlag, u as getFlagValue } from "./completion-cli-52VvoM_K.js";
78
+ import { c as registerSubCliCommands, d as getPositiveIntFlagValue, f as getVerboseFlag, l as getCommandPath, m as hasHelpOrVersion, p as hasFlag, u as getFlagValue } from "./completion-cli-BFpMGGJp.js";
79
79
  import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-CbL6geDo.js";
80
80
  import { t as formatHelpExamples } from "./help-format-q-N7n7vs.js";
81
81
  import { a as createOutboundSendDeps, n as resolveSessionKeyForRequest, t as agentCommand } from "./agent-D3YXnrX0.js";
@@ -85,7 +85,7 @@ import { i as CONFIGURE_WIZARD_SECTIONS, n as configureCommand, r as configureCo
85
85
  import { n as ensureSystemdUserLingerNonInteractive } from "./systemd-linger-C5NE1TWa.js";
86
86
  import "./widearea-dns-Cr9yVcsB.js";
87
87
  import "./auth-health-DLdo_EBm.js";
88
- import { n as loadAndMaybeMigrateDoctorConfig, t as doctorCommand } from "./doctor-D7gplt7y.js";
88
+ import { n as loadAndMaybeMigrateDoctorConfig, t as doctorCommand } from "./doctor-DPA2jDpR.js";
89
89
  import "./hooks-status-CdjD9QYu.js";
90
90
  import { i as hasEmittedCliBanner, n as emitCliBanner, r as formatCliBannerLine } from "./tui-CQVWQGBQ.js";
91
91
  import process$1 from "node:process";
@@ -24,7 +24,7 @@ import { t as WizardCancelledError } from "./prompts-FbZThK8w.js";
24
24
  import { c as promptDefaultModel, d as warnIfModelConfigLooksOff, f as applyAuthChoice, g as promptAuthChoiceGrouped, r as promptRemoteGatewayConfig, s as applyPrimaryModel, t as setupSkills, u as resolvePreferredProviderForAuthChoice } from "./onboard-skills-C0FcXPym.js";
25
25
  import { n as setupChannels } from "./onboard-channels-yENZymbS.js";
26
26
  import { l as healthCommand, n as ensureControlUiAssetsBuilt, s as formatHealthChannelLines, t as formatHealthCheckFailure, u as resolveHeartbeatSummaryForAgent } from "./health-format-DUFBNWnB.js";
27
- import { C as resolveEffectiveUpdateChannel, S as normalizeUpdateChannel, d as formatUpdateOneLiner, f as getUpdateCheckResult, h as compareSemverStrings, l as ensureCompletionCacheExists, m as checkUpdateStatus, p as resolveUpdateAvailability, s as checkShellCompletionStatus, u as formatUpdateAvailableHint, x as formatUpdateChannelLabel } from "./update-runner--JLGNdGD.js";
27
+ import { C as resolveEffectiveUpdateChannel, S as normalizeUpdateChannel, d as formatUpdateOneLiner, f as getUpdateCheckResult, h as compareSemverStrings, l as ensureCompletionCacheExists, m as checkUpdateStatus, p as resolveUpdateAvailability, s as checkShellCompletionStatus, u as formatUpdateAvailableHint, x as formatUpdateChannelLabel } from "./update-runner-D9NZDqxe.js";
28
28
  import { i as probeGateway, t as runSecurityAudit } from "./audit-zzBGcjIg.js";
29
29
  import { t as renderTable } from "./table-BOthYYmp.js";
30
30
  import { t as buildWorkspaceSkillStatus } from "./skills-status-BVaiHzFh.js";
@@ -34,7 +34,7 @@ import { o as readLastGatewayErrorLine } from "./service-audit-Cyagv33t.js";
34
34
  import { t as resolveNodeService } from "./node-service-DPiAKtp-.js";
35
35
  import { t as collectChannelStatusIssues } from "./channels-status-issues-CbB072Pz.js";
36
36
  import { i as redactSecrets, n as formatDuration$1, r as formatGatewayAuthUsed, t as formatAge$1 } from "./format-8citvr_1.js";
37
- import { r as installCompletion } from "./completion-cli-52VvoM_K.js";
37
+ import { r as installCompletion } from "./completion-cli-BFpMGGJp.js";
38
38
  import { t as buildWorkspaceHookStatus } from "./hooks-status-CdjD9QYu.js";
39
39
  import { t as runTui } from "./tui-CQVWQGBQ.js";
40
40
  import os from "node:os";
@@ -6,7 +6,7 @@ import os, { homedir } from "node:os";
6
6
  import path from "node:path";
7
7
  import fs, { createWriteStream, existsSync, statSync } from "node:fs";
8
8
  import { Logger } from "tslog";
9
- import JSON5 from "json5";
9
+ import json5 from "json5";
10
10
  import chalk, { Chalk } from "chalk";
11
11
  import fs$1 from "node:fs/promises";
12
12
  import { execFile, execFileSync, spawn } from "node:child_process";
@@ -2272,7 +2272,7 @@ function readLoggingConfig() {
2272
2272
  try {
2273
2273
  if (!fs.existsSync(configPath)) return;
2274
2274
  const raw = fs.readFileSync(configPath, "utf-8");
2275
- const logging = JSON5.parse(raw)?.logging;
2275
+ const logging = json5.parse(raw)?.logging;
2276
2276
  if (!logging || typeof logging !== "object" || Array.isArray(logging)) return;
2277
2277
  return logging;
2278
2278
  } catch {
@@ -8077,7 +8077,7 @@ var IncludeProcessor = class IncludeProcessor {
8077
8077
  };
8078
8078
  const defaultResolver = {
8079
8079
  readFile: (p) => fs.readFileSync(p, "utf-8"),
8080
- parseJson: (raw) => JSON5.parse(raw)
8080
+ parseJson: (raw) => json5.parse(raw)
8081
8081
  };
8082
8082
  /**
8083
8083
  * Resolves all $include directives in a parsed config object.
@@ -10718,18 +10718,18 @@ function resolveConfigPathForDeps(deps) {
10718
10718
  function normalizeDeps(overrides = {}) {
10719
10719
  return {
10720
10720
  fs: overrides.fs ?? fs,
10721
- json5: overrides.json5 ?? JSON5,
10721
+ json5: overrides.json5 ?? json5,
10722
10722
  env: overrides.env ?? process.env,
10723
10723
  homedir: overrides.homedir ?? os.homedir,
10724
10724
  configPath: overrides.configPath ?? "",
10725
10725
  logger: overrides.logger ?? console
10726
10726
  };
10727
10727
  }
10728
- function parseConfigJson5(raw, json5 = JSON5) {
10728
+ function parseConfigJson5(raw, json5$1 = json5) {
10729
10729
  try {
10730
10730
  return {
10731
10731
  ok: true,
10732
- parsed: json5.parse(raw)
10732
+ parsed: json5$1.parse(raw)
10733
10733
  };
10734
10734
  } catch (err) {
10735
10735
  return {
@@ -11226,7 +11226,7 @@ function loadSessionStore(storePath, opts = {}) {
11226
11226
  let mtimeMs = getFileMtimeMs(storePath);
11227
11227
  try {
11228
11228
  const raw = fs.readFileSync(storePath, "utf-8");
11229
- const parsed = JSON5.parse(raw);
11229
+ const parsed = json5.parse(raw);
11230
11230
  if (isSessionStoreRecord(parsed)) store = parsed;
11231
11231
  mtimeMs = getFileMtimeMs(storePath) ?? mtimeMs;
11232
11232
  } catch {}
@@ -52,8 +52,8 @@ import "./pairing-labels-DxpfDscO.js";
52
52
  import "./channels-status-issues-Cx4DwKM8.js";
53
53
  import { n as ensurePluginRegistryLoaded } from "./command-options-YP_dvMez.js";
54
54
  import { n as resolveCliChannelOptions } from "./channel-options-DoRr2LmL.js";
55
- import { a as getCommandPath, d as hasHelpOrVersion, l as getVerboseFlag } from "./register.subclis-C00vuiWz.js";
56
- import "./completion-cli-BT_5u1b7.js";
55
+ import { a as getCommandPath, d as hasHelpOrVersion, l as getVerboseFlag } from "./register.subclis-CtdazzCK.js";
56
+ import "./completion-cli-DXt5J6NO.js";
57
57
  import "./gateway-rpc-DQcPueX1.js";
58
58
  import "./deps-DZVkCyfF.js";
59
59
  import "./daemon-runtime-HqcnmSTj.js";
@@ -65,22 +65,22 @@ import "./widearea-dns-DHSIgmLp.js";
65
65
  import "./audit-D0OQ_h8g.js";
66
66
  import "./onboard-skills-Bmw1Vd5a.js";
67
67
  import "./health-format-BL3M1y4s.js";
68
- import "./update-runner-D2rkfIG-.js";
68
+ import "./update-runner-CqR4E_QO.js";
69
69
  import "./github-copilot-auth-DJ_95veW.js";
70
70
  import "./logging-D15QDE2U.js";
71
71
  import "./hooks-status-CRG1w6AU.js";
72
- import "./status-B9gw1tPc.js";
72
+ import "./status-UAO83kNe.js";
73
73
  import "./skills-status-C4wmQlJW.js";
74
74
  import { i as hasEmittedCliBanner, n as emitCliBanner, r as formatCliBannerLine } from "./tui-_aG7l29T.js";
75
75
  import "./agent-BKhAPOvN.js";
76
76
  import "./node-service-C2JDeXPT.js";
77
77
  import { t as forceFreePort } from "./ports-Bc_X7vVa.js";
78
78
  import "./auth-health-BtHeU2M-.js";
79
- import { r as registerProgramCommands, t as ensureConfigReady } from "./config-guard-D-C6wp6Q.js";
79
+ import { r as registerProgramCommands, t as ensureConfigReady } from "./config-guard-Ct1PT1ZL.js";
80
80
  import "./help-format-tZizD4BR.js";
81
81
  import "./configure-D50d4QdJ.js";
82
82
  import "./systemd-linger-CEreLGmo.js";
83
- import "./doctor-D3FZptHG.js";
83
+ import "./doctor-BA4__Mx7.js";
84
84
  import { Command } from "commander";
85
85
 
86
86
  //#region src/cli/program/context.ts
@@ -124,7 +124,7 @@ const entries = [
124
124
  name: "gateway",
125
125
  description: "Gateway control",
126
126
  register: async (program) => {
127
- (await import("./gateway-cli-DIr4w7H1.js")).registerGatewayCli(program);
127
+ (await import("./gateway-cli-Dfp03Bdx.js")).registerGatewayCli(program);
128
128
  }
129
129
  },
130
130
  {
@@ -282,14 +282,14 @@ const entries = [
282
282
  name: "update",
283
283
  description: "CLI update helpers",
284
284
  register: async (program) => {
285
- (await import("./update-cli-TpiKYwkG.js")).registerUpdateCli(program);
285
+ (await import("./update-cli-uktSZBAl.js")).registerUpdateCli(program);
286
286
  }
287
287
  },
288
288
  {
289
289
  name: "completion",
290
290
  description: "Generate shell completion script",
291
291
  register: async (program) => {
292
- (await import("./completion-cli-BT_5u1b7.js").then((n) => n.n)).registerCompletionCli(program);
292
+ (await import("./completion-cli-DXt5J6NO.js").then((n) => n.n)).registerCompletionCli(program);
293
293
  }
294
294
  }
295
295
  ];
@@ -51,8 +51,8 @@ import "./login-qr-BHTIpk7i.js";
51
51
  import "./pairing-labels-DxpfDscO.js";
52
52
  import "./channels-status-issues-Cx4DwKM8.js";
53
53
  import { n as ensurePluginRegistryLoaded } from "./command-options-YP_dvMez.js";
54
- import { a as getCommandPath, c as getPrimaryCommand, d as hasHelpOrVersion } from "./register.subclis-C00vuiWz.js";
55
- import "./completion-cli-BT_5u1b7.js";
54
+ import { a as getCommandPath, c as getPrimaryCommand, d as hasHelpOrVersion } from "./register.subclis-CtdazzCK.js";
55
+ import "./completion-cli-DXt5J6NO.js";
56
56
  import "./gateway-rpc-DQcPueX1.js";
57
57
  import "./deps-DZVkCyfF.js";
58
58
  import { h as assertSupportedRuntime } from "./daemon-runtime-HqcnmSTj.js";
@@ -64,21 +64,21 @@ import "./widearea-dns-DHSIgmLp.js";
64
64
  import "./audit-D0OQ_h8g.js";
65
65
  import "./onboard-skills-Bmw1Vd5a.js";
66
66
  import "./health-format-BL3M1y4s.js";
67
- import "./update-runner-D2rkfIG-.js";
67
+ import "./update-runner-CqR4E_QO.js";
68
68
  import "./github-copilot-auth-DJ_95veW.js";
69
69
  import "./logging-D15QDE2U.js";
70
70
  import "./hooks-status-CRG1w6AU.js";
71
- import "./status-B9gw1tPc.js";
71
+ import "./status-UAO83kNe.js";
72
72
  import "./skills-status-C4wmQlJW.js";
73
73
  import { n as emitCliBanner } from "./tui-_aG7l29T.js";
74
74
  import "./agent-BKhAPOvN.js";
75
75
  import "./node-service-C2JDeXPT.js";
76
76
  import "./auth-health-BtHeU2M-.js";
77
- import { n as findRoutedCommand, t as ensureConfigReady } from "./config-guard-D-C6wp6Q.js";
77
+ import { n as findRoutedCommand, t as ensureConfigReady } from "./config-guard-Ct1PT1ZL.js";
78
78
  import "./help-format-tZizD4BR.js";
79
79
  import "./configure-D50d4QdJ.js";
80
80
  import "./systemd-linger-CEreLGmo.js";
81
- import "./doctor-D3FZptHG.js";
81
+ import "./doctor-BA4__Mx7.js";
82
82
  import path from "node:path";
83
83
  import process$1 from "node:process";
84
84
  import fs from "node:fs";
@@ -140,7 +140,7 @@ async function runCli(argv = process$1.argv) {
140
140
  assertSupportedRuntime();
141
141
  if (await tryRouteCli(normalizedArgv)) return;
142
142
  enableConsoleCapture();
143
- const { buildProgram } = await import("./program-DgFnkvu_.js");
143
+ const { buildProgram } = await import("./program-DsqhEBlx.js");
144
144
  const program = buildProgram();
145
145
  installUnhandledRejectionHandler();
146
146
  process$1.on("uncaughtException", (error) => {
@@ -150,7 +150,7 @@ async function runCli(argv = process$1.argv) {
150
150
  const parseArgv = rewriteUpdateFlagArgv(normalizedArgv);
151
151
  const primary = getPrimaryCommand(parseArgv);
152
152
  if (primary) {
153
- const { registerSubCliByName } = await import("./register.subclis-C00vuiWz.js").then((n) => n.i);
153
+ const { registerSubCliByName } = await import("./register.subclis-CtdazzCK.js").then((n) => n.i);
154
154
  await registerSubCliByName(program, primary);
155
155
  }
156
156
  if (!(!primary && hasHelpOrVersion(parseArgv))) {
@@ -20,7 +20,7 @@ import { o as resolveStorePath } from "./paths-DPLOvGLU.js";
20
20
  import { I as resolveMainSessionKey, d as loadSessionStore } from "./sandbox-DyDrMxBF.js";
21
21
  import { t as buildChannelSummary } from "./channel-summary-BfmMtKO5.js";
22
22
  import { t as collectChannelStatusIssues } from "./channels-status-issues-Cx4DwKM8.js";
23
- import { r as installCompletion } from "./completion-cli-BT_5u1b7.js";
23
+ import { r as installCompletion } from "./completion-cli-DXt5J6NO.js";
24
24
  import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-HqcnmSTj.js";
25
25
  import { o as resolveGatewayLogPaths, t as resolveGatewayService } from "./service-DV05Mtg_.js";
26
26
  import { r as isSystemdUserServiceAvailable } from "./systemd-DQvm8tRB.js";
@@ -29,7 +29,7 @@ import { t as renderTable } from "./table-Kzsd53ks.js";
29
29
  import { i as probeGateway, t as runSecurityAudit } from "./audit-D0OQ_h8g.js";
30
30
  import { d as applyAuthChoice, h as promptAuthChoiceGrouped, l as resolvePreferredProviderForAuthChoice, o as applyPrimaryModel, r as promptRemoteGatewayConfig, s as promptDefaultModel, t as setupSkills, u as warnIfModelConfigLooksOff } from "./onboard-skills-Bmw1Vd5a.js";
31
31
  import { l as healthCommand, n as ensureControlUiAssetsBuilt, s as formatHealthChannelLines, t as formatHealthCheckFailure, u as resolveHeartbeatSummaryForAgent } from "./health-format-BL3M1y4s.js";
32
- import { C as resolveEffectiveUpdateChannel, S as normalizeUpdateChannel, c as formatUpdateOneLiner, d as checkShellCompletionStatus, h as compareSemverStrings, l as getUpdateCheckResult, m as checkUpdateStatus, p as ensureCompletionCacheExists, s as formatUpdateAvailableHint, u as resolveUpdateAvailability, x as formatUpdateChannelLabel } from "./update-runner-D2rkfIG-.js";
32
+ import { C as resolveEffectiveUpdateChannel, S as normalizeUpdateChannel, c as formatUpdateOneLiner, d as checkShellCompletionStatus, h as compareSemverStrings, l as getUpdateCheckResult, m as checkUpdateStatus, p as ensureCompletionCacheExists, s as formatUpdateAvailableHint, u as resolveUpdateAvailability, x as formatUpdateChannelLabel } from "./update-runner-CqR4E_QO.js";
33
33
  import { n as logConfigUpdated } from "./logging-D15QDE2U.js";
34
34
  import { t as buildWorkspaceHookStatus } from "./hooks-status-CRG1w6AU.js";
35
35
  import { t as buildWorkspaceSkillStatus } from "./skills-status-C4wmQlJW.js";
@@ -54,7 +54,7 @@ import "./archive-Dy3Ezb-5.js";
54
54
  import "./skill-scanner-BoGjHXUZ.js";
55
55
  import "./installs-ChtZhX65.js";
56
56
  import "./health-format-DUFBNWnB.js";
57
- import { C as resolveEffectiveUpdateChannel, S as normalizeUpdateChannel, _ as resolveNpmChannelTag, a as globalInstallArgs, b as channelToNpmTag, d as formatUpdateOneLiner, g as fetchNpmTagVersion, h as compareSemverStrings, i as detectGlobalInstallManagerForRoot, l as ensureCompletionCacheExists, m as checkUpdateStatus, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, p as resolveUpdateAvailability, r as detectGlobalInstallManagerByPresence, s as checkShellCompletionStatus, t as runGatewayUpdate, u as formatUpdateAvailableHint, v as DEFAULT_GIT_CHANNEL, x as formatUpdateChannelLabel, y as DEFAULT_PACKAGE_CHANNEL } from "./update-runner--JLGNdGD.js";
57
+ import { C as resolveEffectiveUpdateChannel, S as normalizeUpdateChannel, _ as resolveNpmChannelTag, a as globalInstallArgs, b as channelToNpmTag, d as formatUpdateOneLiner, g as fetchNpmTagVersion, h as compareSemverStrings, i as detectGlobalInstallManagerForRoot, l as ensureCompletionCacheExists, m as checkUpdateStatus, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, p as resolveUpdateAvailability, r as detectGlobalInstallManagerByPresence, s as checkShellCompletionStatus, t as runGatewayUpdate, u as formatUpdateAvailableHint, v as DEFAULT_GIT_CHANNEL, x as formatUpdateChannelLabel, y as DEFAULT_PACKAGE_CHANNEL } from "./update-runner-D9NZDqxe.js";
58
58
  import "./auth-DSrYkGU-.js";
59
59
  import { t as renderTable } from "./table-BOthYYmp.js";
60
60
  import "./skills-status-BVaiHzFh.js";
@@ -62,11 +62,11 @@ import "./service-BKQOHHW6.js";
62
62
  import "./systemd-DyrxDxSB.js";
63
63
  import "./service-audit-Cyagv33t.js";
64
64
  import "./channels-status-issues-CbB072Pz.js";
65
- import { r as installCompletion } from "./completion-cli-52VvoM_K.js";
65
+ import { r as installCompletion } from "./completion-cli-BFpMGGJp.js";
66
66
  import { t as formatHelpExamples } from "./help-format-q-N7n7vs.js";
67
67
  import "./systemd-linger-C5NE1TWa.js";
68
68
  import "./auth-health-DLdo_EBm.js";
69
- import { t as doctorCommand } from "./doctor-D7gplt7y.js";
69
+ import { t as doctorCommand } from "./doctor-DPA2jDpR.js";
70
70
  import "./shared-CX7eJEGL.js";
71
71
  import { r as runDaemonRestart } from "./daemon-cli-DC0OyoyG.js";
72
72
  import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-BM7DEuEF.js";
@@ -49,8 +49,8 @@ import "./pairing-store-D5pH_THY.js";
49
49
  import "./login-qr-BHTIpk7i.js";
50
50
  import "./pairing-labels-DxpfDscO.js";
51
51
  import "./channels-status-issues-Cx4DwKM8.js";
52
- import "./register.subclis-C00vuiWz.js";
53
- import { r as installCompletion } from "./completion-cli-BT_5u1b7.js";
52
+ import "./register.subclis-CtdazzCK.js";
53
+ import { r as installCompletion } from "./completion-cli-DXt5J6NO.js";
54
54
  import "./deps-DZVkCyfF.js";
55
55
  import { g as parseSemver } from "./daemon-runtime-HqcnmSTj.js";
56
56
  import "./service-DV05Mtg_.js";
@@ -60,14 +60,14 @@ import { r as runDaemonRestart } from "./daemon-cli-CMZsQu2M.js";
60
60
  import "./service-audit-CQ1bUSCH.js";
61
61
  import { t as renderTable } from "./table-Kzsd53ks.js";
62
62
  import "./health-format-BL3M1y4s.js";
63
- import { C as resolveEffectiveUpdateChannel, S as normalizeUpdateChannel, _ as resolveNpmChannelTag, a as globalInstallArgs, b as channelToNpmTag, c as formatUpdateOneLiner, d as checkShellCompletionStatus, g as fetchNpmTagVersion, h as compareSemverStrings, i as detectGlobalInstallManagerForRoot, m as checkUpdateStatus, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, p as ensureCompletionCacheExists, r as detectGlobalInstallManagerByPresence, s as formatUpdateAvailableHint, t as runGatewayUpdate, u as resolveUpdateAvailability, v as DEFAULT_GIT_CHANNEL, x as formatUpdateChannelLabel, y as DEFAULT_PACKAGE_CHANNEL } from "./update-runner-D2rkfIG-.js";
63
+ import { C as resolveEffectiveUpdateChannel, S as normalizeUpdateChannel, _ as resolveNpmChannelTag, a as globalInstallArgs, b as channelToNpmTag, c as formatUpdateOneLiner, d as checkShellCompletionStatus, g as fetchNpmTagVersion, h as compareSemverStrings, i as detectGlobalInstallManagerForRoot, m as checkUpdateStatus, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, p as ensureCompletionCacheExists, r as detectGlobalInstallManagerByPresence, s as formatUpdateAvailableHint, t as runGatewayUpdate, u as resolveUpdateAvailability, v as DEFAULT_GIT_CHANNEL, x as formatUpdateChannelLabel, y as DEFAULT_PACKAGE_CHANNEL } from "./update-runner-CqR4E_QO.js";
64
64
  import "./logging-D15QDE2U.js";
65
65
  import "./skills-status-C4wmQlJW.js";
66
66
  import "./auth-health-BtHeU2M-.js";
67
67
  import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-NeXgYicE.js";
68
68
  import { t as formatHelpExamples } from "./help-format-tZizD4BR.js";
69
69
  import "./systemd-linger-CEreLGmo.js";
70
- import { t as doctorCommand } from "./doctor-D3FZptHG.js";
70
+ import { t as doctorCommand } from "./doctor-BA4__Mx7.js";
71
71
  import { spawnSync } from "node:child_process";
72
72
  import path from "node:path";
73
73
  import os from "node:os";
@@ -4,7 +4,7 @@ import { t as resolveSKYKOIPackageRoot } from "./SKYKOI-root-B5HYTPZX.js";
4
4
  import { j as VERSION } from "./config-CtkB7u5D.js";
5
5
  import { Ln as trimLogTail } from "./loader-BY97YNZi.js";
6
6
  import { t as note } from "./note-YmyPRD-3.js";
7
- import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-BT_5u1b7.js";
7
+ import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-DXt5J6NO.js";
8
8
  import { g as parseSemver } from "./daemon-runtime-HqcnmSTj.js";
9
9
  import { i as resolveControlUiDistIndexPathForRoot, r as resolveControlUiDistIndexHealth } from "./health-format-BL3M1y4s.js";
10
10
  import { spawnSync } from "node:child_process";
@@ -6,7 +6,7 @@ import { j as VERSION } from "./config-CJhjWqlt.js";
6
6
  import { _ as parseSemver } from "./daemon-runtime-B7p4kL16.js";
7
7
  import { t as note } from "./note-CrCSjpk3.js";
8
8
  import { i as resolveControlUiDistIndexPathForRoot, r as resolveControlUiDistIndexHealth } from "./health-format-DUFBNWnB.js";
9
- import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-52VvoM_K.js";
9
+ import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-BFpMGGJp.js";
10
10
  import os from "node:os";
11
11
  import path from "node:path";
12
12
  import fs from "node:fs/promises";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skykoi",
3
- "version": "2026.3.32",
3
+ "version": "2026.3.34",
4
4
  "description": "SkyKoi — AI agent runtime. Multi-channel gateway CLI with RPC agent. Forked from SkyKoi.",
5
5
  "keywords": [
6
6
  "skykoi",