getkova 2.0.0-beta.12 → 2.0.0-beta.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/dist/.buildstamp +1 -1
- package/dist/{agents-Cv83FJ1s.js → agents-DYNROeFN.js} +1 -1
- package/dist/agents.commands.add-B9Q3n3bY.js +2 -0
- package/dist/{agents.commands.add-BX7k8wxL.js → agents.commands.add-BRpMqrRJ.js} +1 -1
- package/dist/{auth-choice-CIJsNMvx.js → auth-choice-DXcFxAUc.js} +1 -1
- package/dist/{auth-choice-CDyVAWSE.js → auth-choice-a7YBkCqd.js} +1 -1
- package/dist/build-info.json +3 -3
- package/dist/cli/run-main.js +4 -4
- package/dist/cli-startup-metadata.json +2 -2
- package/dist/{command-registry-C3twXmHO.js → command-registry-C_TGmiBn.js} +2 -2
- package/dist/{command-registry-DXpUM0mS.js → command-registry-Cypidkbo.js} +2 -2
- package/dist/{command-registry-core-CK3mLwYG.js → command-registry-core-PRh_gI53.js} +7 -7
- package/dist/{completion-cli-DFyAWfKa.js → completion-cli-nnYwutod.js} +2 -2
- package/dist/{config-cli-CPvKZuLF.js → config-cli-BRzInOE-.js} +1 -1
- package/dist/{configure-Bj4aMJwt.js → configure-Bwh6JA7D.js} +3 -3
- package/dist/configure-dZ-eQGYy.js +3 -0
- package/dist/{configure.commands-BifddrNd.js → configure.commands-CdaC_G18.js} +1 -1
- package/dist/{configure.wizard-BTU9REdR.js → configure.wizard-7rSbwDP4.js} +2 -2
- package/dist/{embedded-backend-iIZcnNwu.js → embedded-backend-CG-3uD3y.js} +34 -0
- package/dist/extensions/google/gemini-cli-provider.js +9 -0
- package/dist/extensions/google/oauth.credentials.js +16 -2
- package/dist/extensions/google/setup-api.js +34 -0
- package/dist/{gateway-chat-BPHJjxyp.js → gateway-chat-DtgJnrdN.js} +9 -0
- package/dist/{gateway-cli-BOTl6I3Z.js → gateway-cli-DR7qgn-2.js} +1 -1
- package/dist/{local-process-backend-DnkwOXbk.js → local-process-backend-DesX8olb.js} +9 -0
- package/dist/{model-picker-BnozRp4j.js → model-picker-CHxCmOg1.js} +1 -1
- package/dist/{model-picker-B4diByz_.js → model-picker-DrZ_xnKM.js} +11 -5
- package/dist/{model-picker.runtime-fxBzzLJi.js → model-picker.runtime-DPqk-fCR.js} +1 -1
- package/dist/model-picker.runtime.js +1 -1
- package/dist/{onboard-CB6m87Xq.js → onboard-ocgQYlzg.js} +1 -1
- package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
- package/dist/postinstall-inventory.json +44 -44
- package/dist/{program-DzyIksvz.js → program-Bc7KZvE4.js} +1 -1
- package/dist/{provider-auth-choice-CJsn-TeW.js → provider-auth-choice-DyZRp0As.js} +48 -21
- package/dist/{register.agent-BNTd3T0R.js → register.agent-CJfTiudH.js} +1 -1
- package/dist/{register.configure-JcB2446f.js → register.configure-vDVpx5uw.js} +3 -3
- package/dist/{register.onboard-43O1JC9t.js → register.onboard--sMAi8Cp.js} +1 -1
- package/dist/{register.settings-DtxLM-rq.js → register.settings-CZ6DFi7g.js} +2 -2
- package/dist/{register.setup-CXZ8SKnr.js → register.setup-D4xcgVdJ.js} +1 -1
- package/dist/{register.subclis-uuK2Pi04.js → register.subclis-CKoT2KT7.js} +2 -2
- package/dist/register.subclis-CTWWaDXm.js +3 -0
- package/dist/{register.subclis-core-BDQSG-W8.js → register.subclis-core-CbgJhZNs.js} +2 -2
- package/dist/{route-DMOrB5iD.js → route-VOBcZksS.js} +2 -2
- package/dist/{server-Br0mq7JG.js → server-BCJX8JcM.js} +1 -1
- package/dist/{server-methods-DuP3oYhB.js → server-methods-B5WxzaKk.js} +1 -1
- package/dist/{server-plugin-bootstrap-CiVVIETK.js → server-plugin-bootstrap-COnx2RCN.js} +1 -1
- package/dist/{server-plugins-BAddURDP.js → server-plugins-BVrJNao2.js} +1 -1
- package/dist/{server-startup-plugins-Co5FKb8_.js → server-startup-plugins-C462Zlj_.js} +1 -1
- package/dist/{server-startup-plugins-temwFEKa.js → server-startup-plugins-CE_Z3k8p.js} +1 -1
- package/dist/{server.impl-CWn8I1GH.js → server.impl-Czsabr3q.js} +6 -6
- package/dist/{setup-D876f1H_.js → setup-CAwtzquZ.js} +2 -2
- package/dist/setup-D7vQE9tM.js +2 -0
- package/dist/tui/local-backend-child.js +4 -1
- package/dist/{tui-DrUuVnxI.js → tui-Bu0hhKqj.js} +3266 -75
- package/dist/{tui-cli-Cqen9mHS.js → tui-cli-DVPuJZko.js} +1 -1
- package/docs/pi.md +2 -2
- package/docs/plan/terminal-control-parity.md +31 -23
- package/docs/tools/slash-commands.md +4 -3
- package/docs/web/tui.md +23 -5
- package/package.json +4 -3
- package/dist/agents.commands.add-CYLGi0PU.js +0 -2
- package/dist/configure-BcFwkumq.js +0 -3
- package/dist/register.subclis-BXWExNcW.js +0 -3
- package/dist/setup-BuExDK_Q.js +0 -2
package/CHANGELOG.md
CHANGED
package/dist/.buildstamp
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"builtAt":
|
|
1
|
+
{"builtAt":1782057648984,"head":"a843513ebfb01ccf692033c9c6af8495d8537d38"}
|
|
@@ -2,7 +2,7 @@ import "./agent-scope-C-t9kKAb.js";
|
|
|
2
2
|
import "./agents.binding-format-DxCQ5ArM.js";
|
|
3
3
|
import "./agents.bindings-_X4Drlvv.js";
|
|
4
4
|
import "./agents.config-CJItzAqZ.js";
|
|
5
|
-
import "./agents.commands.add-
|
|
5
|
+
import "./agents.commands.add-BRpMqrRJ.js";
|
|
6
6
|
import "./agents.commands.bind-C5KjF3eq.js";
|
|
7
7
|
import "./agents.commands.delete-CDfYoMn0.js";
|
|
8
8
|
import "./agents.commands.identity-86zC4KMC.js";
|
|
@@ -13,7 +13,7 @@ import { i as requireValidConfigFileSnapshot, t as createQuietRuntime } from "./
|
|
|
13
13
|
import { t as commitConfigWithPendingPluginInstalls } from "./plugins-install-record-commit-CicWK8KE.js";
|
|
14
14
|
import { i as ensureWorkspaceAndSessions } from "./onboard-helpers-DIlStw-1.js";
|
|
15
15
|
import { t as promptAuthChoiceGrouped } from "./auth-choice-prompt-C16qBzUa.js";
|
|
16
|
-
import { n as applyAuthChoice, t as warnIfModelConfigLooksOff } from "./auth-choice-
|
|
16
|
+
import { n as applyAuthChoice, t as warnIfModelConfigLooksOff } from "./auth-choice-a7YBkCqd.js";
|
|
17
17
|
import { i as setupChannels } from "./onboard-channels-DB3aztL8.js";
|
|
18
18
|
import { t as describeBinding } from "./agents.binding-format-DxCQ5ArM.js";
|
|
19
19
|
import { n as buildChannelBindings, r as parseBindingSpecs, t as applyAgentBindings } from "./agents.bindings-_X4Drlvv.js";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { n as applyAuthChoice, t as warnIfModelConfigLooksOff } from "./auth-choice-
|
|
1
|
+
import { n as applyAuthChoice, t as warnIfModelConfigLooksOff } from "./auth-choice-a7YBkCqd.js";
|
|
2
2
|
import { t as resolvePreferredProviderForAuthChoice } from "./provider-auth-choice-preference-WGHU31vl.js";
|
|
3
3
|
export { applyAuthChoice, resolvePreferredProviderForAuthChoice, warnIfModelConfigLooksOff };
|
|
@@ -6,7 +6,7 @@ import { A as openAIProviderUsesCodexRuntimeByDefault, O as isOpenAIProvider, k
|
|
|
6
6
|
import "./auth-profiles-DhmtgSMo.js";
|
|
7
7
|
import { n as listProfilesForProvider } from "./profile-list-DrVTJ0hW.js";
|
|
8
8
|
import { o as hasUsableCustomProviderApiKey } from "./model-auth-C0G938TT.js";
|
|
9
|
-
import { t as applyAuthChoiceLoadedPluginProvider } from "./provider-auth-choice-
|
|
9
|
+
import { t as applyAuthChoiceLoadedPluginProvider } from "./provider-auth-choice-DyZRp0As.js";
|
|
10
10
|
import { t as buildProviderAuthRecoveryHint } from "./provider-auth-guidance-C960b5fp.js";
|
|
11
11
|
import "./provider-auth-choice-preference-WGHU31vl.js";
|
|
12
12
|
//#region src/commands/auth-choice.apply.ts
|
package/dist/build-info.json
CHANGED
package/dist/cli/run-main.js
CHANGED
|
@@ -146,7 +146,7 @@ async function runCli(argv = process$1.argv) {
|
|
|
146
146
|
});
|
|
147
147
|
await ensureCliEnvProxyDispatcher();
|
|
148
148
|
maybeWarnAboutDebugProxyCoverage();
|
|
149
|
-
const { tryRouteCli } = await import("../route-
|
|
149
|
+
const { tryRouteCli } = await import("../route-VOBcZksS.js");
|
|
150
150
|
if (await tryRouteCli(normalizedArgv)) return;
|
|
151
151
|
const { createCliProgress } = await import("../progress-B3Q7T_pQ.js");
|
|
152
152
|
const startupProgress = createCliProgress({
|
|
@@ -165,7 +165,7 @@ async function runCli(argv = process$1.argv) {
|
|
|
165
165
|
const { enableConsoleCapture } = await import("../logging-BxhrU5os.js");
|
|
166
166
|
enableConsoleCapture();
|
|
167
167
|
const [{ buildProgram }, { formatUncaughtError }, { runFatalErrorHooks }, { installUnhandledRejectionHandler, isUncaughtExceptionHandled }, { restoreTerminalState }] = await Promise.all([
|
|
168
|
-
import("../program-
|
|
168
|
+
import("../program-Bc7KZvE4.js"),
|
|
169
169
|
import("../infra/errors.js"),
|
|
170
170
|
import("../fatal-error-hooks-DxqbkWSf.js"),
|
|
171
171
|
import("../unhandled-rejections-DkKpNtEB.js"),
|
|
@@ -189,10 +189,10 @@ async function runCli(argv = process$1.argv) {
|
|
|
189
189
|
const { getProgramContext } = await import("../program-context-DUQAJvOZ.js");
|
|
190
190
|
const ctx = getProgramContext(program);
|
|
191
191
|
if (ctx) {
|
|
192
|
-
const { registerCoreCliByName } = await import("../command-registry-
|
|
192
|
+
const { registerCoreCliByName } = await import("../command-registry-C_TGmiBn.js");
|
|
193
193
|
await registerCoreCliByName(program, ctx, primary, parseArgv);
|
|
194
194
|
}
|
|
195
|
-
const { registerSubCliByName } = await import("../register.subclis-
|
|
195
|
+
const { registerSubCliByName } = await import("../register.subclis-CTWWaDXm.js");
|
|
196
196
|
await registerSubCliByName(program, primary);
|
|
197
197
|
}
|
|
198
198
|
if (!shouldSkipPluginCommandRegistration({
|
|
@@ -28,6 +28,6 @@
|
|
|
28
28
|
"channelCatalogSignature": "88a500e5ec8ce62ed2fc40777a392f883db42c4f",
|
|
29
29
|
"rootHelpBundleSignature": "fa590c69572a5300492b1e0473437a7497777610",
|
|
30
30
|
"browserHelpSourceSignature": "6da32b19fce13bdcc3be8ba59163ea42f91cde83",
|
|
31
|
-
"browserHelpText": "\nKova 2.0.0-beta.
|
|
32
|
-
"rootHelpText": "\nKova 2.0.0-beta.
|
|
31
|
+
"browserHelpText": "\nKova 2.0.0-beta.14 (a843513) · terminal agent ready\n\nUsage: kova browser [options] [command]\n\nManage Kova's dedicated browser (Chrome/Chromium)\n\nOptions:\n --browser-profile <name> Browser profile name (default from config)\n --expect-final Wait for final response (agent) (default: false)\n -h, --help Display help for command\n --json Output machine-readable JSON (default: false)\n --timeout <ms> Timeout in ms (default: \"30000\")\n --token <token> Gateway token (if required)\n --url <url> Gateway WebSocket URL (defaults to\n gateway.remote.url when configured)\n\nCommands:\n click Click an element by ref from snapshot\n click-coords Click viewport coordinates\n close Close a tab (target id optional)\n console Get recent console messages\n cookies Read/write cookies\n create-profile Create a new browser profile\n delete-profile Delete a browser profile\n dialog Arm the next modal dialog (alert/confirm/prompt)\n doctor Check browser plugin readiness\n download Click a ref and save the resulting download\n drag Drag from one ref to another\n errors Get recent page errors\n evaluate Evaluate a function against the page or a ref\n fill Fill a form with JSON field descriptors\n focus Focus a tab by target id, tab id, label, or unique\n target id prefix\n highlight Highlight an element by ref\n hover Hover an element by ai ref\n navigate Navigate the current tab to a URL\n open Open a URL in a new tab\n pdf Save page as PDF\n press Press a key\n profiles List all browser profiles\n requests Get recent network requests (best-effort)\n reset-profile Reset browser profile (moves it to Trash)\n resize Resize the viewport\n responsebody Wait for a network response and return its body\n screenshot Capture a screenshot (MEDIA:<path>)\n scrollintoview Scroll an element into view by ref from snapshot\n select Select option(s) in a select element\n set Browser environment settings\n snapshot Capture a snapshot (default: ai; aria is the\n accessibility tree)\n start Start the browser (no-op if already running)\n status Show browser status\n stop Stop the browser (best-effort)\n storage Read/write localStorage/sessionStorage\n tab Tab shortcuts (index-based)\n tabs List open tabs\n trace Record a Playwright trace\n type Type into an element by ref from snapshot\n upload Arm file upload for the next file chooser\n wait Wait for time, selector, URL, load state, or JS\n conditions\n waitfordownload Wait for the next download (and save it)\n\nExamples:\n kova browser status\n kova browser start\n kova browser start --headless\n kova browser stop\n kova browser tabs\n kova browser open https://example.com\n kova browser focus abcd1234\n kova browser close abcd1234\n kova browser screenshot\n kova browser screenshot --full-page\n kova browser screenshot --ref 12\n kova browser snapshot\n kova browser snapshot --format aria --limit 200\n kova browser snapshot --efficient\n kova browser snapshot --labels\n kova browser navigate https://example.com\n kova browser resize 1280 720\n kova browser click 12 --double\n kova browser click-coords 120 340\n kova browser type 23 \"hello\" --submit\n kova browser press Enter\n kova browser hover 44\n kova browser drag 10 11\n kova browser select 9 OptionA OptionB\n kova browser upload /tmp/kova/uploads/file.pdf\n kova browser fill --fields '[{\"ref\":\"1\",\"value\":\"Ada\"}]'\n kova browser dialog --accept\n kova browser wait --text \"Done\"\n kova browser evaluate --fn '(el) => el.textContent' --ref 7\n kova browser console --level error\n kova browser pdf\n\nDocs: https://docs.neuralstudio.in/cli/browser\n\n",
|
|
32
|
+
"rootHelpText": "\nKova 2.0.0-beta.14 (a843513) · terminal agent ready\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_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 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 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 exec-policy * Show or synchronize requested exec policy with host\n approvals\n gateway * Run, inspect, and query the WebSocket Gateway\n goals * Manage durable terminal goals backed by TaskFlow\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 migrate * Import state from another agent system\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 terminal chat, workspace, and\n skills\n pairing * Secure DM pairing (approve inbound requests)\n permissions Show terminal tool, exec, sandbox, and plugin permissions\n persona * Inspect and edit the current agent persona\n plugins * Manage Kova plugins\n proxy * Run the Kova debug proxy and inspect captured traffic\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 settings Open the terminal settings console\n setup Initialize local config and agent workspace\n skills * List and inspect available skills\n status Show terminal readiness, Gateway health, and recent\n sessions\n system * System events, Pulse, and presence\n tasks * Inspect durable background task state\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 18789\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.neuralstudio.in/cli\n\n"
|
|
33
33
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import "./argv-DsGX2kMJ.js";
|
|
2
|
-
import { n as registerCoreCliByName } from "./command-registry-core-
|
|
3
|
-
import "./command-registry-
|
|
2
|
+
import { n as registerCoreCliByName } from "./command-registry-core-PRh_gI53.js";
|
|
3
|
+
import "./command-registry-Cypidkbo.js";
|
|
4
4
|
export { registerCoreCliByName };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as registerCoreCliCommands } from "./command-registry-core-
|
|
2
|
-
import { n as registerSubCliCommands } from "./register.subclis-
|
|
1
|
+
import { r as registerCoreCliCommands } from "./command-registry-core-PRh_gI53.js";
|
|
2
|
+
import { n as registerSubCliCommands } from "./register.subclis-CKoT2KT7.js";
|
|
3
3
|
//#region src/cli/program/command-registry.ts
|
|
4
4
|
function registerProgramCommands(program, ctx, argv = process.argv) {
|
|
5
5
|
registerCoreCliCommands(program, ctx, argv);
|
|
@@ -2,7 +2,7 @@ import { _ as getCoreCliCommandDescriptors, v as getCoreCliCommandNames$1 } from
|
|
|
2
2
|
import { t as resolveCliArgvInvocation } from "./argv-invocation-DWwdVlIB.js";
|
|
3
3
|
import { n as shouldRegisterPrimaryCommandOnly } from "./command-registration-policy-BfUsVmz7.js";
|
|
4
4
|
import { i as registerCommandGroups, r as registerCommandGroupByName } from "./register-command-groups-6fuXByLA.js";
|
|
5
|
-
import { a as defineImportedCommandGroupSpec, i as buildCommandGroupEntries, o as defineImportedProgramCommandGroupSpecs } from "./register.subclis-core-
|
|
5
|
+
import { a as defineImportedCommandGroupSpec, i as buildCommandGroupEntries, o as defineImportedProgramCommandGroupSpecs } from "./register.subclis-core-CbgJhZNs.js";
|
|
6
6
|
//#region src/cli/program/command-registry-core.ts
|
|
7
7
|
function withProgramOnlySpecs(specs) {
|
|
8
8
|
return specs.map((spec) => ({
|
|
@@ -16,27 +16,27 @@ const coreEntrySpecs = [
|
|
|
16
16
|
...withProgramOnlySpecs(defineImportedProgramCommandGroupSpecs([
|
|
17
17
|
{
|
|
18
18
|
commandNames: ["setup"],
|
|
19
|
-
loadModule: () => import("./register.setup-
|
|
19
|
+
loadModule: () => import("./register.setup-D4xcgVdJ.js"),
|
|
20
20
|
exportName: "registerSetupCommand"
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
23
|
commandNames: ["onboard"],
|
|
24
|
-
loadModule: () => import("./register.onboard
|
|
24
|
+
loadModule: () => import("./register.onboard--sMAi8Cp.js"),
|
|
25
25
|
exportName: "registerOnboardCommand"
|
|
26
26
|
},
|
|
27
27
|
{
|
|
28
28
|
commandNames: ["configure"],
|
|
29
|
-
loadModule: () => import("./register.configure-
|
|
29
|
+
loadModule: () => import("./register.configure-vDVpx5uw.js"),
|
|
30
30
|
exportName: "registerConfigureCommand"
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
33
|
commandNames: ["settings"],
|
|
34
|
-
loadModule: () => import("./register.settings-
|
|
34
|
+
loadModule: () => import("./register.settings-CZ6DFi7g.js"),
|
|
35
35
|
exportName: "registerSettingsCommand"
|
|
36
36
|
},
|
|
37
37
|
{
|
|
38
38
|
commandNames: ["config"],
|
|
39
|
-
loadModule: () => import("./config-cli-
|
|
39
|
+
loadModule: () => import("./config-cli-BRzInOE-.js"),
|
|
40
40
|
exportName: "registerConfigCli"
|
|
41
41
|
},
|
|
42
42
|
{
|
|
@@ -67,7 +67,7 @@ const coreEntrySpecs = [
|
|
|
67
67
|
loadModule: () => import("./mcp-cli-DAILFimD.js"),
|
|
68
68
|
exportName: "registerMcpCli"
|
|
69
69
|
}])),
|
|
70
|
-
defineImportedCommandGroupSpec(["agent", "agents"], () => import("./register.agent-
|
|
70
|
+
defineImportedCommandGroupSpec(["agent", "agents"], () => import("./register.agent-CJfTiudH.js"), (mod, { program, ctx }) => {
|
|
71
71
|
mod.registerAgentCommands(program, { agentChannelOptions: ctx.agentChannelOptions });
|
|
72
72
|
}),
|
|
73
73
|
...withProgramOnlySpecs(defineImportedProgramCommandGroupSpecs([{
|
|
@@ -2,8 +2,8 @@ import { t as formatDocsLink } from "./links-m69AEvat.js";
|
|
|
2
2
|
import { r as theme } from "./theme-C-A7UKu3.js";
|
|
3
3
|
import { a as routeLogsToStderr } from "./console-CCvROk7Y.js";
|
|
4
4
|
import { c as resolveShellFromEnv, i as installCompletion, o as isCompletionShell, s as resolveCompletionCachePath, t as COMPLETION_SHELLS } from "./completion-runtime-PZ8sMcyB.js";
|
|
5
|
-
import { n as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-core-
|
|
6
|
-
import { n as registerCoreCliByName, t as getCoreCliCommandNames } from "./command-registry-core-
|
|
5
|
+
import { n as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-core-CbgJhZNs.js";
|
|
6
|
+
import { n as registerCoreCliByName, t as getCoreCliCommandNames } from "./command-registry-core-PRh_gI53.js";
|
|
7
7
|
import { t as getProgramContext } from "./program-context-CjdKg_V9.js";
|
|
8
8
|
import path from "node:path";
|
|
9
9
|
import fs from "node:fs/promises";
|
|
@@ -1075,7 +1075,7 @@ async function runConfigValidate(opts = {}) {
|
|
|
1075
1075
|
}
|
|
1076
1076
|
function registerConfigCli(program) {
|
|
1077
1077
|
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.neuralstudio.in/cli/config")}\n`).option("--section <section>", "Configuration sections for guided setup (repeatable). Use with no subcommand.", (value, previous) => [...previous, value], []).action(async (opts) => {
|
|
1078
|
-
const { configureCommandFromSectionsArg } = await import("./configure-
|
|
1078
|
+
const { configureCommandFromSectionsArg } = await import("./configure-Bwh6JA7D.js");
|
|
1079
1079
|
await configureCommandFromSectionsArg(opts.section, defaultRuntime);
|
|
1080
1080
|
});
|
|
1081
1081
|
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,4 +1,4 @@
|
|
|
1
|
-
import "./configure.wizard-
|
|
2
|
-
import { n as configureCommandFromSectionsArg } from "./configure.commands-
|
|
3
|
-
import "./configure-
|
|
1
|
+
import "./configure.wizard-7rSbwDP4.js";
|
|
2
|
+
import { n as configureCommandFromSectionsArg } from "./configure.commands-CdaC_G18.js";
|
|
3
|
+
import "./configure-dZ-eQGYy.js";
|
|
4
4
|
export { configureCommandFromSectionsArg };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as defaultRuntime } from "./runtime-BqmjkjMH.js";
|
|
2
|
-
import { i as parseConfigureWizardSections, r as CONFIGURE_WIZARD_SECTIONS, t as runConfigureWizard } from "./configure.wizard-
|
|
2
|
+
import { i as parseConfigureWizardSections, r as CONFIGURE_WIZARD_SECTIONS, t as runConfigureWizard } from "./configure.wizard-7rSbwDP4.js";
|
|
3
3
|
//#region src/commands/configure.commands.ts
|
|
4
4
|
async function configureCommand(runtime = defaultRuntime) {
|
|
5
5
|
await runConfigureWizard({ command: "configure" }, runtime);
|
|
@@ -39,9 +39,9 @@ import { _ as waitForGatewayReachable, f as probeGatewayReachable, g as validate
|
|
|
39
39
|
import { t as resolveSetupSecretInputString } from "./setup.secret-input-L_VnuW_Z.js";
|
|
40
40
|
import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-B89QO1cO.js";
|
|
41
41
|
import { t as promptAuthChoiceGrouped } from "./auth-choice-prompt-C16qBzUa.js";
|
|
42
|
-
import { n as applyAuthChoice } from "./auth-choice-
|
|
42
|
+
import { n as applyAuthChoice } from "./auth-choice-a7YBkCqd.js";
|
|
43
43
|
import { t as resolvePreferredProviderForAuthChoice } from "./provider-auth-choice-preference-WGHU31vl.js";
|
|
44
|
-
import { i as promptModelAllowlist, n as applyModelFallbacksFromSelection, r as promptDefaultModel, t as applyModelAllowlist } from "./model-picker-
|
|
44
|
+
import { i as promptModelAllowlist, n as applyModelFallbacksFromSelection, r as promptDefaultModel, t as applyModelAllowlist } from "./model-picker-DrZ_xnKM.js";
|
|
45
45
|
import { t as promptCustomApiConfig } from "./onboard-custom-COTjvU9k.js";
|
|
46
46
|
import { i as TAILSCALE_MISSING_BIN_NOTE_LINES, n as TAILSCALE_DOCS_LINES, r as TAILSCALE_EXPOSURE_OPTIONS, t as validateIPv4AddressInput } from "./ipv4-DmKDA_a_.js";
|
|
47
47
|
import { n as formatHealthCheckFailure } from "./health-format-CKiNFFFt.js";
|
|
@@ -544,6 +544,40 @@ var EmbeddedTuiBackend = class {
|
|
|
544
544
|
const installRecords = await loadInstalledPluginIndexInstallRecords();
|
|
545
545
|
return createPluginsStatusResult(getRuntimeConfig(), { installRecords });
|
|
546
546
|
}
|
|
547
|
+
async setPluginEnabled(opts) {
|
|
548
|
+
return await this.invokePluginHandler("plugins.setEnabled", opts);
|
|
549
|
+
}
|
|
550
|
+
async installPlugin(opts) {
|
|
551
|
+
return await this.invokePluginHandler("plugins.install", opts);
|
|
552
|
+
}
|
|
553
|
+
async uninstallPlugin(opts) {
|
|
554
|
+
return await this.invokePluginHandler("plugins.uninstall", opts);
|
|
555
|
+
}
|
|
556
|
+
async invokePluginHandler(method, params) {
|
|
557
|
+
const [{ getRuntimeConfig }, { pluginsHandlers }] = await Promise.all([getConfigModule(), import("./plugins-B7qchJSp.js")]);
|
|
558
|
+
const handler = pluginsHandlers[method];
|
|
559
|
+
return await new Promise((resolve, reject) => {
|
|
560
|
+
Promise.resolve(handler({
|
|
561
|
+
req: {
|
|
562
|
+
type: "req",
|
|
563
|
+
id: `tui-${method}`,
|
|
564
|
+
method,
|
|
565
|
+
params
|
|
566
|
+
},
|
|
567
|
+
params,
|
|
568
|
+
client: null,
|
|
569
|
+
isWebchatConnect: () => false,
|
|
570
|
+
context: { getRuntimeConfig },
|
|
571
|
+
respond: (ok, payload, error) => {
|
|
572
|
+
if (ok) {
|
|
573
|
+
resolve(payload);
|
|
574
|
+
return;
|
|
575
|
+
}
|
|
576
|
+
reject(new Error(error?.message ?? `${method} failed`));
|
|
577
|
+
}
|
|
578
|
+
})).catch(reject);
|
|
579
|
+
});
|
|
580
|
+
}
|
|
547
581
|
async listTools(opts) {
|
|
548
582
|
const [{ getRuntimeConfig }, { buildToolsCatalogResult }] = await Promise.all([getConfigModule(), import("./tools-catalog-Brc0IqmR.js")]);
|
|
549
583
|
return buildToolsCatalogResult({
|
|
@@ -14,6 +14,7 @@ const ENV_VARS = [
|
|
|
14
14
|
"GEMINI_CLI_OAUTH_CLIENT_ID",
|
|
15
15
|
"GEMINI_CLI_OAUTH_CLIENT_SECRET"
|
|
16
16
|
];
|
|
17
|
+
const PROVIDER_AUTH_UNAVAILABLE_ERROR_CODE = "KOVA_PROVIDER_AUTH_UNAVAILABLE";
|
|
17
18
|
const GOOGLE_GEMINI_CLI_PROVIDER_HOOKS = {
|
|
18
19
|
...GOOGLE_GEMINI_PROVIDER_HOOKS,
|
|
19
20
|
...buildProviderToolCompatFamilyHooks("gemini")
|
|
@@ -34,6 +35,14 @@ function buildGoogleGeminiCliProvider() {
|
|
|
34
35
|
hint: "PKCE + localhost callback",
|
|
35
36
|
kind: "oauth",
|
|
36
37
|
run: async (ctx) => {
|
|
38
|
+
const { resolveOAuthClientConfigPreflight } = await import("./oauth.credentials.js");
|
|
39
|
+
const preflight = resolveOAuthClientConfigPreflight();
|
|
40
|
+
if (!preflight.ok) {
|
|
41
|
+
await ctx.prompter.note([preflight.message, "Install the CLI or set the OAuth client env vars, then run onboarding again."].join("\n"), "Gemini CLI OAuth unavailable");
|
|
42
|
+
const error = new Error(preflight.message);
|
|
43
|
+
error.code = PROVIDER_AUTH_UNAVAILABLE_ERROR_CODE;
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
37
46
|
await ctx.prompter.note([
|
|
38
47
|
"This is an unofficial integration and is not endorsed by Google.",
|
|
39
48
|
"Some users have reported account restrictions or suspensions after using third-party Gemini CLI and Antigravity OAuth clients.",
|
|
@@ -17,6 +17,7 @@ function resolveEnv(keys) {
|
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
let cachedGeminiCliCredentials = null;
|
|
20
|
+
const GEMINI_CLI_OAUTH_MISSING_MESSAGE = "Gemini CLI not found. Install it first with `npm install -g @google/gemini-cli`, or set GEMINI_CLI_OAUTH_CLIENT_ID. On macOS with Homebrew, `brew install gemini-cli` also works.";
|
|
20
21
|
function clearCredentialsCache() {
|
|
21
22
|
cachedGeminiCliCredentials = null;
|
|
22
23
|
}
|
|
@@ -158,7 +159,20 @@ function resolveOAuthClientConfig() {
|
|
|
158
159
|
};
|
|
159
160
|
const extracted = extractGeminiCliCredentials();
|
|
160
161
|
if (extracted) return extracted;
|
|
161
|
-
throw new Error(
|
|
162
|
+
throw new Error(GEMINI_CLI_OAUTH_MISSING_MESSAGE);
|
|
163
|
+
}
|
|
164
|
+
function resolveOAuthClientConfigPreflight() {
|
|
165
|
+
try {
|
|
166
|
+
return {
|
|
167
|
+
ok: true,
|
|
168
|
+
config: resolveOAuthClientConfig()
|
|
169
|
+
};
|
|
170
|
+
} catch (error) {
|
|
171
|
+
return {
|
|
172
|
+
ok: false,
|
|
173
|
+
message: error instanceof Error ? error.message : GEMINI_CLI_OAUTH_MISSING_MESSAGE
|
|
174
|
+
};
|
|
175
|
+
}
|
|
162
176
|
}
|
|
163
177
|
//#endregion
|
|
164
|
-
export { clearCredentialsCache, extractGeminiCliCredentials, resolveOAuthClientConfig, setOAuthCredentialsFsForTest };
|
|
178
|
+
export { clearCredentialsCache, extractGeminiCliCredentials, resolveOAuthClientConfig, resolveOAuthClientConfigPreflight, setOAuthCredentialsFsForTest };
|
|
@@ -1,12 +1,46 @@
|
|
|
1
1
|
import { buildGoogleGeminiCliBackend } from "./cli-backend.js";
|
|
2
|
+
import { buildGoogleGeminiCliProvider } from "./gemini-cli-provider.js";
|
|
3
|
+
import { GOOGLE_GEMINI_DEFAULT_MODEL, applyGoogleGeminiModelDefault } from "./onboard.js";
|
|
2
4
|
import { definePluginEntry } from "getkova/plugin-sdk/plugin-entry";
|
|
5
|
+
import { createProviderApiKeyAuthMethod } from "getkova/plugin-sdk/provider-auth-api-key";
|
|
3
6
|
//#region extensions/google/setup-api.ts
|
|
7
|
+
function buildGoogleSetupProvider() {
|
|
8
|
+
return {
|
|
9
|
+
id: "google",
|
|
10
|
+
label: "Google AI Studio",
|
|
11
|
+
docsPath: "/providers/models",
|
|
12
|
+
hookAliases: ["google-antigravity", "google-vertex"],
|
|
13
|
+
envVars: ["GEMINI_API_KEY", "GOOGLE_API_KEY"],
|
|
14
|
+
auth: [createProviderApiKeyAuthMethod({
|
|
15
|
+
providerId: "google",
|
|
16
|
+
methodId: "api-key",
|
|
17
|
+
label: "Google Gemini API key",
|
|
18
|
+
hint: "AI Studio / Gemini API key",
|
|
19
|
+
optionKey: "geminiApiKey",
|
|
20
|
+
flagName: "--gemini-api-key",
|
|
21
|
+
envVar: "GEMINI_API_KEY",
|
|
22
|
+
promptMessage: "Enter Gemini API key",
|
|
23
|
+
defaultModel: GOOGLE_GEMINI_DEFAULT_MODEL,
|
|
24
|
+
expectedProviders: ["google"],
|
|
25
|
+
applyConfig: (cfg) => applyGoogleGeminiModelDefault(cfg).next,
|
|
26
|
+
wizard: {
|
|
27
|
+
choiceId: "gemini-api-key",
|
|
28
|
+
choiceLabel: "Google Gemini API key",
|
|
29
|
+
groupId: "google",
|
|
30
|
+
groupLabel: "Google",
|
|
31
|
+
groupHint: "Gemini API key + OAuth"
|
|
32
|
+
}
|
|
33
|
+
})]
|
|
34
|
+
};
|
|
35
|
+
}
|
|
4
36
|
var setup_api_default = definePluginEntry({
|
|
5
37
|
id: "google",
|
|
6
38
|
name: "Google Setup",
|
|
7
39
|
description: "Lightweight Google setup hooks",
|
|
8
40
|
register(api) {
|
|
9
41
|
api.registerCliBackend(buildGoogleGeminiCliBackend());
|
|
42
|
+
api.registerProvider(buildGoogleSetupProvider());
|
|
43
|
+
api.registerProvider(buildGoogleGeminiCliProvider());
|
|
10
44
|
}
|
|
11
45
|
});
|
|
12
46
|
//#endregion
|
|
@@ -165,6 +165,15 @@ var GatewayChatClient = class GatewayChatClient {
|
|
|
165
165
|
async listPlugins() {
|
|
166
166
|
return await this.client.request("plugins.status", {});
|
|
167
167
|
}
|
|
168
|
+
async setPluginEnabled(opts) {
|
|
169
|
+
return await this.client.request("plugins.setEnabled", opts);
|
|
170
|
+
}
|
|
171
|
+
async installPlugin(opts) {
|
|
172
|
+
return await this.client.request("plugins.install", opts);
|
|
173
|
+
}
|
|
174
|
+
async uninstallPlugin(opts) {
|
|
175
|
+
return await this.client.request("plugins.uninstall", opts);
|
|
176
|
+
}
|
|
168
177
|
async listTools(opts) {
|
|
169
178
|
return await this.client.request("tools.catalog", {
|
|
170
179
|
agentId: opts.agentId,
|
|
@@ -855,7 +855,7 @@ async function runGatewayCommand$1(opts) {
|
|
|
855
855
|
const { startGatewayServer } = await startupTrace.measure("cli.server-import", () => withProgress({
|
|
856
856
|
label: "Loading Kova runtime modules…",
|
|
857
857
|
indeterminate: true
|
|
858
|
-
}, async () => import("./server-
|
|
858
|
+
}, async () => import("./server-BCJX8JcM.js")));
|
|
859
859
|
setConsoleTimestampPrefix(true);
|
|
860
860
|
if (devMode) await startupTrace.measure("cli.dev-config", () => ensureDevGatewayConfig({ reset: Boolean(opts.reset) }));
|
|
861
861
|
gatewayLog.info("config: loading runtime profile");
|
|
@@ -135,6 +135,15 @@ var LocalProcessTuiBackend = class {
|
|
|
135
135
|
async listPlugins() {
|
|
136
136
|
return await this.request("listPlugins", {});
|
|
137
137
|
}
|
|
138
|
+
async setPluginEnabled(opts) {
|
|
139
|
+
return await this.request("setPluginEnabled", opts);
|
|
140
|
+
}
|
|
141
|
+
async installPlugin(opts) {
|
|
142
|
+
return await this.request("installPlugin", opts);
|
|
143
|
+
}
|
|
144
|
+
async uninstallPlugin(opts) {
|
|
145
|
+
return await this.request("uninstallPlugin", opts);
|
|
146
|
+
}
|
|
138
147
|
async listTools(opts) {
|
|
139
148
|
return await this.request("listTools", opts);
|
|
140
149
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as applyPrimaryModel } from "./provider-model-primary-DYPCWuF-.js";
|
|
2
|
-
import { i as promptModelAllowlist, n as applyModelFallbacksFromSelection, r as promptDefaultModel, t as applyModelAllowlist } from "./model-picker-
|
|
2
|
+
import { i as promptModelAllowlist, n as applyModelFallbacksFromSelection, r as promptDefaultModel, t as applyModelAllowlist } from "./model-picker-DrZ_xnKM.js";
|
|
3
3
|
export { applyModelAllowlist, applyModelFallbacksFromSelection, applyPrimaryModel, promptDefaultModel, promptModelAllowlist };
|
|
@@ -19,9 +19,10 @@ import { t as loadStaticManifestCatalogRowsForList } from "./list.manifest-catal
|
|
|
19
19
|
const KEEP_VALUE = "__keep__";
|
|
20
20
|
const MANUAL_VALUE = "__manual__";
|
|
21
21
|
const BROWSE_VALUE = "__browse__";
|
|
22
|
+
const REFRESH_VALUE = "__refresh__";
|
|
22
23
|
const PROVIDER_FILTER_THRESHOLD = 30;
|
|
23
24
|
async function loadModelPickerRuntime() {
|
|
24
|
-
return import("./model-picker.runtime-
|
|
25
|
+
return import("./model-picker.runtime-DPqk-fCR.js");
|
|
25
26
|
}
|
|
26
27
|
const loadResolvedModelPickerRuntime = createLazyRuntimeSurface(loadModelPickerRuntime, ({ modelPickerRuntime }) => modelPickerRuntime);
|
|
27
28
|
function hasAuthForProvider(provider, cfg, store) {
|
|
@@ -409,8 +410,13 @@ async function promptDefaultModel(params) {
|
|
|
409
410
|
});
|
|
410
411
|
options.push({
|
|
411
412
|
value: BROWSE_VALUE,
|
|
412
|
-
label: "Browse all models",
|
|
413
|
-
hint: "loads
|
|
413
|
+
label: preferredProvider ? "Browse provider models" : "Browse all models",
|
|
414
|
+
hint: preferredProvider ? "fast local catalog" : "loads model catalogs"
|
|
415
|
+
});
|
|
416
|
+
if (preferredProvider) options.push({
|
|
417
|
+
value: REFRESH_VALUE,
|
|
418
|
+
label: "Refresh all provider catalogs",
|
|
419
|
+
hint: "slower; loads every provider"
|
|
414
420
|
});
|
|
415
421
|
const selection = await params.prompter.select({
|
|
416
422
|
message: params.message ?? "Default model",
|
|
@@ -424,8 +430,8 @@ async function promptDefaultModel(params) {
|
|
|
424
430
|
allowBlank: false,
|
|
425
431
|
initialValue: configuredRaw || resolvedKey || void 0
|
|
426
432
|
});
|
|
427
|
-
if (selection
|
|
428
|
-
|
|
433
|
+
if (selection === REFRESH_VALUE) forceDynamicCatalog = true;
|
|
434
|
+
else if (selection !== BROWSE_VALUE) return { model: selection };
|
|
429
435
|
}
|
|
430
436
|
if (!loadCatalog) {
|
|
431
437
|
const options = [];
|
|
@@ -2,7 +2,7 @@ import { c as normalizeOptionalString } from "./string-coerce-Bje8XVt9.js";
|
|
|
2
2
|
import { n as resolvePluginProviders } from "./providers.runtime-B5oxcgx4.js";
|
|
3
3
|
import { n as resolveProviderPluginChoice, r as runProviderModelSelectedHook, t as resolveProviderModelPickerEntries } from "./provider-wizard-BkNjhNNr.js";
|
|
4
4
|
import { t as sortFlowContributionsByLabel } from "./types-2PHKHlv0.js";
|
|
5
|
-
import { n as runProviderPluginAuthMethod } from "./provider-auth-choice-
|
|
5
|
+
import { n as runProviderPluginAuthMethod } from "./provider-auth-choice-DyZRp0As.js";
|
|
6
6
|
//#region src/flows/provider-flow.runtime.ts
|
|
7
7
|
function resolveProviderDocsById(params) {
|
|
8
8
|
if (!params?.providerRefs?.length) return /* @__PURE__ */ new Map();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./model-picker.runtime-
|
|
1
|
+
export * from "./model-picker.runtime-DPqk-fCR.js";
|
|
@@ -20,7 +20,7 @@ import { t as createClackPrompter } from "./clack-prompter-Big8z_Xz.js";
|
|
|
20
20
|
import { n as logConfigUpdated } from "./logging-DEJSBorQ.js";
|
|
21
21
|
import { _ as waitForGatewayReachable, c as handleReset, i as ensureWorkspaceAndSessions, m as resolveOnboardWorkspaceDefault, n as LEGACY_DEFAULT_WORKSPACE, r as applyWizardMetadata, t as DEFAULT_WORKSPACE, u as normalizeGatewayTokenInput, v as resolveGatewayHttpLinks } from "./onboard-helpers-DIlStw-1.js";
|
|
22
22
|
import { i as resolveDeprecatedAuthChoiceReplacement, n as isDeprecatedAuthChoice, r as normalizeLegacyOnboardAuthChoice, t as formatDeprecatedNonInteractiveAuthChoiceError } from "./auth-choice-legacy-DrT593ag.js";
|
|
23
|
-
import { t as runSetupWizard } from "./setup-
|
|
23
|
+
import { t as runSetupWizard } from "./setup-CAwtzquZ.js";
|
|
24
24
|
import { i as applySkipBootstrapConfig, r as applyLocalSetupWorkspaceConfig } from "./onboard-config-CN_mESs0.js";
|
|
25
25
|
//#region src/commands/onboard-interactive.ts
|
|
26
26
|
async function runInteractiveSetup(opts, runtime = defaultRuntime) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
2026-
|
|
1
|
+
2026-06-21T16:01:00.057Z
|