getkova 2026.4.26 → 2026.4.28

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 (118) hide show
  1. package/dist/.buildstamp +1 -1
  2. package/dist/{agents-B6Omt_HL.js → agents-C8WSP7ep.js} +1 -1
  3. package/dist/{agents-BDtcGXZZ.js → agents-Daie0zy-.js} +1 -1
  4. package/dist/build-info.json +3 -3
  5. package/dist/{capability-cli-DQpANNgh.js → capability-cli-DGlH9TBA.js} +1 -1
  6. package/dist/cli/daemon-cli.js +1 -1
  7. package/dist/cli-startup-metadata.json +1 -1
  8. package/dist/{command-registry-DRMTW0EJ.js → command-registry-C7apXeX-.js} +7 -7
  9. package/dist/{command-registry-DeDVjftE.js → command-registry-Cssz6XRI.js} +1 -1
  10. package/dist/{completion-cli-hrcKL6pu.js → completion-cli-OSV8Mxw6.js} +2 -2
  11. package/dist/{completion-cli-CEbp4GRL.js → completion-cli-y5W2jADD.js} +1 -1
  12. package/dist/{config-cli-light-BRIuSbv9.js → config-cli-light-CMPvO7j1.js} +1 -1
  13. package/dist/{configure-Bvhpv8U0.js → configure-CSra27E4.js} +1 -1
  14. package/dist/{configure-hihykYY9.js → configure-CiYDWuSq.js} +4 -4
  15. package/dist/control-ui/Sleepy kova.png +0 -0
  16. package/dist/control-ui/Sleepy kova.png:Zone.Identifier +0 -0
  17. package/dist/control-ui/apple-touch-icon.png +0 -0
  18. package/dist/control-ui/assets/{agents-zdoAQZWu.js → agents-BUzlQfGZ.js} +53 -53
  19. package/dist/control-ui/assets/{channel-config-extras-C9aXEmVr.js → channel-config-extras-DvRct64Y.js} +2 -2
  20. package/dist/control-ui/assets/{channels-BV410f1t.js → channels-DpgriRLB.js} +146 -164
  21. package/dist/control-ui/assets/{cron-Bmeg97Ol.js → cron-Svv9xHeH.js} +2 -2
  22. package/dist/control-ui/assets/{de-B9x7O_1g.js → de-COhQTI4G.js} +1 -1
  23. package/dist/control-ui/assets/{debug-CxzHk5v2.js → debug-Bn5kQ0jI.js} +4 -4
  24. package/dist/control-ui/assets/directive-C6NBp6xJ.js +2 -0
  25. package/dist/control-ui/assets/{dreaming-CY6__wce.js → dreaming-u4jVqApV.js} +31 -29
  26. package/dist/control-ui/assets/{es-BrVPfSUA.js → es-BSY8cLhL.js} +1 -1
  27. package/dist/control-ui/assets/format-B2PqtJus.js +8 -0
  28. package/dist/control-ui/assets/{fr-CHT6zza2.js → fr-DAdVaQz0.js} +1 -1
  29. package/dist/control-ui/assets/i18n-FIEmRdxD.js +3 -0
  30. package/dist/control-ui/assets/{id-Dm3VjGeP.js → id-DpciMeCz.js} +1 -1
  31. package/dist/control-ui/assets/{index-BTmGSFHO.js → index-BI0KknlA.js} +687 -653
  32. package/dist/control-ui/assets/index-BWqnG6g1.css +1 -0
  33. package/dist/control-ui/assets/{instances-DxMIVdY6.js → instances-C5sSAY0q.js} +2 -2
  34. package/dist/control-ui/assets/{ja-JP-DJrGt_uH.js → ja-JP-C4Ei8t6h.js} +1 -1
  35. package/dist/control-ui/assets/{ko-DLopXgi0.js → ko-C5gMotHG.js} +1 -1
  36. package/dist/control-ui/assets/{logs-tu24-pPx.js → logs-DCLpA9mp.js} +2 -2
  37. package/dist/control-ui/assets/{nodes-CRtLVrUZ.js → nodes-Dde02wWy.js} +16 -16
  38. package/dist/control-ui/assets/{pl-DnBYbWd4.js → pl-C04nmvrR.js} +1 -1
  39. package/dist/control-ui/assets/{preview-B6vi4el7.js → preview-C_oLeox-.js} +1 -1
  40. package/dist/control-ui/assets/{pt-BR-BqHI9IRW.js → pt-BR-Dt7WMNjw.js} +1 -1
  41. package/dist/control-ui/assets/{sessions-BYV6pxq5.js → sessions-CXi7robA.js} +23 -23
  42. package/dist/control-ui/assets/{skills-V7CRi2OR.js → skills-BTJhqwbx.js} +35 -35
  43. package/dist/control-ui/assets/{skills-shared-BG1O_pfK.js → skills-shared-BFYbaS-Q.js} +2 -2
  44. package/dist/control-ui/assets/string-coerce-LCfkQHEZ.js +2 -0
  45. package/dist/control-ui/assets/{tr-YfbUU-SH.js → tr-D4NBFKDY.js} +1 -1
  46. package/dist/control-ui/assets/{uk-7GtQ_7oc.js → uk-y1duvdFk.js} +1 -1
  47. package/dist/control-ui/assets/{zh-CN-Dr2JRNn1.js → zh-CN-DGY3datr.js} +1 -1
  48. package/dist/control-ui/assets/{zh-TW-BjIqp4kq.js → zh-TW-TNj10_DK.js} +1 -1
  49. package/dist/control-ui/favicon-32.png +0 -0
  50. package/dist/control-ui/favicon.ico +0 -0
  51. package/dist/control-ui/index.html +9 -4
  52. package/dist/{daemon-cli-Don16mf6.js → daemon-cli-u_BRVOI1.js} +12 -12
  53. package/dist/{daemon-install-C3EFB1sJ.js → daemon-install-BlgJTVIe.js} +1 -1
  54. package/dist/{doctor-completion-C8TBIixd.js → doctor-completion-JcZOn1m7.js} +1 -1
  55. package/dist/entry.js +3 -3
  56. package/dist/extensions/amazon-bedrock/.openclaw-runtime-deps-stamp.json +1 -1
  57. package/dist/extensions/amazon-bedrock-mantle/.openclaw-runtime-deps-stamp.json +1 -1
  58. package/dist/extensions/diffs/.openclaw-runtime-deps-stamp.json +1 -1
  59. package/dist/extensions/discord/.openclaw-runtime-deps-stamp.json +1 -1
  60. package/dist/extensions/feishu/.openclaw-runtime-deps-stamp.json +1 -1
  61. package/dist/extensions/qqbot/.openclaw-runtime-deps-stamp.json +1 -1
  62. package/dist/extensions/slack/.openclaw-runtime-deps-stamp.json +1 -1
  63. package/dist/extensions/telegram/.openclaw-runtime-deps-stamp.json +1 -1
  64. package/dist/extensions/webhooks/.openclaw-runtime-deps-stamp.json +1 -1
  65. package/dist/{gateway-cli-CY7o_hpA.js → gateway-cli-Bt5iJbdz.js} +7 -7
  66. package/dist/{gateway-install-token-DKuN93YK.js → gateway-install-token-DyQY5djj.js} +1 -1
  67. package/dist/index.js +1 -1
  68. package/dist/{models-DbPT1fhL.js → models-BWG-btvZ.js} +1 -1
  69. package/dist/{models-cli-BBniFiba.js → models-cli--WgKVPYs.js} +1 -1
  70. package/dist/{models-hF4CK70I.js → models-iQ04olB-.js} +1 -1
  71. package/dist/{onboard-DX-Rk6RH.js → onboard-BLUvfVFp.js} +4 -4
  72. package/dist/{onboard-helpers-tosm3jFd.js → onboard-helpers-CDvUqLk8.js} +1 -1
  73. package/dist/{onboard-helpers-PGxR13Ax.js → onboard-helpers-DiwS29UK.js} +6 -5
  74. package/dist/{onboard-remote-BTILHwjK.js → onboard-remote-Bnf3YLD-.js} +1 -1
  75. package/dist/{onboard-remote-wQCAOGcK.js → onboard-remote-KRli0D80.js} +1 -1
  76. package/dist/{onboard-skills-D8smnmkL.js → onboard-skills-BmD8o6rS.js} +1 -1
  77. package/dist/onboard-skills-C9wZ6QtM.js +2 -0
  78. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  79. package/dist/{program-CBQKJlt0.js → program-OsrxaA4i.js} +1 -1
  80. package/dist/{prompt-select-styled-DSm5wkjr.js → prompt-select-styled-CVipx5OJ.js} +3 -3
  81. package/dist/{register-1nHrA0e5.js → register-CJydn45D.js} +2 -2
  82. package/dist/{register.agent-X1xkjblj.js → register.agent-CWl5KdpY.js} +1 -1
  83. package/dist/{register.configure-DXJrOvMQ.js → register.configure-D9DmBQr2.js} +1 -1
  84. package/dist/{register.maintenance-DRAoQQGk.js → register.maintenance-CfmlAjZv.js} +2 -2
  85. package/dist/{register.onboard-C9JJ4G7S.js → register.onboard-CNokKnkq.js} +1 -1
  86. package/dist/{register.setup-BdX5Xe0o.js → register.setup-C05tHwTx.js} +1 -1
  87. package/dist/{register.subclis-Dy0xWX6g.js → register.subclis-Bb6svFaM.js} +1 -1
  88. package/dist/{register.subclis-CZTgH7Ea.js → register.subclis-qiXxr9Wy.js} +5 -5
  89. package/dist/run-CScM0dw1.js +2 -0
  90. package/dist/{run-BX-7GYSj.js → run-DF-2iJa9.js} +2 -2
  91. package/dist/{run-help-CiamJ18e.js → run-help-CNUphfKy.js} +3 -3
  92. package/dist/{run-main-BMhFR8Jc.js → run-main-BDltZ_ur.js} +6 -6
  93. package/dist/{runners-RgFITWBL.js → runners-B2O-ME05.js} +1 -1
  94. package/dist/{server-Bz5dabjH.js → server-zJfBaGBg.js} +1 -1
  95. package/dist/{server.impl-KCuKukU3.js → server.impl-DO9_kk-G.js} +1 -1
  96. package/dist/{setup-D7mcxYan.js → setup-BBksoYQN.js} +5 -5
  97. package/dist/{setup.finalize-4roo9r5H.js → setup.finalize-CVPS-atg.js} +4 -4
  98. package/dist/{setup.gateway-config-Dk6gnaqs.js → setup.gateway-config-C_w_MSN-.js} +1 -1
  99. package/dist/{update-cli-Dg4LH9vh.js → update-cli-BbZs8CSN.js} +4 -4
  100. package/docs/reference/templates/AGENTS.dev.md +84 -0
  101. package/docs/reference/templates/AGENTS.md +219 -0
  102. package/docs/reference/templates/BOOT.md +12 -0
  103. package/docs/reference/templates/BOOTSTRAP.md +62 -0
  104. package/docs/reference/templates/HEARTBEAT.md +14 -0
  105. package/docs/reference/templates/IDENTITY.dev.md +48 -0
  106. package/docs/reference/templates/IDENTITY.md +48 -0
  107. package/docs/reference/templates/SOUL.dev.md +77 -0
  108. package/docs/reference/templates/SOUL.md +45 -0
  109. package/docs/reference/templates/TOOLS.dev.md +25 -0
  110. package/docs/reference/templates/TOOLS.md +47 -0
  111. package/docs/reference/templates/USER.dev.md +19 -0
  112. package/docs/reference/templates/USER.md +19 -0
  113. package/package.json +2 -1
  114. package/dist/control-ui/assets/format-3N0yjN3S.js +0 -8
  115. package/dist/control-ui/assets/i18n-CQvRr6_H.js +0 -3
  116. package/dist/control-ui/assets/index-CnlWaG5w.css +0 -1
  117. package/dist/onboard-skills-Bi1JktxA.js +0 -2
  118. package/dist/run-DNppJJaN.js +0 -2
