skykoi 2026.3.364 → 2026.3.366

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 (43) hide show
  1. package/dist/{archive-CESecfeV.js → archive-lc4aTrME.js} +1 -1
  2. package/dist/build-info.json +2 -2
  3. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  4. package/dist/{capture-service-BPwzlSOE.js → capture-service-Cf1TbNjO.js} +205 -9
  5. package/dist/{channel-options-zwslyp06.js → channel-options-DyDeQlCI.js} +1 -1
  6. package/dist/{channels-cli-CWt6ydPN.js → channels-cli-DrMs9_n6.js} +6 -6
  7. package/dist/cli/daemon-cli.js +1 -1
  8. package/dist/{cli-DNGeeH_O.js → cli-Bp5p4fp9.js} +1 -1
  9. package/dist/{completion-cli-Rdq7S5KE.js → completion-cli-DvRTz9tW.js} +1 -1
  10. package/dist/{config-guard-Dd4poXH0.js → config-guard-D2MuFG-R.js} +13 -13
  11. package/dist/{configure-DFrODS29.js → configure-YnJ1tddp.js} +3 -3
  12. package/dist/{daemon-cli-2wt4he6F.js → daemon-cli-CWGXZMX3.js} +1 -1
  13. package/dist/{deps-0dHAqQPZ.js → deps-bxV4Fhqd.js} +1 -1
  14. package/dist/{doctor-Cjp7w46N.js → doctor-BmZlvlO9.js} +3 -3
  15. package/dist/{doctor-completion-Cu9-JAii.js → doctor-completion-B_DB6yKB.js} +1 -1
  16. package/dist/entry.js +1 -1
  17. package/dist/extension-api.js +1 -1
  18. package/dist/{gateway-cli-DlCltfZd.js → gateway-cli-CKUmcFLG.js} +16 -16
  19. package/dist/{github-copilot-auth-CRPmNlXU.js → github-copilot-auth-B8anaBMU.js} +1 -1
  20. package/dist/{health-format-Cv2SBzMq.js → health-format-HJ49Tlyk.js} +1 -1
  21. package/dist/{hooks-cli-D_pptHPL.js → hooks-cli-tNp3Hoa1.js} +3 -3
  22. package/dist/index.js +19 -19
  23. package/dist/{installs-J0qld2XT.js → installs-CgF6acAX.js} +1 -1
  24. package/dist/{koi-CwOIbGaZ.js → koi-C7h4YyTn.js} +2 -2
  25. package/dist/{models-cli-CGHn_wNj.js → models-cli-Duetla7W.js} +2 -2
  26. package/dist/{onboard-channels-CwSayqE8.js → onboard-channels-Cg-RtF_Q.js} +2 -2
  27. package/dist/{onboard-skills-D8KGRTxy.js → onboard-skills-AM1-GoCb.js} +3 -3
  28. package/dist/{onboarding-jtvwJRjY.js → onboarding-BXqZpqCS.js} +6 -6
  29. package/dist/{plugin-registry-DdBnvr9h.js → plugin-registry-OEYl6Glv.js} +1 -1
  30. package/dist/plugin-sdk/capture/audio-capture.d.ts +4 -0
  31. package/dist/plugin-sdk/capture/capture-store.d.ts +1 -1
  32. package/dist/plugin-sdk/index.js +23 -23
  33. package/dist/plugin-sdk/{pi-model-discovery-szlzYGsC.js → pi-model-discovery-CBWcyyqn.js} +3 -3
  34. package/dist/{plugins-cli-DkDnozFB.js → plugins-cli-Drazdm-4.js} +5 -5
  35. package/dist/{program-DqVGs3Mv.js → program-B4F-KxtZ.js} +4 -4
  36. package/dist/{register.subclis-BfuAlPlS.js → register.subclis-C514WXu2.js} +10 -10
  37. package/dist/{reply-mOlXreGp.js → reply-kg3drq1N.js} +1 -1
  38. package/dist/{run-main-ByOnbm2b.js → run-main-CWySis6K.js} +20 -20
  39. package/dist/{server-node-events-5bZjkTUd.js → server-node-events-B1vg4hw3.js} +3 -3
  40. package/dist/{status-BXwm4BKo.js → status-CrxsbMfq.js} +1 -1
  41. package/dist/{update-BogXnYzz.js → update-DCBf0mrX.js} +1 -1
  42. package/dist/{update-cli-6HmBtoQZ.js → update-cli-CHpskZMu.js} +11 -11
  43. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import { i as __require, o as __toESM, t as __commonJSMin } from "./chunk-D_gEzPfs.js";
2
- import { mt as require_inherits } from "./reply-mOlXreGp.js";
2
+ import { mt as require_inherits } from "./reply-kg3drq1N.js";
3
3
  import path from "node:path";
4
4
  import fs from "node:fs/promises";
5
5
  import * as tar from "tar";
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2026.3.364",
2
+ "version": "2026.3.366",
3
3
  "commit": "4bd60b7c1b294bb24b257d2f381ec929031df39c",
4
- "builtAt": "2026-06-25T09:05:11.591Z"
4
+ "builtAt": "2026-06-25T09:30:50.695Z"
5
5
  }
