skykoi 2026.3.163 → 2026.3.166

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 (40) hide show
  1. package/dist/{archive-B9u8OOZC.js → archive-CNNzLNkt.js} +1 -1
  2. package/dist/build-info.json +3 -3
  3. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  4. package/dist/{channel-options-D8k02BYT.js → channel-options-DUtJYHBr.js} +1 -1
  5. package/dist/{channels-cli-Du_M1LsR.js → channels-cli-C9061eEi.js} +6 -6
  6. package/dist/cli/daemon-cli.js +1 -1
  7. package/dist/{cli-CSSsiq84.js → cli-4Zf9ZEgS.js} +1 -1
  8. package/dist/{completion-cli-CavCow-_.js → completion-cli-DHpB7oTu.js} +1 -1
  9. package/dist/{config-guard-DuEDsjpE.js → config-guard-C08Krrtv.js} +13 -13
  10. package/dist/{configure-78QJpH-A.js → configure-VcSt2viO.js} +4 -4
  11. package/dist/{daemon-cli-Kh3L2cdB.js → daemon-cli-CzwhzZ7G.js} +2 -2
  12. package/dist/{deps-C96Ice-b.js → deps-C6w0zh0D.js} +1 -1
  13. package/dist/{doctor-CDCifg0g.js → doctor-DT-Vu4Up.js} +3 -3
  14. package/dist/entry.js +1 -1
  15. package/dist/extension-api.js +1 -1
  16. package/dist/{gateway-cli-Bq9zfW47.js → gateway-cli-BOgL00Sg.js} +24 -16
  17. package/dist/{github-copilot-auth-CFaT1F0b.js → github-copilot-auth-DdQeGAzv.js} +1 -1
  18. package/dist/{health-format-DBH5Y6AH.js → health-format-BiG-U8gj.js} +1 -1
  19. package/dist/{hooks-cli-Dmoia8up.js → hooks-cli-C-yjnPKG.js} +3 -3
  20. package/dist/index.js +19 -19
  21. package/dist/{installs-BzV5AW_D.js → installs-Cl9ewRZq.js} +1 -1
  22. package/dist/{koi-CNS9LO_y.js → koi-HRpqY58O.js} +2 -2
  23. package/dist/{models-cli-C_mwL4pD.js → models-cli-BFh1MzOF.js} +2 -2
  24. package/dist/{onboard-channels-Dv5hOlHf.js → onboard-channels-Bw-uahoG.js} +2 -2
  25. package/dist/{onboard-skills-BhXfrAUG.js → onboard-skills-BLOc8WgQ.js} +3 -3
  26. package/dist/{onboarding-Dllr05o7.js → onboarding-Cok_sxX4.js} +6 -6
  27. package/dist/{plugin-registry-B-n5CThH.js → plugin-registry-BI1jq13k.js} +1 -1
  28. package/dist/plugin-sdk/index.js +34 -7
  29. package/dist/plugin-sdk/koi/tools/pass-tool.d.ts +2 -0
  30. package/dist/{plugins-cli-DLFKNRnv.js → plugins-cli-4jQx3-V_.js} +5 -5
  31. package/dist/{program-B54Cxjlx.js → program-BT9Zitzu.js} +4 -4
  32. package/dist/{register.subclis-Zzdrc0FD.js → register.subclis-pPBRW6dy.js} +10 -10
  33. package/dist/{reply-DMEgUFtQ.js → reply-rxuO803j.js} +54 -0
  34. package/dist/{run-main-Da5zpGnu.js → run-main-BO5JkEe1.js} +20 -20
  35. package/dist/{server-node-events-FeLeMI0V.js → server-node-events-C6nlNJYg.js} +3 -3
  36. package/dist/{status-DW8ZMt8J.js → status-CjVErTeY.js} +1 -1
  37. package/dist/{update-DTmTPV0W.js → update-BOUEmMWa.js} +1 -1
  38. package/dist/{update-cli-BZIXQu3F.js → update-cli-Dvv0rvQX.js} +11 -11
  39. package/dist/{update-runner-tMcNM2Bv.js → update-runner-xK1RH5e4.js} +3 -3
  40. 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 { xt as require_inherits } from "./reply-DMEgUFtQ.js";
2
+ import { xt as require_inherits } from "./reply-rxuO803j.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.163",
3
- "commit": "118f61a85ddbba41fe373f9bb6b3072b81b9a4cc",
4
- "builtAt": "2026-04-29T20:53:45.861Z"
2
+ "version": "2026.3.166",
3
+ "commit": "c80ad86ce89b37e5d3ffca702e28c0009060a63a",
4
+ "builtAt": "2026-04-29T22:07:57.279Z"
5
5
  }
@@ -1 +1 @@
1
- 0919a4819547a0f944ac1e6f3132eb563167e670fbd365dde52786cafafea441
1
+ 3499913170c3cbdc1c4f20f3ac522ca9b4cb1f75580f68f58a17196a77c31927
@@ -2,7 +2,7 @@ import { M as CHAT_CHANNEL_ORDER } from "./subsystem-RXphV8Xh.js";
2
2
  import { t as isTruthyEnvValue } from "./env-Bj0uZSiW.js";
3
3
  import { n as listChannelPlugins } from "./plugins-DUZvbUrn.js";
4
4
  import { i as listChannelPluginCatalogEntries } from "./plugin-auto-enable-BmXyiOxr.js";
5
- import { t as ensurePluginRegistryLoaded } from "./plugin-registry-B-n5CThH.js";
5
+ import { t as ensurePluginRegistryLoaded } from "./plugin-registry-BI1jq13k.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-1Nerrhel.js";
2
- import { Pn as createSlackWebClient, _t as formatUsageReportLines, bn as parseDiscordTarget, gt as loadProviderUsageSummary, xn as fetchChannelPermissionsDiscord } from "./reply-DMEgUFtQ.js";
2
+ import { Pn as createSlackWebClient, _t as formatUsageReportLines, bn as parseDiscordTarget, gt as loadProviderUsageSummary, xn as fetchChannelPermissionsDiscord } from "./reply-rxuO803j.js";
3
3
  import { N as DEFAULT_CHAT_CHANNEL, O as getResolvedLoggerSettings, T as theme, c as defaultRuntime, p as danger, y as setVerbose } from "./subsystem-RXphV8Xh.js";
4
4
  import "./paths-VdmjGGyc.js";
5
5
  import { c as normalizeAccountId, t as DEFAULT_ACCOUNT_ID } from "./session-key-DvA8Pdt6.js";
@@ -62,14 +62,14 @@ import "./event-log-DtrKraIx.js";
62
62
  import { t as resolveChannelDefaultAccountId } from "./helpers-BMifWcsO.js";
63
63
  import "./note-CbRknFZ7.js";
64
64
  import { t as createClackPrompter } from "./clack-prompter-BxHCh6Tn.js";
65
- import { i as reloadOnboardingPluginRegistry, n as setupChannels, r as ensureOnboardingPluginInstalled } from "./onboard-channels-Dv5hOlHf.js";
65
+ import { i as reloadOnboardingPluginRegistry, n as setupChannels, r as ensureOnboardingPluginInstalled } from "./onboard-channels-Bw-uahoG.js";
66
66
  import { i as listChannelPluginCatalogEntries } from "./plugin-auto-enable-BmXyiOxr.js";
67
- import "./archive-B9u8OOZC.js";
67
+ import "./archive-CNNzLNkt.js";
68
68
  import "./skill-scanner-WnNLktfw.js";
69
- import "./installs-BzV5AW_D.js";
69
+ import "./installs-Cl9ewRZq.js";
70
70
  import { t as collectChannelStatusIssues } from "./channels-status-issues-GKs-LbrV.js";
71
- import { n as hasExplicitOptions } from "./plugin-registry-B-n5CThH.js";
72
- import { t as formatCliChannelOptions } from "./channel-options-D8k02BYT.js";
71
+ import { n as hasExplicitOptions } from "./plugin-registry-BI1jq13k.js";
72
+ import { t as formatCliChannelOptions } from "./channel-options-DUtJYHBr.js";
73
73
  import { t as buildChannelAccountSnapshot } from "./status-BA0KgRIG.js";
74
74
  import { t as parseLogLine } from "./parse-log-line-Btq1hVHj.js";
75
75
  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-Kh3L2cdB.js";
2
+ export { registerDaemonCli, runDaemonInstall, runDaemonRestart, runDaemonStart, runDaemonStatus, runDaemonStop, runDaemonUninstall } from "../daemon-cli-CzwhzZ7G.js";
@@ -1,5 +1,5 @@
1
1
  import "./pi-embedded-helpers-1Nerrhel.js";
2
- import { ht as loadSKYKOIPlugins } from "./reply-DMEgUFtQ.js";
2
+ import { ht as loadSKYKOIPlugins } from "./reply-rxuO803j.js";
3
3
  import { t as createSubsystemLogger } from "./subsystem-RXphV8Xh.js";
4
4
  import "./paths-VdmjGGyc.js";
5
5
  import "./utils-rBzA-VDv.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-Zzdrc0FD.js";
