skykoi 2026.3.381 → 2026.3.382
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-DJhbwMcK.js → completion-cli-Cgn9V9Yi.js} +1 -1
- package/dist/{config-guard-Q3Pl253R.js → config-guard-D-KPEEh3.js} +4 -4
- package/dist/{doctor-BfH7c1Hp.js → doctor-avyHLn58.js} +1 -1
- package/dist/{doctor-completion-lahrpE_z.js → doctor-completion-Bgky03RU.js} +1 -1
- package/dist/entry.js +1 -1
- package/dist/{gateway-cli-s90jfqW_.js → gateway-cli-a1_NKkBz.js} +5 -5
- package/dist/index.js +8 -8
- package/dist/{onboarding-f7KcL7qR.js → onboarding-2M92MzZF.js} +3 -3
- package/dist/plugin-sdk/index.js +7 -7
- package/dist/{program-DSIl6v9h.js → program-Bz1TDywf.js} +3 -3
- package/dist/{register.subclis-9L79xJNr.js → register.subclis-DtKT5IYt.js} +4 -4
- package/dist/{run-main-qyMlhjLF.js → run-main-BeyzyGQQ.js} +9 -9
- package/dist/{tui-cli-juhjLupf.js → tui-cli-NTTLb66c.js} +1 -1
- package/dist/{tui-DC1slGZV.js → tui-yuAuvrAb.js} +211 -4
- package/dist/{update-cli-BNyQj6jL.js → update-cli-CDJKQnMK.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
|
+
356f06f799320804907cce69605fe7aeaa5ef5206ca96503345f43e1558bd366
|
|
@@ -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-DtKT5IYt.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-2M92MzZF.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-DtKT5IYt.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-avyHLn58.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-yuAuvrAb.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-Bgky03RU.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-Cgn9V9Yi.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-BeyzyGQQ.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-2M92MzZF.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-Bgky03RU.js";
|
|
117
|
+
import "./register.subclis-DtKT5IYt.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-Cgn9V9Yi.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-yuAuvrAb.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-D-KPEEh3.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-2M92MzZF.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-Bgky03RU.js";
|
|
107
|
+
import "./register.subclis-DtKT5IYt.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-avyHLn58.js";
|
|
124
|
+
import "./completion-cli-Cgn9V9Yi.js";
|
|
125
125
|
import "./service-audit-B_swanYW.js";
|
|
126
126
|
import "./hooks-status-CJBhXrQP.js";
|
|
127
|
-
import "./tui-
|
|
127
|
+
import "./tui-yuAuvrAb.js";
|
|
128
128
|
import "./channel-options-BI4411cy.js";
|
|
129
|
-
import { n as buildProgram } from "./program-
|
|
129
|
+
import { n as buildProgram } from "./program-Bz1TDywf.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-Bgky03RU.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-Cgn9V9Yi.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-yuAuvrAb.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
|
@@ -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
|
|
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 =
|
|
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) =>
|
|
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 ??
|
|
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 =
|
|
21801
|
+
function parseConfigJson5(raw, json5$1 = json5) {
|
|
21802
21802
|
try {
|
|
21803
21803
|
return {
|
|
21804
21804
|
ok: true,
|
|
21805
|
-
parsed: json5.parse(raw)
|
|
21805
|
+
parsed: json5$1.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 =
|
|
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-
|
|
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-D-KPEEh3.js";
|
|
9
|
+
import { a as getCommandPath, d as hasHelpOrVersion, l as getVerboseFlag } from "./register.subclis-DtKT5IYt.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-yuAuvrAb.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-a1_NKkBz.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-NTTLb66c.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-CDJKQnMK.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-Cgn9V9Yi.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-D-KPEEh3.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-2M92MzZF.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-Bgky03RU.js";
|
|
104
|
+
import { a as getCommandPath, c as getPrimaryCommand, d as hasHelpOrVersion } from "./register.subclis-DtKT5IYt.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-avyHLn58.js";
|
|
121
|
+
import "./completion-cli-Cgn9V9Yi.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-yuAuvrAb.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-Bz1TDywf.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-DtKT5IYt.js").then((n) => n.i);
|
|
212
212
|
await registerSubCliByName(program, primary);
|
|
213
213
|
}
|
|
214
214
|
if (!!primary && PLUGIN_CLI_COMMANDS.has(primary)) {
|
|
@@ -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-yuAuvrAb.js";
|
|
56
56
|
|
|
57
57
|
//#region src/cli/tui-cli.ts
|
|
58
58
|
function registerTuiCli(program) {
|
|
@@ -7,7 +7,7 @@ import { n as visibleWidth } from "./ansi-By7x1TI7.js";
|
|
|
7
7
|
import { a as buildKoiMainSessionKey, l as normalizeKoiId, u as normalizeMainKey, v as parseKoiSessionKey } from "./session-key-B2OXLVi_.js";
|
|
8
8
|
import { b as sleep } from "./utils-D019Z2NU.js";
|
|
9
9
|
import { T as resolveDefaultKoiWorkspaceDir, r as resolveDefaultKoiId, x as DEFAULT_USER_FILENAME } from "./koi-scope-7GA83nWp.js";
|
|
10
|
-
import { wt as SKYKOI_MODEL_DEFS } from "./model-selection-DANeZg-K.js";
|
|
10
|
+
import { H as resolveEnvApiKey, wt as SKYKOI_MODEL_DEFS } from "./model-selection-DANeZg-K.js";
|
|
11
11
|
import { t as VERSION } from "./version-BKRSzdyx.js";
|
|
12
12
|
import { o as loadConfig } from "./config-CLGE0n41.js";
|
|
13
13
|
import { C as isKeyRelease, D as wrapTextWithAnsi, E as visibleWidth$1, N as require_dist, O as CombinedAutocompleteProvider, S as Key, T as truncateToWidth, _ as SelectList, b as Text, d as ProcessTerminal, f as Spacer, g as Editor, h as Input, m as Markdown, p as SettingsList, v as Container, w as matchesKey, x as getEditorKeybindings, y as TUI } from "./dist-DmzuSdk3.js";
|
|
@@ -4220,7 +4220,7 @@ function countArchivedDone(history) {
|
|
|
4220
4220
|
return done;
|
|
4221
4221
|
}
|
|
4222
4222
|
function createEventHandlers(context) {
|
|
4223
|
-
const { chatLog, tui, state, setActivityStatus, setCurrentActivity, refreshSessionInfo, loadHistory, isLocalRunId, forgetLocalRunId, clearLocalRunIds, turnTracker, onTurnFinal, resolveKoiLabel, scheduleRender, onTasksUpdate, onAgentCountChange, isFastLaneEnabled, onFastVoiceRelay } = context;
|
|
4223
|
+
const { chatLog, tui, state, setActivityStatus, setCurrentActivity, refreshSessionInfo, loadHistory, isLocalRunId, forgetLocalRunId, clearLocalRunIds, turnTracker, onTurnFinal, resolveKoiLabel, scheduleRender, onTasksUpdate, onAgentCountChange, isFastLaneEnabled, onFastVoiceRelay, onReplyVisual } = context;
|
|
4224
4224
|
const requestRender = () => {
|
|
4225
4225
|
if (scheduleRender) scheduleRender();
|
|
4226
4226
|
else tui.requestRender();
|
|
@@ -4397,6 +4397,7 @@ function createEventHandlers(context) {
|
|
|
4397
4397
|
});
|
|
4398
4398
|
}
|
|
4399
4399
|
if (!wasLocalRun && finalText.trim()) playAlertChime();
|
|
4400
|
+
if (finalText.trim()) onReplyVisual?.(finalText);
|
|
4400
4401
|
const fastLaneOwnsVoice = isFastLaneEnabled?.() === true;
|
|
4401
4402
|
if (state.speakMode && finalText.trim()) if (fastLaneOwnsVoice) onFastVoiceRelay?.(finalText);
|
|
4402
4403
|
else speakChunks(splitSentences(finalText));
|
|
@@ -6251,6 +6252,21 @@ var ChatOverlay = class {
|
|
|
6251
6252
|
* watcher (wired in tui.ts) builds the scene and presents it here —
|
|
6252
6253
|
* the model can take the screen, restyle it, and animate at will.
|
|
6253
6254
|
*/
|
|
6255
|
+
function canvasStatePath() {
|
|
6256
|
+
return path.join(resolveStateDir(), "canvas.json");
|
|
6257
|
+
}
|
|
6258
|
+
function loadCanvasDefaultOn() {
|
|
6259
|
+
try {
|
|
6260
|
+
return JSON.parse(fs.readFileSync(canvasStatePath(), "utf8")).defaultOn !== false;
|
|
6261
|
+
} catch {
|
|
6262
|
+
return true;
|
|
6263
|
+
}
|
|
6264
|
+
}
|
|
6265
|
+
function saveCanvasDefaultOn(defaultOn) {
|
|
6266
|
+
try {
|
|
6267
|
+
fs.writeFileSync(canvasStatePath(), JSON.stringify({ defaultOn }, null, 2));
|
|
6268
|
+
} catch {}
|
|
6269
|
+
}
|
|
6254
6270
|
var CanvasMode = class {
|
|
6255
6271
|
constructor(deps) {
|
|
6256
6272
|
this.engine = null;
|
|
@@ -6263,6 +6279,10 @@ var CanvasMode = class {
|
|
|
6263
6279
|
isActive() {
|
|
6264
6280
|
return this.engine !== null;
|
|
6265
6281
|
}
|
|
6282
|
+
/** Label of the current scene ("pond", "auto", "presentation", "program"…). */
|
|
6283
|
+
getLabel() {
|
|
6284
|
+
return this.engine ? this.label : "";
|
|
6285
|
+
}
|
|
6266
6286
|
/** Wrap a scene so the chat strip draws on top of it every frame. */
|
|
6267
6287
|
withOverlay(scene) {
|
|
6268
6288
|
const overlay = this.overlay;
|
|
@@ -6465,6 +6485,157 @@ function createScreenSyncWatcher(deps) {
|
|
|
6465
6485
|
};
|
|
6466
6486
|
}
|
|
6467
6487
|
|
|
6488
|
+
//#endregion
|
|
6489
|
+
//#region src/tui/canvas/auto-visual.ts
|
|
6490
|
+
/**
|
|
6491
|
+
* @module tui/canvas/auto-visual
|
|
6492
|
+
*
|
|
6493
|
+
* Every response gets something DYNAMIC to show. After each koi reply the
|
|
6494
|
+
* "visual cortex" (the fast model) turns the exchange into a scene spec —
|
|
6495
|
+
* chart for numbers, boxes for comparisons, big type + celebration for wins,
|
|
6496
|
+
* a mood effect for chit-chat — chosen by the model, always animated.
|
|
6497
|
+
*
|
|
6498
|
+
* Guarantees:
|
|
6499
|
+
* - ALWAYS something: when the model call fails (offline, key, parse) a
|
|
6500
|
+
* deterministic local visual is built from the reply text itself.
|
|
6501
|
+
* - ALWAYS dynamic: a generated spec with no animated layer gets a mood
|
|
6502
|
+
* effect appended (hash-picked, deterministic per reply).
|
|
6503
|
+
* - Never fights the koi: an explicit `screen`-tool presentation outranks
|
|
6504
|
+
* auto-visuals (enforced by the caller via the scene label).
|
|
6505
|
+
*/
|
|
6506
|
+
const log = createSubsystemLogger("canvas");
|
|
6507
|
+
const GROQ_URL = "https://api.groq.com/openai/v1/chat/completions";
|
|
6508
|
+
const MODEL = "llama-3.3-70b-versatile";
|
|
6509
|
+
const MODEL_FALLBACK = "llama-3.1-8b-instant";
|
|
6510
|
+
const TIMEOUT_MS = 4e3;
|
|
6511
|
+
const ANIMATED_TYPES = new Set([
|
|
6512
|
+
"effect",
|
|
6513
|
+
"program",
|
|
6514
|
+
"video"
|
|
6515
|
+
]);
|
|
6516
|
+
const EFFECTS = [
|
|
6517
|
+
"fireflies",
|
|
6518
|
+
"waves",
|
|
6519
|
+
"matrix"
|
|
6520
|
+
];
|
|
6521
|
+
function hashText(text) {
|
|
6522
|
+
let h = 2166136261;
|
|
6523
|
+
for (let i = 0; i < text.length; i++) {
|
|
6524
|
+
h ^= text.charCodeAt(i);
|
|
6525
|
+
h = Math.imul(h, 16777619);
|
|
6526
|
+
}
|
|
6527
|
+
return h >>> 0;
|
|
6528
|
+
}
|
|
6529
|
+
/** A spec must move: append a deterministic mood effect when nothing animates. */
|
|
6530
|
+
function ensureAnimated(spec, seedText) {
|
|
6531
|
+
const layers = Array.isArray(spec.layers) ? [...spec.layers] : [];
|
|
6532
|
+
if (!layers.some((l) => ANIMATED_TYPES.has(String(l.type)))) {
|
|
6533
|
+
const effect = EFFECTS[hashText(seedText) % EFFECTS.length];
|
|
6534
|
+
layers.unshift({
|
|
6535
|
+
type: "effect",
|
|
6536
|
+
kind: effect,
|
|
6537
|
+
color: "#1E4258"
|
|
6538
|
+
});
|
|
6539
|
+
}
|
|
6540
|
+
return {
|
|
6541
|
+
...spec,
|
|
6542
|
+
layers
|
|
6543
|
+
};
|
|
6544
|
+
}
|
|
6545
|
+
/** Deterministic local visual — the ALWAYS fallback, no model needed. */
|
|
6546
|
+
function fallbackVisual(replyText) {
|
|
6547
|
+
const flat = replyText.replace(/```[\s\S]*?```/g, " ").replace(/\s+/g, " ").trim();
|
|
6548
|
+
const headline = flat.split(" ").filter(Boolean).slice(0, 3).join(" ").slice(0, 16) || "KOI";
|
|
6549
|
+
const body = flat.slice(0, 200);
|
|
6550
|
+
return {
|
|
6551
|
+
bg: "#0A121C",
|
|
6552
|
+
layers: [
|
|
6553
|
+
{
|
|
6554
|
+
type: "effect",
|
|
6555
|
+
kind: EFFECTS[hashText(flat) % EFFECTS.length],
|
|
6556
|
+
color: "#16344A"
|
|
6557
|
+
},
|
|
6558
|
+
{
|
|
6559
|
+
type: "bigtext",
|
|
6560
|
+
text: headline,
|
|
6561
|
+
x: "center",
|
|
6562
|
+
y: 3,
|
|
6563
|
+
color: "#8AB4F8",
|
|
6564
|
+
scale: 1
|
|
6565
|
+
},
|
|
6566
|
+
{
|
|
6567
|
+
type: "text",
|
|
6568
|
+
text: body,
|
|
6569
|
+
x: 4,
|
|
6570
|
+
y: 12,
|
|
6571
|
+
color: "#9BA3B2"
|
|
6572
|
+
}
|
|
6573
|
+
]
|
|
6574
|
+
};
|
|
6575
|
+
}
|
|
6576
|
+
const SYSTEM_PROMPT = [
|
|
6577
|
+
"You are Koi's visual cortex: after every reply, you choose what the terminal canvas should SHOW — maximally useful, always alive.",
|
|
6578
|
+
"Output ONLY JSON: {\"bg\":\"#0A121C\",\"layers\":[...]} with layer types:",
|
|
6579
|
+
"{\"type\":\"bigtext\",\"text\":\"SHORT\",\"x\":\"center\",\"y\":2,\"color\":\"#D97757\",\"scale\":1|2} — headlines, numbers, verdicts (keep ≤14 chars)",
|
|
6580
|
+
"{\"type\":\"text\",\"text\":\"line\\nline2\",\"x\":4,\"y\":12,\"color\":\"#9BA3B2\"} — supporting detail (≤4 short lines)",
|
|
6581
|
+
"{\"type\":\"box\",\"x\":2,\"y\":10,\"w\":40,\"h\":8,\"title\":\"…\"} — grouping/comparison",
|
|
6582
|
+
"{\"type\":\"chart\",\"kind\":\"spark|braille\",\"data\":[…numbers…],\"x\":4,\"y\":16,\"w\":50,\"h\":5,\"color\":\"#4EBA65\"} — ANY numbers in the exchange",
|
|
6583
|
+
"{\"type\":\"effect\",\"kind\":\"waves|matrix|fireflies\",\"color\":\"#1E4258\"} — mood/motion",
|
|
6584
|
+
"{\"type\":\"program\",\"source\":\"function update(dt,t,api){...} function draw(api){...}\"} — custom animation when nothing else fits (api: w,h,set,text,big,box,spark,line,rgb,hex,rand,state)",
|
|
6585
|
+
"Pick by content: numbers→chart with the REAL values; comparisons→boxes; success/celebration→bigtext + fireflies; errors/warnings→bigtext in #E5484D; casual talk→small headline + a calm effect; technical explanations→boxes/diagram-ish text.",
|
|
6586
|
+
"Mood matters: pick colors and effects that fit the tone. ALWAYS include at least one effect or program layer so the screen is alive. ≤6 layers. Canvas is ~110x35 cells; leave the bottom 6 rows empty (chat strip)."
|
|
6587
|
+
].join("\n");
|
|
6588
|
+
/**
|
|
6589
|
+
* Generate the per-response visual. Never throws, never returns null —
|
|
6590
|
+
* falls back to the deterministic local visual.
|
|
6591
|
+
*/
|
|
6592
|
+
async function generateResponseVisual(params) {
|
|
6593
|
+
const apiKey = params.apiKey ?? resolveEnvApiKey("groq")?.apiKey;
|
|
6594
|
+
const fetchImpl = params.fetchImpl ?? fetch;
|
|
6595
|
+
if (!apiKey) return ensureAnimated(fallbackVisual(params.replyText), params.replyText);
|
|
6596
|
+
const user = `user said: ${params.userText.slice(0, 600)}\n\nkoi replied: ${params.replyText.slice(0, 1500)}`;
|
|
6597
|
+
for (const model of [MODEL, MODEL_FALLBACK]) {
|
|
6598
|
+
const controller = new AbortController();
|
|
6599
|
+
const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
6600
|
+
try {
|
|
6601
|
+
const res = await fetchImpl(GROQ_URL, {
|
|
6602
|
+
method: "POST",
|
|
6603
|
+
headers: {
|
|
6604
|
+
"content-type": "application/json",
|
|
6605
|
+
authorization: `Bearer ${apiKey}`
|
|
6606
|
+
},
|
|
6607
|
+
body: JSON.stringify({
|
|
6608
|
+
model,
|
|
6609
|
+
temperature: .6,
|
|
6610
|
+
max_tokens: 700,
|
|
6611
|
+
response_format: { type: "json_object" },
|
|
6612
|
+
messages: [{
|
|
6613
|
+
role: "system",
|
|
6614
|
+
content: SYSTEM_PROMPT
|
|
6615
|
+
}, {
|
|
6616
|
+
role: "user",
|
|
6617
|
+
content: user
|
|
6618
|
+
}]
|
|
6619
|
+
}),
|
|
6620
|
+
signal: controller.signal
|
|
6621
|
+
});
|
|
6622
|
+
if (res.status === 429) continue;
|
|
6623
|
+
if (!res.ok) break;
|
|
6624
|
+
const match = ((await res.json()).choices?.[0]?.message?.content ?? "").match(/\{[\s\S]*\}/);
|
|
6625
|
+
if (!match) break;
|
|
6626
|
+
const parsed = JSON.parse(match[0]);
|
|
6627
|
+
if (!Array.isArray(parsed.layers) || parsed.layers.length === 0) break;
|
|
6628
|
+
return ensureAnimated(parsed, params.replyText);
|
|
6629
|
+
} catch (err) {
|
|
6630
|
+
log.debug(`auto-visual error on ${model}: ${String(err)}`);
|
|
6631
|
+
break;
|
|
6632
|
+
} finally {
|
|
6633
|
+
clearTimeout(timer);
|
|
6634
|
+
}
|
|
6635
|
+
}
|
|
6636
|
+
return ensureAnimated(fallbackVisual(params.replyText), params.replyText);
|
|
6637
|
+
}
|
|
6638
|
+
|
|
6468
6639
|
//#endregion
|
|
6469
6640
|
//#region src/tui/tui-local-shell.ts
|
|
6470
6641
|
function createLocalShellRunner(deps) {
|
|
@@ -7657,7 +7828,8 @@ async function runTui(opts) {
|
|
|
7657
7828
|
scheduleRender();
|
|
7658
7829
|
},
|
|
7659
7830
|
isFastLaneEnabled: () => fastMode,
|
|
7660
|
-
onFastVoiceRelay: (finalText) => relayFinalToVoice(finalText)
|
|
7831
|
+
onFastVoiceRelay: (finalText) => relayFinalToVoice(finalText),
|
|
7832
|
+
onReplyVisual: (finalText) => presentAutoVisual(finalText)
|
|
7661
7833
|
});
|
|
7662
7834
|
const { runLocalShellLine } = createLocalShellRunner({
|
|
7663
7835
|
chatLog,
|
|
@@ -7702,7 +7874,18 @@ async function runTui(opts) {
|
|
|
7702
7874
|
triggerRelogin: () => triggerRelogin(),
|
|
7703
7875
|
runLocalShell: (command) => runLocalShellLine(`!${command}`),
|
|
7704
7876
|
openCanvas: (name) => {
|
|
7705
|
-
const
|
|
7877
|
+
const arg = (name ?? "").trim().toLowerCase();
|
|
7878
|
+
if (arg.startsWith("default")) {
|
|
7879
|
+
const value = arg.split(/\s+/)[1];
|
|
7880
|
+
if (value !== "on" && value !== "off") {
|
|
7881
|
+
chatLog.addSystem("usage: /canvas default on|off");
|
|
7882
|
+
return true;
|
|
7883
|
+
}
|
|
7884
|
+
saveCanvasDefaultOn(value === "on");
|
|
7885
|
+
chatLog.addSystem(value === "on" ? "canvas default on — new sessions boot into the visual terminal" : "canvas default off — new sessions boot into the classic chat");
|
|
7886
|
+
return true;
|
|
7887
|
+
}
|
|
7888
|
+
const built = buildScene({ name: arg || "pond" });
|
|
7706
7889
|
if (!built) return false;
|
|
7707
7890
|
canvasMode.enter(built.scene, built.label);
|
|
7708
7891
|
return true;
|
|
@@ -7738,14 +7921,34 @@ async function runTui(opts) {
|
|
|
7738
7921
|
speakFront(digest ?? fallback);
|
|
7739
7922
|
})();
|
|
7740
7923
|
};
|
|
7924
|
+
let lastUserText = "";
|
|
7925
|
+
let visualSeq = 0;
|
|
7926
|
+
const presentAutoVisual = (replyText) => {
|
|
7927
|
+
if (!canvasMode.isActive() || !replyText.trim()) return;
|
|
7928
|
+
const label = canvasMode.getLabel();
|
|
7929
|
+
if (label === "presentation" || label === "program") return;
|
|
7930
|
+
const seq = ++visualSeq;
|
|
7931
|
+
generateResponseVisual({
|
|
7932
|
+
userText: lastUserText,
|
|
7933
|
+
replyText
|
|
7934
|
+
}).then((spec) => {
|
|
7935
|
+
if (seq !== visualSeq || !canvasMode.isActive()) return;
|
|
7936
|
+
const current = canvasMode.getLabel();
|
|
7937
|
+
if (current === "presentation" || current === "program") return;
|
|
7938
|
+
const built = buildScene({ spec });
|
|
7939
|
+
if (built) canvasMode.enter(built.scene, "auto");
|
|
7940
|
+
});
|
|
7941
|
+
};
|
|
7741
7942
|
let fastBubbleSeq = 0;
|
|
7742
7943
|
const presentFastReply = (text) => {
|
|
7743
7944
|
chatLog.finalizeAssistant(text, `fastlane-${++fastBubbleSeq}`);
|
|
7744
7945
|
pushTranscript("assistant", text);
|
|
7745
7946
|
speakFront(text);
|
|
7947
|
+
presentAutoVisual(text);
|
|
7746
7948
|
tui.requestRender();
|
|
7747
7949
|
};
|
|
7748
7950
|
const sendMessageFast = async (value) => {
|
|
7951
|
+
lastUserText = value;
|
|
7749
7952
|
if (!fastMode) {
|
|
7750
7953
|
await sendMessage(value);
|
|
7751
7954
|
return;
|
|
@@ -8094,6 +8297,10 @@ async function runTui(opts) {
|
|
|
8094
8297
|
}
|
|
8095
8298
|
setConnectionStatus(reconnected ? "gateway reconnected" : "gateway connected", 4e3);
|
|
8096
8299
|
tui.requestRender();
|
|
8300
|
+
if (!reconnected && !autoMessage && process.stdout.isTTY && loadCanvasDefaultOn()) {
|
|
8301
|
+
const built = buildScene({ name: "pond" });
|
|
8302
|
+
if (built && !canvasMode.isActive()) canvasMode.enter(built.scene, built.label);
|
|
8303
|
+
}
|
|
8097
8304
|
if (!autoMessageSent && autoMessage) {
|
|
8098
8305
|
autoMessageSent = true;
|
|
8099
8306
|
await sendMessage(autoMessage);
|
|
@@ -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-Bgky03RU.js";
|
|
97
|
+
import "./register.subclis-DtKT5IYt.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-avyHLn58.js";
|
|
104
|
+
import { r as installCompletion } from "./completion-cli-Cgn9V9Yi.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";
|