skykoi 2026.3.32 → 2026.3.33

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.33",
3
+ "commit": "5fbcd086c33c81f370f0ab3c4f8745b139975fef",
4
+ "builtAt": "2026-03-18T10:21:05.965Z"
5
5
  }
@@ -1 +1 @@
1
- da41fce9ab97ac409fb0ece5889972c284ee42710df6f37b9b77e77f94f883ce
1
+ 390eda7f2c7ce7c437b8463d706583fd1a1bc16b5b8d209ecbc555ddec23673b
@@ -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";
@@ -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.33",
4
4
  "description": "SkyKoi — AI agent runtime. Multi-channel gateway CLI with RPC agent. Forked from SkyKoi.",
5
5
  "keywords": [
6
6
  "skykoi",