skykoi 2026.3.390 → 2026.3.391

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.
Files changed (55) hide show
  1. package/dist/build-info.json +3 -3
  2. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  3. package/dist/{completion-cli-CB6QWTqS.js → completion-cli-Daqk_SMv.js} +1 -1
  4. package/dist/{config-guard-CjcXwZiV.js → config-guard-B9uTugI8.js} +4 -4
  5. package/dist/{doctor-7g1w0aqI.js → doctor-B4jYOmV8.js} +1 -1
  6. package/dist/{doctor-completion-E9vZhcxg.js → doctor-completion-BFKSD7Wa.js} +1 -1
  7. package/dist/entry.js +1 -1
  8. package/dist/{gateway-cli-pU_B-os3.js → gateway-cli-DnDlw3rn.js} +5 -5
  9. package/dist/index.js +8 -8
  10. package/dist/{onboarding-C9uohvos.js → onboarding-D_Fft8Qj.js} +3 -3
  11. package/dist/plugin-sdk/index.js +7 -7
  12. package/dist/{program-AosXkz3C.js → program-DqdcT8MN.js} +3 -3
  13. package/dist/{register.subclis-NjSMLFWH.js → register.subclis-CbN6zTM-.js} +4 -4
  14. package/dist/{run-main-DS3bwhA7.js → run-main-CRQnDGos.js} +9 -9
  15. package/dist/{tui-BJVJtl_f.js → tui-BzTkL_-S.js} +167 -28
  16. package/dist/{tui-cli-D_MY26rw.js → tui-cli-B0BEmt1q.js} +1 -1
  17. package/dist/{update-cli-BHe9tJXa.js → update-cli-CJMUfl50.js} +4 -4
  18. package/extensions/bluebubbles/package.json +1 -1
  19. package/extensions/copilot-proxy/package.json +1 -1
  20. package/extensions/diagnostics-otel/package.json +1 -1
  21. package/extensions/discord/package.json +1 -1
  22. package/extensions/feishu/package.json +1 -1
  23. package/extensions/google-antigravity-auth/package.json +1 -1
  24. package/extensions/google-gemini-cli-auth/package.json +1 -1
  25. package/extensions/googlechat/package.json +1 -1
  26. package/extensions/imessage/package.json +1 -1
  27. package/extensions/line/package.json +1 -1
  28. package/extensions/llm-task/package.json +1 -1
  29. package/extensions/lobster/package.json +1 -1
  30. package/extensions/matrix/CHANGELOG.md +5 -0
  31. package/extensions/matrix/package.json +1 -1
  32. package/extensions/mattermost/package.json +1 -1
  33. package/extensions/memory-core/package.json +1 -1
  34. package/extensions/memory-lancedb/package.json +1 -1
  35. package/extensions/minimax-portal-auth/package.json +1 -1
  36. package/extensions/msteams/CHANGELOG.md +5 -0
  37. package/extensions/msteams/package.json +1 -1
  38. package/extensions/nextcloud-talk/package.json +1 -1
  39. package/extensions/nostr/CHANGELOG.md +5 -0
  40. package/extensions/nostr/package.json +1 -1
  41. package/extensions/open-prose/package.json +1 -1
  42. package/extensions/signal/package.json +1 -1
  43. package/extensions/slack/package.json +1 -1
  44. package/extensions/telegram/package.json +1 -1
  45. package/extensions/tlon/package.json +1 -1
  46. package/extensions/twitch/CHANGELOG.md +5 -0
  47. package/extensions/twitch/package.json +1 -1
  48. package/extensions/voice-call/CHANGELOG.md +5 -0
  49. package/extensions/voice-call/package.json +1 -1
  50. package/extensions/whatsapp/package.json +1 -1
  51. package/extensions/zalo/CHANGELOG.md +5 -0
  52. package/extensions/zalo/package.json +1 -1
  53. package/extensions/zalouser/CHANGELOG.md +5 -0
  54. package/extensions/zalouser/package.json +1 -1
  55. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2026.3.390",
3
- "commit": "ab22871097368558a8b8ef217e402257c2272220",
4
- "builtAt": "2026-07-04T17:05:11.796Z"
2
+ "version": "2026.3.391",
3
+ "commit": "8d25345cadeabd18cede0cc5dc8d198f5a352d2a",
4
+ "builtAt": "2026-07-04T17:19:18.512Z"
5
5
  }
@@ -1 +1 @@
1
- 4c97d6d8a7d62a230fb1d5a45e3dbb06a93d1d00dae58f636fb1e0fc83fa1476
1
+ d830a6e1c3667c1887c7e45f49d6e2293e38a2474baad8c2e40baaec6dd4b1af
@@ -1,6 +1,6 @@
1
1
  import { r as __exportAll } from "./chunk-D_gEzPfs.js";
2
2
  import { g as resolveStateDir } from "./paths-VdmjGGyc.js";