package/dist/.buildstamp CHANGED
@@ -1 +1 @@
1
- {"builtAt":1776160819536,"head":"ce07663e0c77cd13bdefe41a14fbef89a9a779a1"}
1
+ {"builtAt":1776191324621,"head":"b584a1cd7ea55b3e6c271fa95127e7603c3a5d00"}
@@ -1,5 +1,5 @@
1
1
  import "./agent-scope-CLTdVQeU.js";
2
2
  import "./config-validation-DvTJkQP1.js";
3
- import { t as agentsListCommand } from "./agents-BDtcGXZZ.js";
3
+ import { t as agentsListCommand } from "./agents-Daie0zy-.js";
4
4
  import "./agents.config-DKfPmKZY.js";
5
5
  export { agentsListCommand };
@@ -20,7 +20,7 @@ import { t as WizardCancelledError } from "./prompts-BdskZ9m9.js";
20
20
  import { n as logConfigUpdated } from "./logging-mpAFyGsW.js";
21
21
  import { r as parseIdentityMarkdown, t as identityHasValues } from "./identity-file-zjQUdNWL.js";
22
22
  import { t as createClackPrompter } from "./clack-prompter-C8Qz3bFd.js";
23
- import { r as ensureWorkspaceAndSessions, s as moveToTrash } from "./onboard-helpers-PGxR13Ax.js";
23
+ import { r as ensureWorkspaceAndSessions, s as moveToTrash } from "./onboard-helpers-DiwS29UK.js";
24
24
  import { a as describeBinding, i as buildChannelBindings, n as requireValidConfigSnapshot, o as parseBindingSpecs, r as applyAgentBindings, s as removeAgentBindings, t as requireValidConfigFileSnapshot$1 } from "./config-validation-DvTJkQP1.js";
25
25
  import { i as loadAgentIdentity, n as buildAgentSummaries, o as pruneAgentConfig, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-DKfPmKZY.js";
26
26
  import { t as promptAuthChoiceGrouped } from "./auth-choice-prompt-CG0ZsjLU.js";
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2026.4.26",
3
- "commit": "ce07663e0c77cd13bdefe41a14fbef89a9a779a1",
4
- "builtAt": "2026-04-14T10:00:57.895Z"
2
+ "version": "2026.4.27",
3
+ "commit": "b584a1cd7ea55b3e6c271fa95127e7603c3a5d00",
4
+ "builtAt": "2026-04-14T18:29:26.265Z"
5
5
  }
@@ -31,7 +31,7 @@ import { r as listSpeechProviders, t as canonicalizeSpeechProviderId } from "./p
31
31
  import { a as transcribeAudioFile, r as describeVideoFile, t as describeImageFile } from "./runtime-CGS6sit3.js";
32
32
  import { o as registerBuiltInMemoryEmbeddingProviders, r as createEmbeddingProvider } from "./manager-D1C25Tbr.js";
33
33
  import "./runtime-api-0XQjYu-e.js";
34
- import { i as modelsStatusCommand, v as modelsAuthLoginCommand } from "./models-DbPT1fhL.js";
34
+ import { i as modelsStatusCommand, v as modelsAuthLoginCommand } from "./models-BWG-btvZ.js";
35
35
  import { t as collectOption } from "./helpers-CS3r-PK3.js";
36
36
  import path from "node:path";
37
37
  import fs from "node:fs/promises";
@@ -1,5 +1,5 @@
1
1
  // Legacy shim for pre-tsdown update-cli imports.
2
- import * as daemonCli from "../daemon-cli-Don16mf6.js";
2
+ import * as daemonCli from "../daemon-cli-u_BRVOI1.js";
3
3
  export const registerDaemonCli = daemonCli.s;
4
4
  export const runDaemonInstall = daemonCli.t;
5
5
  export const runDaemonRestart = daemonCli.n;
@@ -27,5 +27,5 @@
27
27
  ],
28
28
  "channelCatalogSignature": "be1d54ba0ade082a8b5da53f555fc5607c5fffd2",
29
29
  "rootHelpBundleSignature": "7930ed8ac6aa92f982cae016506f578eca5c01cd",
30
- "rootHelpText": "\n🤖 Kova 2026.4.26 (ce07663) — Your .env is showing; don't worry, I'll pretend I didn't see it.\n\nUsage: kova [options] [command]\n\nOptions:\n --container <name> Run the CLI inside a running Podman/Docker container\n named <name> (default: env KOVA_CONTAINER)\n --dev Dev profile: isolate state under ~/.kova-dev, default\n gateway port 19001, and shift derived ports\n (browser/canvas)\n -h, --help Display help for command\n --log-level <level> Global log level override for file + console\n (silent|fatal|error|warn|info|debug|trace)\n --no-color Disable ANSI colors\n --profile <name> Use a named profile (isolates\n KOVA_STATE_DIR/KOVA_STATE_DIR and\n KOVA_CONFIG_PATH/KOVA_CONFIG_PATH under ~/.kova-<name>)\n -V, --version output the version number\n\nCommands:\n Hint: commands suffixed with * have subcommands. Run <command> --help for details.\n acp * Agent Control Protocol tools\n agent Run one agent turn via the Gateway\n agents * Manage isolated agents (workspaces, auth, routing)\n approvals * Manage exec approvals (gateway or node host)\n backup * Create and verify local backup archives for Kova state\n capability * Run provider-backed inference commands (fallback alias:\n infer)\n channels * Manage connected chat channels (Telegram, Discord, etc.)\n clawbot * Legacy clawbot command aliases\n completion Generate shell completion script\n config * Non-interactive config helpers\n (get/set/unset/file/validate). Default: starts guided\n setup.\n configure Interactive configuration for credentials, channels,\n gateway, and agent defaults\n cron * Manage cron jobs via the Gateway scheduler\n daemon * Gateway service (legacy alias)\n dashboard Open the Control UI with your current token\n devices * Device pairing + token management\n directory * Lookup contact and group IDs (self, peers, groups) for\n supported chat channels\n dns * DNS helpers for wide-area discovery (Tailscale + CoreDNS)\n docs Search the live Kova docs\n doctor Health checks + quick fixes for the gateway and channels\n gateway * Run, inspect, and query the WebSocket Gateway\n health Fetch health from the running gateway\n help Display help for command\n hooks * Manage internal agent hooks\n infer * Run provider-backed inference commands\n logs Tail gateway file logs via RPC\n mcp * Manage Kova MCP config and channel bridge\n memory Search, inspect, and reindex memory files\n message * Send, read, and manage messages\n models * Discover, scan, and configure models\n node * Run and manage the headless node host service\n nodes * Manage gateway-owned node pairing and node commands\n onboard Interactive onboarding for gateway, workspace, and skills\n pairing * Secure DM pairing (approve inbound requests)\n plugins * Manage Kova plugins and extensions\n qa * Run QA scenarios and launch the private QA debugger UI\n qr Generate mobile pairing QR/setup code\n reset Reset local config/state (keeps the CLI installed)\n sandbox * Manage sandbox containers for agent isolation\n secrets * Secrets runtime reload controls\n security * Security tools and local config audits\n sessions * List stored conversation sessions\n setup Initialize local config and agent workspace\n skills * List and inspect available skills\n status Show channel health and recent session recipients\n system * System events, heartbeat, and presence\n tasks * Inspect durable background task state\n tui Open a terminal UI connected to the Gateway\n uninstall Uninstall the gateway service + local data (CLI remains)\n update * Update Kova and inspect update channel status\n webhooks * Webhook helpers and integrations\n\nExamples:\n kova models --help\n Show detailed help for the models command.\n kova channels login --verbose\n Link personal WhatsApp Web and show QR + connection logs.\n kova message send --target +15555550123 --message \"Hi\" --json\n Send via your web session and print JSON result.\n kova gateway --port 18790\n Run the WebSocket Gateway locally.\n kova --dev gateway\n Run a dev Gateway (isolated state/config) on ws://127.0.0.1:19001.\n kova gateway --force\n Kill anything bound to the default gateway port, then start it.\n kova gateway ...\n Gateway control via WebSocket.\n kova agent --to +15555550123 --message \"Run summary\" --deliver\n Talk directly to the agent using the Gateway; optionally send the WhatsApp reply.\n kova message send --channel telegram --target @mychat --message \"Hi\"\n Send via your Telegram bot.\n\nDocs: https://docs.kova.ai/cli\n\n"
30
+ "rootHelpText": "\n🤖 Kova 2026.4.27 (b584a1c) — I'm the reason your shell history looks like a hacker-movie montage.\n\nUsage: kova [options] [command]\n\nOptions:\n --container <name> Run the CLI inside a running Podman/Docker container\n named <name> (default: env KOVA_CONTAINER)\n --dev Dev profile: isolate state under ~/.kova-dev, default\n gateway port 19001, and shift derived ports\n (browser/canvas)\n -h, --help Display help for command\n --log-level <level> Global log level override for file + console\n (silent|fatal|error|warn|info|debug|trace)\n --no-color Disable ANSI colors\n --profile <name> Use a named profile (isolates\n KOVA_STATE_DIR/KOVA_STATE_DIR and\n KOVA_CONFIG_PATH/KOVA_CONFIG_PATH under ~/.kova-<name>)\n -V, --version output the version number\n\nCommands:\n Hint: commands suffixed with * have subcommands. Run <command> --help for details.\n acp * Agent Control Protocol tools\n agent Run one agent turn via the Gateway\n agents * Manage isolated agents (workspaces, auth, routing)\n approvals * Manage exec approvals (gateway or node host)\n backup * Create and verify local backup archives for Kova state\n capability * Run provider-backed inference commands (fallback alias:\n infer)\n channels * Manage connected chat channels (Telegram, Discord, etc.)\n clawbot * Legacy clawbot command aliases\n completion Generate shell completion script\n config * Non-interactive config helpers\n (get/set/unset/file/validate). Default: starts guided\n setup.\n configure Interactive configuration for credentials, channels,\n gateway, and agent defaults\n cron * Manage cron jobs via the Gateway scheduler\n daemon * Gateway service (legacy alias)\n dashboard Open the Control UI with your current token\n devices * Device pairing + token management\n directory * Lookup contact and group IDs (self, peers, groups) for\n supported chat channels\n dns * DNS helpers for wide-area discovery (Tailscale + CoreDNS)\n docs Search the live Kova docs\n doctor Health checks + quick fixes for the gateway and channels\n gateway * Run, inspect, and query the WebSocket Gateway\n health Fetch health from the running gateway\n help Display help for command\n hooks * Manage internal agent hooks\n infer * Run provider-backed inference commands\n logs Tail gateway file logs via RPC\n mcp * Manage Kova MCP config and channel bridge\n memory Search, inspect, and reindex memory files\n message * Send, read, and manage messages\n models * Discover, scan, and configure models\n node * Run and manage the headless node host service\n nodes * Manage gateway-owned node pairing and node commands\n onboard Interactive onboarding for gateway, workspace, and skills\n pairing * Secure DM pairing (approve inbound requests)\n plugins * Manage Kova plugins and extensions\n qa * Run QA scenarios and launch the private QA debugger UI\n qr Generate mobile pairing QR/setup code\n reset Reset local config/state (keeps the CLI installed)\n sandbox * Manage sandbox containers for agent isolation\n secrets * Secrets runtime reload controls\n security * Security tools and local config audits\n sessions * List stored conversation sessions\n setup Initialize local config and agent workspace\n skills * List and inspect available skills\n status Show channel health and recent session recipients\n system * System events, heartbeat, and presence\n tasks * Inspect durable background task state\n tui Open a terminal UI connected to the Gateway\n uninstall Uninstall the gateway service + local data (CLI remains)\n update * Update Kova and inspect update channel status\n webhooks * Webhook helpers and integrations\n\nExamples:\n kova models --help\n Show detailed help for the models command.\n kova channels login --verbose\n Link personal WhatsApp Web and show QR + connection logs.\n kova message send --target +15555550123 --message \"Hi\" --json\n Send via your web session and print JSON result.\n kova gateway --port 18790\n Run the WebSocket Gateway locally.\n kova --dev gateway\n Run a dev Gateway (isolated state/config) on ws://127.0.0.1:19001.\n kova gateway --force\n Kill anything bound to the default gateway port, then start it.\n kova gateway ...\n Gateway control via WebSocket.\n kova agent --to +15555550123 --message \"Run summary\" --deliver\n Talk directly to the agent using the Gateway; optionally send the WhatsApp reply.\n kova message send --channel telegram --target @mychat --message \"Hi\"\n Send via your Telegram bot.\n\nDocs: https://docs.kova.ai/cli\n\n"
31
31
  }
