rovecode 0.3.2
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/LICENSE +662 -0
- package/README.md +737 -0
- package/THIRD_PARTY_NOTICES.md +268 -0
- package/bin/rovecode.ts +21 -0
- package/package.json +56 -0
- package/src/acp/server.ts +374 -0
- package/src/cli/auth-login.ts +122 -0
- package/src/cli/connect.ts +244 -0
- package/src/cli/context-cmd.ts +199 -0
- package/src/cli/dispatch.ts +82 -0
- package/src/cli/doctor.ts +362 -0
- package/src/cli/export.ts +276 -0
- package/src/cli/help.ts +293 -0
- package/src/cli/is-tui-invocation.ts +8 -0
- package/src/cli/main.ts +583 -0
- package/src/cli/market-cmd.ts +658 -0
- package/src/cli/mcp-login.ts +141 -0
- package/src/cli/mcp-market-cmd.ts +302 -0
- package/src/cli/output.ts +382 -0
- package/src/cli/repl.ts +250 -0
- package/src/cli/repomap-root.ts +14 -0
- package/src/cli/resume.ts +57 -0
- package/src/cli/run-flags.ts +43 -0
- package/src/cli/run-limits.ts +78 -0
- package/src/cli/runtime.ts +931 -0
- package/src/cli/session-arg.ts +30 -0
- package/src/cli/sessions-cmd.ts +145 -0
- package/src/cli/setup.ts +153 -0
- package/src/cli/skills-cmd.ts +194 -0
- package/src/cli/start-chat.ts +65 -0
- package/src/cli/trust-cmd.ts +52 -0
- package/src/coding/bash.ts +148 -0
- package/src/coding/checkpoints.ts +327 -0
- package/src/coding/diff.ts +138 -0
- package/src/coding/files.ts +341 -0
- package/src/coding/hashline.ts +274 -0
- package/src/coding/lsp-gate.ts +254 -0
- package/src/coding/lsp-servers.ts +147 -0
- package/src/coding/lsp.ts +283 -0
- package/src/coding/repomap-cache.ts +99 -0
- package/src/coding/repomap-files.ts +192 -0
- package/src/coding/repomap.ts +481 -0
- package/src/core/agents.ts +255 -0
- package/src/core/compaction.ts +259 -0
- package/src/core/config.ts +289 -0
- package/src/core/context-report.ts +228 -0
- package/src/core/context.ts +60 -0
- package/src/core/count-remote.ts +107 -0
- package/src/core/execpolicy-rules.ts +196 -0
- package/src/core/execpolicy.ts +385 -0
- package/src/core/executor.ts +454 -0
- package/src/core/guardrails.ts +400 -0
- package/src/core/hooks.ts +411 -0
- package/src/core/images.ts +230 -0
- package/src/core/intro.ts +266 -0
- package/src/core/loop.ts +567 -0
- package/src/core/modes.ts +372 -0
- package/src/core/orchestrator.ts +245 -0
- package/src/core/proc-group.ts +48 -0
- package/src/core/project-trust.ts +98 -0
- package/src/core/reflection.ts +165 -0
- package/src/core/sandbox-config.ts +186 -0
- package/src/core/session-id.ts +24 -0
- package/src/core/session-images.ts +73 -0
- package/src/core/session-ops.ts +183 -0
- package/src/core/session-text.ts +29 -0
- package/src/core/session.ts +469 -0
- package/src/core/settings.ts +170 -0
- package/src/core/tasks.ts +646 -0
- package/src/core/token-scale.ts +108 -0
- package/src/core/tools.ts +309 -0
- package/src/core/trust.ts +104 -0
- package/src/core/types.ts +330 -0
- package/src/core/update-check.ts +171 -0
- package/src/core/usage.ts +204 -0
- package/src/core/validate.ts +121 -0
- package/src/core/verify-gate.ts +159 -0
- package/src/core/verify.ts +236 -0
- package/src/core/voice.ts +158 -0
- package/src/core/win-job.ts +183 -0
- package/src/core/workspace.ts +184 -0
- package/src/design/audit.ts +797 -0
- package/src/design/direction.ts +190 -0
- package/src/design/rules.ts +157 -0
- package/src/eval/bench.ts +150 -0
- package/src/eval/gauntlet-runner.ts +215 -0
- package/src/eval/gauntlet-support.ts +84 -0
- package/src/eval/gauntlet-wave3.ts +269 -0
- package/src/eval/gauntlet-wave4.ts +217 -0
- package/src/eval/gauntlet.ts +253 -0
- package/src/index.ts +17 -0
- package/src/lanes/agy.ts +95 -0
- package/src/lanes/approval.ts +24 -0
- package/src/lanes/claude.ts +129 -0
- package/src/lanes/codex.ts +127 -0
- package/src/lanes/events.ts +130 -0
- package/src/lanes/job.ts +142 -0
- package/src/lanes/opencode.ts +122 -0
- package/src/lanes/process.ts +184 -0
- package/src/lanes/progress.ts +183 -0
- package/src/lanes/registry.ts +178 -0
- package/src/lanes/runner.ts +124 -0
- package/src/lanes/types.ts +112 -0
- package/src/market/catalogs/mcp-docs.json +111 -0
- package/src/market/catalogs/plugins.json +111 -0
- package/src/market/catalogs/skills.json +478 -0
- package/src/market/clone.ts +72 -0
- package/src/market/context-cost.ts +121 -0
- package/src/market/digest.ts +106 -0
- package/src/market/index.ts +22 -0
- package/src/market/install.ts +578 -0
- package/src/market/manifest.ts +187 -0
- package/src/market/prereq.ts +145 -0
- package/src/market/registry.ts +363 -0
- package/src/market/resolve.ts +111 -0
- package/src/market/types.ts +236 -0
- package/src/market/validate.ts +227 -0
- package/src/mcp/client.ts +449 -0
- package/src/mcp/config.ts +252 -0
- package/src/mcp/local-package.ts +211 -0
- package/src/mcp/market-catalog.ts +84 -0
- package/src/mcp/market-install.ts +289 -0
- package/src/mcp/market.ts +362 -0
- package/src/mcp/oauth.ts +251 -0
- package/src/mcp/prompts-resources.ts +249 -0
- package/src/mcp/shared.ts +149 -0
- package/src/mcp/status.ts +67 -0
- package/src/mcp/tools.ts +275 -0
- package/src/mcp/transport.ts +122 -0
- package/src/mcp/trust.ts +25 -0
- package/src/memory/blocks.ts +278 -0
- package/src/memory/recall.ts +355 -0
- package/src/memory/scope.ts +182 -0
- package/src/memory/store.ts +105 -0
- package/src/memory/tools.ts +99 -0
- package/src/plugins/cli.ts +119 -0
- package/src/plugins/discover.ts +108 -0
- package/src/plugins/index.ts +50 -0
- package/src/plugins/install.ts +184 -0
- package/src/plugins/load.ts +124 -0
- package/src/plugins/manifest.ts +92 -0
- package/src/plugins/state.ts +83 -0
- package/src/providers/auth.ts +408 -0
- package/src/providers/cache.ts +223 -0
- package/src/providers/catalog-local.ts +160 -0
- package/src/providers/catalog.ts +421 -0
- package/src/providers/middleware-context.ts +86 -0
- package/src/providers/middleware.ts +373 -0
- package/src/providers/model-list.ts +23 -0
- package/src/providers/models-index.json +1 -0
- package/src/providers/oauth/common.ts +105 -0
- package/src/providers/oauth/device-code.ts +107 -0
- package/src/providers/oauth/github-copilot.ts +146 -0
- package/src/providers/oauth/loopback.ts +158 -0
- package/src/providers/oauth/openai.ts +163 -0
- package/src/providers/oauth/openrouter.ts +89 -0
- package/src/providers/oauth/pkce.ts +45 -0
- package/src/providers/oauth/registry.ts +39 -0
- package/src/providers/oauth/seam.ts +89 -0
- package/src/providers/profile-glm53.ts +111 -0
- package/src/providers/profile-sonnet5-persona.ts +65 -0
- package/src/providers/profile-sonnet5-voice.ts +23 -0
- package/src/providers/profiles.ts +156 -0
- package/src/providers/provider-config.ts +311 -0
- package/src/providers/registry.ts +333 -0
- package/src/providers/responses.ts +209 -0
- package/src/providers/retry.ts +234 -0
- package/src/providers/router.ts +294 -0
- package/src/providers/sse.ts +26 -0
- package/src/providers/stream-errors.ts +117 -0
- package/src/providers/stream.ts +566 -0
- package/src/providers/thinking.ts +189 -0
- package/src/providers/wire-messages.ts +129 -0
- package/src/providers/wire-responses.ts +79 -0
- package/src/providers/wire-select.ts +53 -0
- package/src/server/http.ts +291 -0
- package/src/server/openapi.ts +246 -0
- package/src/sextant/card-hits.ts +102 -0
- package/src/sextant/card-keys.ts +55 -0
- package/src/sextant/context-source.ts +157 -0
- package/src/sextant/crew-cards.ts +350 -0
- package/src/sextant/draw-agents.ts +273 -0
- package/src/sextant/draw-code.ts +388 -0
- package/src/sextant/draw-context.ts +222 -0
- package/src/sextant/draw-frame.ts +164 -0
- package/src/sextant/draw-market.ts +573 -0
- package/src/sextant/draw-messages.ts +386 -0
- package/src/sextant/draw-pet.ts +230 -0
- package/src/sextant/draw-plan.ts +187 -0
- package/src/sextant/draw-tabs.ts +85 -0
- package/src/sextant/draw-util.ts +65 -0
- package/src/sextant/draw-wizard.ts +378 -0
- package/src/sextant/engine.ts +230 -0
- package/src/sextant/frame-hits.ts +25 -0
- package/src/sextant/frame.ts +101 -0
- package/src/sextant/git-status.ts +197 -0
- package/src/sextant/grid.ts +59 -0
- package/src/sextant/input.ts +119 -0
- package/src/sextant/keys.ts +521 -0
- package/src/sextant/layout.ts +86 -0
- package/src/sextant/local-commands.ts +169 -0
- package/src/sextant/market-source.ts +287 -0
- package/src/sextant/mentions.ts +200 -0
- package/src/sextant/message-hits.ts +26 -0
- package/src/sextant/model.ts +387 -0
- package/src/sextant/overlays.ts +456 -0
- package/src/sextant/panel-hits.ts +38 -0
- package/src/sextant/pet.ts +399 -0
- package/src/sextant/screen.ts +324 -0
- package/src/sextant/scroll-hits.ts +66 -0
- package/src/sextant/scrollbar.ts +82 -0
- package/src/sextant/sextant-bridge.ts +174 -0
- package/src/sextant/sextant-cards.ts +142 -0
- package/src/sextant/sextant-diff-base.ts +63 -0
- package/src/sextant/sextant-files.ts +154 -0
- package/src/sextant/sextant-frame-loop.ts +335 -0
- package/src/sextant/sextant-renderer.ts +574 -0
- package/src/sextant/sextant-repo.ts +140 -0
- package/src/sextant/theme.ts +66 -0
- package/src/sextant/tool-rows.ts +189 -0
- package/src/sextant/types.ts +493 -0
- package/src/skills/index.ts +387 -0
- package/src/skills/pack.ts +220 -0
- package/src/skills/spec.ts +162 -0
- package/src/skills/tools.ts +69 -0
- package/src/skills/versioned.ts +227 -0
- package/src/telemetry/otel-export.ts +122 -0
- package/src/telemetry/otel-lanes.ts +89 -0
- package/src/telemetry/otel-logs.ts +131 -0
- package/src/telemetry/otel-metrics.ts +136 -0
- package/src/telemetry/otel.ts +397 -0
- package/src/telemetry/otlp.ts +76 -0
- package/src/tools/ask-user.ts +156 -0
- package/src/tools/bash-bg.ts +94 -0
- package/src/tools/bash-jobs.ts +237 -0
- package/src/tools/design.ts +151 -0
- package/src/tools/evalcell.ts +338 -0
- package/src/tools/html-text.ts +139 -0
- package/src/tools/provider.ts +149 -0
- package/src/tools/task.ts +250 -0
- package/src/tools/todo.ts +320 -0
- package/src/tools/webfetch.ts +332 -0
- package/src/tools/websearch.ts +359 -0
- package/src/tui/agents-cmd.ts +41 -0
- package/src/tui/app.ts +749 -0
- package/src/tui/attach.ts +127 -0
- package/src/tui/boot-notes.ts +41 -0
- package/src/tui/builtin-prompts.ts +59 -0
- package/src/tui/checkpoints-cmd.ts +70 -0
- package/src/tui/clipboard-image.ts +81 -0
- package/src/tui/clipboard.ts +78 -0
- package/src/tui/commands.ts +283 -0
- package/src/tui/config-view.ts +53 -0
- package/src/tui/context-cmds.ts +282 -0
- package/src/tui/cost.ts +108 -0
- package/src/tui/crash-guard.ts +173 -0
- package/src/tui/focus-terminal.ts +34 -0
- package/src/tui/git-cmds.ts +273 -0
- package/src/tui/git-plain.ts +58 -0
- package/src/tui/info-cmd.ts +150 -0
- package/src/tui/input-plain.ts +76 -0
- package/src/tui/mcp-cmd.ts +128 -0
- package/src/tui/memory-note.ts +77 -0
- package/src/tui/modes-cmd.ts +45 -0
- package/src/tui/notify-seq.ts +100 -0
- package/src/tui/notify.ts +318 -0
- package/src/tui/overlays.ts +97 -0
- package/src/tui/pi-renderer.ts +428 -0
- package/src/tui/providers-cmd.ts +377 -0
- package/src/tui/reasoning-view.ts +56 -0
- package/src/tui/renderer.ts +128 -0
- package/src/tui/replay-marker.ts +29 -0
- package/src/tui/session-cmd.ts +148 -0
- package/src/tui/session-manage.ts +95 -0
- package/src/tui/sextant-attach.ts +102 -0
- package/src/tui/sextant-io.ts +202 -0
- package/src/tui/sextant-smoke.ts +110 -0
- package/src/tui/shell-cmd.ts +158 -0
- package/src/tui/smoke.ts +72 -0
- package/src/tui/staged-terminal.ts +50 -0
- package/src/tui/startup.ts +12 -0
- package/src/tui/theme.ts +59 -0
- package/src/tui/todo-label.ts +7 -0
- package/src/tui/trust-card.ts +107 -0
- package/src/tui/tui-commands.ts +87 -0
- package/tsconfig.json +30 -0
- package/vendor/pi-tui/LICENSE +21 -0
- package/vendor/pi-tui/PATCHES.md +12 -0
- package/vendor/pi-tui/PROVENANCE.md +12 -0
- package/vendor/pi-tui/README.upstream.md +854 -0
- package/vendor/pi-tui/native/win32/prebuilds/win32-arm64/win32-console-mode.node +0 -0
- package/vendor/pi-tui/native/win32/prebuilds/win32-x64/win32-console-mode.node +0 -0
- package/vendor/pi-tui/src/alt-screen-search.ts +158 -0
- package/vendor/pi-tui/src/autocomplete.ts +827 -0
- package/vendor/pi-tui/src/components/alt-screen-flash.ts +52 -0
- package/vendor/pi-tui/src/components/box.ts +138 -0
- package/vendor/pi-tui/src/components/cancellable-loader.ts +41 -0
- package/vendor/pi-tui/src/components/editor.ts +2364 -0
- package/vendor/pi-tui/src/components/h-stack.ts +45 -0
- package/vendor/pi-tui/src/components/image.ts +128 -0
- package/vendor/pi-tui/src/components/input.ts +448 -0
- package/vendor/pi-tui/src/components/loader.ts +93 -0
- package/vendor/pi-tui/src/components/markdown.ts +1016 -0
- package/vendor/pi-tui/src/components/scroll-view.ts +217 -0
- package/vendor/pi-tui/src/components/select-list.ts +230 -0
- package/vendor/pi-tui/src/components/settings-list.ts +277 -0
- package/vendor/pi-tui/src/components/spacer.ts +29 -0
- package/vendor/pi-tui/src/components/stack.ts +155 -0
- package/vendor/pi-tui/src/components/text.ts +108 -0
- package/vendor/pi-tui/src/components/truncated-text.ts +66 -0
- package/vendor/pi-tui/src/components/v-stack.ts +34 -0
- package/vendor/pi-tui/src/editor-component.ts +75 -0
- package/vendor/pi-tui/src/fuzzy.ts +138 -0
- package/vendor/pi-tui/src/index.ts +149 -0
- package/vendor/pi-tui/src/keybindings.ts +321 -0
- package/vendor/pi-tui/src/keys.ts +1402 -0
- package/vendor/pi-tui/src/kill-ring.ts +47 -0
- package/vendor/pi-tui/src/latex.ts +1381 -0
- package/vendor/pi-tui/src/layout-node.ts +52 -0
- package/vendor/pi-tui/src/layout.ts +411 -0
- package/vendor/pi-tui/src/native-modifiers.ts +60 -0
- package/vendor/pi-tui/src/native-module-path.ts +32 -0
- package/vendor/pi-tui/src/stdin-buffer.ts +445 -0
- package/vendor/pi-tui/src/terminal-colors.ts +74 -0
- package/vendor/pi-tui/src/terminal-image.ts +701 -0
- package/vendor/pi-tui/src/terminal.ts +554 -0
- package/vendor/pi-tui/src/tui-alt-screen.ts +1379 -0
- package/vendor/pi-tui/src/tui-main-screen.ts +655 -0
- package/vendor/pi-tui/src/tui.ts +1264 -0
- package/vendor/pi-tui/src/undo-stack.ts +29 -0
- package/vendor/pi-tui/src/utils.ts +1327 -0
- package/vendor/pi-tui/src/word-navigation.ts +118 -0
- package/vendor/pi-tui/test/test-themes.ts +39 -0
- package/vendor/pi-tui/test/virtual-terminal.ts +219 -0
package/src/cli/help.ts
ADDED
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
/** `rovecode help [topic]` — short and grouped by default; `env`, `advanced` and `all` hold the full
|
|
2
|
+
* reference. Pure text so it is unit-testable (main.ts dispatches on import). Wording follows
|
|
3
|
+
* core/voice.ts: plain sentences, the two permission modes by their screen names. */
|
|
4
|
+
|
|
5
|
+
import { MODE_ASK, MODE_AUTO } from "../core/voice.ts";
|
|
6
|
+
|
|
7
|
+
export const HELP_TOPICS = ["", "env", "advanced", "all"] as const;
|
|
8
|
+
export type HelpTopic = (typeof HELP_TOPICS)[number];
|
|
9
|
+
|
|
10
|
+
const SHORT = `rovecode — a coding agent in your terminal
|
|
11
|
+
|
|
12
|
+
start here
|
|
13
|
+
rovecode open the cockpit (--classic: the plain chat · --plain: a bare REPL)
|
|
14
|
+
rovecode "fix the failing test" one task, then exit
|
|
15
|
+
rovecode connect connect a model: pick a provider, paste the key (hidden), one test call
|
|
16
|
+
rovecode connect <id> [<url>] the same in one line — rovecode connect anthropic · rovecode connect me https://host/v1
|
|
17
|
+
|
|
18
|
+
everyday
|
|
19
|
+
rovecode run "<prompt>" --yolo one task in ${MODE_AUTO} mode
|
|
20
|
+
rovecode run "<prompt>" --output json machine-readable result (ndjson: one line per event)
|
|
21
|
+
rovecode model pick the default from a menu · model use <provider/model> sets it (--project pins it here)
|
|
22
|
+
rovecode market search <q> MCP servers, skills and plugins on one shelf; install any with market install <id>
|
|
23
|
+
--effort auto|off|low|medium|high how hard I think before answering (/effort in the TUI, ROVECODE_EFFORT=…)
|
|
24
|
+
rovecode provider list|add|remove|test endpoints in ~/.rovecode/providers.json — live, no restart
|
|
25
|
+
rovecode auth set <id> · auth login <id> store an API key (hidden) · sign in (github-copilot, openrouter, openai) · list · remove
|
|
26
|
+
rovecode doctor · --resume <id> what is wrong with my setup, in one pass · reopen a session (export <id> → markdown)
|
|
27
|
+
|
|
28
|
+
safety
|
|
29
|
+
${MODE_ASK} (default) I read freely; I ask before every write, shell command and subagent
|
|
30
|
+
accept edits (--accept-edits) I write inside this folder without asking; shell, subagents,
|
|
31
|
+
network and writes OUTSIDE it still ask (/accept-edits, ROVECODE_ACCEPT_EDITS=1)
|
|
32
|
+
auto (--yolo, ROVECODE_YOLO=1) I never ask — deny rules and plan mode still hold
|
|
33
|
+
/yolo --save · /accept-edits --save make the level stick (add --project to pin it to this repo);
|
|
34
|
+
without --save a toggle lasts one session. ROVECODE_PERMISSION=ask|accept-edits|auto
|
|
35
|
+
plan mode (/plan in the TUI) read-only: I can look and plan, not change anything
|
|
36
|
+
|
|
37
|
+
more
|
|
38
|
+
rovecode help env every ROVECODE_* setting (incl. the bash sandbox rungs)
|
|
39
|
+
rovecode help advanced market · context · mcp · plugins · acp · serve · gauntlet · bench · trace · tools
|
|
40
|
+
rovecode help all everything on one page`;
|
|
41
|
+
|
|
42
|
+
const ADVANCED = `advanced — the full command reference
|
|
43
|
+
rovecode interactive TUI chat — the full cockpit (files · code · messages · plan · usage · pet)
|
|
44
|
+
on a colour TTY of at least 100x30 (truecolor, or 256 colours through the
|
|
45
|
+
quantizer), else the classic chat;
|
|
46
|
+
--classic forces the classic chat · --pet <name> names the pet · --plain = readline REPL
|
|
47
|
+
--no-intro (or ROVECODE_INTRO=0) skips the ~0.9s opening animation
|
|
48
|
+
rovecode chat · rovecode repl the same as bare rovecode (repl still needs --plain for the readline REPL)
|
|
49
|
+
rovecode --help | -h this help (only with no command in front of it) · rovecode --version prints the
|
|
50
|
+
version to stdout and the update check’s answer to stderr
|
|
51
|
+
rovecode --resume <id> open the TUI resuming a session (full id or unique prefix); an unknown, ambiguous or
|
|
52
|
+
malformed id is refused with the reason (exit 2) — never a new session under that name
|
|
53
|
+
rovecode --continue reopen the newest session that holds something (also: --resume with no id);
|
|
54
|
+
nothing to continue from → a fresh session, and the startup card says so
|
|
55
|
+
rovecode "prompt" one-shot task (same as run; a lone path-shaped word — ./x, x.ts, an existing
|
|
56
|
+
name — is confirmed on a TTY and refused with exit 2 off one: use "rovecode run" to send it)
|
|
57
|
+
rovecode setup connect a model step by step (TTY only; piped stdin prints the recipe and exits 2)
|
|
58
|
+
TUI: /agents list the subagent definitions loaded from .rovecode/agents/*.md (the bare /agents
|
|
59
|
+
is the crew board) · /config [all] the settings this session loaded
|
|
60
|
+
rovecode connect the same wizard when given no arguments
|
|
61
|
+
rovecode connect <id> [<baseUrl>] [--model <id>] [--key | --key-stdin | --key-env NAME | --no-key]
|
|
62
|
+
[--protocol openai|anthropic] [--project] [--no-test]
|
|
63
|
+
one line: register the endpoint, store the key, pick the model, one tiny real
|
|
64
|
+
call, persist the default. A key is never a flag value (shell history, ps):
|
|
65
|
+
--key prompts hidden, --key-stdin reads one piped line (CI), --key-env names
|
|
66
|
+
an env var, --no-key marks a local server.
|
|
67
|
+
exit 0 connected · 1 the test call failed (config still written) · 2 usage
|
|
68
|
+
rovecode smoke-tui render check: full pipeline into an 80x24 terminal emulator (dev-only)
|
|
69
|
+
rovecode smoke-tui --sextant render check: the full cockpit at 160x44 through the pipeline (no emulator needed)
|
|
70
|
+
rovecode run "<prompt>" run an agent task (--yolo = ${MODE_AUTO}; with no provider configured this is a
|
|
71
|
+
startup error, exit 2 — ROVECODE_MOCK=1 asks for the scripted mock on purpose)
|
|
72
|
+
"/name args" expands a custom command (.rovecode/commands/<name>.md, else ~/.rovecode/commands)
|
|
73
|
+
the way the TUI does; an unknown /name is sent verbatim; model:/mode: frontmatter is
|
|
74
|
+
TUI-only and not applied headlessly
|
|
75
|
+
piped stdin is appended to the prompt as a fenced block — git diff | rovecode run "review this"
|
|
76
|
+
(never read from a terminal; --no-stdin ignores it; an open pipe that sends nothing
|
|
77
|
+
for 3 s is skipped with a note; capped at 1 MB)
|
|
78
|
+
--max-turns N · --max-seconds S|off ceilings on one run; a hit ends it cleanly with status
|
|
79
|
+
"budget" (exit 1) and the work so far, instead of an external kill. Headless runs
|
|
80
|
+
default to a 20-minute wall clock; --max-seconds off removes it
|
|
81
|
+
--max-cost D|off a spend ceiling in dollars for one run, priced from each turn's usage as it lands
|
|
82
|
+
(the catalog's rates for the model that served it); the same clean "budget" end.
|
|
83
|
+
A turn the catalog cannot price adds nothing and is counted in the summary
|
|
84
|
+
--output <text|json|ndjson> text (default): progress + the final answer on stdout
|
|
85
|
+
json: exactly ONE result object on stdout {status, summary, sessionId,
|
|
86
|
+
model:{provider,model}, origin (served model|null), usage:{input,output,cacheRead,
|
|
87
|
+
cacheWrite}, costUsd (null when unpriced), toolCalls:[{tool,ok,ms?}], durationMs, exitCode}
|
|
88
|
+
ndjson: one JSON line per RunEvent, then a final {type:"result"} line
|
|
89
|
+
json/ndjson: stdout carries only JSON, progress goes to stderr
|
|
90
|
+
exit codes: 0 done · 1 error/budget · 2 usage/startup error · 130 aborted (Ctrl-C)
|
|
91
|
+
exit 2 = usage/startup error (bad --output value, sandbox misconfig or unavailable rung):
|
|
92
|
+
one stderr line, nothing on stdout; --output=<mode> is accepted as well
|
|
93
|
+
rovecode bench run cross-harness micro-benchmarks (edits, sessions)
|
|
94
|
+
rovecode gauntlet run the adversarial evaluation suite (offline, scripted model)
|
|
95
|
+
rovecode gauntlet --live the gauntlet's tasks minus loop-guard (9) against the configured REAL model through
|
|
96
|
+
the real prompt — --model <provider/model> and --effort pick; compare pass/calls/tokens
|
|
97
|
+
rovecode tools list registered tools
|
|
98
|
+
rovecode plugin list plugins in ~/.rovecode/plugins and .rovecode/plugins with status (active · disabled · untrusted · broken)
|
|
99
|
+
rovecode plugin add <folder|git-url> [--project] [--force] install a plugin folder (tools, hooks, commands, skills, MCP in one manifest)
|
|
100
|
+
rovecode plugin trust <name> approve a PROJECT plugin's current files on this machine (show <name> lists them first)
|
|
101
|
+
rovecode plugin remove|enable|disable|untrust|show <name> (docs/plugins.md; restart to load — read once per process, like hooks)
|
|
102
|
+
rovecode mcp search [query] MCP servers to install: the curated shelf, then the official registry (cached a day)
|
|
103
|
+
rovecode mcp info <name> publisher, version, the exact command or URL, the keys it asks for
|
|
104
|
+
rovecode mcp add <name> [--project] [--pick N] [--as <name>] [--yes] [--force] show the plan, ask for keys
|
|
105
|
+
masked, write ~/.rovecode/mcp.json (or .rovecode/mcp.json); --as renames it, --force replaces an entry
|
|
106
|
+
rovecode mcp remove <name> [--project] · rovecode mcp list (docs/mcp-market.md; /mcp does the same inside the TUI)
|
|
107
|
+
rovecode mcp show this repo's .rovecode/mcp.json + .mcp.json: exact commands/URLs, env names, trusted or not
|
|
108
|
+
rovecode mcp trust [--yes] · rovecode mcp untrust approve those files as they are now, or withdraw that
|
|
109
|
+
approval — until trusted nothing in them loads; your own add --project is trusted as you approve it
|
|
110
|
+
rovecode trust show every project file that could make rovecode RUN or IMPORT something, with what it would do:
|
|
111
|
+
.rovecode/settings.json (verify, lsp, notify_command), hooks.ts, sandbox.json, mcp.json, .mcp.json
|
|
112
|
+
rovecode trust [--yes] · rovecode trust untrust approve them as they are now (one store with mcp trust: path → sha256,
|
|
113
|
+
an edit asks again) — until trusted a cloned repo's files contribute NOTHING; the user files never ask
|
|
114
|
+
rovecode skills list [--json] every installed skill, its scope and path — and every SKILL.md the loader
|
|
115
|
+
refused or warned about, which is the only place those warnings are visible
|
|
116
|
+
rovecode skills validate <dir> the agentskills.io spec check, strictly: findings on stderr, exit 1, nothing written
|
|
117
|
+
rovecode skills pack <dir> [--out <file>] [--force] a <name>.tar.gz of one skill (a symlink inside refuses the pack)
|
|
118
|
+
rovecode skills install <dir|file.tar.gz|http(s)-url> [--user] [--force] staged, validated, then renamed into
|
|
119
|
+
place; a URL goes through the same SSRF guard as web_fetch, on the URL AND every redirect hop
|
|
120
|
+
rovecode market search [query] [--kind mcp|skill|plugin] one shelf over MCP servers, skills and plugins
|
|
121
|
+
rovecode market info <id> publisher, licence, version, exactly what an install would write
|
|
122
|
+
rovecode market docs <id> the item's own documentation, as the catalog carries it — no network
|
|
123
|
+
rovecode market install <id|kind:id|git-url|npm-pkg> [--project] [--ref <branch|tag|commit>] [--yes]
|
|
124
|
+
plan first, write only after you agree
|
|
125
|
+
rovecode market list|remove|update|sources what is installed, what is behind, where each shelf came from
|
|
126
|
+
rovecode market verify [id] re-hash what is installed and say what has changed since
|
|
127
|
+
rovecode market validate <path|url> [--kind skill|plugin] check a catalog before anyone trusts it
|
|
128
|
+
(docs/market.md; /market does the same inside the TUI; every subcommand takes --json)
|
|
129
|
+
rovecode doctor [--json] [--no-connect] one pass over the setup: home (and a legacy ~/.cumulus), the default
|
|
130
|
+
provider and where its key comes from (names, never values), the permission level and
|
|
131
|
+
which rung set it, git/node/npm/npx/uvx on PATH with what each absence costs HERE,
|
|
132
|
+
every configured MCP server (loads? skipped for a placeholder or an unset variable?
|
|
133
|
+
untrusted file? connects?), the shadow checkpoints' size — and a list of what it did
|
|
134
|
+
NOT check. exit 0 nothing broken · 1 something to fix · a missing provider is a note
|
|
135
|
+
rovecode context [session] [--json] what fills the window, item by item, and how far our estimate is from
|
|
136
|
+
the provider's own count of the same prompt (cache reads included — they are the prompt too)
|
|
137
|
+
(--exact asks Anthropic to count it for real; --no-runtime skips the system prompt and tool schemas)
|
|
138
|
+
rovecode auth set <provider> [--key <name>] store an API key (prompts on stdin; ~/.rovecode/credentials.json)
|
|
139
|
+
rovecode auth login <provider> OAuth sign-in, stored next to the keys: github-copilot (GitHub device code — open the URL,
|
|
140
|
+
type the code) · openrouter (PKCE in your browser, back to a loopback port on this machine) ·
|
|
141
|
+
openai (ChatGPT device code; the token is sent over the Codex Responses wire only — see
|
|
142
|
+
ROVECODE_OPENAI_WIRE). anthropic is refused (the Claude subscription login is an owner
|
|
143
|
+
decision, not a port). Ctrl-C cancels (exit 130)
|
|
144
|
+
rovecode auth list stored providers: kind (api | oauth), key name, redacted value, and for oauth the expiry
|
|
145
|
+
rovecode auth remove <provider> delete a stored credential (api or oauth)
|
|
146
|
+
rovecode provider list [--all] providers with a key + every providers.json entry, and the default provider/model
|
|
147
|
+
rovecode provider add <id> <baseUrl> [--protocol openai|anthropic] [--key-env NAME] [--model <id>] [--no-key]
|
|
148
|
+
[--project | --user | --scope user|project] [--key]
|
|
149
|
+
register any OpenAI-compatible or Anthropic endpoint in ~/.rovecode/providers.json
|
|
150
|
+
(--project: ./.rovecode/providers.json); --key prompts for the secret (never echoed);
|
|
151
|
+
running TUIs/servers pick the change up live — no restart
|
|
152
|
+
rovecode provider remove <id> delete a providers.json entry (built-ins: rovecode auth remove <id> drops the key)
|
|
153
|
+
rovecode provider test <id> [model] one tiny real call — proves url + key + model together
|
|
154
|
+
rovecode model list [provider] model ids (providers.json "models" or the endpoint's /models); * = current default
|
|
155
|
+
rovecode models [provider] alias for model list
|
|
156
|
+
rovecode model no arguments on a terminal: every configured provider's models in one
|
|
157
|
+
numbered menu, the current one first; a pipe gets the usage line instead
|
|
158
|
+
rovecode model use <provider/model> [--project] persist the default (in the TUI: /model <provider/model> --save)
|
|
159
|
+
rovecode model show [provider/model] the model, its protocol, and the exact thinking field each /effort
|
|
160
|
+
level puts on the wire (docs/thinking.md)
|
|
161
|
+
rovecode sessions [--json] this folder's sessions, newest first: id · created · turns · first prompt (or the title);
|
|
162
|
+
reads only the sessions that hold something, and a footer counts the empty session
|
|
163
|
+
directories (a meta.json, nothing ever written) so they stay visible without being rows
|
|
164
|
+
rovecode sessions rename <id|prefix> <title…> name a session (one line, ≤ 120 chars; shown in place of the first prompt)
|
|
165
|
+
rovecode sessions delete <id|prefix> [--yes] remove the session AND its checkpoints shadow dir; asks y/N on a
|
|
166
|
+
terminal, needs --yes off one; prints every path it removed
|
|
167
|
+
rovecode sessions fork <id|prefix> [--json] copy a session (entries, meta, attachments; up to 256 MB of attachments)
|
|
168
|
+
into a new id titled "… (fork #N)" — the source is untouched
|
|
169
|
+
rovecode sessions search <terms…> [--json] title hits first, then the recall index (all terms, exact before partial)
|
|
170
|
+
every id here is exact or a unique prefix: ambiguous or unknown → exit 2 naming the
|
|
171
|
+
candidates, nothing created or removed
|
|
172
|
+
rovecode trace <id|prefix> the session's messages, one line each (role · first 120 chars · tool-call count)
|
|
173
|
+
rovecode export <session> write a session as markdown (--json: raw JSONL copy; --out <path>; --force)
|
|
174
|
+
rovecode eval alias for gauntlet
|
|
175
|
+
rovecode acp Agent Client Protocol v1 endpoint over stdio (Zed/JetBrains)
|
|
176
|
+
rovecode serve headless HTTP server (ROVECODE_PORT, default 4100; loopback-only)`;
|
|
177
|
+
|
|
178
|
+
const ENV = `env — every ROVECODE_* setting
|
|
179
|
+
ROVECODE_BASE_URL any OpenAI-compatible or Anthropic endpoint
|
|
180
|
+
ROVECODE_API_KEY API key (falls back to OPENAI_API_KEY)
|
|
181
|
+
ROVECODE_MODEL model id (e.g. zai-org/glm-5.3)
|
|
182
|
+
ROVECODE_MODEL_<ROLE> role fallback chain, comma-separated provider/model list; on 429/5xx
|
|
183
|
+
the next candidate serves. Roles: DEFAULT SMOL PLAN COMMIT TASK
|
|
184
|
+
(e.g. ROVECODE_MODEL_DEFAULT=kaesra/zai-org/glm-5.3-flash,openai/gpt-4o-mini)
|
|
185
|
+
ROVECODE_STREAM streaming is on by default (both protocols); off|json|0|false|none use the one-shot JSON
|
|
186
|
+
adapters; sse forces the raw SSE adapter, without the tool-call middleware, for one-shot runs
|
|
187
|
+
ROVECODE_OPENAI_WIRE responses | chat — which OpenAI wire a request takes. Unset: a stored ChatGPT login
|
|
188
|
+
(auth login openai) always takes /responses; provider openai takes /responses for models the
|
|
189
|
+
catalog does not mark non-reasoning (gpt-5, o3, ids it does not know) and /chat/completions
|
|
190
|
+
for the gpt-4o class; every other provider stays on /chat/completions. Not done yet on
|
|
191
|
+
/responses: the model's own reasoning items are NOT sent back to it on the next turn (each
|
|
192
|
+
turn reasons afresh; reasoning text still streams live) — that needs a reasoning part in
|
|
193
|
+
the message store, a change across the session store, export and both other wires
|
|
194
|
+
ROVECODE_EFFORT auto|off|low|medium|high thinking before the answer (default auto: the provider's
|
|
195
|
+
own default stands). Anthropic gets output_config.effort or a thinking budget,
|
|
196
|
+
whichever the model takes (learned from its own 400, then remembered); OpenAI gets
|
|
197
|
+
reasoning_effort. Thinking is billed as output and delays the first word.
|
|
198
|
+
ROVECODE_PROFILE model profile: off, or an id (glm-5.3 | glm-5.3-plain) whose PROMPT section is forced onto
|
|
199
|
+
every model (request fields always follow the model id). Unset = by model id: GLM-5.3 / -Flash
|
|
200
|
+
get the Claude Sonnet 5 persona + the working agreement appended to the system prompt
|
|
201
|
+
(glm-5.3-plain = agreement only) plus, on OpenAI-compatible providers, Z.ai's
|
|
202
|
+
request fields (thinking always on, reasoning_effort low|high|max — off leaves the endpoint's
|
|
203
|
+
max, medium rounds up to high, high means max — and tool_stream when streaming). The text
|
|
204
|
+
comes from .rovecode/profiles/<id>.md (project) or ~/.rovecode/profiles/<id>.md when present.
|
|
205
|
+
ROVECODE_DESIGN off drops the interface-design section from the system prompt (for runs with no UI in
|
|
206
|
+
them). Otherwise every run carries it: propose three distinct directions before the first
|
|
207
|
+
UI in a project, let the human choose, record it with design_direction, then build to it.
|
|
208
|
+
The section prescribes NO palette, typeface or layout -- there is no default look, on
|
|
209
|
+
purpose -- and names the patterns to climb out of (amber accents, the reflex full-viewport
|
|
210
|
+
hero, Inter/Roboto/Poppins, hairlines round everything, all-square corners, everything
|
|
211
|
+
centred, violet gradients). The choice lives in .rovecode/design.json; design_audit counts
|
|
212
|
+
those patterns in the files you touched and checks them against it.
|
|
213
|
+
ROVECODE_PERMISSION ask|accept-edits|auto — the level this run starts at. Ladder, widest first:
|
|
214
|
+
a CLI flag, then this, then <cwd>/.rovecode/settings.json, then ~/.rovecode/settings.json,
|
|
215
|
+
then "ask". Write the files with /yolo --save or /accept-edits --save [--project].
|
|
216
|
+
ROVECODE_ACCEPT_EDITS=1 start in accept-edits (writes inside the workspace do not ask)
|
|
217
|
+
ROVECODE_YOLO=1 ${MODE_AUTO}: allow all tool actions
|
|
218
|
+
ROVECODE_TUI cockpit | classic — force the TUI surface (the cockpit still needs a TTY; --classic wins)
|
|
219
|
+
ROVECODE_THEME cockpit palette: night (default) | ember | contrast (/theme switches it live)
|
|
220
|
+
ROVECODE_PET=0 hide the pet panel (rovecode); --pet <name> renames it
|
|
221
|
+
ROVECODE_NOTIFY off | auto | bell | osc9 | osc777 — how the TUI tells you a run ended or a card needs you, ONLY while
|
|
222
|
+
the terminal is unfocused (auto = an OSC 9 toast on Ghostty/iTerm2/kitty/Warp/WezTerm, else the bell;
|
|
223
|
+
settings.json "bell": false is off; a terminal that never reports focus stays silent)
|
|
224
|
+
ROVECODE_NOTIFY_WHEN unfocused (default; the terminal must report focus — Windows Terminal ≥ 1.14, Ghostty, kitty, WezTerm,
|
|
225
|
+
iTerm2, xterm, VTE) | always (every run, as before 2026-09-07)
|
|
226
|
+
ROVECODE_NOTIFY_COMMAND a desktop hook under the same gate: argv as a JSON string array (["notify-send","rovecode"]) or
|
|
227
|
+
whitespace-split words, the JSON payload appended as its last argument; never a shell. From a project
|
|
228
|
+
settings.json it applies only once that file is trusted; the user file and this variable always may
|
|
229
|
+
ROVECODE_SANDBOX executor rung for bash: direct (default) | wsl | docker; beats .rovecode/sandbox.json {"rung","dockerImage"}
|
|
230
|
+
ROVECODE_SANDBOX_IMAGE image for the docker rung (default debian:stable-slim; must contain bash)
|
|
231
|
+
ROVECODE_RETRY_MAX same-model retries after a 429/5xx/transport failure (default 3 = 4 attempts; 0 = off)
|
|
232
|
+
The wait is announced live, while it is happening, not in a summary after the run
|
|
233
|
+
ROVECODE_RETRY_BASE_MS cap of the FIRST backoff, ms (default 1000; full jitter; a Retry-After hint is a floor)
|
|
234
|
+
It doubles per attempt up to 20 s, and a server hint can raise the wait, never shorten it
|
|
235
|
+
ROVECODE_FIRST_BYTE_TIMEOUT_MS how long a provider may go without ANY response before the request
|
|
236
|
+
counts as failed and is retried (default 60000). Only the FIRST byte is on this clock:
|
|
237
|
+
once the model is talking, the body may take as long as it takes
|
|
238
|
+
ROVECODE_WEBFETCH_TIMEOUT_MS web_fetch request timeout in ms (default 30000)
|
|
239
|
+
EXA_API_KEY optional Exa key for web_search; without it the search runs keyless against the
|
|
240
|
+
same hosted endpoint. Read only where the tool is registered, never stored, and
|
|
241
|
+
stripped from every URL and error line the tool prints
|
|
242
|
+
ROVECODE_WEBFETCH_ALLOW_PRIVATE=1 let web_fetch reach loopback/private hosts (SSRF guard escape for local dev)
|
|
243
|
+
ROVECODE_COMPACTION history compaction strategy: head-summarize (default) | keep-window | provider-native
|
|
244
|
+
/compact runs the same set on demand (TUI + --plain); on this build it keeps
|
|
245
|
+
the window and notes "no summarizer wired on this surface" — a manual compaction
|
|
246
|
+
is durable (new session branch, marker persisted) even when it falls back
|
|
247
|
+
ROVECODE_TASKS_MAX concurrent background tasks (default 3; further task starts queue FIFO)
|
|
248
|
+
ROVECODE_OTEL_ENDPOINT OTLP/HTTP collector, e.g. http://host:4318 — one trace per run (run ⊃ turn ⊃ tool); unset = off
|
|
249
|
+
ROVECODE_OTEL_HEADERS extra OTLP headers as k=v,k2=v2 (e.g. authorization=Bearer …)
|
|
250
|
+
ROVECODE_REFLECTION=0 disable reflection nudges after failed edits; ROVECODE_REFLECTION_MAX caps them per run (default 2)
|
|
251
|
+
ROVECODE_PORT port for rovecode serve (default 4100; loopback-only)
|
|
252
|
+
ROVECODE_IMAGE_MAX_BYTES per-image cap in bytes for pasted and attached images (default 5 MB;
|
|
253
|
+
at most 8 images per message). Over it, the image is refused by name, not silently dropped.
|
|
254
|
+
ROVECODE_REPOMAP_TOKENS repo-map budget in tokens (default 1024); ROVECODE_NO_REPOMAP=1 drops the map entirely
|
|
255
|
+
ROVECODE_HOOK_TIMEOUT_MS per-hook-call budget in ms (default 5000); ROVECODE_NO_HOOKS=1 skips hook files
|
|
256
|
+
ROVECODE_PLUGIN_TIMEOUT_MS per-plugin import + tools() budget in ms (default 5000);
|
|
257
|
+
ROVECODE_NO_PLUGINS=1 skips plugin discovery
|
|
258
|
+
ROVECODE_NO_CHECKPOINTS=1 turn off the shadow-git checkpoints taken after mutating tools
|
|
259
|
+
ROVECODE_TOOL_MIDDLEWARE=1 force the text tool-call protocol (a prompt block + a parser) even for a model
|
|
260
|
+
the catalog says has native tool calling; ROVECODE_NO_TOOL_MIDDLEWARE=1 forces native only
|
|
261
|
+
ROVECODE_EVAL_CELL=1 register the persistent eval cell tool (a REPL that keeps state between calls)
|
|
262
|
+
ROVECODE_MAX_TURNS turn ceiling for one run, every surface (TUI included); a hit ends it with status
|
|
263
|
+
"budget" and exit 1
|
|
264
|
+
ROVECODE_MAX_SECONDS the same as a wall clock, or "off". Every surface honours it, but only
|
|
265
|
+
one-shot runs have a DEFAULT (1200 s) — the TUI has no clock unless this sets one
|
|
266
|
+
ROVECODE_MAX_COST the same in dollars for one run (--max-cost on a one-shot run), or "off"; no default
|
|
267
|
+
ROVECODE_FINISH_CHECK=0 turn off the once-per-run finish check: when the model stops right after a failed tool
|
|
268
|
+
call or an unanswered question, it is asked ONCE to finish or say what is left; the next
|
|
269
|
+
reply ends the run either way. "done · …" on run_end still names what was left
|
|
270
|
+
ROVECODE_VERIFY=1 turn ON the verify gate (off by default): a run that wrote files runs the project's configured
|
|
271
|
+
check before "done"; a failure goes back to the model once, then "done · check failed (…)" says
|
|
272
|
+
so. No check configured → nothing runs, run_end says "not verified". ROVECODE_VERIFY_TIMEOUT=<s> (120)
|
|
273
|
+
ROVECODE_LSP the language-server table behind the per-edit diagnostics gate: "ext[,ext]=argv;…" merged over
|
|
274
|
+
the built-in ".ts,.tsx,.mts,.cts,.js,.jsx,.mjs,.cjs=typescript-language-server --stdio"; "ext=off"
|
|
275
|
+
drops one, "off" drops all; overrides the settings key lsp. A server not on PATH is named at boot
|
|
276
|
+
ROVECODE_HOME credentials + user-scope providers/commands dir (default ~/.rovecode)
|
|
277
|
+
providers: built in — kaesra openai anthropic deepseek groq openrouter ollama lmstudio
|
|
278
|
+
together mistral cerebras fireworks perplexity xai moondream vllm
|
|
279
|
+
plus anything in ~/.rovecode/providers.json or ./.rovecode/providers.json (rovecode provider add)
|
|
280
|
+
key: rovecode auth set <id>, or set <ID>_API_KEY — stored creds beat env;
|
|
281
|
+
default: providers.json "default" ("provider/model"), ROVECODE_MODEL overrides the model,
|
|
282
|
+
ROVECODE_BASE_URL/ROVECODE_API_KEY always wins`;
|
|
283
|
+
|
|
284
|
+
/** the text for a topic; an unknown topic gets the short page plus a one-line note */
|
|
285
|
+
export function helpText(topic = ""): string {
|
|
286
|
+
switch (topic) {
|
|
287
|
+
case "": return SHORT;
|
|
288
|
+
case "env": return ENV;
|
|
289
|
+
case "advanced": return ADVANCED;
|
|
290
|
+
case "all": return `${SHORT}\n\n${ADVANCED}\n\n${ENV}`;
|
|
291
|
+
default: return `${SHORT}\n\nno help topic "${topic}" — topics: env · advanced · all`;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Returns true when argv will start the interactive TUI (as opposed to a lightweight subcommand).
|
|
2
|
+
* Used by bin/rovecode.ts to decide whether to route through the pre-bundled dist/cli/main.js. */
|
|
3
|
+
import { parseCli } from "./dispatch.ts";
|
|
4
|
+
|
|
5
|
+
export function isTuiInvocation(argv: string[]): boolean {
|
|
6
|
+
const { cmd, plain } = parseCli(argv);
|
|
7
|
+
return (cmd === "" || cmd === "chat" || cmd === "repl") && !plain;
|
|
8
|
+
}
|