@@ -1 +1 @@
1
- 193069b87e141ae2579ebcb687c1267e8fb67c1ba068383abae63b70a0f45639
1
+ 8cc8d318fda386cc3a78e86697fb9c588ce6d4e1edbcdd5c2485df465242429d
@@ -1,7 +1,7 @@
1
1
  import { appendFileSync, closeSync, copyFileSync, createReadStream, existsSync, mkdirSync, openSync, readFileSync, readSync, statSync, unlinkSync, watch, writeFileSync } from "node:fs";
2
- import { extname, join, relative } from "node:path";
2
+ import { dirname, extname, join, relative } from "node:path";
3
3
  import { homedir } from "node:os";
4
- import { execFile, execSync } from "node:child_process";
4
+ import { execFile, execFileSync, execSync, spawn } from "node:child_process";
5
5
 
6
6
  //#region src/capture/terminal-capture.ts
7
7
  const ITERM_SCRIPT = `
@@ -1386,6 +1386,104 @@ function startMessageCapture() {
1386
1386
  } };
1387
1387
  }
1388
1388
 
1389
+ //#endregion
1390
+ //#region src/capture/audio-capture.ts
1391
+ const AUDIO_LIVE_FILE$1 = join(homedir(), ".skykoi", "capture", "audio-live.jsonl");
1392
+ function findPackageRoot() {
1393
+ let dir = dirname(new URL(import.meta.url).pathname);
1394
+ for (let i = 0; i < 10; i++) {
1395
+ if (existsSync(join(dir, "package.json"))) return dir;
1396
+ dir = dirname(dir);
1397
+ }
1398
+ return dir;
1399
+ }
1400
+ function daemonDir() {
1401
+ return join(findPackageRoot(), "src", "capture", "audio-daemon");
1402
+ }
1403
+ function daemonBinary() {
1404
+ return join(daemonDir(), "audio-daemon");
1405
+ }
1406
+ function isDaemonRunning() {
1407
+ try {
1408
+ return execFileSync("pgrep", ["-f", "audio-daemon"], {
1409
+ encoding: "utf8",
1410
+ timeout: 3e3
1411
+ }).trim().length > 0;
1412
+ } catch {
1413
+ return false;
1414
+ }
1415
+ }
1416
+ function compileDaemon() {
1417
+ const dir = daemonDir();
1418
+ if (!existsSync(join(dir, "main.swift"))) return false;
1419
+ try {
1420
+ execFileSync("swiftc", [
1421
+ "-O",
1422
+ "-o",
1423
+ "audio-daemon",
1424
+ "main.swift",
1425
+ "-framework",
1426
+ "AVFoundation",
1427
+ "-framework",
1428
+ "Speech",
1429
+ "-framework",
1430
+ "ScreenCaptureKit",
1431
+ "-framework",
1432
+ "CoreMedia"
1433
+ ], {
1434
+ cwd: dir,
1435
+ timeout: 12e4
1436
+ });
1437
+ return true;
1438
+ } catch (err) {
1439
+ console.error(`[capture] Audio daemon compilation failed: ${err}`);
1440
+ return false;
1441
+ }
1442
+ }
1443
+ function startAudioCapture() {
1444
+ if (process.platform !== "darwin") return { stop: () => {} };
1445
+ if (isDaemonRunning()) {
1446
+ console.log("[capture] Audio daemon already running");
1447
+ return { stop: () => {
1448
+ try {
1449
+ execFileSync("pkill", ["-f", "audio-daemon"], { timeout: 3e3 });
1450
+ } catch {}
1451
+ } };
1452
+ }
1453
+ const binary = daemonBinary();
1454
+ if (!existsSync(binary)) {
1455
+ console.log("[capture] Audio daemon not found, compiling...");
1456
+ if (!compileDaemon()) {
1457
+ console.error("[capture] Audio daemon compilation failed — audio capture disabled");
1458
+ return { stop: () => {} };
1459
+ }
1460
+ }
1461
+ try {
1462
+ writeFileSync(AUDIO_LIVE_FILE$1, "");
1463
+ } catch {}
1464
+ let proc = null;
1465
+ try {
1466
+ proc = spawn(binary, [], {
1467
+ stdio: "ignore",
1468
+ detached: true
1469
+ });
1470
+ proc.unref();
1471
+ console.log(`[capture] Audio daemon started (PID ${proc.pid})`);
1472
+ } catch (err) {
1473
+ console.error(`[capture] Audio daemon failed to start: ${err}`);
1474
+ return { stop: () => {} };
1475
+ }
1476
+ const pid = proc?.pid;
1477
+ return { stop: () => {
1478
+ if (pid) try {
1479
+ process.kill(pid, "SIGTERM");
1480
+ } catch {}
1481
+ try {
1482
+ execFileSync("pkill", ["-f", "audio-daemon"], { timeout: 3e3 });
1483
+ } catch {}
1484
+ } };
1485
+ }
1486
+
1389
1487
  //#endregion
1390
1488
  //#region src/capture/capture-service.ts
1391
1489
  /**
@@ -1397,7 +1495,9 @@ function startMessageCapture() {
1397
1495
  * receives raw data on every turn.
1398
1496
  */
1399
1497
  const INPUT_LIVE_FILE = join(homedir(), ".skykoi", "capture", "input-live.jsonl");
1498
+ const AUDIO_LIVE_FILE = join(homedir(), ".skykoi", "capture", "audio-live.jsonl");
1400
1499
  let inputFileLastReadOffset = -1;
1500
+ let audioFileLastReadOffset = -1;
1401
1501
  let lastTerminalSnapshot = [];
1402
1502
  let lastProcessSnapshot = null;
1403
1503
  const TERMINAL_POLL_MS = 5e3;
@@ -1435,11 +1535,13 @@ function buildCaptureContextBlock() {
1435
1535
  const ts = typeof evt.ts === "number" ? evt.ts : Date.now();
1436
1536
  let source = "input";
1437
1537
  if (type === "clipboard") source = "clipboard";
1438
- else if (type === "window_title") source = "window";
1538
+ else if (type === "window_title" || type === "document") source = "window";
1439
1539
  else if (type === "sleep" || type === "wake" || type === "screen_off" || type === "screen_on" || type === "screen_locked" || type === "screen_unlocked" || type === "idle_start" || type === "idle_end" || type === "power" || type === "wifi" || type === "volume" || type === "display_config" || type === "bluetooth" || type === "usb" || type === "volume_mount" || type === "volume_unmount") source = "system";
1540
+ else if (type === "meeting") source = "system";
1440
1541
  else if (type === "download") source = "downloads";
1441
1542
  else if (type === "location") source = "location";
1442
- else if (type === "spotlight") source = "input";
1543
+ else if (type === "ax_content") source = "screen";
1544
+ else if (type === "spotlight" || type === "focused_element" || type === "selection" || type === "clicked_element" || type === "undo" || type === "redo" || type === "drag") source = "input";
1443
1545
  directInputs.push({
1444
1546
  source,
1445
1547
  ts,
@@ -1450,8 +1552,44 @@ function buildCaptureContextBlock() {
1450
1552
  }
1451
1553
  }
1452
1554
  } catch {}
1453
- const allEvents = [...events, ...directInputs];
1454
- console.log(`[capture] buildCaptureContextBlock: storeEvents=${events.length}, directInputs=${directInputs.length}, total=${allEvents.length}, fileOffset=${inputFileLastReadOffset}`);
1555
+ const audioInputs = [];
1556
+ try {
1557
+ if (existsSync(AUDIO_LIVE_FILE)) {
1558
+ const audioFileSize = statSync(AUDIO_LIVE_FILE).size;
1559
+ if (audioFileLastReadOffset < 0) audioFileLastReadOffset = audioFileSize;
1560
+ if (audioFileSize > audioFileLastReadOffset) {
1561
+ const buf = Buffer.alloc(audioFileSize - audioFileLastReadOffset);
1562
+ const fd = openSync(AUDIO_LIVE_FILE, "r");
1563
+ try {
1564
+ readSync(fd, buf, 0, buf.length, audioFileLastReadOffset);
1565
+ } finally {
1566
+ closeSync(fd);
1567
+ }
1568
+ audioFileLastReadOffset = audioFileSize;
1569
+ for (const line of buf.toString("utf8").split("\n")) {
1570
+ if (!line.trim()) continue;
1571
+ try {
1572
+ const evt = JSON.parse(line);
1573
+ const type = evt.type;
1574
+ if (type === "mic_transcript" || type === "audio_transcript") {
1575
+ const ts = typeof evt.ts === "number" ? evt.ts : Date.now();
1576
+ audioInputs.push({
1577
+ source: "audio",
1578
+ ts,
1579
+ data: evt
1580
+ });
1581
+ }
1582
+ } catch {}
1583
+ }
1584
+ }
1585
+ }
1586
+ } catch {}
1587
+ const allEvents = [
1588
+ ...events,
1589
+ ...directInputs,
1590
+ ...audioInputs
1591
+ ];
1592
+ console.log(`[capture] buildCaptureContextBlock: storeEvents=${events.length}, directInputs=${directInputs.length}, audioInputs=${audioInputs.length}, total=${allEvents.length}`);
1455
1593
  if (allEvents.length === 0) return "";
1456
1594
  const sections = [];
1457
1595
  const terminals = allEvents.filter((e) => e.source === "terminal");
@@ -1483,6 +1621,20 @@ function buildCaptureContextBlock() {
1483
1621
  else if (d.type === "app_switch") sections.push(`[${ts}] APP_SWITCH ${d.prev} → ${d.app}`);
1484
1622
  else if (d.type === "mouse_move") sections.push(`[${ts}] MOUSE (${d.x},${d.y}) in ${d.app}`);
1485
1623
  else if (d.type === "spotlight") sections.push(`[${ts}] SPOTLIGHT_SEARCH "${d.query}"`);
1624
+ else if (d.type === "clicked_element") {
1625
+ const label = d.title || d.description || d.value || "";
1626
+ if (label) sections.push(`[${ts}] CLICKED [${d.role}] ${String(label).slice(0, 200)} in ${d.app}`);
1627
+ } else if (d.type === "focused_element") {
1628
+ const val = d.value ? `: ${String(d.value).slice(0, 100)}` : "";
1629
+ sections.push(`[${ts}] FOCUS [${d.role}] ${d.title || ""}${val} in ${d.app}`);
1630
+ } else if (d.type === "selection") {
1631
+ sections.push(`[${ts}] SELECTED (${d.length} chars) in ${d.app}`);
1632
+ sections.push("```");
1633
+ sections.push(String(d.text).slice(0, 1e3));
1634
+ sections.push("```");
1635
+ } else if (d.type === "undo") sections.push(`[${ts}] UNDO in ${d.app}`);
1636
+ else if (d.type === "redo") sections.push(`[${ts}] REDO in ${d.app}`);
1637
+ else if (d.type === "drag") sections.push(`[${ts}] DRAG (${d.startX},${d.startY})→(${d.endX},${d.endY}) in ${d.app}`);
1486
1638
  }
