skykoi 2026.3.384 → 2026.3.385

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-Cr0QbN9h.js → completion-cli-BZOdUKC7.js} +1 -1
  4. package/dist/{config-guard-CykiCgAZ.js → config-guard-fPal6x-H.js} +4 -4
  5. package/dist/{doctor-CFXh7AVF.js → doctor-0THm5b6P.js} +1 -1
  6. package/dist/{doctor-completion-CUSKgqWX.js → doctor-completion-SM2eK0Lp.js} +1 -1
  7. package/dist/entry.js +1 -1
  8. package/dist/{gateway-cli-B1ktEbhU.js → gateway-cli-Bp_-9yN3.js} +5 -5
  9. package/dist/index.js +8 -8
  10. package/dist/{onboarding-ByjuJJvO.js → onboarding-BqgNExH9.js} +3 -3
  11. package/dist/plugin-sdk/index.js +3 -3
  12. package/dist/{program-BvneuwKl.js → program-HEmsYHwG.js} +3 -3
  13. package/dist/{register.subclis-iwqsU914.js → register.subclis-CW4mB1LQ.js} +4 -4
  14. package/dist/{run-main-9XTLErIN.js → run-main-CcQL7bOT.js} +9 -9
  15. package/dist/{tui-CLMQI4hR.js → tui-DzMl0uIy.js} +53 -26
  16. package/dist/{tui-cli-BXVWOpGK.js → tui-cli-Vc1AaLJt.js} +1 -1
  17. package/dist/{update-cli-EXCKmAei.js → update-cli-B-JAciDv.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.384",
3
- "commit": "469c6733b67e8ac63714df23b18fc373a6744929",
4
- "builtAt": "2026-07-04T05:14:46.978Z"
2
+ "version": "2026.3.385",
3
+ "commit": "8be16099089ae7979afcf270544c2a3b98ba01ef",
4
+ "builtAt": "2026-07-04T05:27:00.153Z"
5
5
  }
