skykoi 2026.3.380 → 2026.3.381
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{completion-cli-Cfip458C.js → completion-cli-DJhbwMcK.js} +1 -1
- package/dist/{config-guard-v9v1pT6m.js → config-guard-Q3Pl253R.js} +4 -4
- package/dist/{doctor-CJujJmCX.js → doctor-BfH7c1Hp.js} +1 -1
- package/dist/{doctor-completion-D-na5SuC.js → doctor-completion-lahrpE_z.js} +1 -1
- package/dist/entry.js +1 -1
- package/dist/{gateway-cli-D1Vd7gJU.js → gateway-cli-s90jfqW_.js} +5 -5
- package/dist/index.js +8 -8
- package/dist/{onboarding-YoKrr8S1.js → onboarding-f7KcL7qR.js} +3 -3
- package/dist/plugin-sdk/index.js +5 -5
- package/dist/plugin-sdk/{pi-model-discovery-lynj0LAO.js → pi-model-discovery-ClImJtLC.js} +3 -3
- package/dist/{program-L-wrMwW8.js → program-DSIl6v9h.js} +3 -3
- package/dist/{register.subclis-DmQzWagl.js → register.subclis-9L79xJNr.js} +4 -4
- package/dist/{run-main-DUIUN49w.js → run-main-qyMlhjLF.js} +9 -9
- package/dist/{tui-BE4qiT6o.js → tui-DC1slGZV.js} +179 -34
- package/dist/{tui-cli-Da1h8hbA.js → tui-cli-juhjLupf.js} +1 -1
- package/dist/{update-cli-C9mUm5mZ.js → update-cli-BNyQj6jL.js} +4 -4
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/discord/package.json +1 -1
- package/extensions/feishu/package.json +1 -1
- package/extensions/google-antigravity-auth/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/googlechat/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +5 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +1 -1
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +5 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +5 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/slack/package.json +1 -1
- package/extensions/telegram/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +5 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +5 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +5 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +5 -0
- package/extensions/zalouser/package.json +1 -1
- package/package.json +1 -1
package/dist/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
955f41785c6bd32b8d2f3d1941eb6494ab2ab1fde4ffeb85b8957775fbada3b0
|
|
@@ -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-
|
|
3
|
+
import { n as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-9L79xJNr.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-
|
|
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-f7KcL7qR.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-CbhAiENM.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-fS8wMQ0N.js";
|
|
34
34
|
import { n as setupChannels } from "./onboard-channels-DSqwLtZ3.js";
|
|
@@ -36,7 +36,7 @@ import { i as healthCommand } from "./health-format-Mqf6E6Pb.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-
|
|
39
|
+
import { l as getVerboseFlag, o as getFlagValue, r as registerSubCliCommands, s as getPositiveIntFlagValue, u as hasFlag } from "./register.subclis-9L79xJNr.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-
|
|
50
|
+
import { n as loadAndMaybeMigrateDoctorConfig, t as doctorCommand } from "./doctor-BfH7c1Hp.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-
|
|
3109
|
+
const { runTui } = await import("./tui-DC1slGZV.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-
|
|
37
|
+
import { n as doctorShellCompletion } from "./doctor-completion-lahrpE_z.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-
|
|
6
|
+
import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-DJhbwMcK.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-
|
|
250
|
+
import("./run-main-qyMlhjLF.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-
|
|
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-f7KcL7qR.js";
|
|
98
98
|
import { n as installSkill } from "./onboard-skills-CbhAiENM.js";
|
|
99
99
|
import "./github-copilot-auth-fS8wMQ0N.js";
|
|
100
100
|
import "./onboard-channels-DSqwLtZ3.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-
|
|
117
|
-
import "./register.subclis-
|
|
116
|
+
import "./doctor-completion-lahrpE_z.js";
|
|
117
|
+
import "./register.subclis-9L79xJNr.js";
|
|
118
118
|
import { a as createOutboundSendDeps$1, i as resolveKoiOutboundTarget, r as resolveKoiDeliveryPlan, t as koiCommand } from "./koi-Dykd-hEW.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-
|
|
124
|
+
import "./completion-cli-DJhbwMcK.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-
|
|
127
|
+
import "./tui-DC1slGZV.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-B_iflZzZ.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-
|
|
83
|
+
import "./config-guard-Q3Pl253R.js";
|
|
84
84
|
import "./logging-CE47aZcO.js";
|
|
85
85
|
import "./note-BDX6ZDm1.js";
|
|
86
86
|
import "./clack-prompter-BbdTlNx8.js";
|
|
87
|
-
import "./onboarding-
|
|
87
|
+
import "./onboarding-f7KcL7qR.js";
|
|
88
88
|
import "./onboard-skills-CbhAiENM.js";
|
|
89
89
|
import "./github-copilot-auth-fS8wMQ0N.js";
|
|
90
90
|
import "./onboard-channels-DSqwLtZ3.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-
|
|
107
|
-
import "./register.subclis-
|
|
106
|
+
import "./doctor-completion-lahrpE_z.js";
|
|
107
|
+
import "./register.subclis-9L79xJNr.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-
|
|
124
|
-
import "./completion-cli-
|
|
123
|
+
import "./doctor-BfH7c1Hp.js";
|
|
124
|
+
import "./completion-cli-DJhbwMcK.js";
|
|
125
125
|
import "./service-audit-B_swanYW.js";
|
|
126
126
|
import "./hooks-status-CJBhXrQP.js";
|
|
127
|
-
import "./tui-
|
|
127
|
+
import "./tui-DC1slGZV.js";
|
|
128
128
|
import "./channel-options-BI4411cy.js";
|
|
129
|
-
import { n as buildProgram } from "./program-
|
|
129
|
+
import { n as buildProgram } from "./program-DSIl6v9h.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-
|
|
41
|
+
import { a as formatUpdateOneLiner, i as formatUpdateAvailableHint, o as getUpdateCheckResult, r as ensureCompletionCacheExists, s as resolveUpdateAvailability, t as checkShellCompletionStatus } from "./doctor-completion-lahrpE_z.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-
|
|
44
|
+
import { r as installCompletion } from "./completion-cli-DJhbwMcK.js";
|
|
45
45
|
import { t as buildWorkspaceHookStatus } from "./hooks-status-CJBhXrQP.js";
|
|
46
|
-
import { t as runTui } from "./tui-
|
|
46
|
+
import { t as runTui } from "./tui-DC1slGZV.js";
|
|
47
47
|
import fs from "node:fs";
|
|
48
48
|
import path from "node:path";
|
|
49
49
|
import os from "node:os";
|
package/dist/plugin-sdk/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as __toCommonJS, i as __require, o as __toESM, r as __exportAll, t as __commonJSMin } from "./chunk-D_gEzPfs.js";
|
|
2
|
-
import { a as require_jws, i as require_dist_cjs$1, n as LRUCache$1, o as require_safe_buffer, r as getOAuthProviders, s as getEnvApiKey } from "./pi-model-discovery-
|
|
2
|
+
import { a as require_jws, i as require_dist_cjs$1, n as LRUCache$1, o as require_safe_buffer, r as getOAuthProviders, s as getEnvApiKey } from "./pi-model-discovery-ClImJtLC.js";
|
|
3
3
|
import { t as require_dist_cjs$2 } from "./dist-cjs-B9iGzXDA.js";
|
|
4
4
|
import { C as require_dist_cjs$3, E as init_dist_es$1, M as require_dist_cjs$13, N as require_dist_cjs$12, T as dist_es_exports$1, a as require_dist_cjs$5, c as require_dist_cjs$17, d as require_dist_cjs$15, f as dist_es_exports, h as protocols_exports, i as require_dist_cjs$7, j as require_dist_cjs$14, l as require_dist_cjs$16, m as init_protocols, n as require_dist_cjs$10, o as require_dist_cjs$8, p as init_dist_es, r as require_dist_cjs$9, s as require_dist_cjs$11, t as require_dist_cjs$18, u as require_dist_cjs$6, w as require_dist_cjs$4 } from "./dist-cjs-Cpdu8jQP.js";
|
|
5
5
|
import { C as schema_exports, N as require_dist_cjs$21, P as require_dist_cjs$19, S as init_schema, t as require_dist_cjs$20 } from "./dist-cjs-BVSr8ctW.js";
|
|
@@ -42,7 +42,7 @@ import { mkdir, readFile, stat as stat$1, unlink, writeFile } from "fs/promises"
|
|
|
42
42
|
import { Readable as Readable$1 } from "node:stream";
|
|
43
43
|
import { pipeline as pipeline$1 } from "node:stream/promises";
|
|
44
44
|
import WebSocket, { WebSocket as WebSocket$1 } from "ws";
|
|
45
|
-
import
|
|
45
|
+
import AjvPkg from "ajv";
|
|
46
46
|
import lockfile from "proper-lockfile";
|
|
47
47
|
import { URL as URL$1 } from "url";
|
|
48
48
|
import "yaml";
|
|
@@ -20603,7 +20603,7 @@ function loadPluginManifestRegistry(params) {
|
|
|
20603
20603
|
|
|
20604
20604
|
//#endregion
|
|
20605
20605
|
//#region src/plugins/schema-validator.ts
|
|
20606
|
-
const ajv$1 = new
|
|
20606
|
+
const ajv$1 = new AjvPkg({
|
|
20607
20607
|
allErrors: true,
|
|
20608
20608
|
strict: false,
|
|
20609
20609
|
removeAdditional: false
|
|
@@ -48250,7 +48250,7 @@ const PROTOCOL_VERSION = 3;
|
|
|
48250
48250
|
|
|
48251
48251
|
//#endregion
|
|
48252
48252
|
//#region src/gateway/protocol/index.ts
|
|
48253
|
-
const ajv = new
|
|
48253
|
+
const ajv = new AjvPkg({
|
|
48254
48254
|
allErrors: true,
|
|
48255
48255
|
strict: false,
|
|
48256
48256
|
removeAdditional: false
|
|
@@ -68123,7 +68123,7 @@ function enqueueSystemEvent(text, options) {
|
|
|
68123
68123
|
const MODEL_CACHE = /* @__PURE__ */ new Map();
|
|
68124
68124
|
(async () => {
|
|
68125
68125
|
try {
|
|
68126
|
-
const { discoverAuthStorage, discoverModels } = await import("./pi-model-discovery-
|
|
68126
|
+
const { discoverAuthStorage, discoverModels } = await import("./pi-model-discovery-ClImJtLC.js").then((n) => n.t);
|
|
68127
68127
|
await ensureSKYKOIModelsJson(loadConfig());
|
|
68128
68128
|
const koiDir = resolveSKYKOIKoiDir();
|
|
68129
68129
|
const models = discoverModels(discoverAuthStorage(koiDir), koiDir).getAll();
|
|
@@ -34,7 +34,7 @@ import { access, mkdir, readFile, stat as stat$1, writeFile } from "fs/promises"
|
|
|
34
34
|
import Stream, { Readable as Readable$1 } from "node:stream";
|
|
35
35
|
import { finished } from "node:stream/promises";
|
|
36
36
|
import * as NodeWs from "ws";
|
|
37
|
-
import
|
|
37
|
+
import AjvPkg from "ajv";
|
|
38
38
|
import lockfile from "proper-lockfile";
|
|
39
39
|
import { fileURLToPath as fileURLToPath$1 } from "url";
|
|
40
40
|
import { TypeCompiler } from "@sinclair/typebox/compiler";
|
|
@@ -59699,7 +59699,7 @@ var require_dist$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
59699
59699
|
//#endregion
|
|
59700
59700
|
//#region node_modules/.pnpm/@mariozechner+pi-ai@0.52.8_patch_hash=f41b8429247a07c256a366fc8eddb44710b4e74212f25ffaf_aba27699dbfe3dddaa7a3984ad46615e/node_modules/@mariozechner/pi-ai/dist/utils/validation.js
|
|
59701
59701
|
var import_dist$1 = /* @__PURE__ */ __toESM(require_dist$1(), 1);
|
|
59702
|
-
const Ajv$1 =
|
|
59702
|
+
const Ajv$1 = AjvPkg.default || AjvPkg;
|
|
59703
59703
|
const addFormats = import_dist$1.default.default || import_dist$1.default;
|
|
59704
59704
|
const isBrowserExtension = typeof globalThis !== "undefined" && globalThis.chrome?.runtime?.id !== void 0;
|
|
59705
59705
|
let ajv = null;
|
|
@@ -174026,7 +174026,7 @@ var AuthStorage = class {
|
|
|
174026
174026
|
/**
|
|
174027
174027
|
* Model registry - manages built-in and custom models, provides API key resolution.
|
|
174028
174028
|
*/
|
|
174029
|
-
const Ajv =
|
|
174029
|
+
const Ajv = AjvPkg.default || AjvPkg;
|
|
174030
174030
|
const OpenRouterRoutingSchema = Type.Object({
|
|
174031
174031
|
only: Type.Optional(Type.Array(Type.String())),
|
|
174032
174032
|
order: Type.Optional(Type.Array(Type.String()))
|
|
@@ -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-
|
|
9
|
-
import { a as getCommandPath, d as hasHelpOrVersion, l as getVerboseFlag } from "./register.subclis-
|
|
8
|
+
import { i as registerProgramCommands, n as PLUGIN_CLI_COMMANDS, t as ensureConfigReady } from "./config-guard-Q3Pl253R.js";
|
|
9
|
+
import { a as getCommandPath, d as hasHelpOrVersion, l as getVerboseFlag } from "./register.subclis-9L79xJNr.js";
|
|
10
10
|
import { t as ensurePluginRegistryLoaded } from "./plugin-registry-Ct2B6APr.js";
|
|
11
|
-
import { a as hasEmittedCliBanner, i as formatCliBannerLine, r as emitCliBanner } from "./tui-
|
|
11
|
+
import { a as hasEmittedCliBanner, i as formatCliBannerLine, r as emitCliBanner } from "./tui-DC1slGZV.js";
|
|
12
12
|
import { n as resolveCliChannelOptions } from "./channel-options-BI4411cy.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-
|
|
127
|
+
(await import("./gateway-cli-s90jfqW_.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-
|
|
197
|
+
(await import("./tui-cli-juhjLupf.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-
|
|
313
|
+
(await import("./update-cli-BNyQj6jL.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-
|
|
320
|
+
(await import("./completion-cli-DJhbwMcK.js").then((n) => n.n)).registerCompletionCli(program);
|
|
321
321
|
}
|
|
322
322
|
}
|
|
323
323
|
];
|
|
@@ -77,11 +77,11 @@ import "./deps-CCbeQohF.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-
|
|
80
|
+
import { n as PLUGIN_CLI_COMMANDS, r as findRoutedCommand, t as ensureConfigReady } from "./config-guard-Q3Pl253R.js";
|
|
81
81
|
import "./logging-CE47aZcO.js";
|
|
82
82
|
import "./note-BDX6ZDm1.js";
|
|
83
83
|
import "./clack-prompter-BbdTlNx8.js";
|
|
84
|
-
import "./onboarding-
|
|
84
|
+
import "./onboarding-f7KcL7qR.js";
|
|
85
85
|
import "./onboard-skills-CbhAiENM.js";
|
|
86
86
|
import "./github-copilot-auth-fS8wMQ0N.js";
|
|
87
87
|
import "./onboard-channels-DSqwLtZ3.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-
|
|
104
|
-
import { a as getCommandPath, c as getPrimaryCommand, d as hasHelpOrVersion } from "./register.subclis-
|
|
103
|
+
import "./doctor-completion-lahrpE_z.js";
|
|
104
|
+
import { a as getCommandPath, c as getPrimaryCommand, d as hasHelpOrVersion } from "./register.subclis-9L79xJNr.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-
|
|
121
|
-
import "./completion-cli-
|
|
120
|
+
import "./doctor-BfH7c1Hp.js";
|
|
121
|
+
import "./completion-cli-DJhbwMcK.js";
|
|
122
122
|
import "./service-audit-B_swanYW.js";
|
|
123
123
|
import "./hooks-status-CJBhXrQP.js";
|
|
124
|
-
import { r as emitCliBanner } from "./tui-
|
|
124
|
+
import { r as emitCliBanner } from "./tui-DC1slGZV.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-
|
|
178
|
+
const { buildProgram } = await import("./program-DSIl6v9h.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-
|
|
211
|
+
const { registerSubCliByName } = await import("./register.subclis-9L79xJNr.js").then((n) => n.i);
|
|
212
212
|
await registerSubCliByName(program, primary);
|
|
213
213
|
}
|
|
214
214
|
if (!!primary && PLUGIN_CLI_COMMANDS.has(primary)) {
|
|
@@ -5874,10 +5874,10 @@ function createProgramScene(source) {
|
|
|
5874
5874
|
const INK = hexColor("#0A121C");
|
|
5875
5875
|
const WATER_DEEP = hexColor("#06202E");
|
|
5876
5876
|
const WATER = hexColor("#0A2A3C");
|
|
5877
|
-
const ACCENT = hexColor("#8AB4F8");
|
|
5878
|
-
const ORANGE = hexColor("#D97757");
|
|
5879
|
-
const WHITE = hexColor("#E8E3D5");
|
|
5880
|
-
const DIM = hexColor("#5B6472");
|
|
5877
|
+
const ACCENT$1 = hexColor("#8AB4F8");
|
|
5878
|
+
const ORANGE$1 = hexColor("#D97757");
|
|
5879
|
+
const WHITE$1 = hexColor("#E8E3D5");
|
|
5880
|
+
const DIM$1 = hexColor("#5B6472");
|
|
5881
5881
|
const GREEN = hexColor("#4EBA65");
|
|
5882
5882
|
function mulberry32(seed) {
|
|
5883
5883
|
let a = seed >>> 0;
|
|
@@ -5896,7 +5896,7 @@ function createPondScene() {
|
|
|
5896
5896
|
y: 6 + i * 5 + rand() * 3,
|
|
5897
5897
|
vx: (rand() > .5 ? 1 : -1) * (4 + rand() * 5),
|
|
5898
5898
|
phase: rand() * Math.PI * 2,
|
|
5899
|
-
hue: i % 2 === 0 ? ORANGE : WHITE,
|
|
5899
|
+
hue: i % 2 === 0 ? ORANGE$1 : WHITE$1,
|
|
5900
5900
|
size: 5 + Math.floor(rand() * 3)
|
|
5901
5901
|
}));
|
|
5902
5902
|
const ripples = [];
|
|
@@ -5949,14 +5949,14 @@ function createPondScene() {
|
|
|
5949
5949
|
const bx = f.x - dir * s * 1.4;
|
|
5950
5950
|
const by = f.y + Math.sin(t * 4 + f.phase + s * .8) * .9;
|
|
5951
5951
|
const ch = s === 0 ? dir > 0 ? "◗" : "◖" : s === f.size - 1 ? dir > 0 ? "≺" : "≻" : "▬";
|
|
5952
|
-
grid.set(bx | 0, by | 0, ch, s === 0 ? f.hue : s % 2 ? f.hue : WHITE, -2);
|
|
5952
|
+
grid.set(bx | 0, by | 0, ch, s === 0 ? f.hue : s % 2 ? f.hue : WHITE$1, -2);
|
|
5953
5953
|
}
|
|
5954
5954
|
}
|
|
5955
5955
|
const now = /* @__PURE__ */ new Date();
|
|
5956
5956
|
const clock = `${String(now.getHours()).padStart(2, "0")}:${String(now.getMinutes()).padStart(2, "0")}`;
|
|
5957
|
-
drawBigText(grid, (w - bigTextSize(clock, 1).w) / 2 | 0, 1, clock, ACCENT);
|
|
5958
|
-
drawText(grid, 2, h - 2, "koi canvas · pond", DIM, -2);
|
|
5959
|
-
drawText(grid, w - 22, h - 2, "esc to return · q quit", DIM, -2);
|
|
5957
|
+
drawBigText(grid, (w - bigTextSize(clock, 1).w) / 2 | 0, 1, clock, ACCENT$1);
|
|
5958
|
+
drawText(grid, 2, h - 2, "koi canvas · pond", DIM$1, -2);
|
|
5959
|
+
drawText(grid, w - 22, h - 2, "esc to return · q quit", DIM$1, -2);
|
|
5960
5960
|
}
|
|
5961
5961
|
};
|
|
5962
5962
|
}
|
|
@@ -6006,27 +6006,27 @@ function createMonitorScene() {
|
|
|
6006
6006
|
draw(grid, t) {
|
|
6007
6007
|
const { w, h } = grid;
|
|
6008
6008
|
for (let y = 0; y < h; y++) for (let x = 0; x < w; x++) grid.set(x, y, " ", -1, INK);
|
|
6009
|
-
drawBigText(grid, 2, 1, "LIVE", ORANGE);
|
|
6010
|
-
drawText(grid, 2, 9, `Watching this machine in real time`, DIM, -2);
|
|
6009
|
+
drawBigText(grid, 2, 1, "LIVE", ORANGE$1);
|
|
6010
|
+
drawText(grid, 2, 9, `Watching this machine in real time`, DIM$1, -2);
|
|
6011
6011
|
const colW = Math.min(56, w - 4);
|
|
6012
|
-
drawBox(grid, 2, 11, colW, 6, DIM, { title: "focus" });
|
|
6013
|
-
drawText(grid, 4, 13, `app ${app || "…"}`.slice(0, colW - 4), WHITE, -2);
|
|
6014
|
-
drawText(grid, 4, 14, `window ${title || "…"}`.slice(0, colW - 4), DIM, -2);
|
|
6015
|
-
drawText(grid, 4, 15, `battery ${battery || "…"}`.slice(0, colW - 4), DIM, -2);
|
|
6016
|
-
drawBox(grid, 2, 18, colW, 6, DIM, { title: "microphone" });
|
|
6017
|
-
drawText(grid, 4, 20, "level", DIM, -2);
|
|
6012
|
+
drawBox(grid, 2, 11, colW, 6, DIM$1, { title: "focus" });
|
|
6013
|
+
drawText(grid, 4, 13, `app ${app || "…"}`.slice(0, colW - 4), WHITE$1, -2);
|
|
6014
|
+
drawText(grid, 4, 14, `window ${title || "…"}`.slice(0, colW - 4), DIM$1, -2);
|
|
6015
|
+
drawText(grid, 4, 15, `battery ${battery || "…"}`.slice(0, colW - 4), DIM$1, -2);
|
|
6016
|
+
drawBox(grid, 2, 18, colW, 6, DIM$1, { title: "microphone" });
|
|
6017
|
+
drawText(grid, 4, 20, "level", DIM$1, -2);
|
|
6018
6018
|
drawBarMeter(grid, 11, 20, colW - 12, Math.min(1, micRms * 14), GREEN, hexColor("#22303E"));
|
|
6019
|
-
drawText(grid, 4, 21, "5 min", DIM, -2);
|
|
6020
|
-
drawSparkline(grid, 11, 21, colW - 12, micHistory, ACCENT, { min: 0 });
|
|
6021
|
-
drawBraillePlot(grid, 11, 22, colW - 12, 1, micHistory.length > 1 ? micHistory : [0, 0], DIM);
|
|
6019
|
+
drawText(grid, 4, 21, "5 min", DIM$1, -2);
|
|
6020
|
+
drawSparkline(grid, 11, 21, colW - 12, micHistory, ACCENT$1, { min: 0 });
|
|
6021
|
+
drawBraillePlot(grid, 11, 22, colW - 12, 1, micHistory.length > 1 ? micHistory : [0, 0], DIM$1);
|
|
6022
6022
|
const ty = 25;
|
|
6023
|
-
drawBox(grid, 2, ty, w - 4, Math.max(4, h - ty - 2), DIM, { title: "room · live transcript" });
|
|
6023
|
+
drawBox(grid, 2, ty, w - 4, Math.max(4, h - ty - 2), DIM$1, { title: "room · live transcript" });
|
|
6024
6024
|
for (const [i, lineEntry] of transcript.slice(-(h - ty - 4)).entries()) {
|
|
6025
6025
|
const who = lineEntry.who === "you" ? "you " : "device ";
|
|
6026
|
-
drawText(grid, 4, ty + 1 + i, `${who} ${lineEntry.text}`.slice(0, w - 8), lineEntry.who === "you" ? WHITE : DIM, -2);
|
|
6026
|
+
drawText(grid, 4, ty + 1 + i, `${who} ${lineEntry.text}`.slice(0, w - 8), lineEntry.who === "you" ? WHITE$1 : DIM$1, -2);
|
|
6027
6027
|
}
|
|
6028
6028
|
grid.set(w - 4, 1, "●", t * 2 % 1 < .5 ? GREEN : hexColor("#1E4258"), -2);
|
|
6029
|
-
drawText(grid, 2, h - 1, "esc to return · q quit", DIM, -2);
|
|
6029
|
+
drawText(grid, 2, h - 1, "esc to return · q quit", DIM$1, -2);
|
|
6030
6030
|
}
|
|
6031
6031
|
};
|
|
6032
6032
|
}
|
|
@@ -6056,15 +6056,15 @@ function createSpecScene(spec) {
|
|
|
6056
6056
|
const text = String(layer.text ?? "");
|
|
6057
6057
|
const scale = Number(layer.scale ?? 1);
|
|
6058
6058
|
const size = bigTextSize(text, scale);
|
|
6059
|
-
drawBigText(grid, resolveX(layer.x, grid.w, size.w), Number(layer.y ?? 1), text, layer.color ? hexColor(String(layer.color)) : WHITE, { scale });
|
|
6059
|
+
drawBigText(grid, resolveX(layer.x, grid.w, size.w), Number(layer.y ?? 1), text, layer.color ? hexColor(String(layer.color)) : WHITE$1, { scale });
|
|
6060
6060
|
} else if (type === "text") {
|
|
6061
6061
|
const text = String(layer.text ?? "");
|
|
6062
|
-
for (const [li, lineText] of text.split("\n").entries()) drawText(grid, resolveX(layer.x, grid.w, lineText.length), Number(layer.y ?? 0) + li, lineText, layer.color ? hexColor(String(layer.color)) : WHITE, -2);
|
|
6063
|
-
} else if (type === "box") drawBox(grid, Number(layer.x ?? 0), Number(layer.y ?? 0), Number(layer.w ?? 10), Number(layer.h ?? 5), layer.color ? hexColor(String(layer.color)) : DIM, { title: layer.title ? String(layer.title) : void 0 });
|
|
6062
|
+
for (const [li, lineText] of text.split("\n").entries()) drawText(grid, resolveX(layer.x, grid.w, lineText.length), Number(layer.y ?? 0) + li, lineText, layer.color ? hexColor(String(layer.color)) : WHITE$1, -2);
|
|
6063
|
+
} else if (type === "box") drawBox(grid, Number(layer.x ?? 0), Number(layer.y ?? 0), Number(layer.w ?? 10), Number(layer.h ?? 5), layer.color ? hexColor(String(layer.color)) : DIM$1, { title: layer.title ? String(layer.title) : void 0 });
|
|
6064
6064
|
else if (type === "chart") {
|
|
6065
6065
|
const data = (Array.isArray(layer.data) ? layer.data : []).map(Number);
|
|
6066
|
-
if (String(layer.kind) === "braille") drawBraillePlot(grid, Number(layer.x ?? 0), Number(layer.y ?? 0), Number(layer.w ?? 30), Number(layer.h ?? 6), data, layer.color ? hexColor(String(layer.color)) : ACCENT);
|
|
6067
|
-
else drawSparkline(grid, Number(layer.x ?? 0), Number(layer.y ?? 0), Number(layer.w ?? 30), data, layer.color ? hexColor(String(layer.color)) : ACCENT);
|
|
6066
|
+
if (String(layer.kind) === "braille") drawBraillePlot(grid, Number(layer.x ?? 0), Number(layer.y ?? 0), Number(layer.w ?? 30), Number(layer.h ?? 6), data, layer.color ? hexColor(String(layer.color)) : ACCENT$1);
|
|
6067
|
+
else drawSparkline(grid, Number(layer.x ?? 0), Number(layer.y ?? 0), Number(layer.w ?? 30), data, layer.color ? hexColor(String(layer.color)) : ACCENT$1);
|
|
6068
6068
|
} else if (type === "image" || type === "video") {
|
|
6069
6069
|
const d = media.get(i);
|
|
6070
6070
|
if (d && d.frames.length > 0) {
|
|
@@ -6079,12 +6079,12 @@ function createSpecScene(spec) {
|
|
|
6079
6079
|
frame = d.frames[fi];
|
|
6080
6080
|
}
|
|
6081
6081
|
drawImageHalfBlocks(grid, Number(layer.x ?? 0), Number(layer.y ?? 0), frame);
|
|
6082
|
-
} else drawText(grid, Number(layer.x ?? 0), Number(layer.y ?? 0), "· loading media ·", DIM, -2);
|
|
6082
|
+
} else drawText(grid, Number(layer.x ?? 0), Number(layer.y ?? 0), "· loading media ·", DIM$1, -2);
|
|
6083
6083
|
} else if (type === "program") programs.get(i)?.draw(grid, t);
|
|
6084
6084
|
else if (type === "effect") drawEffect(grid, String(layer.kind ?? "waves"), t, layer);
|
|
6085
6085
|
} catch {}
|
|
6086
6086
|
}
|
|
6087
|
-
drawText(grid, 2, grid.h - 1, "esc to return · q quit", DIM, -2);
|
|
6087
|
+
drawText(grid, 2, grid.h - 1, "esc to return · q quit", DIM$1, -2);
|
|
6088
6088
|
},
|
|
6089
6089
|
dispose() {
|
|
6090
6090
|
for (const p of programs.values()) p.dispose();
|
|
@@ -6123,6 +6123,119 @@ function drawEffect(grid, kind, t, layer) {
|
|
|
6123
6123
|
}
|
|
6124
6124
|
}
|
|
6125
6125
|
|
|
6126
|
+
//#endregion
|
|
6127
|
+
//#region src/tui/canvas/chat-overlay.ts
|
|
6128
|
+
/**
|
|
6129
|
+
* @module tui/canvas/chat-overlay
|
|
6130
|
+
*
|
|
6131
|
+
* The conversation never stops while the canvas is up: a chat strip overlays
|
|
6132
|
+
* the bottom of every scene — a prompt line you type into (submits through the
|
|
6133
|
+
* exact same fast-lane path as the normal chat), the koi's latest reply above
|
|
6134
|
+
* it, and a live busy indicator while it works. Esc clears the input; esc on
|
|
6135
|
+
* an empty input leaves the canvas.
|
|
6136
|
+
*/
|
|
6137
|
+
const STRIP_BG = hexColor("#0D1826");
|
|
6138
|
+
const DIVIDER = hexColor("#22303E");
|
|
6139
|
+
const DIM = hexColor("#5B6472");
|
|
6140
|
+
const WHITE = hexColor("#E8E3D5");
|
|
6141
|
+
const ACCENT = hexColor("#8AB4F8");
|
|
6142
|
+
const ORANGE = hexColor("#D97757");
|
|
6143
|
+
const SPINNER = [
|
|
6144
|
+
"·",
|
|
6145
|
+
"✢",
|
|
6146
|
+
"✳",
|
|
6147
|
+
"✶",
|
|
6148
|
+
"✻",
|
|
6149
|
+
"✽"
|
|
6150
|
+
];
|
|
6151
|
+
/** Rows the overlay claims at the bottom of the canvas. */
|
|
6152
|
+
const OVERLAY_ROWS = 5;
|
|
6153
|
+
var ChatOverlay = class {
|
|
6154
|
+
constructor(deps) {
|
|
6155
|
+
this.buffer = "";
|
|
6156
|
+
this.replyAtSubmit = null;
|
|
6157
|
+
this.sentText = "";
|
|
6158
|
+
this.deps = deps;
|
|
6159
|
+
}
|
|
6160
|
+
hasText() {
|
|
6161
|
+
return this.buffer.length > 0;
|
|
6162
|
+
}
|
|
6163
|
+
clear() {
|
|
6164
|
+
this.buffer = "";
|
|
6165
|
+
}
|
|
6166
|
+
/**
|
|
6167
|
+
* Consume a key chunk. Returns true when handled (printables, editing,
|
|
6168
|
+
* enter); escape sequences and unhandled controls return false so the
|
|
6169
|
+
* caller can route them (arrows → scene, bare esc → clear/exit).
|
|
6170
|
+
*/
|
|
6171
|
+
handleKey(key) {
|
|
6172
|
+
if (key === "\r" || key === "\n") {
|
|
6173
|
+
const text = this.buffer.trim();
|
|
6174
|
+
this.buffer = "";
|
|
6175
|
+
if (text) {
|
|
6176
|
+
this.sentText = text;
|
|
6177
|
+
this.replyAtSubmit = this.deps.lastReply();
|
|
6178
|
+
this.deps.submit(text);
|
|
6179
|
+
}
|
|
6180
|
+
return true;
|
|
6181
|
+
}
|
|
6182
|
+
if (key === "" || key === "\b") {
|
|
6183
|
+
this.buffer = this.buffer.slice(0, -1);
|
|
6184
|
+
return true;
|
|
6185
|
+
}
|
|
6186
|
+
if (key === "") {
|
|
6187
|
+
this.buffer = "";
|
|
6188
|
+
return true;
|
|
6189
|
+
}
|
|
6190
|
+
if (key.startsWith("\x1B")) return false;
|
|
6191
|
+
const printable = key.replace(/[\x00-\x1f]/g, "");
|
|
6192
|
+
if (printable) {
|
|
6193
|
+
this.buffer += printable;
|
|
6194
|
+
return true;
|
|
6195
|
+
}
|
|
6196
|
+
return false;
|
|
6197
|
+
}
|
|
6198
|
+
draw(grid, t) {
|
|
6199
|
+
const { w, h } = grid;
|
|
6200
|
+
const top = h - OVERLAY_ROWS;
|
|
6201
|
+
if (top < 1) return;
|
|
6202
|
+
for (let y = top; y < h; y++) for (let x = 0; x < w; x++) grid.set(x, y, " ", -1, STRIP_BG);
|
|
6203
|
+
for (let x = 0; x < w; x++) grid.set(x, top, "─", DIVIDER, STRIP_BG);
|
|
6204
|
+
const busy = this.deps.busyLabel();
|
|
6205
|
+
if (busy) {
|
|
6206
|
+
const glyph = SPINNER[Math.floor(t * 8) % SPINNER.length];
|
|
6207
|
+
drawText(grid, 2, top, ` ${glyph} ${busy}… `, ORANGE, STRIP_BG);
|
|
6208
|
+
}
|
|
6209
|
+
const reply = this.deps.lastReply();
|
|
6210
|
+
const answered = this.replyAtSubmit !== null && reply !== this.replyAtSubmit;
|
|
6211
|
+
let zone = [];
|
|
6212
|
+
if (this.sentText && !answered) zone = [{
|
|
6213
|
+
text: `you ${this.sentText}`,
|
|
6214
|
+
fg: DIM
|
|
6215
|
+
}];
|
|
6216
|
+
else if (reply.trim()) {
|
|
6217
|
+
const flat = reply.replace(/```[\s\S]*?```/g, " [code] ").replace(/\s+/g, " ").trim();
|
|
6218
|
+
const width = Math.max(10, w - 10);
|
|
6219
|
+
const lines = [];
|
|
6220
|
+
for (let i = 0; i < flat.length && lines.length < 2; i += width) lines.push(flat.slice(i, i + width));
|
|
6221
|
+
if (flat.length > width * 2 && lines.length === 2) lines[1] = `${lines[1].slice(0, width - 1)}…`;
|
|
6222
|
+
zone = lines.map((text, i) => ({
|
|
6223
|
+
text: i === 0 ? `koi ${text}` : ` ${text}`,
|
|
6224
|
+
fg: i === 0 ? WHITE : DIM
|
|
6225
|
+
}));
|
|
6226
|
+
}
|
|
6227
|
+
for (const [i, line] of zone.entries()) drawText(grid, 2, top + 1 + i, line.text.slice(0, w - 4), line.fg, STRIP_BG);
|
|
6228
|
+
const prompt = "> ";
|
|
6229
|
+
const maxInput = Math.max(4, w - 2 - 4);
|
|
6230
|
+
const shown = this.buffer.length > maxInput ? `…${this.buffer.slice(-(maxInput - 1))}` : this.buffer;
|
|
6231
|
+
drawText(grid, 2, h - 2, prompt, ACCENT, STRIP_BG);
|
|
6232
|
+
drawText(grid, 4, h - 2, shown, WHITE, STRIP_BG);
|
|
6233
|
+
const cursorOn = t % 1 < .55;
|
|
6234
|
+
grid.set(4 + shown.length, h - 2, cursorOn ? "▌" : " ", ACCENT, STRIP_BG);
|
|
6235
|
+
drawText(grid, 2, h - 1, "type to chat · enter send · esc clears (empty esc leaves)", DIM, STRIP_BG);
|
|
6236
|
+
}
|
|
6237
|
+
};
|
|
6238
|
+
|
|
6126
6239
|
//#endregion
|
|
6127
6240
|
//#region src/tui/canvas/canvas-mode.ts
|
|
6128
6241
|
/**
|
|
@@ -6141,6 +6254,7 @@ function drawEffect(grid, kind, t, layer) {
|
|
|
6141
6254
|
var CanvasMode = class {
|
|
6142
6255
|
constructor(deps) {
|
|
6143
6256
|
this.engine = null;
|
|
6257
|
+
this.overlay = null;
|
|
6144
6258
|
this.label = "";
|
|
6145
6259
|
this.keyListener = null;
|
|
6146
6260
|
this.resizeListener = null;
|
|
@@ -6149,26 +6263,49 @@ var CanvasMode = class {
|
|
|
6149
6263
|
isActive() {
|
|
6150
6264
|
return this.engine !== null;
|
|
6151
6265
|
}
|
|
6266
|
+
/** Wrap a scene so the chat strip draws on top of it every frame. */
|
|
6267
|
+
withOverlay(scene) {
|
|
6268
|
+
const overlay = this.overlay;
|
|
6269
|
+
if (!overlay) return scene;
|
|
6270
|
+
return {
|
|
6271
|
+
update: (dt, t) => scene.update(dt, t),
|
|
6272
|
+
draw: (grid, t) => {
|
|
6273
|
+
scene.draw(grid, t);
|
|
6274
|
+
overlay.draw(grid, t);
|
|
6275
|
+
},
|
|
6276
|
+
onKey: scene.onKey,
|
|
6277
|
+
dispose: scene.dispose
|
|
6278
|
+
};
|
|
6279
|
+
}
|
|
6152
6280
|
/** Enter (or, when already active, switch scenes in place). */
|
|
6153
6281
|
enter(scene, label) {
|
|
6154
6282
|
this.label = label;
|
|
6155
6283
|
if (this.engine) {
|
|
6156
|
-
this.engine.setScene(scene);
|
|
6284
|
+
this.engine.setScene(this.withOverlay(scene));
|
|
6157
6285
|
return;
|
|
6158
6286
|
}
|
|
6159
6287
|
this.deps.suspendTui();
|
|
6160
6288
|
process.stdout.write("\x1B[?1049h\x1B[?25l\x1B[2J");
|
|
6161
6289
|
if (process.stdin.isTTY) process.stdin.setRawMode?.(true);
|
|
6162
6290
|
process.stdin.resume();
|
|
6163
|
-
|
|
6164
|
-
|
|
6291
|
+
const cols = process.stdout.columns || 80;
|
|
6292
|
+
const rows = process.stdout.rows || 24;
|
|
6293
|
+
this.overlay = this.deps.chat ? new ChatOverlay(this.deps.chat) : null;
|
|
6294
|
+
this.engine = new CanvasEngine(cols, rows, (s) => process.stdout.write(s));
|
|
6295
|
+
this.engine.setScene(this.withOverlay(scene));
|
|
6165
6296
|
this.engine.start();
|
|
6166
6297
|
this.keyListener = (buf) => {
|
|
6167
6298
|
const key = buf.toString("utf8");
|
|
6168
|
-
if (key === "
|
|
6299
|
+
if (key === "") {
|
|
6169
6300
|
this.exit();
|
|
6170
6301
|
return;
|
|
6171
6302
|
}
|
|
6303
|
+
if (key === "\x1B") {
|
|
6304
|
+
if (this.overlay?.hasText()) this.overlay.clear();
|
|
6305
|
+
else this.exit();
|
|
6306
|
+
return;
|
|
6307
|
+
}
|
|
6308
|
+
if (this.overlay?.handleKey(key)) return;
|
|
6172
6309
|
this.engine?.handleKey(key);
|
|
6173
6310
|
};
|
|
6174
6311
|
process.stdin.on("data", this.keyListener);
|
|
@@ -6181,6 +6318,7 @@ var CanvasMode = class {
|
|
|
6181
6318
|
if (!this.engine) return;
|
|
6182
6319
|
this.engine.stop();
|
|
6183
6320
|
this.engine = null;
|
|
6321
|
+
this.overlay = null;
|
|
6184
6322
|
if (this.keyListener) {
|
|
6185
6323
|
process.stdin.removeListener("data", this.keyListener);
|
|
6186
6324
|
this.keyListener = null;
|
|
@@ -7757,6 +7895,13 @@ async function runTui(opts) {
|
|
|
7757
7895
|
screenSync.noteManualExit();
|
|
7758
7896
|
chatLog.addSystem(`canvas closed (${label})`);
|
|
7759
7897
|
tui.requestRender();
|
|
7898
|
+
},
|
|
7899
|
+
chat: {
|
|
7900
|
+
submit: (text) => {
|
|
7901
|
+
sendMessageFast(text);
|
|
7902
|
+
},
|
|
7903
|
+
lastReply: () => chatLog.lastAssistantText,
|
|
7904
|
+
busyLabel: () => busyStates.has(activityStatus) ? currentActivity || activityStatus : null
|
|
7760
7905
|
}
|
|
7761
7906
|
});
|
|
7762
7907
|
const screenSync = createScreenSyncWatcher({
|
|
@@ -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-
|
|
55
|
+
import { t as runTui } from "./tui-DC1slGZV.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-
|
|
97
|
-
import "./register.subclis-
|
|
96
|
+
import { a as formatUpdateOneLiner, i as formatUpdateAvailableHint, r as ensureCompletionCacheExists, s as resolveUpdateAvailability, t as checkShellCompletionStatus } from "./doctor-completion-lahrpE_z.js";
|
|
97
|
+
import "./register.subclis-9L79xJNr.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-
|
|
104
|
-
import { r as installCompletion } from "./completion-cli-
|
|
103
|
+
import { t as doctorCommand } from "./doctor-BfH7c1Hp.js";
|
|
104
|
+
import { r as installCompletion } from "./completion-cli-DJhbwMcK.js";
|
|
105
105
|
import "./service-audit-B_swanYW.js";
|
|
106
106
|
import "./shared-CsJmoyjd.js";
|
|
107
107
|
import { r as runDaemonRestart } from "./daemon-cli-B_iflZzZ.js";
|