1487
1639
  }
1488
1640
  if (processes.length > 0) {
@@ -1537,7 +1689,8 @@ function buildCaptureContextBlock() {
1537
1689
  for (const e of windows) {
1538
1690
  const d = e.data;
1539
1691
  const ts = new Date(e.ts).toISOString().slice(11, 19);
1540
- sections.push(`[${ts}] ${d.app} ${d.title ?? d.windowTitle ?? ""}`);
1692
+ if (d.type === "document") sections.push(`[${ts}] DOCUMENT ${d.app}: ${d.url}`);
1693
+ else sections.push(`[${ts}] ${d.app} — ${d.title ?? d.windowTitle ?? ""}`);
1541
1694
  }
1542
1695
  }
1543
1696
  const browsers = allEvents.filter((e) => e.source === "browser");
@@ -1576,8 +1729,17 @@ function buildCaptureContextBlock() {
1576
1729
  }
1577
1730
  const screens = allEvents.filter((e) => e.source === "screen");
1578
1731
  if (screens.length > 0) {
1579
- const d = screens.at(-1).data;
1580
- if (d.text) {
1732
+ const axContent = screens.filter((e) => e.data.type === "ax_content").at(-1);
1733
+ if (axContent) {
1734
+ const d = axContent.data;
1735
+ sections.push(`## App Content (${d.app} — ${d.elements} elements)`);
1736
+ sections.push("```");
1737
+ sections.push(String(d.content).slice(0, 12e3));
1738
+ sections.push("```");
1739
+ }
1740
+ const ocrContent = screens.filter((e) => e.data.type === "ocr").at(-1);
1741
+ if (ocrContent && !axContent) {
1742
+ const d = ocrContent.data;
1581
1743
  sections.push(`## Screen Content (OCR of ${d.app})`);
1582
1744
  sections.push("```");
1583
1745
  sections.push(String(d.text).slice(0, 1e4));
@@ -1628,6 +1790,10 @@ function buildCaptureContextBlock() {
1628
1790
  sections.push(`[${ts}] USB ${devs?.join(", ") || "none"}`);
1629
1791
  } else if (t === "volume_mount") sections.push(`[${ts}] MOUNTED ${d.path}`);
1630
1792
  else if (t === "volume_unmount") sections.push(`[${ts}] UNMOUNTED ${d.path}`);
1793
+ else if (t === "meeting") if (d.inMeeting) {
1794
+ const names = d.apps?.map((a) => `${a.app}${a.active ? "" : " (bg)"}`).join(", ") ?? "";
1795
+ sections.push(`[${ts}] IN MEETING: ${names}`);
1796
+ } else sections.push(`[${ts}] NO ACTIVE MEETING`);
1631
1797
  }
1632
1798
  }
1633
1799
  const downloads = allEvents.filter((e) => e.source === "downloads");
@@ -1660,6 +1826,30 @@ function buildCaptureContextBlock() {
1660
1826
  sections.push(`[${ts}] ${platform} ${dir} ${d.from}: ${String(d.text).slice(0, 200)}`);
1661
1827
  }
1662
1828
  }
1829
+ const audioEvents = allEvents.filter((e) => e.source === "audio");
1830
+ if (audioEvents.length > 0) {
1831
+ const micEvents = audioEvents.filter((e) => e.data.type === "mic_transcript");
1832
+ const systemAudioEvents = audioEvents.filter((e) => e.data.type === "audio_transcript");
1833
+ if (micEvents.length > 0 || systemAudioEvents.length > 0) {
1834
+ sections.push("## Audio Transcription (live)");
1835
+ if (micEvents.length > 0) {
1836
+ sections.push("### Microphone (you):");
1837
+ for (const e of micEvents) {
1838
+ const ts = new Date(e.ts).toISOString().slice(11, 19);
1839
+ const final = e.data.isFinal ? "" : " [partial]";
1840
+ sections.push(`[${ts}]${final} ${e.data.text}`);
1841
+ }
1842
+ }
1843
+ if (systemAudioEvents.length > 0) {
1844
+ sections.push("### Device Audio (others/media):");
1845
+ for (const e of systemAudioEvents) {
1846
+ const ts = new Date(e.ts).toISOString().slice(11, 19);
1847
+ const final = e.data.isFinal ? "" : " [partial]";
1848
+ sections.push(`[${ts}]${final} ${e.data.text}`);
1849
+ }
1850
+ }
1851
+ }
1852
+ }
1663
1853
  if (sections.length === 0) return "";
1664
1854
  return "# Device Activity (exact, real-time)\n\n" + sections.join("\n");
1665
1855
  }