3
+ import { n as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-pPBRW6dy.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 { At as handleReset, Bt as waitForGatewayReachable, Ct as DEFAULT_WORKSPACE, Dt as ensureWorkspaceAndSessions, Et as detectBrowserOpenSupport, It as randomToken, Lt as resolveControlUiLinks, M as runMessageAction, Nt as openUrl, Ot as formatControlUiSshHint, V as CHANNEL_MESSAGE_ACTION_NAMES, dt as CHANNEL_TARGET_DESCRIPTION, gr as lookupContextTokens, in as runMemoryStatus, jt as moveToTrash, rn as registerMemoryCli, ut as CHANNEL_TARGETS_DESCRIPTION, wt as applyWizardMetadata, z as formatTargetDisplay } from "./reply-DMEgUFtQ.js";
1
+ import { At as handleReset, Bt as waitForGatewayReachable, Ct as DEFAULT_WORKSPACE, Dt as ensureWorkspaceAndSessions, Et as detectBrowserOpenSupport, It as randomToken, Lt as resolveControlUiLinks, M as runMessageAction, Nt as openUrl, Ot as formatControlUiSshHint, V as CHANNEL_MESSAGE_ACTION_NAMES, dt as CHANNEL_TARGET_DESCRIPTION, gr as lookupContextTokens, in as runMemoryStatus, jt as moveToTrash, rn as registerMemoryCli, ut as CHANNEL_TARGETS_DESCRIPTION, wt as applyWizardMetadata, z as formatTargetDisplay } from "./reply-rxuO803j.js";
2
2
  import { B as normalizeChatChannelId, C as colorize, I as getChatChannelMeta, N as DEFAULT_CHAT_CHANNEL, T as theme, c as defaultRuntime, l as restoreTerminalState, m as info, p as danger, w as isRich, y as setVerbose } from "./subsystem-RXphV8Xh.js";
3
3
  import { g as resolveStateDir, i as isNixMode, m as resolveOAuthDir, o as resolveConfigPath, r as STATE_DIR, u as resolveGatewayPort } from "./paths-VdmjGGyc.js";
4
4
  import { l as normalizeKoiId, n as DEFAULT_KOI_ID, t as DEFAULT_ACCOUNT_ID } from "./session-key-DvA8Pdt6.js";
@@ -19,29 +19,29 @@ import { t as formatDocsLink } from "./links-D5FJjx5x.js";
19
19
  import { n as runCommandWithRuntime } from "./cli-utils-C1YHVD4o.js";
20
20
  import { n as withProgress } from "./progress-CIrle3FT.js";
21
21
  import { n as stylePromptMessage, r as stylePromptTitle, t as stylePromptHint } from "./prompt-style-BJmW_JM3.js";
22
- import { t as createDefaultDeps } from "./deps-C96Ice-b.js";
22
+ import { t as createDefaultDeps } from "./deps-C6w0zh0D.js";
23
23
  import { a as gatewayInstallErrorHint, g as assertSupportedRuntime, i as buildGatewayInstallPlan, r as isGatewayDaemonRuntime, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-DkLy62aK.js";
24
24
  import { t as resolveChannelDefaultAccountId } from "./helpers-BMifWcsO.js";
25
25
  import { n as logConfigUpdated, t as formatConfigPath } from "./logging-BusiCyt_.js";
26
26
  import { t as WizardCancelledError } from "./prompts-DxnxCHKt.js";
27
27
  import { t as createClackPrompter } from "./clack-prompter-BxHCh6Tn.js";
28
- 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-Dllr05o7.js";
29
- import { d as applyAuthChoice, f as applyOpenAIConfig, h as promptAuthChoiceGrouped, m as applyGoogleGeminiModelDefault, p as upsertSharedEnvVar, u as warnIfModelConfigLooksOff } from "./onboard-skills-BhXfrAUG.js";
30
- 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-CFaT1F0b.js";
31
- import { n as setupChannels } from "./onboard-channels-Dv5hOlHf.js";
32
- import { l as healthCommand } from "./health-format-DBH5Y6AH.js";
28
+ 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-Cok_sxX4.js";
29
+ import { d as applyAuthChoice, f as applyOpenAIConfig, h as promptAuthChoiceGrouped, m as applyGoogleGeminiModelDefault, p as upsertSharedEnvVar, u as warnIfModelConfigLooksOff } from "./onboard-skills-BLOc8WgQ.js";
30
+ 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-DdQeGAzv.js";
31
+ import { n as setupChannels } from "./onboard-channels-Bw-uahoG.js";
32
+ import { l as healthCommand } from "./health-format-BiG-U8gj.js";
33
33
  import { t as renderTable } from "./table-CgHdpI6b.js";
34
34
  import { t as resolveGatewayService } from "./service-CTrRN1-T.js";
35
35
  import { r as isSystemdUserServiceAvailable } from "./systemd-BuS1yu_z.js";
36
- import { l as getVerboseFlag, o as getFlagValue, r as registerSubCliCommands, s as getPositiveIntFlagValue, u as hasFlag } from "./register.subclis-Zzdrc0FD.js";
36
+ import { l as getVerboseFlag, o as getFlagValue, r as registerSubCliCommands, s as getPositiveIntFlagValue, u as hasFlag } from "./register.subclis-pPBRW6dy.js";
37
37
  import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-GLatQ1eS.js";
38
38
  import { t as formatHelpExamples } from "./help-format-Cbr54gLP.js";
39
- import { a as createOutboundSendDeps, n as resolveSessionKeyForRequest, t as koiCommand } from "./koi-CNS9LO_y.js";
40
- import { n as hasExplicitOptions, t as ensurePluginRegistryLoaded } from "./plugin-registry-B-n5CThH.js";
39
+ import { a as createOutboundSendDeps, n as resolveSessionKeyForRequest, t as koiCommand } from "./koi-HRpqY58O.js";
40
+ import { n as hasExplicitOptions, t as ensurePluginRegistryLoaded } from "./plugin-registry-BI1jq13k.js";
41
41
  import { n as parsePositiveIntOrUndefined, t as collectOption } from "./helpers-CgAOTnxe.js";
42
- import { i as CONFIGURE_WIZARD_SECTIONS, n as configureCommand, r as configureCommandWithSections } from "./configure-78QJpH-A.js";
42
+ import { i as CONFIGURE_WIZARD_SECTIONS, n as configureCommand, r as configureCommandWithSections } from "./configure-VcSt2viO.js";
43
43
  import { n as ensureSystemdUserLingerNonInteractive } from "./systemd-linger-BLQwmm6k.js";
44
- import { n as loadAndMaybeMigrateDoctorConfig, t as doctorCommand } from "./doctor-CDCifg0g.js";
44
+ import { n as loadAndMaybeMigrateDoctorConfig, t as doctorCommand } from "./doctor-DT-Vu4Up.js";
45
45
  import { fileURLToPath } from "node:url";
46
46
  import fs from "node:fs";
47
47
  import path from "node:path";
@@ -2792,7 +2792,7 @@ async function loadValidConfig() {
2792
2792
  }
2793
2793
  function registerConfigCli(program) {
2794
2794
  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) => {
2795
- const { CONFIGURE_WIZARD_SECTIONS, configureCommand, configureCommandWithSections } = await import("./configure-78QJpH-A.js").then((n) => n.t);
2795
+ const { CONFIGURE_WIZARD_SECTIONS, configureCommand, configureCommandWithSections } = await import("./configure-VcSt2viO.js").then((n) => n.t);
2796
2796
  const sections = Array.isArray(opts.section) ? opts.section.map((value) => typeof value === "string" ? value.trim() : "").filter(Boolean) : [];
2797
2797
  if (sections.length === 0) {
2798
2798
  await configureCommand(defaultRuntime);
@@ -1,5 +1,5 @@
1
1
  import { r as __exportAll } from "./chunk-D_gEzPfs.js";
2
- import { Bt as waitForGatewayReachable, Ct as DEFAULT_WORKSPACE, Dt as ensureWorkspaceAndSessions, Ft as probeGatewayReachable, It as randomToken, Lt as resolveControlUiLinks, Mt as normalizeGatewayTokenInput, Pt as printWizardHeader, kt as guardCancel, wt as applyWizardMetadata, zt as summarizeExistingConfig } from "./reply-DMEgUFtQ.js";
2
+ import { Bt as waitForGatewayReachable, Ct as DEFAULT_WORKSPACE, Dt as ensureWorkspaceAndSessions, Ft as probeGatewayReachable, It as randomToken, Lt as resolveControlUiLinks, Mt as normalizeGatewayTokenInput, Pt as printWizardHeader, kt as guardCancel, wt as applyWizardMetadata, zt as summarizeExistingConfig } from "./reply-rxuO803j.js";
3
3
  import { c as defaultRuntime } from "./subsystem-RXphV8Xh.js";
4
4
  import { t as CONFIG_PATH, u as resolveGatewayPort } from "./paths-VdmjGGyc.js";
5
5
  import { h as resolveUserPath, y as shortenHomePath } from "./utils-rBzA-VDv.js";
@@ -15,9 +15,9 @@ import { n as logConfigUpdated } from "./logging-BusiCyt_.js";
15
15
  import { t as note$1 } from "./note-CbRknFZ7.js";
16
16
  import { t as WizardCancelledError } from "./prompts-DxnxCHKt.js";
17
17
  import { t as createClackPrompter } from "./clack-prompter-BxHCh6Tn.js";
18
- 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-BhXfrAUG.js";
19
- import { n as setupChannels, t as noteChannelStatus } from "./onboard-channels-Dv5hOlHf.js";
20
- import { l as healthCommand, n as ensureControlUiAssetsBuilt, t as formatHealthCheckFailure } from "./health-format-DBH5Y6AH.js";
18
+ 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-BLOc8WgQ.js";
19
+ import { n as setupChannels, t as noteChannelStatus } from "./onboard-channels-Bw-uahoG.js";
20
+ import { l as healthCommand, n as ensureControlUiAssetsBuilt, t as formatHealthCheckFailure } from "./health-format-BiG-U8gj.js";
21
21
  import { t as resolveGatewayService } from "./service-CTrRN1-T.js";
22
22
  import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-BLQwmm6k.js";
23
23
  import { confirm, intro, outro, select, text } from "@clack/prompts";
@@ -1,5 +1,5 @@
1
1
  import { r as __exportAll } from "./chunk-D_gEzPfs.js";
2
- import { Lt as resolveControlUiLinks } from "./reply-DMEgUFtQ.js";
2
+ import { Lt as resolveControlUiLinks } from "./reply-rxuO803j.js";
3
3
  import { C as colorize, O as getResolvedLoggerSettings, T as theme, c as defaultRuntime, w as isRich } from "./subsystem-RXphV8Xh.js";
4
4
  import { d as resolveIsNixMode, g as resolveStateDir, o as resolveConfigPath, u as resolveGatewayPort } from "./paths-VdmjGGyc.js";
5
5
  import { y as shortenHomePath } from "./utils-rBzA-VDv.js";
@@ -14,7 +14,7 @@ import { n as callGateway } from "./call-ByTcqcvV.js";
14
14
  import { t as formatDocsLink } from "./links-D5FJjx5x.js";
15
15
  import { n as withProgress } from "./progress-CIrle3FT.js";
16
16
  import { d as resolveGatewaySystemdServiceName, l as resolveGatewayLaunchAgentLabel } from "./constants-QCWVHQSI.js";
17
- import { t as createDefaultDeps } from "./deps-C96Ice-b.js";
17
+ import { t as createDefaultDeps } from "./deps-C6w0zh0D.js";
18
18
  import { i as buildGatewayInstallPlan, r as isGatewayDaemonRuntime, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-DkLy62aK.js";
19
19
  import { o as resolveGatewayLogPaths, t as resolveGatewayService } from "./service-CTrRN1-T.js";
20
20
  import { r as isSystemdUserServiceAvailable } from "./systemd-BuS1yu_z.js";
@@ -1,4 +1,4 @@
1
- import { Nn as sendMessageSlack, St as sendMessageIMessage, _n as sendMessageTelegram, jn as sendMessageWhatsApp, vn as sendMessageDiscord } from "./reply-DMEgUFtQ.js";
1
+ import { Nn as sendMessageSlack, St as sendMessageIMessage, _n as sendMessageTelegram, jn as sendMessageWhatsApp, vn as sendMessageDiscord } from "./reply-rxuO803j.js";
2
2
  import { b as sendMessageSignal } from "./deliver-CJ2Pjcyz.js";
3
3
 
4
4
  //#region src/cli/deps.ts
@@ -1,4 +1,4 @@
1
- import { It as randomToken, Pt as printWizardHeader, ht as loadSKYKOIPlugins, kt as guardCancel, wr as loadModelCatalog, wt as applyWizardMetadata } from "./reply-DMEgUFtQ.js";
1
+ import { It as randomToken, Pt as printWizardHeader, ht as loadSKYKOIPlugins, kt as guardCancel, wr as loadModelCatalog, wt as applyWizardMetadata } from "./reply-rxuO803j.js";
2
2
  import { O as getResolvedLoggerSettings, c as defaultRuntime } from "./subsystem-RXphV8Xh.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-DvA8Pdt6.js";
@@ -25,8 +25,8 @@ import { t as resolveChannelDefaultAccountId } from "./helpers-BMifWcsO.js";
25
25
  import { n as logConfigUpdated } from "./logging-BusiCyt_.js";
26
26
  import { t as note$1 } from "./note-CbRknFZ7.js";
27
27
  import { t as applyPluginAutoEnable } from "./plugin-auto-enable-BmXyiOxr.js";
28
- import { i as resolveControlUiDistIndexPathForRoot, l as healthCommand, r as resolveControlUiDistIndexHealth, t as formatHealthCheckFailure } from "./health-format-DBH5Y6AH.js";
29
- import { c as doctorShellCompletion, t as runGatewayUpdate } from "./update-runner-tMcNM2Bv.js";
28
+ import { i as resolveControlUiDistIndexPathForRoot, l as healthCommand, r as resolveControlUiDistIndexHealth, t as formatHealthCheckFailure } from "./health-format-BiG-U8gj.js";
29
+ import { c as doctorShellCompletion, t as runGatewayUpdate } from "./update-runner-xK1RH5e4.js";
30
30
  import { i as resolveGatewayAuth } from "./auth-DQvUzR68.js";
31
31
  import { t as buildWorkspaceSkillStatus } from "./skills-status-PwtGQTh5.js";
32
32
  import { a as repairLaunchAgentBootstrap, i as launchAgentPlistExists, n as isLaunchAgentListed, o as resolveGatewayLogPaths, r as isLaunchAgentLoaded, t as resolveGatewayService } from "./service-CTrRN1-T.js";
package/dist/entry.js CHANGED
@@ -244,7 +244,7 @@ if (!ensureExperimentalWarningSuppressed()) {
244
244
  applyCliProfileEnv({ profile: parsed.profile });
245
245
  process$1.argv = parsed.argv;
246
246
  }
247
- import("./run-main-Da5zpGnu.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
247
+ import("./run-main-BO5JkEe1.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
248
248
  console.error("[SKYKOI] Failed to start CLI:", error instanceof Error ? error.stack ?? error.message : error);
249
249
  process$1.exitCode = 1;
250
250
  });
@@ -1,5 +1,5 @@
1
1
  import "./pi-embedded-helpers-1Nerrhel.js";
2
- import { Ln as resolveKoiIdentity, c as runEmbeddedPiKoi, zr as resolveKoiTimeoutMs } from "./reply-DMEgUFtQ.js";
2
+ import { Ln as resolveKoiIdentity, c as runEmbeddedPiKoi, zr as resolveKoiTimeoutMs } from "./reply-rxuO803j.js";
3
3
  import "./subsystem-RXphV8Xh.js";
4
4
  import "./paths-VdmjGGyc.js";
5
5
  import "./utils-rBzA-VDv.js";
@@ -1,6 +1,6 @@
1
1
  import { o as __toESM } from "./chunk-D_gEzPfs.js";
2
2
  import { B as normalizeElevatedLevel, H as normalizeThinkLevel, I as formatThinkingLevels, K as supportsXHighThinking, L as formatXHighModelHint, U as normalizeUsageDisplay, V as normalizeReasoningLevel, W as normalizeVerboseLevel } from "./pi-embedded-helpers-1Nerrhel.js";
3
- import { $ as summarizeRestartSentinel, $n as resolveTtsPrefsPath, $t as buildSafeExternalPrompt, A as resolveSessionTranscriptCandidates, Ar as DEFAULT_INPUT_MAX_REDIRECTS, At as handleReset, B as resetDirectoryCache, Bn as resolveUserTimezone, C as loadSessionEntry, Cn as createReplyDispatcher, D as capArrayByJsonBytes, Dn as findSubkoiRunByChildSessionKey, Dr as DEFAULT_INPUT_FILE_MIMES, E as archiveFileOnDisk, En as stopSubkoisForRequester, Er as DEFAULT_INPUT_FILE_MAX_CHARS, Fr as extractFileContentFromSource, G as consumeGatewaySigusr1RestartAuthorization, Gn as OPENAI_TTS_MODELS, Gt as getRemoteSkillEligibility, H as runWithModelFallback, Hn as createInternalHookEvent, Ht as buildControlUiAvatarUrl, Ir as extractImageContentFromSource, J as setGatewaySigusr1RestartPolicy, Jn as isTtsEnabled, Jt as refreshRemoteBinsForConnectedNodes, K as isGatewaySigusr1RestartExternallyAllowed, Kn as OPENAI_TTS_VOICES, Kt as primeRemoteSkillsCache, L as resolveOutboundTarget, Ln as resolveKoiIdentity, Lr as normalizeMimeList, Mn as normalizePollInput, Mr as DEFAULT_INPUT_PDF_MAX_PIXELS, N as ensureOutboundSessionEntry, Nr as DEFAULT_INPUT_PDF_MIN_TEXT_CHARS, O as readSessionMessages, On as findSubkoiRunByRunId, Or as DEFAULT_INPUT_IMAGE_MAX_BYTES, P as resolveOutboundSessionRoute, Pr as DEFAULT_INPUT_TIMEOUT_MS, Qn as resolveTtsConfig, Qt as registerSkillsChangeListener, R as resolveSessionDeliveryTarget, Rn as formatUserTime, S as loadCombinedSessionStoreForGateway, Sn as dispatchInboundMessage, Sr as isSystemEventContextChanged, T as resolveSessionModelRef, Tn as isAbortTrigger, Tr as DEFAULT_INPUT_FILE_MAX_BYTES, Un as registerInternalHook, Ut as normalizeControlUiBasePath, Vn as clearInternalHooks, Vt as CONTROL_UI_AVATAR_PREFIX, W as authorizeGatewaySigusr1Restart, Wn as triggerInternalHook, Wt as resolveAssistantAvatarUrl, X as formatDoctorNonInteractiveHint, Xn as resolveTtsApiKey, Xt as setSkillsRemoteRegistry, Y as consumeRestartSentinel, Yn as isTtsProviderConfigured, Yt as refreshRemoteNodeBins, Z as formatRestartSentinelMessage, Zn as resolveTtsAutoMode, Zt as getSkillsSnapshotVersion, _ as onCanvasChange, a as normalizeSendPolicy, at as normalizeOptionalKoiId, b as listKoisForGateway, br as parseVerboseOverride, bt as handleSlackHttpRequest, c as runEmbeddedPiKoi, cr as startDiagnosticHeartbeat, ct as normalizeRequiredName, d as waitForEmbeddedPiRunEnd, dn as buildHistoryContextFromEntries, dr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, en as detectSuspiciousPatterns, er as resolveTtsProviderOrder, fn as resolveHeartbeatVisibility, ft as requestHeartbeatNow, g as listCanvasUris, gr as lookupContextTokens, gt as loadProviderUsageSummary, h as getCanvasResource, hn as onHeartbeatEvent, hr as stripHeartbeatToken, ht as loadSKYKOIPlugins, i as runCliKoi, it as inferLegacyName, j as stripEnvelopeFromMessages, jr as DEFAULT_INPUT_PDF_MAX_PAGES, k as readSessionPreviewItemsFromTranscript, kn as initSubkoiRegistry, kr as DEFAULT_INPUT_IMAGE_MIMES, l as abortEmbeddedPiRun, ln as registerUnhandledRejectionHandler, lr as stopDiagnosticHeartbeat, lt as migrateLegacyCronPayload, m as canvasUri, mn as getLastHeartbeatEvent, mt as getPluginToolMeta, n as getCliSessionId, nn as isExternalHookSession, nr as setTtsProvider, nt as normalizeCronJobCreate, o as resolveSendPolicy, on as createReplyPrefixOptions, or as setCommandLaneConcurrency, ot as normalizeOptionalText, p as createSKYKOITools, q as scheduleGatewaySigusr1Restart, qn as getTtsProvider, qt as recordRemoteNodeInfo, r as setCliSessionId, rr as textToSpeech, rt as normalizeCronJobPatch, s as clearSessionQueues, sn as normalizeGroupActivation, sr as CommandLane, st as normalizePayloadToSystemText, tn as getHookType, tr as setTtsEnabled, tt as writeRestartSentinel, ur as isDiagnosticsEnabled, v as replaceCanvasResource, vr as applyModelOverrideToSessionEntry, w as resolveGatewaySessionStoreTarget, wn as formatZonedTimestamp, wr as loadModelCatalog, x as listSessionsFromStore, xr as enqueueSystemEvent, y as resolveAnnounceTargetFromKey, yn as getChannelActivity, yr as applyVerboseOverride, zn as resolveUserTimeFormat, zr as resolveKoiTimeoutMs } from "./reply-DMEgUFtQ.js";
3
+ import { $ as summarizeRestartSentinel, $n as resolveTtsPrefsPath, $t as buildSafeExternalPrompt, A as resolveSessionTranscriptCandidates, Ar as DEFAULT_INPUT_MAX_REDIRECTS, At as handleReset, B as resetDirectoryCache, Bn as resolveUserTimezone, C as loadSessionEntry, Cn as createReplyDispatcher, D as capArrayByJsonBytes, Dn as findSubkoiRunByChildSessionKey, Dr as DEFAULT_INPUT_FILE_MIMES, E as archiveFileOnDisk, En as stopSubkoisForRequester, Er as DEFAULT_INPUT_FILE_MAX_CHARS, Fr as extractFileContentFromSource, G as consumeGatewaySigusr1RestartAuthorization, Gn as OPENAI_TTS_MODELS, Gt as getRemoteSkillEligibility, H as runWithModelFallback, Hn as createInternalHookEvent, Ht as buildControlUiAvatarUrl, Ir as extractImageContentFromSource, J as setGatewaySigusr1RestartPolicy, Jn as isTtsEnabled, Jt as refreshRemoteBinsForConnectedNodes, K as isGatewaySigusr1RestartExternallyAllowed, Kn as OPENAI_TTS_VOICES, Kt as primeRemoteSkillsCache, L as resolveOutboundTarget, Ln as resolveKoiIdentity, Lr as normalizeMimeList, Mn as normalizePollInput, Mr as DEFAULT_INPUT_PDF_MAX_PIXELS, N as ensureOutboundSessionEntry, Nr as DEFAULT_INPUT_PDF_MIN_TEXT_CHARS, O as readSessionMessages, On as findSubkoiRunByRunId, Or as DEFAULT_INPUT_IMAGE_MAX_BYTES, P as resolveOutboundSessionRoute, Pr as DEFAULT_INPUT_TIMEOUT_MS, Qn as resolveTtsConfig, Qt as registerSkillsChangeListener, R as resolveSessionDeliveryTarget, Rn as formatUserTime, S as loadCombinedSessionStoreForGateway, Sn as dispatchInboundMessage, Sr as isSystemEventContextChanged, T as resolveSessionModelRef, Tn as isAbortTrigger, Tr as DEFAULT_INPUT_FILE_MAX_BYTES, Un as registerInternalHook, Ut as normalizeControlUiBasePath, Vn as clearInternalHooks, Vt as CONTROL_UI_AVATAR_PREFIX, W as authorizeGatewaySigusr1Restart, Wn as triggerInternalHook, Wt as resolveAssistantAvatarUrl, X as formatDoctorNonInteractiveHint, Xn as resolveTtsApiKey, Xt as setSkillsRemoteRegistry, Y as consumeRestartSentinel, Yn as isTtsProviderConfigured, Yt as refreshRemoteNodeBins, Z as formatRestartSentinelMessage, Zn as resolveTtsAutoMode, Zt as getSkillsSnapshotVersion, _ as onCanvasChange, a as normalizeSendPolicy, at as normalizeOptionalKoiId, b as listKoisForGateway, br as parseVerboseOverride, bt as handleSlackHttpRequest, c as runEmbeddedPiKoi, cr as startDiagnosticHeartbeat, ct as normalizeRequiredName, d as waitForEmbeddedPiRunEnd, dn as buildHistoryContextFromEntries, dr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, en as detectSuspiciousPatterns, er as resolveTtsProviderOrder, fn as resolveHeartbeatVisibility, ft as requestHeartbeatNow, g as listCanvasUris, gr as lookupContextTokens, gt as loadProviderUsageSummary, h as getCanvasResource, hn as onHeartbeatEvent, hr as stripHeartbeatToken, ht as loadSKYKOIPlugins, i as runCliKoi, it as inferLegacyName, j as stripEnvelopeFromMessages, jr as DEFAULT_INPUT_PDF_MAX_PAGES, k as readSessionPreviewItemsFromTranscript, kn as initSubkoiRegistry, kr as DEFAULT_INPUT_IMAGE_MIMES, l as abortEmbeddedPiRun, ln as registerUnhandledRejectionHandler, lr as stopDiagnosticHeartbeat, lt as migrateLegacyCronPayload, m as canvasUri, mn as getLastHeartbeatEvent, mt as getPluginToolMeta, n as getCliSessionId, nn as isExternalHookSession, nr as setTtsProvider, nt as normalizeCronJobCreate, o as resolveSendPolicy, on as createReplyPrefixOptions, or as setCommandLaneConcurrency, ot as normalizeOptionalText, p as createSKYKOITools, q as scheduleGatewaySigusr1Restart, qn as getTtsProvider, qt as recordRemoteNodeInfo, r as setCliSessionId, rr as textToSpeech, rt as normalizeCronJobPatch, s as clearSessionQueues, sn as normalizeGroupActivation, sr as CommandLane, st as normalizePayloadToSystemText, tn as getHookType, tr as setTtsEnabled, tt as writeRestartSentinel, ur as isDiagnosticsEnabled, v as replaceCanvasResource, vr as applyModelOverrideToSessionEntry, w as resolveGatewaySessionStoreTarget, wn as formatZonedTimestamp, wr as loadModelCatalog, x as listSessionsFromStore, xr as enqueueSystemEvent, y as resolveAnnounceTargetFromKey, yn as getChannelActivity, yr as applyVerboseOverride, zn as resolveUserTimeFormat, zr as resolveKoiTimeoutMs } from "./reply-rxuO803j.js";
4
4
  import { C as colorize, D as getLogger, E as getChildLogger, N as DEFAULT_CHAT_CHANNEL, O as getResolvedLoggerSettings, T as theme, V as getActivePluginRegistry, a as setConsoleTimestampPrefix, c as defaultRuntime, i as setConsoleSubsystemFilter, j as CHANNEL_IDS, n as runtimeForLogger, t as createSubsystemLogger, w as isRich, y as setVerbose } from "./subsystem-RXphV8Xh.js";
5
5
  import { g as resolveStateDir, i as isNixMode, l as resolveGatewayLockDir, o as resolveConfigPath, r as STATE_DIR, t as CONFIG_PATH, u as resolveGatewayPort } from "./paths-VdmjGGyc.js";
6
6
  import { _ as isSubkoiSessionKey, a as buildKoiMainSessionKey, d as resolveKoiIdFromSessionKey, l as normalizeKoiId, m as toKoiRequestSessionKey, n as DEFAULT_KOI_ID, t as DEFAULT_ACCOUNT_ID, u as normalizeMainKey, v as parseKoiSessionKey } from "./session-key-DvA8Pdt6.js";
@@ -66,7 +66,7 @@ import { n as createBrowserControlContext, r as startBrowserControlServiceFromCo
66
66
  import { t as parseAbsoluteTimeMs } from "./parse-DbwfoyR_.js";
67
67
  import { n as resolveMessageChannelSelection } from "./channel-selection-B5tUOB8t.js";
68
68
  import { n as hydrateSession, r as readEventsSince, t as appendEvent } from "./event-log-DtrKraIx.js";
69
- import { n as createOutboundSendDeps, t as createDefaultDeps } from "./deps-C96Ice-b.js";
69
+ import { n as createOutboundSendDeps, t as createDefaultDeps } from "./deps-C6w0zh0D.js";
70
70
  import { i as enableTailscaleServe, n as disableTailscaleServe, o as getTailnetHostname, r as enableTailscaleFunnel, t as disableTailscaleFunnel } from "./tailscale-4hm01eUI.js";
71
71
  import { t as ensureSKYKOICliOnPath } from "./path-env-B1xMZ4TX.js";
72
72
  import "./daemon-runtime-DkLy62aK.js";
@@ -75,16 +75,16 @@ import { t as resolveChannelDefaultAccountId } from "./helpers-BMifWcsO.js";
75
75
  import "./logging-BusiCyt_.js";
76
76
  import "./note-CbRknFZ7.js";
77
77
  import { t as WizardCancelledError } from "./prompts-DxnxCHKt.js";
78
- 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-Dllr05o7.js";
79
- import { n as installSkill } from "./onboard-skills-BhXfrAUG.js";
80
- import "./github-copilot-auth-CFaT1F0b.js";
81
- import "./onboard-channels-Dv5hOlHf.js";
78
+ 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-Cok_sxX4.js";
79
+ import { n as installSkill } from "./onboard-skills-BLOc8WgQ.js";
80
+ import "./github-copilot-auth-DdQeGAzv.js";
81
+ import "./onboard-channels-Bw-uahoG.js";
82
82
  import { r as buildChannelUiCatalog, t as applyPluginAutoEnable } from "./plugin-auto-enable-BmXyiOxr.js";
83
- import "./archive-B9u8OOZC.js";
83
+ import "./archive-CNNzLNkt.js";
84
84
  import "./skill-scanner-WnNLktfw.js";
85
- import "./installs-BzV5AW_D.js";
86
- import { a as resolveControlUiRootOverrideSync, c as getHealthSnapshot, d as runHeartbeatOnce, f as setHeartbeatsEnabled, n as ensureControlUiAssetsBuilt, o as resolveControlUiRootSync, p as startHeartbeatRunner, s as formatHealthChannelLines } from "./health-format-DBH5Y6AH.js";
87
- import { S as normalizeUpdateChannel, _ as resolveNpmChannelTag, h as compareSemverStrings, m as checkUpdateStatus, t as runGatewayUpdate, y as DEFAULT_PACKAGE_CHANNEL } from "./update-runner-tMcNM2Bv.js";
85
+ import "./installs-Cl9ewRZq.js";
86
+ import { a as resolveControlUiRootOverrideSync, c as getHealthSnapshot, d as runHeartbeatOnce, f as setHeartbeatsEnabled, n as ensureControlUiAssetsBuilt, o as resolveControlUiRootSync, p as startHeartbeatRunner, s as formatHealthChannelLines } from "./health-format-BiG-U8gj.js";
87
+ import { S as normalizeUpdateChannel, _ as resolveNpmChannelTag, h as compareSemverStrings, m as checkUpdateStatus, t as runGatewayUpdate, y as DEFAULT_PACKAGE_CHANNEL } from "./update-runner-xK1RH5e4.js";
88
88
  import { i as resolveGatewayAuth, n as authorizeGatewayConnect, r as isLocalDirectRequest, t as assertGatewayAuthConfigured } from "./auth-DQvUzR68.js";
89
89
  import { i as probeGateway } from "./audit-C0ixMaLQ.js";
90
90
  import "./table-CgHdpI6b.js";
@@ -94,16 +94,16 @@ import { p as resolveGatewayStateDir } from "./systemd-BuS1yu_z.js";
94
94
  import "./service-audit-CN0kFCuS.js";
95
95
  import "./node-service-DfmbTqpi.js";
96
96
  import "./channels-status-issues-GKs-LbrV.js";
97
- import "./register.subclis-Zzdrc0FD.js";
98
- import { a as createOutboundSendDeps$1, i as resolveKoiOutboundTarget, r as resolveKoiDeliveryPlan, t as koiCommand } from "./koi-CNS9LO_y.js";
97
+ import "./register.subclis-pPBRW6dy.js";
98
+ import { a as createOutboundSendDeps$1, i as resolveKoiOutboundTarget, r as resolveKoiDeliveryPlan, t as koiCommand } from "./koi-HRpqY58O.js";
99
99
  import { n as resolveWideAreaDiscoveryDomain, r as writeWideAreaGatewayZone } from "./widearea-dns-DMja3M8B.js";
100
100
  import { n as discoverGatewayBeacons } from "./bonjour-discovery-D_eYlsQc.js";
101
- import "./completion-cli-CavCow-_.js";
101
+ import "./completion-cli-DHpB7oTu.js";
102
102
  import { i as shouldIncludeHook, n as loadWorkspaceHookEntries, r as resolveHookConfig } from "./hooks-status-Q-UXhKBw.js";
103
103
  import "./tui-9aUeGcxw.js";
104
104
  import { t as buildChannelAccountSnapshot } from "./status-BA0KgRIG.js";
105
105
  import "./shared-DCuTTPOy.js";
106
- import { a as runDaemonStop, i as runDaemonStart, n as runDaemonStatus, o as runDaemonUninstall, r as runDaemonRestart, s as runDaemonInstall } from "./daemon-cli-Kh3L2cdB.js";
106
+ import { a as runDaemonStop, i as runDaemonStart, n as runDaemonStatus, o as runDaemonUninstall, r as runDaemonRestart, s as runDaemonInstall } from "./daemon-cli-CzwhzZ7G.js";
107
107
  import { a as toOptionString, i as parsePort$1, n as extractGatewayMiskeys, r as maybeExplainGatewayServiceStop, t as describeUnknownError } from "./shared-18N_WkHM.js";
108
108
  import { i as setGatewayWsLogStyle, n as logWs, r as summarizeKoiEventForWsLog, t as formatForLog } from "./ws-log-BhaGKxqL.js";
109
109
  import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-BYWNnNLn.js";
@@ -2025,17 +2025,20 @@ function createChatRunState() {
2025
2025
  const buffers = /* @__PURE__ */ new Map();
2026
2026
  const deltaSentAt = /* @__PURE__ */ new Map();
2027
2027
  const abortedRuns = /* @__PURE__ */ new Map();
2028
+ const passedRuns = /* @__PURE__ */ new Set();
2028
2029
  const clear = () => {
2029
2030
  registry.clear();
2030
2031
  buffers.clear();
2031
2032
  deltaSentAt.clear();
2032
2033
  abortedRuns.clear();
2034
+ passedRuns.clear();
2033
2035
  };
2034
2036
  return {
2035
2037
  registry,
2036
2038
  buffers,
2037
2039
  deltaSentAt,
2038
2040
  abortedRuns,
2041
+ passedRuns,
2039
2042
  clear
2040
2043
  };
2041
2044
  }
@@ -2113,6 +2116,10 @@ function createKoiEventHandler({ broadcast, broadcastToConnIds, nodeSendToSessio
2113
2116
  chatRunState.deltaSentAt.delete(clientRunId);
2114
2117
  if (jobState === "done") {
2115
2118
  const runCtx = getKoiRunContext(clientRunId);
2119
+ if (chatRunState.passedRuns.has(clientRunId)) {
2120
+ chatRunState.passedRuns.delete(clientRunId);
2121
+ return;
2122
+ }
2116
2123
  if (/^\[?SILENT\]?$/i.test(text)) return;
2117
2124
  const speakerKoiId = runCtx?.speakerKoiId;
2118
2125
  const payload = {
@@ -2220,6 +2227,7 @@ function createKoiEventHandler({ broadcast, broadcastToConnIds, nodeSendToSessio
2220
2227
  if (recipients && recipients.size > 0) broadcastToConnIds("koi", toolPayload, recipients);
2221
2228
  } else broadcast("koi", koiPayload);
2222
2229
  const lifecyclePhase = evt.stream === "lifecycle" && typeof evt.data?.phase === "string" ? evt.data.phase : null;
2230
+ if (lifecyclePhase === "passed") chatRunState.passedRuns.add(clientRunId);
2223
2231
  if (sessionKey) {
2224
2232
  nodeSendToSession(sessionKey, "koi", isToolEvent ? toolPayload : koiPayload);
2225
2233
  if (!isAborted && evt.stream === "assistant" && typeof evt.data?.text === "string") emitChatDelta(sessionKey, clientRunId, evt.seq, evt.data.text);
@@ -6587,7 +6595,7 @@ const koiHandlers = {
6587
6595
  const sessionKoi = requestedSessionKey ? resolveKoiIdFromSessionKey(requestedSessionKey) : void 0;
6588
6596
  const broadcastRoster = explicitKoiId ? [explicitKoiId] : rosterAll.length > 0 ? rosterAll : sessionKoi ? [sessionKoi] : [];
6589
6597
  const broadcastTurn = broadcastRoster.length > 1;
6590
- const SILENT_GATE = `\n\n[multi-koi collab gate]\nYou are one of several specialist koi sharing this conversation. The user can read every koi, so only speak when the latest message is genuinely within your specialty. If your contribution would be marginal, off-topic, or a duplicate of what another koi is better suited to give, reply with EXACTLY the token [SILENT] (uppercase, square brackets, NO other text no leading whitespace, no trailing punctuation). Otherwise reply normally in your role's voice. The user has @-mentioned ${mentionMatch ? `${mentionMatch.companionName} so unless you have something essential to add, prefer [SILENT]` : "no koi by name; use your judgement"}.`;
6598
+ const SILENT_GATE = `\n\n[multi-koi collab gate]\nYou are one of several specialist koi sharing this conversation. Every koi sees every message in parallel. Speak ONLY when the latest message is genuinely within your specialty.\n\nIf you decide not to speak this turn because the message isn't in your lane, because another koi is clearly better suited, or because you'd add nothing of value call the \`pass\` tool IMMEDIATELY as your first and only action and stop. Silence is the default; pass freely.\n\nIf you do speak, reply normally in your role's voice WITHOUT calling pass. Don't announce that you're going to speak; just speak.\n\n@-mention context: the user ${mentionMatch ? `has addressed ${mentionMatch.companionName} defer with pass unless you have something essential to add` : "has not named a specific koi use your judgement on whether this is for you"}.`;
6591
6599
  const buildOpts = (speakerKoiId, childRunId) => ({
6592
6600
  message,
6593
6601
  images,
@@ -11006,7 +11014,7 @@ const nodeHandlers = {
11006
11014
  const p = params;
11007
11015
  const payloadJSON = typeof p.payloadJSON === "string" ? p.payloadJSON : p.payload !== void 0 ? JSON.stringify(p.payload) : null;
11008
11016
  await respondUnavailableOnThrow(respond, async () => {
11009
- const { handleNodeEvent } = await import("./server-node-events-FeLeMI0V.js");
11017
+ const { handleNodeEvent } = await import("./server-node-events-C6nlNJYg.js");
11010
11018
  const nodeId = client?.connect?.device?.id ?? client?.connect?.client?.id ?? "node";
11011
11019
  await handleNodeEvent({
11012
11020
  deps: context.deps,
@@ -1,4 +1,4 @@
1
- import { ht as loadSKYKOIPlugins } from "./reply-DMEgUFtQ.js";
1
+ import { ht as loadSKYKOIPlugins } from "./reply-rxuO803j.js";
2
2
  import { t as createSubsystemLogger } from "./subsystem-RXphV8Xh.js";
3
3
  import { l as normalizeKoiId } from "./session-key-DvA8Pdt6.js";
4
4
  import { b as sleep } from "./utils-rBzA-VDv.js";
@@ -1,4 +1,4 @@
1
- import { Bn as resolveUserTimezone, Cr as peekSystemEvents, F as resolveHeartbeatDeliveryTarget, I as resolveHeartbeatSenderContext, In as resolveEffectiveMessagesConfig, ar as getQueueSize, dr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, fn as resolveHeartbeatVisibility, fr as DEFAULT_HEARTBEAT_EVERY, ft as requestHeartbeatNow, gn as resolveIndicatorType, hr as stripHeartbeatToken, ir as enqueueCommandInLane, mr as resolveHeartbeatPrompt$1, pn as emitHeartbeatEvent, pr as isHeartbeatContentEffectivelyEmpty, pt as setHeartbeatWakeHandler, sr as CommandLane, t as getReplyFromConfig, u as isEmbeddedPiRunActive } from "./reply-DMEgUFtQ.js";
1
+ import { Bn as resolveUserTimezone, Cr as peekSystemEvents, F as resolveHeartbeatDeliveryTarget, I as resolveHeartbeatSenderContext, In as resolveEffectiveMessagesConfig, ar as getQueueSize, dr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, fn as resolveHeartbeatVisibility, fr as DEFAULT_HEARTBEAT_EVERY, ft as requestHeartbeatNow, gn as resolveIndicatorType, hr as stripHeartbeatToken, ir as enqueueCommandInLane, mr as resolveHeartbeatPrompt$1, pn as emitHeartbeatEvent, pr as isHeartbeatContentEffectivelyEmpty, pt as setHeartbeatWakeHandler, sr as CommandLane, t as getReplyFromConfig, u as isEmbeddedPiRunActive } from "./reply-rxuO803j.js";
2
2
  import { C as colorize, T as theme, c as defaultRuntime, m as info, t as createSubsystemLogger, w as isRich } from "./subsystem-RXphV8Xh.js";
3
3
  import { d as resolveKoiIdFromSessionKey, h as toKoiStoreSessionKey, l as normalizeKoiId } from "./session-key-DvA8Pdt6.js";
4
4
  import { t as runCommandWithTimeout } from "./exec-BE7MIgZB.js";
@@ -1,5 +1,5 @@
1
1
  import "./pi-embedded-helpers-1Nerrhel.js";
2
- import "./reply-DMEgUFtQ.js";
2
+ import "./reply-rxuO803j.js";
3
3
  import { T as theme, c as defaultRuntime } from "./subsystem-RXphV8Xh.js";
4
4
  import "./paths-VdmjGGyc.js";
5
5
  import { h as resolveUserPath, t as CONFIG_DIR, y as shortenHomePath } from "./utils-rBzA-VDv.js";
@@ -57,10 +57,10 @@ import "./session-cost-usage-CbribqqH.js";
57
57
  import "./control-service-DnzgVIyk.js";
58
58
  import "./channel-selection-B5tUOB8t.js";
59
59
  import "./event-log-DtrKraIx.js";
60
- import { a as resolvePackedRootDir, i as resolveArchiveKind, n as fileExists, r as readJsonFile, t as extractArchive } from "./archive-B9u8OOZC.js";
60
+ import { a as resolvePackedRootDir, i as resolveArchiveKind, n as fileExists, r as readJsonFile, t as extractArchive } from "./archive-CNNzLNkt.js";
61
61
  import { t as renderTable } from "./table-CgHdpI6b.js";
62
62
  import { a as parseFrontmatter, n as loadWorkspaceHookEntries, t as buildWorkspaceHookStatus } from "./hooks-status-Q-UXhKBw.js";
63
- import { t as buildPluginStatusReport } from "./status-DW8ZMt8J.js";
63
+ import { t as buildPluginStatusReport } from "./status-CjVErTeY.js";
64
64
  import fs from "node:fs";
65
65
  import path from "node:path";
66
66
  import os from "node:os";
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import "./pi-embedded-helpers-1Nerrhel.js";
3
- import { Rr as applyTemplate, an as monitorWebChannel, cn as installUnhandledRejectionHandler, t as getReplyFromConfig, un as waitForever } from "./reply-DMEgUFtQ.js";
3
+ import { Rr as applyTemplate, an as monitorWebChannel, cn as installUnhandledRejectionHandler, t as getReplyFromConfig, un as waitForever } from "./reply-rxuO803j.js";
4
4
  import { r as enableConsoleCapture } from "./subsystem-RXphV8Xh.js";
5
5
  import "./paths-VdmjGGyc.js";
6
6
  import { S as toWhatsappJid, d as normalizeE164, n as assertWebChannel } from "./utils-rBzA-VDv.js";
@@ -57,27 +57,27 @@ import "./session-cost-usage-CbribqqH.js";
57
57
  import "./control-service-DnzgVIyk.js";
58
58
  import "./channel-selection-B5tUOB8t.js";
59
59
  import "./event-log-DtrKraIx.js";
60
- import { t as createDefaultDeps } from "./deps-C96Ice-b.js";
60
+ import { t as createDefaultDeps } from "./deps-C6w0zh0D.js";
61
61
  import { l as ensureBinary, u as promptYesNo } from "./tailscale-4hm01eUI.js";
62
62
  import { t as loadDotEnv } from "./dotenv-DKI6139G.js";
63
63
  import { t as isMainModule } from "./is-main-BmAsi6j8.js";
64
64
  import { t as ensureSKYKOICliOnPath } from "./path-env-B1xMZ4TX.js";
65
65
  import { g as assertSupportedRuntime } from "./daemon-runtime-DkLy62aK.js";
66
66
  import "./ports-RMh76QZ2.js";
67
- import "./config-guard-DuEDsjpE.js";
67
+ import "./config-guard-C08Krrtv.js";
68
68
  import "./logging-BusiCyt_.js";
69
69
  import "./note-CbRknFZ7.js";
70
70
  import "./clack-prompter-BxHCh6Tn.js";
71
- import "./onboarding-Dllr05o7.js";
72
- import "./onboard-skills-BhXfrAUG.js";
73
- import "./github-copilot-auth-CFaT1F0b.js";
74
- import "./onboard-channels-Dv5hOlHf.js";
71
+ import "./onboarding-Cok_sxX4.js";
72
+ import "./onboard-skills-BLOc8WgQ.js";
73
+ import "./github-copilot-auth-DdQeGAzv.js";
74
+ import "./onboard-channels-Bw-uahoG.js";
75
75
  import "./plugin-auto-enable-BmXyiOxr.js";
76
- import "./archive-B9u8OOZC.js";
76
+ import "./archive-CNNzLNkt.js";
77
77
  import "./skill-scanner-WnNLktfw.js";
78
- import "./installs-BzV5AW_D.js";
79
- import "./health-format-DBH5Y6AH.js";
80
- import "./update-runner-tMcNM2Bv.js";
78
+ import "./installs-Cl9ewRZq.js";
79
+ import "./health-format-BiG-U8gj.js";
80
+ import "./update-runner-xK1RH5e4.js";
81
81
  import "./auth-DQvUzR68.js";
82
82
  import "./audit-C0ixMaLQ.js";
83
83
  import "./table-CgHdpI6b.js";
@@ -87,22 +87,22 @@ import "./systemd-BuS1yu_z.js";
87
87
  import "./service-audit-CN0kFCuS.js";
88
88
  import "./node-service-DfmbTqpi.js";
89
89
  import "./channels-status-issues-GKs-LbrV.js";
90
- import "./register.subclis-Zzdrc0FD.js";
90
+ import "./register.subclis-pPBRW6dy.js";
91
91
  import "./gateway-rpc-GLatQ1eS.js";
92
92
  import "./help-format-Cbr54gLP.js";
93
- import "./koi-CNS9LO_y.js";
94
- import "./plugin-registry-B-n5CThH.js";
95
- import "./configure-78QJpH-A.js";
93
+ import "./koi-HRpqY58O.js";
94
+ import "./plugin-registry-BI1jq13k.js";
95
+ import "./configure-VcSt2viO.js";
96
96
  import "./systemd-linger-BLQwmm6k.js";
97
97
  import "./widearea-dns-DMja3M8B.js";
98
98
  import "./bonjour-discovery-D_eYlsQc.js";
99
99
  import "./auth-health-Btj4L0TH.js";
100
- import "./doctor-CDCifg0g.js";
101
- import "./completion-cli-CavCow-_.js";
100
+ import "./doctor-DT-Vu4Up.js";
101
+ import "./completion-cli-DHpB7oTu.js";
102
102
  import "./hooks-status-Q-UXhKBw.js";
103
103
  import "./tui-9aUeGcxw.js";
104
- import "./channel-options-D8k02BYT.js";
105
- import { n as buildProgram } from "./program-B54Cxjlx.js";
104
+ import "./channel-options-DUtJYHBr.js";
105
+ import { n as buildProgram } from "./program-BT9Zitzu.js";
106
106
  import process from "node:process";
107
107
  import { fileURLToPath } from "node:url";
108
108
 
@@ -1,7 +1,7 @@
1
1
  import { h as resolveUserPath, t as CONFIG_DIR } from "./utils-rBzA-VDv.js";
2
2
  import { t as runCommandWithTimeout } from "./exec-BE7MIgZB.js";
3
3
  import { a as MANIFEST_KEY } from "./manifest-registry-BM_kgwtA.js";
4
- import { a as resolvePackedRootDir, i as resolveArchiveKind, n as fileExists, r as readJsonFile, t as extractArchive } from "./archive-B9u8OOZC.js";
4
+ import { a as resolvePackedRootDir, i as resolveArchiveKind, n as fileExists, r as readJsonFile, t as extractArchive } from "./archive-CNNzLNkt.js";
5
5
  import { t as scanDirectoryWithSummary } from "./skill-scanner-WnNLktfw.js";
6
6
  import path from "node:path";
7
7
  import os from "node:os";
@@ -1,5 +1,5 @@
1
1
  import { H as normalizeThinkLevel, I as formatThinkingLevels, K as supportsXHighThinking, L as formatXHighModelHint, W as normalizeVerboseLevel } from "./pi-embedded-helpers-1Nerrhel.js";
2
- import { An as KOI_LANE_NESTED, Gt as getRemoteSkillEligibility, H as runWithModelFallback, L as resolveOutboundTarget, R as resolveSessionDeliveryTarget, Zt as getSkillsSnapshotVersion, _r as clearSessionAuthProfileOverride, c as runEmbeddedPiKoi, gr as lookupContextTokens, i as runCliKoi, n as getCliSessionId, o as resolveSendPolicy, r as setCliSessionId, vr as applyModelOverrideToSessionEntry, wr as loadModelCatalog, yr as applyVerboseOverride, zr as resolveKoiTimeoutMs } from "./reply-DMEgUFtQ.js";
2
+ import { An as KOI_LANE_NESTED, Gt as getRemoteSkillEligibility, H as runWithModelFallback, L as resolveOutboundTarget, R as resolveSessionDeliveryTarget, Zt as getSkillsSnapshotVersion, _r as clearSessionAuthProfileOverride, c as runEmbeddedPiKoi, gr as lookupContextTokens, i as runCliKoi, n as getCliSessionId, o as resolveSendPolicy, r as setCliSessionId, vr as applyModelOverrideToSessionEntry, wr as loadModelCatalog, yr as applyVerboseOverride, zr as resolveKoiTimeoutMs } from "./reply-rxuO803j.js";
3
3
  import { N as DEFAULT_CHAT_CHANNEL, c as defaultRuntime } from "./subsystem-RXphV8Xh.js";
4
4
  import { d as resolveKoiIdFromSessionKey, l as normalizeKoiId, u as normalizeMainKey } from "./session-key-DvA8Pdt6.js";
5
5
  import { S as ensureKoiWorkspace, a as resolveKoiDir, c as resolveKoiSkillsFilter, l as resolveKoiWorkspaceDir, n as listKoiIds, o as resolveKoiModelFallbacksOverride, s as resolveKoiModelPrimary } from "./koi-scope-Bhy7bqp7.js";
@@ -13,7 +13,7 @@ import { n as resolveSessionFilePath, o as resolveStorePath } from "./paths-tKN7
13
13
  import { a as normalizeOutboundPayloadsForJson, i as normalizeOutboundPayloads, r as formatOutboundPayloadLog, t as deliverOutboundPayloads } from "./deliver-CJ2Pjcyz.js";
14
14
  import { n as emitKoiEvent, o as registerKoiRunContext, t as clearKoiRunContext } from "./koi-events-Cx85mo2K.js";
15
15
  import { l as hasNonzeroUsage } from "./session-cost-usage-CbribqqH.js";
16
- import { t as createDefaultDeps } from "./deps-C96Ice-b.js";
16
+ import { t as createDefaultDeps } from "./deps-C6w0zh0D.js";
17
17
  import crypto from "node:crypto";
18
18
 
19
19
  //#region src/cli/outbound-send-deps.ts
@@ -1,5 +1,5 @@
1
1
  import "./pi-embedded-helpers-1Nerrhel.js";
2
- import { Nt as openUrl, U as describeFailoverError, c as runEmbeddedPiKoi, gt as loadProviderUsageSummary, vt as formatUsageWindowSummary, wr as loadModelCatalog, yt as resolveUsageProviderId } from "./reply-DMEgUFtQ.js";
2
+ import { Nt as openUrl, U as describeFailoverError, c as runEmbeddedPiKoi, gt as loadProviderUsageSummary, vt as formatUsageWindowSummary, wr as loadModelCatalog, yt as resolveUsageProviderId } from "./reply-rxuO803j.js";
3
3
  import { C as colorize, T as theme, c as defaultRuntime, w as isRich$1 } from "./subsystem-RXphV8Xh.js";
4
4
  import { t as CONFIG_PATH } from "./paths-VdmjGGyc.js";
5
5
  import { y as shortenHomePath } from "./utils-rBzA-VDv.js";
@@ -61,7 +61,7 @@ import "./event-log-DtrKraIx.js";
61
61
  import { n as logConfigUpdated } from "./logging-BusiCyt_.js";
62
62
  import "./note-CbRknFZ7.js";
63
63
  import { t as createClackPrompter } from "./clack-prompter-BxHCh6Tn.js";
64
- import { a as normalizeAlias, c as updateConfig, d as resolvePluginProviders, i as formatTokenK, l as createVpsAwareOAuthHandlers, n as ensureFlagCompatibility, o as resolveKnownKoiId, pt as validateAnthropicSetupToken, r as formatMs, s as resolveModelTarget, t as githubCopilotLoginCommand, u as isRemoteEnvironment, v as applyAuthProfileConfig } from "./github-copilot-auth-CFaT1F0b.js";
64
+ import { a as normalizeAlias, c as updateConfig, d as resolvePluginProviders, i as formatTokenK, l as createVpsAwareOAuthHandlers, n as ensureFlagCompatibility, o as resolveKnownKoiId, pt as validateAnthropicSetupToken, r as formatMs, s as resolveModelTarget, t as githubCopilotLoginCommand, u as isRemoteEnvironment, v as applyAuthProfileConfig } from "./github-copilot-auth-DdQeGAzv.js";
65
65
  import { t as renderTable } from "./table-CgHdpI6b.js";
66
66
  import { i as redactSecrets } from "./format-BimjsTfO.js";
67
67
  import { n as buildAuthHealthSummary, r as formatRemainingShort, t as DEFAULT_OAUTH_WARN_MS } from "./auth-health-Btj4L0TH.js";
@@ -1,4 +1,4 @@
1
- import { ht as loadSKYKOIPlugins } from "./reply-DMEgUFtQ.js";
1
+ import { ht as loadSKYKOIPlugins } from "./reply-rxuO803j.js";
2
2
  import { F as formatChannelSelectionLine, L as listChatChannels, P as formatChannelPrimerLine, t as createSubsystemLogger } from "./subsystem-RXphV8Xh.js";
3
3
  import { c as normalizeAccountId, t as DEFAULT_ACCOUNT_ID } from "./session-key-DvA8Pdt6.js";
4
4
  import { l as resolveKoiWorkspaceDir, r as resolveDefaultKoiId } from "./koi-scope-Bhy7bqp7.js";
@@ -7,7 +7,7 @@ import { n as listChannelPlugins, t as getChannelPlugin } from "./plugins-DUZvbU
7
7
  import { t as formatDocsLink } from "./links-D5FJjx5x.js";
8
8
  import { t as resolveChannelDefaultAccountId } from "./helpers-BMifWcsO.js";
9
9
  import { i as listChannelPluginCatalogEntries, n as isChannelConfigured } from "./plugin-auto-enable-BmXyiOxr.js";
10
- import { n as installPluginFromNpmSpec, t as recordPluginInstall } from "./installs-BzV5AW_D.js";
10
+ import { n as installPluginFromNpmSpec, t as recordPluginInstall } from "./installs-Cl9ewRZq.js";
11
11
  import fs from "node:fs";
12
12
  import path from "node:path";
13
13
 
@@ -1,4 +1,4 @@
1
- import { Nt as openUrl, Rt as resolveNodeManagerOptions, Tt as detectBinary, wr as loadModelCatalog } from "./reply-DMEgUFtQ.js";
1
+ import { Nt as openUrl, Rt as resolveNodeManagerOptions, Tt as detectBinary, wr as loadModelCatalog } from "./reply-rxuO803j.js";
2
2
  import { f as resolveConfigDir, h as resolveUserPath, s as ensureDir, t as CONFIG_DIR } from "./utils-rBzA-VDv.js";
3
3
  import { t as runCommandWithTimeout } from "./exec-BE7MIgZB.js";
4
4
  import { T as resolveDefaultKoiWorkspaceDir, a as resolveKoiDir, l as resolveKoiWorkspaceDir, r as resolveDefaultKoiId, s as resolveKoiModelPrimary } from "./koi-scope-Bhy7bqp7.js";
@@ -8,8 +8,8 @@ import { t as formatCliCommand } from "./command-format-CvpDYKxh.js";
8
8
  import { _ as resolveSkillKey, d as hasBinary, i as loadWorkspaceSkillEntries, t as resolveSkillsInstallPreferences } from "./skills-CtnLB14H.js";
9
9
  import { Y as fetchWithSsrFGuard } from "./deliver-CJ2Pjcyz.js";
10
10
  import { t as resolveBrewExecutable } from "./brew-C9lrPXob.js";
11
- import { $ as setOpenrouterApiKey, A as applyQianfanProviderConfig, B as applyXiaomiProviderConfig, C as applyMoonshotConfig, D as applyOpenrouterConfig, E as applyMoonshotProviderConfigCn, F as applyVercelAiGatewayConfig, G as ZAI_DEFAULT_MODEL_REF, H as OPENROUTER_DEFAULT_MODEL_REF, I as applyVercelAiGatewayProviderConfig, J as setGeminiApiKey, K as setAnthropicApiKey, L as applyXaiConfig, M as applySyntheticProviderConfig, N as applyVeniceConfig, O as applyOpenrouterProviderConfig, P as applyVeniceProviderConfig, Q as setOpencodeZenApiKey, R as applyXaiProviderConfig, S as applyKimiCodeProviderConfig, T as applyMoonshotProviderConfig, U as VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF, V as applyZaiConfig, W as XIAOMI_DEFAULT_MODEL_REF, X as setMinimaxApiKey, Y as setKimiCodingApiKey, Z as setMoonshotApiKey, _ as applyMinimaxProviderConfig, at as setXiaomiApiKey, b as applyCloudflareAiGatewayProviderConfig, ct as KIMI_CODING_MODEL_REF, d as resolvePluginProviders, dt as XAI_DEFAULT_MODEL_REF, et as setQianfanApiKey, f as applyOpencodeZenConfig, ft as buildTokenProfileId, g as applyMinimaxConfig, h as applyMinimaxApiProviderConfig, i as formatTokenK, it as setXaiApiKey, j as applySyntheticConfig, k as applyQianfanConfig, l as createVpsAwareOAuthHandlers, lt as MOONSHOT_DEFAULT_MODEL_REF, m as applyMinimaxApiConfig, nt as setVeniceApiKey, ot as setZaiApiKey, p as applyOpencodeZenProviderConfig, pt as validateAnthropicSetupToken, q as setCloudflareAiGatewayConfig, rt as setVercelAiGatewayApiKey, st as writeOAuthCredentials, t as githubCopilotLoginCommand, tt as setSyntheticApiKey, u as isRemoteEnvironment, ut as QIANFAN_DEFAULT_MODEL_REF, v as applyAuthProfileConfig, w as applyMoonshotConfigCn, x as applyKimiCodeConfig, y as applyCloudflareAiGatewayConfig, z as applyXiaomiConfig } from "./github-copilot-auth-CFaT1F0b.js";
12
- import { a as enablePluginInConfig } from "./onboard-channels-Dv5hOlHf.js";
11
+ import { $ as setOpenrouterApiKey, A as applyQianfanProviderConfig, B as applyXiaomiProviderConfig, C as applyMoonshotConfig, D as applyOpenrouterConfig, E as applyMoonshotProviderConfigCn, F as applyVercelAiGatewayConfig, G as ZAI_DEFAULT_MODEL_REF, H as OPENROUTER_DEFAULT_MODEL_REF, I as applyVercelAiGatewayProviderConfig, J as setGeminiApiKey, K as setAnthropicApiKey, L as applyXaiConfig, M as applySyntheticProviderConfig, N as applyVeniceConfig, O as applyOpenrouterProviderConfig, P as applyVeniceProviderConfig, Q as setOpencodeZenApiKey, R as applyXaiProviderConfig, S as applyKimiCodeProviderConfig, T as applyMoonshotProviderConfig, U as VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF, V as applyZaiConfig, W as XIAOMI_DEFAULT_MODEL_REF, X as setMinimaxApiKey, Y as setKimiCodingApiKey, Z as setMoonshotApiKey, _ as applyMinimaxProviderConfig, at as setXiaomiApiKey, b as applyCloudflareAiGatewayProviderConfig, ct as KIMI_CODING_MODEL_REF, d as resolvePluginProviders, dt as XAI_DEFAULT_MODEL_REF, et as setQianfanApiKey, f as applyOpencodeZenConfig, ft as buildTokenProfileId, g as applyMinimaxConfig, h as applyMinimaxApiProviderConfig, i as formatTokenK, it as setXaiApiKey, j as applySyntheticConfig, k as applyQianfanConfig, l as createVpsAwareOAuthHandlers, lt as MOONSHOT_DEFAULT_MODEL_REF, m as applyMinimaxApiConfig, nt as setVeniceApiKey, ot as setZaiApiKey, p as applyOpencodeZenProviderConfig, pt as validateAnthropicSetupToken, q as setCloudflareAiGatewayConfig, rt as setVercelAiGatewayApiKey, st as writeOAuthCredentials, t as githubCopilotLoginCommand, tt as setSyntheticApiKey, u as isRemoteEnvironment, ut as QIANFAN_DEFAULT_MODEL_REF, v as applyAuthProfileConfig, w as applyMoonshotConfigCn, x as applyKimiCodeConfig, y as applyCloudflareAiGatewayConfig, z as applyXiaomiConfig } from "./github-copilot-auth-DdQeGAzv.js";
12
+ import { a as enablePluginInConfig } from "./onboard-channels-Bw-uahoG.js";
13
13
  import { t as scanDirectoryWithSummary } from "./skill-scanner-WnNLktfw.js";
14
14
  import { t as buildWorkspaceSkillStatus } from "./skills-status-PwtGQTh5.js";
15
15
  import { n as resolveWideAreaDiscoveryDomain } from "./widearea-dns-DMja3M8B.js";
@@ -1,4 +1,4 @@
1
- import { $ as summarizeRestartSentinel, At as handleReset, Bt as waitForGatewayReachable, Cr as peekSystemEvents, Ct as DEFAULT_WORKSPACE, Dt as ensureWorkspaceAndSessions, Et as detectBrowserOpenSupport, Fn as getMemorySearchManager, Ft as probeGatewayReachable, Gt as getRemoteSkillEligibility, It as randomToken, Lt as resolveControlUiLinks, Mt as normalizeGatewayTokenInput, Nt as openUrl, Ot as formatControlUiSshHint, Pt as printWizardHeader, Q as readRestartSentinel, Ut as normalizeControlUiBasePath, _t as formatUsageReportLines, b as listKoisForGateway, f as sha256HexPrefix, gr as lookupContextTokens, gt as loadProviderUsageSummary, wt as applyWizardMetadata, zt as summarizeExistingConfig } from "./reply-DMEgUFtQ.js";
1
+ import { $ as summarizeRestartSentinel, At as handleReset, Bt as waitForGatewayReachable, Cr as peekSystemEvents, Ct as DEFAULT_WORKSPACE, Dt as ensureWorkspaceAndSessions, Et as detectBrowserOpenSupport, Fn as getMemorySearchManager, Ft as probeGatewayReachable, Gt as getRemoteSkillEligibility, It as randomToken, Lt as resolveControlUiLinks, Mt as normalizeGatewayTokenInput, Nt as openUrl, Ot as formatControlUiSshHint, Pt as printWizardHeader, Q as readRestartSentinel, Ut as normalizeControlUiBasePath, _t as formatUsageReportLines, b as listKoisForGateway, f as sha256HexPrefix, gr as lookupContextTokens, gt as loadProviderUsageSummary, wt as applyWizardMetadata, zt as summarizeExistingConfig } from "./reply-rxuO803j.js";
2
2
  import { T as theme, c as defaultRuntime, l as restoreTerminalState, m as info, w as isRich } from "./subsystem-RXphV8Xh.js";
3
3
  import { n as DEFAULT_GATEWAY_PORT, u as resolveGatewayPort } from "./paths-VdmjGGyc.js";
4
4
  import { l as normalizeKoiId, v as parseKoiSessionKey } from "./session-key-DvA8Pdt6.js";
@@ -21,10 +21,10 @@ import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, n as GATEWA
21
21
  import { t as resolveChannelDefaultAccountId } from "./helpers-BMifWcsO.js";
22
22
  import { n as logConfigUpdated } from "./logging-BusiCyt_.js";
23
23
  import { t as WizardCancelledError } from "./prompts-DxnxCHKt.js";
24
- import { d as applyAuthChoice, h as promptAuthChoiceGrouped, l as resolvePreferredProviderForAuthChoice, o as applyPrimaryModel, r as promptRemoteGatewayConfig, s as promptDefaultModel, t as setupSkills, u as warnIfModelConfigLooksOff } from "./onboard-skills-BhXfrAUG.js";
25
- import { n as setupChannels } from "./onboard-channels-Dv5hOlHf.js";
26
- import { l as healthCommand, n as ensureControlUiAssetsBuilt, s as formatHealthChannelLines, t as formatHealthCheckFailure, u as resolveHeartbeatSummaryForKoi } from "./health-format-DBH5Y6AH.js";
27
- import { C as resolveEffectiveUpdateChannel, S as normalizeUpdateChannel, d as formatUpdateOneLiner, f as getUpdateCheckResult, h as compareSemverStrings, l as ensureCompletionCacheExists, m as checkUpdateStatus, p as resolveUpdateAvailability, s as checkShellCompletionStatus, u as formatUpdateAvailableHint, x as formatUpdateChannelLabel } from "./update-runner-tMcNM2Bv.js";
24
+ import { d as applyAuthChoice, h as promptAuthChoiceGrouped, l as resolvePreferredProviderForAuthChoice, o as applyPrimaryModel, r as promptRemoteGatewayConfig, s as promptDefaultModel, t as setupSkills, u as warnIfModelConfigLooksOff } from "./onboard-skills-BLOc8WgQ.js";
25
+ import { n as setupChannels } from "./onboard-channels-Bw-uahoG.js";
26
+ import { l as healthCommand, n as ensureControlUiAssetsBuilt, s as formatHealthChannelLines, t as formatHealthCheckFailure, u as resolveHeartbeatSummaryForKoi } from "./health-format-BiG-U8gj.js";
27
+ import { C as resolveEffectiveUpdateChannel, S as normalizeUpdateChannel, d as formatUpdateOneLiner, f as getUpdateCheckResult, h as compareSemverStrings, l as ensureCompletionCacheExists, m as checkUpdateStatus, p as resolveUpdateAvailability, s as checkShellCompletionStatus, u as formatUpdateAvailableHint, x as formatUpdateChannelLabel } from "./update-runner-xK1RH5e4.js";
28
28
  import { i as probeGateway, t as runSecurityAudit } from "./audit-C0ixMaLQ.js";
29
29
  import { t as renderTable } from "./table-CgHdpI6b.js";
30
30
  import { t as buildWorkspaceSkillStatus } from "./skills-status-PwtGQTh5.js";
@@ -34,7 +34,7 @@ import { o as readLastGatewayErrorLine } from "./service-audit-CN0kFCuS.js";
34
34
  import { t as resolveNodeService } from "./node-service-DfmbTqpi.js";
35
35
  import { t as collectChannelStatusIssues } from "./channels-status-issues-GKs-LbrV.js";
36
36
  import { i as redactSecrets, n as formatDuration$1, r as formatGatewayAuthUsed, t as formatAge$1 } from "./format-BimjsTfO.js";
37
- import { r as installCompletion } from "./completion-cli-CavCow-_.js";
37
+ import { r as installCompletion } from "./completion-cli-DHpB7oTu.js";
38
38
  import { t as buildWorkspaceHookStatus } from "./hooks-status-Q-UXhKBw.js";
39
39
  import { t as runTui } from "./tui-9aUeGcxw.js";
40
40
  import fs from "node:fs";
@@ -1,4 +1,4 @@
1
- import { ht as loadSKYKOIPlugins } from "./reply-DMEgUFtQ.js";
1
+ import { ht as loadSKYKOIPlugins } from "./reply-rxuO803j.js";
2
2
  import { t as createSubsystemLogger } from "./subsystem-RXphV8Xh.js";
3
3
  import { l as resolveKoiWorkspaceDir, r as resolveDefaultKoiId } from "./koi-scope-Bhy7bqp7.js";
4
4
  import { o as loadConfig } from "./config-C_blrocr.js";
@@ -21,7 +21,7 @@ import chalk, { Chalk } from "chalk";
21
21
  import fs, { constants, createWriteStream, existsSync, promises, statSync } from "node:fs";
22
22
  import path, { join } from "node:path";
23
23
  import { Logger } from "tslog";
24
- import JSON5 from "json5";
24
+ import json5 from "json5";
25
25
  import os, { homedir, tmpdir } from "node:os";
26
26
  import { promisify } from "node:util";
27
27
  import fs$1 from "node:fs/promises";
@@ -2262,7 +2262,7 @@ function readLoggingConfig() {
2262
2262
  try {
2263
2263
  if (!fs.existsSync(configPath)) return;
2264
2264
  const raw = fs.readFileSync(configPath, "utf-8");
2265
- const logging = JSON5.parse(raw)?.logging;
2265
+ const logging = json5.parse(raw)?.logging;
2266
2266
  if (!logging || typeof logging !== "object" || Array.isArray(logging)) return;
2267
2267
  return logging;
2268
2268
  } catch {
@@ -18990,7 +18990,7 @@ var IncludeProcessor = class IncludeProcessor {
18990
18990
  };
18991
18991
  const defaultResolver = {
18992
18992
  readFile: (p) => fs.readFileSync(p, "utf-8"),
18993
- parseJson: (raw) => JSON5.parse(raw)
18993
+ parseJson: (raw) => json5.parse(raw)
18994
18994
  };
18995
18995
  /**
18996
18996
  * Resolves all $include directives in a parsed config object.
@@ -21665,18 +21665,18 @@ function resolveConfigPathForDeps(deps) {
21665
21665
  function normalizeDeps(overrides = {}) {
21666
21666
  return {
21667
21667
  fs: overrides.fs ?? fs,
21668
- json5: overrides.json5 ?? JSON5,
21668
+ json5: overrides.json5 ?? json5,
21669
21669
  env: overrides.env ?? process.env,
21670
21670
  homedir: overrides.homedir ?? os.homedir,
21671
21671
  configPath: overrides.configPath ?? "",
21672
21672
  logger: overrides.logger ?? console
21673
21673
  };
21674
21674
  }
21675
- function parseConfigJson5(raw, json5 = JSON5) {
21675
+ function parseConfigJson5(raw, json5$1 = json5) {
21676
21676
  try {
21677
21677
  return {
21678
21678
  ok: true,
21679
- parsed: json5.parse(raw)
21679
+ parsed: json5$1.parse(raw)
21680
21680
  };
21681
21681
  } catch (err) {
21682
21682
  return {
@@ -22190,7 +22190,7 @@ function loadSessionStore(storePath, opts = {}) {
22190
22190
  let mtimeMs = getFileMtimeMs(storePath);
22191
22191
  try {
22192
22192
  const raw = fs.readFileSync(storePath, "utf-8");
22193
- const parsed = JSON5.parse(raw);
22193
+ const parsed = json5.parse(raw);
22194
22194
  if (isSessionStoreRecord(parsed)) store = parsed;
22195
22195
  mtimeMs = getFileMtimeMs(storePath) ?? mtimeMs;
22196
22196
  } catch {}
@@ -243150,6 +243150,33 @@ const DeliverableToolSchema = Type.Object({
243150
243150
  label: Type.Optional(Type.String())
243151
243151
  });
243152
243152
 
243153
+ //#endregion
243154
+ //#region src/koi/tools/pass-tool.ts
243155
+ /**
243156
+ * The `pass` tool — used in multi-koi broadcast turns. Every koi
243157
+ * runs in parallel on each user message; the ones who don't have
243158
+ * something on-topic to say call `pass` immediately and stop. The
243159
+ * gateway watches for that tool call and:
243160
+ * 1. Suppresses the run's chat-final emit, so no bubble appears.
243161
+ * 2. Skips the transcript append so silent runs leave no trace.
243162
+ * 3. Emits a `koi.lifecycle.passed` event so the UI can drop the
243163
+ * koi from the "thinking…" indicator without rendering a
243164
+ * placeholder.
243165
+ *
243166
+ * Discord-style intuition: a person who has nothing to add stays
243167
+ * quiet — they don't announce "I'll pass." This tool is that
243168
+ * silence, made explicit so the runtime can act on it.
243169
+ */
243170
+ const PassToolSchema = Type.Object({ reason: Type.Optional(Type.String()) });
243171
+ const PASS_DESCRIPTION = [
243172
+ "Decline to respond this turn. Call this immediately as your FIRST action when the latest user message is not within your specialty, has already been answered well by another koi this turn, or simply doesn't need your input.",
243173
+ "",
243174
+ "Rules:",
243175
+ " - Call pass and STOP. Do not write any text before or after.",
243176
+ " - Pass freely. Silence is the default. Only speak when you genuinely add value.",
243177
+ " - One reason field, optional, ≤ 10 words. For your own logs."
243178
+ ].join("\n");
243179
+
243153
243180
  //#endregion
243154
243181
  //#region src/koi/tools/plan-tool.ts
243155
243182
  /**
@@ -0,0 +1,2 @@
1
+ import { type AnyKoiTool } from "./common.js";
2
+ export declare function createPassTool(): AnyKoiTool;
@@ -1,5 +1,5 @@
1
1
  import "./pi-embedded-helpers-1Nerrhel.js";
2
- import "./reply-DMEgUFtQ.js";
2
+ import "./reply-rxuO803j.js";
3
3
  import { T as theme, c as defaultRuntime } from "./subsystem-RXphV8Xh.js";
4
4
  import "./paths-VdmjGGyc.js";
5
5
  import { h as resolveUserPath, v as shortenHomeInString, y as shortenHomePath } from "./utils-rBzA-VDv.js";
@@ -56,12 +56,12 @@ import "./session-cost-usage-CbribqqH.js";
56
56
  import "./control-service-DnzgVIyk.js";
57
57
  import "./channel-selection-B5tUOB8t.js";
58
58
  import "./event-log-DtrKraIx.js";
59
- import { i as resolveArchiveKind } from "./archive-B9u8OOZC.js";
59
+ import { i as resolveArchiveKind } from "./archive-CNNzLNkt.js";
60
60
  import "./skill-scanner-WnNLktfw.js";
61
- import { n as installPluginFromNpmSpec, r as installPluginFromPath, t as recordPluginInstall } from "./installs-BzV5AW_D.js";
61
+ import { n as installPluginFromNpmSpec, r as installPluginFromPath, t as recordPluginInstall } from "./installs-Cl9ewRZq.js";
62
62
  import { t as renderTable } from "./table-CgHdpI6b.js";
63
- import { t as buildPluginStatusReport } from "./status-DW8ZMt8J.js";
64
- import { n as updateNpmInstalledPlugins } from "./update-DTmTPV0W.js";
63
+ import { t as buildPluginStatusReport } from "./status-CjVErTeY.js";
64
+ import { n as updateNpmInstalledPlugins } from "./update-BOUEmMWa.js";
65
65
  import fs from "node:fs";
66
66
  import path from "node:path";
67
67
 
@@ -4,11 +4,11 @@ import { n as replaceCliName, r as resolveCliName } from "./command-format-CvpDY
4
4
  import { t as isTruthyEnvValue } from "./env-Bj0uZSiW.js";
5
5
  import { N as VERSION } from "./config-C_blrocr.js";
6
6
  import { t as formatDocsLink } from "./links-D5FJjx5x.js";
7
- import { r as registerProgramCommands, t as ensureConfigReady } from "./config-guard-DuEDsjpE.js";
8
- import { a as getCommandPath, d as hasHelpOrVersion, l as getVerboseFlag } from "./register.subclis-Zzdrc0FD.js";
9
- import { t as ensurePluginRegistryLoaded } from "./plugin-registry-B-n5CThH.js";
7
+ import { r as registerProgramCommands, t as ensureConfigReady } from "./config-guard-C08Krrtv.js";
8
+ import { a as getCommandPath, d as hasHelpOrVersion, l as getVerboseFlag } from "./register.subclis-pPBRW6dy.js";
9
+ import { t as ensurePluginRegistryLoaded } from "./plugin-registry-BI1jq13k.js";
10
10
  import { i as hasEmittedCliBanner, n as emitCliBanner, r as formatCliBannerLine } from "./tui-9aUeGcxw.js";
11
- import { n as resolveCliChannelOptions } from "./channel-options-D8k02BYT.js";
11
+ import { n as resolveCliChannelOptions } from "./channel-options-DUtJYHBr.js";
12
12
  import { Command } from "commander";
13
13
 
14
14
  //#region src/cli/program/context.ts
@@ -124,14 +124,14 @@ const entries = [
124
124
  name: "gateway",
125
125
  description: "Gateway control",
126
126
  register: async (program) => {
127
- (await import("./gateway-cli-Bq9zfW47.js")).registerGatewayCli(program);
127
+ (await import("./gateway-cli-BOgL00Sg.js")).registerGatewayCli(program);
128
128
  }
129
129
  },
130
130
  {
131
131
  name: "daemon",
132
132
  description: "Gateway service (legacy alias)",
133
133
  register: async (program) => {
134
- (await import("./daemon-cli-Kh3L2cdB.js").then((n) => n.t)).registerDaemonCli(program);
134
+ (await import("./daemon-cli-CzwhzZ7G.js").then((n) => n.t)).registerDaemonCli(program);
135
135
  }
136
136
  },
137
137
  {
@@ -152,7 +152,7 @@ const entries = [
152
152
  name: "models",
153
153
  description: "Model configuration",
154
154
  register: async (program) => {
155
- (await import("./models-cli-C_mwL4pD.js")).registerModelsCli(program);
155
+ (await import("./models-cli-BFh1MzOF.js")).registerModelsCli(program);
156
156
  }
157
157
  },
158
158
  {
@@ -222,7 +222,7 @@ const entries = [
222
222
  name: "hooks",
223
223
  description: "Hooks tooling",
224
224
  register: async (program) => {
225
- (await import("./hooks-cli-Dmoia8up.js")).registerHooksCli(program);
225
+ (await import("./hooks-cli-C-yjnPKG.js")).registerHooksCli(program);
226
226
  }
227
227
  },
228
228
  {
@@ -236,7 +236,7 @@ const entries = [
236
236
  name: "pairing",
237
237
  description: "Pairing helpers",
238
238
  register: async (program) => {
239
- const { registerPluginCliCommands } = await import("./cli-CSSsiq84.js");
239
+ const { registerPluginCliCommands } = await import("./cli-4Zf9ZEgS.js");
240
240
  registerPluginCliCommands(program, await loadConfig());
241
241
  (await import("./pairing-cli-dTqsADHe.js")).registerPairingCli(program);
242
242
  }
@@ -245,8 +245,8 @@ const entries = [
245
245
  name: "plugins",
246
246
  description: "Plugin management",
247
247
  register: async (program) => {
248
- (await import("./plugins-cli-DLFKNRnv.js")).registerPluginsCli(program);
249
- const { registerPluginCliCommands } = await import("./cli-CSSsiq84.js");
248
+ (await import("./plugins-cli-4jQx3-V_.js")).registerPluginsCli(program);
249
+ const { registerPluginCliCommands } = await import("./cli-4Zf9ZEgS.js");
250
250
  registerPluginCliCommands(program, await loadConfig());
251
251
  }
252
252
  },
@@ -254,7 +254,7 @@ const entries = [
254
254
  name: "channels",
255
255
  description: "Channel management",
256
256
  register: async (program) => {
257
- (await import("./channels-cli-Du_M1LsR.js")).registerChannelsCli(program);
257
+ (await import("./channels-cli-C9061eEi.js")).registerChannelsCli(program);
258
258
  }
259
259
  },
260
260
  {
@@ -282,14 +282,14 @@ const entries = [
282
282
  name: "update",
283
283
  description: "CLI update helpers",
284
284
  register: async (program) => {
285
- (await import("./update-cli-BZIXQu3F.js")).registerUpdateCli(program);
285
+ (await import("./update-cli-Dvv0rvQX.js")).registerUpdateCli(program);
286
286
  }
287
287
  },
288
288
  {
289
289
  name: "completion",
290
290
  description: "Generate shell completion script",
291
291
  register: async (program) => {
292
- (await import("./completion-cli-CavCow-_.js").then((n) => n.n)).registerCompletionCli(program);
292
+ (await import("./completion-cli-DHpB7oTu.js").then((n) => n.n)).registerCompletionCli(program);
293
293
  }
294
294
  }
295
295
  ];
@@ -155691,6 +155691,59 @@ function createDeliverableTool() {
155691
155691
  };
155692
155692
  }
155693
155693
 
155694
+ //#endregion
155695
+ //#region src/koi/tools/pass-tool.ts
155696
+ /**
155697
+ * The `pass` tool — used in multi-koi broadcast turns. Every koi
155698
+ * runs in parallel on each user message; the ones who don't have
155699
+ * something on-topic to say call `pass` immediately and stop. The
155700
+ * gateway watches for that tool call and:
155701
+ * 1. Suppresses the run's chat-final emit, so no bubble appears.
155702
+ * 2. Skips the transcript append so silent runs leave no trace.
155703
+ * 3. Emits a `koi.lifecycle.passed` event so the UI can drop the
155704
+ * koi from the "thinking…" indicator without rendering a
155705
+ * placeholder.
155706
+ *
155707
+ * Discord-style intuition: a person who has nothing to add stays
155708
+ * quiet — they don't announce "I'll pass." This tool is that
155709
+ * silence, made explicit so the runtime can act on it.
155710
+ */
155711
+ const PassToolSchema = Type.Object({ reason: Type.Optional(Type.String()) });
155712
+ const PASS_DESCRIPTION = [
155713
+ "Decline to respond this turn. Call this immediately as your FIRST action when the latest user message is not within your specialty, has already been answered well by another koi this turn, or simply doesn't need your input.",
155714
+ "",
155715
+ "Rules:",
155716
+ " - Call pass and STOP. Do not write any text before or after.",
155717
+ " - Pass freely. Silence is the default. Only speak when you genuinely add value.",
155718
+ " - One reason field, optional, ≤ 10 words. For your own logs."
155719
+ ].join("\n");
155720
+ function createPassTool() {
155721
+ return {
155722
+ label: "pass",
155723
+ name: "pass",
155724
+ description: PASS_DESCRIPTION,
155725
+ parameters: PassToolSchema,
155726
+ execute: async (_toolCallId, args) => {
155727
+ const reason = typeof args?.reason === "string" ? (args.reason ?? "").slice(0, 200) : "";
155728
+ const runId = getCurrentRunId();
155729
+ const ctx = runId ? getKoiRunContext(runId) : void 0;
155730
+ if (runId) emitKoiEvent({
155731
+ runId,
155732
+ stream: "lifecycle",
155733
+ data: {
155734
+ phase: "passed",
155735
+ reason: reason || void 0,
155736
+ speakerKoiId: ctx?.speakerKoiId
155737
+ }
155738
+ });
155739
+ return jsonResult({
155740
+ ok: true,
155741
+ passed: true
155742
+ });
155743
+ }
155744
+ };
155745
+ }
155746
+
155694
155747
  //#endregion
155695
155748
  //#region src/koi/tools/plan-tool.ts
155696
155749
  /**
@@ -157219,6 +157272,7 @@ function createSKYKOITools(options) {
157219
157272
  requireExplicitTarget: options?.requireExplicitMessageTarget
157220
157273
  });
157221
157274
  const tools = [
157275
+ createPassTool(),
157222
157276
  createPlanTool(),
157223
157277
  createChecklistTool(),
157224
157278
  createPreviewCheckTool(),
@@ -1,5 +1,5 @@
1
1
  import "./pi-embedded-helpers-1Nerrhel.js";
2
- import { cn as installUnhandledRejectionHandler } from "./reply-DMEgUFtQ.js";
2
+ import { cn as installUnhandledRejectionHandler } from "./reply-rxuO803j.js";
3
3
  import { c as defaultRuntime, r as enableConsoleCapture } from "./subsystem-RXphV8Xh.js";
4
4
  import "./paths-VdmjGGyc.js";
5
5
  import "./utils-rBzA-VDv.js";
@@ -56,25 +56,25 @@ import "./session-cost-usage-CbribqqH.js";
56
56
  import "./control-service-DnzgVIyk.js";
57
57
  import "./channel-selection-B5tUOB8t.js";
58
58
  import "./event-log-DtrKraIx.js";
59
- import "./deps-C96Ice-b.js";
59
+ import "./deps-C6w0zh0D.js";
60
60
  import "./tailscale-4hm01eUI.js";
61
61
  import { t as loadDotEnv } from "./dotenv-DKI6139G.js";
62
62
  import { t as ensureSKYKOICliOnPath } from "./path-env-B1xMZ4TX.js";
63
63
  import { g as assertSupportedRuntime } from "./daemon-runtime-DkLy62aK.js";
64
- import { n as findRoutedCommand, t as ensureConfigReady } from "./config-guard-DuEDsjpE.js";
64
+ import { n as findRoutedCommand, t as ensureConfigReady } from "./config-guard-C08Krrtv.js";
65
65
  import "./logging-BusiCyt_.js";
66
66
  import "./note-CbRknFZ7.js";
67
67
  import "./clack-prompter-BxHCh6Tn.js";
68
- import "./onboarding-Dllr05o7.js";
69
- import "./onboard-skills-BhXfrAUG.js";
70
- import "./github-copilot-auth-CFaT1F0b.js";
71
- import "./onboard-channels-Dv5hOlHf.js";
68
+ import "./onboarding-Cok_sxX4.js";
69
+ import "./onboard-skills-BLOc8WgQ.js";
70
+ import "./github-copilot-auth-DdQeGAzv.js";
71
+ import "./onboard-channels-Bw-uahoG.js";
72
72
  import "./plugin-auto-enable-BmXyiOxr.js";
73
- import "./archive-B9u8OOZC.js";
73
+ import "./archive-CNNzLNkt.js";
74
74
  import "./skill-scanner-WnNLktfw.js";
75
- import "./installs-BzV5AW_D.js";
76
- import "./health-format-DBH5Y6AH.js";
77
- import "./update-runner-tMcNM2Bv.js";
75
+ import "./installs-Cl9ewRZq.js";
76
+ import "./health-format-BiG-U8gj.js";
77
+ import "./update-runner-xK1RH5e4.js";
78
78
  import "./auth-DQvUzR68.js";
79
79
  import "./audit-C0ixMaLQ.js";
80
80
  import "./table-CgHdpI6b.js";
@@ -84,18 +84,18 @@ import "./systemd-BuS1yu_z.js";
84
84
  import "./service-audit-CN0kFCuS.js";
85
85
  import "./node-service-DfmbTqpi.js";
86
86
  import "./channels-status-issues-GKs-LbrV.js";
87
- import { a as getCommandPath, c as getPrimaryCommand, d as hasHelpOrVersion } from "./register.subclis-Zzdrc0FD.js";
87
+ import { a as getCommandPath, c as getPrimaryCommand, d as hasHelpOrVersion } from "./register.subclis-pPBRW6dy.js";
88
88
  import "./gateway-rpc-GLatQ1eS.js";
89
89
  import "./help-format-Cbr54gLP.js";
90
- import "./koi-CNS9LO_y.js";
91
- import { t as ensurePluginRegistryLoaded } from "./plugin-registry-B-n5CThH.js";
92
- import "./configure-78QJpH-A.js";
90
+ import "./koi-HRpqY58O.js";
91
+ import { t as ensurePluginRegistryLoaded } from "./plugin-registry-BI1jq13k.js";
92
+ import "./configure-VcSt2viO.js";
93
93
  import "./systemd-linger-BLQwmm6k.js";
94
94
  import "./widearea-dns-DMja3M8B.js";
95
95
  import "./bonjour-discovery-D_eYlsQc.js";
96
96
  import "./auth-health-Btj4L0TH.js";
97
- import "./doctor-CDCifg0g.js";
98
- import "./completion-cli-CavCow-_.js";
97
+ import "./doctor-DT-Vu4Up.js";
98
+ import "./completion-cli-DHpB7oTu.js";
99
99
  import "./hooks-status-Q-UXhKBw.js";
100
100
  import { n as emitCliBanner } from "./tui-9aUeGcxw.js";
101
101
  import process$1 from "node:process";
@@ -151,7 +151,7 @@ async function runCli(argv = process$1.argv) {
151
151
  assertSupportedRuntime();
152
152
  if (await tryRouteCli(normalizedArgv)) return;
153
153
  enableConsoleCapture();
154
- const { buildProgram } = await import("./program-B54Cxjlx.js").then((n) => n.t);
154
+ const { buildProgram } = await import("./program-BT9Zitzu.js").then((n) => n.t);
155
155
  const program = buildProgram();
156
156
  installUnhandledRejectionHandler();
157
157
  process$1.on("uncaughtException", (error) => {
@@ -161,11 +161,11 @@ async function runCli(argv = process$1.argv) {
161
161
  const parseArgv = rewriteUpdateFlagArgv(normalizedArgv);
162
162
  const primary = getPrimaryCommand(parseArgv);
163
163
  if (primary) {
164
- const { registerSubCliByName } = await import("./register.subclis-Zzdrc0FD.js").then((n) => n.i);
164
+ const { registerSubCliByName } = await import("./register.subclis-pPBRW6dy.js").then((n) => n.i);
165
165
  await registerSubCliByName(program, primary);
166
166
  }
167
167
  if (!(!primary && hasHelpOrVersion(parseArgv))) {
168
- const { registerPluginCliCommands } = await import("./cli-CSSsiq84.js");
168
+ const { registerPluginCliCommands } = await import("./cli-4Zf9ZEgS.js");
169
169
  const { loadConfig } = await import("./config-C_blrocr.js").then((n) => n.t);
170
170
  registerPluginCliCommands(program, loadConfig());
171
171
  }
@@ -1,5 +1,5 @@
1
1
  import "./pi-embedded-helpers-1Nerrhel.js";
2
- import { C as loadSessionEntry, ft as requestHeartbeatNow, xr as enqueueSystemEvent } from "./reply-DMEgUFtQ.js";
2
+ import { C as loadSessionEntry, ft as requestHeartbeatNow, xr as enqueueSystemEvent } from "./reply-rxuO803j.js";
3
3
  import { c as defaultRuntime } from "./subsystem-RXphV8Xh.js";
4
4
  import "./paths-VdmjGGyc.js";
5
5
  import { u as normalizeMainKey } from "./session-key-DvA8Pdt6.js";
@@ -57,8 +57,8 @@ import "./session-cost-usage-CbribqqH.js";
57
57
  import "./control-service-DnzgVIyk.js";
58
58
  import "./channel-selection-B5tUOB8t.js";
59
59
  import "./event-log-DtrKraIx.js";
60
- import "./deps-C96Ice-b.js";
61
- import { t as koiCommand } from "./koi-CNS9LO_y.js";
60
+ import "./deps-C6w0zh0D.js";
61
+ import { t as koiCommand } from "./koi-HRpqY58O.js";
62
62
  import { t as formatForLog } from "./ws-log-BhaGKxqL.js";
63
63
  import { randomUUID } from "node:crypto";
64
64
 
@@ -1,4 +1,4 @@
1
- import { ht as loadSKYKOIPlugins } from "./reply-DMEgUFtQ.js";
1
+ import { ht as loadSKYKOIPlugins } from "./reply-rxuO803j.js";
2
2
  import { t as createSubsystemLogger } from "./subsystem-RXphV8Xh.js";
3
3
  import { T as resolveDefaultKoiWorkspaceDir, l as resolveKoiWorkspaceDir, r as resolveDefaultKoiId } from "./koi-scope-Bhy7bqp7.js";
4
4
  import { o as loadConfig } from "./config-C_blrocr.js";
@@ -1,6 +1,6 @@
1
1
  import { h as resolveUserPath } from "./utils-rBzA-VDv.js";
2
2
  import { n as discoverSKYKOIPlugins, r as loadPluginManifest } from "./manifest-registry-BM_kgwtA.js";
3
- import { i as resolvePluginInstallDir, n as installPluginFromNpmSpec, t as recordPluginInstall } from "./installs-BzV5AW_D.js";
3
+ import { i as resolvePluginInstallDir, n as installPluginFromNpmSpec, t as recordPluginInstall } from "./installs-Cl9ewRZq.js";
4
4
  import fs from "node:fs/promises";
5
5
 
6
6
  //#region src/plugins/update.ts
@@ -1,5 +1,5 @@
1
1
  import "./pi-embedded-helpers-1Nerrhel.js";
2
- import { et as trimLogTail } from "./reply-DMEgUFtQ.js";
2
+ import { et as trimLogTail } from "./reply-rxuO803j.js";
3
3
  import { T as theme, c as defaultRuntime } from "./subsystem-RXphV8Xh.js";
4
4
  import "./paths-VdmjGGyc.js";
5
5
  import "./utils-rBzA-VDv.js";
@@ -58,17 +58,17 @@ import "./session-cost-usage-CbribqqH.js";
58
58
  import "./control-service-DnzgVIyk.js";
59
59
  import "./channel-selection-B5tUOB8t.js";
60
60
  import "./event-log-DtrKraIx.js";
61
- import "./deps-C96Ice-b.js";
61
+ import "./deps-C6w0zh0D.js";
62
62
  import "./tailscale-4hm01eUI.js";
63
63
  import { _ as parseSemver } from "./daemon-runtime-DkLy62aK.js";
64
64
  import "./logging-BusiCyt_.js";
65
65
  import "./note-CbRknFZ7.js";
66
66
  import "./plugin-auto-enable-BmXyiOxr.js";
67
- import "./archive-B9u8OOZC.js";
67
+ import "./archive-CNNzLNkt.js";
68
68
  import "./skill-scanner-WnNLktfw.js";
69
- import "./installs-BzV5AW_D.js";
70
- import "./health-format-DBH5Y6AH.js";
71
- import { C as resolveEffectiveUpdateChannel, S as normalizeUpdateChannel, _ as resolveNpmChannelTag, a as globalInstallArgs, b as channelToNpmTag, d as formatUpdateOneLiner, g as fetchNpmTagVersion, h as compareSemverStrings, i as detectGlobalInstallManagerForRoot, l as ensureCompletionCacheExists, m as checkUpdateStatus, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, p as resolveUpdateAvailability, r as detectGlobalInstallManagerByPresence, s as checkShellCompletionStatus, t as runGatewayUpdate, u as formatUpdateAvailableHint, v as DEFAULT_GIT_CHANNEL, x as formatUpdateChannelLabel, y as DEFAULT_PACKAGE_CHANNEL } from "./update-runner-tMcNM2Bv.js";
69
+ import "./installs-Cl9ewRZq.js";
70
+ import "./health-format-BiG-U8gj.js";
71
+ import { C as resolveEffectiveUpdateChannel, S as normalizeUpdateChannel, _ as resolveNpmChannelTag, a as globalInstallArgs, b as channelToNpmTag, d as formatUpdateOneLiner, g as fetchNpmTagVersion, h as compareSemverStrings, i as detectGlobalInstallManagerForRoot, l as ensureCompletionCacheExists, m as checkUpdateStatus, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, p as resolveUpdateAvailability, r as detectGlobalInstallManagerByPresence, s as checkShellCompletionStatus, t as runGatewayUpdate, u as formatUpdateAvailableHint, v as DEFAULT_GIT_CHANNEL, x as formatUpdateChannelLabel, y as DEFAULT_PACKAGE_CHANNEL } from "./update-runner-xK1RH5e4.js";
72
72
  import "./auth-DQvUzR68.js";
73
73
  import { t as renderTable } from "./table-CgHdpI6b.js";
74
74
  import "./skills-status-PwtGQTh5.js";
@@ -76,15 +76,15 @@ import "./service-CTrRN1-T.js";
76
76
  import "./systemd-BuS1yu_z.js";
77
77
  import "./service-audit-CN0kFCuS.js";
78
78
  import "./channels-status-issues-GKs-LbrV.js";
79
- import "./register.subclis-Zzdrc0FD.js";
79
+ import "./register.subclis-pPBRW6dy.js";
80
80
  import { t as formatHelpExamples } from "./help-format-Cbr54gLP.js";
81
81
  import "./systemd-linger-BLQwmm6k.js";
82
82
  import "./auth-health-Btj4L0TH.js";
83
- import { t as doctorCommand } from "./doctor-CDCifg0g.js";
84
- import { r as installCompletion } from "./completion-cli-CavCow-_.js";
83
+ import { t as doctorCommand } from "./doctor-DT-Vu4Up.js";
84
+ import { r as installCompletion } from "./completion-cli-DHpB7oTu.js";
85
85
  import "./shared-DCuTTPOy.js";
86
- import { r as runDaemonRestart } from "./daemon-cli-Kh3L2cdB.js";
87
- import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-DTmTPV0W.js";
86
+ import { r as runDaemonRestart } from "./daemon-cli-CzwhzZ7G.js";
87
+ import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-BOUEmMWa.js";
88
88
  import path from "node:path";
89
89
  import os from "node:os";
90
90
  import fs from "node:fs/promises";
@@ -1,12 +1,12 @@
1
- import { et as trimLogTail } from "./reply-DMEgUFtQ.js";
1
+ import { et as trimLogTail } from "./reply-rxuO803j.js";
2
2
  import { t as runCommandWithTimeout } from "./exec-BE7MIgZB.js";
3
3
  import { t as resolveSKYKOIPackageRoot } from "./skykoi-root-BcOj1-eE.js";
4
4
  import { r as resolveCliName, t as formatCliCommand } from "./command-format-CvpDYKxh.js";
5
5
  import { N as VERSION } from "./config-C_blrocr.js";
6
6
  import { _ as parseSemver } from "./daemon-runtime-DkLy62aK.js";
7
7
  import { t as note } from "./note-CbRknFZ7.js";
8
- import { i as resolveControlUiDistIndexPathForRoot, r as resolveControlUiDistIndexHealth } from "./health-format-DBH5Y6AH.js";
9
- import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-CavCow-_.js";
8
+ import { i as resolveControlUiDistIndexPathForRoot, r as resolveControlUiDistIndexHealth } from "./health-format-BiG-U8gj.js";
9
+ import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-DHpB7oTu.js";
10
10
  import path from "node:path";
11
11
  import os from "node:os";
12
12
  import fs from "node:fs/promises";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skykoi",
3
- "version": "2026.3.163",
3
+ "version": "2026.3.166",
4
4
  "description": "SkyKoi — Koi runtime. Multi-channel gateway CLI with RPC Koi.",
5
5
  "keywords": [
6
6
  "skykoi",