3
- import { n as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-NjSMLFWH.js";
3
+ import { n as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-CbN6zTM-.js";
4
4
  import path from "node:path";
5
5
  import os from "node:os";
6
6
  import fs from "node:fs/promises";
@@ -28,7 +28,7 @@ import { t as resolveChannelDefaultAccountId } from "./helpers-C0u-oaDR.js";
28
28
  import { n as logConfigUpdated, t as formatConfigPath } from "./logging-CE47aZcO.js";
29
29
  import { t as WizardCancelledError } from "./prompts-D59uQQdA.js";
30
30
  import { t as createClackPrompter } from "./clack-prompter-BbdTlNx8.js";
31
- import { a as buildKoiSummaries, c as loadKoiIdentity, f as parseIdentityMarkdown, i as applyKoiConfig, l as pruneKoiConfig, n as statusCommand, o as findKoiEntryIndex, s as listKoiEntries, t as runOnboardingWizard, u as identityHasValues } from "./onboarding-C9uohvos.js";
31
+ import { a as buildKoiSummaries, c as loadKoiIdentity, f as parseIdentityMarkdown, i as applyKoiConfig, l as pruneKoiConfig, n as statusCommand, o as findKoiEntryIndex, s as listKoiEntries, t as runOnboardingWizard, u as identityHasValues } from "./onboarding-D_Fft8Qj.js";
32
32
  import { d as applyAuthChoice, f as applyOpenAIConfig, h as promptAuthChoiceGrouped, m as applyGoogleGeminiModelDefault, p as upsertSharedEnvVar, u as warnIfModelConfigLooksOff } from "./onboard-skills-B-VRqQPq.js";
33
33
  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-D7TUwRK1.js";
34
34
  import { n as setupChannels } from "./onboard-channels-CAGl4wwR.js";
@@ -36,7 +36,7 @@ import { i as healthCommand } from "./health-format-C5y7C1Bl.js";
36
36
  import { t as renderTable } from "./table-BFIT6RB5.js";
37
37
  import { t as resolveGatewayService } from "./service-CW9nUfWU.js";
38
38
  import { r as isSystemdUserServiceAvailable } from "./systemd-fjt-WYE7.js";
39
- import { l as getVerboseFlag, o as getFlagValue, r as registerSubCliCommands, s as getPositiveIntFlagValue, u as hasFlag } from "./register.subclis-NjSMLFWH.js";
39
+ import { l as getVerboseFlag, o as getFlagValue, r as registerSubCliCommands, s as getPositiveIntFlagValue, u as hasFlag } from "./register.subclis-CbN6zTM-.js";
40
40
  import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-DYI5hnM6.js";
41
41
  import { t as formatHelpExamples } from "./help-format-VHofKIT0.js";
42
42
  import { t as adminUnlockCommand } from "./admin-unlock-CTCNN-zM.js";
@@ -47,7 +47,7 @@ import { i as CONFIGURE_WIZARD_SECTIONS, n as configureCommand, r as configureCo
47
47
  import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, r as isGatewayDaemonRuntime, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-jkMiwykI.js";
48
48
  import { n as ensureSystemdUserLingerNonInteractive } from "./systemd-linger-T7_vGBN4.js";
49
49
  import { t as loginCommand } from "./login-Du7RjDym.js";
50
- import { n as loadAndMaybeMigrateDoctorConfig, t as doctorCommand } from "./doctor-7g1w0aqI.js";
50
+ import { n as loadAndMaybeMigrateDoctorConfig, t as doctorCommand } from "./doctor-B4jYOmV8.js";
51
51
  import { fileURLToPath } from "node:url";
52
52
  import fs from "node:fs";
53
53
  import path from "node:path";
@@ -3106,7 +3106,7 @@ function registerLoginCommand(program) {
3106
3106
  console.log(theme.muted(` user=${result.userId} org=${result.orgId}`));
3107
3107
  }
3108
3108
  if (opts.chat !== false && result.gatewayUrl && process.stdin.isTTY && process.stdout.isTTY) {
3109
- const { runTui } = await import("./tui-BJVJtl_f.js").then((n) => n.n);
3109
+ const { runTui } = await import("./tui-BzTkL_-S.js").then((n) => n.n);
3110
3110
  console.log(theme.muted("\n Opening your koi chat…\n"));
3111
3111
  await runTui({
3112
3112
  url: result.gatewayUrl,
@@ -34,7 +34,7 @@ import { a as repairLaunchAgentBootstrap, i as launchAgentPlistExists, n as isLa
34
34
  import { r as isSystemdUserServiceAvailable } from "./systemd-fjt-WYE7.js";
35
35
  import { t as readLastGatewayErrorLine } from "./diagnostics-DPRvn_ky.js";
36
36
  import { t as collectChannelStatusIssues } from "./channels-status-issues-D92ZMiSY.js";
37
- import { n as doctorShellCompletion } from "./doctor-completion-E9vZhcxg.js";
37
+ import { n as doctorShellCompletion } from "./doctor-completion-BFKSD7Wa.js";
38
38
  import { n as resolveControlUiDistIndexHealth, r as resolveControlUiDistIndexPathForRoot } from "./control-ui-assets-Dcc_8tht.js";
39
39
  import { a as gatewayInstallErrorHint, d as renderSystemNodeWarning, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, p as resolveSystemNodeInfo, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-jkMiwykI.js";
40
40
  import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-T7_vGBN4.js";
@@ -3,7 +3,7 @@ import { r as resolveCliName, t as formatCliCommand } from "./command-format-DOY
3
3
  import { t as VERSION } from "./version-BKRSzdyx.js";
4
4
  import { t as note } from "./note-BDX6ZDm1.js";
5
5
  import { c as compareSemverStrings, s as checkUpdateStatus } from "./update-runner-BTHuBI1s.js";
6
- import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-CB6QWTqS.js";
6
+ import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-Daqk_SMv.js";
7
7
  import path from "node:path";
8
8
  import { spawnSync } from "node:child_process";
9
9
 
package/dist/entry.js CHANGED
@@ -247,7 +247,7 @@ if (!ensureExperimentalWarningSuppressed()) {
247
247
  applyCliProfileEnv({ profile: parsed.profile });
248
248
  process$1.argv = parsed.argv;
249
249
  }
250
- import("./run-main-DS3bwhA7.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
250
+ import("./run-main-CRQnDGos.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
251
251
  console.error("[SKYKOI] Failed to start CLI:", error instanceof Error ? error.stack ?? error.message : error);
252
252
  process$1.exitCode = 1;
253
253
  });
@@ -94,7 +94,7 @@ import { t as resolveChannelDefaultAccountId } from "./helpers-C0u-oaDR.js";
94
94
  import "./logging-CE47aZcO.js";
95
95
  import "./note-BDX6ZDm1.js";
96
96
  import { t as WizardCancelledError } from "./prompts-D59uQQdA.js";
97
- import { c as loadKoiIdentity, d as loadKoiIdentityFromWorkspace, i as applyKoiConfig, l as pruneKoiConfig, o as findKoiEntryIndex, r as getStatusSummary, s as listKoiEntries, t as runOnboardingWizard } from "./onboarding-C9uohvos.js";
97
+ import { c as loadKoiIdentity, d as loadKoiIdentityFromWorkspace, i as applyKoiConfig, l as pruneKoiConfig, o as findKoiEntryIndex, r as getStatusSummary, s as listKoiEntries, t as runOnboardingWizard } from "./onboarding-D_Fft8Qj.js";
98
98
  import { n as installSkill } from "./onboard-skills-B-VRqQPq.js";
99
99
  import "./github-copilot-auth-D7TUwRK1.js";
100
100
  import "./onboard-channels-CAGl4wwR.js";
@@ -113,18 +113,18 @@ import { p as resolveGatewayStateDir } from "./systemd-fjt-WYE7.js";
113
113
  import "./diagnostics-DPRvn_ky.js";
114
114
  import "./node-service--cl-zK26.js";
115
115
  import "./channels-status-issues-D92ZMiSY.js";
116
- import "./doctor-completion-E9vZhcxg.js";
117
- import "./register.subclis-NjSMLFWH.js";
116
+ import "./doctor-completion-BFKSD7Wa.js";
117
+ import "./register.subclis-CbN6zTM-.js";
118
118
  import { a as createOutboundSendDeps$1, i as resolveKoiOutboundTarget, r as resolveKoiDeliveryPlan, t as koiCommand } from "./koi-DVVrZtbA.js";
119
119
  import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-Dcc_8tht.js";
120
120
  import "./daemon-runtime-jkMiwykI.js";
121
121
  import { n as resolveWideAreaDiscoveryDomain, r as writeWideAreaGatewayZone } from "./widearea-dns-DmDtfScg.js";
122
122
  import { n as discoverGatewayBeacons } from "./bonjour-discovery-BcGs4w0m.js";
123
123
  import "./ensure-local-gateway-B2qYYNsm.js";
124
- import "./completion-cli-CB6QWTqS.js";
124
+ import "./completion-cli-Daqk_SMv.js";
125
125
  import "./service-audit-B_swanYW.js";
126
126
  import { i as shouldIncludeHook, n as loadWorkspaceHookEntries, r as resolveHookConfig } from "./hooks-status-CJBhXrQP.js";
127
- import "./tui-BJVJtl_f.js";
127
+ import "./tui-BzTkL_-S.js";
128
128
  import { t as buildChannelAccountSnapshot } from "./status-C8ntwWk9.js";
129
129
  import "./shared-CsJmoyjd.js";
130
130
  import { a as runDaemonStop, i as runDaemonStart, n as runDaemonStatus, o as runDaemonUninstall, r as runDaemonRestart, s as runDaemonInstall } from "./daemon-cli-B5aK-HPj.js";
package/dist/index.js CHANGED
@@ -80,11 +80,11 @@ import { t as isMainModule } from "./is-main-D5NmXew9.js";
80
80
  import { t as ensureSKYKOICliOnPath } from "./path-env-C0IwmyXV.js";
81
81
  import { t as assertSupportedRuntime } from "./runtime-guard-DQEzrjPX.js";
82
82
  import "./ports-CVcXIoyn.js";
83
- import "./config-guard-CjcXwZiV.js";
83
+ import "./config-guard-B9uTugI8.js";
84
84
  import "./logging-CE47aZcO.js";
85
85
  import "./note-BDX6ZDm1.js";
86
86
  import "./clack-prompter-BbdTlNx8.js";
87
- import "./onboarding-C9uohvos.js";
87
+ import "./onboarding-D_Fft8Qj.js";
88
88
  import "./onboard-skills-B-VRqQPq.js";
89
89
  import "./github-copilot-auth-D7TUwRK1.js";
90
90
  import "./onboard-channels-CAGl4wwR.js";
@@ -103,8 +103,8 @@ import "./systemd-fjt-WYE7.js";
103
103
  import "./diagnostics-DPRvn_ky.js";
104
104
  import "./node-service--cl-zK26.js";
105
105
  import "./channels-status-issues-D92ZMiSY.js";
106
- import "./doctor-completion-E9vZhcxg.js";
107
- import "./register.subclis-NjSMLFWH.js";
106
+ import "./doctor-completion-BFKSD7Wa.js";
107
+ import "./register.subclis-CbN6zTM-.js";
108
108
  import "./gateway-rpc-DYI5hnM6.js";
109
109
  import "./help-format-VHofKIT0.js";
110
110
  import "./admin-unlock-CTCNN-zM.js";
@@ -120,13 +120,13 @@ import "./ensure-local-gateway-B2qYYNsm.js";
120
120
  import "./channel-auth-DOqfPLIr.js";
121
121
  import "./login-Du7RjDym.js";
122
122
  import "./auth-health-DfT6NGrM.js";
123
- import "./doctor-7g1w0aqI.js";
124
- import "./completion-cli-CB6QWTqS.js";
123
+ import "./doctor-B4jYOmV8.js";
124
+ import "./completion-cli-Daqk_SMv.js";
125
125
  import "./service-audit-B_swanYW.js";
126
126
  import "./hooks-status-CJBhXrQP.js";
127
- import "./tui-BJVJtl_f.js";
127
+ import "./tui-BzTkL_-S.js";
128
128
  import "./channel-options-Dad1PMC0.js";
129
- import { n as buildProgram } from "./program-AosXkz3C.js";
129
+ import { n as buildProgram } from "./program-DqdcT8MN.js";
130
130
  import process from "node:process";
131
131
  import { fileURLToPath } from "node:url";
132
132
 
@@ -38,12 +38,12 @@ import { t as readLastGatewayErrorLine } from "./diagnostics-DPRvn_ky.js";
38
38
  import { t as resolveNodeService } from "./node-service--cl-zK26.js";
39
39
  import { t as collectChannelStatusIssues } from "./channels-status-issues-D92ZMiSY.js";
40
40
  import { i as redactSecrets, n as formatDuration$1, r as formatGatewayAuthUsed, t as formatAge$1 } from "./format-lvtLJpBH.js";
41
- import { a as formatUpdateOneLiner, i as formatUpdateAvailableHint, o as getUpdateCheckResult, r as ensureCompletionCacheExists, s as resolveUpdateAvailability, t as checkShellCompletionStatus } from "./doctor-completion-E9vZhcxg.js";
41
+ import { a as formatUpdateOneLiner, i as formatUpdateAvailableHint, o as getUpdateCheckResult, r as ensureCompletionCacheExists, s as resolveUpdateAvailability, t as checkShellCompletionStatus } from "./doctor-completion-BFKSD7Wa.js";
42
42
  import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-Dcc_8tht.js";
43
43
  import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-jkMiwykI.js";
44
- import { r as installCompletion } from "./completion-cli-CB6QWTqS.js";
44
+ import { r as installCompletion } from "./completion-cli-Daqk_SMv.js";
45
45
  import { t as buildWorkspaceHookStatus } from "./hooks-status-CJBhXrQP.js";
46
- import { t as runTui } from "./tui-BJVJtl_f.js";
46
+ import { t as runTui } from "./tui-BzTkL_-S.js";
47
47
  import fs from "node:fs";
48
48
  import path from "node:path";
49
49
  import os from "node:os";
@@ -21,7 +21,7 @@ import chalk, { Chalk } from "chalk";
21
21
  import fs, { constants, createWriteStream, existsSync, promises, statSync } from "node:fs";
22
22
  import path, { join } from "node:path";
23
23
  import { Logger } from "tslog";
24
- import json5 from "json5";
24
+ import JSON5 from "json5";
25
25
  import os, { homedir, tmpdir } from "node:os";
26
26
  import { promisify } from "node:util";
27
27
  import fs$1 from "node:fs/promises";
@@ -2263,7 +2263,7 @@ function readLoggingConfig() {
2263
2263
  try {
2264
2264
  if (!fs.existsSync(configPath)) return;
2265
2265
  const raw = fs.readFileSync(configPath, "utf-8");
2266
- const logging = json5.parse(raw)?.logging;
2266
+ const logging = JSON5.parse(raw)?.logging;
2267
2267
  if (!logging || typeof logging !== "object" || Array.isArray(logging)) return;
2268
2268
  return logging;
2269
2269
  } catch {
@@ -19093,7 +19093,7 @@ var IncludeProcessor = class IncludeProcessor {
19093
19093
  };
19094
19094
  const defaultResolver = {
19095
19095
  readFile: (p) => fs.readFileSync(p, "utf-8"),
19096
- parseJson: (raw) => json5.parse(raw)
19096
+ parseJson: (raw) => JSON5.parse(raw)
19097
19097
  };
19098
19098
  /**
19099
19099
  * Resolves all $include directives in a parsed config object.
@@ -21791,18 +21791,18 @@ function resolveConfigPathForDeps(deps) {
21791
21791
  function normalizeDeps(overrides = {}) {
21792
21792
  return {
21793
21793
  fs: overrides.fs ?? fs,
21794
- json5: overrides.json5 ?? json5,
21794
+ json5: overrides.json5 ?? JSON5,
21795
21795
  env: overrides.env ?? process.env,
21796
21796
  homedir: overrides.homedir ?? os.homedir,
21797
21797
  configPath: overrides.configPath ?? "",
21798
21798
  logger: overrides.logger ?? console
21799
21799
  };
21800
21800
  }
21801
- function parseConfigJson5(raw, json5$1 = json5) {
21801
+ function parseConfigJson5(raw, json5 = JSON5) {
21802
21802
  try {
21803
21803
  return {
21804
21804
  ok: true,
21805
- parsed: json5$1.parse(raw)
21805
+ parsed: json5.parse(raw)
21806
21806
  };
21807
21807
  } catch (err) {
21808
21808
  return {
@@ -22316,7 +22316,7 @@ function loadSessionStore(storePath, opts = {}) {
22316
22316
  let mtimeMs = getFileMtimeMs(storePath);
22317
22317
  try {
22318
22318
  const raw = fs.readFileSync(storePath, "utf-8");
22319
- const parsed = json5.parse(raw);
22319
+ const parsed = JSON5.parse(raw);
22320
22320
  if (isSessionStoreRecord(parsed)) store = parsed;
22321
22321
  mtimeMs = getFileMtimeMs(storePath) ?? mtimeMs;
22322
22322
  } catch {}
@@ -5,10 +5,10 @@ import { n as replaceCliName, r as resolveCliName } from "./command-format-DOYW_
5
5
  import { t as isTruthyEnvValue } from "./env-ChCKTuXK.js";
6
6
  import { t as VERSION } from "./version-BKRSzdyx.js";
7
7
  import { t as formatDocsLink } from "./links-CFNtV6AI.js";
8
- import { i as registerProgramCommands, n as PLUGIN_CLI_COMMANDS, t as ensureConfigReady } from "./config-guard-CjcXwZiV.js";
9
- import { a as getCommandPath, d as hasHelpOrVersion, l as getVerboseFlag } from "./register.subclis-NjSMLFWH.js";
8
+ import { i as registerProgramCommands, n as PLUGIN_CLI_COMMANDS, t as ensureConfigReady } from "./config-guard-B9uTugI8.js";
9
+ import { a as getCommandPath, d as hasHelpOrVersion, l as getVerboseFlag } from "./register.subclis-CbN6zTM-.js";
10
10
  import { t as ensurePluginRegistryLoaded } from "./plugin-registry-y0aOioWc.js";
11
- import { a as hasEmittedCliBanner, i as formatCliBannerLine, r as emitCliBanner } from "./tui-BJVJtl_f.js";
11
+ import { a as hasEmittedCliBanner, i as formatCliBannerLine, r as emitCliBanner } from "./tui-BzTkL_-S.js";
12
12
  import { n as resolveCliChannelOptions } from "./channel-options-Dad1PMC0.js";
13
13
  import { Command } from "commander";
14
14
 
@@ -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-pU_B-os3.js")).registerGatewayCli(program);
127
+ (await import("./gateway-cli-DnDlw3rn.js")).registerGatewayCli(program);
128
128
  }
129
129
  },
130
130
  {
@@ -194,7 +194,7 @@ const entries = [
194
194
  name: "tui",
195
195
  description: "Terminal UI",
196
196
  register: async (program) => {
197
- (await import("./tui-cli-D_MY26rw.js")).registerTuiCli(program);
197
+ (await import("./tui-cli-B0BEmt1q.js")).registerTuiCli(program);
198
198
  }
199
199
  },
200
200
  {
@@ -310,14 +310,14 @@ const entries = [
310
310
  name: "update",
311
311
  description: "CLI update helpers",
312
312
  register: async (program) => {
313
- (await import("./update-cli-BHe9tJXa.js")).registerUpdateCli(program);
313
+ (await import("./update-cli-CJMUfl50.js")).registerUpdateCli(program);
314
314
  }
315
315
  },
316
316
  {
317
317
  name: "completion",
318
318
  description: "Generate shell completion script",
319
319
  register: async (program) => {
320
- (await import("./completion-cli-CB6QWTqS.js").then((n) => n.n)).registerCompletionCli(program);
320
+ (await import("./completion-cli-Daqk_SMv.js").then((n) => n.n)).registerCompletionCli(program);
321
321
  }
322
322
  }
323
323
  ];
@@ -77,11 +77,11 @@ import "./deps-Wr4nf60s.js";
77
77
  import "./tailscale-B0Nz70aN.js";
78
78
  import { t as ensureSKYKOICliOnPath } from "./path-env-C0IwmyXV.js";
79
79
  import { t as assertSupportedRuntime } from "./runtime-guard-DQEzrjPX.js";
80
- import { n as PLUGIN_CLI_COMMANDS, r as findRoutedCommand, t as ensureConfigReady } from "./config-guard-CjcXwZiV.js";
80
+ import { n as PLUGIN_CLI_COMMANDS, r as findRoutedCommand, t as ensureConfigReady } from "./config-guard-B9uTugI8.js";
81
81
  import "./logging-CE47aZcO.js";
82
82
  import "./note-BDX6ZDm1.js";
83
83
  import "./clack-prompter-BbdTlNx8.js";
84
- import "./onboarding-C9uohvos.js";
84
+ import "./onboarding-D_Fft8Qj.js";
85
85
  import "./onboard-skills-B-VRqQPq.js";
86
86
  import "./github-copilot-auth-D7TUwRK1.js";
87
87
  import "./onboard-channels-CAGl4wwR.js";
@@ -100,8 +100,8 @@ import "./systemd-fjt-WYE7.js";
100
100
  import "./diagnostics-DPRvn_ky.js";
101
101
  import "./node-service--cl-zK26.js";
102
102
  import "./channels-status-issues-D92ZMiSY.js";
103
- import "./doctor-completion-E9vZhcxg.js";
104
- import { a as getCommandPath, c as getPrimaryCommand, d as hasHelpOrVersion } from "./register.subclis-NjSMLFWH.js";
103
+ import "./doctor-completion-BFKSD7Wa.js";
104
+ import { a as getCommandPath, c as getPrimaryCommand, d as hasHelpOrVersion } from "./register.subclis-CbN6zTM-.js";
105
105
  import "./gateway-rpc-DYI5hnM6.js";
106
106
  import "./help-format-VHofKIT0.js";
107
107
  import "./admin-unlock-CTCNN-zM.js";
@@ -117,11 +117,11 @@ import "./ensure-local-gateway-B2qYYNsm.js";
117
117
  import "./channel-auth-DOqfPLIr.js";
118
118
  import "./login-Du7RjDym.js";
119
119
  import "./auth-health-DfT6NGrM.js";
120
- import "./doctor-7g1w0aqI.js";
121
- import "./completion-cli-CB6QWTqS.js";
120
+ import "./doctor-B4jYOmV8.js";
121
+ import "./completion-cli-Daqk_SMv.js";
122
122
  import "./service-audit-B_swanYW.js";
123
123
  import "./hooks-status-CJBhXrQP.js";
124
- import { r as emitCliBanner } from "./tui-BJVJtl_f.js";
124
+ import { r as emitCliBanner } from "./tui-BzTkL_-S.js";
125
125
  import process$1 from "node:process";
126
126
  import { fileURLToPath } from "node:url";
127
127
  import fs from "node:fs";
@@ -175,7 +175,7 @@ async function runCli(argv = process$1.argv) {
175
175
  assertSupportedRuntime();
176
176
  if (await tryRouteCli(normalizedArgv)) return;
177
177
  enableConsoleCapture();
178
- const { buildProgram } = await import("./program-AosXkz3C.js").then((n) => n.t);
178
+ const { buildProgram } = await import("./program-DqdcT8MN.js").then((n) => n.t);
179
179
  const program = buildProgram();
180
180
  installUnhandledRejectionHandler();
181
181
  process$1.on("uncaughtException", (error) => {
@@ -208,7 +208,7 @@ async function runCli(argv = process$1.argv) {
208
208
  }
209
209
  const primary = getPrimaryCommand(parseArgv);
210
210
  if (primary) {
211
- const { registerSubCliByName } = await import("./register.subclis-NjSMLFWH.js").then((n) => n.i);
211
+ const { registerSubCliByName } = await import("./register.subclis-CbN6zTM-.js").then((n) => n.i);
212
212
  await registerSubCliByName(program, primary);
213
213
  }
214
214
  if (!!primary && PLUGIN_CLI_COMMANDS.has(primary)) {
@@ -6066,6 +6066,103 @@ function kittyDeleteAll() {
6066
6066
  function itermEmit(png, cols, rows) {
6067
6067
  return `\x1b]1337;File=inline=1;width=${cols};height=${rows};preserveAspectRatio=0;doNotMoveCursor=1:${png.toString("base64")}\x07`;
6068
6068
  }
6069
+ const BAYER4 = [
6070
+ [
6071
+ 0,
6072
+ 8,
6073
+ 2,
6074
+ 10
6075
+ ],
6076
+ [
6077
+ 12,
6078
+ 4,
6079
+ 14,
6080
+ 6
6081
+ ],
6082
+ [
6083
+ 3,
6084
+ 11,
6085
+ 1,
6086
+ 9
6087
+ ],
6088
+ [
6089
+ 15,
6090
+ 7,
6091
+ 13,
6092
+ 5
6093
+ ]
6094
+ ];
6095
+ const SIXEL_LEVELS = 6;
6096
+ const SIXEL_STEP = 255 / (SIXEL_LEVELS - 1);
6097
+ /** Encode an RGBA buffer (w×h, stride 4) to a complete Sixel DCS string. */
6098
+ function sixelEncode(rgba, w, h) {
6099
+ const clamp = (v) => v < 0 ? 0 : v > 255 ? 255 : v;
6100
+ const idxMap = new Uint8Array(w * h);
6101
+ const used = new Uint8Array(216);
6102
+ for (let y = 0; y < h; y++) {
6103
+ const dRow = BAYER4[y & 3];
6104
+ for (let x = 0; x < w; x++) {
6105
+ const p = (y * w + x) * 4;
6106
+ const d = (dRow[x & 3] / 16 - .5) * SIXEL_STEP;
6107
+ const r6 = Math.min(SIXEL_LEVELS - 1, Math.round(clamp(rgba[p] + d) / SIXEL_STEP));
6108
+ const g6 = Math.min(SIXEL_LEVELS - 1, Math.round(clamp(rgba[p + 1] + d) / SIXEL_STEP));
6109
+ const b6 = Math.min(SIXEL_LEVELS - 1, Math.round(clamp(rgba[p + 2] + d) / SIXEL_STEP));
6110
+ const idx = r6 * 36 + g6 * 6 + b6;
6111
+ idxMap[y * w + x] = idx;
6112
+ used[idx] = 1;
6113
+ }
6114
+ }
6115
+ const out = [];
6116
+ out.push(`\x1bP0;1;0q"1;1;${w};${h}`);
6117
+ const pct = (c6) => Math.round(c6 * SIXEL_STEP / 255 * 100);
6118
+ for (let idx = 0; idx < 216; idx++) {
6119
+ if (!used[idx]) continue;
6120
+ out.push(`#${idx};2;${pct(idx / 36 | 0)};${pct((idx / 6 | 0) % 6)};${pct(idx % 6)}`);
6121
+ }
6122
+ for (let by = 0; by < h; by += 6) {
6123
+ const rows = Math.min(6, h - by);
6124
+ const colMask = /* @__PURE__ */ new Map();
6125
+ for (let ry = 0; ry < rows; ry++) {
6126
+ const base = (by + ry) * w;
6127
+ const bit = 1 << ry;
6128
+ for (let x = 0; x < w; x++) {
6129
+ const idx = idxMap[base + x];
6130
+ let m = colMask.get(idx);
6131
+ if (!m) {
6132
+ m = new Uint8Array(w);
6133
+ colMask.set(idx, m);
6134
+ }
6135
+ m[x] |= bit;
6136
+ }
6137
+ }
6138
+ let first = true;
6139
+ for (const [idx, mask] of colMask) {
6140
+ out.push(first ? `#${idx}` : `$#${idx}`);
6141
+ first = false;
6142
+ let run = -1;
6143
+ let len = 0;
6144
+ const flush = () => {
6145
+ if (len === 0) return;
6146
+ const ch = String.fromCharCode(63 + run);
6147
+ out.push(len > 3 ? `!${len}${ch}` : ch.repeat(len));
6148
+ len = 0;
6149
+ };
6150
+ for (let x = 0; x < w; x++) {
6151
+ const b = mask[x];
6152
+ if (b === run) len++;
6153
+ else {
6154
+ flush();
6155
+ run = b;
6156
+ len = 1;
6157
+ }
6158
+ }
6159
+ flush();
6160
+ }
6161
+ out.push("-");
6162
+ }
6163
+ out.push("\x1B\\");
6164
+ return out.join("");
6165
+ }
6069
6166
  /**
6070
6167
  * A pixel-graphics media clip bound to a cell region. Frames are pre-resampled
6071
6168
  * to the region's exact pixel size and cached as PNG; advance() selects the
@@ -6077,52 +6174,82 @@ var GraphicsMedia = class {
6077
6174
  this.region = region;
6078
6175
  this.fit = fit;
6079
6176
  this.frames = [];
6177
+ this.sixelFrames = [];
6080
6178
  this.delays = [];
6081
6179
  this.cumulative = [];
6082
6180
  this.duration = 0;
6181
+ this.pxW = 0;
6182
+ this.pxH = 0;
6083
6183
  this.cur = -1;
6084
6184
  this.lastEmitted = -1;
6085
6185
  this.loaded = false;
6086
6186
  this.id = opts?.id ?? IMAGE_ID;
6087
6187
  this.maxDim = opts?.maxDim ?? 1600;
6188
+ this.maxFrames = opts?.maxFrames ?? 72;
6189
+ }
6190
+ get count() {
6191
+ return this.protocol === "sixel" ? this.sixelFrames.length : this.frames.length;
6088
6192
  }
6089
6193
  get isLoaded() {
6090
6194
  return this.loaded;
6091
6195
  }
6092
6196
  get frameCount() {
6093
- return this.frames.length;
6197
+ return this.count;
6094
6198
  }
6095
- /** Resample decoded RGBA frames to the region's exact pixel size (PNG). */
6199
+ /** Resample decoded RGBA frames to the region's exact pixel size. */
6096
6200
  async load(rgbaFrames, delays) {
6097
6201
  const sharp = (await import("./lib-DXDl0UwS.js").then((m) => /* @__PURE__ */ __toESM(m.default, 1))).default;
6098
6202
  const { pxW, pxH } = this.regionPixels();
6099
- const frames = [];
6100
- for (const f of rgbaFrames) {
6101
- const png = await sharp(Buffer.from(f.data), { raw: {
6102
- width: f.width,
6103
- height: f.height,
6104
- channels: 4
6105
- } }).resize(pxW, pxH, {
6106
- fit: this.fit === "cover" ? "cover" : "contain",
6107
- position: "centre",
6108
- background: {
6109
- r: 0,
6110
- g: 0,
6111
- b: 0,
6112
- alpha: 1
6113
- }
6114
- }).png({
6203
+ this.pxW = pxW;
6204
+ this.pxH = pxH;
6205
+ let srcFrames = rgbaFrames;
6206
+ let srcDelays = delays;
6207
+ if (this.protocol === "sixel" && rgbaFrames.length > this.maxFrames) {
6208
+ const picked = [];
6209
+ const pd = [];
6210
+ const stride = rgbaFrames.length / this.maxFrames;
6211
+ for (let k = 0; k < this.maxFrames; k++) {
6212
+ const i = Math.min(rgbaFrames.length - 1, Math.floor(k * stride));
6213
+ picked.push(rgbaFrames[i]);
6214
+ pd.push((delays[i] ?? delays[0] ?? .04) * stride);
6215
+ }
6216
+ srcFrames = picked;
6217
+ srcDelays = pd;
6218
+ }
6219
+ const resize = (f) => sharp(Buffer.from(f.data), { raw: {
6220
+ width: f.width,
6221
+ height: f.height,
6222
+ channels: 4
6223
+ } }).resize(pxW, pxH, {
6224
+ fit: this.fit === "cover" ? "cover" : "contain",
6225
+ position: "centre",
6226
+ background: {
6227
+ r: 0,
6228
+ g: 0,
6229
+ b: 0,
6230
+ alpha: 1
6231
+ }
6232
+ });
6233
+ if (this.protocol === "sixel") {
6234
+ const sx = [];
6235
+ for (const f of srcFrames) {
6236
+ const { data } = await resize(f).ensureAlpha().raw().toBuffer({ resolveWithObject: true });
6237
+ sx.push(sixelEncode(data, pxW, pxH));
6238
+ }
6239
+ this.sixelFrames = sx;
6240
+ } else {
6241
+ const frames = [];
6242
+ for (const f of srcFrames) frames.push(await resize(f).png({
6115
6243
  compressionLevel: 6,
6116
6244
  effort: 1
6117
- }).toBuffer();
6118
- frames.push(png);
6245
+ }).toBuffer());
6246
+ this.frames = frames;
6119
6247
  }
6120
- this.frames = frames;
6121
- this.delays = frames.map((_, i) => Math.max(.01, delays[i] ?? delays[0] ?? 0));
6248
+ this.delays = Array.from({ length: this.count }, (_, i) => Math.max(.01, srcDelays[i] ?? srcDelays[0] ?? 0));
6122
6249
  let acc = 0;
6123
6250
  this.cumulative = this.delays.map((d) => acc += d);
6124
6251
  this.duration = acc;
6125
- this.loaded = frames.length > 0;
6252
+ this.loaded = this.count > 0;
6126
6253
  }
6127
6254
  regionPixels() {
6128
6255
  let pxW = Math.max(2, this.region.cols * CELL_W);
@@ -6140,7 +6267,7 @@ var GraphicsMedia = class {
6140
6267
  }
6141
6268
  /** Advance to the frame for simulation time `t` (seconds). Loops. */
6142
6269
  advance(t) {
6143
- if (this.frames.length <= 1 || this.duration <= 0) {
6270
+ if (this.count <= 1 || this.duration <= 0) {
6144
6271
  this.cur = 0;
6145
6272
  return;
6146
6273
  }
@@ -6158,9 +6285,18 @@ var GraphicsMedia = class {
6158
6285
  if (!this.loaded) return false;
6159
6286
  const idx = this.cur < 0 ? 0 : this.cur;
6160
6287
  if (idx === this.lastEmitted && !force) return false;
6288
+ const { col, row, cols, rows } = this.region;
6289
+ if (this.protocol === "sixel") {
6290
+ const sx = this.sixelFrames[idx];
6291
+ if (!sx) return false;
6292
+ const imgCols = Math.ceil(this.pxW / CELL_W);
6293
+ const imgRows = Math.ceil(this.pxH / CELL_H);
6294
+ sink(`\x1b7${csiMove(col + Math.max(0, (cols - imgCols) / 2 | 0), row + Math.max(0, (rows - imgRows) / 2 | 0))}${sx}\x1b8`);
6295
+ this.lastEmitted = idx;
6296
+ return true;
6297
+ }
6161
6298
  const png = this.frames[idx];
6162
6299
  if (!png) return false;
6163
- const { col, row, cols, rows } = this.region;
6164
6300
  let body;
6165
6301
  if (this.protocol === "kitty") body = kittyEmit(png, cols, rows, this.id);
6166
6302
  else if (this.protocol === "iterm2") body = itermEmit(png, cols, rows);
@@ -6927,7 +7063,7 @@ function createSpecScene(spec) {
6927
7063
  const mediaClock = /* @__PURE__ */ new Map();
6928
7064
  const programs = /* @__PURE__ */ new Map();
6929
7065
  const gfxProtocol = detectGraphicsProtocol();
6930
- const gfxOn = gfxProtocol === "kitty" || gfxProtocol === "iterm2";
7066
+ const gfxOn = gfxProtocol === "kitty" || gfxProtocol === "iterm2" || gfxProtocol === "sixel";
6931
7067
  const gfx = /* @__PURE__ */ new Map();
6932
7068
  const gfxBuiltFor = /* @__PURE__ */ new Map();
6933
7069
  let lastW = 0;
@@ -6974,6 +7110,8 @@ function createSpecScene(spec) {
6974
7110
  if (gfx.get(i) && gfxBuiltFor.get(i) === key) return;
6975
7111
  const isVideo = type === "video" || type === "genvideo";
6976
7112
  const fit = layers[i].fitContain === true ? "contain" : "cover";
7113
+ const sixel = gfxProtocol === "sixel";
7114
+ const maxDim = isVideo ? sixel ? 640 : 800 : sixel ? 1400 : 1600;
6977
7115
  const gm = new GraphicsMedia(gfxProtocol, {
6978
7116
  col: 0,
6979
7117
  row: 0,
@@ -6981,7 +7119,8 @@ function createSpecScene(spec) {
6981
7119
  rows
6982
7120
  }, fit, {
6983
7121
  id: 4935497 + i,
6984
- maxDim: isVideo ? 800 : 1600
7122
+ maxDim,
7123
+ maxFrames: isVideo ? 72 : 120
6985
7124
  });
6986
7125
  gfx.set(i, gm);
6987
7126
  gfxBuiltFor.set(i, key);
@@ -7266,7 +7405,7 @@ var CanvasMode = class {
7266
7405
  this.resizeListener = null;
7267
7406
  this.gfxProtocol = detectGraphicsProtocol();
7268
7407
  this.gfxKitty = this.gfxProtocol === "kitty";
7269
- this.gfxOn = this.gfxProtocol === "kitty" || this.gfxProtocol === "iterm2";
7408
+ this.gfxOn = this.gfxProtocol === "kitty" || this.gfxProtocol === "iterm2" || this.gfxProtocol === "sixel";
7270
7409
  this.deps = deps;
7271
7410
  }
7272
7411
  isActive() {
@@ -52,7 +52,7 @@ import "./systemd-fjt-WYE7.js";
52
52
  import "./diagnostics-DPRvn_ky.js";
53
53
  import "./daemon-runtime-jkMiwykI.js";
54
54
  import "./ensure-local-gateway-B2qYYNsm.js";
55
- import { t as runTui } from "./tui-BJVJtl_f.js";
55
+ import { t as runTui } from "./tui-BzTkL_-S.js";
56
56
 
57
57
  //#region src/cli/tui-cli.ts
58
58
  function registerTuiCli(program) {
@@ -93,15 +93,15 @@ import "./service-CW9nUfWU.js";
93
93
  import "./systemd-fjt-WYE7.js";
94
94
  import "./diagnostics-DPRvn_ky.js";
95
95
  import "./channels-status-issues-D92ZMiSY.js";
96
- import { a as formatUpdateOneLiner, i as formatUpdateAvailableHint, r as ensureCompletionCacheExists, s as resolveUpdateAvailability, t as checkShellCompletionStatus } from "./doctor-completion-E9vZhcxg.js";
97
- import "./register.subclis-NjSMLFWH.js";
96
+ import { a as formatUpdateOneLiner, i as formatUpdateAvailableHint, r as ensureCompletionCacheExists, s as resolveUpdateAvailability, t as checkShellCompletionStatus } from "./doctor-completion-BFKSD7Wa.js";
97
+ import "./register.subclis-CbN6zTM-.js";
98
98
  import { t as formatHelpExamples } from "./help-format-VHofKIT0.js";
99
99
  import "./control-ui-assets-Dcc_8tht.js";
100
100
  import "./daemon-runtime-jkMiwykI.js";
101
101
  import "./systemd-linger-T7_vGBN4.js";
102
102
  import "./auth-health-DfT6NGrM.js";
103
- import { t as doctorCommand } from "./doctor-7g1w0aqI.js";
104
- import { r as installCompletion } from "./completion-cli-CB6QWTqS.js";
103
+ import { t as doctorCommand } from "./doctor-B4jYOmV8.js";
104
+ import { r as installCompletion } from "./completion-cli-Daqk_SMv.js";
105
105
  import "./service-audit-B_swanYW.js";
106
106
  import "./shared-CsJmoyjd.js";
107
107
  import { r as runDaemonRestart } from "./daemon-cli-B5aK-HPj.js";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/bluebubbles",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI BlueBubbles channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/copilot-proxy",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI Copilot Proxy provider plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/diagnostics-otel",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI diagnostics OpenTelemetry exporter",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/discord",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI Discord channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/feishu",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI Feishu/Lark channel plugin (community maintained by @m1heng)",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/google-antigravity-auth",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI Google Antigravity OAuth provider plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/google-gemini-cli-auth",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI Gemini CLI OAuth provider plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/googlechat",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI Google Chat channel plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/imessage",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI iMessage channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/line",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI LINE channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/llm-task",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI JSON-only LLM task plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/lobster",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "Lobster workflow tool plugin (typed pipelines + resumable approvals)",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.3.391
4
+
5
+ ### Changes
6
+ - Version alignment with core SKYKOI release numbers.
7
+
3
8
  ## 2026.3.390
4
9
 
5
10
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/matrix",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI Matrix channel plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/mattermost",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI Mattermost channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/memory-core",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI core memory search plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/memory-lancedb",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI LanceDB-backed long-term memory plugin with auto-recall/capture",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/minimax-portal-auth",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI MiniMax Portal OAuth provider plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.3.391
4
+
5
+ ### Changes
6
+ - Version alignment with core SKYKOI release numbers.
7
+
3
8
  ## 2026.3.390
4
9
 
5
10
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/msteams",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI Microsoft Teams channel plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/nextcloud-talk",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI Nextcloud Talk channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.3.391
4
+
5
+ ### Changes
6
+ - Version alignment with core SKYKOI release numbers.
7
+
3
8
  ## 2026.3.390
4
9
 
5
10
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/nostr",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI Nostr channel plugin for NIP-04 encrypted DMs",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/open-prose",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "OpenProse VM skill pack plugin (slash command + telemetry).",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/signal",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI Signal channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/slack",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI Slack channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/telegram",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI Telegram channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/tlon",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI Tlon/Urbit channel plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.3.391
4
+
5
+ ### Changes
6
+ - Version alignment with core SKYKOI release numbers.
7
+
3
8
  ## 2026.3.390
4
9
 
5
10
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/twitch",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI Twitch channel plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.3.391
4
+
5
+ ### Changes
6
+ - Version alignment with core SKYKOI release numbers.
7
+
3
8
  ## 2026.3.390
4
9
 
5
10
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/voice-call",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI voice-call plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/whatsapp",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI WhatsApp channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.3.391
4
+
5
+ ### Changes
6
+ - Version alignment with core SKYKOI release numbers.
7
+
3
8
  ## 2026.3.390
4
9
 
5
10
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/zalo",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI Zalo channel plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.3.391
4
+
5
+ ### Changes
6
+ - Version alignment with core SKYKOI release numbers.
7
+
3
8
  ## 2026.3.390
4
9
 
5
10
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/zalouser",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SKYKOI Zalo Personal Account plugin via zca-cli",
5
5
  "type": "module",
6
6
  "dependencies": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skykoi",
3
- "version": "2026.3.390",
3
+ "version": "2026.3.391",
4
4
  "description": "SkyKoi — Koi runtime. Multi-channel gateway CLI with RPC Koi.",
5
5
  "keywords": [
6
6
  "cli",