@@ -1,6 +1,6 @@
1
1
  import { t as resolveCliArgvInvocation } from "./argv-invocation-C2TcgE-H.js";
2
2
  import { n as shouldRegisterPrimaryCommandOnly } from "./command-registration-policy-CWPiq4uz.js";
3
- import { a as defineImportedCommandGroupSpec, i as buildCommandGroupEntries, o as defineImportedProgramCommandGroupSpecs, r as registerSubCliCommands } from "./register.subclis-CZTgH7Ea.js";
3
+ import { a as defineImportedCommandGroupSpec, i as buildCommandGroupEntries, o as defineImportedProgramCommandGroupSpecs, r as registerSubCliCommands } from "./register.subclis-qiXxr9Wy.js";
4
4
  import { i as registerCommandGroups, r as registerCommandGroupByName } from "./register-command-groups-BzYwsB_9.js";
5
5
  import { n as getCoreCliCommandNames$1, t as getCoreCliCommandDescriptors } from "./core-command-descriptors-CN0dyfav.js";
6
6
  //#region src/cli/program/command-registry.ts
@@ -16,22 +16,22 @@ const coreEntrySpecs = [
16
16
  ...withProgramOnlySpecs(defineImportedProgramCommandGroupSpecs([
17
17
  {
18
18
  commandNames: ["setup"],
19
- loadModule: () => import("./register.setup-BdX5Xe0o.js"),
19
+ loadModule: () => import("./register.setup-C05tHwTx.js"),
20
20
  exportName: "registerSetupCommand"
21
21
  },
22
22
  {
23
23
  commandNames: ["onboard"],
24
- loadModule: () => import("./register.onboard-C9JJ4G7S.js"),
24
+ loadModule: () => import("./register.onboard-CNokKnkq.js"),
25
25
  exportName: "registerOnboardCommand"
26
26
  },
27
27
  {
28
28
  commandNames: ["configure"],
29
- loadModule: () => import("./register.configure-DXJrOvMQ.js"),
29
+ loadModule: () => import("./register.configure-D9DmBQr2.js"),
30
30
  exportName: "registerConfigureCommand"
31
31
  },
32
32
  {
33
33
  commandNames: ["config"],
34
- loadModule: () => import("./config-cli-light-BRIuSbv9.js"),
34
+ loadModule: () => import("./config-cli-light-CMPvO7j1.js"),
35
35
  exportName: "registerConfigCli"
36
36
  },
37
37
  {
@@ -46,7 +46,7 @@ const coreEntrySpecs = [
46
46
  "reset",
47
47
  "uninstall"
48
48
  ],
49
- loadModule: () => import("./register.maintenance-DRAoQQGk.js"),
49
+ loadModule: () => import("./register.maintenance-CfmlAjZv.js"),
50
50
  exportName: "registerMaintenanceCommands"
51
51
  }
52
52
  ])),
@@ -58,7 +58,7 @@ const coreEntrySpecs = [
58
58
  loadModule: () => import("./mcp-cli-y9K_Ayp3.js"),
59
59
  exportName: "registerMcpCli"
60
60
  }])),