@@ -1833,6 +2023,12 @@ async function startCaptureService(opts) {
1833
2023
  } catch (err) {
1834
2024
  console.error(`[capture] Message capture failed to start: ${err}`);
1835
2025
  }
2026
+ try {
2027
+ const audioHandle = startAudioCapture();
2028
+ stops.push(audioHandle.stop);
2029
+ } catch (err) {
2030
+ console.error(`[capture] Audio capture failed to start: ${err}`);
2031
+ }
1836
2032
  const flushTimer = setInterval(() => {
1837
2033
  if (!stopped) flushToDisk();
1838
2034
  }, FLUSH_INTERVAL_MS);
@@ -2,7 +2,7 @@ import { O as CHAT_CHANNEL_ORDER } from "./subsystem-hATE68va.js";
2
2
  import { t as isTruthyEnvValue } from "./env-ChCKTuXK.js";
3
3
  import { n as listChannelPlugins } from "./plugins-BXfIVhTg.js";
4
4
  import { i as listChannelPluginCatalogEntries } from "./plugin-auto-enable-Cg3LRidd.js";
5
- import { t as ensurePluginRegistryLoaded } from "./plugin-registry-DdBnvr9h.js";
5
+ import { t as ensurePluginRegistryLoaded } from "./plugin-registry-OEYl6Glv.js";
6
6
 