@@ -1 +1 @@
1
- 23750f99952fa700f276ebf8512dc7f76a1c006143675159f12275a8fe0a3485
1
+ 76436e11bef9eb6a5c5654cc6be05da2d8273df528255089a7567e38b6151719
@@ -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-iwqsU914.js";
3
+ import { n as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-CW4mB1LQ.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-ByjuJJvO.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-BqgNExH9.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-D5B_ZPKs.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-C9mmx0Wd.js";
34
34
  import { n as setupChannels } from "./onboard-channels-CJug7SFV.js";
@@ -36,7 +36,7 @@ import { i as healthCommand } from "./health-format-yvvQ18Ya.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-iwqsU914.js";
39
+ import { l as getVerboseFlag, o as getFlagValue, r as registerSubCliCommands, s as getPositiveIntFlagValue, u as hasFlag } from "./register.subclis-CW4mB1LQ.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-CFXh7AVF.js";
50
+ import { n as loadAndMaybeMigrateDoctorConfig, t as doctorCommand } from "./doctor-0THm5b6P.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-CLMQI4hR.js").then((n) => n.n);
3109
+ const { runTui } = await import("./tui-DzMl0uIy.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-CUSKgqWX.js";
37
+ import { n as doctorShellCompletion } from "./doctor-completion-SM2eK0Lp.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-Cr0QbN9h.js";
6
+ import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-BZOdUKC7.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-9XTLErIN.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
250
+ import("./run-main-CcQL7bOT.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-ByjuJJvO.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-BqgNExH9.js";
98
98
  import { n as installSkill } from "./onboard-skills-D5B_ZPKs.js";
99
99
  import "./github-copilot-auth-C9mmx0Wd.js";
100
100
  import "./onboard-channels-CJug7SFV.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-CUSKgqWX.js";
117
- import "./register.subclis-iwqsU914.js";
116
+ import "./doctor-completion-SM2eK0Lp.js";
117
+ import "./register.subclis-CW4mB1LQ.js";
118
118
  import { a as createOutboundSendDeps$1, i as resolveKoiOutboundTarget, r as resolveKoiDeliveryPlan, t as koiCommand } from "./koi-xZEdDCXF.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-Cr0QbN9h.js";
124
+ import "./completion-cli-BZOdUKC7.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-CLMQI4hR.js";
127
+ import "./tui-DzMl0uIy.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-BY6L_O1X.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-CykiCgAZ.js";
83
+ import "./config-guard-fPal6x-H.js";
84
84
  import "./logging-CE47aZcO.js";
85
85
  import "./note-BDX6ZDm1.js";
86
86
  import "./clack-prompter-BbdTlNx8.js";
87
- import "./onboarding-ByjuJJvO.js";
87
+ import "./onboarding-BqgNExH9.js";
88
88
  import "./onboard-skills-D5B_ZPKs.js";
89
89
  import "./github-copilot-auth-C9mmx0Wd.js";
90
90
  import "./onboard-channels-CJug7SFV.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-CUSKgqWX.js";
107
- import "./register.subclis-iwqsU914.js";
106
+ import "./doctor-completion-SM2eK0Lp.js";
107
+ import "./register.subclis-CW4mB1LQ.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-CFXh7AVF.js";
124
- import "./completion-cli-Cr0QbN9h.js";
123
+ import "./doctor-0THm5b6P.js";
124
+ import "./completion-cli-BZOdUKC7.js";
125
125
  import "./service-audit-B_swanYW.js";
126
126
  import "./hooks-status-CJBhXrQP.js";
127
- import "./tui-CLMQI4hR.js";
127
+ import "./tui-DzMl0uIy.js";
128
128
  import "./channel-options-BgY3Dql2.js";
129
- import { n as buildProgram } from "./program-BvneuwKl.js";
129
+ import { n as buildProgram } from "./program-HEmsYHwG.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-CUSKgqWX.js";
41
+ import { a as formatUpdateOneLiner, i as formatUpdateAvailableHint, o as getUpdateCheckResult, r as ensureCompletionCacheExists, s as resolveUpdateAvailability, t as checkShellCompletionStatus } from "./doctor-completion-SM2eK0Lp.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-Cr0QbN9h.js";
44
+ import { r as installCompletion } from "./completion-cli-BZOdUKC7.js";
45
45
  import { t as buildWorkspaceHookStatus } from "./hooks-status-CJBhXrQP.js";
46
- import { t as runTui } from "./tui-CLMQI4hR.js";
46
+ import { t as runTui } from "./tui-DzMl0uIy.js";
47
47
  import fs from "node:fs";
48
48
  import path from "node:path";
49
49
  import os from "node:os";
@@ -33,7 +33,7 @@ import { exec as exec$1 } from "child_process";
33
33
  import { createReadStream as createReadStream$1, createWriteStream as createWriteStream$1, promises as promises$1 } from "fs";
34
34
  import { Readable, Transform } from "stream";
35
35
  import { platform, release, tmpdir as tmpdir$1 } from "os";
36
- import EventEmitter$1, { EventEmitter, once } from "events";
36
+ import EventEmitter, { EventEmitter as EventEmitter$1, once } from "events";
37
37
  import { promisify as promisify$1 } from "util";
38
38
  import { join as join$1 } from "path";
39
39
  import * as Crypto from "crypto";
@@ -228371,7 +228371,7 @@ const BUFFERABLE_EVENT_SET = new Set([
228371
228371
  * making the data processing more efficient.
228372
228372
  */
228373
228373
  const makeEventBuffer = (logger) => {
228374
- const ev = new EventEmitter$1();
228374
+ const ev = new EventEmitter();
228375
228375
  const historyCache = /* @__PURE__ */ new Set();
228376
228376
  let data = makeBufferData();
228377
228377
  let isBuffering = false;
@@ -233941,7 +233941,7 @@ var BinaryInfo = class {
233941
233941
 
233942
233942
  //#endregion
233943
233943
  //#region node_modules/.pnpm/@whiskeysockets+baileys@7.0.0-rc.9_audio-decode@2.2.3_sharp@0.34.5/node_modules/@whiskeysockets/baileys/lib/Socket/Client/types.js
233944
- var AbstractSocketClient = class extends EventEmitter {
233944
+ var AbstractSocketClient = class extends EventEmitter$1 {
233945
233945
  constructor(url, config) {
233946
233946
  super();
233947
233947
  this.url = url;
@@ -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-CykiCgAZ.js";
9
- import { a as getCommandPath, d as hasHelpOrVersion, l as getVerboseFlag } from "./register.subclis-iwqsU914.js";
8
+ import { i as registerProgramCommands, n as PLUGIN_CLI_COMMANDS, t as ensureConfigReady } from "./config-guard-fPal6x-H.js";
9
+ import { a as getCommandPath, d as hasHelpOrVersion, l as getVerboseFlag } from "./register.subclis-CW4mB1LQ.js";
10
10
  import { t as ensurePluginRegistryLoaded } from "./plugin-registry-C2tsOi_I.js";
11
- import { a as hasEmittedCliBanner, i as formatCliBannerLine, r as emitCliBanner } from "./tui-CLMQI4hR.js";
11
+ import { a as hasEmittedCliBanner, i as formatCliBannerLine, r as emitCliBanner } from "./tui-DzMl0uIy.js";
12
12
  import { n as resolveCliChannelOptions } from "./channel-options-BgY3Dql2.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-B1ktEbhU.js")).registerGatewayCli(program);
127
+ (await import("./gateway-cli-Bp_-9yN3.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-BXVWOpGK.js")).registerTuiCli(program);
197
+ (await import("./tui-cli-Vc1AaLJt.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-EXCKmAei.js")).registerUpdateCli(program);
313
+ (await import("./update-cli-B-JAciDv.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-Cr0QbN9h.js").then((n) => n.n)).registerCompletionCli(program);
320
+ (await import("./completion-cli-BZOdUKC7.js").then((n) => n.n)).registerCompletionCli(program);
321
321
  }
322
322
  }
323
323
  ];
@@ -77,11 +77,11 @@ import "./deps-B3eCpudn.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-CykiCgAZ.js";
80
+ import { n as PLUGIN_CLI_COMMANDS, r as findRoutedCommand, t as ensureConfigReady } from "./config-guard-fPal6x-H.js";
81
81
  import "./logging-CE47aZcO.js";
82
82
  import "./note-BDX6ZDm1.js";
83
83
  import "./clack-prompter-BbdTlNx8.js";
84
- import "./onboarding-ByjuJJvO.js";
84
+ import "./onboarding-BqgNExH9.js";
85
85
  import "./onboard-skills-D5B_ZPKs.js";
86
86
  import "./github-copilot-auth-C9mmx0Wd.js";
87
87
  import "./onboard-channels-CJug7SFV.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-CUSKgqWX.js";
104
- import { a as getCommandPath, c as getPrimaryCommand, d as hasHelpOrVersion } from "./register.subclis-iwqsU914.js";
103
+ import "./doctor-completion-SM2eK0Lp.js";
104
+ import { a as getCommandPath, c as getPrimaryCommand, d as hasHelpOrVersion } from "./register.subclis-CW4mB1LQ.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-CFXh7AVF.js";
121
- import "./completion-cli-Cr0QbN9h.js";
120
+ import "./doctor-0THm5b6P.js";
121
+ import "./completion-cli-BZOdUKC7.js";
122
122
  import "./service-audit-B_swanYW.js";
123
123
  import "./hooks-status-CJBhXrQP.js";
124
- import { r as emitCliBanner } from "./tui-CLMQI4hR.js";
124
+ import { r as emitCliBanner } from "./tui-DzMl0uIy.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-BvneuwKl.js").then((n) => n.t);
178
+ const { buildProgram } = await import("./program-HEmsYHwG.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-iwqsU914.js").then((n) => n.i);
211
+ const { registerSubCliByName } = await import("./register.subclis-CW4mB1LQ.js").then((n) => n.i);
212
212
  await registerSubCliByName(program, primary);
213
213
  }
214
214
  if (!!primary && PLUGIN_CLI_COMMANDS.has(primary)) {
@@ -55,6 +55,7 @@ import vm from "node:vm";
55
55
  */
56
56
  /** Fallback columns/rows when not attached to a TTY (matches pi-tui's ProcessTerminal). */
57
57
  const FALLBACK_COLUMNS = 80;
58
+ const FALLBACK_ROWS = 24;
58
59
  /** Kitty / iTerm2 inline-image escape leads — such lines are legitimately "wide" and
59
60
  * must never be truncated (pi-tui skips them in its own width check). */
60
61
  const IMAGE_LINE_RE = /\x1b_G|\x1b\]1337/;
@@ -64,6 +65,12 @@ function terminalColumns() {
64
65
  if (typeof cols === "number" && Number.isFinite(cols) && cols > 0) return Math.floor(cols);
65
66
  return FALLBACK_COLUMNS;
66
67
  }
68
+ /** Current terminal height, always a safe positive integer. */
69
+ function terminalRows() {
70
+ const rows = process.stdout?.rows;
71
+ if (typeof rows === "number" && Number.isFinite(rows) && rows > 0) return Math.floor(rows);
72
+ return FALLBACK_ROWS;
73
+ }
67
74
  /** Coerce any width-ish value to a usable non-negative integer. */
68
75
  function safeWidth(width) {
69
76
  return Number.isFinite(width) && width > 0 ? Math.floor(width) : 0;
@@ -5570,29 +5577,47 @@ function drawBarMeter(grid, x, y, w, ratio, fg, dimFg) {
5570
5577
  const filled = Math.round(Math.max(0, Math.min(1, ratio)) * w);
5571
5578
  for (let i = 0; i < w; i++) grid.set(x + i, y, i < filled ? "█" : "░", i < filled ? fg : dimFg, -2);
5572
5579
  }
5580
+ /** Rows the bottom chat strip claims — media must never draw into them. */
5581
+ const CANVAS_CHAT_RESERVE = 6;
5582
+ function samplePixel(img, sx, sy) {
5583
+ const x = Math.min(img.width - 1, Math.max(0, sx | 0));
5584
+ const i = (Math.min(img.height - 1, Math.max(0, sy | 0)) * img.width + x) * 4;
5585
+ if (img.data[i + 3] < 40) return -1;
5586
+ return (img.data[i] & 255) << 16 | (img.data[i + 1] & 255) << 8 | img.data[i + 2] & 255;
5587
+ }
5573
5588
  /**
5574
- * Draw an RGBA bitmap using half-blocks: each terminal cell shows two
5575
- * vertical pixels (fg = top, bg = bottom) 24-bit color at 2× vertical
5576
- * resolution. The image is expected pre-resized to (w, h*2) pixels.
5589
+ * Draw an image so it ALWAYS fits: the (boxX,boxY,boxW,boxH) request is clamped
5590
+ * to the real grid (minus the chat strip via reserveBottom), the image is
5591
+ * scaled to fit inside that region preserving aspect ratio (nearest-neighbor,
5592
+ * up- or down-scale), and centered. Nothing ever overflows the terminal or the
5593
+ * prompt strip regardless of what dimensions the model requested.
5577
5594
  */
5578
- function drawImageHalfBlocks(grid, x, y, img) {
5579
- const cellsW = img.width;
5580
- const cellsH = Math.floor(img.height / 2);
5581
- for (let cy = 0; cy < cellsH; cy++) for (let cx = 0; cx < cellsW; cx++) {
5582
- const top = pixelAt(img, cx, cy * 2);
5583
- const bottom = pixelAt(img, cx, cy * 2 + 1);
5595
+ function drawImageFitted(grid, boxX, boxY, boxW, boxH, img, opts) {
5596
+ if (img.width <= 0 || img.height <= 0) return;
5597
+ const reserve = opts?.reserveBottom ?? 0;
5598
+ const usableH = Math.max(1, grid.h - reserve);
5599
+ const gx = Math.max(0, Math.min(boxX | 0, grid.w - 1));
5600
+ const gy = Math.max(0, Math.min(boxY | 0, usableH - 1));
5601
+ const maxW = Math.max(1, Math.min(boxW | 0 || grid.w, grid.w - gx));
5602
+ const maxH = Math.max(1, Math.min(boxH | 0 || usableH, usableH - gy));
5603
+ const scale = Math.min(maxW / img.width, maxH * 2 / img.height);
5604
+ const outPxW = Math.max(1, Math.round(img.width * scale));
5605
+ const outPxH = Math.max(1, Math.round(img.height * scale));
5606
+ const outCellsW = Math.min(maxW, outPxW);
5607
+ const outCellsH = Math.min(maxH, Math.ceil(outPxH / 2));
5608
+ const offX = gx + Math.floor((maxW - outCellsW) / 2);
5609
+ const offY = gy + Math.floor((maxH - outCellsH) / 2);
5610
+ const invX = img.width / outPxW;
5611
+ const invY = img.height / outPxH;
5612
+ for (let cy = 0; cy < outCellsH; cy++) for (let cx = 0; cx < outCellsW; cx++) {
5613
+ const top = samplePixel(img, cx * invX, cy * 2 * invY);
5614
+ const bottom = samplePixel(img, cx * invX, (cy * 2 + 1) * invY);
5584
5615
  if (top < 0 && bottom < 0) continue;
5585
- if (top >= 0 && bottom >= 0) grid.set(x + cx, y + cy, "▀", top, bottom);
5586
- else if (top >= 0) grid.set(x + cx, y + cy, "▀", top, -2);
5587
- else grid.set(x + cx, y + cy, "▄", bottom, -2);
5616
+ if (top >= 0 && bottom >= 0) grid.set(offX + cx, offY + cy, "▀", top, bottom);
5617
+ else if (top >= 0) grid.set(offX + cx, offY + cy, "▀", top, -2);
5618
+ else grid.set(offX + cx, offY + cy, "▄", bottom, -2);
5588
5619
  }
5589
5620
  }
5590
- function pixelAt(img, x, y) {
5591
- if (x < 0 || y < 0 || x >= img.width || y >= img.height) return -1;
5592
- const i = (y * img.width + x) * 4;
5593
- if (img.data[i + 3] < 40) return -1;
5594
- return (img.data[i] & 255) << 16 | (img.data[i + 1] & 255) << 8 | img.data[i + 2] & 255;
5595
- }
5596
5621
  const BRAILLE_BASE$1 = 10240;
5597
5622
  const BRAILLE_BITS$1 = [
5598
5623
  [1, 8],
@@ -6194,7 +6219,7 @@ function createProgramRunner(source) {
6194
6219
  const mediaCache = /* @__PURE__ */ new Map();
6195
6220
  const genCache = /* @__PURE__ */ new Map();
6196
6221
  const highlightCache = /* @__PURE__ */ new Map();
6197
- const drawMediaEntry = (key, x, y) => {
6222
+ const drawMediaEntry = (key, x, y, w, h) => {
6198
6223
  const entry = mediaCache.get(key);
6199
6224
  if (!grid) return;
6200
6225
  if (!entry || entry.pending) {
@@ -6217,7 +6242,7 @@ function createProgramRunner(source) {
6217
6242
  }
6218
6243
  frame = media.frames[fi];
6219
6244
  }
6220
- drawImageHalfBlocks(grid, x | 0, y | 0, frame);
6245
+ drawImageFitted(grid, x | 0, y | 0, w | 0, h | 0, frame, { reserveBottom: CANVAS_CHAT_RESERVE });
6221
6246
  };
6222
6247
  const api = {
6223
6248
  get w() {
@@ -6286,7 +6311,7 @@ function createProgramRunner(source) {
6286
6311
  pending: false
6287
6312
  }));
6288
6313
  }
6289
- drawMediaEntry(key, x, y);
6314
+ drawMediaEntry(key, x, y, w, h);
6290
6315
  },
6291
6316
  genimage: (prompt, x, y, w, h) => {
6292
6317
  const gkey = `image|${prompt}`;
@@ -6600,16 +6625,18 @@ function createSpecScene(spec) {
6600
6625
  const media = /* @__PURE__ */ new Map();
6601
6626
  const mediaClock = /* @__PURE__ */ new Map();
6602
6627
  const programs = /* @__PURE__ */ new Map();
6628
+ const decodeW = Math.max(48, Math.min(220, terminalColumns()));
6629
+ const decodeH = Math.max(24, Math.min(80, terminalRows()));
6603
6630
  for (const [i, layer] of layers.entries()) {
6604
- if (layer.type === "image" && typeof layer.path === "string") decodeImage(layer.path, Number(layer.w ?? 80), Number(layer.h ?? 24)).then((d) => media.set(i, d));
6605
- if (layer.type === "video" && typeof layer.path === "string") decodeVideo(layer.path, Number(layer.w ?? 80), Number(layer.h ?? 24)).then((d) => media.set(i, d));
6606
- if (layer.type === "file" && typeof layer.path === "string") decodeAnyFile(layer.path, Number(layer.w ?? 80), Number(layer.h ?? 24)).then((d) => media.set(i, d));
6631
+ if (layer.type === "image" && typeof layer.path === "string") decodeImage(layer.path, decodeW, decodeH).then((d) => media.set(i, d));
6632
+ if (layer.type === "video" && typeof layer.path === "string") decodeVideo(layer.path, decodeW, decodeH).then((d) => media.set(i, d));
6633
+ if (layer.type === "file" && typeof layer.path === "string") decodeAnyFile(layer.path, decodeW, decodeH).then((d) => media.set(i, d));
6607
6634
  if ((layer.type === "genimage" || layer.type === "genvideo") && typeof layer.prompt === "string") generateMedia(layer.type === "genvideo" ? "video" : "image", layer.prompt).then((gen) => {
6608
6635
  if (!gen) {
6609
6636
  media.set(i, null);
6610
6637
  return;
6611
6638
  }
6612
- decodeAnyFile(gen.path, Number(layer.w ?? 80), Number(layer.h ?? 24)).then((d) => media.set(i, d));
6639
+ decodeAnyFile(gen.path, decodeW, decodeH).then((d) => media.set(i, d));
6613
6640
  });
6614
6641
  if (layer.type === "program" && typeof layer.source === "string") programs.set(i, createProgramRunner(layer.source));
6615
6642
  }
@@ -6659,7 +6686,7 @@ function createSpecScene(spec) {
6659
6686
  }
6660
6687
  frame = d.frames[fi];
6661
6688
  }
6662
- drawImageHalfBlocks(grid, Number(layer.x ?? 0), Number(layer.y ?? 0), frame);
6689
+ drawImageFitted(grid, Number(layer.x ?? 0), Number(layer.y ?? 0), Number(layer.w ?? grid.w), Number(layer.h ?? grid.h), frame, { reserveBottom: CANVAS_CHAT_RESERVE });
6663
6690
  } else drawText(grid, Number(layer.x ?? 0), Number(layer.y ?? 0), "· loading media ·", DIM$1, -2);
6664
6691
  } else if (type === "program") programs.get(i)?.draw(grid, t);
6665
6692
  else if (type === "effect") drawEffect(grid, String(layer.kind ?? "waves"), t, layer);
@@ -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-CLMQI4hR.js";
55
+ import { t as runTui } from "./tui-DzMl0uIy.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-CUSKgqWX.js";
97
- import "./register.subclis-iwqsU914.js";
96
+ import { a as formatUpdateOneLiner, i as formatUpdateAvailableHint, r as ensureCompletionCacheExists, s as resolveUpdateAvailability, t as checkShellCompletionStatus } from "./doctor-completion-SM2eK0Lp.js";
97
+ import "./register.subclis-CW4mB1LQ.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-CFXh7AVF.js";
104
- import { r as installCompletion } from "./completion-cli-Cr0QbN9h.js";
103
+ import { t as doctorCommand } from "./doctor-0THm5b6P.js";
104
+ import { r as installCompletion } from "./completion-cli-BZOdUKC7.js";
105
105
  import "./service-audit-B_swanYW.js";
106
106
  import "./shared-CsJmoyjd.js";
107
107
  import { r as runDaemonRestart } from "./daemon-cli-BY6L_O1X.js";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/bluebubbles",
3
- "version": "2026.3.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.385
4
+
5
+ ### Changes
6
+ - Version alignment with core SKYKOI release numbers.
7
+
3
8
  ## 2026.3.384
4
9
 
5
10
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/matrix",
3
- "version": "2026.3.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.385
4
+
5
+ ### Changes
6
+ - Version alignment with core SKYKOI release numbers.
7
+
3
8
  ## 2026.3.384
4
9
 
5
10
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/msteams",
3
- "version": "2026.3.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.385
4
+
5
+ ### Changes
6
+ - Version alignment with core SKYKOI release numbers.
7
+
3
8
  ## 2026.3.384
4
9
 
5
10
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/nostr",
3
- "version": "2026.3.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.385
4
+
5
+ ### Changes
6
+ - Version alignment with core SKYKOI release numbers.
7
+
3
8
  ## 2026.3.384
4
9
 
5
10
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/twitch",
3
- "version": "2026.3.384",
3
+ "version": "2026.3.385",
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.385
4
+
5
+ ### Changes
6
+ - Version alignment with core SKYKOI release numbers.
7
+
3
8
  ## 2026.3.384
4
9
 
5
10
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/voice-call",
3
- "version": "2026.3.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
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.385
4
+
5
+ ### Changes
6
+ - Version alignment with core SKYKOI release numbers.
7
+
3
8
  ## 2026.3.384
4
9
 
5
10
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/zalo",
3
- "version": "2026.3.384",
3
+ "version": "2026.3.385",
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.385
4
+
5
+ ### Changes
6
+ - Version alignment with core SKYKOI release numbers.
7
+
3
8
  ## 2026.3.384
4
9
 
5
10
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@SKYKOI/zalouser",
3
- "version": "2026.3.384",
3
+ "version": "2026.3.385",
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.384",
3
+ "version": "2026.3.385",
4
4
  "description": "SkyKoi — Koi runtime. Multi-channel gateway CLI with RPC Koi.",
5
5
  "keywords": [
6
6
  "cli",