61
- defineImportedCommandGroupSpec(["agent", "agents"], () => import("./register.agent-X1xkjblj.js"), (mod, { program, ctx }) => {
61
+ defineImportedCommandGroupSpec(["agent", "agents"], () => import("./register.agent-CWl5KdpY.js"), (mod, { program, ctx }) => {
62
62
  mod.registerAgentCommands(program, { agentChannelOptions: ctx.agentChannelOptions });
63
63
  }),
64
64
  ...withProgramOnlySpecs(defineImportedProgramCommandGroupSpecs([{
@@ -1,3 +1,3 @@
1
1
  import { r as getCoreCliCommandsWithSubcommands, t as getCoreCliCommandDescriptors } from "./core-command-descriptors-CN0dyfav.js";
2
- import { i as registerProgramCommands, n as registerCoreCliByName, r as registerCoreCliCommands, t as getCoreCliCommandNames } from "./command-registry-DRMTW0EJ.js";
2
+ import { i as registerProgramCommands, n as registerCoreCliByName, r as registerCoreCliCommands, t as getCoreCliCommandNames } from "./command-registry-C7apXeX-.js";
3
3
  export { getCoreCliCommandDescriptors, getCoreCliCommandNames, getCoreCliCommandsWithSubcommands, registerCoreCliByName, registerCoreCliCommands, registerProgramCommands };
@@ -4,8 +4,8 @@ import { c as routeLogsToStderr } from "./subsystem-D2KpcrQo.js";
4
4
  import { t as formatDocsLink } from "./links-CrmPTJ17.js";
5
5
  import { r as theme } from "./theme-D_Sw7NXe.js";
6
6
  import { _ as resolveStateDir } from "./paths-XU2auJ0t.js";
7
- import { n as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-CZTgH7Ea.js";
8
- import { n as registerCoreCliByName, t as getCoreCliCommandNames } from "./command-registry-DRMTW0EJ.js";
7
+ import { n as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-qiXxr9Wy.js";
8
+ import { n as registerCoreCliByName, t as getCoreCliCommandNames } from "./command-registry-C7apXeX-.js";
9
9
  import { t as getProgramContext } from "./program-context-Ds_E1ej4.js";
10
10
  import path from "node:path";
11
11
  import os from "node:os";
@@ -1,2 +1,2 @@
1
- import { a as registerCompletionCli, c as usesSlowDynamicCompletion, i as isCompletionInstalled, n as getCompletionScript, o as resolveCompletionCachePath, r as installCompletion, s as resolveShellFromEnv, t as completionCacheExists } from "./completion-cli-hrcKL6pu.js";
1
+ import { a as registerCompletionCli, c as usesSlowDynamicCompletion, i as isCompletionInstalled, n as getCompletionScript, o as resolveCompletionCachePath, r as installCompletion, s as resolveShellFromEnv, t as completionCacheExists } from "./completion-cli-OSV8Mxw6.js";
2
2
  export { completionCacheExists, getCompletionScript, installCompletion, isCompletionInstalled, registerCompletionCli, resolveCompletionCachePath, resolveShellFromEnv, usesSlowDynamicCompletion };
@@ -13,7 +13,7 @@ const CONFIG_SET_DESCRIPTION = [
13
13
  ].join("\n");
14
14
  function registerConfigCli(program) {
15
15
  const cmd = program.command("config").description("Non-interactive config helpers (get/set/unset/file/schema/validate). Run without subcommand for guided setup.").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/config", "docs.kova.ai/cli/config")}\n`).option("--section <section>", "Configuration sections for guided setup (repeatable). Use with no subcommand.", (value, previous) => [...previous, value], []).action(async (opts) => {
16
- const [{ configureCommandFromSectionsArg }, { defaultRuntime }] = await Promise.all([import("./configure-Bvhpv8U0.js"), import("./runtime-DhrzeBuK.js")]);
16
+ const [{ configureCommandFromSectionsArg }, { defaultRuntime }] = await Promise.all([import("./configure-CSra27E4.js"), import("./runtime-DhrzeBuK.js")]);
17
17
  await configureCommandFromSectionsArg(opts.section, defaultRuntime);
18
18
  });
19
19
  cmd.command("get").description("Get a config value by dot path").argument("<path>", "Config path (dot or bracket notation)").option("--json", "Output JSON", false).action(async (path, opts) => {
@@ -1,2 +1,2 @@
1
- import { a as buildGatewayAuthConfig, i as runConfigureWizard, n as configureCommandFromSectionsArg, o as CONFIGURE_WIZARD_SECTIONS, r as configureCommandWithSections, s as parseConfigureWizardSections, t as configureCommand } from "./configure-hihykYY9.js";
1
+ import { a as buildGatewayAuthConfig, i as runConfigureWizard, n as configureCommandFromSectionsArg, o as CONFIGURE_WIZARD_SECTIONS, r as configureCommandWithSections, s as parseConfigureWizardSections, t as configureCommand } from "./configure-CiYDWuSq.js";
2
2
  export { CONFIGURE_WIZARD_SECTIONS, buildGatewayAuthConfig, configureCommand, configureCommandFromSectionsArg, configureCommandWithSections, parseConfigureWizardSections, runConfigureWizard };
@@ -23,8 +23,8 @@ import { t as applyPrimaryModel } from "./provider-model-primary-vw-gYirQ.js";
23
23
  import { n as withProgress } from "./progress-_WKcwShi.js";
24
24
  import { t as createClackPrompter } from "./clack-prompter-C8Qz3bFd.js";
25
25
  import { t as resolveControlUiLinks } from "./control-ui-links-CDfNNXC4.js";
26
- import { a as guardCancel, c as normalizeGatewayTokenInput, d as randomToken, h as waitForGatewayReachable, m as validateGatewayPasswordInput, n as applyWizardMetadata, p as summarizeExistingConfig, r as ensureWorkspaceAndSessions, t as DEFAULT_WORKSPACE, u as probeGatewayReachable } from "./onboard-helpers-PGxR13Ax.js";
27
- import { n as buildGatewayInstallPlan, r as gatewayInstallErrorHint, t as resolveGatewayInstallToken } from "./gateway-install-token-DKuN93YK.js";
26
+ import { a as guardCancel, c as normalizeGatewayTokenInput, d as randomToken, h as waitForGatewayReachable, m as validateGatewayPasswordInput, n as applyWizardMetadata, p as summarizeExistingConfig, r as ensureWorkspaceAndSessions, t as DEFAULT_WORKSPACE, u as probeGatewayReachable } from "./onboard-helpers-DiwS29UK.js";
27
+ import { n as buildGatewayInstallPlan, r as gatewayInstallErrorHint, t as resolveGatewayInstallToken } from "./gateway-install-token-DyQY5djj.js";
28
28
  import { n as GATEWAY_DAEMON_RUNTIME_OPTIONS, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-dAqErN6y.js";
29
29
  import { n as isNonFatalSystemdInstallProbeError } from "./systemd-BZAfchG0.js";
30
30
  import { r as resolveGatewayService, t as describeGatewayServiceRestart } from "./service-DScZ90Fz.js";
@@ -40,8 +40,8 @@ import { i as promptModelAllowlist, n as applyModelFallbacksFromSelection, r as
40
40
  import { i as promptCustomApiConfig } from "./onboard-custom-28e1LtuI.js";
41
41
  import { a as maybeAddTailnetOriginToControlUiAllowedOrigins, i as TAILSCALE_MISSING_BIN_NOTE_LINES, n as TAILSCALE_DOCS_LINES, r as TAILSCALE_EXPOSURE_OPTIONS, t as validateIPv4AddressInput } from "./ipv4-fuj3v9c_.js";
42
42
  import { t as formatHealthCheckFailure } from "./health-format-BKL7ZWjS.js";
43
- import { t as promptRemoteGatewayConfig } from "./onboard-remote-BTILHwjK.js";
44
- import { t as setupSkills } from "./onboard-skills-D8smnmkL.js";
43
+ import { t as promptRemoteGatewayConfig } from "./onboard-remote-Bnf3YLD-.js";
44
+ import { t as setupSkills } from "./onboard-skills-BmD8o6rS.js";
45
45
  import path from "node:path";
46
46
  import fs from "node:fs/promises";
47
47
  import { confirm, intro, outro, select, text } from "@clack/prompts";
Binary file
@@ -1,4 +1,4 @@
1
- import{f as e,o as t,r as n,u as r}from"./i18n-CQvRr6_H.js";import{u as i}from"./format-3N0yjN3S.js";import{t as a}from"./string-coerce-BfWUeqM-.js";import{A as o,C as s,D as c,E as l,M as u,O as d,S as f,T as p,_ as m,a as h,b as g,d as _,f as v,j as y,k as b,m as x,n as S,p as C,r as w,t as T,v as E,w as D,x as O,y as k}from"./index-BTmGSFHO.js";import{r as A}from"./channel-config-extras-C9aXEmVr.js";import{i as j,n as M,r as N,t as P}from"./skills-shared-BG1O_pfK.js";function F(t){let{agent:i,configForm:a,agentFilesList:o,configLoading:u,configSaving:f,configDirty:m,onConfigReload:h,onConfigSave:g,onModelChange:_,onModelFallbacksChange:v,onSelectPanel:y}=t,b=p(a,i.id),x=i.model,S=(o&&o.agentId===i.id?o.workspace:null)||b.entry?.workspace||b.defaults?.workspace||i.workspace||`default`,C=b.entry?.model?c(b.entry?.model):b.defaults?.model?c(b.defaults?.model):c(x),w=c(b.defaults?.model??x),T=d(b.entry?.model),E=d(b.defaults?.model)||(w===`-`?null:s(w))||(a?null:d(x)),O=T??E??null,A=l(b.entry?.model)??l(b.defaults?.model)??(a?null:l(x))??[],j=Array.isArray(b.entry?.skills)?b.entry?.skills:null,M=j?.length??null,N=!!(t.defaultId&&i.id===t.defaultId),P=!a||u||f,F=e=>{let t=A.filter((t,n)=>n!==e);v(i.id,t)};return e`
1
+ import{f as e,o as t,r as n,u as r}from"./i18n-FIEmRdxD.js";import{t as i}from"./string-coerce-BfWUeqM-.js";import{u as a}from"./format-B2PqtJus.js";import{A as o,C as s,D as c,E as l,M as u,N as d,O as f,T as p,_ as m,a as h,b as g,d as _,f as v,j as y,k as b,m as x,n as S,p as C,r as w,t as T,v as E,w as D,x as O,y as k}from"./index-BI0KknlA.js";import{r as A}from"./channel-config-extras-DvRct64Y.js";import{i as j,n as M,r as N,t as P}from"./skills-shared-BFYbaS-Q.js";function F(t){let{agent:i,configForm:a,agentFilesList:o,configLoading:s,configSaving:u,configDirty:d,onConfigReload:m,onConfigSave:h,onModelChange:g,onModelFallbacksChange:_,onSelectPanel:v}=t,y=l(a,i.id),x=i.model,S=(o&&o.agentId===i.id?o.workspace:null)||y.entry?.workspace||y.defaults?.workspace||i.workspace||`default`,C=y.entry?.model?f(y.entry?.model):y.defaults?.model?f(y.defaults?.model):f(x),w=f(y.defaults?.model??x),T=b(y.entry?.model),E=b(y.defaults?.model)||(w===`-`?null:D(w))||(a?null:b(x)),O=T??E??null,A=c(y.entry?.model)??c(y.defaults?.model)??(a?null:c(x))??[],j=Array.isArray(y.entry?.skills)?y.entry?.skills:null,M=j?.length??null,N=!!(t.defaultId&&i.id===t.defaultId),P=!a||s||u,F=e=>{let t=A.filter((t,n)=>n!==e);_(i.id,t)};return e`
2
2
  <section class="card">
3
3
  <div class="card-title">Overview</div>
4
4
  <div class="card-sub">Workspace paths and identity metadata.</div>
@@ -10,7 +10,7 @@ import{f as e,o as t,r as n,u as r}from"./i18n-CQvRr6_H.js";import{u as i}from".
10
10
  <button
11
11
  type="button"
12
12
  class="workspace-link mono"
13
- @click=${()=>y(`files`)}
13
+ @click=${()=>v(`files`)}
14
14
  title="Open Files tab"
15
15
  >
16
16
  ${S}
@@ -27,7 +27,7 @@ import{f as e,o as t,r as n,u as r}from"./i18n-CQvRr6_H.js";import{u as i}from".
27
27
  </div>
28
28
  </div>
29
29
 
30
- ${m?e`
30
+ ${d?e`
31
31
  <div class="callout warn" style="margin-top: 16px">
32
32
  You have unsaved config changes.
33
33
  </div>
@@ -41,7 +41,7 @@ import{f as e,o as t,r as n,u as r}from"./i18n-CQvRr6_H.js";import{u as i}from".
41
41
  <select
42
42
  .value=${N?O??``:T??``}
43
43
  ?disabled=${P}
44
- @change=${e=>_(i.id,e.target.value||null)}
44
+ @change=${e=>g(i.id,e.target.value||null)}
45
45
  >
46
46
  ${N?e` <option value="">Not set</option> `:e`
47
47
  <option value="">
@@ -73,8 +73,8 @@ import{f as e,o as t,r as n,u as r}from"./i18n-CQvRr6_H.js";import{u as i}from".
73
73
  <input
74
74
  ?disabled=${P}
75
75
  placeholder=${A.length===0?`provider/model`:``}
76
- @keydown=${e=>{let t=e.target;if(e.key===`Enter`||e.key===`,`){e.preventDefault();let n=D(t.value);n.length>0&&(v(i.id,[...A,...n]),t.value=``)}}}
77
- @blur=${e=>{let t=e.target,n=D(t.value);n.length>0&&(v(i.id,[...A,...n]),t.value=``)}}
76
+ @keydown=${e=>{let t=e.target;if(e.key===`Enter`||e.key===`,`){e.preventDefault();let n=p(t.value);n.length>0&&(_(i.id,[...A,...n]),t.value=``)}}}
77
+ @blur=${e=>{let t=e.target,n=p(t.value);n.length>0&&(_(i.id,[...A,...n]),t.value=``)}}
78
78
  />
79
79
  </div>
80
80
  </div>
@@ -83,18 +83,18 @@ import{f as e,o as t,r as n,u as r}from"./i18n-CQvRr6_H.js";import{u as i}from".
83
83
  <button
84
84
  type="button"
85
85
  class="btn btn--sm"
86
- ?disabled=${u}
87
- @click=${h}
86
+ ?disabled=${s}
87
+ @click=${m}
88
88
  >
89
89
  ${n(`common.reloadConfig`)}
90
90
  </button>
91
91
  <button
92
92
  type="button"
93
93
  class="btn btn--sm primary"
94
- ?disabled=${f||!m}
95
- @click=${g}
94
+ ?disabled=${u||!d}
95
+ @click=${h}
96
96
  >
97
- ${f?`Saving…`:`Save`}
97
+ ${u?`Saving…`:`Save`}
98
98
  </button>
99
99
  </div>
100
100
  </div>
@@ -120,7 +120,7 @@ ${i.map(e=>`<tr>${e.map((e,t)=>`<td${o(t)}>${Z(e)}</td>`).join(``)}</tr>`).join(
120
120
  <div class="${n}callout ${n}callout-${r}" role="alert">
121
121
  <strong class="${n}callout-title">${r}</strong>
122
122
  <div class="${n}callout-content">${Y(e.content,t)}</div>
123
- </div>`.trim()}function Y(e,t){return e.map(e=>X(e,t)).join(``)}function X(e,t){let n=Z(e.text),r=e.styles;if(r.code&&(n=`<code>${n}</code>`),r.highlight&&(n=`<mark>${n}</mark>`),r.strikethrough&&(n=`<del>${n}</del>`),r.underline&&(n=`<u>${n}</u>`),r.italic&&(n=`<em>${n}</em>`),r.bold&&(n=`<strong>${n}</strong>`),r.link){let e=t.linkTarget===`_blank`?` target="_blank" rel="noopener noreferrer"`:``,i=r.link.title?` title="${Z(r.link.title)}"`:``;n=`<a href="${Z(r.link.url)}"${i}${e}>${n}</a>`}return n}function Z(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#039;`)}function ie(e){return[...[1,2,3,4,5,6].map(t=>({tag:`h${t}`,classes:[`${e}heading`,`${e}h${t}`]})),{tag:`p`,classes:[`${e}paragraph`]},{tag:`ul`,classes:[`${e}bullet-list`]},{tag:`ol`,classes:[`${e}numbered-list`]},{tag:`pre`,classes:[`${e}code-block`]},{tag:`blockquote`,classes:[`${e}blockquote`]},{tag:`hr`,classes:[`${e}divider`]},{tag:`table`,classes:[`${e}table`]},{tag:`figure`,classes:[`${e}image`]}]}function ae(e,t){let n=t.join(` `),r=/\bclass\s*=\s*"([^"]*)"/i,i=e.match(r);return i?e.replace(r,`class="${n} ${i[1]}"`):e.endsWith(`/>`)?e.slice(0,-2)+` class="${n}" />`:e.slice(0,-1)+` class="${n}">`}function oe(e,t){return e.replace(/(?<!<figure[^>]*>\s*)(<img\s[^>]*\/?>)(?!\s*<\/figure>)/gi,`<figure class="${t}image">$1</figure>`)}function se(e,t){let n=t?.classPrefix??`cm-`,r=t?.wrapperClass??`${n}preview`,i=ie(n),a=e;for(let{tag:e,classes:t}of i){let n=RegExp(`<${e}(\\s[^>]*)?>|<${e}\\s*\\/?>`,`gi`);a=a.replace(n,e=>ae(e,t))}return a=oe(a,n),a=`<div class="${r}">${a}</div>`,typeof t?.sanitize==`function`&&(a=t.sanitize(a)),a}async function ce(e){try{return(await t(()=>import(`./preview-B6vi4el7.js`),[],import.meta.url)).parse(e)}catch{throw Error(`@create-markdown/core is required to parse markdown in <markdown-preview>. Install it, or provide pre-parsed blocks via the blocks attribute / setBlocks().`)}}I(class extends HTMLElement{constructor(){super(),I(this,`_shadow`,null),I(this,`plugins`,[]),I(this,`defaultTheme`,`github`),I(this,`styleElement`),I(this,`contentElement`);let e=this.constructor._shadowMode;e!==`none`&&(this._shadow=this.attachShadow({mode:e})),this.styleElement=document.createElement(`style`),this.renderRoot.appendChild(this.styleElement),this.contentElement=document.createElement(`div`),this.contentElement.className=`markdown-preview-content`,this.renderRoot.appendChild(this.contentElement),this.updateStyles()}static get observedAttributes(){return[`theme`,`link-target`,`async`]}get renderRoot(){return this._shadow??this}connectedCallback(){this.render()}attributeChangedCallback(e,t,n){this.render()}setPlugins(e){this.plugins=e,this.render()}setDefaultTheme(e){this.defaultTheme=e,this.render()}getMarkdown(){let e=this.getAttribute(`blocks`);if(e)try{return JSON.parse(e).map(e=>e.content.map(e=>e.text).join(``)).join(`
123
+ </div>`.trim()}function Y(e,t){return e.map(e=>X(e,t)).join(``)}function X(e,t){let n=Z(e.text),r=e.styles;if(r.code&&(n=`<code>${n}</code>`),r.highlight&&(n=`<mark>${n}</mark>`),r.strikethrough&&(n=`<del>${n}</del>`),r.underline&&(n=`<u>${n}</u>`),r.italic&&(n=`<em>${n}</em>`),r.bold&&(n=`<strong>${n}</strong>`),r.link){let e=t.linkTarget===`_blank`?` target="_blank" rel="noopener noreferrer"`:``,i=r.link.title?` title="${Z(r.link.title)}"`:``;n=`<a href="${Z(r.link.url)}"${i}${e}>${n}</a>`}return n}function Z(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#039;`)}function ie(e){return[...[1,2,3,4,5,6].map(t=>({tag:`h${t}`,classes:[`${e}heading`,`${e}h${t}`]})),{tag:`p`,classes:[`${e}paragraph`]},{tag:`ul`,classes:[`${e}bullet-list`]},{tag:`ol`,classes:[`${e}numbered-list`]},{tag:`pre`,classes:[`${e}code-block`]},{tag:`blockquote`,classes:[`${e}blockquote`]},{tag:`hr`,classes:[`${e}divider`]},{tag:`table`,classes:[`${e}table`]},{tag:`figure`,classes:[`${e}image`]}]}function ae(e,t){let n=t.join(` `),r=/\bclass\s*=\s*"([^"]*)"/i,i=e.match(r);return i?e.replace(r,`class="${n} ${i[1]}"`):e.endsWith(`/>`)?e.slice(0,-2)+` class="${n}" />`:e.slice(0,-1)+` class="${n}">`}function oe(e,t){return e.replace(/(?<!<figure[^>]*>\s*)(<img\s[^>]*\/?>)(?!\s*<\/figure>)/gi,`<figure class="${t}image">$1</figure>`)}function se(e,t){let n=t?.classPrefix??`cm-`,r=t?.wrapperClass??`${n}preview`,i=ie(n),a=e;for(let{tag:e,classes:t}of i){let n=RegExp(`<${e}(\\s[^>]*)?>|<${e}\\s*\\/?>`,`gi`);a=a.replace(n,e=>ae(e,t))}return a=oe(a,n),a=`<div class="${r}">${a}</div>`,typeof t?.sanitize==`function`&&(a=t.sanitize(a)),a}async function ce(e){try{return(await t(()=>import(`./preview-C_oLeox-.js`),[],import.meta.url)).parse(e)}catch{throw Error(`@create-markdown/core is required to parse markdown in <markdown-preview>. Install it, or provide pre-parsed blocks via the blocks attribute / setBlocks().`)}}I(class extends HTMLElement{constructor(){super(),I(this,`_shadow`,null),I(this,`plugins`,[]),I(this,`defaultTheme`,`github`),I(this,`styleElement`),I(this,`contentElement`);let e=this.constructor._shadowMode;e!==`none`&&(this._shadow=this.attachShadow({mode:e})),this.styleElement=document.createElement(`style`),this.renderRoot.appendChild(this.styleElement),this.contentElement=document.createElement(`div`),this.contentElement.className=`markdown-preview-content`,this.renderRoot.appendChild(this.contentElement),this.updateStyles()}static get observedAttributes(){return[`theme`,`link-target`,`async`]}get renderRoot(){return this._shadow??this}connectedCallback(){this.render()}attributeChangedCallback(e,t,n){this.render()}setPlugins(e){this.plugins=e,this.render()}setDefaultTheme(e){this.defaultTheme=e,this.render()}getMarkdown(){let e=this.getAttribute(`blocks`);if(e)try{return JSON.parse(e).map(e=>e.content.map(e=>e.text).join(``)).join(`
124
124
 
125
125
  `)}catch{return``}return this.textContent||``}setMarkdown(e){this.textContent=e,this.render()}setBlocks(e){this.setAttribute(`blocks`,JSON.stringify(e)),this.render()}getOptions(){return{theme:this.getAttribute(`theme`)||this.defaultTheme,linkTarget:this.getAttribute(`link-target`)||`_blank`,plugins:this.plugins}}async getBlocks(){let e=this.getAttribute(`blocks`);if(e)try{return JSON.parse(e)}catch{return console.warn(`Invalid blocks JSON in markdown-preview element`),[]}return ce(this.textContent||``)}async render(){let e=await this.getBlocks(),t=this.getOptions(),n=this.hasAttribute(`async`)||this.plugins.length>0;try{let r;r=n?await re(e,t):z(e,t),this.contentElement.innerHTML=r}catch(e){console.error(`Error rendering markdown preview:`,e),this.contentElement.innerHTML=`<div class="error">Error rendering content</div>`}}updateStyles(){let e=this.plugins.filter(e=>e.getCSS).map(e=>e.getCSS()).join(`
126
126
 
@@ -181,7 +181,7 @@ ${e}
181
181
  </div>
182
182
  </div>
183
183
  </section>
184
- `}function le(e,t){let n=e.channelMeta?.find(e=>e.id===t);return n?.label?n.label:e.channelLabels?.[t]??t}function ue(e){if(!e)return[];let t=new Set;for(let n of e.channelOrder??[])t.add(n);for(let n of e.channelMeta??[])t.add(n.id);for(let n of Object.keys(e.channelAccounts??{}))t.add(n);let n=[],r=e.channelOrder?.length?e.channelOrder:Array.from(t);for(let e of r)t.has(e)&&(n.push(e),t.delete(e));for(let e of t)n.push(e);return n.map(t=>({id:t,label:le(e,t),accounts:e.channelAccounts?.[t]??[]}))}var de=[`groupPolicy`,`streamMode`,`dmPolicy`];function fe(e){let t=0,n=0,r=0;for(let i of e){let e=i.probe&&typeof i.probe==`object`&&`ok`in i.probe?!!i.probe.ok:!1;(i.connected===!0||i.running===!0||e)&&(t+=1),i.configured&&(n+=1),i.enabled&&(r+=1)}return{total:e.length,connected:t,configured:n,enabled:r}}function pe(t){let a=ue(t.snapshot),o=t.lastSuccess?i(t.lastSuccess):`never`;return e`
184
+ `}function le(e,t){let n=e.channelMeta?.find(e=>e.id===t);return n?.label?n.label:e.channelLabels?.[t]??t}function ue(e){if(!e)return[];let t=new Set;for(let n of e.channelOrder??[])t.add(n);for(let n of e.channelMeta??[])t.add(n.id);for(let n of Object.keys(e.channelAccounts??{}))t.add(n);let n=[],r=e.channelOrder?.length?e.channelOrder:Array.from(t);for(let e of r)t.has(e)&&(n.push(e),t.delete(e));for(let e of t)n.push(e);return n.map(t=>({id:t,label:le(e,t),accounts:e.channelAccounts?.[t]??[]}))}var de=[`groupPolicy`,`streamMode`,`dmPolicy`];function fe(e){let t=0,n=0,r=0;for(let i of e){let e=i.probe&&typeof i.probe==`object`&&`ok`in i.probe?!!i.probe.ok:!1;(i.connected===!0||i.running===!0||e)&&(t+=1),i.configured&&(n+=1),i.enabled&&(r+=1)}return{total:e.length,connected:t,configured:n,enabled:r}}function pe(t){let i=ue(t.snapshot),o=t.lastSuccess?a(t.lastSuccess):`never`;return e`
185
185
  <section class="grid grid-cols-2">
186
186
  ${Q(t.context,`Workspace, identity, and model configuration.`,t.onSelectPanel)}
187
187
  <section class="card">
@@ -201,9 +201,9 @@ ${e}
201
201
  Load channels to see live status.
202
202
  </div>
203
203
  `}
204
- ${a.length===0?e` <div class="muted" style="margin-top: 16px">No channels found.</div> `:e`
204
+ ${i.length===0?e` <div class="muted" style="margin-top: 16px">No channels found.</div> `:e`
205
205
  <div class="list" style="margin-top: 16px;">
206
- ${a.map(n=>{let i=fe(n.accounts),a=i.total?`${i.connected}/${i.total} connected`:`no accounts`,o=i.configured?`${i.configured} configured`:`not configured`,s=i.total?`${i.enabled} enabled`:`disabled`,c=A({configForm:t.configForm,channelId:n.id,fields:de});return e`
206
+ ${i.map(n=>{let i=fe(n.accounts),a=i.total?`${i.connected}/${i.total} connected`:`no accounts`,o=i.configured?`${i.configured} configured`:`not configured`,s=i.total?`${i.enabled} enabled`:`disabled`,c=A({configForm:t.configForm,channelId:n.id,fields:de});return e`
207
207
  <div class="list-item">
208
208
  <div class="list-main">
209
209
  <div class="list-title">${n.label}</div>
@@ -216,7 +216,7 @@ ${e}
216
216
  ${i.configured===0?e`
217
217
  <div>
218
218
  <a
219
- href="https://docs.openclaw.ai/channels"
219
+ href="https://docs.neuralstudio.in"
220
220
  target="_blank"
221
221
  rel="noopener"
222
222
  style="color: var(--accent); font-size: 12px"
@@ -421,7 +421,7 @@ ${e}
421
421
  <div style="display: flex; gap: 6px; flex-wrap: wrap; margin-top: 6px;">
422
422
  ${o.map(t=>e`<span class="agent-pill">${t}</span>`)}
423
423
  </div>
424
- `}function ge(e){return e.source===`plugin`?e.pluginId?n(`agentTools.connectedSource`,{id:e.pluginId}):n(`agentTools.connected`):e.source===`channel`?e.channelId?n(`agentTools.channelSource`,{id:e.channelId}):n(`agentTools.channel`):n(`agentTools.builtIn`)}function _e(t){let i=p(t.configForm,t.agentId),a=i.entry?.tools??{},s=i.globalTools??{},c=a.profile??s.profile??`full`,l=o(t.toolsCatalogResult),d=y(t.toolsCatalogResult),f=a.profile?`agent override`:s.profile?`global default`:`default`,m=Array.isArray(a.allow)&&a.allow.length>0,h=Array.isArray(s.allow)&&s.allow.length>0,_=!!t.configForm&&!t.configLoading&&!t.configSaving&&!m&&!(t.toolsCatalogLoading&&!t.toolsCatalogResult&&!t.toolsCatalogError),v=m?[]:Array.isArray(a.alsoAllow)?a.alsoAllow:[],x=m?[]:Array.isArray(a.deny)?a.deny:[],S=m?{allow:a.allow??[],deny:a.deny??[]}:b(c)??void 0,C=d.flatMap(e=>e.tools.map(e=>e.id)),w=e=>{let t=g(e,S),n=O(e,v),r=O(e,x);return{allowed:(t||n)&&!r,baseAllowed:t,denied:r}},T=C.filter(e=>w(e).allowed).length,E=(e,n)=>{let r=new Set(v.map(e=>u(e)).filter(e=>e.length>0)),i=new Set(x.map(e=>u(e)).filter(e=>e.length>0)),a=w(e).baseAllowed,o=u(e);n?(i.delete(o),a||r.add(o)):(r.delete(o),i.add(o)),t.onOverridesChange(t.agentId,[...r],[...i])},D=e=>{let n=new Set(v.map(e=>u(e)).filter(e=>e.length>0)),r=new Set(x.map(e=>u(e)).filter(e=>e.length>0));for(let t of C){let i=w(t).baseAllowed,a=u(t);e?(r.delete(a),i||n.add(a)):(n.delete(a),r.add(a))}t.onOverridesChange(t.agentId,[...n],[...r])};return e`
424
+ `}function ge(e){return e.source===`plugin`?e.pluginId?n(`agentTools.connectedSource`,{id:e.pluginId}):n(`agentTools.connected`):e.source===`channel`?e.channelId?n(`agentTools.channelSource`,{id:e.channelId}):n(`agentTools.channel`):n(`agentTools.builtIn`)}function _e(t){let i=l(t.configForm,t.agentId),a=i.entry?.tools??{},s=i.globalTools??{},c=a.profile??s.profile??`full`,f=y(t.toolsCatalogResult),p=u(t.toolsCatalogResult),m=a.profile?`agent override`:s.profile?`global default`:`default`,h=Array.isArray(a.allow)&&a.allow.length>0,_=Array.isArray(s.allow)&&s.allow.length>0,v=!!t.configForm&&!t.configLoading&&!t.configSaving&&!h&&!(t.toolsCatalogLoading&&!t.toolsCatalogResult&&!t.toolsCatalogError),b=h?[]:Array.isArray(a.alsoAllow)?a.alsoAllow:[],x=h?[]:Array.isArray(a.deny)?a.deny:[],S=h?{allow:a.allow??[],deny:a.deny??[]}:o(c)??void 0,C=p.flatMap(e=>e.tools.map(e=>e.id)),w=e=>{let t=g(e,S),n=O(e,b),r=O(e,x);return{allowed:(t||n)&&!r,baseAllowed:t,denied:r}},T=C.filter(e=>w(e).allowed).length,E=(e,n)=>{let r=new Set(b.map(e=>d(e)).filter(e=>e.length>0)),i=new Set(x.map(e=>d(e)).filter(e=>e.length>0)),a=w(e).baseAllowed,o=d(e);n?(i.delete(o),a||r.add(o)):(r.delete(o),i.add(o)),t.onOverridesChange(t.agentId,[...r],[...i])},D=e=>{let n=new Set(b.map(e=>d(e)).filter(e=>e.length>0)),r=new Set(x.map(e=>d(e)).filter(e=>e.length>0));for(let t of C){let i=w(t).baseAllowed,a=d(t);e?(r.delete(a),i||n.add(a)):(n.delete(a),r.add(a))}t.onOverridesChange(t.agentId,[...n],[...r])};return e`
425
425
  <section class="card">
426
426
  <div class="row" style="justify-content: space-between; flex-wrap: wrap;">
427
427
  <div style="min-width: 0;">
@@ -432,10 +432,10 @@ ${e}
432
432
  </div>
433
433
  </div>
434
434
  <div class="row" style="gap: 8px; flex-wrap: wrap;">
435
- <button class="btn btn--sm" ?disabled=${!_} @click=${()=>D(!0)}>
435
+ <button class="btn btn--sm" ?disabled=${!v} @click=${()=>D(!0)}>
436
436
  Enable All
437
437
  </button>
438
- <button class="btn btn--sm" ?disabled=${!_} @click=${()=>D(!1)}>
438
+ <button class="btn btn--sm" ?disabled=${!v} @click=${()=>D(!1)}>
439
439
  Disable All
440
440
  </button>
441
441
  <button
@@ -460,13 +460,13 @@ ${e}
460
460
  Load the gateway config to adjust tool profiles.
461
461
  </div>
462
462
  `}
463
- ${m?e`
463
+ ${h?e`
464
464
  <div class="callout info" style="margin-top: 12px">
465
465
  This agent is using an explicit allowlist in config. Tool overrides are managed in the
466
466
  Config tab.
467
467
  </div>
468
468
  `:r}
469
- ${h?e`
469
+ ${_?e`
470
470
  <div class="callout info" style="margin-top: 12px">
471
471
  Global tools.allow is set. Agent overrides cannot enable tools that are globally
472
472
  blocked.
@@ -488,7 +488,7 @@ ${e}
488
488
  </div>
489
489
  <div class="agent-kv">
490
490
  <div class="label">Source</div>
491
- <div>${f}</div>
491
+ <div>${m}</div>
492
492
  </div>
493
493
  ${t.configDirty?e`
494
494
  <div class="agent-kv">
@@ -549,10 +549,10 @@ ${e}
549
549
  <div class="agent-tools-presets" style="margin-top: 16px;">
550
550
  <div class="label">Quick Presets</div>
551
551
  <div class="agent-tools-buttons">
552
- ${l.map(n=>e`
552
+ ${f.map(n=>e`
553
553
  <button
554
554
  class="btn btn--sm ${c===n.id?`active`:``}"
555
- ?disabled=${!_}
555
+ ?disabled=${!v}
556
556
  @click=${()=>t.onProfileChange(t.agentId,n.id,!0)}
557
557
  >
558
558
  ${n.label}
@@ -560,7 +560,7 @@ ${e}
560
560
  `)}
561
561
  <button
562
562
  class="btn btn--sm"
563
- ?disabled=${!_}
563
+ ?disabled=${!v}
564
564
  @click=${()=>t.onProfileChange(t.agentId,null,!1)}
565
565
  >
566
566
  Inherit
@@ -569,7 +569,7 @@ ${e}
569
569
  </div>
570
570
 
571
571
  <div class="agent-tools-grid" style="margin-top: 20px;">
572
- ${d.map(t=>e`
572
+ ${p.map(t=>e`
573
573
  <div class="agent-tools-section">
574
574
  <div class="agent-tools-header">
575
575
  ${t.label}
@@ -589,7 +589,7 @@ ${e}
589
589
  <input
590
590
  type="checkbox"
591
591
  .checked=${r}
592
- ?disabled=${!_}
592
+ ?disabled=${!v}
593
593
  @change=${e=>E(n.id,e.target.checked)}
594
594
  />
595
595
  <span class="cfg-toggle__track"></span>
@@ -601,7 +601,7 @@ ${e}
601
601
  `)}
602
602
  </div>
603
603
  </section>
604
- `}function ve(t){let i=!!t.configForm&&!t.configLoading&&!t.configSaving,o=p(t.configForm,t.agentId),s=Array.isArray(o.entry?.skills)?o.entry?.skills:void 0,c=new Set((s??[]).map(e=>e.trim()).filter(Boolean)),l=s!==void 0,u=!!(t.report&&t.activeAgentId===t.agentId),d=u?t.report?.skills??[]:[],f=a(t.filter),m=f?d.filter(e=>a([e.name,e.description,e.source].join(` `)).includes(f)):d,h=j(m),g=l?d.filter(e=>c.has(e.name)).length:d.length,_=d.length;return e`
604
+ `}function ve(t){let a=!!t.configForm&&!t.configLoading&&!t.configSaving,o=l(t.configForm,t.agentId),s=Array.isArray(o.entry?.skills)?o.entry?.skills:void 0,c=new Set((s??[]).map(e=>e.trim()).filter(Boolean)),u=s!==void 0,d=!!(t.report&&t.activeAgentId===t.agentId),f=d?t.report?.skills??[]:[],p=i(t.filter),m=p?f.filter(e=>i([e.name,e.description,e.source].join(` `)).includes(p)):f,h=j(m),g=u?f.filter(e=>c.has(e.name)).length:f.length,_=f.length;return e`
605
605
  <section class="card">
606
606
  <div class="row" style="justify-content: space-between; flex-wrap: wrap;">
607
607
  <div style="min-width: 0;">
@@ -618,21 +618,21 @@ ${e}
618
618
  >
619
619
  <button
620
620
  class="btn btn--sm"
621
- ?disabled=${!i}
621
+ ?disabled=${!a}
622
622
  @click=${()=>t.onClear(t.agentId)}
623
623
  >
624
624
  Enable All
625
625
  </button>
626
626
  <button
627
627
  class="btn btn--sm"
628
- ?disabled=${!i}
628
+ ?disabled=${!a}
629
629
  @click=${()=>t.onDisableAll(t.agentId)}
630
630
  >
631
631
  Disable All
632
632
  </button>
633
633
  <button
634
634
  class="btn btn--sm"
635
- ?disabled=${!i||!l}
635
+ ?disabled=${!a||!u}
636
636
  @click=${()=>t.onClear(t.agentId)}
637
637
  title="Remove per-agent allowlist and use all skills"
638
638
  >
@@ -664,7 +664,7 @@ ${e}
664
664
  Load the gateway config to set per-agent skills.
665
665
  </div>
666
666
  `}
667
- ${l?e`
667
+ ${u?e`
668
668
  <div class="callout info" style="margin-top: 12px">
669
669
  This agent uses a custom skill allowlist.
670
670
  </div>
@@ -673,7 +673,7 @@ ${e}
673
673
  All skills are enabled. Disabling any skill will create a per-agent allowlist.
674
674
  </div>
675
675
  `}
676
- ${!u&&!t.loading?e`
676
+ ${!d&&!t.loading?e`
677
677
  <div class="callout info" style="margin-top: 12px">
678
678
  Load skills for this agent to view workspace-specific entries.
679
679
  </div>
@@ -696,7 +696,7 @@ ${e}
696
696
 
697
697
  ${m.length===0?e` <div class="muted" style="margin-top: 16px">No skills found.</div> `:e`
698
698
  <div class="agent-skills-groups" style="margin-top: 16px;">
699
- ${h.map(e=>ye(e,{agentId:t.agentId,allowSet:c,usingAllowlist:l,editable:i,onToggle:t.onToggle}))}
699
+ ${h.map(e=>ye(e,{agentId:t.agentId,allowSet:c,usingAllowlist:u,editable:a,onToggle:t.onToggle}))}
700
700
  </div>
701
701
  `}
702
702
  </section>
@@ -731,7 +731,7 @@ ${e}
731
731
  </label>
732
732
  </div>
733
733
  </div>
734
- `}function xe(t){let i=t.agentsList?.agents??[],a=t.agentsList?.defaultId??null,o=t.selectedAgentId??a??i[0]?.id??null,s=o?i.find(e=>e.id===o)??null:null,c=o&&t.agentSkills.agentId===o?t.agentSkills.report?.skills?.length??null:null,l=t.channels.snapshot?Object.keys(t.channels.snapshot.channelAccounts??{}).length:null,u=o?t.cron.jobs.filter(e=>e.agentId===o).length:null,d={files:t.agentFiles.list?.files?.length??null,skills:c,channels:l,cron:u||null};return e`
734
+ `}function xe(t){let i=t.agentsList?.agents??[],a=t.agentsList?.defaultId??null,o=t.selectedAgentId??a??i[0]?.id??null,c=o?i.find(e=>e.id===o)??null:null,l=o&&t.agentSkills.agentId===o?t.agentSkills.report?.skills?.length??null:null,u=t.channels.snapshot?Object.keys(t.channels.snapshot.channelAccounts??{}).length:null,d=o?t.cron.jobs.filter(e=>e.agentId===o).length:null,f={files:t.agentFiles.list?.files?.length??null,skills:l,channels:u,cron:d||null};return e`
735
735
  <div class="agents-layout">
736
736
  <section class="agents-toolbar">
737
737
  <div class="agents-toolbar-row">
@@ -744,17 +744,17 @@ ${e}
744
744
  >
745
745
  ${i.length===0?e` <option value="">No agents</option> `:i.map(t=>e`
746
746
  <option value=${t.id} ?selected=${t.id===o}>
747
- ${f(t)}${m(t.id,a)?` (${m(t.id,a)})`:``}
747
+ ${s(t)}${m(t.id,a)?` (${m(t.id,a)})`:``}
748
748
  </option>
749
749
  `)}
750
750
  </select>
751
751
  </div>
752
752
  <div class="agents-toolbar-actions">
753
- ${s?e`
753
+ ${c?e`
754
754
  <button
755
755
  type="button"
756
756
  class="btn btn--sm btn--ghost"
757
- @click=${()=>void navigator.clipboard.writeText(s.id)}
757
+ @click=${()=>void navigator.clipboard.writeText(c.id)}
758
758
  title="Copy agent ID to clipboard"
759
759
  >
760
760
  Copy ID
@@ -762,11 +762,11 @@ ${e}
762
762
  <button
763
763
  type="button"
764
764
  class="btn btn--sm btn--ghost"
765
- ?disabled=${!!(a&&s.id===a)}
766
- @click=${()=>t.onSetDefault(s.id)}
767
- title=${a&&s.id===a?`Already the default agent`:`Set as the default agent`}
765
+ ?disabled=${!!(a&&c.id===a)}
766
+ @click=${()=>t.onSetDefault(c.id)}
767
+ title=${a&&c.id===a?`Already the default agent`:`Set as the default agent`}
768
768
  >
769
- ${a&&s.id===a?`Default`:`Set Default`}
769
+ ${a&&c.id===a?`Default`:`Set Default`}
770
770
  </button>
771
771
  `:r}
772
772
  <button
@@ -788,14 +788,14 @@ ${e}
788
788
  ${t.error?e`<div class="callout danger" style="margin-top: 8px;">${t.error}</div>`:r}
789
789
  </section>
790
790
  <section class="agents-main">
791
- ${s?e`
792
- ${Se(t.activePanel,e=>t.onSelectPanel(e),d)}
793
- ${t.activePanel===`overview`?F({agent:s,basePath:t.basePath,defaultId:a,configForm:t.config.form,agentFilesList:t.agentFiles.list,agentIdentity:t.agentIdentityById[s.id]??null,agentIdentityError:t.agentIdentityError,agentIdentityLoading:t.agentIdentityLoading,configLoading:t.config.loading,configSaving:t.config.saving,configDirty:t.config.dirty,modelCatalog:t.modelCatalog,onConfigReload:t.onConfigReload,onConfigSave:t.onConfigSave,onModelChange:t.onModelChange,onModelFallbacksChange:t.onModelFallbacksChange,onSelectPanel:t.onSelectPanel}):r}
794
- ${t.activePanel===`files`?me({agentId:s.id,agentFilesList:t.agentFiles.list,agentFilesLoading:t.agentFiles.loading,agentFilesError:t.agentFiles.error,agentFileActive:t.agentFiles.active,agentFileContents:t.agentFiles.contents,agentFileDrafts:t.agentFiles.drafts,agentFileSaving:t.agentFiles.saving,onLoadFiles:t.onLoadFiles,onSelectFile:t.onSelectFile,onFileDraftChange:t.onFileDraftChange,onFileReset:t.onFileReset,onFileSave:t.onFileSave}):r}
795
- ${t.activePanel===`tools`?_e({agentId:s.id,configForm:t.config.form,configLoading:t.config.loading,configSaving:t.config.saving,configDirty:t.config.dirty,toolsCatalogLoading:t.toolsCatalog.loading,toolsCatalogError:t.toolsCatalog.error,toolsCatalogResult:t.toolsCatalog.result,toolsEffectiveLoading:t.toolsEffective.loading,toolsEffectiveError:t.toolsEffective.error,toolsEffectiveResult:t.toolsEffective.result,runtimeSessionKey:t.runtimeSessionKey,runtimeSessionMatchesSelectedAgent:t.runtimeSessionMatchesSelectedAgent,onProfileChange:t.onToolsProfileChange,onOverridesChange:t.onToolsOverridesChange,onConfigReload:t.onConfigReload,onConfigSave:t.onConfigSave}):r}
796
- ${t.activePanel===`skills`?ve({agentId:s.id,report:t.agentSkills.report,loading:t.agentSkills.loading,error:t.agentSkills.error,activeAgentId:t.agentSkills.agentId,configForm:t.config.form,configLoading:t.config.loading,configSaving:t.config.saving,configDirty:t.config.dirty,filter:t.agentSkills.filter,onFilterChange:t.onSkillsFilterChange,onRefresh:t.onSkillsRefresh,onToggle:t.onAgentSkillToggle,onClear:t.onAgentSkillsClear,onDisableAll:t.onAgentSkillsDisableAll,onConfigReload:t.onConfigReload,onConfigSave:t.onConfigSave}):r}
797
- ${t.activePanel===`channels`?pe({context:E(s,t.config.form,t.agentFiles.list,a,t.agentIdentityById[s.id]??null),configForm:t.config.form,snapshot:t.channels.snapshot,loading:t.channels.loading,error:t.channels.error,lastSuccess:t.channels.lastSuccess,onRefresh:t.onChannelsRefresh,onSelectPanel:t.onSelectPanel}):r}
798
- ${t.activePanel===`cron`?$({context:E(s,t.config.form,t.agentFiles.list,a,t.agentIdentityById[s.id]??null),agentId:s.id,jobs:t.cron.jobs,status:t.cron.status,loading:t.cron.loading,error:t.cron.error,onRefresh:t.onCronRefresh,onRunNow:t.onCronRunNow,onSelectPanel:t.onSelectPanel}):r}
791
+ ${c?e`
792
+ ${Se(t.activePanel,e=>t.onSelectPanel(e),f)}
793
+ ${t.activePanel===`overview`?F({agent:c,basePath:t.basePath,defaultId:a,configForm:t.config.form,agentFilesList:t.agentFiles.list,agentIdentity:t.agentIdentityById[c.id]??null,agentIdentityError:t.agentIdentityError,agentIdentityLoading:t.agentIdentityLoading,configLoading:t.config.loading,configSaving:t.config.saving,configDirty:t.config.dirty,modelCatalog:t.modelCatalog,onConfigReload:t.onConfigReload,onConfigSave:t.onConfigSave,onModelChange:t.onModelChange,onModelFallbacksChange:t.onModelFallbacksChange,onSelectPanel:t.onSelectPanel}):r}
794
+ ${t.activePanel===`files`?me({agentId:c.id,agentFilesList:t.agentFiles.list,agentFilesLoading:t.agentFiles.loading,agentFilesError:t.agentFiles.error,agentFileActive:t.agentFiles.active,agentFileContents:t.agentFiles.contents,agentFileDrafts:t.agentFiles.drafts,agentFileSaving:t.agentFiles.saving,onLoadFiles:t.onLoadFiles,onSelectFile:t.onSelectFile,onFileDraftChange:t.onFileDraftChange,onFileReset:t.onFileReset,onFileSave:t.onFileSave}):r}
795
+ ${t.activePanel===`tools`?_e({agentId:c.id,configForm:t.config.form,configLoading:t.config.loading,configSaving:t.config.saving,configDirty:t.config.dirty,toolsCatalogLoading:t.toolsCatalog.loading,toolsCatalogError:t.toolsCatalog.error,toolsCatalogResult:t.toolsCatalog.result,toolsEffectiveLoading:t.toolsEffective.loading,toolsEffectiveError:t.toolsEffective.error,toolsEffectiveResult:t.toolsEffective.result,runtimeSessionKey:t.runtimeSessionKey,runtimeSessionMatchesSelectedAgent:t.runtimeSessionMatchesSelectedAgent,onProfileChange:t.onToolsProfileChange,onOverridesChange:t.onToolsOverridesChange,onConfigReload:t.onConfigReload,onConfigSave:t.onConfigSave}):r}
796
+ ${t.activePanel===`skills`?ve({agentId:c.id,report:t.agentSkills.report,loading:t.agentSkills.loading,error:t.agentSkills.error,activeAgentId:t.agentSkills.agentId,configForm:t.config.form,configLoading:t.config.loading,configSaving:t.config.saving,configDirty:t.config.dirty,filter:t.agentSkills.filter,onFilterChange:t.onSkillsFilterChange,onRefresh:t.onSkillsRefresh,onToggle:t.onAgentSkillToggle,onClear:t.onAgentSkillsClear,onDisableAll:t.onAgentSkillsDisableAll,onConfigReload:t.onConfigReload,onConfigSave:t.onConfigSave}):r}
797
+ ${t.activePanel===`channels`?pe({context:E(c,t.config.form,t.agentFiles.list,a,t.agentIdentityById[c.id]??null),configForm:t.config.form,snapshot:t.channels.snapshot,loading:t.channels.loading,error:t.channels.error,lastSuccess:t.channels.lastSuccess,onRefresh:t.onChannelsRefresh,onSelectPanel:t.onSelectPanel}):r}
798
+ ${t.activePanel===`cron`?$({context:E(c,t.config.form,t.agentFiles.list,a,t.agentIdentityById[c.id]??null),agentId:c.id,jobs:t.cron.jobs,status:t.cron.status,loading:t.cron.loading,error:t.cron.error,onRefresh:t.onCronRefresh,onRunNow:t.onCronRunNow,onSelectPanel:t.onSelectPanel}):r}
799
799
  `:e`
800
800
  <div class="card">
801
801
  <div class="card-title">Select an agent</div>
@@ -838,7 +838,7 @@ ${e}
838
838
  type="text"
839
839
  placeholder="e.g. work"
840
840
  style="width:100%;box-sizing:border-box;"
841
- @input=${e=>{let t=e.target.value.toLowerCase().replace(/[^a-z0-9-]/g,`-`).replace(/-+/g,`-`).replace(/^-|-$/g,``),n=document.getElementById(`kova-new-agent-ws`);n&&(n.value=t?`~/.openclaw/workspace-${t}`:``)}}
841
+ @input=${e=>{let t=e.target.value.toLowerCase().replace(/[^a-z0-9-]/g,`-`).replace(/-+/g,`-`).replace(/^-|-$/g,``),n=document.getElementById(`kova-new-agent-ws`);n&&(n.value=t?`~/.kova/workspace-${t}`:``)}}
842
842
  />
843
843
  <div style="font-size:11px;color:var(--muted);margin-top:3px;">Unique slug. Auto-fills workspace.</div>
844
844
  </div>
@@ -885,7 +885,7 @@ ${e}
885
885
  <button
886
886
  class="btn primary"
887
887
  ?disabled=${t.newAgentModalSubmitting}
888
- @click=${async()=>{let e=(document.getElementById(`kova-new-agent-id`)?.value?.trim()??``).toLowerCase().replace(/[^a-z0-9-]/g,`-`).replace(/-+/g,`-`).replace(/^-|-$/g,``),n=document.getElementById(`kova-new-agent-name`)?.value?.trim()??``,r=document.getElementById(`kova-new-agent-model`)?.value?.trim()??``,i=document.getElementById(`kova-new-agent-ws`)?.value?.trim()||`~/.openclaw/workspace-${e}`;await t.onNewAgentModalSubmit({agentId:e,name:n,model:r,workspace:i})}}
888
+ @click=${async()=>{let e=(document.getElementById(`kova-new-agent-id`)?.value?.trim()??``).toLowerCase().replace(/[^a-z0-9-]/g,`-`).replace(/-+/g,`-`).replace(/^-|-$/g,``),n=document.getElementById(`kova-new-agent-name`)?.value?.trim()??``,r=document.getElementById(`kova-new-agent-model`)?.value?.trim()??``,i=document.getElementById(`kova-new-agent-ws`)?.value?.trim()||`~/.kova/workspace-${e}`;await t.onNewAgentModalSubmit({agentId:e,name:n,model:r,workspace:i})}}
889
889
  >
890
890
  ${t.newAgentModalSubmitting?`Creating...`:`Create Agent`}
891
891
  </button>
@@ -900,4 +900,4 @@ ${e}
900
900
  </div>
901
901
  </div>
902
902
  `:r}export{xe as renderAgents};
903
- //# sourceMappingURL=agents-zdoAQZWu.js.map
903
+ //# sourceMappingURL=agents-BUzlQfGZ.js.map
@@ -1,2 +1,2 @@
1
- import{r as e}from"./i18n-CQvRr6_H.js";function t(e,t){if(!e)return null;let n=(e.channels??{})[t];if(n&&typeof n==`object`)return n;let r=e[t];return r&&typeof r==`object`?r:null}function n(t){if(t==null)return e(`common.na`);if(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)return String(t);try{return JSON.stringify(t)}catch{return e(`common.na`)}}function r(e){let r=t(e.configForm,e.channelId);return r?e.fields.flatMap(e=>e in r?[{label:e,value:n(r[e])}]:[]):[]}export{t as n,r,n as t};
2
- //# sourceMappingURL=channel-config-extras-C9aXEmVr.js.map
1
+ import{r as e}from"./i18n-FIEmRdxD.js";function t(e,t){if(!e)return null;let n=(e.channels??{})[t];if(n&&typeof n==`object`)return n;let r=e[t];return r&&typeof r==`object`?r:null}function n(t){if(t==null)return e(`common.na`);if(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)return String(t);try{return JSON.stringify(t)}catch{return e(`common.na`)}}function r(e){let r=t(e.configForm,e.channelId);return r?e.fields.flatMap(e=>e in r?[{label:e,value:n(r[e])}]:[]):[]}export{t as n,r,n as t};
2
+ //# sourceMappingURL=channel-config-extras-DvRct64Y.js.map