7
7
  //#region src/cli/channel-options.ts
8
8
  function dedupe(values) {
@@ -1,5 +1,5 @@
1
1
  import "./pi-embedded-helpers-VJ9hOBTv.js";
2
- import { Gt as parseDiscordTarget, Kt as fetchChannelPermissionsDiscord, in as createSlackWebClient, lt as loadProviderUsageSummary, ut as formatUsageReportLines } from "./reply-mOlXreGp.js";
2
+ import { Gt as parseDiscordTarget, Kt as fetchChannelPermissionsDiscord, in as createSlackWebClient, lt as loadProviderUsageSummary, ut as formatUsageReportLines } from "./reply-kg3drq1N.js";
3
3
  import { f as danger, s as defaultRuntime, w as getResolvedLoggerSettings } from "./subsystem-hATE68va.js";
4
4
  import "./paths-VdmjGGyc.js";
5
5
  import { r as theme } from "./theme-C5EwWDWE.js";
@@ -73,20 +73,20 @@ import "./event-log-BJRHlOn8.js";
73
73
  import { t as resolveChannelDefaultAccountId } from "./helpers-y1KKH5pe.js";
74
74
  import "./note-DRoVRuAi.js";
75
75
  import { t as createClackPrompter } from "./clack-prompter-B9o3eQeW.js";
76
- import { i as reloadOnboardingPluginRegistry, n as setupChannels, r as ensureOnboardingPluginInstalled } from "./onboard-channels-CwSayqE8.js";
76
+ import { i as reloadOnboardingPluginRegistry, n as setupChannels, r as ensureOnboardingPluginInstalled } from "./onboard-channels-Cg-RtF_Q.js";
77
77
  import { i as listChannelPluginCatalogEntries } from "./plugin-auto-enable-Cg3LRidd.js";
78
- import "./archive-CESecfeV.js";
78
+ import "./archive-lc4aTrME.js";
79
79
  import "./skill-scanner-CBHxr1An.js";
80
- import "./installs-J0qld2XT.js";
80
+ import "./installs-CgF6acAX.js";
81
81
  import "./service-BGkVTESM.js";
82
82
  import "./systemd-BzTSelz8.js";
83
83
  import "./diagnostics-CFV2YxpG.js";
84
84
  import { t as collectChannelStatusIssues } from "./channels-status-issues-BLygTpUh.js";
85
- import { n as hasExplicitOptions } from "./plugin-registry-DdBnvr9h.js";
85
+ import { n as hasExplicitOptions } from "./plugin-registry-OEYl6Glv.js";
86
86
  import "./daemon-runtime-r19-i0S0.js";
87
87
  import "./ensure-local-gateway-VbJtdpui.js";
88
88
  import { n as runChannelLoginAll, r as runChannelLogout, t as runChannelLogin } from "./channel-auth-DrJ2FCUT.js";
89
- import { t as formatCliChannelOptions } from "./channel-options-zwslyp06.js";
89
+ import { t as formatCliChannelOptions } from "./channel-options-DyDeQlCI.js";
90
90
  import { t as buildChannelAccountSnapshot } from "./status-BLjOBDvD.js";
91
91
  import { t as parseLogLine } from "./parse-log-line-cWE1HOyo.js";
92
92
  import fs from "node:fs/promises";
@@ -1,2 +1,2 @@
1
1
  // Legacy shim for pre-tsdown update-cli imports.
2
- export { registerDaemonCli, runDaemonInstall, runDaemonRestart, runDaemonStart, runDaemonStatus, runDaemonStop, runDaemonUninstall } from "../daemon-cli-2wt4he6F.js";
2
+ export { registerDaemonCli, runDaemonInstall, runDaemonRestart, runDaemonStart, runDaemonStatus, runDaemonStop, runDaemonUninstall } from "../daemon-cli-CWGXZMX3.js";
@@ -1,5 +1,5 @@
1
1
  import "./pi-embedded-helpers-VJ9hOBTv.js";
2
- import { ct as loadSKYKOIPlugins } from "./reply-mOlXreGp.js";
2
+ import { ct as loadSKYKOIPlugins } from "./reply-kg3drq1N.js";
3
3
  import { t as createSubsystemLogger } from "./subsystem-hATE68va.js";
4
4
  import "./paths-VdmjGGyc.js";
5
5
  import "./theme-C5EwWDWE.js";
@@ -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-BfuAlPlS.js";
3
+ import { n as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-C514WXu2.js";
4
4
  import path from "node:path";
5
5
  import os from "node:os";
6
6
  import fs from "node:fs/promises";
@@ -1,4 +1,4 @@
1
- import { B as CHANNEL_MESSAGE_ACTION_NAMES, Bn as lookupContextTokens, F as runMessageAction, Ot as registerMemoryCli, R as formatTargetDisplay, it as CHANNEL_TARGET_DESCRIPTION, kt as runMemoryStatus, rt as CHANNEL_TARGETS_DESCRIPTION } from "./reply-mOlXreGp.js";
1
+ import { B as CHANNEL_MESSAGE_ACTION_NAMES, Bn as lookupContextTokens, F as runMessageAction, Ot as registerMemoryCli, R as formatTargetDisplay, it as CHANNEL_TARGET_DESCRIPTION, kt as runMemoryStatus, rt as CHANNEL_TARGETS_DESCRIPTION } from "./reply-kg3drq1N.js";
2
2
  import { I as normalizeChatChannelId, M as getChatChannelMeta, c as restoreTerminalState, f as danger, k as DEFAULT_CHAT_CHANNEL, p as info, s as defaultRuntime, v as setVerbose } from "./subsystem-hATE68va.js";
3
3
  import { g as resolveStateDir, i as isNixMode, m as resolveOAuthDir, o as resolveConfigPath, r as STATE_DIR, t as CONFIG_PATH, u as resolveGatewayPort } from "./paths-VdmjGGyc.js";
4
4
  import { n as isRich, r as theme, t as colorize } from "./theme-C5EwWDWE.js";
@@ -21,32 +21,32 @@ import { n as runCommandWithRuntime } from "./cli-utils-CwUbbnsD.js";
21
21
  import { n as withProgress } from "./progress-BPDEiFpj.js";
22
22
  import { a as ensureWorkspaceAndSessions, c as handleReset, d as openUrl, h as resolveControlUiLinks, i as detectBrowserOpenSupport, l as moveToTrash, m as randomToken, n as applyWizardMetadata, o as formatControlUiSshHint, t as DEFAULT_WORKSPACE, v as waitForGatewayReachable } from "./onboard-helpers-DKhundDe.js";
23
23
  import { n as stylePromptMessage, r as stylePromptTitle, t as stylePromptHint } from "./prompt-style-e5zz5JM8.js";
24
- import { t as createDefaultDeps } from "./deps-0dHAqQPZ.js";
24
+ import { t as createDefaultDeps } from "./deps-bxV4Fhqd.js";
25
25
  import { t as assertSupportedRuntime } from "./runtime-guard-C80qkv4W.js";
26
26
  import { t as resolveChannelDefaultAccountId } from "./helpers-y1KKH5pe.js";
27
27
  import { n as logConfigUpdated, t as formatConfigPath } from "./logging-1Q_KlUsW.js";
28
28
  import { t as WizardCancelledError } from "./prompts-yNyvMdpp.js";
29
29
  import { t as createClackPrompter } from "./clack-prompter-B9o3eQeW.js";
30
- 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-jtvwJRjY.js";
31
- import { d as applyAuthChoice, f as applyOpenAIConfig, h as promptAuthChoiceGrouped, m as applyGoogleGeminiModelDefault, p as upsertSharedEnvVar, u as warnIfModelConfigLooksOff } from "./onboard-skills-D8KGRTxy.js";
32
- 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-CRPmNlXU.js";
33
- import { n as setupChannels } from "./onboard-channels-CwSayqE8.js";
34
- import { i as healthCommand } from "./health-format-Cv2SBzMq.js";
30
+ 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-BXqZpqCS.js";
31
+ import { d as applyAuthChoice, f as applyOpenAIConfig, h as promptAuthChoiceGrouped, m as applyGoogleGeminiModelDefault, p as upsertSharedEnvVar, u as warnIfModelConfigLooksOff } from "./onboard-skills-AM1-GoCb.js";
32
+ 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-B8anaBMU.js";
33
+ import { n as setupChannels } from "./onboard-channels-Cg-RtF_Q.js";
34
+ import { i as healthCommand } from "./health-format-HJ49Tlyk.js";
35
35
  import { t as renderTable } from "./table-B3RHVa0g.js";
36
36
  import { t as resolveGatewayService } from "./service-BGkVTESM.js";
37
37
  import { r as isSystemdUserServiceAvailable } from "./systemd-BzTSelz8.js";
38
- import { l as getVerboseFlag, o as getFlagValue, r as registerSubCliCommands, s as getPositiveIntFlagValue, u as hasFlag } from "./register.subclis-BfuAlPlS.js";
38
+ import { l as getVerboseFlag, o as getFlagValue, r as registerSubCliCommands, s as getPositiveIntFlagValue, u as hasFlag } from "./register.subclis-C514WXu2.js";
39
39
  import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-CIxOsvvC.js";
40
40
  import { t as formatHelpExamples } from "./help-format-BVBm9rU4.js";
41
41
  import { t as adminUnlockCommand } from "./admin-unlock-Dr4FqRVP.js";
42
- import { a as createOutboundSendDeps, n as resolveSessionKeyForRequest, t as koiCommand } from "./koi-CwOIbGaZ.js";
43
- import { n as hasExplicitOptions, t as ensurePluginRegistryLoaded } from "./plugin-registry-DdBnvr9h.js";
42
+ import { a as createOutboundSendDeps, n as resolveSessionKeyForRequest, t as koiCommand } from "./koi-C7h4YyTn.js";
43
+ import { n as hasExplicitOptions, t as ensurePluginRegistryLoaded } from "./plugin-registry-OEYl6Glv.js";
44
44
  import { n as parsePositiveIntOrUndefined, t as collectOption } from "./helpers-BwzKU4J1.js";
45
- import { i as CONFIGURE_WIZARD_SECTIONS, n as configureCommand, r as configureCommandWithSections } from "./configure-DFrODS29.js";
45
+ import { i as CONFIGURE_WIZARD_SECTIONS, n as configureCommand, r as configureCommandWithSections } from "./configure-YnJ1tddp.js";
46
46
  import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, r as isGatewayDaemonRuntime, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-r19-i0S0.js";
47
47
  import { n as ensureSystemdUserLingerNonInteractive } from "./systemd-linger-Be49_NdF.js";
48
48
  import { t as loginCommand } from "./login-C71-L2cR.js";
49
- import { n as loadAndMaybeMigrateDoctorConfig, t as doctorCommand } from "./doctor-Cjp7w46N.js";
49
+ import { n as loadAndMaybeMigrateDoctorConfig, t as doctorCommand } from "./doctor-BmZlvlO9.js";
50
50
  import { fileURLToPath } from "node:url";
51
51
  import fs from "node:fs";
52
52
  import path from "node:path";
@@ -2797,7 +2797,7 @@ async function loadValidConfig() {
2797
2797
  }
2798
2798
  function registerConfigCli(program) {
2799
2799
  const cmd = program.command("config").description("Config helpers (get/set/unset). Run without subcommand for the wizard.").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/config", "docs.skykoi.com/cli/config")}\n`).option("--section <section>", "Configure wizard sections (repeatable). Use with no subcommand.", (value, previous) => [...previous, value], []).action(async (opts) => {
2800
- const { CONFIGURE_WIZARD_SECTIONS, configureCommand, configureCommandWithSections } = await import("./configure-DFrODS29.js").then((n) => n.t);
2800
+ const { CONFIGURE_WIZARD_SECTIONS, configureCommand, configureCommandWithSections } = await import("./configure-YnJ1tddp.js").then((n) => n.t);
2801
2801
  const sections = Array.isArray(opts.section) ? opts.section.map((value) => typeof value === "string" ? value.trim() : "").filter(Boolean) : [];
2802
2802
  if (sections.length === 0) {
2803
2803
  await configureCommand(defaultRuntime);
@@ -14,9 +14,9 @@ import { n as logConfigUpdated } from "./logging-1Q_KlUsW.js";
14
14
  import { t as note$1 } from "./note-DRoVRuAi.js";
15
15
  import { t as WizardCancelledError } from "./prompts-yNyvMdpp.js";
16
16
  import { t as createClackPrompter } from "./clack-prompter-B9o3eQeW.js";
17
- import { a as applyModelFallbacksFromSelection, c as promptModelAllowlist, d as applyAuthChoice, h as promptAuthChoiceGrouped, i as applyModelAllowlist, l as resolvePreferredProviderForAuthChoice, o as applyPrimaryModel, r as promptRemoteGatewayConfig, s as promptDefaultModel, t as setupSkills } from "./onboard-skills-D8KGRTxy.js";
18
- import { n as setupChannels, t as noteChannelStatus } from "./onboard-channels-CwSayqE8.js";
19
- import { i as healthCommand, t as formatHealthCheckFailure } from "./health-format-Cv2SBzMq.js";
17
+ import { a as applyModelFallbacksFromSelection, c as promptModelAllowlist, d as applyAuthChoice, h as promptAuthChoiceGrouped, i as applyModelAllowlist, l as resolvePreferredProviderForAuthChoice, o as applyPrimaryModel, r as promptRemoteGatewayConfig, s as promptDefaultModel, t as setupSkills } from "./onboard-skills-AM1-GoCb.js";
18
+ import { n as setupChannels, t as noteChannelStatus } from "./onboard-channels-Cg-RtF_Q.js";
19
+ import { i as healthCommand, t as formatHealthCheckFailure } from "./health-format-HJ49Tlyk.js";
20
20
  import { t as resolveGatewayService } from "./service-BGkVTESM.js";
21
21
  import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-B0N-n2rD.js";
22
22
  import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-r19-i0S0.js";
@@ -15,7 +15,7 @@ import { n as withProgress } from "./progress-BPDEiFpj.js";
15
15
  import { h as resolveControlUiLinks } from "./onboard-helpers-DKhundDe.js";
16
16
  import { n as isWSLEnv, t as isWSL } from "./wsl-DiiAe4Ci.js";
17
17
  import { d as resolveGatewaySystemdServiceName, l as resolveGatewayLaunchAgentLabel } from "./constants-BezzOOYJ.js";
18
- import { t as createDefaultDeps } from "./deps-0dHAqQPZ.js";
18
+ import { t as createDefaultDeps } from "./deps-bxV4Fhqd.js";
19
19
  import { o as resolveGatewayLogPaths, t as resolveGatewayService } from "./service-BGkVTESM.js";
20
20
  import { r as isSystemdUserServiceAvailable } from "./systemd-BzTSelz8.js";
21
21
  import { t as readLastGatewayErrorLine } from "./diagnostics-CFV2YxpG.js";
@@ -1,4 +1,4 @@
1
- import { Ht as sendMessageTelegram, Ut as sendMessageDiscord, ht as sendMessageIMessage, nn as sendMessageWhatsApp, rn as sendMessageSlack } from "./reply-mOlXreGp.js";
1
+ import { Ht as sendMessageTelegram, Ut as sendMessageDiscord, ht as sendMessageIMessage, nn as sendMessageWhatsApp, rn as sendMessageSlack } from "./reply-kg3drq1N.js";
2
2
  import { b as sendMessageSignal } from "./deliver-DJbxwsAM.js";
3
3
 
4
4
  //#region src/cli/deps.ts
@@ -1,4 +1,4 @@
1
- import { Jn as loadModelCatalog, ct as loadSKYKOIPlugins } from "./reply-mOlXreGp.js";
1
+ import { Jn as loadModelCatalog, ct as loadSKYKOIPlugins } from "./reply-kg3drq1N.js";
2
2
  import { s as defaultRuntime, w as getResolvedLoggerSettings } from "./subsystem-hATE68va.js";
3
3
  import { d as resolveIsNixMode, f as resolveLegacyStateDirs, g as resolveStateDir, m as resolveOAuthDir, p as resolveNewStateDir, t as CONFIG_PATH, u as resolveGatewayPort } from "./paths-VdmjGGyc.js";
4
4
  import { a as buildKoiMainSessionKey, l as normalizeKoiId, r as DEFAULT_MAIN_KEY, t as DEFAULT_ACCOUNT_ID } from "./session-key-B2OXLVi_.js";
@@ -26,7 +26,7 @@ import { t as resolveChannelDefaultAccountId } from "./helpers-y1KKH5pe.js";
26
26
  import { n as logConfigUpdated } from "./logging-1Q_KlUsW.js";
27
27
  import { t as note$1 } from "./note-DRoVRuAi.js";
28
28
  import { t as applyPluginAutoEnable } from "./plugin-auto-enable-Cg3LRidd.js";
29
- import { i as healthCommand, t as formatHealthCheckFailure } from "./health-format-Cv2SBzMq.js";
29
+ import { i as healthCommand, t as formatHealthCheckFailure } from "./health-format-HJ49Tlyk.js";
30
30
  import { t as runGatewayUpdate } from "./update-runner-odTAl-uh.js";
31
31
  import { i as resolveGatewayAuth } from "./auth-Vh115fQN.js";
32
32
  import { t as buildWorkspaceSkillStatus } from "./skills-status-DakSfN8r.js";
@@ -34,7 +34,7 @@ import { a as repairLaunchAgentBootstrap, i as launchAgentPlistExists, n as isLa
34
34
  import { r as isSystemdUserServiceAvailable } from "./systemd-BzTSelz8.js";
35
35
  import { t as readLastGatewayErrorLine } from "./diagnostics-CFV2YxpG.js";
36
36
  import { t as collectChannelStatusIssues } from "./channels-status-issues-BLygTpUh.js";
37
- import { n as doctorShellCompletion } from "./doctor-completion-Cu9-JAii.js";
37
+ import { n as doctorShellCompletion } from "./doctor-completion-B_DB6yKB.js";
38
38
  import { n as resolveControlUiDistIndexHealth, r as resolveControlUiDistIndexPathForRoot } from "./control-ui-assets-B0N-n2rD.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-r19-i0S0.js";
40
40
  import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-Be49_NdF.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-DRoVRuAi.js";
5
5
  import { c as compareSemverStrings, s as checkUpdateStatus } from "./update-runner-odTAl-uh.js";
6
- import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-Rdq7S5KE.js";
6
+ import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-DvRTz9tW.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-ByOnbm2b.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
250
+ import("./run-main-CWySis6K.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
  });
@@ -1,5 +1,5 @@
1
1
  import "./pi-embedded-helpers-VJ9hOBTv.js";
2
- import { c as runEmbeddedPiKoi, lr as resolveKoiTimeoutMs, sn as resolveKoiIdentity } from "./reply-mOlXreGp.js";
2
+ import { c as runEmbeddedPiKoi, lr as resolveKoiTimeoutMs, sn as resolveKoiIdentity } from "./reply-kg3drq1N.js";
3
3
  import "./subsystem-hATE68va.js";
4
4
  import "./paths-VdmjGGyc.js";
5
5
  import "./theme-C5EwWDWE.js";