rovecode 0.4.0-beta.3 → 0.4.0
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/README.md +57 -72
- package/THIRD_PARTY_NOTICES.md +0 -44
- package/bin/rovecode.ts +21 -0
- package/package.json +16 -38
- package/src/account/keys.ts +97 -0
- package/src/account/login.ts +158 -0
- package/src/account/provision.ts +47 -0
- package/src/account/store.ts +63 -0
- package/src/acp/server.ts +373 -0
- package/src/cli/account-cmd.ts +116 -0
- package/src/cli/connect.ts +244 -0
- package/src/cli/context-cmd.ts +199 -0
- package/src/cli/dispatch.ts +109 -0
- package/src/cli/doctor.ts +324 -0
- package/src/cli/export.ts +278 -0
- package/src/cli/help.ts +240 -0
- package/src/cli/is-tui-invocation.ts +8 -0
- package/src/cli/main.ts +599 -0
- package/src/cli/market-cmd.ts +658 -0
- package/src/cli/mcp-market-cmd.ts +299 -0
- package/src/cli/output.ts +382 -0
- package/src/cli/repl.ts +172 -0
- package/src/cli/resume.ts +32 -0
- package/src/cli/run-limits.ts +78 -0
- package/src/cli/runtime.ts +792 -0
- package/src/cli/setup.ts +187 -0
- package/src/cli/update-cmd.ts +78 -0
- package/src/cli/workflow-cmd.ts +100 -0
- package/src/coding/checkpoints.ts +270 -0
- package/src/coding/diff.ts +136 -0
- package/src/coding/files.ts +339 -0
- package/src/coding/hashline.ts +319 -0
- package/src/coding/lsp.ts +406 -0
- package/src/coding/repomap-cache.ts +99 -0
- package/src/coding/repomap-files.ts +110 -0
- package/src/coding/repomap.ts +392 -0
- package/src/core/compaction.ts +399 -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 +397 -0
- package/src/core/guardrails.ts +400 -0
- package/src/core/hooks.ts +398 -0
- package/src/core/images.ts +230 -0
- package/src/core/intro.ts +236 -0
- package/src/core/loop.ts +621 -0
- package/src/core/modes.ts +372 -0
- package/src/core/orchestrator.ts +207 -0
- package/src/core/reflection.ts +165 -0
- package/src/core/sandbox-config.ts +167 -0
- package/src/core/session-images.ts +73 -0
- package/src/core/session.ts +398 -0
- package/src/core/settings.ts +98 -0
- package/src/core/stuck-detector.ts +273 -0
- package/src/core/tasks.ts +374 -0
- package/src/core/token-scale.ts +108 -0
- package/src/core/tool-output-budget.ts +166 -0
- package/src/core/tools.ts +288 -0
- package/src/core/types.ts +330 -0
- package/src/core/update-check.ts +171 -0
- package/src/core/update.ts +158 -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 +237 -0
- package/src/core/voice.ts +158 -0
- package/src/core/win-job.ts +183 -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 +218 -0
- package/src/eval/gauntlet.ts +226 -0
- package/src/eval/grader.ts +186 -0
- package/src/eval/record.ts +202 -0
- package/src/eval/redact.ts +141 -0
- package/src/eval/replay.ts +147 -0
- package/src/eval/trajectory.ts +373 -0
- package/src/index.ts +17 -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 +431 -0
- package/src/mcp/config.ts +239 -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 +0 -0
- package/src/mcp/tools.ts +131 -0
- package/src/mcp/trust.ts +49 -0
- package/src/memory/blocks.ts +175 -0
- package/src/memory/recall.ts +355 -0
- package/src/memory/store.ts +105 -0
- package/src/memory/tools.ts +99 -0
- package/src/plugins/cli.ts +123 -0
- package/src/plugins/discover.ts +108 -0
- package/src/plugins/index.ts +50 -0
- package/src/plugins/init.ts +140 -0
- package/src/plugins/install.ts +184 -0
- package/src/plugins/load.ts +149 -0
- package/src/plugins/manifest.ts +106 -0
- package/src/plugins/state.ts +83 -0
- package/src/providers/auth.ts +293 -0
- package/src/providers/cache.ts +223 -0
- package/src/providers/catalog-local.ts +160 -0
- package/src/providers/catalog.ts +408 -0
- package/src/providers/middleware-context.ts +86 -0
- package/src/providers/middleware.ts +373 -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 +302 -0
- package/src/providers/response-validation.ts +80 -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 +569 -0
- package/src/providers/thinking.ts +189 -0
- package/src/providers/wire-messages.ts +129 -0
- package/src/sdk/client.ts +225 -0
- package/src/sdk/index.ts +3 -0
- package/src/server/dashboard.ts +144 -0
- package/src/server/http.ts +343 -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/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 +159 -0
- package/src/sextant/draw-tabs.ts +85 -0
- package/src/sextant/draw-util.ts +65 -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 +488 -0
- package/src/sextant/layout.ts +86 -0
- package/src/sextant/local-commands.ts +156 -0
- package/src/sextant/market-source.ts +287 -0
- package/src/sextant/mentions.ts +141 -0
- package/src/sextant/message-hits.ts +26 -0
- package/src/sextant/model.ts +387 -0
- package/src/sextant/overlays.ts +451 -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/selection.ts +123 -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 +314 -0
- package/src/sextant/sextant-renderer.ts +478 -0
- package/src/sextant/sextant-repo.ts +131 -0
- package/src/sextant/theme.ts +66 -0
- package/src/sextant/tool-rows.ts +189 -0
- package/src/sextant/types.ts +473 -0
- package/src/skills/index.ts +306 -0
- package/src/skills/tools.ts +69 -0
- package/src/skills/versioned.ts +227 -0
- package/src/telemetry/otel.ts +353 -0
- package/src/telemetry/otlp.ts +68 -0
- package/src/tools/ask-user.ts +156 -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 +216 -0
- package/src/tools/todo.ts +320 -0
- package/src/tools/webfetch.ts +331 -0
- package/src/tui/app.ts +608 -0
- package/src/tui/attach.ts +127 -0
- package/src/tui/checkpoints-cmd.ts +70 -0
- package/src/tui/clipboard-image.ts +81 -0
- package/src/tui/commands.ts +277 -0
- package/src/tui/cost.ts +108 -0
- package/src/tui/info-cmd.ts +144 -0
- package/src/tui/mcp-cmd.ts +128 -0
- package/src/tui/modes-cmd.ts +45 -0
- package/src/tui/overlays.ts +97 -0
- package/src/tui/pi-renderer.ts +424 -0
- package/src/tui/providers-cmd.ts +366 -0
- package/src/tui/renderer.ts +101 -0
- package/src/tui/replay-marker.ts +29 -0
- package/src/tui/session-cmd.ts +146 -0
- package/src/tui/sextant-attach.ts +68 -0
- package/src/tui/sextant-io.ts +184 -0
- package/src/tui/sextant-smoke.ts +110 -0
- package/src/tui/smoke.ts +72 -0
- package/src/tui/theme.ts +59 -0
- package/src/tui/todo-label.ts +7 -0
- package/src/workflow/engine.ts +266 -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/CHANGELOG.md +0 -527
- package/bin/rovecode.js +0 -24
- package/dist/cli/app-j6gn14w3.js +0 -2
- package/dist/cli/ask-user-cwstt8fz.js +0 -2
- package/dist/cli/auth-login-9bbp9915.js +0 -2
- package/dist/cli/auth-m8p9grty.js +0 -2
- package/dist/cli/bench-16zqdms5.js +0 -9
- package/dist/cli/catalog-1xchffa4.js +0 -2
- package/dist/cli/cli-1n1zb64f.js +0 -2
- package/dist/cli/client-2t9gjkck.js +0 -2
- package/dist/cli/commands-exafvm2b.js +0 -2
- package/dist/cli/connect-6zde0kn3.js +0 -2
- package/dist/cli/context-cmd-5t43wgqt.js +0 -2
- package/dist/cli/context-report-kt01pw8y.js +0 -2
- package/dist/cli/count-remote-ap7x3vh6.js +0 -2
- package/dist/cli/design-ne5zszyh.js +0 -2
- package/dist/cli/dispatch-2r5myxye.js +0 -2
- package/dist/cli/doctor-ws4fh4tn.js +0 -3
- package/dist/cli/executor-bdrjn634.js +0 -2
- package/dist/cli/export-1mxb9g5p.js +0 -2
- package/dist/cli/files-g104xghh.js +0 -2
- package/dist/cli/gauntlet-07xrjpj7.js +0 -2
- package/dist/cli/gauntlet-runner-xvy64436.js +0 -10
- package/dist/cli/gauntlet-wave3-jm91yt5w.js +0 -5
- package/dist/cli/gauntlet-wave4-r13py7p1.js +0 -14
- package/dist/cli/hashline-znvrat11.js +0 -2
- package/dist/cli/http-xafw6fsh.js +0 -143
- package/dist/cli/index-1sgjm25y.js +0 -2
- package/dist/cli/init-g2m0tn4m.js +0 -51
- package/dist/cli/install-avaqjjqq.js +0 -2
- package/dist/cli/loop-mmpfft01.js +0 -2
- package/dist/cli/main-0904f6ps.js +0 -5
- package/dist/cli/main-0ab9fc26.js +0 -9
- package/dist/cli/main-0jys2ccn.js +0 -3
- package/dist/cli/main-0mtcdbs7.js +0 -3
- package/dist/cli/main-0z1w2zsg.js +0 -3
- package/dist/cli/main-1dchs7xv.js +0 -18
- package/dist/cli/main-1ereejm1.js +0 -3
- package/dist/cli/main-1k1kw6b5.js +0 -3
- package/dist/cli/main-27y4sm2k.js +0 -38
- package/dist/cli/main-2wwjex5j.js +0 -58
- package/dist/cli/main-2yeveeve.js +0 -6
- package/dist/cli/main-2yfck9b5.js +0 -3
- package/dist/cli/main-2zmzgkwh.js +0 -3
- package/dist/cli/main-351pz3z7.js +0 -7
- package/dist/cli/main-3gjqfh7a.js +0 -6
- package/dist/cli/main-3nf3kgve.js +0 -3
- package/dist/cli/main-3pjrb2hd.js +0 -3
- package/dist/cli/main-3rxcvgna.js +0 -19
- package/dist/cli/main-4b3jgy66.js +0 -19
- package/dist/cli/main-4wndhjdc.js +0 -7
- package/dist/cli/main-4xcmvxnk.js +0 -3
- package/dist/cli/main-5tbz0wbz.js +0 -4
- package/dist/cli/main-5ywnwthm.js +0 -3
- package/dist/cli/main-6b62vkz0.js +0 -14
- package/dist/cli/main-6dnk69vp.js +0 -3
- package/dist/cli/main-6genrmhs.js +0 -136
- package/dist/cli/main-73g7eff4.js +0 -15
- package/dist/cli/main-7c5thhjd.js +0 -5
- package/dist/cli/main-7rn6bqje.js +0 -3
- package/dist/cli/main-80haw7qk.js +0 -4
- package/dist/cli/main-875s60s2.js +0 -4
- package/dist/cli/main-8kjxbpw4.js +0 -8
- package/dist/cli/main-90ds1z4e.js +0 -10
- package/dist/cli/main-9etavkew.js +0 -3
- package/dist/cli/main-a9njrkk1.js +0 -3
- package/dist/cli/main-aecrjq2d.js +0 -12
- package/dist/cli/main-ck9asesq.js +0 -9
- package/dist/cli/main-cta9racd.js +0 -4
- package/dist/cli/main-ddv7j2ag.js +0 -3
- package/dist/cli/main-dfreez27.js +0 -10
- package/dist/cli/main-f7rw7des.js +0 -3
- package/dist/cli/main-ggcn7rd7.js +0 -5
- package/dist/cli/main-gzkmycnv.js +0 -3
- package/dist/cli/main-hq51jg8v.js +0 -18
- package/dist/cli/main-jft389w9.js +0 -8
- package/dist/cli/main-k1eqkg83.js +0 -3
- package/dist/cli/main-k2y8a2aw.js +0 -9
- package/dist/cli/main-kcpbykxz.js +0 -4
- package/dist/cli/main-kd488vje.js +0 -22
- package/dist/cli/main-kh32yvgk.js +0 -5
- package/dist/cli/main-kqxnqjnv.js +0 -25
- package/dist/cli/main-kyn0xnsg.js +0 -3
- package/dist/cli/main-m1kk6fp5.js +0 -21
- package/dist/cli/main-mv40pcr2.js +0 -4
- package/dist/cli/main-n0t3973w.js +0 -3
- package/dist/cli/main-nqveez48.js +0 -4
- package/dist/cli/main-pknhvrmj.js +0 -3
- package/dist/cli/main-pn1w7a7j.js +0 -3
- package/dist/cli/main-prxxs70n.js +0 -4
- package/dist/cli/main-q3vsesf9.js +0 -3
- package/dist/cli/main-qsevpgsv.js +0 -3
- package/dist/cli/main-rdgdw24b.js +0 -25
- package/dist/cli/main-rfth4tbm.js +0 -16
- package/dist/cli/main-rg0wn0xf.js +0 -5
- package/dist/cli/main-sdmxhtv8.js +0 -4
- package/dist/cli/main-skbp13js.js +0 -18
- package/dist/cli/main-t4xnd213.js +0 -7
- package/dist/cli/main-vqak588n.js +0 -4
- package/dist/cli/main-w2n1303f.js +0 -9
- package/dist/cli/main-wbrdspr2.js +0 -5
- package/dist/cli/main-wsrg79c1.js +0 -7
- package/dist/cli/main-x4r0fne4.js +0 -5
- package/dist/cli/main-xea2f3tn.js +0 -6
- package/dist/cli/main-xg704a3c.js +0 -3
- package/dist/cli/main-xvnrabfp.js +0 -16
- package/dist/cli/main-xy53xf0r.js +0 -4
- package/dist/cli/main-y1fqy60y.js +0 -3
- package/dist/cli/main-yn8cd281.js +0 -34
- package/dist/cli/main-yr0ksc0h.js +0 -4
- package/dist/cli/main-z2ex2vyf.js +0 -4
- package/dist/cli/main-z3aayzvq.js +0 -3
- package/dist/cli/main-zaqh35jg.js +0 -3
- package/dist/cli/main-zc2e8e46.js +0 -4
- package/dist/cli/main-zzrfw6cf.js +0 -13
- package/dist/cli/main.js +0 -280
- package/dist/cli/market-cmd-e14kmx9n.js +0 -5
- package/dist/cli/mcp-login-wq7ktdek.js +0 -2
- package/dist/cli/mcp-market-cmd-9mg3jecy.js +0 -2
- package/dist/cli/notify-b7qc0cjb.js +0 -2
- package/dist/cli/oauth-z8whcgfx.js +0 -2
- package/dist/cli/output-b3ewj3ps.js +0 -16
- package/dist/cli/profiles-6mr5he5e.js +0 -2
- package/dist/cli/provider-config-g7j42q8x.js +0 -2
- package/dist/cli/provider-jr1y8vvm.js +0 -2
- package/dist/cli/registry-s8yk86g0.js +0 -2
- package/dist/cli/registry-t6p8d4mn.js +0 -2
- package/dist/cli/repl-bajwe1mh.js +0 -11
- package/dist/cli/resume-rwn9nz7y.js +0 -2
- package/dist/cli/run-flags-nah7ndpt.js +0 -2
- package/dist/cli/runtime-n7gafzhb.js +0 -2
- package/dist/cli/sandbox-config-emdy18x4.js +0 -2
- package/dist/cli/server-b0nvs2bn.js +0 -5
- package/dist/cli/session-arg-y75wd4kj.js +0 -2
- package/dist/cli/session-j62evmjq.js +0 -2
- package/dist/cli/sessions-cmd-tsnwz0ns.js +0 -7
- package/dist/cli/settings-df10wfez.js +0 -2
- package/dist/cli/setup-jzvv72fg.js +0 -2
- package/dist/cli/sextant-smoke-37m81ke6.js +0 -5
- package/dist/cli/skills-cmd-gjxnxnhx.js +0 -2
- package/dist/cli/smoke-p7748apt.js +0 -8
- package/dist/cli/start-chat-s4st3mm0.js +0 -12
- package/dist/cli/stream-gmeyewds.js +0 -2
- package/dist/cli/task-gh0kkp3n.js +0 -2
- package/dist/cli/tasks-z1kfpe8e.js +0 -2
- package/dist/cli/thinking-0eqkrz6t.js +0 -2
- package/dist/cli/todo-5brcrt9m.js +0 -2
- package/dist/cli/tools-7pzm0vj9.js +0 -2
- package/dist/cli/tools-s635p6s8.js +0 -2
- package/dist/cli/trust-cmd-cjav8zgm.js +0 -2
- package/dist/cli/update-check-pt31bm2f.js +0 -2
- package/dist/cli/update-cmd-tk131s9t.js +0 -2
- package/dist/cli/voice-56nabd8d.js +0 -2
- package/dist/cli/webfetch-xd8q596m.js +0 -2
- package/dist/cli/websearch-5hkf98k1.js +0 -2
- package/dist/cli/workflow-cmd-cy3cvzjp.js +0 -4
- package/dist/cli/workspace-q10g5z3e.js +0 -2
- package/dist/lib/index.js +0 -62
- package/dist/lib/models-index.json +0 -1
- package/dist/lib/plugins.js +0 -55
- package/dist/lib/providers.js +0 -17
- package/dist/lib/public-api.js +0 -20
- package/dist/lib/sdk.js +0 -360
- /package/{dist/cli → src/providers}/models-index.json +0 -0
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{I as O5,K as h9,L as bJ,M as N1}from"./main-2wwjex5j.js";import{ia as E9,qa as P6}from"./main-7c5thhjd.js";import{$b as v$,Ab as n4,Bb as I4,Cb as X5,Db as n,Eb as z4,Fb as EJ,Gb as IJ,Hb as x5,Ib as SJ,Jb as J0,Lb as D$,Mb as m$,Nb as H$,Ob as q5,Pb as m0,Qb as A5,Rb as B0,Sb as qJ,Tb as L0,Ub as K8,Vb as N$,Wb as R5,Xb as t$,Yb as E5,Zb as e$,_b as zJ,ac as DJ,bc as X0,db as A,eb as _0,fb as A$,gb as kJ,hb as BJ,ib as I0,jb as p,kb as t0,lb as b5,mb as M8,nb as l$,ob as WJ,pb as O8,qb as _J,rb as PJ,sb as x8,tb as _4,ub as P4,vb as u5,wb as A4,xb as AJ,yb as o0,zb as E4}from"./main-73g7eff4.js";import{Ve as v4,Xe as xZ}from"./main-3pjrb2hd.js";import{jg as FJ,sg as K1}from"./main-t4xnd213.js";import{Rg as J4,Sg as Z4,bh as i7}from"./main-1dchs7xv.js";import{Th as Y1,Uh as OJ}from"./main-0z1w2zsg.js";import{tk as G0,uk as J8}from"./main-8kjxbpw4.js";import{un as H1,vn as G1,wn as k,xn as N5}from"./main-qsevpgsv.js";function h($,J,Z){let Q=Math.round(($>>16&255)+((J>>16&255)-($>>16&255))*Z),V=Math.round(($>>8&255)+((J>>8&255)-($>>8&255))*Z),j=Math.round(($&255)+((J&255)-($&255))*Z);return Q<<16|V<<8|j}function d5($){return Object.hasOwn(a8,$)}function h5($){let J=d5($)?$:"night",Z=a8[J],Q=l(Z.bg),V=l(Z.fg),j=l(Z.fg2),X=l(Z.accent),U=l(Z.ok),G=l(Z.err);return{name:J,label:Z.label,bg:Q,bg2:l(Z.bg2),fg:V,fg2:j,muted:l(Z.muted),dim:l(Z.dim),rule:l(Z.rule),rule2:l(Z.rule2),accent:X,accent2:l(Z.accent2),ok:U,err:G,warn:l(Z.warn),info:l(Z.info),str:l(Z.str),ty:l(Z.ty),hlBg:h(Q,X,0.12),addBg:h(Q,U,0.15),delBg:h(Q,G,0.15),selBg:h(Q,V,0.08),accentDim:h(Q,X,0.45),okDim:h(Q,U,0.55),mixDim:h(Q,j,0.55),frame:h(Q,V,0.28),frameDim:h(Q,V,0.17)}}var a8,l=($)=>parseInt($.slice(1),16),p5=($)=>"#"+($>>>0).toString(16).padStart(6,"0"),q=($,J=-1,Z=0)=>({fg:$,bg:J,a:Z});var Q0=k(()=>{p();a8={night:{label:"Gece + nane",bg:"#0b0e12",bg2:"#11161c",fg:"#e6edf3",fg2:"#aab4bf",muted:"#7d8590",dim:"#4b545e",rule:"#2a323b",rule2:"#3a4550",accent:"#3ddbb9",accent2:"#9af2df",ok:"#3fb950",err:"#f0605d",warn:"#e3b341",info:"#79c0ff",str:"#9ee7d6",ty:"#b6c2ce"},ember:{label:"M\xFCrekkep + kor",bg:"#0f0c0b",bg2:"#171210",fg:"#f2eae2",fg2:"#c9bcb0",muted:"#8c817a",dim:"#554c46",rule:"#332b27",rule2:"#463a34",accent:"#ff7a45",accent2:"#ffb08a",ok:"#6cc783",err:"#ef5a5a",warn:"#f4b942",info:"#8fb8e8",str:"#ffb38a",ty:"#cdbfb3"},contrast:{label:"Saf kontrast",bg:"#000000",bg2:"#0b0b0b",fg:"#ffffff",fg2:"#d4d4d4",muted:"#8a8a8a",dim:"#4c4c4c",rule:"#3a3a3a",rule2:"#4a4a4a",accent:"#ffffff",accent2:"#ffffff",ok:"#4ade80",err:"#f87171",warn:"#fbbf24",info:"#93c5fd",str:"#d4d4d4",ty:"#bdbdbd"}}});import{eastAsianWidth as fJ}from"get-east-asian-width";function s8($,J=!1){if($<128)return 1;if(r8($))return 0;if(J?uJ($):$<4352)return 1;return fJ($,{ambiguousAsWide:J})}function*m5($,J=!1){let Z="",Q=1,V=!1;for(let j of $){let X=j.codePointAt(0),U=s8(X,J);if(Z&&(U===0||V&&X>=128)){Z+=j,V=X===xJ;continue}if(U===0)continue;if(Z)yield[Z,Q];Z=j,Q=U,V=!1}if(Z)yield[Z,Q]}function f($,J=!1){let Z=0;for(let[,Q]of m5($,J))Z+=Q;return Z}function i8($,J){let Z=($>>16&255)-(J>>16&255),Q=($>>8&255)-(J>>8&255),V=($&255)-(J&255);return Z*Z+Q*Q+V*V}function n8($){if($<16)return pJ[$]??0;if($<232){let Z=$-16;return w5[Math.floor(Z/36)]<<16|w5[Math.floor(Z/6)%6]<<8|w5[Z%6]}let J=8+10*Math.min(23,$-232);return J<<16|J<<8|J}function o8($){let J=$>>16&255,Z=$>>8&255,Q=$&255,V=16+36*l5(J)+6*l5(Z)+l5(Q),j=232+Math.max(0,Math.min(23,Math.round(((J+Z+Q)/3-8)/10)));return i8($,n8(j))<i8($,n8(V))?j:V}function dJ($,J,Z,Q=!0){let V=E0+"0";if(Z&A.BOLD)V+=";1";if(Z&A.DIM)V+=";2";if(Z&A.ITALIC)V+=";3";if(Z&A.UNDERLINE)V+=";4";if(Z&A.INVERSE)V+=";7";if(Z&A.STRIKE)V+=";9";if($>=0)V+=Q?`;38;2;${$>>16&255};${$>>8&255};${$&255}`:`;38;5;${o8($)}`;if(J>=0)V+=Q?`;48;2;${J>>16&255};${J>>8&255};${J&255}`:`;48;5;${o8(J)}`;return V+"m"}class Z5{sink;w=0;h=0;ch=[];wd=new Uint8Array(0);fg=new Int32Array(0);bg=new Int32Array(0);at=new Uint8Array(0);prev=null;truecolor;ambiguousAsWide;constructor($,J,Z,Q={}){this.sink=$;this.truecolor=Q.truecolor??!0,this.ambiguousAsWide=Q.ambiguousAsWide??!1,this.resize(J,Z)}resize($,J){this.w=Math.max(v0,Number.isFinite($)?Math.floor($):0),this.h=Math.max(f0,Number.isFinite(J)?Math.floor(J):0);let Z=this.w*this.h;this.ch=Array(Z).fill(" "),this.wd=new Uint8Array(Z).fill(1),this.fg=new Int32Array(Z).fill(-1),this.bg=new Int32Array(Z).fill(-1),this.at=new Uint8Array(Z),this.prev=null}begin($){this.ch.fill(" "),this.wd.fill(1),this.fg.fill(-1),this.bg.fill($==null?-1:$),this.at.fill(0)}cellAt($,J){if($<0||J<0||$>=this.w||J>=this.h)return null;let Z=J*this.w+$;return{ch:this.ch[Z],fg:this.fg[Z],bg:this.bg[Z],a:this.at[Z],width:this.wd[Z]}}breakWide($){let J=this.wd[$];if(J===0&&$>0)this.ch[$-1]=" ",this.wd[$-1]=1;else if(J===2&&$+1<this.wd.length)this.ch[$+1]=" ",this.wd[$+1]=1}set($,J,Z,Q,V,j){if(this.breakWide($),Z===2)this.breakWide($+1);if(this.ch[$]=J,this.wd[$]=Z,this.fg[$]=Q,V>=0)this.bg[$]=V;if(this.at[$]=j,Z===2){if(this.ch[$+1]="",this.wd[$+1]=0,this.fg[$+1]=Q,V>=0)this.bg[$+1]=V;this.at[$+1]=j}}head($,J){let Z="",Q=0;for(let[V,j]of m5($,this.ambiguousAsWide)){if(Q+j>J)break;Z+=V,Q+=j}return Z}put($,J,Z,Q,V=1/0){if(J<0||J>=this.h||!Z)return $;let j=Q?Q.fg:-1,X=Q?Q.bg:-1,U=Q?Q.a:0,G=$,Y=Math.min(this.w,$+V);for(let[K,z]of m5(Z.replace(c8," "),this.ambiguousAsWide)){if(G>=Y)break;if(z===2&&G+2>Y)break;if(G>=0)this.set(J*this.w+G,K,z,j,X,U);G+=z}return G}text($,J,Z,Q=1/0){let V=$,j=$+Q;for(let[X,U]of Z){if(V>=j)break;V=this.put(V,J,X,U,j-V)}return V}clip($,J,Z,Q,V){if(V<=0)return $;if(f(Z,this.ambiguousAsWide)>V)Z=V>1?this.head(Z,V-1)+"\u2026":this.head(Z,V);return this.put($,J,Z,Q,V)}fill($,J,Z,Q,V,j){let X=j?j.fg:-1,U=j?j.bg:-1,G=j?j.a:0,Y=V.replace(c8," ").codePointAt(0)??32;if(r8(Y))Y=32;let K=String.fromCodePoint(Y),z=s8(Y,this.ambiguousAsWide)||1;for(let D=J;D<J+Q;D++){if(D<0||D>=this.h)continue;for(let H=$;H<$+Z;H+=z){if(H<0||H+z>this.w||H+z>$+Z)continue;this.set(D*this.w+H,K,z,X,U,G)}}}tint($,J,Z,Q,V){for(let j=J;j<J+Q;j++){if(j<0||j>=this.h)continue;for(let X=$;X<$+Z;X++){if(X<0||X>=this.w)continue;this.bg[j*this.w+X]=V}}}hline($,J,Z,Q,V="\u2500"){for(let j=0;j<Z;j++)this.put($+j,J,V,Q)}vline($,J,Z,Q,V="\u2502"){for(let j=0;j<Z;j++)this.put($,J+j,V,Q)}box($,J,Z,Q,V,j){if(j!=null)this.fill($,J,Z,Q," ",{fg:-1,bg:j,a:0});this.put($,J,"\u256D",V),this.put($+Z-1,J,"\u256E",V),this.put($,J+Q-1,"\u2570",V),this.put($+Z-1,J+Q-1,"\u256F",V),this.hline($+1,J,Z-2,V),this.hline($+1,J+Q-1,Z-2,V),this.vline($,J+1,Q-2,V),this.vline($+Z-1,J+1,Q-2,V)}flush($){let J=this.w*this.h,Z=!1;if(!this.prev||this.prev.ch.length!==J)this.prev={ch:Array(J).fill(null),fg:new Int32Array(J).fill(-2),bg:new Int32Array(J).fill(-2),at:new Uint8Array(J).fill(255)},Z=!0;let Q=this.prev,V=Z?E0+"2J":"",j=null,X=null,U=null,G=-1,Y=-1,K=J-1;for(let z=0;z<this.h;z++)for(let D=0;D<this.w;D++){let H=z*this.w+D,N=this.wd[H];if(N===0)continue;if(H+N-1>=K)continue;if(!Z&&this.ch[H]===Q.ch[H]&&this.fg[H]===Q.fg[H]&&this.bg[H]===Q.bg[H]&&this.at[H]===Q.at[H])continue;if(!(Y===z&&G===D))V+=E0+(z+1)+";"+(D+1)+"H";let M=this.fg[H],O=this.bg[H],_=this.at[H];if(M!==j||O!==X||_!==U)V+=dJ(M,O,_,this.truecolor),j=M,X=O,U=_;if(V+=this.ch[H],G=D+N,Y=z,Q.ch[H]=this.ch[H],Q.fg[H]=M,Q.bg[H]=O,Q.at[H]=_,N===2)Q.ch[H+1]="",Q.fg[H+1]=M,Q.bg[H+1]=O,Q.at[H+1]=_}V+=$?E0+($.y+1)+";"+($.x+1)+"H"+E0+"?25h":E0+"?25l",this.sink.write(V)}toText(){let $=[];for(let J=0;J<this.h;J++)$.push(this.ch.slice(J*this.w,(J+1)*this.w).join("").replace(/\s+$/,""));return $.join(`
|
|
3
|
-
`)}toHTML($="Cascadia Mono"){let J="";for(let Z=0;Z<this.h;Z++){let Q="",V="",j=null,X=()=>{if(!V||!j)return;let U=j;Q+=`<span style="color:${U.fg>=0?p5(U.fg):"inherit"};background:${U.bg>=0?p5(U.bg):"transparent"};${U.a&A.BOLD?"font-weight:600;":""}${U.a&A.ITALIC?"font-style:italic;":""}${U.a&A.STRIKE?"text-decoration:line-through;":""}">${V.replace(/&/g,"&").replace(/</g,"<")}</span>`,V=""};for(let U=0;U<this.w;U++){let G=Z*this.w+U,Y={fg:this.fg[G],bg:this.bg[G],a:this.at[G]};if(!j||j.fg!==Y.fg||j.bg!==Y.bg||j.a!==Y.a)X(),j=Y;V+=this.ch[G]}X(),J+=Q+`
|
|
4
|
-
`}return`<!doctype html><meta charset="utf-8"><body style="margin:0;background:#000"><pre style="margin:0;font:14px/1.25 '${$}',Consolas,monospace;display:inline-block">${J}</pre></body>`}}var yJ="\x1B",E0,v0=40,f0=12,gJ,r8=($)=>$>=768&&gJ.test(String.fromCodePoint($)),uJ=($)=>$>=9472&&$<9632||$===8230,xJ=8205,c8,w5,pJ,l5=($)=>$<48?0:$<115?1:Math.min(5,Math.floor(($-35)/40));var D0=k(()=>{Q0();p();E0=yJ+"[",gJ=/^[\p{Mn}\p{Me}\p{Cf}\u200B-\u200D\uFE00-\uFE0F]$/u,c8=/[\x00-\x1f\x7f-\x9f]/g;w5=[0,95,135,175,215,255],pJ=[0,8388608,32768,8421376,128,8388736,32896,12632256,8421504,16711680,65280,16776960,255,16711935,65535,16777215]});function a5($,J,Z){let Q=Math.max(v0,$),V=Math.max(f0,J),j={x:0,y:0,w:Q-1,h:V},X=2,U=Q-4,G=1,Y=V-2,K=Q>=140,z=Q>=110,D=K?Q>=150?30:26:0,H=z?Q>=150?34:28:0,N=Y-1+1,M=K?{x:2,y:1,w:D,h:N}:null,O=z?{x:U-H+1,y:1,w:H,h:N}:null,_=2+(K?D+1:0),E=(O?O.x-1:U+1)-_,I=Math.max(8,Math.round(N*0.34)),T={x:_,y:1,w:E,h:N-I},F={x:_,y:1+T.h,w:E,h:I},P=Z.pet&&N>=36?14:0,W=null,R=null,b=null;if(O)W={x:O.x,y:1,w:H,h:N-5},R={x:O.x,y:1+W.h,w:H,h:5};if(P&&M)M.h=N-P,b={x:2,y:1+M.h,w:D,h:P};else if(P&&O&&W)W.h-=P,b={x:O.x,y:1+W.h,w:H,h:P};return{w:Q,h:V,frame:j,files:M,code:T,messages:F,plan:W,usage:R,pet:b}}function hJ($,J){let Z="",Q=0;for(let V of $){let j=f(V);if(Q+j>J)break;Z+=V,Q+=j}return Z}function wJ($,J){let Z=$.filter(([G])=>G.length>0),Q=w(Z);if(Q<=J)return Z;if(J<6)return[];let V=0;Z.forEach(([G],Y)=>{if(f(G)>f(Z[V]?.[0]??""))V=Y});let[j,X]=Z[V],U=f(j)-(Q-J)-1;if(U<3)return[];return Z=Z.map((G,Y)=>Y===V?[hJ(j,U)+"\u2026",X]:G),Q=w(Z),Q<=J?Z:[]}function e($,J,Z,Q,V,j,X){let U=X??(Q?j.accent:j.frame);if($.box(J.x,J.y,J.w,J.h,q(U),j.bg),Z)$.text(J.x+2,J.y,[[" ",q(-1)],[Z,q(X??(Q?j.accent:j.fg2),-1,A.BOLD)],[" ",q(-1)]],Math.max(0,J.w-4));if(V&&V.length){let G=wJ(V,J.w-8-f(Z)),Y=w(G);if(Y>0)$.text(J.x+J.w-3-Y,J.y,[[" ",q(-1)],...G,[" ",q(-1)]])}return{x:J.x+2,y:J.y+1,w:J.w-4,h:J.h-2}}var w=($)=>$.reduce((J,[Z])=>J+f(Z),0);var H0=k(()=>{D0();Q0();p()});function lJ($){let J=$.split(`
|
|
5
|
-
`);if(J.length&&J[J.length-1]==="")J.pop();return J}function V5($){if(Q5&&Q5.src===$)return Q5.lines;let J=lJ($);return Q5={src:$,lines:J},J}function i($,J){let Z=Math.max(1,J),Q=[];for(let V of String($).split(`
|
|
6
|
-
`)){let j="",X=0;for(let U of V.split(" ")){let G=[...U];if(j&&X+1+G.length<=Z){j+=" "+U,X+=1+G.length;continue}if(j)Q.push(j);while(G.length>Z)Q.push(G.splice(0,Z).join(""));j=G.join(""),X=G.length}Q.push(j)}return Q}function c5($,J){let Z=Math.max(1,J),Q=[...$];if(Q.length<=Z)return[$];let V=[];for(let j=0;j<Q.length;j+=Z)V.push(Q.slice(j,j+Z).join(""));return V}var N0=($)=>I0[Math.floor($/140)%I0.length]??"\u25C7",Q5=null,a=($)=>({x:$.x+2,y:$.y+1,w:$.w-4,h:$.h-2});var $0=k(()=>{p();Q0();H0()});function U5($,J=0){switch($){case"queued":return"\u25C7";case"running":return N0(J);case"done":return"\u25C6";case"failed":return"\xD7";default:return"\u25AA"}}function G5($,J){switch($){case"queued":return J.dim;case"running":return J.accent;case"done":return J.ok;case"failed":return J.err;default:return J.muted}}function Y5($,J){return Math.max(0,($.finishedAt??J)-($.startedAt??$.createdAt))}function i5($,J){switch($.status){case"queued":return"queued";case"running":return`working ${$9(Y5($,J))}`;default:return $.status}}function sJ($){switch($.status){case"done":return`done: ${e8($.summary)||"(no output)"}`;case"failed":return`failed: ${e8($.error)||"(no reason)"}`;case"cancelled":return"cancelled";case"queued":return"queued \xB7 waiting for a slot";default:return"running"}}function J9($){if(!$.isolated||$.patchLines===void 0)return null;return $.patchLines>0?`+${$.patchLines} lines merged`:"nothing merged"}function Z9($){let J={total:$.length,queued:0,running:0,done:0,failed:0,cancelled:0};for(let V of $)J[V.status]++;let Z=J.queued+J.running,Q=Z?`${Z} working`:J.total?`${J.done}/${J.total} done`:"no background tasks";return{...J,working:Z,needsYou:0,text:Q}}function n5($,J){if(J<=0)return{cols:0,rows:0};let Z=Math.min(J,$<t8[0]?1:$<t8[1]?2:3);return{cols:Z,rows:Math.ceil(J/Z)}}function tJ($,J){let Z=Math.max(1,$),Q=Math.max(1,Math.floor(Z/4)),V=Math.floor(Math.max(0,J)/nJ)%(Z+Q);return Array.from({length:Z},(j,X)=>X<V&&X>=V-Q)}function o5($,J){let Z=J.crew.length;if(Z===0||$.w<aJ||$.h<3)return{cells:[],page:0,pages:0,footer:!1};let Q=K5(J);if(J.code.laneOpen)return{cells:[{index:Q,rect:$}],page:0,pages:1,footer:!1};let{cols:V,rows:j}=n5($.w,Z),X=(_)=>V*Math.max(1,Math.min(j,Math.floor(_/mJ))),U=X($.h)<Z,G=X($.h-(U?1:0)),Y=$.h-(U?1:0),K=Math.ceil(Z/G),z=Math.floor(Q/G),D=z*G,H=Math.min(G,Z-D),N=Math.floor($.w/V),M=Math.floor(Y/Math.ceil(H/V));return{cells:Array.from({length:H},(_,E)=>({index:D+E,rect:{x:$.x+E%V*N,y:$.y+Math.floor(E/V)*M,w:N,h:M}})),page:z,pages:K,footer:U}}function V9($){if($.status==="done")return $.summary?.trim()||"(no output)";if($.status==="failed"||$.status==="cancelled")return $.error?.trim()||$.status;return"no result yet"}function eJ($,J,Z){let Q=Math.max(0,Math.min(cJ,Z-1)),V=i($.goal,J).filter((X)=>X!=="").slice(0,Q).map((X)=>[{text:X,tone:"muted"}]);V.push([{text:`${$.id} \xB7 ${$.agent}${$.isolated?" \xB7 isolated":""}`,tone:"dim"}]);let j=J9($);if(j)V.push([{text:j,tone:$.patchLines?"ok":"dim"}]);return V}function j9($,J,Z){let Q=i($.goal,Math.max(1,J-j5.length-2)).filter((j)=>j!=="").slice(0,iJ).map((j)=>[{text:j,tone:"muted"}]);if(!Q.length)Q.push([{text:"",tone:"muted"}]);if(Q.push([{text:`${$.id} \xB7 ${$.agent} \xB7 depth ${$.depth}${$.isolated?" \xB7 isolated":""}`,tone:"dim"}]),Q.push([{text:U5($.status,Z)+" ",tone:$6($.status)},{text:i5($,Z),tone:"fg2"}]),$.usage){let j=$.usage.costUsd!==void 0?` \xB7 $${$.usage.costUsd.toFixed(3)}`:"";Q.push([{text:"tokens ",tone:"muted"},{text:`${n($.usage.input)} in \xB7 ${n($.usage.output)} out${j}`,tone:"fg2"}])}let V=J9($);if(V)Q.push([{text:V,tone:$.patchLines?"ok":"dim"}]);return Q.push([]),Q}function r5($,J){if(!J.code.laneOpen||!J.crew.length)return 0;let Z=J.crew[K5(J)],Q=Q9($);if(Q.w<4||Q.h<3)return 0;let V=Q.h-2-j9(Z,Q.w,0).length,j=Math.max(0,i(V9(Z),Q.w).length-V);return Math.max(0,Math.min(J.code.scroll,j))}function Q6($,J,Z,Q,V,j){let X=`${$9(Y5(Z,V))} \xB7 ${rJ(Z)}`,U=X.length+6<=J.w,G=$.put(J.x,J.y,U5(Z.status,V)+" ",q(G5(Z.status,Q)),J.w);if($.clip(G,J.y,Z.label,q(j?Q.accent:Q.fg,-1,A.BOLD),J.x+J.w-G-(U?X.length+1:0)),U)$.put(J.x+J.w-X.length,J.y,X,q(Q.dim))}function V6($,J,Z,Q,V,j,X){if(V.status==="running"){let D=Q-7-2;if(D<4){$.put(J,Z,"running",q(j.muted),Q);return}tJ(D,X).forEach((H,N)=>$.put(J+N,Z,H?"\u2501":"\u2500",q(H?j.accent:j.rule2))),$.put(J+D+2,Z,"running",q(j.muted));return}let U=sJ(V),G=U.indexOf(": "),Y=G5(V.status,j);if(G<0){$.clip(J,Z,U,q(V.status==="queued"?j.dim:Y),Q);return}let K=$.put(J,Z,U.slice(0,G+2),q(Y),Q);$.clip(K,Z,U.slice(G+2),q(V.status==="failed"?j.err:j.fg2),J+Q-K)}function j6($,J,Z,Q,V,j,X){let U=Q.focus==="code",G=Q.code.laneOpen;$.box(J.x,J.y,J.w,J.h,q(X?U?V.accent:V.frame:V.frameDim));let Y=Q9(J);if(Y.w<4||Y.h<1)return;if(Q6($,Y,Z,V,j,X),Y.h<2)return;let K=Y.y+Y.h-1,z=G?j9(Z,Y.w,j):eJ(Z,Y.w,Y.h-2),D=Y.y+1;for(let H of z){if(D>=K)break;Z6($,Y.x,D++,Y.w,H,V)}if(G){if(Y.w>j5.length+4&&Y.y+1<K)$.put(Y.x+Y.w-j5.length,Y.y+1,j5,q(V.dim));let H=i(V9(Z),Y.w),N=r5(J,Q),M=Z.status==="failed"?V.err:Z.status==="done"?V.fg2:V.muted;for(let O=N;O<H.length&&D<K;O++)$.put(Y.x,D++,H[O],q(M),Y.w)}V6($,Y.x,K,Y.w,Z,V,j)}function X6($,J,Z,Q,V){let j=K5(Z);Z.crew.slice(0,J.h).forEach((X,U)=>{let G=i5(X,V),Y=J.w-G.length-1,K=$.put(J.x,J.y+U,U5(X.status,V)+" ",q(G5(X.status,Q)),J.w);if($.clip(K,J.y+U,X.label,q(U===j?Q.accent:Q.fg),Math.max(0,Math.min(J.x+J.w,J.x+Y)-K)),Y>8)$.put(J.x+J.w-G.length,J.y+U,G,q(Q.dim))})}function X9($,J,Z,Q,V){if(J.w<=0||J.h<=0)return;if($.fill(J.x,J.y,J.w,J.h," ",q(-1,Q.bg)),!Z.crew.length){$.clip(J.x,J.y,oJ,q(Q.muted),J.w);return}let j=o5(J,Z);if(!j.cells.length){X6($,J,Z,Q,V);return}let X=K5(Z);for(let{index:U,rect:G}of j.cells)j6($,G,Z.crew[U],Z,Q,V,U===X);if(j.footer)$.clip(J.x,J.y+J.h-1,`${j.page+1}/${j.pages} \xB7 ${Z.crew.length} tasks \xB7 \u2190\u2192\u2191\u2193 select`,q(Q.dim),J.w)}var t8,mJ=5,aJ=12,cJ=2,iJ=4,nJ=100,oJ="no background tasks \u2014 I start them with the task tool for parallel work",j5="esc back",$9=($)=>X5($).replace(/\.\d$/,""),rJ=($)=>$.usage?n($.usage.input+$.usage.output):"\u2014",e8=($)=>($??"").split(`
|
|
7
|
-
`).map((J)=>J.trim()).find((J)=>J!=="")??"",K5=($)=>Math.max(0,Math.min($.code.lane,$.crew.length-1)),Q9=($)=>({x:$.x+2,y:$.y+1,w:$.w-4,h:$.h-2}),$6=($)=>$==="queued"?"dim":$==="running"?"accent":$==="done"?"ok":$==="failed"?"err":"muted",J6=($,J)=>q(J[$.tone],-1,$.bold?A.BOLD:0),Z6=($,J,Z,Q,V,j)=>{if(V.length)$.text(J,Z,V.map((X)=>[X.text,J6(X,j)]),Q)};var S0=k(()=>{p();$0();J0();t8=[70,120]});function q9($,J,Z={kind:"ready"},Q=[]){L0($,"market"),$.market={tab:"all",query:"",sel:0,rows:J,status:Z,notes:Q,plan:null,choice:null,docs:!1,docScroll:0,docRows:12}}function z9($){$.market=null}function D9($,J=q5){let Z=$.rows.filter((V)=>$.tab==="all"||V.kind===$.tab),Q=$.query.trim();if(!Q)return Z;return Z.map((V)=>({r:V,hit:J(Q,`${V.title} ${V.id} ${V.publisher} ${V.description}`)})).filter((V)=>V.hit!==null).sort((V,j)=>j.hit.score-V.hit.score).map((V)=>V.r)}function G6($){return{all:$.rows.length,mcp:$.rows.filter((J)=>J.kind==="mcp").length,skill:$.rows.filter((J)=>J.kind==="skill").length,plugin:$.rows.filter((J)=>J.kind==="plugin").length}}function Y6($){if(!$.installed)return null;if($.installed.updateAvailable)return{text:"update",tone:"warn"};if($.installed.scope==="project"&&$.installed.trusted===!1)return{text:"not approved",tone:"warn"};return{text:"installed",tone:"ok"}}function K6($,J){if($.status.kind==="loading")return{text:"reading the catalogs\u2026",tone:"muted"};if($.status.kind==="error")return{text:$.status.reason,tone:"err"};if($.status.kind==="offline")return{text:$.status.note,tone:"warn"};if(J===0)return $.query.trim()||$.tab!=="all"?{text:`nothing matches${$.query.trim()?` "${$.query.trim()}"`:""}${$.tab!=="all"?` in ${$.tab}`:""}`,tone:"muted"}:{text:"the catalog is empty",tone:"muted"};return null}function G9($,J,Z,Q,V){let j=Q.plan;if(!j){if(Q.choice)q6($,J,Z,Q,V);return}let X=Math.min(76,J.w-8),U=[...j.preview,...j.replaces?[`replaces ${j.replaces}`]:[],...j.asks.map((D)=>`asks ${D.name}${D.secret?" (secret, masked)":""}${D.required?"":" \u2014 optional"}`),...j.pending.map((D)=>`you supply ${D}`)],G=Math.min(J.h-4,U.length+7),Y=Math.floor((J.w-X)/2),K=Math.max(1,Math.floor((J.h-G)/2));$.box(Y,K,X,G,q(Z.accent),Z.bg2),$.text(Y+2,K,[[" install plan ",q(Z.accent,-1,A.BOLD)]]),$.clip(Y+3,K+1,j.title,q(Z.fg,Z.bg2,A.BOLD),X-6),$.clip(Y+3,K+2,`${j.scope} scope \xB7 ${j.target}`,q(Z.muted,Z.bg2),X-6),$.hline(Y+1,K+3,X-2,q(Z.rule2,Z.bg2),"\u254C"),U.slice(0,G-6).forEach((D,H)=>$.clip(Y+3,K+4+H,D,q(Z.fg2,Z.bg2),X-6));let z=K+G-2;if(j.outcome){$.clip(Y+3,z,j.outcome.text,q(j.outcome.ok?Z.ok:Z.err,Z.bg2),X-6),V?.push({rect:{x:Y,y:K,w:X,h:G},onClick:()=>{Q.plan=null}});return}if(j.running){$.put(Y+3,z,"installing\u2026",q(Z.muted,Z.bg2)),V?.push({rect:{x:Y,y:K,w:X,h:G},onClick:()=>{}});return}$.text(Y+3,z,[["\u23CE install",q(Z.accent,Z.bg2,A.BOLD)],[" esc cancel",q(Z.dim,Z.bg2)]],X-6),V?.push({rect:{x:Y,y:K,w:X,h:G},onClick:()=>{}}),V?.push({rect:{x:Y+3,y:z,w:9,h:1},onClick:()=>{},key:K9})}function q6($,J,Z,Q,V){let j=Q.choice;if(!j)return;let X=Math.min(84,J.w-8),U=X-6,G=[];U6.forEach((H,N)=>{G.push({text:`${N===j.sel?"\u25CF":"\u25CB"} ${H.label}`,sel:N===j.sel,head:!0});for(let M of g0(H.hint,U-4))G.push({text:` ${M}`,sel:!1,head:!1})});let Y=Math.min(J.h-4,G.length+6),K=Math.floor((J.w-X)/2),z=Math.max(1,Math.floor((J.h-Y)/2));$.box(K,z,X,Y,q(Z.accent),Z.bg2),$.text(K+2,z,[[" how to start it ",q(Z.accent,-1,A.BOLD)]]),$.clip(K+3,z+1,`${j.row.title} \xB7 ${j.row.localOffer??j.row.runs}`,q(Z.fg,Z.bg2,A.BOLD),U),$.hline(K+1,z+2,X-2,q(Z.rule2,Z.bg2),"\u254C");let D=-1;G.slice(0,Y-5).forEach((H,N)=>{let M=z+3+N;if($.clip(K+3,M,H.text,H.head?q(H.sel?Z.accent:Z.fg,Z.bg2,H.sel?A.BOLD:0):q(Z.muted,Z.bg2),U),H.head){D+=1;let O=D;V?.push({rect:{x:K+3,y:M,w:U,h:1},onClick:()=>{j.sel=O}})}}),$.text(K+3,z+Y-2,[["\u2191\u2193 choose \u23CE show the plan",q(Z.accent,Z.bg2,A.BOLD)],[" esc back",q(Z.dim,Z.bg2)]],U),V?.push({rect:{x:K,y:z,w:X,h:Y},onClick:()=>{}})}function z6($,J,Z,Q,V,j,X){let U=Z,G=(Y,K,z=0)=>{if(U>=Z+V)return;if(U+=z,U>=Z+V)return;$.clip(J,U,Y,K,Q),U+=1};$.text(J,U,[[X.title,q(j.fg,j.bg2,A.BOLD)],[X.version?` ${X.version}`:"",q(j.dim,j.bg2)]],Q),U+=1,G(X.publisher,q(j.muted,j.bg2));for(let Y of g0(X.description,Q).slice(0,4))G(Y,q(j.fg2,j.bg2));G("what it runs",q(j.dim,j.bg2),1);for(let Y of g0(X.runs,Q).slice(0,3))G(Y,q(j.fg,j.bg2));for(let Y of(X.alternatives??[]).slice(0,2))G(`also ${Y}`,q(j.dim,j.bg2));if(G("environment",q(j.dim,j.bg2),1),X.env.length===0)G("nothing \u2014 it needs no key",q(j.fg2,j.bg2));for(let Y of X.env.slice(0,4))if(G(`${Y.name}${Y.secret?" \xB7 secret":""}${Y.required?"":" \xB7 optional"}`,q(Y.secret?j.warn:j.fg,j.bg2)),Y.description)for(let K of g0(Y.description,Q-2).slice(0,2))G(` ${K}`,q(j.muted,j.bg2));if((X.pending??[]).length){G("you supply",q(j.dim,j.bg2),1);for(let Y of X.pending.slice(0,3))G(Y,q(j.fg2,j.bg2))}if(G("where it lands",q(j.dim,j.bg2),1),G(X.installed?X.installed.path:"shown in the plan before anything is written",q(j.fg2,j.bg2)),X.installed)G(`${X.installed.scope} scope${X.installed.version?` \xB7 ${X.installed.version}`:""}${X.installed.trusted===!1?" \xB7 not approved here":""}`,q(j.muted,j.bg2))}function s5($,J){return Math.max(0,($?.docs?.lines.length??0)-Math.max(1,J))}function D6($,J){if(J<8)return[...$];let Z=[];for(let Q of $)if(Q.kind==="text"){if(Q.text.length<=J){Z.push(Q);continue}let V="";for(let j of Q.text.split(/\s+/).filter(Boolean)){let X=j.length>J?j.slice(0,J):j;if(!V){V=X;continue}if(V.length+1+X.length<=J)V+=` ${X}`;else Z.push({kind:"text",text:V}),V=X}if(V)Z.push({kind:"text",text:V})}else if(Q.kind==="code"&&Q.text.length>J)for(let V=0;V<Q.text.length;V+=J)Z.push({kind:"code",text:Q.text.slice(V,V+J)});else Z.push(Q);return Z}function H6($,J,Z,Q,V,j,X,U){let G=D6(X.docs?.lines??[],Q);if(G.length===0)return $.clip(J,Z,`documentation \xB7 ${X.title}`,q(j.fg,j.bg2,A.BOLD),Q),$.clip(J,Z+2,"reading\u2026",q(j.muted,j.bg2),Q),0;let Y=Math.max(1,V-4),K=Math.max(0,G.length-Y),z=Math.max(0,Math.min(U,K));$.clip(J,Z,`documentation \xB7 ${X.title}`,q(j.fg,j.bg2,A.BOLD),Q),$.clip(J,Z+1,X.docs?.source??"",q(j.dim,j.bg2),Q);for(let N=0;N<Y;N++){let M=G[z+N];if(!M)break;let O=Z+2+N;if(M.kind==="head")$.clip(J,O,M.text,q(j.accent,j.bg2,A.BOLD),Q);else if(M.kind==="code")$.clip(J,O,M.text,q(j.fg2,j.selBg),Q);else if(M.kind==="rule")$.hline(J,O,Math.min(Q,24),q(j.rule2,j.bg2),"\u254C");else if(M.kind==="text")$.clip(J,O,M.text,q(j.fg2,j.bg2),Q)}let D=z<K?`${z+Y}/${G.length}`:`${G.length}/${G.length}`,H=X.docs?.truncated?`${D} \xB7 the rest is at the source`:D;return $.clip(J,Z+V-1,H,q(j.dim,j.bg2),Q),K}function g0($,J){if(J<=0)return[];let Z=[],Q="";for(let V of $.split(/\s+/).filter(Boolean)){let j=V.length>J?V.slice(0,J):V;if(!Q){Q=j;continue}if(f(Q)+1+f(j)<=J)Q+=` ${j}`;else Z.push(Q),Q=j}if(Q)Z.push(Q);return Z}function H9($,J,Z,Q,V=q5,j){let X=Q.market;if(!X)return null;j?.push({rect:{x:0,y:0,w:J.w,h:J.h},onClick:()=>{if(!X.plan?.running)z9(Q)}});let U=Math.max(X.rows.length+6,20),G=Math.min(J.w-6,120),Y=Math.max(12,Math.min(J.h-4,30,U)),K=Math.floor((J.w-G)/2),z=Math.max(1,Math.floor((J.h-Y)/2));$.box(K,z,G,Y,q(Z.accent),Z.bg2),$.text(K+2,z,[[" market ",q(Z.accent,-1,A.BOLD)]]),$.put(K+G-14,z," esc closes ",q(Z.dim)),j?.push({rect:{x:K,y:z,w:G,h:Y},onClick:()=>{}});let D=G6(X),H=K+3;for(let C of y0){let d=`${C==="all"?"all":U9[C]} ${D[C]}`,u=X.tab===C;$.put(H,z+1,d,q(u?Z.accent:Z.muted,Z.bg2,u?A.BOLD:0)),j?.push({rect:{x:H,y:z+1,w:f(d),h:1},onClick:()=>{X.tab=C,X.sel=0}}),H+=f(d)+3}if($.put(K+3,z+2,"\u258C",q(Z.accent,Z.bg2)),X.query)$.put(K+5,z+2,X.query,q(Z.fg,Z.bg2,A.BOLD),G-12);else $.put(K+5,z+2,"type to search the market\u2026",q(Z.dim,Z.bg2),G-12);$.hline(K+1,z+3,G-2,q(Z.rule2,Z.bg2),"\u254C");let N=D9(X,V);X.sel=Math.max(0,Math.min(X.sel,Math.max(N.length-1,0)));let M=Math.max(24,Math.floor((G-5)*0.42)),O=K+3+M+2,_=K+G-2-O,E=Y-6,I=K6(X,N.length);if(I&&N.length===0){let C=I.tone==="err"?Z.err:I.tone==="warn"?Z.warn:Z.muted;for(let[d,u]of g0(I.text,G-8).slice(0,3).entries())$.clip(K+4,z+5+d,u,q(C,Z.bg2),G-8);if(X.status.kind==="error")$.clip(K+4,z+9,"the curated shelf still works offline \xB7 esc closes",q(Z.dim,Z.bg2),G-8);return G9($,J,Z,X,j),{x:K+5+f(X.query),y:z+2}}let T=z+4;if(I&&N.length>0)$.clip(K+3,T,I.text,q(I.tone==="err"?Z.err:Z.warn,Z.bg2),G-6),T+=1;let F=Math.max(1,z+Y-2-T),P=X.sel>=F?X.sel-F+1:0;for(let C=0;C<F;C++){let d=N[P+C];if(!d)break;let u=T+C,t=P+C===X.sel;if(t)$.tint(K+2,u,M+2,1,Z.selBg);let U0=Y6(d),C0=U0?f(U0.text)+1:0;if($.text(K+2,u,[[t?"\u25B8 ":" ",q(Z.accent,t?Z.selBg:Z.bg2)],[`${U9[d.kind]} `.padEnd(7),q(Z.dim,t?Z.selBg:Z.bg2)],[d.title,q(t?Z.fg:Z.fg2,t?Z.selBg:Z.bg2,t?A.BOLD:0)],[` ${d.publisher}`,q(Z.dim,t?Z.selBg:Z.bg2)]],M-C0),U0)$.put(K+3+M-C0,u,U0.text,q(U0.tone==="ok"?Z.ok:U0.tone==="warn"?Z.warn:Z.info,t?Z.selBg:Z.bg2));let L=P+C;if(!X.plan)j?.push({rect:{x:K+2,y:u,w:M+2,h:1},onClick:()=>{X.sel=L},key:K9})}$.vline(O-2,T,E,q(Z.rule2,Z.bg2),"\u2502");let W=N[X.sel],R=z+Y-2-T;if(W&&X.docs&&W.docs)X.docRows=Math.max(1,R-4),H6($,O,T,_,R,Z,W,X.docScroll);else if(W)z6($,O,T,_,R,Z,W);let b=W?.docs?X.docs?" \xB7 d closes the docs":" \xB7 \u2325d docs":"",x=W?X.docs?`\u2191\u2193 scroll${b} \xB7 esc closes`:W.installed&&!W.installed.updateAvailable?`\u23CE install again \xB7 \u2191\u2193 move \xB7 \u21E5 next kind${b} \xB7 esc closes`:`\u23CE install \xB7 \u2191\u2193 move \xB7 \u21E5 next kind${b} \xB7 esc closes`:"\u2191\u2193 move \xB7 \u21E5 next kind \xB7 esc closes";return $.clip(K+3,z+Y-1,x,q(Z.dim),G-6),G9($,J,Z,X,j),{x:K+5+f(X.query),y:z+2}}function Y9($,J){if(J.localOffer!==void 0)return $.choice={row:J,sel:0},{kind:"none"};return{kind:"plan",row:J}}function N9($,J,Z=q5){let Q=$.market;if(!Q)return{kind:"none"};let{name:V,ctrl:j,alt:X,ch:U}=J;if(Q.plan){let D=Q.plan;if(D.running)return{kind:"none"};if(V==="escape"||j&&V==="c")return Q.plan=null,{kind:"none"};if(V==="enter"){if(D.outcome)return Q.plan=null,{kind:"none"};return D.running=!0,{kind:"install",plan:D}}return{kind:"none"}}if(Q.choice){let D=Q.choice;if(V==="escape"||j&&V==="c")return Q.choice=null,{kind:"none"};if(V==="up"||V==="down")return D.sel=D.sel===0?1:0,{kind:"none"};if(V==="enter")return Q.choice=null,{kind:"plan",row:D.row,local:D.sel===0};return{kind:"none"}}if(V==="escape"||j&&V==="m"){if(Q.docs)return Q.docs=!1,Q.docScroll=0,{kind:"none"};return z9($),{kind:"none"}}let G=D9(Q,Z),Y=Math.max(1,G.length),K=G[Q.sel];if(U==="d"&&X&&!j){if(Q.docs)return Q.docs=!1,Q.docScroll=0,{kind:"none"};if(!K?.docs)return{kind:"none"};return Q.docs=!0,Q.docScroll=0,K.docs.lines.length===0?{kind:"docs",row:K}:{kind:"none"}}if(V==="tab"||V==="shift-tab"){let D=y0.indexOf(Q.tab),H=V==="tab"?1:y0.length-1;return Q.tab=y0[(D+H)%y0.length],Q.sel=0,Q.docs=!1,Q.docScroll=0,{kind:"none"}}if(Q.docs){if(U==="d"&&!j&&!X)return Q.docs=!1,Q.docScroll=0,{kind:"none"};if(V==="up")return Q.docScroll=Math.max(0,Q.docScroll-1),{kind:"none"};if(V==="down")return Q.docScroll=Math.min(Q.docScroll+1,s5(K,Q.docRows)),{kind:"none"};if(V==="pageup")return Q.docScroll=Math.max(0,Q.docScroll-12),{kind:"none"};if(V==="pagedown")return Q.docScroll=Math.min(Q.docScroll+12,s5(K,Q.docRows)),{kind:"none"};if(V==="home")return Q.docScroll=0,{kind:"none"};if(V==="end")return Q.docScroll=s5(K,Q.docRows),{kind:"none"};if(V==="enter")return K?Y9(Q,K):{kind:"none"};return{kind:"none"}}if(V==="up")return Q.sel=(Q.sel-1+Y)%Y,{kind:"none"};if(V==="down")return Q.sel=(Q.sel+1)%Y,{kind:"none"};if(V==="pageup")return Q.sel=Math.max(0,Q.sel-10),{kind:"none"};if(V==="pagedown")return Q.sel=Math.min(Y-1,Q.sel+10),{kind:"none"};if(V==="home")return Q.sel=0,{kind:"none"};if(V==="end")return Q.sel=Y-1,{kind:"none"};if(V==="enter"){let D=G[Q.sel];return D?Y9(Q,D):{kind:"none"}}if(V==="backspace")return Q.query=[...Q.query].slice(0,-1).join(""),Q.sel=0,{kind:"none"};let z=V==="space"?" ":U;if(z&&!j&&!X)Q.query+=z,Q.sel=0;return{kind:"none"}}var K9,y0,U6,U9;var z5=k(()=>{$0();D0();X0();p();K9={type:"key",name:"enter"},y0=["all","mcp","skill","plugin"],U6=[{label:"install once \u2014 node starts it in ~0.4 s",hint:"npm install runs now, AFTER the plan is approved: the package's code lands under ~/.rovecode/mcp (typically 20\u201330 MB, once); no network needed to start"},{label:"run through npx at every start \u2014 as today",hint:"~2 s per start, re-resolves the package and asks the npm registry each time; nothing is installed now"}];U9={mcp:"mcp",skill:"skill",plugin:"plugin"}});function O9($,J){L0($,null),$.wizard={step:0,providers:J,selected:0,idTyped:"",urlTyped:"",urlField:!1,secret:"",keyAccepted:!1,models:[],modelSel:0,modelChecked:[],modelDefaultTo:void 0,modelTyped:"",modelsLoading:!1}}function D5($){$.wizard=null}function M6($){let J=[...$].length;return N6.repeat(Math.min(J,t5))+(J>t5?` ${J-t5} more`:"")}function O6($,J){return $<J?"\u2713":$===J?"\u25CF":"\u25CB"}function F6($){let J=$.providers[$.selected],Z=[];if($.step===0)return Z.push({text:"Which provider? \u2191\u2193 choose, \u23CE confirm.",tone:"head"}),$.providers.forEach((Q,V)=>Z.push({text:`${V===$.selected?"\u276F ":" "}${Q.label}${Q.configured?" \xB7 already set up":""}`,tone:V===$.selected?"accent":"normal"})),Z;if(J===void 0)return Z;if($.step===1){let Q=!$.urlField;if(Z.push({text:`${J.label.split(" (")[0]??J.label} \u2014 name it and point it at the server.`,tone:"head"}),Z.push({text:`Short name? ${$.idTyped}${Q?"\u258C":""}`,tone:Q?"normal":"dim",...Q?{caret:!0}:{}}),Z.push({text:`Base URL? ${$.urlTyped}${$.urlField?"\u258C":""}`,tone:$.urlField?"normal":"dim",...$.urlField?{caret:!0}:{}}),Z.push({text:"\u21E5 switches the field \xB7 \u23CE registers it and moves to the key",tone:"dim"}),$.error!==void 0)Z.push({text:$.error,tone:"warn"});return Z}if($.step===2){if(Z.push({text:`Paste the API key for ${J.label.split(" \u2014 ")[0]??J.label}.`,tone:"head"}),Z.push({text:"It is stored in the credentials file, never in the transcript.",tone:"dim"}),Z.push({text:"",tone:"dim"}),Z.push({text:M6($.secret)||"",tone:"normal",caret:!0}),$.error!==void 0)Z.push({text:$.error,tone:"warn"});return Z}if($.step===3){if(Z.push({text:`Which models on ${J.label.split(" \u2014 ")[0]??J.label}? Space checks, \u23CE confirms.`,tone:"head"}),$.modelsLoading&&$.models.length===0)return Z.push({text:"Fetching the model list from the endpoint\u2026",tone:"accent"}),Z;if($.models.length>0)$.models.forEach((Q,V)=>{let j=$.modelChecked.includes(Q.id),X=`${Q.active===!0?" \xB7 active":""}${Q.defaultModel===!0?" \xB7 default":""}`,U=j&&$.modelDefaultTo===Q.id?"\u2022":"";Z.push({text:`${V===$.modelSel?"\u276F ":" "}${j?"\u2713":"\u2610"} ${Q.id}${X}${U?` ${U}`:""}`,tone:V===$.modelSel?"accent":"normal"})});else Z.push({text:"No model list from this endpoint \u2014 type the model id:",tone:"dim"}),Z.push({text:$.modelTyped,tone:"normal",caret:!0});if($.error!==void 0)Z.push({text:$.error,tone:"warn"});return Z}return Z}function F9($,J,Z,Q,V){let j=Q.wizard;if(!j)return null;V?.push({rect:{x:0,y:0,w:J.w,h:J.h},onClick:()=>{}});let X=F6(j),U=Math.min(J.w-4,64),G=Math.max(10,Math.min(J.h-4,Math.max(M9.length,X.length)+5)),Y=Math.floor((J.w-U)/2),K=Math.max(1,Math.floor((J.h-G)/2));$.box(Y,K,U,G,q(Z.accent),Z.bg2),$.text(Y+2,K,[[" connect a model ",q(Z.accent,-1,A.BOLD)]]),$.put(Y+U-13,K," esc closes ",q(Z.dim,Z.bg2)),V?.push({rect:{x:Y,y:K,w:U,h:G},onClick:()=>{}});let z=13;M9.forEach((O,_)=>{let E=_===j.step;$.put(Y+2,K+2+_,`${O6(_,j.step)} ${O}`,E?q(Z.accent,Z.bg2,A.BOLD):_<j.step?q(Z.fg2,Z.bg2):q(Z.muted,Z.bg2))});let D=Y+2+z+2,H=Math.max(10,U-(D-Y)-3),N=G-3;X.slice(0,N).forEach((O,_)=>{let E=O.tone==="head"?q(Z.fg,Z.bg2,A.BOLD):O.tone==="warn"?q(Z.warn,Z.bg2):O.tone==="ok"?q(Z.ok,Z.bg2):O.tone==="accent"?q(Z.accent,Z.bg2):O.tone==="dim"?q(Z.muted,Z.bg2):q(Z.fg2,Z.bg2),I=O.text===""&&O.caret?"":O.text;$.clip(D,K+1+_,O.caret&&O.text===""?`${I}\u258C`:I,E,H+1)});let M=j.step>0?" \u2190 back":"";return $.put(Y+2,K+G-1,`\u23CE ${j.step===0?"choose":"next"}${M} esc cancel`,q(Z.dim,Z.bg2)),null}function W9($,J){let Z=$.wizard;if(!Z)return!1;let Q=J.replace(/\s+/g," ");if(Z.step===1)if(Z.urlField)Z.urlTyped+=Q;else Z.idTyped+=Q;else if(Z.step===2)Z.secret+=Q;else if(Z.step===3&&Z.models.length===0)Z.modelTyped+=Q;else return!0;return Z.error=void 0,!0}function _9($,J){let Z=$.wizard;if(!Z)return{kind:"none"};let{name:Q,ctrl:V,ch:j,alt:X}=J;if(Q==="escape"||V&&Q==="c")return D5($),{kind:"none"};if(Z.step===1){if(Q==="tab"||Q==="shift-tab")return Z.urlField=!Z.urlField,{kind:"none"}}if(Z.step===0||Z.step===3&&Z.models.length>0){let Y=Z.step===0?Z.providers.length:Z.models.length;if(Q==="up"||Q==="k"){if(Z.step===0)Z.selected=(Z.selected-1+Y)%Y;else Z.modelSel=(Z.modelSel-1+Y)%Y;return{kind:"none"}}if(Q==="down"||Q==="j"){if(Z.step===0)Z.selected=(Z.selected+1)%Y;else Z.modelSel=(Z.modelSel+1)%Y;return{kind:"none"}}if(Q==="tab"&&Z.step===3)return Z.modelSel=(Z.modelSel+1)%Y,{kind:"none"};if((Q==="space"||j===" "&&!V&&!X)&&Z.step===3)return _6(Z),{kind:"none"}}if(Q==="left"&&Z.step>0)return Z.step-=1,Z.error=void 0,{kind:"none"};if(Q==="enter")return W6($);if(Z.step===1||Z.step===2||Z.step===3&&Z.models.length===0&&!Z.modelsLoading){if(Q==="backspace"){if(Z.step===1)if(Z.urlField)Z.urlTyped=[...Z.urlTyped].slice(0,-1).join("");else Z.idTyped=[...Z.idTyped].slice(0,-1).join("");else if(Z.step===2)Z.secret=[...Z.secret].slice(0,-1).join("");else Z.modelTyped=[...Z.modelTyped].slice(0,-1).join("");return Z.error=void 0,{kind:"none"}}let Y=Q==="space"?" ":j;if(!Y||X||V)return{kind:"none"};if(Z.step===1)if(Z.urlField)Z.urlTyped+=Y;else Z.idTyped+=Y;else if(Z.step===2)Z.secret+=Y;else Z.modelTyped+=Y;return Z.error=void 0,{kind:"none"}}return{kind:"none"}}function W6($){let J=$.wizard,Z=J.providers[J.selected];if(J.step===0){if(Z===void 0)return{kind:"none"};J.error=void 0;let Q=Z.url!==void 0?1:Z.local===!0||Z.configured===!0?3:2;return J.step=Q,Q===3?{kind:"loadModels"}:{kind:"none"}}if(J.step===1){if(Z===void 0||Z.url===void 0)return{kind:"none"};let Q=J.idTyped.trim().toLowerCase();if(Q.length===0)return J.error="the short name is empty \u2014 it becomes the registry row's id",{kind:"none"};if(!/^[a-z0-9][a-z0-9._-]*$/.test(Q))return J.error=`"${Q}" won't work as an id \u2014 letters, digits, - _ . (myproxy, vllm-home)`,{kind:"none"};if(!/^https?:\/\//.test(J.urlTyped.trim()))return J.error=`"${J.urlTyped.trim()}" is not an http(s) URL \u2014 the base URL the server answers on`,{kind:"none"};return J.error=void 0,{kind:"registerEndpoint",id:Q,url:J.urlTyped.trim(),protocol:Z.url}}if(J.step===2){let Q=J.secret.trim();if(Q.length===0)return J.error="the key is empty \u2014 paste it, or \u2190 back to change provider",{kind:"none"};if(Z===void 0)return{kind:"none"};return J.error=void 0,{kind:"storeKey",provider:Z.key,secret:Q}}if(J.step===3){if(Z===void 0)return{kind:"none"};if(J.models.length>0){let V=J.models.filter((X)=>J.modelChecked.includes(X.id)).map((X)=>X.id);if(V.length===0)return J.error="no model checked \u2014 space checks a row, or \u2190 back to the key",{kind:"none"};J.error=void 0;let j=J.modelDefaultTo!==void 0&&V.includes(J.modelDefaultTo)?J.modelDefaultTo:V[0];return{kind:"confirmModels",provider:Z.key,models:V,makeDefault:j}}let Q=J.modelTyped.trim();if(Q.length===0)return J.error="no model chosen \u2014 pick a row or type the id",{kind:"none"};return J.error=void 0,{kind:"confirmModel",model:Q}}return{kind:"none"}}function P9($,J,Z){if(J)$.step=2,$.error=void 0;else $.error=Z??"the endpoint could not be registered"}function A9($,J,Z){if(J)$.keyAccepted=!0,$.step=3,$.modelsLoading=!0,$.error=void 0;else $.keyAccepted=!1,$.error=Z??"the key could not be stored"}function e5($,J){$.models=J,$.modelsLoading=!1,$.modelSel=0,$.modelChecked=J.filter((Q)=>Q.active===!0).map((Q)=>Q.id);let Z=J.find((Q)=>Q.defaultModel===!0);$.modelDefaultTo=Z!==void 0&&$.modelChecked.includes(Z.id)?Z.id:$.modelChecked[0],$.step=3,$.error=void 0}function _6($){let J=$.models[$.modelSel];if(J===void 0)return;let Q=$.modelChecked.includes(J.id)?$.modelChecked.filter((V)=>V!==J.id):[...$.modelChecked,J.id];if($.modelChecked=Q,$.modelDefaultTo===void 0||!Q.includes($.modelDefaultTo))$.modelDefaultTo=Q[0];$.error=void 0}var M9,N6="\u2022",t5=24;var H5=k(()=>{$0();X0();p();M9=["PROVIDER","ENDPOINT","KEY","MODEL"]});async function M5(){try{let[$,J]=await Promise.all([import("./registry-t6p8d4mn.js"),import("./install-avaqjjqq.js")]);if(typeof $.searchMarket!=="function"||typeof J.planInstall!=="function")return null;return{registry:$,install:J}}catch{return null}}function A6($){let J=$.install;if(!J)return"";if(J.kind==="mcp"){let Z=J.entry?.installs?.[0];if(!Z)return"";return Z.kind==="http"?`remote ${Z.url??""}`:[Z.command,...Z.args??[]].join(" ")}if(J.kind==="plugin")return`${J.git?"clone":"copy"} ${String(J.source??"")}`;if(J.kind==="skill"){if(J.files?.length)return`${J.files.length} file(s), written verbatim \u2014 runs nothing`;let Z=J.source;return Z?.git?`clone ${Z.git}${Z.subfolder?` (${Z.subfolder})`:""}`:"a SKILL.md the model reads when it matches"}return""}function E6($){let J=$.install;if(J?.kind!=="mcp")return[];return(J.entry?.installs??[]).slice(1).map((Z)=>Z.kind==="http"?`remote ${Z.url??""}`:`${Z.runtime??"stdio"}: ${[Z.command,...Z.args??[]].join(" ")}`)}function I6($){let J=$.install;if(J?.kind!=="mcp")return;let Z=J.entry?.installs?.[0];if(Z===void 0||typeof Z!=="object"||Z===null)return;return E9(Z)?.spec}function S6($){let J=I6($);return{...J!==void 0?{localOffer:J}:{},id:$.id,kind:$.kind,title:$.title,publisher:$.publisher,description:$.description,...$.version!==void 0?{version:$.version}:{},runs:A6($),env:$.env.map((Z)=>({name:Z.name,required:Z.required,secret:Z.secret,...Z.description!==void 0?{description:Z.description}:{}})),alternatives:E6($),pending:$.planNote??[],...$.installed?{installed:$.installed}:{},...$.docs?{docs:{source:$.docs.source,truncated:$.docs.truncated===!0,lines:typeof $.docs.body==="string"&&$.docs.body!==""?I9($.docs.body):[]}}:{}}}function I9($,J=96){let Z=$.replace(/\r\n?/g,`
|
|
8
|
-
`).replace(/<(script|style|iframe|object|embed|template|noscript)\b[\s\S]*?<\/\1\s*>/gi,"").replace(/<\/?[a-zA-Z][^>]*>/g,"").replace(L6,"").replace(/\t/g," ").replace(/^---\n[\s\S]*?\n---\n/,""),Q=[],V=!1;for(let j of Z.split(`
|
|
9
|
-
`)){if(/^\s*```/.test(j)){V=!V,Q.push({kind:"rule",text:""});continue}if(V){Q.push({kind:"code",text:j.slice(0,J)});continue}let X=/^(#{1,6})\s+(.*)$/.exec(j);if(X){Q.push({kind:"head",text:X[2].replace(/[`*]/g,"").slice(0,J)});continue}let U=j.replace(/\[([^\]]+)\]\([^)]*\)/g,"$1").replace(/[`*]/g,"");if(U.trim()===""){Q.push({kind:"blank",text:""});continue}let G="";for(let Y of U.split(/\s+/).filter(Boolean)){let K=Y.length>J?Y.slice(0,J):Y;if(!G){G=K;continue}if(G.length+1+K.length<=J)G+=` ${K}`;else Q.push({kind:"text",text:G}),G=K}if(G)Q.push({kind:"text",text:G})}return Q}function T6($){let J=Object.entries($).filter(([,V])=>!V.ok);if(J.length){let[V,j]=J[0];return{kind:"error",reason:J.length===1?`${V}: ${j.reason}`:`${V}: ${j.reason} (+${J.length-1} more)`}}let Z=Object.values($).find((V)=>V.ok&&V.from==="cache");if(Z){let V=Math.round(Z.ageMs/60000);return{kind:"offline",note:`showing cached results${V>0?`, ${V}m old`:""}`}}let Q=Object.values($).find((V)=>V.ok&&V.from==="skipped");if(Q)return{kind:"offline",note:Q.why};return{kind:"ready"}}async function S9($,J,Z={}){let Q=await M5();if(!Q)return{rows:[],status:{kind:"error",reason:$8},notes:[]};let V=await Q.registry.searchMarket("",Z.offline===!0?{offline:!0}:{}),j=V.items;try{j=Q.install.withInstalled(V.items,$,J)}catch{}return{rows:j.map(S6),status:T6(V.sources),notes:V.notes}}async function L9($){let J=await M5();if(!J||typeof J.registry.findItem!=="function")return null;let{item:Z}=await J.registry.findItem($.kind,$.id,{offline:!0}),Q=Z?.docs;if(!Q||typeof Q.body!=="string"||Q.body.trim()==="")return null;return{source:Q.source,truncated:Q.truncated===!0,lines:I9(Q.body)}}async function T9($,J,Z){let Q=await M5();if(!Q)return{error:$8};let j=(await Q.registry.searchMarket($.id,{offline:!0})).items.find((U)=>U.kind===$.kind&&U.id===$.id);if(!j)return{error:`${$.kind}:${$.id} is not in the catalog any more`};let X=Q.install.planInstall(j,{...J,...Z===!0?{local:!0}:{}});if("error"in X)return{error:X.error};return{row:$,title:`${X.item.kind}:${X.item.id} \u2014 ${X.item.title}`,target:X.target,scope:X.scope,preview:X.preview,asks:X.asks.map((U)=>({name:U.name,required:U.required,secret:U.secret})),pending:X.pending,...X.replaces!==void 0?{replaces:X.replaces}:{},...Z===!0?{local:!0}:{}}}async function R9($,J,Z={}){let Q=await M5();if(!Q)return{ok:!1,text:$8};let j=(await Q.registry.searchMarket($.id,{offline:!0})).items.find((K)=>K.kind===$.kind&&K.id===$.id);if(!j)return{ok:!1,text:`${$.kind}:${$.id} is not in the catalog any more`};let X={...J,...Z.local===!0?{local:!0}:{}},U=Q.install.planInstall(j,X);if("error"in U)return{ok:!1,text:U.error};if(U.asks.length>0)return{ok:!1,text:`${U.asks.map((z)=>z.name).join(", ")} must be typed where it can be masked \u2014 run: rovecode market install ${j.kind}:${j.id}`};let G=await Q.install.runInstall(U,{},X,Z.deps);if(!G.ok)return{ok:!1,text:G.error};let Y=[`installed into ${G.target}`];if(G.package){if(Y.push(`${G.package.name} ${G.package.version} installed once \u2192 ${G.package.prefix}${G.package.integrity!==void 0?" (integrity recorded)":""}`),G.package.missing?.length)Y.push(`record incomplete: ${G.package.missing.join("; ")}`)}if(G.envNames.length)Y.push(`export ${G.envNames.join(", ")}`);for(let K of U.pending)Y.push(`fill in ${K}`);if(G.next)Y.push(G.next);return{ok:!0,text:Y.join(" \xB7 ")}}var $8="the market module is not available in this build (src/market/ is still landing)",L6;var k9=k(()=>{P6();L6=/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f-\u009f]/g});function B9($,J){L0($,"context"),$.context={...J,scroll:0}}function b9($){$.context=null}function R6($,J){let Z=Math.max(1,J),Q=Math.max(0,Math.min(Z,Math.round((Number.isFinite($)?Math.max(0,$):0)*Z)));return"\u2588".repeat(Q)+"\xB7".repeat(Z-Q)}function k6($,J,Z){if(Z<=0||$<=0)return"";let Q=J>0?$/J:0;return"\u258F".repeat(Math.max(1,Math.min(Z,Math.round(Q*Z))))}function B6($,J){let Z=[],Q=Math.max(24,J);if(Z.push({text:$.model,tone:"head"}),$.window!==void 0){let G=$.fraction??0;Z.push({text:`${R6(G,Math.max(8,Math.min(28,Q-30)))} ~${o($.estimated)} of ${o($.window)} (${T0(G)})`,tone:$.nearLimit?"warn":"normal"}),Z.push({text:`${o($.remaining??0)} left${$.nearLimit?" \u2014 near the limit, compaction is due":""}`,tone:$.nearLimit?"warn":"dim"})}else Z.push({text:`~${o($.estimated)} tokens \u2014 this model's window is not in the catalog`,tone:"dim"});if($.scale.factor!==1)Z.push({text:`o200k counted ${o($.raw)}, scaled ${$.scale.factor}\xD7 for this model \u2014 ${$.scale.note}`,tone:"dim"});else Z.push({text:`o200k counted ${o($.raw)} \u2014 ${$.scale.note}`,tone:"dim"});if(!$.live)Z.push({text:"system prompt and tool schemas are not counted \u2014 this total is a floor",tone:"warn"});else Z.push({text:"MCP tools are not counted \u2014 their schemas exist only once a server is connected",tone:"dim"});Z.push({text:"",tone:"dim"});let V=[...$.slices].sort((G,Y)=>Y.tokens-G.tokens),j=Math.max(10,...V.map((G)=>G.label.length)),X=V[0]?.share??0;for(let G of V){let Y=`${G.label.padEnd(j)} ${o(G.tokens).padStart(9)} ${T0(G.share).padStart(6)}`,K=Q-f(Y)-(G.note?G.note.length+4:1);Z.push({text:`${Y} ${k6(G.share,X,Math.min(12,K))}${G.note?` \u2014 ${G.note}`:""}`,tone:G.note?"dim":"normal"})}if(V.length===0)Z.push({text:"nothing in the window yet",tone:"dim"});if($.images>0)Z.push({text:`${"images".padEnd(j)} ${String($.images).padStart(9)} \u2014 not estimated; image tokens are provider-specific`,tone:"dim"});if(Z.push({text:"",tone:"dim"}),$.drift){let G=$.drift;Z.push({text:`drift provider counted ${o(G.reported)} for the last turn's prompt, we estimated ${o(G.estimated)}`,tone:G.beyondTolerance?"warn":"normal"}),Z.push({text:` ${o(Math.abs(G.delta))} ${G.delta>0?"more":"less"} than we estimate (${T0(G.fraction)})${G.beyondTolerance?` \u2014 beyond the ${T0($.tolerance)} tolerance; the meter reads ${G.delta>0?"LOW":"HIGH"} here`:""}`,tone:G.beyondTolerance?"warn":"dim"})}else Z.push({text:"drift no turn reported usage yet \u2014 nothing to compare the estimate against",tone:"dim"});Z.push({text:"",tone:"dim"});let U=$.billed;return Z.push({text:`billed ${o(U.input)} in \xB7 ${o(U.output)} out \xB7 ${o(U.cacheRead)} cache read \xB7 ${o(U.cacheWrite)} cache written`,tone:"normal"}),Z.push({text:$.costUsd!==void 0?`cost $${$.costUsd.toFixed(4)}${$.unpricedTurns>0?` \u2014 lower bound, ${$.unpricedTurns} turn${$.unpricedTurns>1?"s":""} unpriced`:""}`:`cost unknown \u2014 no pricing for ${$.model}`,tone:$.costUsd===void 0?"dim":"normal"}),Z}function C9($,J){if(!$)return;if(!$.beyondTolerance)return{text:`est \xB1${T0($.fraction)} of provider`,warn:!1};return{text:`est reads ${$.delta>0?"LOW":"HIGH"} ${T0($.fraction)}`,warn:!0}}function v9($,J,Z,Q,V){let j=Q.context;if(!j)return null;V?.push({rect:{x:0,y:0,w:J.w,h:J.h},onClick:()=>b9(Q)});let X=Math.min(J.w-6,92),U=X-6,G=B6(j,U),Y=Math.max(10,Math.min(J.h-4,G.length+4)),K=Math.floor((J.w-X)/2),z=Math.max(1,Math.floor((J.h-Y)/2));$.box(K,z,X,Y,q(Z.accent),Z.bg2),$.text(K+2,z,[[" context ",q(Z.accent,-1,A.BOLD)]]),$.put(K+X-14,z," esc closes ",q(Z.dim)),V?.push({rect:{x:K,y:z,w:X,h:Y},onClick:()=>{}});let D=Y-3,H=Math.max(0,Math.min(Math.max(0,G.length-D),j.scroll));if(j.scroll=H,G.slice(H,H+D).forEach((N,M)=>{let O=N.tone==="head"?q(Z.fg,Z.bg2,A.BOLD):N.tone==="warn"?q(Z.warn,Z.bg2):N.tone==="dim"?q(Z.muted,Z.bg2):q(Z.fg2,Z.bg2);$.clip(K+3,z+1+M,N.text,O,U)}),G.length>D)$.put(K+X-22,z+Y-1,` ${H+D} of ${G.length} lines `,q(Z.dim,Z.bg2));return null}function f9($,J,Z){let Q=$.context;if(!Q)return;let{name:V,ctrl:j}=J;if(V==="escape"||V==="enter"||j&&V==="g"){b9($);return}let X=Math.max(1,Z-1);if(V==="up"||V==="k")Q.scroll-=1;else if(V==="down"||V==="j")Q.scroll+=1;else if(V==="pageup")Q.scroll-=X;else if(V==="pagedown"||V==="space")Q.scroll+=X;else if(V==="home")Q.scroll=0;else if(V==="end")Q.scroll=Number.MAX_SAFE_INTEGER;Q.scroll=Math.max(0,Q.scroll)}var o=($)=>$.toLocaleString("en-US"),T0=($)=>`${($*100).toFixed(1)}%`;var u0=k(()=>{$0();D0();X0();p()});function y9($,J){if(!$)return{};try{let Z=$.registry.list().map((X)=>X.schema),V=$.buildDef({...J,effort:"auto"}).systemPrompt,j=typeof V==="string"?V:typeof V==="function"?String(V({})):void 0;if(j===void 0)return{};return{system:j,toolSchemas:JSON.stringify(Z)}}catch{return{}}}async function g9($){let J=$.tolerance??b6,Z=`${$.current.provider}/${$.current.model}`,Q;try{Q=($.report??(await import("./context-report-kt01pw8y.js")).contextReport)({messages:$.messages,current:$.current,lookup:$.lookup,...$.fixed.system!==void 0?{system:$.fixed.system}:{},...$.fixed.toolSchemas!==void 0?{toolSchemas:$.fixed.toolSchemas}:{}})}catch{return{model:Z,raw:0,estimated:0,scale:{factor:1,measured:!1,note:"the context report could not be built"},slices:[],images:0,billed:{input:0,output:0,cacheRead:0,cacheWrite:0},unpricedTurns:0,live:!1,tolerance:J}}let V=Q.totals;return{model:Z,...Q.window!==void 0?{window:Q.window}:{},raw:Q.estimated,estimated:Q.corrected,scale:Q.scale,...Q.remaining!==void 0?{remaining:Q.remaining}:{},...Q.fraction!==void 0?{fraction:Q.fraction}:{},...Q.nearLimit!==void 0?{nearLimit:Q.nearLimit}:{},slices:Q.slices.map((j)=>({label:j.label,tokens:j.tokens,share:j.share,...j.note?{note:j.note}:{}})),images:Q.images,...Q.drift?{drift:{...Q.drift}}:{},billed:{input:V.inputTokens??0,output:V.outputTokens??0,cacheRead:V.cacheReadTokens??0,cacheWrite:V.cacheWriteTokens??0},...Q.costUsd!==void 0?{costUsd:Q.costUsd}:{},unpricedTurns:Q.unpricedTurns,live:$.fixed.system!==void 0,tolerance:J}}var b6=0.05;var u9=()=>{};function x0($,J,Z,Q,V,j){if(!(Q>V&&Z>=2))return{x:$,trackY:J,trackH:Z,thumbY:J,thumbH:0,visible:!1};let U=Math.max(1,Math.round(Z*V/Q)),G=Math.max(1,Q-V),Y=Math.max(0,Z-U),K=J+Math.round(Y*Math.max(0,j)/G),z=Math.min(K,J+Z-U);return{x:$,trackY:J,trackH:Z,thumbY:z,thumbH:U,visible:!0}}function C6($,J,Z){if(!J.visible)return;let Q=q(Z.rule),V=q(Z.dim);for(let j=0;j<J.trackH;j++){let X=J.trackY+j,U=X>=J.thumbY&&X<J.thumbY+J.thumbH;$.put(J.x,X,U?"\u258C":"\u2502",U?V:Q)}}function R0($,J,Z,Q,V,j,X,U){let G=x0(Z,Q,V,j,X,U);return C6($,G,J),G}function x9($){return{x:$.x,y:$.thumbY,w:1,h:$.thumbH}}var p0=k(()=>{Q0()});function l9($){w9=$}function m9($){if(/\.(?:[cm]?[jt]sx?)$/.test($))return"ts";if($.endsWith(".json"))return"json";if($.endsWith(".md"))return"md";return"text"}function y6($,J,Z=-1){switch($){case"kw":return q(J.fg,Z,A.BOLD);case"str":case"num":case"dec":return q(J.str,Z);case"cm":return q(J.muted,Z,A.ITALIC);case"ty":return q(J.ty,Z);case"fn":return q(J.fg,Z);default:return q(J.fg2,Z)}}function F5($,J,Z,Q,V,j,X,U,G,Y){if(X<=0)return J;if(Y!==void 0)return $.put(J,Z,Q,q(Y,j),X);let K=J,z=J+X;for(let[D,H]of G(Q,V)){if(K>=z)break;let N=typeof H==="string"?y6(H,U,j):H?{...H,bg:H.bg>=0?H.bg:j}:q(U.fg2,j);K=$.put(K,Z,D,N,z-K)}return K}function u6($,J,Z){let Q=$.code;if(Q.mode==="run"){if(!Q.run)return{title:"run",extra:[]};return{title:"run",extra:[Q.run.status==="running"?[N0(Z),q(J.accent)]:Q.run.status==="ok"?["exit 0",q(J.muted)]:["failed",q(J.err)]]}}if(Q.mode==="search"){if(!Q.search)return{title:"search",extra:[]};return{title:"search",extra:[[Q.search.query,q(J.str)],[` ${Q.search.lines.length} results`,q(J.muted)]]}}if(Q.mode==="agents"){let U=$.crew.filter((z)=>z.status==="queued"||z.status==="running").length,G=$.crew.filter((z)=>z.status==="done").length,Y=$.crew.filter((z)=>z.status==="failed").length;if(!$.crew.length)return{title:"agents",extra:[["crew",q(J.muted)]]};let K=[[`${U} running`,q(U?J.accent:J.muted)],[` ${G} done`,q(J.muted)]];if(Y)K.push([` ${Y} failed`,q(J.err)]);return{title:"agents",extra:K}}let V=g6($),j=Q.mode==="diff"?"diff":"code";if(!V)return{title:j,extra:[]};let X=[[V,q(J.fg2)]];if(Q.diff&&Q.diff.file===V){if(Q.diff.add||Q.diff.del)X.push([" ",q(-1)],[Q.diff.add?`+${Q.diff.add}`:"",q(J.ok)],[Q.diff.del?`${Q.diff.add?" ":""}\u2212${Q.diff.del}`:"",q(J.err)]);if(Q.diff.base==="head")X.push([" vs HEAD",q(J.muted)])}if(Z8($)&&Q.mode==="code")X.push([` ${$.activity.state.toLowerCase()}`,q(J.accent)]);return{title:j,extra:X}}function x6($){let J=new Map;for(let Z of $){let Q=Z.newStart,V=0;while(V<Z.rows.length){if(Z.rows[V].op===" "){Q++,V++;continue}let j=[],X=!1;while(V<Z.rows.length&&Z.rows[V].op!==" "){if(Z.rows[V].op==="-")X=!0;else j.push(Q++);V++}for(let U of j)J.set(U,X?"changed":"added")}}return J}function W5($,J){let Z=$.code;if(Z.mode==="code")return Z.content===null?0:V5(Z.content).length;if(Z.mode==="diff")return Z.diff?c9(Z.diff.hunks,J>110).length:0;if(Z.mode==="search")return Z.search?Z.search.lines.length:0;return 0}function d0($,J){let Z=a($),Q=Z.h,V=Z.w-V0-2,j=W5(J,V),X=Math.max(0,j-Q);if(J.code.mode==="code"&&J.code.hl&&Z8(J))return Math.min(X,Math.max(0,J.code.hl[0]-1-Math.floor(Q/2)));return Math.max(0,Math.min(J.code.scroll,X))}function p6($,J,Z,Q,V,j){$.box(J.x,J.y,J.w,J.h,q(Q.frameDim)),v6.forEach(([z,D],H)=>{if(J.y+1+H>=J.y+J.h-1)return;let N=Z.code.mode===z||z==="code"&&Z.code.mode==="search";$.put(J.x+1,J.y+1+H,D,q(N?Q.accent:Q.dim,-1,N?A.BOLD:0))});let X=J.y+6,U=J.h-7;if(U<3||Z.code.mode!=="code"&&Z.code.mode!=="diff"||Z.code.content===null||!Z.code.file)return;let G=Math.max(1,V5(Z.code.content).length),Y=a9(Z),K=Math.min(U,G);for(let z=0;z<K;z++){let D=Math.floor(z/K*G),H=Math.max(D+1,Math.floor((z+1)/K*G)),N=Q.rule;for(let _=D;_<H;_++){let E=Y.get(_+1);if(E==="added")N=Q.ok;else if(E==="changed"&&N!==Q.ok)N=Q.warn}let M=H>V&&D<V+j,O=N!==Q.rule;$.put(J.x+1,X+z,M?"\u258C":"\u258F",q(O?N:M?Q.rule2:Q.rule))}}function d6($,J,Z,Q,V,j){let X=Z.code.file;if(!X){$.put(J.x,J.y,G0.code,q(Q.muted),J.w);return}if(Z.code.content===null){$.clip(J.x,J.y,`cannot read ${X}`,q(Q.muted),J.w);return}let U=V5(Z.code.content);if(!U.length){$.put(J.x,J.y,"(empty)",q(Q.dim),J.w);return}let G=m9(X),Y=a9(Z),K=Z.code.hl,z=Z8(Z)?`\u25C2 ${Z.activity.state.toLowerCase()}`:null,D=Math.max(3,String(U.length).length);for(let H=0;H<J.h;H++){let N=V+H,M=U[N];if(M===void 0)break;let O=J.y+H,_=K!==null&&N+1>=K[0]&&N+1<=K[1],E=Y.get(N+1),I=_?Q.hlBg:-1;if(_)$.tint(J.x,O,J.w,1,I);if($.put(J.x,O,String(N+1).padStart(D),q(_?Q.accent:Q.dim,I)),$.put(J.x+D+1,O,E?"\u258E":" ",q(E==="changed"?Q.warn:Q.ok,I)),F5($,J.x+D+3,O,M,G,I,J.w-D-3,Q,j),z&&_&&K!==null&&N+1===K[0]&&J.w>24)$.put(J.x+J.w-z.length,O,z,q(Q.accent,I))}}function p9($,J,Z,Q,V){return $.put(J,Z,Q?" PASS ":" FAIL ",q(V.bg,Q?V.ok:V.err,A.BOLD))}function w6($,J,Z){if(Z<=0)return[];let Q=c5("$ "+$,J);return Q.length>Z?[...Q.slice(0,Z-1),O5(Q.length-Z+1)]:Q}function l6($,J,Z,Q,V){let j=Z.code.run;if(!j){$.put(J.x,J.y,"nothing has run yet",q(Q.muted),J.w);return}let X=w6(j.cmd,J.w,J.h>=4?Math.min(h6,J.h-2):0);X.forEach((z,D)=>$.put(J.x,J.y+D,z,z.startsWith("\u2026")?q(Q.dim):q(Q.fg,-1,A.BOLD),J.w));let U=[];for(let z of j.lines)for(let[D,H]of c5(z,J.w).entries())U.push({kind:"out",text:H,first:D===0});U.push({kind:"tail",text:"",first:!0});let G=J.h-X.length,Y=Math.max(0,U.length-G),K=J.y+J.h-Math.min(U.length,G);for(let z=0;Y+z<U.length;z++){let D=U[Y+z],H=K+z;if(D.kind==="tail"){if(j.status==="running")$.text(J.x,H,[[N0(V),q(Q.accent)],[" running",q(Q.muted)]],J.w);else{let M=p9($,J.x,H,j.status==="ok",Q);$.put(M,H,j.status==="ok"?" exit 0":" non-zero exit",q(Q.muted),J.x+J.w-M)}continue}let N=D.first?/^\s*(PASS|FAIL)\b\s?(.*)$/.exec(D.text):null;if(N){let M=p9($,J.x,H,N[1]==="PASS",Q);$.put(M+1,H,N[2]??"",q(Q.fg),J.x+J.w-M-1);continue}$.put(J.x,H,D.text,q(Q.fg2),J.w)}}function m6($,J,Z,Q,V,j){let X=Z.code.search;if(!X){$.put(J.x,J.y,"no search yet",q(Q.muted),J.w);return}let U=Math.min(26,Math.floor(J.w*0.4)),G=J.y;for(let K=V;K<X.lines.length&&G<J.y+J.h;K++,G++){let z=X.lines[K],D=/^(\S+?:\d+(?::\d+)?):\s?(.*)$/.exec(z);if(D)$.clip(J.x,G,D[1],q(Q.muted),U),F5($,J.x+U+1,G,(D[2]??"").trimStart(),"ts",-1,J.w-U-1,Q,j);else $.text(J.x,G,[["\xB7 ",q(Q.dim)],[z,q(Q.fg2)]],J.w)}let Y=X.lines.length?`${X.lines.length} result${X.lines.length===1?"":"s"}`:"no results";if(G<J.y+J.h)$.put(J.x,Math.min(G+(G>J.y?1:0),J.y+J.h-1),Y,q(Q.muted),J.w)}function c9($,J){let Z=[];for(let Q of $){let{oldStart:V,newStart:j}=Q,X=Q.rows.map((K)=>({op:K.op,text:K.text,an:K.op==="+"?null:V++,bn:K.op==="-"?null:j++})),U=X.filter((K)=>K.op!=="+").length,G=X.filter((K)=>K.op!=="-").length;if(Z.push({t:"hunk",text:`@@ -${Q.oldStart},${U} +${Q.newStart},${G} @@`}),!J){for(let K of X)Z.push({t:"line",...K});continue}let Y=0;while(Y<X.length){if(X[Y].op===" "){Z.push({t:"pair",l:X[Y],r:X[Y]}),Y++;continue}let K=[],z=[];while(Y<X.length&&X[Y].op==="-")K.push(X[Y++]);while(Y<X.length&&X[Y].op==="+")z.push(X[Y++]);for(let D=0;D<Math.max(K.length,z.length);D++)Z.push({t:"pair",l:K[D]??null,r:z[D]??null})}}return Z}function d9($,J,Z,Q,V,j,X,U,G){if(!V||Q<8)return;let Y=V.op!==" ",K=!Y?-1:j==="add"?U.addBg:U.delBg;if(K>=0)$.tint(J,Z,Q,1,K);$.put(J,Z,String((j==="del"?V.an:V.bn)??"").padStart(4),q(U.dim,K)),$.put(J+5,Z,Y?j==="add"?"+":"\u2212":" ",q(j==="add"?U.ok:U.err,K)),F5($,J+7,Z,V.text,X,K,Q-7,U,G,j==="del"&&Y?U.muted:void 0)}function a6($,J,Z,Q,V,j,X,U){if(V.t==="hunk"){$.put(J,Z,V.text,q(X.dim),Q);return}if(V.t==="pair"){let z=Math.floor((Q-1)/2);d9($,J,Z,z,V.l,"del",j,X,U),d9($,J+z+1,Z,Q-z-1,V.r,"add",j,X,U);return}let G=V.op==="+",Y=V.op==="-",K=G?X.addBg:Y?X.delBg:-1;if(K>=0)$.tint(J,Z,Q,1,K);$.put(J,Z,String(V.an??"").padStart(4)+" "+String(V.bn??"").padStart(4),q(X.dim,K),Q),$.put(J+10,Z,G?"+":Y?"\u2212":" ",q(G?X.ok:X.err,K),Math.max(0,Q-10)),F5($,J+12,Z,V.text,j,K,Q-12,X,U,Y?X.muted:void 0)}function c6($,J,Z,Q,V,j){let X=Z.code.diff;if(!X||!X.hunks.length){$.put(J.x,J.y,"no changes in this file",q(Q.muted),J.w);return}let U=c9(X.hunks,J.w>110),G=m9(X.file);for(let Y=0;Y<J.h;Y++){let K=U[V+Y];if(!K)break;a6($,J.x,J.y+Y,J.w,K,G,Q,j)}}function i9($){let J=[],Z=null;for(let Q of $.split(/\r?\n/)){let V=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/.exec(Q);if(V){Z={rows:[],oldStart:Number(V[1]),newStart:Number(V[2])},J.push(Z);continue}if(!Z)continue;let j=Q[0];if(j==="+"||j==="-"||j===" ")Z.rows.push({op:j,text:Q.slice(1)})}return J}function i6($,J,Z,Q,V){let j=Z.crew.length;$.put(J.x,J.y,`crew: ${j} task${j===1?"":"s"}`,q(j?Q.fg2:Q.muted),J.w),Z.crew.forEach((X,U)=>{let G=J.y+2+U;if(G>=J.y+J.h)return;let Y=X.status==="running"?N0(V):X.status==="queued"?"\u25C7":X.status==="done"?"\u25C6":X.status==="failed"?"\xD7":"\u2212",K=X.status==="running"?Q.accent:X.status==="done"?Q.ok:X.status==="failed"?Q.err:Q.dim,z=X.status.length;$.text(J.x,G,[[Y+" ",q(K)],[X.label,q(Q.fg2)]],Math.max(0,J.w-z-2)),$.put(J.x+J.w-z,G,X.status,q(X.status==="failed"?Q.err:X.status==="done"?Q.ok:Q.muted))})}function n9($,J,Z,Q,V,j={}){if(J.w<4||J.h<3)return;let{title:X,extra:U}=u6(Z,Q,V),G=e($,J,X,Z.focus==="code",U,Q),Y={x:G.x+G.w-V0,y:G.y,w:V0,h:G.h},K={x:G.x,y:G.y,w:G.w-V0-2,h:G.h},z=d0(J,Z);if(K.w>=6&&K.h>=1){let D=j.tokenize??f6;switch(Z.code.mode){case"run":l6($,K,Z,Q,V);break;case"search":m6($,K,Z,Q,z,D);break;case"agents":(w9??i6)($,K,Z,Q,V);break;case"diff":c6($,K,Z,Q,z,D);break;default:d6($,K,Z,Q,z,D)}}if(G.w>=V0+2&&K.h>=2&&(Z.code.mode==="code"||Z.code.mode==="diff"||Z.code.mode==="search")){let D=W5(Z,K.w);R0($,Q,G.x+G.w-V0-1,G.y,K.h,D,K.h,z)}if(Y.h>=2&&G.w>=V0)p6($,Y,Z,Q,z,K.h)}var V0=3,v6,f6=($)=>[[$,"plain"]],w9=null,Z8=($)=>$.running&&($.activity.state==="READING"||$.activity.state==="EDITING"),g6=($)=>$.code.mode==="diff"&&$.code.diff?$.code.diff.file:$.code.file,a9=($)=>$.code.diff&&$.code.diff.file===$.code.file?x6($.code.diff.hunks):new Map,h6=3;var _5=k(()=>{p();$0();J8();h9();p0();v6=[["code","\u25A4"],["diff","\xB1"],["run","$"],["agents","\u2237"]]});import{diffLines as n6}from"diff";function s9($,J){if(J==="md")return r6($);if(J==="text")return[[$,"plain"]];let Z=[],Q=0,V;o9.lastIndex=0;while(V=o9.exec($)){if(V.index>Q)Z.push([$.slice(Q,V.index),"plain"]);let j=V[0],X;if(V[1])X="cm";else if(V[2])X=J==="json"&&/^\s*:/.test($.slice(V.index+j.length))?"key":"str";else if(V[3])X="num";else if(V[4]){let U=$[V.index-1],G=$.slice(V.index+j.length);if(j[0]==="@")X="dec";else if(o6.has(j))X="kw";else if(U===".")X="prop";else if(/^\s*\(/.test(G)||/^</.test(G)&&/^[a-z]/.test(j))X="fn";else if(/^[A-Z]/.test(j))X="ty";else if(/^\??:/.test(G))X="prop";else X="id"}else if(V[5]||V[6])X="pu";else X="op";Z.push([j,X]),Q=V.index+j.length}if(Q<$.length)Z.push([$.slice(Q),"plain"]);return Z}function r6($){if(/^#{1,6}\s/.test($))return[[$,"kw"]];if(/^\s{4}/.test($))return[[$,"str"]];let J=[],Z=0,Q,V=/`[^`]+`/g;while(Q=V.exec($)){if(Q.index>Z)J.push([$.slice(Z,Q.index),"plain"]);J.push([Q[0],"str"]),Z=Q.index+Q[0].length}if(Z<$.length)J.push([$.slice(Z),"plain"]);return J}function s6($){let J=[],Z=0,Q=0;for(let V of $){let j=V.value.split(`
|
|
10
|
-
`);if(j.length>V.count)j.pop();for(let X of j)if(V.added)J.push({t:"ins",text:X,bn:++Q});else if(V.removed)J.push({t:"del",text:X,an:++Z});else J.push({t:"eq",text:X,an:++Z,bn:++Q})}return J}function t9($,J){return s6(n6($,J))}function r9($,J,Z){let Q=$.slice(J,Z),V=null,j=null,X=0,U=0;for(let G of Q){if(G.an){if(V==null)V=G.an;X++}if(G.bn){if(j==null)j=G.bn;U++}}return{ops:Q,as:V??0,bs:j??0,ac:X,bc:U}}function $$($,J){if(!isFinite(J))return $.length?[r9($,0,$.length)]:[];let Z=[],Q=0;while(Q<$.length){if($[Q].t==="eq"){Q++;continue}let V=Math.max(0,Q-J),j=Q+1,X=Q+1;while(X<$.length){if($[X].t!=="eq"){j=X+1,X++;continue}let U=X;while(U<$.length&&$[U].t==="eq")U++;if(U<$.length&&U-X<=J*2){X=U;continue}break}j=Math.min($.length,j+J),Z.push(r9($,V,j)),Q=j}return Z}function J$($){return{rows:$.ops.map((J)=>({op:J.t==="ins"?"+":J.t==="del"?"-":" ",text:J.text})),oldStart:$.as,newStart:$.bs}}function Y0($,J){$=$.toLowerCase(),J=J.toLowerCase();let Z=0,Q=0,V=-2,j=[];for(let X=0;X<J.length&&Z<$.length;X++)if(J[X]===$[Z])j.push(X),Q+=(V===X-1?3:1)+(X===0||J[X-1]===" "||J[X-1]==="/"?2:0),V=X,Z++;return Z===$.length?{score:Q,idx:j}:null}var o6,o9,e9=($)=>{let J=0,Z=0;for(let Q of $)if(Q.t==="ins")J++;else if(Q.t==="del")Z++;return{a:J,d:Z}};var h0=k(()=>{o6=new Set("import export from const let var function return if else async await new type interface extends implements class throw try catch finally for while of in as default void typeof instanceof null undefined true false this readonly declare satisfies keyof enum switch case break continue do yield static private public protected".split(" ")),o9=/(\/\/.*)|("(?:[^"\\\n]|\\.)*"|'(?:[^'\\\n]|\\.)*'|`(?:[^`\\]|\\.)*`)|(\b\d[\d_]*(?:\.\d+)?\b)|(@?[A-Za-z_$][\w$]*)|([{}()[\]])|([;,.:])|(=>|\?\?|\?\.|[<>=!+\-*/%&|^~?]+)/g});import{spawn as t6,spawnSync as P3}from"child_process";function J7($={}){let J=$.timeoutMs??e6,Z=$.argv??((Q,V)=>["git","-C",V,...Q]);return(Q,V,j)=>new Promise((X)=>{if(j?.aborted){X(null);return}let U=!1,G=(H)=>{if(!U)U=!0,j?.removeEventListener("abort",K),X(H)},Y,K=()=>{Y?.kill("SIGKILL")};try{let[H,...N]=Z(Q,V);Y=t6(H??"git",N,{timeout:J,killSignal:"SIGKILL",windowsHide:!0,stdio:["ignore","pipe","ignore"]})}catch{G(null);return}j?.addEventListener("abort",K,{once:!0});let z=[],D=0;Y.stdout?.on("data",(H)=>{if(D+=H.length,D>Z$)Y.kill("SIGKILL");else z.push(H)}),Y.on("error",()=>G(null)),Y.on("close",(H,N)=>G(H===null||N!==null||D>Z$?null:{status:H,stdout:Buffer.concat(z).toString("utf8")}))})}async function w0($,J,Z){try{let Q=await $(J,Z);return Q&&Q.status===0?Q.stdout:null}catch{return null}}async function Q8($,J=j0){let Z=(await w0(J,["rev-parse","--abbrev-ref","HEAD"],$))?.trim();if(!Z)return(await w0(J,["symbolic-ref","--short","-q","HEAD"],$))?.trim()||null;if(Z!=="HEAD")return Z;return(await w0(J,["rev-parse","--short","HEAD"],$))?.trim()||"HEAD"}function Z7($){if($.length<2||!$.startsWith('"')||!$.endsWith('"'))return $;let J=$.slice(1,-1),Z=[];for(let Q=0;Q<J.length;Q++){let V=J[Q];if(V!=="\\"){Z.push(...Buffer.from(V,"utf8"));continue}let j=J[Q+1]??"";if(/[0-7]/.test(j)){let X=/^[0-7]{1,3}/.exec(J.slice(Q+1))[0];Z.push(parseInt(X,8)&255),Q+=X.length;continue}Z.push(j==="n"?10:j==="t"?9:j==="r"?13:j.charCodeAt(0)||92),Q++}return Buffer.from(Z).toString("utf8")}function Q7($,J){if($==="!"&&J==="!")return null;if($==="?"&&J==="?")return"A";if($==="D"||J==="D")return"D";if($==="A")return"A";return"M"}function V7($){let J=new Map,Z=$.includes("\x00"),Q=Z?$.split("\x00"):$.split(/\r?\n/);for(let V=0;V<Q.length;V++){let j=Q[V];if(j.length<4)continue;let X=j[0],U=j[1],G=j.slice(3);if(X==="R"||U==="R"||X==="C"||U==="C")if(Z)V++;else{let K=G.indexOf(" -> ");if(K>=0)G=G.slice(K+4)}if(!Z)G=Z7(G);if(G=V$(G),!G||G.startsWith("../"))continue;let Y=Q7(X,U);if(Y)J.set(G,Y)}return J}async function V8($,J=j0){let Z=await w0(J,$7,$);return Z===null?null:V7(Z)}function j7($){let J=V$($);return!J||J.startsWith("../")?null:`HEAD:./${J}`}async function j$($,J,Z=j0){let Q=j7(J);return Q===null?null:w0(Z,["show",Q],$)}var e6=5000,Z$=67108864,$7,j0,Q$=($)=>(J,Z)=>Promise.resolve().then(()=>$(J,Z)),V$=($)=>$.replace(/\\/g,"/").replace(/^\.\/+/,"");var j8=k(()=>{$7=["status","--porcelain=v1","-z","--untracked-files=all"];j0=J7()});function U8($,J){let Z=(J?Number(J):1)-1;return{type:"key",name:$,shift:!!(Z&1),alt:!!(Z&2),ctrl:!!(Z&4)}}function G$($,J=""){let Z=J+$,Q=[],V=0;while(V<Z.length){let j=Z[V];if(j==="\x1B"){let G=Z.slice(V);if(G.startsWith(X8)){let H=Z.indexOf(X$,V+X8.length);if(H<0)return{events:Q,rest:G};Q.push({type:"paste",text:Z.slice(V+X8.length,H)}),V=H+X$.length;continue}let Y;if(Y=G7.exec(G)){Q.push({type:"mouse",b:+Y[1],x:+Y[2]-1,y:+Y[3]-1,press:Y[4]==="M"}),V+=Y[0].length;continue}if(Y=Y7.exec(G)){Q.push(U8(X7[Y[1]]??"unknown",Y[2])),V+=Y[0].length;continue}if(Y=K7.exec(G)){Q.push(U8(U$[Y[3]]??"unknown",Y[2])),V+=Y[0].length;continue}if(Y=q7.exec(G)){Q.push(U8(U$[Y[1]]??"unknown",void 0)),V+=Y[0].length;continue}if(G.length===1){Q.push({type:"key",name:"escape"}),V++;continue}let K=Z.codePointAt(V+1);if(K<32||K===127){Q.push({type:"key",name:"escape"}),V++;continue}let z=String.fromCodePoint(K);if(z!=="["&&z!=="O"){Q.push({type:"key",name:z.toLowerCase(),alt:!0,ch:z}),V+=1+z.length;continue}let D=V+2;while(D<Z.length&&!z7.test(Z[D]))D++;if(D>=Z.length){if(G.length>32){V=Z.length;continue}return{events:Q,rest:G}}V=D+1;continue}if(j==="\r"||j===`
|
|
11
|
-
`){Q.push({type:"key",name:"enter"}),V++;continue}if(j==="\t"){Q.push({type:"key",name:"tab"}),V++;continue}if(j==="\x7F"||j==="\b"){Q.push({type:"key",name:"backspace"}),V++;continue}let X=j.charCodeAt(0);if(X<32){Q.push({type:"key",name:U7[X]??String.fromCharCode(X+96),ctrl:!0}),V++;continue}let U=String.fromCodePoint(Z.codePointAt(V));Q.push({type:"key",name:U,ch:U}),V+=U.length}return{events:Q,rest:""}}function P5($){if(!$.press)return"release";let J=$.b&-29;if(J===64)return"wheel-up";if(J===65)return"wheel-down";if(($.b&31)!==0)return"other";return $.b&32?"drag":"click"}function Y$($=!0){return y+"?1049h"+y+"?25l"+y+"?7l"+y+"2J"+y+"H"+($?y+"?1000h"+y+"?1002h"+y+"?1006h":"")+y+"?2004h"}function K$(){return y+"?2004l"+y+"?1006l"+y+"?1002l"+y+"?1000l"+y+"0m"+y+"?7h"+y+"?25h"+y+"?1049l"}function q$(){return y+"?1000h"+y+"?1002h"+y+"?1006h"}function z$(){return y+"?1006l"+y+"?1002l"+y+"?1000l"}var y="\x1B[",X8,X$,U$,X7,U7,G7,Y7,K7,q7,z7;var l0=k(()=>{X8=y+"200~",X$=y+"201~",U$={A:"up",B:"down",C:"right",D:"left",H:"home",F:"end",Z:"shift-tab",P:"f1",Q:"f2",R:"f3",S:"f4"},X7={1:"home",2:"insert",3:"delete",4:"end",5:"pageup",6:"pagedown",7:"home",8:"end",11:"f1",12:"f2",13:"f3",14:"f4",15:"f5",17:"f6",18:"f7",19:"f8",20:"f9",21:"f10",23:"f11",24:"f12"},U7={0:"space",28:"\\",29:"]",30:"^",31:"/"},G7=/^\x1b\[<(\d+);(\d+);(\d+)([Mm])/,Y7=/^\x1b\[(\d+)(?:;(\d+))?~/,K7=/^\x1b\[(?:(\d+);(\d+))?([A-Z])/,q7=/^\x1bO([A-Z])/,z7=/[A-Za-z~]/});function I5($,J,Z){$.theme=Z,J.local.setTheme(Z)}function M0($,J,Z){$.code.mode=Z,$.code.scroll=0,J.local.setMode(Z)}function G8($,J){M0($,J,"agents"),$.code.laneOpen=!1,$.focus="code"}function a0($,J,Z){let Q=Z.split("/");for(let V=1;V<Q.length;V++)$.files.expanded.add(Q.slice(0,V).join("/"));$.code.file=Z,$.code.mode="code",$.code.scroll=0,J.local.openFile(Z)}function S5($,J,Z){if(Z==="files"&&!J.layout.files)$.page="files";$.focus=Z}function Y8($,J,Z){if(J==="/setup"||J==="/connect"){Z.local.openWizard();return}let Q=m0(J);if(Q.kind==="text"&&Q.mentions.length>0){let V=D$(J,{cwd:$.cwd,mentions:Q.mentions,resolve:(j)=>A5(j,$.files.paths),attachImage:Z.local.attachImage?.bind(Z.local)});for(let j of V.notes)Z.local.toast(j);Z.hooks.onSubmit(V.text);return}if(Q.kind!=="slash"||!H7($,Q.cmd??"",Q.arg??"",Z))Z.hooks.onSubmit(J)}function H7($,J,Z,Q){switch(J){case"help":return N$($),!1;case"notices":return E5($),!0;case"market":return Q.local.openMarket(),!0;case"context":Q.local.openContext();case"wizard":return Q.local.openWizard(),!0;return!0;case"theme":if(M$(Z))I5($,Q,Z);else Q.local.toast(`unknown theme "${Z}" \xB7 night, ember or contrast`);return!0;case"open":{let V=A5(Z,$.files.paths,Q.fuzzy);if(!V)return Q.local.toast(Z?`no file matches "${Z}"`:"usage: /open <file>"),!0;return a0($,Q,V),$.focus="code",!0}case"diff":{if(Z){let V=A5(Z,$.files.paths,Q.fuzzy);if(!V)return Q.local.toast(`no file matches "${Z}"`),!0;$.code.file=V}return M0($,Q,"diff"),!0}case"focus":if(Z==="messages"||Z==="code"||Z==="files")S5($,Q,Z);else Q.local.toast("focus is messages, code or files");return!0;case"agents":if(Z)return!1;return G8($,Q),!0;default:{let V=D7[J];if(V&&!$.commands.some((j)=>j.name===J))return Q.local.toast(V),!0;return!1}}}function O$($,J,Z){if(J.startsWith("/")){let X=m0(J);if(["theme","open","focus"].includes(X.cmd??"")&&!X.arg){$.input.text=J+" ",$.input.cur=$.input.text.length,$.input.sgSel=0,$.focus="messages";return}Y8($,J,Z);return}let Q=J.indexOf(":"),V=J.slice(0,Q),j=J.slice(Q+1);if(V==="theme"&&M$(j))I5($,Z,j);else if(V==="mode"){if(M0($,Z,j),j==="agents")$.code.laneOpen=!1}else if(V==="focus")S5($,Z,j);else if(V==="open")a0($,Z,j),$.focus="code"}var D7,M$=($)=>_0.includes($);var F$=k(()=>{X0();H$();p();X0();D7={permissions:"/permissions \u2192 use /yolo",mode:"/mode \u2192 use /plan or /act"}});function _$($,J,Z){let{name:Q}=Z,V=J.kind==="approval"?J.verdicts.length:(J.prompt.options?.length??0)+(J.prompt.allowFreeText!==!1?1:0)+1;if(Q==="left"||Q==="up")return W$(J,V,-1);if(Q==="right"||Q==="down"||Q==="tab")return W$(J,V,1);if(Q==="escape")return L5($),!0;if(J.kind==="approval"){if(Q!=="enter")return!1;return $.card=null,J.resolve(J.verdicts[J.selected]??"deny"),!0}let j=J.prompt.options?.length??0,X=J.prompt.allowFreeText!==!1?j:-1;if(Q==="enter"){if(J.selected===V-1)return L5($),!0;if(J.selected!==X)return $.card=null,J.resolve({kind:"option",index:J.selected}),!0;let G=J.freeText.trim();if(G)$.card=null,J.resolve({kind:"text",text:G});return!0}if(J.selected!==X)return!1;if(Q==="backspace")return J.freeText=[...J.freeText].slice(0,-1).join(""),!0;let U=Q==="space"?" ":Z.ch;if(!U||Z.alt)return!1;return J.freeText+=U,!0}function W$($,J,Z){let Q=($.selected+Z+J)%J;return $.selected=Q,!0}function L5($){let J=$.card;if($.card=null,J?.kind==="approval")J.resolve("deny");else J?.resolve(null)}var P$=()=>{};function S$($,J){return J==="files"?$.files===null:J==="plan"?$.plan===null:!1}function O0($,J){return S$($,J.page)?J.page:"code"}function L$($,J){let Z=A$.filter((Y)=>S$($,Y));if(Z.length===0)return[];let Q=["code",...Z],V=O0($,J),j=$.code.y,X=$.code.x+$.code.w-2,U=$.code.x+2,G=[];for(let[Y,K]of Q.entries()){let z=f(E$[K])+2;if(U+z>X)break;G.push({page:K,rect:{x:U,y:j,w:z,h:1},active:K===V}),U+=z+(Y<Q.length-1?f(I$):0)}return G}function T$($,J,Z,Q){let V=L$(J,Z);if(V.length===0)return V;let j=Z.focus==="code"||Z.focus==="files";for(let[X,U]of V.entries()){let G=U.active?q(Q.bg,j?Q.accent:Q.fg2,A.BOLD):q(Q.muted);$.text(U.rect.x,U.rect.y,[[` ${E$[U.page]} `,G]],U.rect.w);let Y=V[X+1];if(Y)$.text(U.rect.x+U.rect.w,U.rect.y,[[I$,q(Q.frame)]],Y.rect.x-(U.rect.x+U.rect.w))}return V}function R$($,J){let Z=L$($,J);if(Z.length<2)return J.page;let Q=Z.findIndex((V)=>V.active);return Z[(Q+1)%Z.length].page}var E$,I$=" \xB7 ";var T5=k(()=>{$0();D0();p();E$={code:"code",files:"files",plan:"plan"}});function O7($,J="code"){return N7.filter((Z)=>Z!=="files"||$.files!==null||J==="files")}function z8($,J,Z,Q){if(J.type==="mouse")return b7($,J,Z,Q);if(J.type==="paste")return B7($,J.text,Z);if($.palette){if(J.ctrl&&J.name==="c")return c0($,Z);return v$($,J,(j)=>O$($,j,Z),Z.fuzzy),S()}if($.market){if(J.ctrl&&J.name==="c")return c0($,Z);let j=N9($,J,Z.fuzzy);if(j.kind==="plan")Z.local.marketPlan(j.row,j.local);else if(j.kind==="docs")Z.local.marketDocs(j.row);else if(j.kind==="install")Z.local.marketInstall(j.plan.row,j.plan.local);return S()}if($.context){if(J.ctrl&&J.name==="c")return c0($,Z);return f9($,J,Math.max(4,Math.min(Z.layout.h-4,24))),S()}if($.wizard){if(J.ctrl&&J.name==="c")return c0($,Z);let j=_9($,J);if(j.kind==="registerEndpoint")Z.local.wizardRegister(j.id,j.url,j.protocol);else if(j.kind==="storeKey")Z.local.wizardStoreKey(j.provider,j.secret);else if(j.kind==="confirmModels")Z.local.wizardActivate(j.provider,j.models,j.makeDefault===void 0?void 0:j.makeDefault);else if(j.kind==="confirmModel")Z.local.wizardModel(j.model);else if(j.kind==="loadModels")Z.local.wizardLoadModels();return S()}if($.help){if(J.name==="escape"||J.name==="enter"||J.name==="space"||J.ctrl&&J.name==="c"||J.ch&&!J.ctrl)$.help=!1;return S()}if(J.ctrl)return W7($,J,Z);if($.card&&_$($,$.card,J))return S();let{name:V}=J;if(V==="escape")return _7($,Z,Q);if(V==="tab"||V==="shift-tab")return P7($,V,Z);if(V==="enter")return A7($,Z);if($.focus==="files"){let j=I7($,V,Z);if(j)return j}if($.focus==="code"){let j=L7($,V,Z);if(j)return j}return T7($,J,Z)}function W7($,J,Z){if($.card&&J.name!==void 0&&F7.has(J.name))return S();switch(J.name){case"c":return c0($,Z);case"k":case"p":return R5($),S();case"g":return Z.local.openContext(),S();case"t":{let Q=_0[(_0.indexOf($.theme)+1)%_0.length];return I5($,Z,Q),S()}case"e":return S5($,Z,"files"),S();case"o":{let Q=R$(Z.layout,$);if(Q!==$.page)$.page=Q,$.focus=Q==="files"?"files":"code";return S()}case"b":return E5($),S();case"m":return Z.local.openMarket(),S();case"v":return Z.hooks.onSubmit("/paste"),S();case"s":return M0($,Z,"code"),$.focus="code",S();case"d":return M0($,Z,$.code.mode==="diff"?"code":"diff"),S();case"r":return M0($,Z,"run"),S();case"a":return G8($,Z),S();case"n":return Z.hooks.onSubmit("/new"),S();case"u":return D8($),S();case"left":case"right":return $.input.cur=g$($.input.text,$.input.cur,J.name==="left"?-1:1),S();default:return r()}}function c0($,J){if($.card)L5($);if($.running)J.hooks.onInterrupt();else J.hooks.onExit();return S()}function D8($){$.input.text="",$.input.cur=0,$.input.sgSel=0,$.input.histIdx=-1}function _7($,J,Z){if($.focus!=="messages"){if($.code.laneOpen)$.code.laneOpen=!1;else $.focus="messages";return S()}if(k5($,J).length)return $.input.sgSel=-1,S();if($.running){if(Z<$.escUntil)$.escUntil=0,J.hooks.onInterrupt();else $.escUntil=Z+q8;return S()}if($.input.text)return D8($),S();return r()}function P7($,J,Z){let Q=k5($,Z);if($.focus==="messages"&&Q.length)return y$($,Q[k0($.input.sgSel,0,Q.length-1)]),S();let V=O7(Z.layout,$.page),j=Math.max(0,V.indexOf($.focus));return $.focus=V[(j+(J==="tab"?1:V.length-1))%V.length],S()}function A7($,J){if($.focus==="files"){let Q=J.rows[$.files.cursor];if(Q?.dir)if($.files.expanded.has(Q.path))$.files.expanded.delete(Q.path);else $.files.expanded.add(Q.path);else if(Q)a0($,J,Q.path);return S()}if($.focus==="code"){if($.code.mode==="agents"&&$.crew.length)$.code.laneOpen=!$.code.laneOpen,$.code.scroll=$.code.laneOpen?M7:0;return S()}let Z=k5($,J);if(Z.length){let Q=Z[k0($.input.sgSel,0,Z.length-1)];if(!E7($,Q))return B$($,$.input.text,J);if(y$($,Q),Q.enter==="complete")return S()}return B$($,$.input.text,J)}function E7($,J){if(J.kind!=="slash"||$.input.sgSel!==0)return!0;let Z=(m0($.input.text).cmd??"").toLowerCase();return Z.length>=2&&J.label.slice(1).toLowerCase().startsWith(Z)}function B$($,J,Z){let Q=J.trim();if(!Q)return r();return $.input.history.push(Q),D8($),Y8($,Q,Z),S()}function I7($,J,Z){let Q=Z.rows,V=$.files;if(J==="up"||J==="down"){V.cursor=k0(V.cursor+(J==="up"?-1:1),0,Math.max(0,Q.length-1));let j=Math.max(1,(Z.layout.files?.h??3)-2);if(V.cursor<V.scroll)V.scroll=V.cursor;else if(V.cursor>=V.scroll+j)V.scroll=V.cursor-j+1;let X=Q[V.cursor];if(X&&!X.dir)a0($,Z,X.path);return S()}if(J==="left"||J==="right"){let j=Q[V.cursor];if(j?.dir)if(J==="right")V.expanded.add(j.path);else V.expanded.delete(j.path);return S()}return null}function L7($,J,Z){let Q=$.code,V=$.crew.length;if(Q.mode==="agents"&&V&&!Q.laneOpen){let{cols:j}=n5(S7(Z.layout.code),V),X={left:V-1,right:1,up:V-j,down:j};if(Object.hasOwn(X,J))return Q.lane=(Q.lane+X[J])%V,S()}if(J==="up")return Q.scroll=Math.max(0,Q.scroll-1),S();if(J==="down")return Q.scroll+=1,S();if(J==="pageup")return Q.scroll=Math.max(0,Q.scroll-10),S();if(J==="pagedown")return Q.scroll+=10,S();if(J==="left"||J==="right"){let j=Q.search?[...k$,"search"]:[...k$],X=Math.max(0,j.indexOf(Q.mode));return M0($,Z,j[(X+(J==="right"?1:j.length-1))%j.length]),S()}return null}function T7($,J,Z){let{name:Q}=J,V=$.input;if(Q==="pageup")return $.stick=!1,$.msgScroll=Math.max(0,$.msgScroll-5),S();if(Q==="pagedown")return $.msgScroll+=5,S();if(Q==="up"||Q==="down")return R7($,Q==="up"?-1:1,Z);if(Q==="left"||Q==="right"){let X=Q==="left"?-1:1;if(J.alt)V.cur=g$(V.text,V.cur,X);else V.cur=k0(X<0?V.cur-b$(V.text,V.cur):V.cur+C$(V.text,V.cur),0,V.text.length);return S()}if(Q==="home")return V.cur=0,S();if(Q==="end")return V.cur=V.text.length,$.stick=!0,S();if(Q==="backspace"){if(V.cur>0){let X=b$(V.text,V.cur);V.text=V.text.slice(0,V.cur-X)+V.text.slice(V.cur),V.cur-=X,V.sgSel=0,V.histIdx=-1}return $.focus="messages",S()}if(Q==="delete"){if(V.cur<V.text.length)V.text=V.text.slice(0,V.cur)+V.text.slice(V.cur+C$(V.text,V.cur)),V.sgSel=0;return S()}let j=Q==="space"?" ":J.ch;if(j&&!J.alt)return f$($,j),S();return r()}function R7($,J,Z){let Q=$.input,V=Q.histIdx<0?k5($,Z):[];if(V.length)return Q.sgSel=(k0(Q.sgSel,0,V.length-1)+J+V.length)%V.length,S();let j=Q.history;if(!j.length)return r();if(Q.histIdx<0)Q.histIdx=j.length;return Q.histIdx=k0(Q.histIdx+J,0,j.length),Q.text=j[Q.histIdx]??"",Q.cur=Q.text.length,Q.sgSel=0,S()}function k7($){let J=$.trim();if(J.length===0||J.includes(`
|
|
12
|
-
`))return null;let Z=/^(?:"([^"]+)"|'([^']+)'|(\S+))$/.exec(J),Q=Z?.[1]??Z?.[2]??Z?.[3];return Q!==void 0&&/\.(png|jpe?g|gif|webp)$/i.test(Q)?Q:null}function B7($,J,Z){if($.help)return r();if($.palette)return $.palette.query+=J.replace(/\s+/g," "),$.palette.sel=0,S();if($.wizard)return W9($,J),S();if(!$.card){let V=k7(J);if(V!==null)return Z.hooks.onSubmit(`/attach "${V}"`),S()}let Q=$.card;if(Q?.kind==="question"&&Q.prompt.allowFreeText!==!1){if(Q.selected===(Q.prompt.options?.length??0))return Q.freeText+=J,S()}return f$($,J),S()}function f$($,J){let Z=$.input;Z.text=Z.text.slice(0,Z.cur)+J+Z.text.slice(Z.cur),Z.cur+=J.length,Z.sgSel=0,Z.histIdx=-1,$.focus="messages"}function y$($,J){$.input.text=J.apply.text,$.input.cur=J.apply.cur,$.input.sgSel=0,$.input.histIdx=-1}function k5($,J){return $.input.sgSel<0?[]:B0($,$.files.paths,J.fuzzy)}function b$($,J){return J>=2&&$.codePointAt(J-2)>65535?2:1}function C$($,J){return($.codePointAt(J)??0)>65535?2:1}function g$($,J,Z){let Q=J;if(Z<0){while(Q>0&&/\s/.test($[Q-1]))Q--;while(Q>0&&!/\s/.test($[Q-1]))Q--}else{while(Q<$.length&&/\s/.test($[Q]))Q++;while(Q<$.length&&!/\s/.test($[Q]))Q++}return Q}function b7($,J,Z,Q){let V=P5(J),j=Z.layout;if(V==="wheel-up"||V==="wheel-down")return C7($,J,j,V==="wheel-up"?-1:1,Z);if(V==="release"){let G=Z.drag.zone!==null;return Z.drag.zone=null,G?S():r()}if(V==="drag"){let G=Z.drag.zone;if(G?.onDrag)return G.onDrag(J.y,J.y-Z.drag.y0),S();return r()}if(V!=="click")return r();for(let G=Z.hits.length-1;G>=0;G--){let Y=Z.hits[G];if(!i0(J.x,J.y,Y.rect))continue;if(Z.drag.zone=Y.onDrag?Y:null,Z.drag.y0=J.y,Y.onClick(),Y.key)z8($,Y.key,Z,Q);return S()}if(K8($).length>0)return r();let X=O0(j,$),U=[["messages",j.messages],["code",X==="code"?j.code:null],["files",j.files??(X==="files"?j.code:null)]];for(let[G,Y]of U)if(Y&&i0(J.x,J.y,Y))return $.focus=G,S();return r()}function C7($,J,Z,Q,V){if(K8($).length>0)return r();if(i0(J.x,J.y,Z.messages)){if($.msgScroll=Math.max(0,$.msgScroll+Q*2),Q<0)$.stick=!1;return S()}let j=O0(Z,$),X=Z.files??(j==="files"?Z.code:null);if(X&&i0(J.x,J.y,X)){let U=Math.max(1,X.h-2),G=$.files;return G.scroll=Math.max(0,Math.min(G.scroll+Q*2,Math.max(0,V.rows.length-U))),G.cursor=Math.max(G.scroll,Math.min(G.cursor,G.scroll+U-1)),S()}if(j==="code"&&i0(J.x,J.y,Z.code))return $.code.scroll=Math.max(0,$.code.scroll+Q*3),S();return r()}var q8=1500,N7,k$,M7=1e9,S=()=>["render"],r=()=>[],k0=($,J,Z)=>Math.max(J,Math.min($,Z)),i0=($,J,Z)=>$>=Z.x&&$<Z.x+Z.w&&J>=Z.y&&J<Z.y+Z.h,F7,S7=($)=>$.w-9;var H8=k(()=>{p();X0();z5();H5();u0();F$();P$();S0();l0();T5();X0();N7=["messages","code","files"],k$=["code","diff","run","agents"];F7=new Set(["k","p","b","m","g"])});function y7($){let J=$>>>0;return()=>{J=J+1831565813>>>0;let Z=J;return Z=Math.imul(Z^Z>>>15,Z|1),Z^=Z+Math.imul(Z^Z>>>7,Z|61),((Z^Z>>>14)>>>0)/4294967296}}function p$($){let J=($.ROVECODE_PET??"").trim().toLowerCase();return!(J==="0"||J==="false"||J==="off"||J==="no")}function d$($,J){let Z=$.activity;return{state:Z.state,running:$.running,waiting:$.card!=null,delegating:$.crew.some((Q)=>Q.status==="queued"||Q.status==="running"),errorAt:Z.state==="ERROR"?Z.errorAt??Z.endedAt??Z.startedAt??0:null,tokens:$.usage.tokensIn+$.usage.tokensOut,activeAt:Math.max(Z.startedAt??0,Z.endedAt??0),runStartedAt:$.running?Z.startedAt:null,changed:$.repo.modified,typing:$.input.text.length>0,booting:J-$.bootAt<1300}}function h$($={}){let J=y7($.seed??7),Z={name:($.name||"rovecode").slice(0,14),pokes:0,quip:null,lastQuipAt:0,lastEventKind:null,lastActiveAt:null,fx:[],glance:null,nextObserveAt:0,pendingObserve:null,nextSuggestAt:0,lastSuggest:"",saidLong:!1,stormUntil:0,wasError:!1,todosDone:0},Q=(F,P)=>F[(P??Math.floor(J()*1e6))%F.length]??"",V=(F,P)=>F.replace(/\{(\w+)\}/g,(W,R)=>{let b=P?.[R];return b==null?"":String(b)}),j=(F)=>{if(Z.lastActiveAt==null)Z.lastActiveAt=F,Z.lastQuipAt=F-5000},X=(F,P,W=4200,R="event")=>{j(P),Z.quip={text:F,until:P+W,kind:R},Z.lastQuipAt=P},U=(F)=>Z.quip!=null&&Z.quip.until>F,G=(F)=>U(F)&&Z.quip?.kind==="event",Y=(F,P,W)=>{Z.glance={dir:F,until:P+W}},K=(F,P,W)=>{Z.fx.push({kind:F,until:P+W,seed:Math.floor(J()*9973)})},z=(F)=>{Z.stormUntil=Math.max(Z.stormUntil,F+5000+Math.floor(J()*2000))};function D(F,P,W){if(j(W),W<Z.nextObserveAt)return;let R=P==="del"?f7:v7,b=null;for(let x of F.split(/\r?\n/)){let C=R.find(([d])=>d.test(x));if(C){b=C[1];break}}if(b==null)return;if(Z.nextObserveAt=W+5500,G(W))Z.pendingObserve={text:b,at:W};else X(b,W,3200,"observe")}function H(F,P){if(j(P),Z.lastActiveAt=P,F==="fail-line")X(Q(Z0.failLine),P,2600),K("shiver",P,640),z(P);else if(F==="pass-line")K("bounce",P,400);else if(F==="risk")X(Q(Z0.risk),P,3600,"observe")}function N(F,P){if(j(P),F===Z.lastSuggest)return;if(Z.lastSuggest=F,P<Z.nextSuggestAt||G(P))return;X(`${F}? sure.`,P,2200,"observe"),Z.nextSuggestAt=P+4000}function M(F,P,W){if(j(W),Z.lastActiveAt=W,F==="todo_done"){let x=Number(P?.d??Z.todosDone+1),C=P?.n;Z.todosDone=x;let d=C==null?Z0.todo.filter((u)=>!u.includes("{n}")):Z0.todo;X(V(Q(d),{d:x,n:C}),W,2600,"observe"),K("bounce",W,240);return}if(F==="tool_fail"){X(V(Q(Z0.error),P),W),K("shiver",W,640),z(W);return}if(!u7.has(F)&&G(W)&&(F===Z.lastEventKind||W-Z.lastQuipAt<x7)){if(u$.includes(F))Y(1,W,2600);return}if(Z.lastEventKind=F,F==="poke")Z.pokes++;let R=Z0[F],b=F==="poke"?Q(R,Z.pokes-1):Q(R);if(X(V(b,P),W,F==="permission"?120000:F==="done"||F==="pass"?6000:4200),F==="pass"||F==="done")K("sparkle",W,3600);if(F==="allowed")K("hearts",W,1800);if(F==="poke")K("bounce",W,800),K("hearts",W,1800),Y(0,W,1500);if(F==="theme")K("sparkle",W,1400);if(F==="error"||F==="fail")z(W);if(g7.includes(F))Z.stormUntil=0;if(u$.includes(F))Y(1,W,2600);if(F==="start")Z.saidLong=!1,Z.lastSuggest=""}function O(F){M("poke",void 0,F)}let _=(F)=>1+Math.floor(Math.sqrt(Math.max(0,F)/1500));function E(F,P){if(F.state==="ERROR"||P<Z.stormUntil)return"furious";if(F.waiting||F.state==="WAITING")return"patient";if(F.delegating||F.state==="DELEGATING")return"conducting";if(F.state==="EDITING")return"focused";if(F.state==="RUNNING"||F.state==="TESTING")return"zapping";if(F.state==="SUCCESS")return"sunny";let W=Math.max(Z.lastActiveAt??P,F.activeAt);if(!F.running&&P-W>=45000)return"sleepy";return"humming"}let I=(F)=>U(F)||F<Z.stormUntil||Z.fx.some((P)=>P.until>F);function T(F,P){if(j(F),Z.fx=Z.fx.filter((b)=>b.until>F),Z.glance&&Z.glance.until<=F)Z.glance=null;if(Z.quip&&Z.quip.until<=F)Z.quip=null;if(Z.pendingObserve!=null){if(F-Z.pendingObserve.at>1e4)Z.pendingObserve=null;else if(!G(F))X(Z.pendingObserve.text,F,3200,"observe"),Z.pendingObserve=null}if(!P)return;let W=P.state==="ERROR";if(W&&!Z.wasError)z(F);if(Z.wasError=W,P.state==="SUCCESS")Z.stormUntil=0;let R=E(P,F)==="sleepy";if(!P.running&&!P.booting&&!U(F)&&F-Z.lastQuipAt>(R?16000:11000)){let b=R?Z0.sleep:P.changed>8?[...Z0.idle,"{changed} modified files. busy branch."]:Z0.idle;X(V(Q(b),{changed:P.changed}),F,3800,"ambient")}if(P.running&&P.runStartedAt!=null&&F-P.runStartedAt>25000&&!Z.saidLong&&!U(F))Z.saidLong=!0,X(Q(Z0.long),F,3500,"ambient")}return{state:Z,observe:D,react:H,event:M,suggest:N,poke:O,say:X,level:_,mood:E,animating:I,tick:T}}var n0,K0,x$,N8="{};=()<>:.",Z0,B5=($)=>Z0.thinking[Math.floor(Math.max(0,$)/4000)%Z0.thinking.length]??"thinking",v7,f7,u$,g7,u7,x7=1500;var b0=k(()=>{n0=[" \u256D\u2500\u256E\u256D\u2500\u2500\u256E\u256D\u2500\u256E "," \u256D\u256F \u2570\u256F \u2570\u256F \u2570\u2500\u256E "," \u256D\u256F \u2570\u256E "," \u2502 \u2502 "," \u2570\u256E \u256D\u256F "," \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F "],K0={EYE_L:6,EYE_R:12,MOUTH:9,EYE_ROW:3,MOUTH_ROW:4},x$=n0.map(($)=>{let J=$.search(/\S/),Z=$.length-1-[...$].reverse().join("").search(/\S/);return[J,Z]}),Z0={start:["on it.","let's see what we've got.","rolling in."],glob:["sniffing for {q}\u2026","where is {q}\u2026","looking for {q}."],grep:["found {n}.","{n}. noted."],fetch:["fetching {f}.","off to {f}.","knocking on {f}."],crew:["checking on {a}.","{a}, how's it going.","peeking at {a}."],tinker:["poking at {f}.","a look at {f}.","fiddling with {f}."],read:["reading {f}.","let me skim {f}."],plan:["{n} steps. easy.","got a plan. {n} steps."],permission:["your call \u25B8","need a nod from you."],allowed:["thanks \u2665","\u2665 on it."],denied:["okay, hands off.","fair. stopping."],edit:["raining code on {f}.","sprinkling {f}.","a light shower over {f}."],write:["a fresh {f}.","new file, new weather: {f}."],remove:["blowing {f} away.","bye, {f}."],run:["thunder time.","rumble rumble.","charging up\u2026"],pass:["{r}. sunny skies.","clear skies \u263C {r}.","{r}. told you."],fail:["{r}. GRR.","red. i hate red.","{r}. fixing it. NOW."],error:["storm's here.","who wrote THAT.","no. no no no.","grr."],done:["all clear \u263C","nice work, us.","sun's out."],stopped:["okay, stopping.","pausing the rain."],fresh:["fresh sky.","clean slate."],theme:["ooh, new sky.","i like this light."],poke:["hi.","hehe.","\u266A","that tickles.","yes?"],idle:["humming \u266A","ready when you are.","the files look calm.","nice day for a refactor.","\u266A \u266A"],sleep:["zzz\u2026","\u2026","mm."],todo:["one down.","{d}/{n}. moving.","check.","that's {d} of {n}."],long:["still going. hang tight.","big one. i'm here."],failLine:["GRR.","red. RED.","that one leaked. grr."],risk:["hm. that one's risky.","i'd look at that twice."],spawn:["sending {a} in.","{a}, you're up.","go, {a}. i'll watch."],laneDone:["{a} is back \xB7 {r}.","{a}: {r}. nice.","{a} done. {r}."],laneFail:["{a} tripped \xB7 {r}.","hm. {a} didn't make it."],merge:["stitching it together.","all hands back. merging."],thinking:["thinking","brewing","gathering","mulling","sifting","condensing","circling","weighing"]},v7=[[/httpOnly/i,"httpOnly. good call."],[/secure:\s*true/,"secure cookie \u2665"],[/sameSite/i,"sameSite too. tidy."],[/TODO|FIXME/,"a TODO. i'll remember it."],[/console\.log/,"leftover console.log?"],[/throw new/,"throwing. brave."],[/try \{/,"try\u2026 fingers crossed for the catch."],[/catch \(/,"\u2026and a catch. phew."],[/^import .* from/,"imports rolling in."],[/^export (default |async )?(function|const|class)/,"a new export."],[/status\(4\d\d\)/,"a 4xx. firm but fair."],[/status\(5\d\d\)/,"a 5xx? hope that's on purpose."],[/sqlite|\bdb\.|prepare\(/i,"talking to the database."],[/crypto|randomBytes|timingSafeEqual/,"crypto. spooky."],[/\b(test|it|describe)\(/,"a test! my favorite."],[/req\.ip|forwarded/i,"who's calling? checking the ip."],[/SIGTERM|process\.exit|\.close\(/,"graceful. i like graceful."],[/rateLimit|429/,"rate limits. slow down, world."],[/csrf|verifyState|\bstate\b/i,"state check. no sneaky redirects."],[/expires|maxAge/i,"expiry set. nothing lives forever."],[/cookie/i,"cookies. i want one."],[/redirect\(/,"and\u2026 redirect."],[/async /,"async. i'll wait."]],f7=[[/legacy/i,"goodbye, legacy."],[/new Map\(\)/,"bye, in-memory Map."],[/console\.log/,"console.log, gone. clean."],[/token\.access_token/,"raw token in a cookie, gone. good."]];u$=["read","edit","write","plan","grep","glob","run","remove","spawn","laneDone","fetch","crew","tinker"],g7=["done","pass","start","fresh","stopped"],u7=new Set(["start","done","stopped","pass","fail","error","failLine","denied","permission","allowed","poke","theme","fresh","laneDone","laneFail","merge","risk","long","todo","todo_done","tool_fail"])});function i$($,J){let Z=$.split(`
|
|
13
|
-
`),Q=Z[Z.length-1]??"",V=[...Q.matchAll(w$)].map((Y)=>Y[1]),j=V.length>0&&Q.replace(w$,"").trim()==="",{text:X,files:U}=m$((j?Z.slice(0,-1):Z).join(`
|
|
14
|
-
`)),G={kind:"user",text:X,at:J};if(j)G.images=V;if(U.length>0)G.files=U;return G}function F8($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}let J={};for(let Z of["path","command","pattern","url","question","label"]){let Q=new RegExp(`"${Z}":"((?:[^"\\\\]|\\\\.)*)"`).exec($);if(!Q)continue;try{J[Z]=JSON.parse(`"${Q[1]}"`)}catch{}}return J}function W8($,J,Z,Q){let V=l$(J,F8(Z),Q),j={kind:"tool",callId:$,tool:J,verb:V.verb,label:V.label,running:!1};if(V.path)j.path=V.path;if(V.verb==="edit"||V.verb==="write")j.add=V.add,j.del=V.del;return j}function n$($){if($.type==="compaction"||$.type==="steer")return 1;if($.type==="run_end")return $.status==="done"?0:1;return 0}function o$($,J,Z,Q,V){switch(J.type){case"run_start":$.event("start",void 0,V);break;case"tool_execution_start":{let j=c$(J.args),X=M8(b5(Q,g(j.path)))||"file";Z.set(J.callId,{tool:J.tool,cmd:g(j.command)||g(j.cmd)}),l7($,J.tool,j,X,V);break}case"tool_execution_end":{let j=Z.get(J.callId);Z.delete(J.callId),a7($,j,J.ok,J.output,V);break}case"tool_call_failed":Z.delete(J.callId),$.event(J.reason==="permission_denied"?"denied":"tool_fail",void 0,V);break;case"run_end":Z.clear(),$.event(J.status==="done"?"done":J.status==="error"?"error":"stopped",void 0,V);break;default:break}}function l7($,J,Z,Q,V){let j={f:Q};if(J==="read")$.event("read",j,V);else if(J==="edit"){$.event("edit",j,V);let X=(Array.isArray(Z.edits)?Z.edits:[]).flatMap((U)=>{let G=c$(U).newLines;return Array.isArray(G)?G.map(String):[]});if(X.length)$.observe(X.join(`
|
|
15
|
-
`),"ins",V)}else if(J==="write"){if($.event("write",j,V),g(Z.content))$.observe(g(Z.content),"ins",V)}else if(h7.has(J))$.event("remove",j,V);else if(a$.has(J)){let X=g(Z.command)||g(Z.cmd);if(d7.test(X))$.react("risk",V);else $.event("run",void 0,V)}else if(J==="glob"||J==="grep")$.event("glob",{q:m(g(Z.pattern),24)||"it"},V);else if(J==="ls")$.event("read",{f:(M8(g(Z.path))||".")+"/"},V);else if(J==="web_fetch")$.event("fetch",{f:w7(g(Z.url))},V);else if(J==="todo_write"){let X=Array.isArray(Z.todos)?Z.todos.length:0;if(X)$.event("plan",{n:X},V)}else if(J==="todo_read")$.event("read",{f:"the plan"},V);else if(J==="ask_user")$.event("permission",void 0,V);else if(J==="task")$.event("spawn",{a:m(g(Z.label)||g(Z.agent)||"a worker",20)},V);else if(J==="task_status")$.event("crew",{a:g(Z.action)==="list"?"the crew":m(g(Z.id),20)||"the crew"},V);else $.event("tinker",{f:m7(J,Z)},V)}function m7($,J){if($.startsWith("provider_"))return g(J.action)==="use"&&g(J.selector)?m(g(J.selector),24):"providers";if($==="skill_view")return m(g(J.name)||g(J.skill),24)||"a skill";if($==="skills_list")return"the skills";if($==="memory_edit")return"memory";if($==="recall")return m(g(J.query),24)?`notes on ${m(g(J.query),24)}`:"the notes";if($==="eval_cell")return"a scratch cell";if($==="mcp_call"||$==="mcp_list")return[g(J.server),g(J.tool)].filter(Boolean).map((Z)=>m(Z,16)).join(" ")||"mcp";return m($,24)}function a7($,J,Z,Q,V){if(J&&a$.has(J.tool)){let j=Q.replace(/^exit=-?\d+\r?\n?/,"").split(/\r?\n/).filter((U)=>U.trim()),X=m(j[j.length-1]??"");if(p7.test(J.cmd))$.event(Z?"pass":"fail",{r:X},V);else if(!Z)$.event("tool_fail",void 0,V);if(j.some((U)=>/^\s*FAIL\b/.test(U)))$.react("fail-line",V);else if(Z&&j.some((U)=>/^\s*PASS\b/.test(U)))$.react("pass-line",V);return}if(!Z){$.event("tool_fail",void 0,V);return}if(J?.tool==="grep")$.event("grep",{n:Q.split(/\r?\n/).filter((j)=>j.trim()&&!j.startsWith("(")).length},V)}function r$($,J,Z){if(J.status==="done")$.event("laneDone",{a:m(J.label,20),r:m(J.summary??"done")},Z);else if(J.status==="failed")$.event("laneFail",{a:m(J.label,20),r:m(J.error??"failed")},Z)}var w$,p7,d7,a$,h7,c$=($)=>$&&typeof $==="object"&&!Array.isArray($)?$:{},g=($)=>typeof $==="string"?$:"",m=($,J=40)=>$.replace(/\s+/g," ").trim().slice(0,J),w7=($)=>{try{return new URL($).host||m($,30)}catch{return m($,30)||"the web"}};var s$=k(()=>{O8();H$();w$=/\[image: ([^\]]*)\]/g,p7=/\b(tests?|vitest|jest|pytest|mocha|spec)\b/i,d7=/\brm\s+(-[a-z]*r[a-z]*f|-[a-z]*f[a-z]*r)\b|--force\b|\bpush\s+-f\b|\breset\s+--hard\b|\bchmod\s+777\b|\bcurl\b[^|]*\|\s*(ba|z)?sh\b|\bdrop\s+(table|database)\b/i,a$=new Set(["bash","shell","run"]),h7=new Set(["remove","rm","delete","unlink"])});class _8{d;pending=new Set;queue=Promise.resolve();picker=null;constructor($){this.d=$}settleAll(){for(let $ of[...this.pending])$()}get pickerOpen(){return this.picker!==null}approval($,J,Z){return this.enqueue("deny",(Q)=>{this.d.onApprovalOpen?.();let V=c7.has($)?["once","always","all-edits","deny"]:["once","always","deny"],j={kind:"approval",tool:$,argsPreview:J,verdicts:V,selected:0,resolve:(X)=>{if(X!=="deny")this.d.onAllowed?.();Q(X)}};if(Z)j.detail=Z;return j})}enqueue($,J){return new Promise((Z)=>{let Q=()=>new Promise((V)=>{if(this.d.stopped()){Z($),V();return}let j=null,X=!1,U=(Y)=>{if(X)return;if(X=!0,this.pending.delete(G),j&&this.d.state.card===j)this.d.state.card=null;this.d.dirty(),Z(Y),V()},G=()=>U($);this.pending.add(G),j=J(U),this.d.state.card=j,o0(this.d.state,"tool"in j?`needs you: ${j.tool}`:"needs you: a question",this.d.clock?.()??Date.now(),"warn","approval"),this.d.dirty()});this.queue=this.queue.then(Q,Q)})}question($,J){if(this.d.stopped()||J?.aborted)return Promise.resolve(null);if(this.d.state.card)return Promise.reject(Error("a question or approval card is already open"));return new Promise((Z)=>{let Q=!1,V=(U)=>{if(Q)return;if(Q=!0,this.pending.delete(j),J?.removeEventListener("abort",j),this.d.state.card===X)this.d.state.card=null;this.d.dirty(),Z(U)},j=()=>V(null),X={kind:"question",prompt:$,selected:0,freeText:"",resolve:(U)=>V(U===null?null:U.kind==="option"?{choice:U.index,label:$.options?.[U.index]}:{text:U.text})};this.pending.add(j),J?.addEventListener("abort",j,{once:!0}),this.d.state.card=X,o0(this.d.state,"tool"in X?`needs you: ${X.tool}`:"needs you: a question",this.d.clock?.()??Date.now(),"warn","approval"),this.d.dirty()})}pick($,J){if(this.d.stopped()||$.length===0)return Promise.resolve(null);return this.picker?.(null),new Promise((Z)=>{let Q=this.d.state;R5(Q,$.map((X)=>({label:X.description?`${X.label} \xB7 ${X.description}`:X.label,group:"",action:C5+X.value,...X.description!==void 0?{hint:X.description}:{}})),J??"pick one");let V=(X)=>{if(this.picker!==V)return;if(this.picker=null,this.pending.delete(j),Q.palette?.items.some((U)=>U.action.startsWith(C5)))t$(Q);this.d.dirty(),Z(X)},j=()=>V(null);this.picker=V,this.pending.add(j),this.d.dirty()})}interceptKey($){let J=this.d.state;if(!this.picker||!J.palette||$.type!=="key"||$.ctrl)return!1;if($.name==="enter"){let Z=e$(J.palette,Y0)[J.palette.sel];return this.picker(Z&&Z.action.startsWith(C5)?Z.action.slice(C5.length):null),!0}if($.name==="escape")return this.picker(null),!0;return!1}afterKey(){if(this.picker&&!this.d.state.palette)this.picker(null)}}var C5="pick:",c7;var $4=k(()=>{h0();X0();J0();c7=new Set(["edit","write"])});function Q4($){let J=$&&typeof $==="object"&&!Array.isArray($)?$:{};if(!Array.isArray(J.edits))return[];let Z=[];for(let Q of J.edits){let V=Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:{},j=Array.isArray(V.newLines)&&V.newLines.every((X)=>typeof X==="string")?V.newLines:null;if(typeof V.tag!=="string"||typeof V.anchorLine!=="number"||!Number.isInteger(V.anchorLine)||typeof V.anchorHash!=="string"||!j)return[];Z.push({tag:V.tag,anchorLine:V.anchorLine,anchorHash:V.anchorHash,newLines:j})}return Z}function V4($,J,Z){if(!J.length)return null;let Q=J[0].tag;if(J.some((K)=>K.tag!==Q))return null;let V=[...J].sort((K,z)=>K.anchorLine-z.anchorLine);if(V.some((K,z)=>z>0&&K.anchorLine===V[z-1].anchorLine))return null;let j=$.split(`
|
|
16
|
-
`),X=[...(Z??"").split(`
|
|
17
|
-
`),...j],U=V.map((K)=>[...new Set(X.filter((z)=>J4(z)===K.anchorHash))]);if(U.some((K)=>K.length===0))return null;let G=0,Y=(K,z)=>{if(K===V.length){let M=z.join(`
|
|
18
|
-
`);return Z4(M)===Q?M:null}let D=V[K],H=D.anchorLine-1,N=D.newLines.length;if(H<0||H>z.length||D.newLines.some((M,O)=>z[H+O]!==M))return null;for(let M of U[K]){if(++G>n7)return null;let O=Y(K+1,[...z.slice(0,H),M,...z.slice(H+N)]);if(O!==null)return O}return null};return Y(0,j)}var n7=8;var P8=k(()=>{i7()});import{readdirSync as o7,readFileSync as r7,statSync as j4}from"fs";import{join as X4}from"path";async function VZ($,J=j0){try{return QZ(await J(ZZ,$))}catch{return null}}function jZ($,J=s7){let Z=[],Q=(V,j)=>{let X;try{X=o7(V)}catch{return}for(let U of X.sort()){if(Z.length>=J)return;let G=X4(V,U),Y=j?`${j}/${U}`:U,K;try{K=j4(G)}catch{continue}if(K.isDirectory()){if(!$Z.has(U)&&!U.startsWith("."))Q(G,Y)}else if(K.isFile())Z.push(Y)}};return Q($,""),Z}async function U4($,J=j0){let[Z,Q,V]=await Promise.all([VZ($,J),V8($,J),Q8($,J)]);return{paths:Z??jZ($),statuses:Q,branch:V,git:Z!==null}}function r0($,J,Z=t7){try{let Q=X4($,J),V=j4(Q);if(!V.isFile()||V.size>Z)return null;let j=r7(Q),X=Math.min(j.length,e7);for(let U=0;U<X;U++)if(j[U]===0)return null;return j.toString("utf8")}catch{return null}}function XZ($,J,Z,Q){if($!==void 0)return{base:$??"",head:!1};let V=J?.length&&Z!==null?V4(Z,J,Q):null;if(V!==null)return{base:V,head:!1};return Q!==null?{base:Q,head:!0}:null}function GZ($,J){if($.base===""&&J===null)return null;let Z=t9($.base,J??""),{a:Q,d:V}=e9(Z),j={hunks:$$(Z,JZ).map(J$),add:Q,del:V};if($.head)j.base="head";return j}async function A8($,J,Z,Q=j0,V){let j=r0($,J),X=XZ(Z,V,j,await j$($,J,Q))??(await Q8($,Q)!==null?UZ:null);return X?GZ(X,j):null}var s7=2000,t7=524288,e7=8000,$Z,JZ=3,ZZ,QZ=($)=>!$||$.status!==0?null:$.stdout.split("\x00").filter((J)=>J.length>0),G4=($,J=j0)=>V8($,J),UZ,Y4=($,J,Z=j0)=>A8($,J,void 0,Z);var E8=k(()=>{h0();j8();P8();$Z=new Set(["node_modules",".git",".rovecode","dist","build","out","coverage",".cache"]),ZZ=["ls-files","-z","--cached","--others","--exclude-standard"];UZ={base:"",head:!0}});function f5($,J,Z,Q){if(F0&&F0.msgs===$.messages&&F0.len===$.messages.length&&F0.w===J&&F0.name===Z.name&&F0.now===Q)return F0.rows;let V=_Z($,J,Z,Q);return F0={msgs:$.messages,len:$.messages.length,w:J,name:Z.name,now:Q,rows:V},V}function MZ($,J,Z,Q){let V=!$.running&&$.ok===!1,j=$.running?N0(Q):zZ[$.verb]??"\xB7",X=$.running?Z.accent:V?Z.err:"~+\u2212".includes(j)?Z.fg2:Z.dim,U=(($.verb==="other"?$.tool:$.verb)+" ").padEnd(7),G=[];if($.verb==="edit"&&!V&&($.add||$.del)){if($.add)G.push([`+${$.add}`,q(Z.ok)]);if($.del)G.push([`${$.add?" ":""}\u2212${$.del}`,q(Z.err)])}else if($.detail)G.push([($.verb==="edit"?"":"\u2026 ")+$.detail,q(V?Z.err:Z.muted)]);let Y=K4(G),K=$.label,z=J-2-U.length,D=z;if(Y){let N=Math.min(s0(K),HZ);if(z-Y-2>=Math.min(s0(K),DZ))D=z-Y-2;else if(G.length===1&&z-N-2>=NZ){let[M,O]=G[0];G[0]=[t0(M,z-N-2),O],D=N,Y=K4(G)}else G.length=0,Y=0}if(s0(K)>D)K=D>1?[...K].slice(0,D-1).join("")+"\u2026":"";let H=[[j+" ",q(X)],[U,q($.running?Z.fg2:Z.muted)],[K,q($.running?Z.fg:V?Z.err:Z.fg2)]];if(G.length)H.push([" ".repeat(Math.max(1,J-2-U.length-s0(K)-Y)),q(-1)],...G);return H}function OZ($,J){if($.card)return"needs you";let Z=$.activity;if($.running)return J!==void 0&&Z.turnAt!==void 0&&Z.state==="THINKING"?B5(J-Z.turnAt):Z.label||Z.state.toLowerCase();switch(Z.state){case"SUCCESS":return"done";case"ERROR":return"error";case"WAITING":return"needs you";case"IDLE":return"";default:return Z.label||Z.state.toLowerCase()}}function FZ($,J,Z){let Q=$.activity;if(Q.turnAt===void 0)return"";let V=z4(J-Q.turnAt),j=Q.tokens?` ${V} \xB7 ${n(Q.tokens)} tokens`:` ${V}`;if([...j].length<=Z)return j;let X=` ${V}`;return[...X].length<=Z?X:""}function WZ($,J){return $.split(/(@[\w./\\-]+)/).filter(Boolean).map((Z)=>[Z,Z[0]==="@"?q(J.accent,-1,A.BOLD):q(J.fg,-1,A.BOLD)])}function _Z($,J,Z,Q){let V=[],j=()=>{V.push({segs:[]})},X=Math.max(1,J-2),U=-1;$.messages.forEach((H,N)=>{if(H.kind==="user")U=N});let G=null,Y=!0,K=$.running,z=$.activity.state==="SUCCESS"?Z.ok:$.activity.state==="ERROR"?Z.err:Z.accentDim,D=(H)=>{let N=H>U,M=N?OZ($,Q):"",O=!N?Z.accentDim:$.running?Z.accent:z,_=[["\u25C6 ",q(O)],["rovecode",q(Z.fg,-1,A.BOLD)],[M?" \xB7 "+M:"",q($.running?Z.accent:Z.muted)]];if(N&&$.running&&!$.card){let E=FZ($,Q,J-w(_));if(E)_.push([E,q(Z.muted)])}V.push({segs:_}),Y=!1};if($.messages.forEach((H,N)=>{switch(H.kind){case"user":{if(G)j();let M=N===U;V.push({segs:[["you",q(M?Z.accent:Z.muted)],[M?" \xB7 sent":"",q(Z.accentDim)]]});for(let O of i(H.text,X))V.push({segs:WZ(O,Z),indent:2});if(H.images?.length)V.push({segs:H.images.flatMap((O)=>[[` \u25A3 ${O} `,q(Z.fg2,Z.selBg)],[" ",q(-1)]]),indent:2});if(H.files?.length)for(let O of H.files)V.push({segs:[[` \u25A4 ${O} `,q(Z.fg2,Z.selBg)]],indent:2});Y=!0,K=!0;break}case"assistant":{if(Y)j(),D(N);else if(G&&G.kind!=="assistant")j();let M=H.text?i(H.text,X):[];if(M.forEach((O,_)=>{let E=[[O,q(Z.fg2)]];if(H.streaming&&_===M.length-1)E.push(["\u258C",q(Z.accent)]);V.push({segs:E,indent:2})}),H.streaming&&!M.length)V.push({segs:[["\u258C",q(Z.accent)]],indent:2});break}case"tool":if(Y)j(),D(N);else if(G&&G.kind==="assistant")j();V.push({segs:MZ(H,X,Z,Q),indent:2,...H.path?{path:H.path}:{}});break;case"steer":if(Y)j(),D(N);else j();i(H.text,X).forEach((M,O)=>V.push({segs:[[O===0?"\xBB ":" ",q(Z.accent)],[M,q(Z.fg)]]}));break;case"compaction":if(Y&&K)j(),D(N);else j();for(let M of i(H.text,X))V.push({segs:[["\u25B8 ",q(Z.accentDim)],[M,q(Z.muted,-1,A.ITALIC)]]});break;case"system":{if(Y&&K)j(),D(N);else if(G&&G.kind!=="system")j();let M=H.tone==="error",O=M?Z.err:H.tone==="warn"?Z.warn:Z.accentDim;for(let _ of i(H.text,X))V.push({segs:[[M?"\xD7 ":"\u25B8 ",q(O)],[_,q(M?Z.err:Z.muted)]]});break}}G=H}),Y&&$.running&&K&&!$.card)j(),D($.messages.length);return V}function y5($,J,Z){if($.kind==="approval"){let X=$.detail?D4($.detail).length:0;return{total:3+Math.min(X,Math.max(1,Z)),freeText:null}}let{q:Q,opts:V,freeRows:j}=e0($,J);return{total:1+Q+V+j+2,freeText:j>0?1+Q+V:null}}function e0($,J){let Z=Math.min(v5,i($.prompt.question,Math.max(1,J-2)).length),Q=$.prompt.options?.length??0;if($.prompt.allowFreeText===!1)return{q:Z,opts:Q,freeRows:0,freeLines:[]};let V=$.freeText.length===0?[""]:i($.freeText,Math.max(1,J-4)),j=V.length>q4?V.slice(V.length-q4):V;return{q:Z,opts:Q,freeRows:j.length,freeLines:j}}function D4($){let J=$.split(`
|
|
19
|
-
`);return J[0]?.startsWith("--- ")&&J[1]?.startsWith("+++ ")?J.slice(2):J}function PZ($,J){if($.startsWith("+++")||$.startsWith("---")||$.startsWith("@@")||$.startsWith("\u2026")||$.startsWith("\\"))return[$,q(J.dim)];if($[0]==="+")return[$,q(J.ok)];if($[0]==="-")return[$,q(J.err)];return[$,q(J.fg2)]}function L8($,J,Z,Q){let V=[{segs:[]}],j=(D,H)=>[` ${D} `,H?q(Q.bg,Q.accent,A.BOLD):q(Q.muted)];if($.kind==="approval"){if(V.push({segs:[["\u25C6 ",q(Q.warn)],["needs your permission",q(Q.fg,-1,A.BOLD)],[` ${$.tool} ${$.argsPreview}`.trimEnd(),q(Q.fg2)]]}),$.detail){let H=D4($.detail),N=Math.max(1,Z),M=H.length>N?[...H.slice(0,N-1),O5(H.length-N+1)]:H;for(let O of M)V.push({segs:[PZ(O,Q)],indent:2})}let D=[];return $.verdicts.forEach((H,N)=>{D.push(j(I8[H],N===$.selected),[" ",q(-1)])}),D.push([" \u23CE confirm \u2190\u2192 choose esc deny",q(Q.dim)]),V.push({segs:D,indent:2}),V}let X=i($.prompt.question,Math.max(1,J-2));(X.length>v5?[...X.slice(0,v5-1),(X[v5-1]??"").slice(0,Math.max(0,J-4))+"\u2026"]:X).forEach((D,H)=>V.push({segs:[[H===0?"\u25C6 ":" ",q(Q.warn)],[D,q(Q.fg,-1,A.BOLD)]]}));let G=$.prompt.options??[];G.forEach((D,H)=>V.push({segs:[j(D,H===$.selected)],indent:2}));let{freeRows:Y,freeLines:K}=e0($,J),z=Y>0;if(z){let D=$.selected===G.length;K.forEach((H,N)=>{let M=[N===0?"\u258C ":" ",q(D?Q.accent:Q.accentDim)],O=$.freeText.length===0;V.push({segs:[M,[O?qZ:H,O?q(Q.dim):q(Q.fg,-1,A.BOLD)]],indent:2})})}return V.push({segs:[j(S8,$.selected===G.length+(z?1:0))],indent:2}),V.push({segs:[["\u23CE confirm \u2191\u2193 choose",q(Q.dim)]],indent:2}),V}function q0($,J){let Z=Math.max(0,$.h-2),Q=AZ(Z),V=J.card?Math.min(y5(J.card,$.w,Q).total,Math.max(0,Z-1)):0;return{h:Z,cardH:V,msgH:Z-V,maxDetail:Q}}function P0($,J,Z,Q){let V=a($),{msgH:j}=q0(V,J),X=f5(J,V.w,Z,Q),U=Math.max(0,X.length-j);return{offset:J.stick?U:Math.max(0,Math.min(J.msgScroll,U)),max:U}}function H4($,J){if(J.palette||J.help)return null;let Z=a($);if(Z.w<3||Z.h<3)return null;let{cardH:Q,msgH:V,maxDetail:j}=q0(Z,J);if(J.card){if(J.card.kind!=="question")return null;let G=y5(J.card,Z.w,j);if(G.freeText===null||J.card.selected!==(J.card.prompt.options?.length??0))return null;let{freeRows:Y,freeLines:K}=e0(J.card,Z.w),z=G.freeText+Y-1-(G.total-Q);if(z<0)return null;let D=K[K.length-1]??"";return{x:Math.min(Z.x+4+[...D].length,Z.x+Z.w-1),y:Z.y+V+z}}if(J.focus!=="messages")return null;let X=Z.w-2,U=Math.max(0,J.input.cur-X+1);return{x:Z.x+2+J.input.cur-U,y:Z.y+Z.h-1}}function N4($,J,Z,Q,V){if(J.w<4||J.h<3)return;let j=Z.messages.filter((M)=>M.kind==="user").length,X=Z.focus==="messages",U=e($,J,"messages",X,j?[[String(j),q(Q.muted)]]:[],Q),{h:G,cardH:Y,msgH:K,maxDetail:z}=q0(U,Z);if(G>0){let M=f5(Z,U.w,Q,V),O=Math.max(0,M.length-K),_=Z.stick?O:Math.max(0,Math.min(Z.msgScroll,O));R0($,Q,U.x+U.w-1,U.y,K,M.length,K,_);for(let E=0;E<K;E++){let I=M[_+E];if(!I)break;let T=U.x+(I.indent??0);$.text(T,U.y+E,I.segs,U.x+U.w-T)}if(Z.card&&Y>0){let E=L8(Z.card,U.w,z,Q);E.slice(E.length-Y).forEach((T,F)=>{let P=U.x+(T.indent??0);$.text(P,U.y+K+F,T.segs,U.x+U.w-P)})}}let D=U.y+U.h-1;if(U.h>=2)$.hline(U.x,D-1,U.w,q(Q.frameDim),"\u254C");if(U.h>=2&&Z.staged.length>0){let M=[[" ",q(-1)]];for(let O of Z.staged)M.push([` \u25A3 ${O} `,q(Q.fg2,Q.selBg)],[" ",q(-1)]);M.push([`${Z.staged.length}/${YZ} \xB7 enter sends \xB7 /attach clear`,q(Q.dim)]),$.text(U.x,D-1,M,U.w)}let H=Z.input.text.length>0;$.put(U.x,D,"\u258C",q(H||X?Q.accent:Q.accentDim));let N=U.w-2;if(N<=0)return;if(H){let M=Math.max(0,Z.input.cur-N+1);$.put(U.x+2,D,Z.input.text.slice(M),q(Q.fg,-1,A.BOLD),N)}else $.put(U.x+2,D,KZ,q(Q.dim),N)}var F0=null,YZ=8,KZ="ask rovecode \u2014 e.g. fix the failing test",I8,qZ="type an answer\u2026",S8="skip this question",v5=6,zZ,DZ=8,HZ=24,NZ=6,s0=($)=>[...$].length,K4=($)=>$.reduce((J,[Z])=>J+s0(Z),0),q4=6,AZ=($)=>Math.max(2,$-5);var $5=k(()=>{p();h9();$0();O8();H0();J0();b0();p0();I8={once:"allow",always:"always","all-edits":"all edits",deny:"deny"},zZ={read:"\xB7",edit:"~",write:"+",remove:"\u2212",run:"$",search:"\u2315",fetch:"\u2197",task:"\xBB"}});function TZ($,J){if($==="sunny")return J.ok;if($==="furious")return J.err;if($==="patient")return J.warn;if($==="focused"||$==="zapping"||$==="conducting")return J.accent;return J.muted}function RZ($){return Math.floor($/g5)%2}function kZ($,J){let Z=[],Q=Math.max(1,J),V="",j=0;for(let X of $.split(" ")){let U=[...X];while(U.length>Q){if(V)Z.push(V),V="",j=0;Z.push(U.splice(0,Q).join(""))}if(!U.length)continue;let G=U.join("");if(!V){V=G,j=U.length;continue}if(j+1+U.length<=Q)V+=" "+G,j+=1+U.length;else Z.push(V),V=G,j=U.length}if(V)Z.push(V);return Z}function O4($,J,Z,Q,V,j){if(!J||J.w<8||J.h<4)return;let X=d$(Q,j);Z.tick(j,X);let U=Z.mood(X,j),G=BZ($,J,Z.state.name,Z.level(X.tokens),U,V);bZ($,G,Z,X,U,V,j)}function BZ($,J,Z,Q,V,j){let X=V==="furious",U=X?h(j.bg,j.err,0.6):j.frame;$.box(J.x,J.y,J.w,J.h,q(U)),$.text(J.x+2,J.y,[[" ",q(-1)],[Z,q(X?U:j.fg2,-1,A.BOLD)],[" ",q(-1)]],J.w-3);let G=[V,q(TZ(V,j),-1,X?A.BOLD:0)],Y=[[[`lv ${Q}`,q(j.muted)],[" ",q(-1)],G],[G]];for(let K of Y){let z=K.reduce((H,[N])=>H+N.length,0),D=J.x+J.w-3-z;if(D>J.x+4+Z.length){$.text(D,J.y,[[" ",q(-1)],...K,[" ",q(-1)]]);break}}return{x:J.x+2,y:J.y+1,w:J.w-4,h:J.h-2}}function bZ($,J,Z,Q,V,j,X){let U=Z.state,G=(L)=>U.fx.find((B)=>B.kind===L),Y=(L,B)=>L>=J.x&&L<J.x+J.w&&B>=J.y&&B<J.y+J.h,K=(L,B,v,c)=>{if(Y(L,B))$.put(L,B,v,c)},z=V==="sleepy",D=V==="furious",H=V==="sunny",N=Q.state==="RUNNING"||Q.state==="TESTING",M=!1,O=[];if(D){let L=Math.floor(X/M4);if(M=X%M4<EZ,O=[3+L*7919%11,3+(L*104729+5)%11],M)$.tint(J.x,J.y,J.w,J.h,h(j.bg,j.warn,0.07))}let _=j.fg2;if(H)_=j.fg;else if(D)_=M?j.warn:h(j.bg,j.err,0.7);else if(z)_=j.mixDim;else if(Q.state==="EDITING"||Q.running)_=j.fg;let E=D?h(j.bg,j.fg,M?0.35:0.22):null,I=D?j.err:z?j.muted:j.fg,T=D?j.fg2:z?j.muted:j.fg,F=G("bounce")?Math.floor(X/200)%2:z?1:RZ(X),P=G("shiver")?Math.floor(X/160)%2:M?1:0,W=J.x+Math.max(0,Math.floor((J.w-IZ)/2))+P,R=J.y+2-F,b="\u2022\u2022",x="\u25E1",C=0,d=!z&&X%5200<170;if(Q.booting)b="\u2500\u2500";else if(D)b=M?"\u25AA\u25AA":"\u2022\u2022",x="\u2229";else if(z)b="\u2500\u2500";else if(H)b="\u25E0\u25E0";else if(V==="patient")x="\u25CB";else if(N)x="\u2500";else if(Q.state==="READING")C=[-1,0,1,0][Math.floor(X/900)%4]??0;else if(Q.running)C=1;if(U.glance&&U.glance.until>X&&!z&&!D)C=U.glance.dir;if(Q.typing&&!Q.running)C=1;if(d&&!D)b="\u2500\u2500";for(let L=0;L<n0.length;L++){let B=R+L,v=n0[L]??"",[c,l8]=x$[L]??[0,0];for(let W0=0;W0<v.length;W0++){let m8=v[W0]??" ";if(m8!==" ")K(W+W0,B,m8,q(_));else if(W0>c&&W0<l8)K(W+W0,B,E!=null?"\u2591":SZ[L]??"\u2591",q(E??h(j.bg,_,LZ[L]??0.14)))}if(L===K0.EYE_ROW)K(W+K0.EYE_L+C,B,b[0]??"\u2022",q(I,-1,A.BOLD)),K(W+K0.EYE_R+C,B,b[1]??"\u2022",q(I,-1,A.BOLD));if(L===K0.EYE_ROW-1&&D)K(W+K0.EYE_L+C,B,"\u2572",q(j.err,-1,A.BOLD)),K(W+K0.EYE_R+C,B,"\u2571",q(j.err,-1,A.BOLD));if(L===K0.MOUTH_ROW)K(W+K0.MOUTH+(C>0?1:0),B,x,q(T))}let u=R+n0.length;if(H)K(W+15,R-1,"\u263C",q(j.warn,-1,A.BOLD)),K(W+17,R-2,"\xB7",q(j.warn)),K(W+13,R-2,"\xB7",q(j.warn)),K(W+18,R,"\xB7",q(j.warn));if(z){let L=Math.floor(X/1200)%3;if(K(W+13,R-(L>=1?1:0),"z",q(j.muted)),L>=1)K(W+15,R-1-(L===2?1:0),"Z",q(j.muted))}if(Q.running&&!D&&V!=="patient"&&Q.state!=="EDITING"&&!N){let L=Math.floor(X/800)%4;if(K(W+17,R+1,"\u25CC",q(j.muted)),L>=1)K(W+18,R,"\u25CB",q(j.muted));if(L>=2)K(W+20,R-1,["\u2026","\xB7","?","\u2026"][Math.floor(X/3000)%4]??"\u2026",q(j.fg2))}if(V==="patient")K(W+17,R+(Math.floor(X/900)%2?0:1),"?",q(j.warn,-1,A.BOLD));if(Q.state==="EDITING")for(let L=0;L<2;L++){let B=Math.floor(X/420)+L*2;for(let v=W+3;v<W+16;v++){if((v+B)%4!==0)continue;let c=N8[(v*7+Math.floor(X/1400)+L)%N8.length]??".";K(v,u+L,c,q(L?j.dim:j.accentDim))}}if(N&&Math.floor(X/700)%2===0){let L=W+4+Math.floor(X/2100)%3*5;K(L,u,"\u2572",q(j.warn,-1,A.BOLD)),K(L,u+1,"\u2571",q(j.warn,-1,A.BOLD))}if(D){let L=Math.max(1,Math.min(3,J.y+J.h-2-u));for(let B=0;B<L;B++)for(let v=W+1;v<W+17;v++)if((v*3+Math.floor(X/330)+B*2)%4===0)K(v,u+B,B%2?"\u2577":"\u2502",q(M?j.fg2:j.info));if(M){for(let B of O)for(let v=0;v<L;v++)K(W+B,u+v,v%2?"\u2571":"\u2572",q(j.warn,-1,A.BOLD));K(W-1,R+2,"\u2572",q(j.warn,-1,A.BOLD)),K(W+18,R+1,"\u2571",q(j.warn,-1,A.BOLD))}}let t=G("sparkle");if(t)for(let L=0;L<7;L++){let B=t.seed*(L+3)*2654435761>>>0,v=J.x+B%J.w,c=J.y+(B>>>8)%Math.max(1,u+1-J.y);if(Math.floor((X+B%500)/520)%2===0&&!(c>=R&&c<u&&v>=W+1&&v<W+18))K(v,c,["*","\xB7","+"][L%3]??"*",q(L%2?j.warn:j.ok))}let U0=G("hearts");if(U0){let L=X-(U0.until-1800),B=Math.min(2,Math.floor(Math.max(0,L)/700));if(K(W+16,R+1-B,"\u2665",q(j.err)),B>=1)K(W+19,R+2-B,"\u2665",q(j.err))}let C0=U.quip&&U.quip.until>X?U.quip.text:null;if(C0){let L=J.y+J.h-2,B=kZ(C0,J.w-3).slice(0,2);B.forEach((v,c)=>{if(L+c<J.y+J.h)$.put(J.x+1,L+c,(c===0?"\u201C":" ")+v+(c===B.length-1?"\u201D":""),q(j.fg2,-1,A.ITALIC),J.w-1)})}}var g5=1800,M4=2600,EZ=260,IZ=18,SZ,LZ;var F4=k(()=>{p();b0();Q0();SZ=["\u2591","\u2591","\u2591","\u2592","\u2593","\u2593"],LZ=[0.1,0.12,0.14,0.18,0.24,0.26]});var W4=()=>{};function vZ($,J,Z){switch(S4($)){case"thinking":case"active":return[L4(Z),J.accent];case"waiting":return["\u25C6",Math.floor(Z/450)%2?J.warn:J.mixDim];case"complete":return["\u25C6",J.ok];case"error":return["\u25C6",J.err];default:return["\u25C6",[J.accent,J.accentDim,J.mixDim,J.accentDim][Math.floor(Z/500)%4]??J.accent]}}function fZ($,J){let Z=S4($);return Z==="idle"?J.muted:Z==="waiting"?J.warn:Z==="complete"?J.ok:Z==="error"?J.err:J.accent}function T8($,J,Z){let[Q,V]=vZ($,J,Z),j=E4($),X=j>0?`\u25C6 ${j}`:null,U=[z0,...X?[[X,q(J.warn)],[" ",q(-1)]]:[],[Q,q(V)],[" "+yZ($,Z),q(fZ($,J))]];if($.activity.startedAt!==null)U.push([" "+X5(I4($,Z)),q(J.muted)]);return U.push(z0),{segs:U,badge:X?[1,w([[X,void 0]])]:null}}function R8($,J){let Z=T4(J),Q=$.usage.effort?`effort ${$.usage.effort}`:"",V=[$.usage.model,Q,$.theme,`v${$.version}`].filter(Boolean),j=$.yolo?[["auto",q(J.warn)],Z]:$.acceptEdits?[["accept edits",q(J.warn)],Z]:[],X=[z0,...$.mode==="plan"?[["plan mode",q(J.warn)],Z]:[],...j],U=[...X,[V.join(" \xB7 "),q(J.dim)],z0],G=[],Y=w(X);for(let z of V)G.push(Y),Y+=w([[z,void 0]])+3;let K=(z)=>[G[z],w([[V[z],void 0]])];return{segs:U,effort:Q?K(V.indexOf(Q)):null,theme:K(V.length-2)}}function R4($,J,Z,Q,V){let j=J.frame;$.box(j.x,j.y,j.w,j.h,q(Q.frameDim));let X=T8(Z,Q,V).segs,U=w(X);$.text(j.x+j.w-2-U,j.y,X);let G=T4(Q),Y=[z0,["\u25C6 ",q(Q.accent)],["rovecode",q(Q.fg,-1,A.BOLD)],G,[Z.repo.name,q(Q.fg2)],z0],K=Z.repo.branch===null?Y:[...Y.slice(0,-1),G,[Z.repo.branch,q(Q.fg2)],G,[`${_4(Z)} modified`,q(Q.fg2)],z0],z=j.w-4-U-2;$.text(j.x+2,j.y,w(K)>z?Y:K,z);let D=R8(Z,Q).segs,H=w(D),N=V<Z.escUntil,M=(I,T,F=Q.fg2)=>[[I,q(F)],[T,q(Q.muted)]],O=Z.running?[M("esc",N?" again to stop":" stop",N?Q.accent:Q.fg2),M("\u2303k"," commands")]:[M("\u23CE"," send"),M("tab"," focus"),M("\u2303k"," commands"),M("\u2303d"," diff"),M("\u2303t"," theme"),M("\u2303c"," quit")],_=j.w-4-H-2,E=(I)=>[z0,...I.flatMap((T,F)=>F?[[" ",void 0],...T]:T),z0];for(let I of["\u2303t","\u2303d","tab","\u2303k"]){if(w(E(O))<=_)break;let T=O.findIndex((F)=>F[0]?.[0]===I);if(T>=0)O.splice(T,1)}$.text(j.x+2,j.y+j.h-1,E(O),_),$.text(j.x+j.w-2-H,j.y+j.h-1,D)}function k4($,J,Z,Q,V){let j=Z.focus==="files",X=e($,J,"files",j,[[String(P4(Z)),q(Q.muted)]],Q),U=u5(Z,V),G=A4(U),Y=Z.files;if(Y.cursor=Math.max(0,Math.min(Y.cursor,U.length-1)),Y.cursor<Y.scroll)Y.scroll=Y.cursor;if(Y.cursor>=Y.scroll+X.h)Y.scroll=Y.cursor-X.h+1;if(Y.scroll=Math.max(0,Math.min(Y.scroll,Math.max(0,U.length-X.h))),U.length===0){if($.put(X.x,X.y,G0.files[0],q(Q.dim),X.w),X.h>1)$.put(X.x,X.y+1,G0.files[1],q(Q.dim),X.w);return}R0($,Q,X.x+X.w-1,X.y,X.h,U.length,X.h,Y.scroll);for(let K=0;K<X.h;K++){let z=Y.scroll+K,D=U[z];if(!D)break;let H=X.y+K,N=z===Y.cursor,M=D.path===Z.code.file,O=N&&j?Q.selBg:-1;if(O>=0)$.tint(X.x,H,X.w,1,O);let _=X.x;for(let I of G[z]??[])_=$.put(_,H,gZ[I],q(Q.rule2,O));if(D.dir)_=$.put(_,H,D.expanded?"\u25BE ":"\u25B8 ",q(Q.dim,O));let E=D.dir?q(Q.fg2,O):D.status==="D"?q(Q.dim,O,A.STRIKE):M?q(Q.accent,O,A.BOLD):D.status?q(Q.fg,O):q(Q.muted,O);if(_=$.clip(_,H,D.name+(D.dir?"/":""),E,X.x+X.w-2-_-1),!D.dir&&D.touchedUntil!==void 0&&D.touchedUntil>V)$.put(_+1,H,L4(V),q(Q.accent,O));if(!D.dir&&D.status)$.put(X.x+X.w-1,H,D.status,q(uZ(D.status,Q),O));else if(D.dir&&!D.expanded&&D.hasChanges)$.put(X.x+X.w-1,H,"\xB7",q(Q.dim,O))}}function B4($,J,Z,Q){J.toasts.filter((V)=>V.until>Q).slice(-3).forEach((V,j)=>{let X=V.tone==="error"?Z.err:V.tone==="warn"?Z.warn:Z.accent,U=$.w-4-[...` \u25C6 ${V.text} `].length;$.text(U,2+j,[[" \u25C6 ",q(X,Z.bg2)],[V.text+" ",q(Z.fg,Z.bg2)]])})}var z0,CZ,S4=($)=>$.card?"waiting":CZ[$.activity.state],L4=($,J=140)=>I0[Math.floor(Math.max(0,$)/J)%I0.length]??"\u25C6",yZ=($,J)=>$.card?"needs you":J!==void 0&&$.activity.turnAt!==void 0&&$.activity.state==="THINKING"?B5(J-$.activity.turnAt):$.activity.label||$.activity.state.toLowerCase(),T4=($)=>[" \xB7 ",q($.dim)],gZ,uZ=($,J)=>$==="M"?J.warn:$==="A"?J.ok:J.err;var k8=k(()=>{p();J0();J8();H0();Q0();b0();p0();J0();z0=[" ",void 0],CZ={IDLE:"idle",THINKING:"thinking",WRITING:"thinking",READING:"thinking",EDITING:"active",RUNNING:"active",TESTING:"active",DELEGATING:"active",WAITING:"waiting",SUCCESS:"complete",ERROR:"error"};gZ={bar:"\u2502 ",tee:"\u251C ",end:"\u2514 ",blank:" "}});function g4($){let J=[],Z=new Map;for(let Q of $){let V=Q.batch??`task:${Q.id}`,j=Z.get(V);if(j===void 0)j={key:V,label:f4(Q.batchLabel??Q.label)||"(no label)",tasks:[],startedAt:Q.startedAt??Q.createdAt,working:0},Z.set(V,j),J.push(j);j.tasks.push(Q),j.startedAt=Math.min(j.startedAt,Q.startedAt??Q.createdAt)}for(let Q of J){Q.working=Q.tasks.filter((j)=>j.status==="queued"||j.status==="running").length;let V=Q.tasks.map((j)=>j.finishedAt);if(V.every((j)=>j!==void 0))Q.finishedAt=Math.max(...V)}return J}function pZ($,J){if($.finishedAt!==void 0)return Math.max(0,$.finishedAt-$.startedAt);return Math.max(0,J-$.startedAt,...$.tasks.map((Z)=>Y5(Z,J)))}function dZ($){let J=Math.max(0,Math.floor($/1000));if(J<60)return`${String(J).padStart(2,"0")}s`;let Z=Math.floor(J/60);if(Z<60)return`${String(Z).padStart(2,"0")}m`;return`${Math.floor(Z/60)}h${String(Z%60).padStart(2,"0")}m`}function hZ($){switch($){case"queued":return"\u25AB";case"running":return"\u25AA";case"done":return"\u25C6";case"failed":return"\xD7";default:return"\xB7"}}function u4($){switch($){case"queued":return"dim";case"running":return"accent";case"done":return"ok";case"failed":return"err";default:return"muted"}}function wZ($){if($.kind==="external")return $.lane??"cli?";return v4($.agent)?`agent:${$.agent}`:$.agent}function lZ($,J){if(J<=0||$.length===0)return[];let Z=[],Q=0;for(let V=0;V<$.length;V++){let j=$.length-V,X=j>1?`+${j}`:"";if(Q+1+s(X)>J&&V>0)return Z.push({text:`+${j}`,tone:"dim"}),Z;if(Q+1>J)return Z;let U=$[V];Z.push({text:hZ(U.status),tone:u4(U.status),bold:U.status==="running"}),Q+=1}return Z}function mZ($,J){if(J<=0||$.length===0)return[];let Z=[];for(let X of $){let U=wZ(X),G=u4(X.status),Y=Z[Z.length-1];if(Y!==void 0&&Y.name===U&&Y.tone===G)Y.count++;else Z.push({name:U,count:1,tone:G})}let Q=(X)=>X.count>1?`${X.name} \xD7${X.count}`:X.name,V=[],j=0;for(let X=0;X<Z.length;X++){let U=Z[X],G=Q(U),Y=Z.slice(X).reduce((H,N)=>H+N.count,0),K=` +${Y}`,z=V.length>0?1:0,D=X<Z.length-1?s(` +${Y-U.count}`):0;if(j+z+s(G)+D>J){if(V.length>0&&j+s(K)<=J)V.push({text:K,tone:"dim"});return V}if(z)V.push({text:" ",tone:"dim"}),j+=1;V.push({text:G,tone:U.tone}),j+=s(G)}return V}function aZ($,J){let Z=y4(f4($));if(J<=0)return"";if(Z.length<=J)return Z.join("");if(J===1)return"\u2026";let Q=Z.slice(0,J-1).join(""),V=Q.lastIndexOf(" ");return(V>=Math.floor((J-1)*0.67)?Q.slice(0,V):Q)+"\u2026"}function x4($,J,Z){let V=`${`${$.tasks.length} agent${$.tasks.length===1?"":"s"}`} \xB7 ${dZ(pZ($,Z))}`;if(J<s(V))return[];let j=[],X=J>=s(V)+2?{text:"\u203A",tone:"dim"}:void 0;j.push({spans:[{text:aZ($.label,J-(X?2:0)),tone:$.working>0?"fg":"fg2",bold:$.working>0}],...X?{right:X}:{}}),j.push({spans:[{text:V,tone:"dim"}]});let U=lZ($.tasks,Math.max(0,Math.min($.tasks.length+2,Math.floor(J/2)))),G=U.reduce((z,D)=>z+s(D.text),0),Y=mZ($.tasks,J-G-2);if(U.length>0)j.push({spans:Y.length>0?[...U,{text:" ",tone:"dim"},...Y]:U});let K=cZ($,J);if(K.length>0)j.push({spans:K});return j}function b4($){if($.progress!==void 0&&"applied"in $.progress)return $.progress.applied;if($.status==="running"||$.status==="queued")return;if($.files!==void 0)return!0;return $.status==="done"&&$.patchLines===0}function cZ($,J){let Z=0,Q=0,V=0,j=0,X=0,U=!1;for(let D of $.tasks){Z+=D.progress?.toolCalls??0;let H=D.files?.length??D.progress?.filesWrittenTotal??0,N=b4(D);if(N===!0)Q+=H;else if(N===void 0)V+=H;else j+=H;let M=D.progress?.usage??D.usage;if(M!==void 0)U=!0,X+=M.input+M.output}let G=[];if(Q>0)G.push({text:`wrote ${Q} file${Q===1?"":"s"}`,tone:"ok"});if(V>0)G.push({text:`${V} file${V===1?"":"s"} so far`,tone:"dim"});if(j>0)G.push({text:`${j} discarded`,tone:"muted"});let Y=$.tasks.some((D)=>b4(D)===!0);if(G.length===0&&$.working===0&&Y)G.push({text:"wrote 0 files",tone:"dim"});if(Z>0)G.push({text:`${Z} call${Z===1?"":"s"}`,tone:"dim"});if(U)G.push({text:n(X),tone:"dim"});if(G.length===0)return[];let K=[],z=0;for(let D of G){let H=K.length>0?3:0;if(z+H+s(D.text)>J)break;if(H)K.push({text:" \xB7 ",tone:"dim"}),z+=3;K.push(D),z+=s(D.text)}return K}function iZ($){let J=[...$].reverse();return[...J.filter((Z)=>Z.working>0),...J.filter((Z)=>Z.working===0)]}function p4($,J,Z,Q){if(Z<=0||J<=0||$.length===0)return{lines:[],hidden:$.length};let j=iZ($).map((Y)=>x4(Y,J,Q)).filter((Y)=>Y.length>0),X=(Y)=>{let K=[],z=0,D=0;for(let N of j){let M=N.length+(Y&&D>0?1:0),O=j.length-D-1>0?1:0;if(z+M+O>Z)break;if(Y&&D>0)K.push({spans:[]}),z++;K.push(...N),z+=N.length,D++}let H=$.length-D;if(H>0&&D>0&&z<Z)K.push({spans:[{text:`+${H} more`,tone:"dim"}]});return{lines:D>0?K:[],hidden:D>0?H:$.length,shown:D}},U=X(!0),G=X(!1);return G.shown>U.shown?{lines:G.lines,hidden:G.hidden}:{lines:U.lines,hidden:U.hidden}}function d4($,J,Z){let Q=$.map((V)=>x4(V,J,Z)).filter((V)=>V.length>0);return Q.reduce((V,j)=>V+j.length,0)+Math.max(0,Q.length-1)}function h4($,J,Z,Q,V,j){V.forEach((X,U)=>{let G=Z+U;if(X.right!==void 0){let K=X.right;$.put(J+Q-s(K.text),G,K.text,q(j[C4[K.tone]]),s(K.text))}if(X.spans.length===0)return;let Y=X.spans.map((K)=>[K.text,q(j[C4[K.tone]],-1,K.bold?A.BOLD:0)]);$.text(J,G,Y,Q-(X.right?s(X.right.text)+1:0))})}var f4=($)=>$.replace(/\s+/g," ").trim(),y4=($)=>[...$],s=($)=>y4($).length,C4;var w4=k(()=>{xZ();S0();J0();Q0();p();C4={fg:"fg",fg2:"fg2",muted:"muted",dim:"dim",ok:"ok",err:"err",accent:"accent",warn:"warn"}});function oZ($,J){let Z=[];if(J<=0)return Z;for(let Q of b8($).split(`
|
|
20
|
-
`)){let V="";for(let j of Q.split(" ")){if(!V){V=j;continue}if([...V].length+1+[...j].length<=J)V+=" "+j;else Z.push(V),V=j}while([...V].length>J){let j=[...V];Z.push(j.slice(0,J).join("")),V=j.slice(J).join("")}Z.push(V)}return Z}function rZ($){let J=[],Z=$.find((V)=>V.status==="in_progress");if(Z)J.push(Z);let Q=$.find((V)=>V.status==="pending");if(Q)J.push(Q);return J}function a4($,J,Z,Q,V=0){let j=Z.plan.todos,X=x5(Z),U=e($,J,"plan",!1,j.length?[[`${X.completed}/${X.total}`,q(Q.muted)]]:[],Q),G=U.y+U.h,Y=U.y;if(Z.plan.note){for(let W of oZ(Z.plan.note,U.w).slice(0,2))if(Y<G)$.put(U.x,Y++,W,q(Q.warn),U.w)}let K=rZ(j),z=g4(Z.crew),D=z.length?Math.min(nZ,d4(z,U.w,V)):0,H=K.length?K.length+1:0,N=D?D+1:0,M=G-H,O=(H?M-1:G)-N,_=Y+2;if(N&&O<_)N=0,O=G;if(H&&M<_)H=0,M=G;let E=N?O-1:H?M-1:G;if($.text(U.x,Y++,[["steps",q(Q.muted)],[j.length?` ${X.completed}/${X.total}`:"",q(Q.dim)]],U.w),!j.length&&Y<E){if($.put(U.x,Y++,G0.plan[0],q(Q.dim),U.w),Y<E)$.put(U.x,Y++,G0.plan[1],q(Q.dim),U.w)}let I=Math.max(0,E-Y),T=j.findIndex((W)=>W.status==="in_progress"),F=0;if(j.length>I&&T>=I-1){let W=Math.max(1,I-2);F=Math.max(0,Math.min(T-Math.floor(W/2),j.length-W))}if(F>0&&Y<E)$.put(U.x,Y++,` \u2026${F} earlier`,q(Q.dim),U.w);let P=F;for(let W of j.slice(F)){if(Y>=E)break;let R=W.status==="in_progress",b=W.status==="completed",x=W.priority==="high"?"high":W.priority==="low"?"low":"";if($.put(U.x,Y,l4[W.status],q(b?Q.okDim:R?Q.accent:Q.dim)),$.clip(U.x+3,Y,b8(W.content),q(b?Q.fg2:R?Q.fg:Q.muted,-1,R?A.BOLD:0),U.w-3-(x?x.length+1:0)),x)$.put(U.x+U.w-x.length,Y,x,q(W.priority==="high"?Q.warn:Q.dim));Y++,P++}if(P<j.length&&P>0)Y--,$.fill(U.x,Y,U.w,1," "),$.put(U.x,Y,` +${j.length-P+1} more`,q(Q.dim),U.w);if(N){let W=O;$.text(U.x,W++,[["crew",q(Q.muted)],[` ${Z9(Z.crew).text}`,q(Q.dim)]],U.w);let R=p4(z,U.w,N-1,V);h4($,U.x,W,U.w,R.lines,Q)}if(H){let W=M;$.put(U.x,W++,"next",q(Q.muted));for(let R of K){let b=R.status==="in_progress";$.text(U.x,W++,[[l4[R.status]+" ",q(b?Q.accent:Q.dim)],[b8(R.content),q(b?Q.fg:Q.muted)]],U.w)}}}function B8($,J){for(let Q of $)if([...Q].length<=J)return Q;let Z=$[$.length-1];if(Z===void 0||J<=0)return"";return J===1?"\u2026":[...Z].slice(0,J-1).join("")+"\u2026"}function m4($){if($<1000)return String(Math.round($));if($<1e4)return`${($/1000).toFixed(1)}k`;if($<1e6)return`${Math.round($/1000)}k`;let J=$/1e6;return J<10&&J!==Math.round(J)?`${J.toFixed(1)}M`:`${Math.round(J)}M`}function c4($,J,Z,Q){let V=e($,J,"usage",!1,[],Q),j=Z.usage,X=(D)=>[D.padEnd(10),q(Q.muted)],U=n(j.tokensIn+j.tokensOut),G=B8([` ${n(j.tokensIn)} in \xB7 ${n(j.tokensOut)} out`,` ${n(j.tokensIn)}/${n(j.tokensOut)}`,""],V.w-10-U.length);if(j.tokensIn+j.tokensOut===0)$.text(V.x,V.y,[X("tokens"),[G0.usage,q(Q.dim)]],V.w);else $.text(V.x,V.y,[X("tokens"),[U,q(Q.fg)],[G,q(Q.dim)]],V.w);if($.text(V.x,V.y+1,[X("context")]),j.contextPct===null)$.put(V.x+10,V.y+1,"?",q(Q.dim));else{let D=`${Math.round(j.contextPct)}%`,H=j.contextWindow!==void 0?`${m4(j.contextTokens??0)}/${m4(j.contextWindow)}`:"",N=H===""?D:`${H} ${D}`,M=Math.max(4,V.w-10-N.length-2),O=sZ(j.contextPct,M);for(let E=0;E<M;E++)$.put(V.x+10+E,V.y+1,E<O?"\u2501":"\u2500",q(E<O?Q.accent:Q.rule2));let _=V.x+10+M+2;if(H!=="")$.put(_,V.y+1,H,q(Q.dim));$.put(_+(H===""?0:H.length+1),V.y+1,D,q(j.contextPct>80?Q.warn:Q.fg))}let Y=j.costUsd===null?"\u2014":`$${j.costUsd.toFixed(3)}`,K=j.model?B8([j.provider?` ${j.provider}/${j.model}`:` ${j.model}`,` ${j.model}`],V.w-10-Y.length):"";$.text(V.x,V.y+2,[X("cost"),[Y,q(Q.fg)],[K,q(Q.dim)]],V.w);let z=Z.context?C9(Z.context.drift,Z.context.tolerance):void 0;if(z&&V.h>3)$.text(V.x,V.y+3,[X("drift"),[B8([z.text,""],V.w-10),q(z.warn?Q.warn:Q.dim)]],V.w)}var nZ=7,l4,b8=($)=>$.replace(/\s+/g," ").trim(),sZ=($,J)=>Math.round(Math.max(0,Math.min(100,$))/100*J);var i4=k(()=>{p();J8();J0();S0();w4();H0();Q0();u0();l4={completed:"\u25C6",in_progress:"\u25C8",pending:"\u25C7"}});function eZ($,J,Z){let V=$-4,X=J-2,U=$>=140,G=$>=110,Y=U?$>=150?30:26:0,K=G?$>=150?34:28:0,z=X-1+1,D=U?{x:2,y:1,w:Y,h:z}:null,H=V-K+1,N=2+(U?Y+1:0),M=(G?H-1:V+1)-N,O=Math.max(8,Math.round(z*0.34)),_={x:N,y:1,w:M,h:z-O},E={x:N,y:1+_.h,w:M,h:O},I=null,T=null,F=null;if(G)I={x:H,y:1,w:K,h:z-5},T={x:H,y:1+I.h,w:K,h:5};let P=Z.pet&&z>=36?14:0;if(P&&D)D.h=z-P,F={x:2,y:1+D.h,w:Y,h:P};else if(P&&I)I.h-=P,F={x:H,y:1+I.h,w:K,h:P};return{w:$,h:J,frame:{x:0,y:0,w:$-1,h:J},files:D,code:_,messages:E,plan:I,usage:T,pet:F}}function o4($,J,Z,Q,V={}){let j={...tZ};for(let Y of Object.keys(j)){let K=V.painters?.[Y];if(K)j[Y]=K}let X=(V.layout??eZ)($.w,$.h,V.layoutOpts??{pet:!0});n4(J,Q);let U=Q-J.bootAt;if(j.frame($,X.frame,J,Z,Q),X.files&&U>=0)j.files($,X.files,J,Z,Q);let G=O0(X,J);if(U>=J5)if(G==="files")j.files($,X.code,J,Z,Q);else if(G==="plan")j.plan($,X.code,J,Z,Q);else j.code($,X.code,J,Z,Q);if(U>=J5*2)j.messages($,X.messages,J,Z,Q);if(X.plan&&U>=J5*3)j.plan($,X.plan,J,Z,Q);if(X.usage&&U>=J5*4)j.usage($,X.usage,J,Z,Q);if(X.pet&&U>=J5*5)j.pet($,X.pet,J,Z,Q);return B4($,J,Z,Q),X}var J5=90,C8=($)=>(J,Z,Q,V)=>{e(J,Z,$,!1,[],V)},tZ;var r4=k(()=>{W4();k8();i4();H0();J0();T5();tZ={frame:($,J,Z,Q,V)=>R4($,{frame:J},Z,Q,V),files:k4,code:C8("code"),messages:C8("messages"),plan:a4,usage:c4,pet:C8("rovecode")}});function $1($,J,Z){let Q=Z.x+1,V=Z.x+Z.w-2,j=Z.y+1,X=Z.y+Z.h-2,U=(H)=>Math.min(V,Math.max(Q,H)),G=(H)=>Math.min(X,Math.max(j,H)),Y=U(Math.min($.x,J.x)),K=U(Math.max($.x,J.x)),z=G(Math.min($.y,J.y)),D=G(Math.max($.y,J.y));return{x0:Y,y0:z,x1:K,y1:D}}class v8{d;sel=null;pending=null;anchor=null;constructor($){this.d=$}get active(){return this.sel!==null}cancel(){this.sel=null,this.pending=null,this.anchor=null}onMouseEvent($,J){let Z=P5($);if(Z==="wheel-up"||Z==="wheel-down")return this.pending=null,!1;if(this.pending===null&&this.sel===null){let Q=this.d.messagesRect();if(Z!=="click"||!s4($.x,$.y,Q))return!1;let V=this.d.state;if(V.card!==null||V.palette!==null||V.market!==null||V.context!==null||V.help)return!1;if(this.d.hits().some((j)=>j.onDrag!==void 0&&s4($.x,$.y,j.rect)))return!1;return this.pending=$,!0}if(Z==="drag"){let Q=this.d.messagesRect();if(this.pending!==null)this.anchor={x:this.pending.x,y:this.pending.y},this.pending=null;if(this.anchor===null)return!1;return this.sel=$1(this.anchor,$,Q),this.d.markDirty(),!0}if(Z==="release"){if(this.pending!==null){let Q=this.pending;return this.pending=null,this.d.forward(Q,J),!0}if(this.sel!==null)return this.copy(J),this.sel=null,this.anchor=null,this.d.markDirty(),!0}return this.pending=null,!1}highlight(){let $=this.sel;if($===null)return null;return{x:$.x0,y:$.y0,w:$.x1-$.x0+1,h:$.y1-$.y0+1}}selectedText(){let $=this.sel,J=this.d.screenText();if($===null||J===null)return"";let Z=J.split(`
|
|
21
|
-
`),Q=[];for(let V=$.y0;V<=$.y1;V++)Q.push([...Z[V]??""].slice($.x0,$.x1+1).join("").replace(/\s+$/,""));while(Q.length>0&&Q[0].trim()==="")Q.shift();while(Q.length>0&&Q[Q.length-1].trim()==="")Q.pop();return Q.join(`
|
|
22
|
-
`)}copy($){let J=this.selectedText();if(J==="")return;this.d.write(`\x1B]52;c;${Buffer.from(J,"utf8").toString("base64")}\x07`),o0(this.d.state,`copied ${[...J].length} characters to the clipboard`,$)}}var s4=($,J,Z)=>$>=Z.x&&$<Z.x+Z.w&&J>=Z.y&&J<Z.y+Z.h;var t4=k(()=>{l0();J0()});function e4($,J,Z){let Q=J.card;if(Q===null||Q===void 0)return[];if($.w<4||$.h<3)return[];let V=a($),{cardH:j,msgH:X,maxDetail:U}=q0(V,J);if(j<=0)return[];let G=L8(Q,V.w,U,Z),Y=G.length-j,K=(E)=>{let I=E-Y;return I<0||I>=j?null:V.y+X+I},z=[];if(Q.kind==="approval"){let E=K(G.length-1);if(E===null)return[];let I=V.x+y8;for(let[T,F]of Q.verdicts.entries()){let P=f(I8[F]??String(F))+f8;if(I+P>V.x+V.w)break;z.push({rect:{x:I,y:E,w:P,h:1},index:T,confirm:!0}),I+=P+J1}return z}let D=Q.prompt.options??[],{q:H,freeRows:N}=e0(Q,V.w);if(y5(Q,V.w,U).total!==1+H+D.length+N+2)return[];let O=(E,I,T,F,P=1)=>{let W=K(E);if(W!==null&&T>0)z.push({rect:{x:V.x+y8,y:W,w:T,h:P},index:I,confirm:F})},_=Math.max(0,V.w-y8);for(let[E,I]of D.entries())O(1+H+E,E,Math.min(f(I)+f8,_),!0);if(N>0){let E=1+H+D.length,I=Math.max(E,Y),T=E+N-I;if(T>0)O(I,D.length,_,!1,T)}return O(1+H+D.length+N,D.length+(N>0?1:0),Math.min(f(S8)+f8,_),!0),z}var f8=2,J1=2,y8=2;var $J=k(()=>{$5();$0();D0()});function JJ($,J,Z){if($===null||Z.length===0)return[];let Q=a($);if(Q.w<=0||Q.h<=0)return[];let V=[];for(let j=0;j<Q.h;j++){let X=J.files.scroll+j;if(X>=Z.length)break;V.push({rect:{x:Q.x,y:Q.y+j,w:Q.w,h:1},index:X})}return V}var ZJ=k(()=>{$0()});function Z1($,J,Z,Q){let V=Math.max(0,Z-Q),j=$.trackH-$.thumbH;if(j<=0||V===0)return 0;let X=Math.max($.trackY,Math.min($.trackY+j,$.thumbY+J));return Math.round((X-$.trackY)/j*V)}function g8($,J,Z,Q){if(!$.visible)return null;return{rect:x9($),onClick:()=>{},onDrag:(V,j)=>Q(Z1($,j,J,Z))}}function QJ($,J,Z,Q){if(J.stick)return;let{max:V}=P0($.messages,J,Z,Q);if(J.msgScroll>=V)J.stick=!0,J.msgScroll=V}function VJ($,J,Z,Q,V,j){let X=[];{let Y=a($.messages),{msgH:K}=q0(Y,Z),{offset:z,max:D}=P0($.messages,Z,Q,V),H=D+K,N=g8(x0(Y.x+Y.w-1,Y.y,K,H,K,z),H,K,(M)=>{Z.msgScroll=M,Z.stick=M>=D});if(N)X.push(N)}let U=$.files??(J==="files"?$.code:null);if(U){let Y=a(U),K=g8(x0(Y.x+Y.w-1,Y.y,Y.h,j.length,Y.h,Z.files.scroll),j.length,Y.h,(z)=>{Z.files.scroll=z,Z.files.cursor=Math.max(z,Math.min(Z.files.cursor,z+Y.h-1))});if(K)X.push(K)}let G=Z.code;if(J==="code"&&(G.mode==="code"||G.mode==="diff"||G.mode==="search")){let Y=a($.code);if(Y.w>=V0+2){let K=W5(Z,Y.w-V0-2),z=d0($.code,Z),D=g8(x0(Y.x+Y.w-V0-1,Y.y,Y.h,K,Y.h,z),K,Y.h,(H)=>{G.scroll=H});if(D)X.push(D)}}return X}var jJ=k(()=>{_5();$5();$0();p0()});function XJ($,J,Z,Q){let V=[],j=T8(J,Z,Q),X=$.x+$.w-2-w(j.segs);if(j.badge)V.push({rect:{x:X+j.badge[0],y:$.y,w:j.badge[1],h:1},onClick:()=>{},key:{type:"key",name:"b",ctrl:!0}});let U=R8(J,Z),G=$.x+$.w-2-w(U.segs),Y=$.y+$.h-1;if(U.effort)V.push({rect:{x:G+U.effort[0],y:Y,w:U.effort[1],h:1},onClick:()=>{J.input.text="/effort ",J.input.cur=J.input.text.length,J.input.sgSel=0,J.focus="messages"}});return V.push({rect:{x:G+U.theme[0],y:Y,w:U.theme[1],h:1},onClick:()=>{},key:{type:"key",name:"t",ctrl:!0}}),V}var UJ=k(()=>{k8();H0()});function GJ($,J,Z,Q){let V=a($);if(V.w<3||V.h<1)return[];let{msgH:j}=q0(V,J);if(j<=0)return[];let X=f5(J,V.w,Z,Q),{offset:U}=P0($,J,Z,Q),G=[];for(let Y=0;Y<j;Y++){let K=X[U+Y];if(!K?.path)continue;let z=V.x+(K.indent??0);G.push({rect:{x:z,y:V.y+Y,w:Math.max(1,V.w-(K.indent??0)-1),h:1},path:K.path})}return G}var YJ=k(()=>{$5();$0()});class u8{d;screen=null;timer=null;dueAt=0;_pace=A0;ambientDue=-1/0;unsubs=[];carry="";held="";holdTimer=null;dirty=!0;lastRender=-1/0;L;hits=[];drag={zone:null,y0:0};selection;rows=[];frames=0;constructor($){this.d=$;let{cols:J,rows:Z}=$.io.size();this.L=a5(J,Z,this.layoutOpts()),this.selection=new v8({state:$.state,messagesRect:()=>this.L.messages,hits:()=>this.hits,screenText:()=>this.screen?.toText()??null,write:(Q)=>{$.io.write(Q)},markDirty:()=>this.markDirty(),forward:(Q,V)=>this.forward(Q,V)})}layoutOpts(){return{pet:p$(this.d.io.env)}}get active(){return this.timer!==null}get layout(){return this.L}get pace(){return this._pace}markDirty(){this.dirty=!0,this.wake()}frameText(){return this.screen?.toText()??""}prepare(){let{cols:$,rows:J}=this.d.io.size();this.screen=new Z5(this.d.io,$,J,{truecolor:this.d.truecolor}),this.render(this.d.clock(),!1)}start($,J=!1){if(this.timer)return;let{cols:Z,rows:Q}=this.d.io.size(),V=$;this.screen=new Z5({write:(j)=>{let X=V;if(V=void 0,X&&J){let U=String.fromCharCode(27);this.d.io.write(`${U}[?2026h`);try{X(),this.d.io.write(j)}finally{this.d.io.write(`${U}[?2026l`)}}else X?.(),this.d.io.write(j)}},Z,Q,{truecolor:this.d.truecolor}),this.unsubs.push(this.d.io.onInput((j)=>this.feed(j))),this.unsubs.push(this.d.io.onResize((j,X)=>{this.screen?.resize(j,X),this.selection.cancel(),this.markDirty()})),this._pace=A0,this.arm(A0),this.render(this.d.clock())}arm($){if(this.timer!==null)clearTimeout(this.timer);this.dueAt=performance.now()+$,this.timer=setTimeout(()=>this.fire(),$)}fire(){let $=this.timer;if(this.tick(),this.timer===$)this.timer=null,this.arm(this._pace)}wake(){if(this.timer!==null&&this.dueAt-performance.now()>A0)this.arm(A0)}stop(){if(this.timer)clearTimeout(this.timer),this.timer=null;if(this.holdTimer)clearTimeout(this.holdTimer),this.holdTimer=null;this.held="",this.selection.cancel();for(let $ of this.unsubs)$();this.unsubs=[]}feed($){if(this.holdTimer)clearTimeout(this.holdTimer),this.holdTimer=null;let J=this.held+$;if(this.held="",J.endsWith("\x1B")){this.held=J,this.holdTimer=setTimeout(()=>{this.holdTimer=null,this.flushInput()},U1);return}this.parse(J)}flushInput(){if(this.holdTimer)clearTimeout(this.holdTimer),this.holdTimer=null;let $=this.held;if(this.held="",$)this.parse($)}parse($){let J=G$($,this.carry);this.carry=J.rest;for(let Z of J.events)this.dispatch(Z);if(this.timer!==null&&J.events.length>0)this.render(this.d.clock())}dispatch($){let J=this.d.clock();if(this.markDirty(),this.d.beforeInput?.($,J))return;if($.type==="key"&&this.selection.active)this.selection.cancel();if($.type==="mouse"&&this.selection.onMouseEvent($,J))return;this.forward($,J)}forward($,J){let Z=this.d.keyCtx(),Q={layout:this.L,hooks:Z.hooks,local:Z.local,hits:this.hits,rows:this.rows,fuzzy:Y0,drag:this.drag};z8(this.d.state,$,Q,J),this.d.afterInput?.($,J)}moving($){let J=this.d.state,Z=this.d.pet.state;return J.running||J.card!==null||J.files.touched.size>0||$-J.bootAt<X1||$<Z.stormUntil||Z.fx.some((Q)=>Q.until>$)}nextAmbient($){let J=this.d.state,Z=this.d.pet.state,Q=1/0;if(J.card===null&&J.activity.state==="IDLE")Q=Math.min(Q,(Math.floor($/KJ)+1)*KJ);if(this.L.pet)Q=Math.min(Q,(Math.floor($/g5)+1)*g5);if(Z.quip&&Z.quip.until>$)Q=Math.min(Q,Z.quip.until);if(Z.glance&&Z.glance.until>$)Q=Math.min(Q,Z.glance.until);for(let V of J.toasts)if(V.until>$)Q=Math.min(Q,V.until);if($<J.escUntil)Q=Math.min(Q,J.escUntil);return Q}tick(){let $=this.d.clock();if(this.d.onTick?.($),this.dirty||this.moving($)||$>=this.ambientDue||$-this.lastRender>=Q1)this.render($);this._pace=this.nextPace($)}nextPace($){if(this.dirty||this.moving($))return this.ambientDue=-1/0,A0;return this.ambientDue=this.nextAmbient($),Math.min(V1,Math.max(A0,this.ambientDue-$))}render($,J=!0){let Z=this.screen;if(!Z)return;let Q=this.d.state,V=this.d.theme(),j=this.d.pet;Z.begin(V.bg),this.rows=u5(Q,$);let X=[],U=o4(Z,Q,V,$,{layout:a5,layoutOpts:this.layoutOpts(),painters:{code:(_,E,I,T,F)=>n9(_,E,I,T,F,{tokenize:s9}),messages:N4,pet:(_,E,I,T,F)=>O4(_,E,j,I,T,F)}});if(this.L=U,U.pet)X.push({rect:U.pet,onClick:()=>j.poke(this.d.clock())});for(let _ of XJ(U.frame,Q,V,$))X.push(_);let G=O0(U,Q);for(let _ of T$(Z,U,Q,V))X.push({rect:_.rect,onClick:()=>{Q.page=_.page,Q.focus=_.page==="files"?"files":"code"}});let Y={x:U.code.x+2,y:U.code.y+1,w:U.code.w-9,h:U.code.h-2};if(G==="code"&&Q.code.mode==="agents"&&!Q.code.laneOpen)for(let{index:_,rect:E}of o5(Y,Q).cells)X.push({rect:E,onClick:()=>{Q.code.lane=_,Q.focus="code"}});let K=U.files??(G==="files"?U.code:null);for(let _ of JJ(K,Q,this.rows))X.push({rect:_.rect,onClick:()=>{Q.focus="files",Q.files.cursor=_.index},key:{type:"key",name:"enter"}});for(let _ of VJ(U,G,Q,V,$,this.rows))X.push(_);QJ(U,Q,V,$);for(let _ of GJ(U.messages,Q,V,$))X.push({rect:_.rect,onClick:()=>this.d.keyCtx().local.openFile(_.path)});for(let _ of e4(U.messages,Q,V))X.push({rect:_.rect,onClick:()=>{if(Q.card)Q.card.selected=_.index},..._.confirm?{key:{type:"key",name:"enter"}}:{}});let z=this.selection.highlight();if(z)Z.tint(z.x,z.y,z.w,z.h,h(V.bg,V.accent,0.35));qJ(Z,U.messages,Q,B0(Q,Q.files.paths,Y0).slice(0,j1),V,X);let D=zJ(Z,U,V,Q,Y0,X),H=H9(Z,U,V,Q,Y0,X),N=v9(Z,U,V,Q,X),M=F9(Z,U,V,Q,X);if(Q.help)DJ(Z,U,V,Q,X);this.hits=X,Q.code.scroll=Q.code.mode==="agents"?r5(Y,Q):d0(U.code,Q),Q.msgScroll=P0(U.messages,Q,V,$).offset;let O=Q.palette?D:Q.market?H:Q.context?N:Q.wizard?M:Q.help?null:H4(U.messages,Q);if(J)Z.flush(O),this.frames++;this.dirty=!1,this.lastRender=$}}var A0=40,Q1=170,V1=2000,KJ=500,j1=8,X1=600,U1=20;var HJ=k(()=>{S0();_5();$5();F4();h0();r4();l0();H8();H0();J0();X0();z5();H5();u0();b0();D0();t4();Q0();$J();ZJ();jJ();UJ();YJ();T5()});class d8{d;wanted;timer=null;deferred=new Set;inFlight=!1;lastScanAt=-1/0;hasGit=!1;stopped=!1;ac=new AbortController;live=null;constructor($,J){this.d=$;this.wanted=J?"full":null}afterMutation(){if(this.wanted!==null||this.hasGit||this.inFlight)this.wanted="full"}afterAttach(){if(this.wanted!==null||this.lastScanAt!==-1/0)this.wanted="full"}get scanning(){return this.inFlight}prepare(){if(this.stopped)return Promise.resolve();if(this.timer)clearTimeout(this.timer),this.timer=null;if(!this.live)this.live=this.scan();return this.live}onTick($,J){if(this.wanted===null&&this.hasGit&&!J&&$-this.lastScanAt>=p8)this.wanted="status";if(this.wanted!==null&&!this.inFlight&&!this.timer&&!this.stopped)this.timer=setTimeout(()=>{this.timer=null,this.live=this.scan()},0)}async scan(){if(this.stopped||this.wanted===null)return;let $=this.wanted,J=this.d.state;this.wanted=null,this.lastScanAt=this.d.clock(),this.inFlight=!0;let Z=(Q,V)=>this.d.git(Q,V,this.ac.signal);try{if($==="full"){let Q=await U4(J.cwd,Z);if(this.stopped)return;x8(J,Q.paths,Q.statuses),J.repo.branch=Q.branch,this.hasGit=Q.git}else{let Q=await G4(J.cwd,Z);if(this.stopped)return;if(Q)x8(J,J.files.paths,Q)}this.d.dirty()}finally{this.inFlight=!1}}scheduleDiff($,J,Z,Q){this.defer(async()=>{let V=await A8(this.d.state.cwd,J,Z,this.d.git,Q);if(this.stopped||!V)return;if(V.base!=="head")$.add=V.add,$.del=V.del;this.show(J,V,!0)})}loadDiff($){this.defer(async()=>{let J=await Y4(this.d.state.cwd,$,this.d.git);if(this.stopped)return;if(J)this.show($,J,!1);else this.d.state.code.diff=null,this.d.dirty()})}show($,J,Z){let Q=this.d.state;if(Q.code.diff={file:$,hunks:J.hunks,add:J.add,del:J.del,...J.base?{base:J.base}:{}},Z)Q.code.mode="diff";this.d.dirty()}defer($){if(this.stopped)return;let J=setTimeout(()=>{if(this.deferred.delete(J),!this.stopped)$()},0);this.deferred.add(J)}stop(){if(this.stopped=!0,this.timer)clearTimeout(this.timer),this.timer=null;for(let $ of this.deferred)clearTimeout($);return this.deferred.clear(),this.ac.abort(),this.live??Promise.resolve()}}var p8=5000;var h8=k(()=>{J0();E8()});var TJ={};G1(TJ,{SextantRenderer:()=>LJ,IDLE_SCAN_MS:()=>p8});import{homedir as w8}from"os";import{basename as NJ,join as q1}from"path";class LJ{state;theme;io;clock;pet;loop;repo;applyEv;truecolor;hooks=null;ctx=null;unsubTasks=null;started=!1;stopped=!1;mouseTracking=!0;busy=!1;dropNotes=0;cards;liveCalls=new Map;before=new Map;editOps=new Map;loadedFile=null;planLoaded=!1;todoDone=0;fetchWizardModels(){let $=this.state.wizard;if(!$)return;$.modelsLoading=!0,this.loop.markDirty();let J=$.providers[$.selected]?.key??"";(this.ctx?.wizardModels?.(J)??Promise.resolve([])).then((Z)=>{if(!this.state.wizard)return;if(e5(this.state.wizard,Z),Z.length===0)this.state.wizard.error="the endpoint listed no models \u2014 type the id by hand (it still pins)";this.loop.markDirty()}).catch(()=>{if(!this.state.wizard)return;this.state.wizard.modelsLoading=!1,this.state.wizard.error="the model list could not be read \u2014 type the id by hand",this.loop.markDirty()})}constructor($){this.io=$.io,this.clock=$.clock??Date.now,this.truecolor=$.truecolor??!0;let J=d5($.theme??"")?$.theme:"night";this.theme=h5(J);let Z=$.cwd??process.cwd();this.state=_J({cwd:Z,repo:{name:NJ(Z)||Z,branch:null},version:OJ.version,theme:J,mode:"act",yolo:!1,commands:[],now:this.clock()}),this.pet=h$({name:$.pet}),this.applyEv=PJ(),this.repo=new d8({state:this.state,clock:this.clock,git:$.git?Q$($.git):j0,dirty:()=>this.loop.markDirty()},$.scan??!0),this.cards=new _8({state:this.state,dirty:()=>this.loop.markDirty(),stopped:()=>this.stopped,onApprovalOpen:()=>this.pet.event("permission",void 0,this.clock()),onAllowed:()=>this.pet.event("allowed",void 0,this.clock())}),l9(X9),this.loop=new u8({io:this.io,clock:this.clock,state:this.state,theme:()=>this.theme,pet:this.pet,truecolor:this.truecolor,keyCtx:()=>({hooks:this.hooks??D1,local:this.local}),beforeInput:(Q,V)=>this.beforeInput(Q,V),afterInput:(Q,V)=>this.afterInput(Q,V),onTick:(Q)=>this.onTick(Q)})}frameText(){return this.loop.frameText()}get active(){return this.loop.active}get frames(){return this.loop.frames}get themeName(){return this.theme.name}tick(){this.loop.tick()}flushInput(){this.loop.flushInput()}setMouse($){if(this.mouseTracking===$)return;if(this.mouseTracking=$,this.terminalEntered&&!this.stopped)this.io.write($?q$():z$())}get mouse(){return this.mouseTracking}start($,J){if(this.started)return;this.started=!0,this.hooks=$,this.state.bootAt=J?.animate===!1?-1/0:this.clock(),J?.beforeFirstRender?.();let Z=()=>{if(this.stopped)return;this.loop.start(()=>{J?.onReveal?.(),this.terminalEntered=!0,this.io.enterRaw(),this.io.write(Y$(this.mouseTracking))},J?.beforeReveal!==void 0)};if(!J?.beforeReveal){Z();return}this.loop.prepare();let Q=this.repo.prepare().catch(()=>{if(!this.stopped)this.addSystemNote("initial file list unavailable \u2014 file tools remain available","warn")});return Promise.all([Q,J.beforeReveal()]).then(Z)}terminalEntered=!1;drained=null;drain(){return this.drained??this.repo.stop()}stop(){if(this.stopped)return;this.stopped=!0,this.loop.stop(),this.drained=this.repo.stop(),this.unsubTasks?.(),this.unsubTasks=null,this.cards.settleAll(),this.restoreTerminal(),this.hooks=null}restoreTerminal(){if(!this.terminalEntered||this.restored)return;this.restored=!0;try{this.io.write(K$())}catch{}try{this.io.leaveRaw()}catch{}}restored=!1;attach($){this.ctx=$;let J=this.state;if(J.cwd=$.cwd,J.repo.name=NJ($.cwd)||$.cwd,$.petName)this.pet.state.name=$.petName.slice(0,14);this.unsubTasks?.();let Z=()=>{let Q=$.tasks.list();if(Q.length>J.crew.length)J.code.lane=Q.length-1;SJ(J,Q),this.loop.markDirty()};Z(),this.unsubTasks=$.tasks.subscribe((Q)=>{Z(),r$(this.pet,Q,this.clock())}),this.repo.afterAttach(),this.refreshPlan()}onEvent($){let J=this.clock(),Z=this.state;if(this.applyEv(Z,$,J),o$(this.pet,$,this.liveCalls,Z.cwd,J),this.dropNotes+=n$($),$.type==="tool_execution_start"&&$.tool==="edit")this.editOps.set($.callId,Q4($.args));if($.type==="tool_execution_end"||$.type==="tool_call_failed"){let Q=this.rowOf($.callId),V=Q?.path!==void 0?this.before.get(Q.path):void 0;if(Q?.path!==void 0)this.before.delete(Q.path);let j=this.editOps.get($.callId)??[];if(this.editOps.delete($.callId),Q&&(Q.verb==="edit"||Q.verb==="write"||Q.verb==="remove"||Q.verb==="run")){if(this.repo.afterMutation(),Q.path!==void 0&&Q.path===Z.code.file)Z.code.content=null;if(this.loadedFile=null,$.type==="tool_execution_end"&&$.ok&&Q.path!==void 0&&(Q.verb==="edit"||Q.verb==="write"))this.repo.scheduleDiff(Q,Q.path,V,j)}}this.loop.markDirty()}previewInCodePanel($,J,Z){if($!=="edit"&&$!=="write")return null;let Q=F8(J).path;if(typeof Q!=="string"||!Q)return null;let V=b5(this.state.cwd,Q);this.before.set(V,r0(this.state.cwd,V));let j=Z?i9(Z):[];if(!j.length)return V;let X=j.flatMap((U)=>U.rows);return this.state.code.diff={file:V,hunks:j,add:X.filter((U)=>U.op==="+").length,del:X.filter((U)=>U.op==="-").length},this.state.code.mode="diff",V}setCommands($){this.state.commands=$.map((J)=>({name:J.name,description:J.description,...J.choices?{choices:J.choices}:{},...J.choicesThen?{choicesThen:J.choicesThen}:{}})),this.loop.markDirty()}addUser($){this.push(i$($,this.clock()))}addSystemNote($,J="info"){if(this.dropNotes>0){this.dropNotes--;return}if(this.push({kind:"system",text:$,tone:J}),J!=="info"||!$.includes(`
|
|
23
|
-
`)&&$.length<=MJ)this.toast($.split(`
|
|
24
|
-
`)[0]??"",J)}beginAssistant(){if(this.busy)return z1;let $={kind:"assistant",text:"",streaming:!0};return this.push($),{append:(J)=>{$.text+=J,this.loop.markDirty()},done:()=>{$.streaming=!1,this.loop.markDirty()}}}toolStart($,J,Z){if(this.busy)return;this.push(W8($,J,Z,this.state.cwd))}toolUpdate($,J){if(this.busy)return;let Z=this.rowOf($);if(Z)Z.detail=t0(J,80),this.loop.markDirty()}toolEnd($,J,Z,Q){if(this.busy)return;let V=this.rowOf($);if(!V)V=W8($,"tool","{}",this.state.cwd),this.push(V);V.running=!1,V.ok=J,V.ms=Q;let j=WJ({verb:V.verb},V.tool,J,Z);if(j.detail)V.detail=j.detail;this.loop.markDirty()}askApproval($,J,Z){let Q=this.previewInCodePanel($,J,Z),V=this.cards.approval($,J,Z);if(Q!==null)V.then((j)=>{if(j==="deny")this.before.delete(Q)});return V}pickOne($,J){return this.cards.pick($,J)}askQuestion($,J){return this.cards.question($,J)}clearTranscript(){this.state.messages=[],this.state.stick=!0,this.pet.event("fresh",void 0,this.clock()),this.loop.markDirty()}prefillEditor($){let J=this.state.input;J.text=$,J.cur=$.length,J.sgSel=0,J.histIdx=-1,this.state.focus="messages",this.loop.markDirty()}setBusy($,J){let Z=this.state,Q=this.clock();if(this.busy=$,$){if(Z.running=!0,J)Z.activity.label=J.replace(/\u2026$/,"")}else{if(this.dropNotes=0,Z.running){if(Z.running=!1,Z.activity.startedAt!==null&&Z.activity.endedAt===null)Z.activity.endedAt=Q;if(Z.activity.state!=="SUCCESS"&&Z.activity.state!=="ERROR")Z.activity.state="IDLE",Z.activity.label="stopped";for(let V of Z.messages)if(V.kind==="tool"&&V.running)V.running=!1,V.ok=!1,V.detail??="interrupted";this.pet.event("stopped",void 0,Q)}Z.escUntil=0,delete Z.ctrlCUntil}this.loop.markDirty()}setStatus($){let J=this.state;if(J.yolo=$.yolo,J.acceptEdits=$.permission==="accept-edits",$.mode)J.mode=$.mode;let Z=this.ctx?.usage?.();EJ(J,{provider:$.provider,model:$.model,turns:$.turns,tokensIn:$.tokensIn,tokensOut:$.tokensOut,...$.effort!==void 0?{effort:$.effort}:{},contextTokens:Z?.contextTokens??0,contextWindow:this.ctx?.contextWindow(),costUsd:Z?Z.costUsd:null}),this.refreshPlan(),this.loop.markDirty()}push($){this.state.messages.push($),this.state.stick=!0,this.loop.markDirty()}rowOf($){for(let J=this.state.messages.length-1;J>=0;J--){let Z=this.state.messages[J];if(Z.kind==="tool"&&Z.callId===$)return Z}return}toast($,J="info"){AJ(this.state,t0($.trim(),MJ),this.clock(),J),this.loop.markDirty()}refreshPlan(){if(!this.ctx)return;IJ(this.state,FJ(q1(this.ctx.sessionsDir,this.ctx.store().id)));let $=x5(this.state);if(this.planLoaded&&$.completed>this.todoDone)this.pet.event("todo_done",{d:$.completed,n:$.total},this.clock());this.planLoaded=!0,this.todoDone=$.completed}local={setTheme:($)=>{this.theme=h5($),this.state.theme=$,this.toast(`theme \xB7 ${$}`),this.pet.event("theme",void 0,this.clock())},attachImage:($)=>this.ctx?.attachImage?.($),setMode:($)=>{if($==="diff"&&this.state.code.file)this.repo.loadDiff(this.state.code.file)},openFile:($)=>{this.state.code.content=r0(this.state.cwd,$),this.state.code.hl=null,this.loadedFile=$},toast:($)=>this.toast($),openMarket:()=>{q9(this.state,[],{kind:"loading"}),this.loop.markDirty(),S9(this.state.cwd,w8()).then(($)=>{if(this.state.market)this.state.market.rows=$.rows,this.state.market.status=$.status,this.state.market.notes=$.notes,this.loop.markDirty()}).catch(($)=>{if(this.state.market)this.state.market.status={kind:"error",reason:$ instanceof Error?$.message:String($)},this.loop.markDirty()})},openWizard:()=>{let $=this.ctx?.wizardProviders?.();if(!$||$.length===0){this.toast("no provider table behind this surface");return}O9(this.state,$),this.loop.markDirty()},openContext:()=>{let $=this.ctx?.model()??{provider:"unknown",model:"unknown"},J=this.ctx?.contextInputs?.();if(B9(this.state,{model:`${$.provider}/${$.model}`,raw:0,estimated:0,scale:{factor:1,measured:!1,note:"counting\u2026"},slices:[],images:0,billed:{input:0,output:0,cacheRead:0,cacheWrite:0},unpricedTurns:0,live:!1,tolerance:0.05}),this.loop.markDirty(),!J)return;g9({messages:J.messages,current:$,lookup:J.lookup,fixed:y9(J.runtime,$)}).then((Z)=>{if(!this.state.context)return;this.state.context={...Z,scroll:this.state.context.scroll},this.loop.markDirty()}).catch(()=>{})},marketPlan:($,J)=>{T9($,{scope:"user",cwd:this.state.cwd,home:w8()},J).then((Z)=>{let Q=this.state.market;if(!Q)return;if("error"in Z){this.toast(Z.error);return}Q.plan=Z,this.loop.markDirty()})},wizardRegister:($,J,Z)=>{let Q=this.state.wizard,V=this.ctx?.wizardRegister?.($,J,Z);if(!Q)return;if(P9(Q,V?.ok??!1,V?.error??"this surface cannot register endpoints \u2014 use rovecode provider add"),V?.ok)Q.providers[Q.selected]={key:$,label:`${$} \u2014 ${J}`,configured:!1};this.loop.markDirty()},wizardStoreKey:($,J)=>{let Z=this.state.wizard,Q=this.ctx?.wizardStoreKey?.($,J);if(!Z)return;if(A9(Z,Q?.ok??!1,Q?.error??"this surface cannot store keys \u2014 use rovecode auth set"),Q?.ok)this.fetchWizardModels();this.loop.markDirty()},wizardLoadModels:()=>{this.fetchWizardModels()},wizardActivate:($,J,Z)=>{let Q=this.state.wizard;if(!Q)return;let V=this.ctx?.wizardActivateModels?.($,J,Z);if(V?.ok)D5(this.state),this.toast(`connected \u2014 ${V.models!==void 0&&V.models.length>0?`${V.models.length} models active`:"all models live"}`);else Q.error=V?.error??"the model list could not be written";this.loop.markDirty()},wizardModel:($)=>{let J=this.state.wizard;if(!J)return;let Z=J.providers[J.selected]?.key??"";(this.ctx?.wizardModels?.(Z)??Promise.resolve([])).then((Q)=>{if(!this.state.wizard)return;if(Q.length===0)D5(this.state),this.toast(`connected \u2014 ${$} pinned by hand`);else e5(this.state.wizard,Q);this.loop.markDirty()}).catch(()=>{if(this.state.wizard)this.state.wizard.error="the model list could not be read \u2014 type the id instead",this.loop.markDirty()})},marketDocs:($)=>{L9($).then((J)=>{let Z=this.state.market;if(!Z||!J)return;let Q=Z.rows.find((V)=>V.kind===$.kind&&V.id===$.id);if(Q)Q.docs=J;this.loop.markDirty()})},marketInstall:($,J)=>{R9($,{scope:"user",cwd:this.state.cwd,home:w8()},J===!0?{local:!0}:{}).then(async(Z)=>{let Q=Z.text;if(Z.ok&&$.kind==="mcp"&&this.ctx?.reloadMcp)try{let j=await this.ctx.reloadMcp(),X=j.failed.find((G)=>j.added.includes(G.name));Q=Q.replace(/ \u00B7 restart rovecode[^\u00B7]*/,"");let U=j.skipped.length>0?` \xB7 ${j.skipped.join(" \xB7 ")}`:"";Q+=X?` \xB7 ${X.name} did not connect: ${X.error}`:j.added.length>0?` \xB7 connected as ${j.added.join(", ")} \u2014 no restart needed${U}`:U}catch{}let V=this.state.market;if(!V?.plan)return;V.plan.running=!1,V.plan.outcome={...Z,text:Q},this.loop.markDirty()})}};beforeInput($,J){let Z=this.state;if(this.cards.interceptKey($))return!0;if($.type==="key"&&$.ctrl&&$.name==="c"&&Z.running&&Z.ctrlCUntil!==void 0&&J<Z.ctrlCUntil)return this.hooks?.onExit(),!0;return!1}afterInput($,J){let Z=this.state;if(this.cards.afterKey(),$.type==="key"&&$.ctrl&&$.name==="c"&&Z.running)Z.ctrlCUntil=J+q8;if($.type==="key"&&!$.ctrl&&Z.input.text.startsWith("/")){let Q=B0(Z,Z.files.paths,Y0)[0];if(Q?.kind==="slash")this.pet.suggest(Q.label,J)}}onTick($){let J=this.state;if(J.code.file&&J.code.content===null&&this.loadedFile!==J.code.file)J.code.content=r0(J.cwd,J.code.file),this.loadedFile=J.code.file,this.loop.markDirty();let Z=this.ctx?.staged?.()??[];if(Z.length!==J.staged.length||Z.some((Q,V)=>Q!==J.staged[V]))J.staged=Z,this.loop.markDirty();this.repo.onTick($,J.running)}}var MJ=48,z1,D1;var RJ=k(()=>{Y1();K1();S0();z5();H5();k9();u0();u9();_5();h0();j8();l0();H8();J0();X0();b0();s$();$4();P8();E8();HJ();h8();Q0();O8();h8();z1={append(){},done(){}},D1={onSubmit(){},onInterrupt(){},onExit(){}}});N1();D0();p();import{createRequire as M1}from"module";import{join as O1}from"path";var F1=M1(import.meta.url),W1=new URL("../../vendor/pi-tui/src/terminal.ts",import.meta.url).href;function _1($=process.arch,J=process.execPath){return bJ(O1("native","win32","prebuilds",`win32-${$}`,"win32-console-mode.node"),{moduleUrl:W1,execPath:J})}function P1($=process.arch){if($!=="x64"&&$!=="arm64")return!1;for(let J of _1($))try{return F1(J).enableVirtualTerminalInput?.()??!1}catch{}return!1}class CJ{stdin;stdout;env;opts;wasRaw=!1;constructor($=process.stdin,J=process.stdout,Z=process.env,Q={}){this.stdin=$;this.stdout=J;this.env=Z;this.opts=Q}write($){this.stdout.write($)}onInput($){let J=(Q)=>{let V=typeof Q==="string"?Q:Q.toString("utf8"),j=this.opts.focus?this.opts.focus.feed(V):V;if(j.length>0)$(j)};this.stdin.on("data",J);let Z=()=>{$("\x03")};return this.stdin.on("end",Z),()=>{this.stdin.off("data",J),this.stdin.off("end",Z)}}onResize($){let J=()=>{let{cols:Z,rows:Q}=this.size();$(Z,Q)};return this.stdout.on("resize",J),()=>{this.stdout.off("resize",J)}}size(){return{cols:this.stdout.columns||80,rows:this.stdout.rows||24}}enterRaw(){if(this.wasRaw=this.stdin.isRaw??!1,this.stdin.setRawMode?.(!0),this.stdin.setEncoding("utf8"),this.stdin.resume(),(this.opts.platform??process.platform)==="win32")(this.opts.vtInput??P1)()}leaveRaw(){this.stdin.setRawMode?.(this.wasRaw),this.stdin.pause()}}class A1{cols;rows;env;writes=[];raw=!1;inputs=new Set;resizes=new Set;constructor($=160,J=44,Z={}){this.cols=$;this.rows=J;this.env=Z}write($){this.writes.push($)}onInput($){return this.inputs.add($),()=>{this.inputs.delete($)}}onResize($){return this.resizes.add($),()=>{this.resizes.delete($)}}size(){return{cols:this.cols,rows:this.rows}}enterRaw(){this.raw=!0}leaveRaw(){this.raw=!1}feed($){for(let J of[...this.inputs])J($)}resize($,J){this.cols=$,this.rows=J;for(let Z of[...this.resizes])Z($,J)}output(){return this.writes.join("")}get listeners(){return this.inputs.size+this.resizes.size}}var E1=new Set(["vscode","iTerm.app","WezTerm","ghostty"]);function I1($){let J=($.COLORTERM??"").toLowerCase();if(J==="truecolor"||J==="24bit")return!0;if($.WT_SESSION)return!0;if(E1.has($.TERM_PROGRAM??""))return!0;return/kitty|direct/.test($.TERM??"")}function vJ($){if(I1($))return"truecolor";if(!($.COLORTERM??"").trim()&&/256color/.test($.TERM??""))return"256";return"none"}function S1($,J){return!!J.isTTY&&(J.columns??0)>=kJ&&(J.rows??0)>=BJ&&vJ($)!=="none"}function L1($){return($.columns??80)>=v0&&($.rows??24)>=f0}function T1($,J,Z){if($.classic)return"classic";let Q=(J.ROVECODE_TUI??"").trim().toLowerCase();if(Q==="classic")return"classic";if(Q==="sextant")return Z.isTTY&&L1(Z)?"sextant":"classic";return S1(J,Z)?"sextant":"classic"}function b2($,J=process.env,Z=process.stdout,Q={}){if(T1($,J,Z)!=="sextant")return;let{SextantRenderer:V}=(RJ(),H1(TJ));return new V({io:new CJ(Q.stdin??process.stdin,Z,J,Q.focus?{focus:Q.focus}:{}),truecolor:vJ(J)==="truecolor",...$.pet!==void 0?{pet:$.pet}:{},...J.ROVECODE_THEME?{theme:J.ROVECODE_THEME}:{}})}
|
|
25
|
-
export{LJ as q,RJ as r,A1 as s,b2 as t};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{ih as V,jh as C,mh as h}from"./main-rg0wn0xf.js";import{Th as E,Uh as b}from"./main-0z1w2zsg.js";import{Gj as F,Hj as T,Kj as I,Lj as k,Nj as R,Oj as u,Qj as N,Rj as g}from"./main-9etavkew.js";import{$m as l,Qm as P,Rm as S,Sm as _}from"./main-2yeveeve.js";import{wn as w}from"./main-qsevpgsv.js";import{auth as W,extractWWWAuthenticateParams as f}from"@modelcontextprotocol/sdk/client/auth.js";import{OAuthError as p}from"@modelcontextprotocol/sdk/server/auth/errors.js";import{LATEST_PROTOCOL_VERSION as d}from"@modelcontextprotocol/sdk/types.js";function x(q){return`mcp:${q}`}function a(q,H){let J=S(x(q));if(H===void 0||!P(J)||J.url!==H)return;return J}function O(q,H){_(x(q),H)}function m(q,H){return typeof q.expires_in==="number"&&Number.isFinite(q.expires_in)?H+Math.max(0,q.expires_in)*1000:Number.MAX_SAFE_INTEGER}function L(q,H){let J=q.oauth?.clientId;return J?{client_id:J}:H}function y(q){let H={client_id:q.client_id};if(typeof q.client_secret==="string")H.client_secret=q.client_secret;if(typeof q.client_id_issued_at==="number")H.client_id_issued_at=q.client_id_issued_at;if(typeof q.client_secret_expires_at==="number")H.client_secret_expires_at=q.client_secret_expires_at;return H}function M(q,H){return{client_name:"rovecode",redirect_uris:[q],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none",...H?{scope:H}:{}}}function c(q){let H=q.discovery;return H!==void 0&&typeof H.authorizationServerUrl==="string"?H:void 0}class v{config;record;now;refreshes=0;constructor(q,H,J=Date.now){this.config=q;this.record=H;this.now=J}get redirectUrl(){return U}get clientMetadata(){return M(U,this.config.oauth?.scope)}clientInformation(){let q=L(this.config,this.record.clientInformation);if(!q)throw new V(this.config.name);return q}saveClientInformation(){throw new V(this.config.name)}discoveryState(){return c(this.record)}saveDiscoveryState(q){this.persist({...this.record,discovery:q})}tokens(){let{access:q,refresh:H,expires:J}=this.record;if(q.length===0)return;let Q={access_token:q,token_type:"Bearer"};if(H.length>0&&this.refreshes===0)Q.refresh_token=H;if(J<Number.MAX_SAFE_INTEGER)Q.expires_in=Math.max(0,Math.floor((J-this.now())/1000));return Q}saveTokens(q){this.refreshes+=1,this.persist({...this.record,access:q.access_token,refresh:q.refresh_token??this.record.refresh,expires:m(q,this.now())})}redirectToAuthorization(){throw new V(this.config.name)}saveCodeVerifier(){}codeVerifier(){throw new V(this.config.name)}invalidateCredentials(q){let H={...this.record};if(q==="all"||q==="tokens")H.access="",H.refresh="",H.expires=0;if(q==="all"||q==="client")delete H.clientInformation;if(q==="all"||q==="discovery")delete H.discovery;this.persist(H)}persist(q){this.record=q,O(this.config.name,q)}}class A{config;callbackUrl;nonce;io;now;registered;verifier;discovery;stored;constructor(q,H,J,Q,j){this.config=q;this.callbackUrl=H;this.nonce=J;this.io=Q;this.now=j}get redirectUrl(){return this.callbackUrl}get clientMetadata(){return M(this.callbackUrl,this.config.oauth?.scope)}state(){return this.nonce}clientInformation(){return L(this.config,this.registered)}saveClientInformation(q){this.registered=y(q)}discoveryState(){return this.discovery}saveDiscoveryState(q){this.discovery=q}tokens(){return}saveTokens(q){let H=this.clientInformation(),J={type:"mcp-oauth",url:this.config.url??"",access:q.access_token,refresh:q.refresh_token??"",expires:m(q,this.now()),...H?{clientInformation:y(H)}:{},...this.discovery?{discovery:this.discovery}:{}};O(this.config.name,J),this.stored=J}redirectToAuthorization(q){this.io.notify({type:"auth_url",url:q.toString(),callbackUrl:this.callbackUrl})}saveCodeVerifier(q){this.verifier=q}codeVerifier(){if(this.verifier===void 0)throw Error("no PKCE verifier for this login");return this.verifier}}function D(q,H){if(H instanceof V||H instanceof Error&&H.message===F)return H;if(H instanceof p)return Error(`${q} failed (${H.name}: ${H.errorCode})`);let J=H instanceof Error?`${H.constructor.name}: ${H.message.slice(0,200)}`:String(H).slice(0,200);return Error(`${q} failed (${J})`)}async function Xq(q,H,J){let Q=q.name;if(q.transport==="stdio"||q.url===void 0)throw Error(`MCP server "${Q}" is a stdio server \u2014 OAuth login applies to url servers only`);if(H.signal.aborted)throw T();let j=q.url,X=`MCP server "${Q}"`,G=N(),$,Y={},z=R({nonce:G,signal:H.signal,what:X,retryHint:`Run rovecode mcp login ${Q} again.`,exchange:"token exchange",requireStateParam:!0,...J.timeoutMs!==void 0?{timeoutMs:J.timeoutMs}:{},onCode:async(Z)=>{if(!$)throw Error(`${X} token exchange failed (callback before the authorization request)`);if(await W($,{serverUrl:j,authorizationCode:Z,resourceMetadataUrl:Y.resourceMetadataUrl,scope:Y.scope,fetchFn:J.fetch}).catch((K)=>{throw D(`${X} token exchange`,K)})!=="AUTHORIZED"||!$.stored)throw Error(`${X} token exchange failed (no tokens were issued)`);return $.stored}});try{let Z;try{Z=await I(J,j,{method:"POST",headers:{"content-type":"application/json",accept:"application/json, text/event-stream"},body:s},H.signal)}catch(K){throw K instanceof Error&&K.message===F?K:Error(`${X} probe failed (${K instanceof Error?K.message.slice(0,200):String(K).slice(0,200)})`)}if(await Z.body?.cancel().catch(()=>{}),Z.status!==401)throw Error(`server does not require OAuth (HTTP ${Z.status})`);Y=f(Z),$=new A(q,z.callbackUrl,G,H,J.now);let B=await W($,{serverUrl:j,resourceMetadataUrl:Y.resourceMetadataUrl,scope:Y.scope,fetchFn:J.fetch}).catch((K)=>{throw D(`${X} authorization`,K)});if(B!=="REDIRECT")throw Error(`${X} authorization failed (expected a browser redirect, got ${B})`);return await z.result}finally{z.stop()}}function Zq(q){if(q.transport==="stdio"||q.url===void 0)return;if(C(q))return;let H=a(q.name,q.url);return H?new v(q,H):void 0}var U="http://127.0.0.1/callback/needs-login",s;var i=w(()=>{l();k();u();g();h();E();s=JSON.stringify({jsonrpc:"2.0",id:0,method:"initialize",params:{protocolVersion:d,capabilities:{},clientInfo:{name:"rovecode",version:b.version}}})});
|
|
3
|
-
export{x as dd,a as ed,O as fd,v as gd,A as hd,Xq as id,Zq as jd,i as kd};
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{wn as D}from"./main-qsevpgsv.js";import{execFile as R}from"child_process";import{appendFileSync as u,existsSync as P,mkdirSync as U,readFileSync as S,realpathSync as W,rmSync as L,writeFileSync as x}from"fs";import{join as M,resolve as j}from"path";function ZB(B){return B.findLast((J)=>J.role==="user")?.id}function C(B,J,q=B.find(($)=>!$.startsWith("-"))??"",Z={}){let $={...process.env};for(let N of["GIT_DIR","GIT_WORK_TREE","GIT_INDEX_FILE","GIT_OBJECT_DIRECTORY","GIT_COMMON_DIR"])delete $[N];return Object.assign($,Z),new Promise((N,z)=>{R("git",B,{cwd:J,env:$,windowsHide:!0,maxBuffer:16777216},(K,Q,Y)=>{if(K)z(Error(`git ${q} failed: ${Y.trim()||K.message}`));else N(Q.trim())})})}function T(B){let J=B;try{J=(W.native??W)(B)}catch{}return process.platform==="win32"?J.toLowerCase():J}function I(B,J,q){let Z=J.replace(/[^A-Za-z0-9._-]/g,"_"),$=/^\.*$/.test(Z)?Z.replace(/\./g,"_")||"_":Z;return M(q??M(B,".rovecode","checkpoints"),$)}class A{workspace;gitDir;sidecar;log=[];constructor(B,J,q){this.workspace=B;this.gitDir=J;this.sidecar=q}git(...B){return C(["--git-dir",this.gitDir,"--work-tree",this.workspace,...B],this.workspace,B[0])}static async init(B){let J=j(B.workspace),q=I(J,B.sessionId,B.shadowRoot),Z=M(q,".git");U(q,{recursive:!0});let $=new A(J,Z,M(q,"checkpoints.jsonl"));if(!P(M(Z,"HEAD"))){await C(["init"],q);for(let[N,z]of[["core.worktree",J],["commit.gpgSign","false"],["core.autocrlf","false"],["user.name","Rovecode Checkpoint"],["user.email","checkpoint@rovecode.local"]])await $.git("config",N,z)}else{let N=await $.git("config","core.worktree").catch(()=>"");if(T(j(N))!==T(J))throw Error(`checkpoints: shadow repo belongs to ${N}, not ${J}`)}return U(M(Z,"info"),{recursive:!0}),x(M(Z,"info","exclude"),w.join(`
|
|
3
|
-
`)+`
|
|
4
|
-
`),$.loadSidecar(),$}loadSidecar(){if(!P(this.sidecar))return;for(let B of S(this.sidecar,"utf8").split(`
|
|
5
|
-
`)){if(!B.trim())continue;try{let J=JSON.parse(B);if(typeof J.hash==="string"&&typeof J.label==="string")this.log.push(J)}catch{}}}async snapshot(B,J){await this.git("add",".","--ignore-errors"),await this.git("commit","--allow-empty","--no-verify","-m",`rovecode-checkpoint: ${B}`);let Z={hash:await this.git("rev-parse","HEAD"),label:B,createdAt:Date.now(),...J!==void 0?{entryId:J}:{}};return u(this.sidecar,JSON.stringify(Z)+`
|
|
6
|
-
`),this.log.push(Z),Z}list(){return[...this.log]}async position(){let B={at:null,previous:null};if(this.log.length===0)return B;let J=M(this.gitDir,"rovecode-undo-index"),q=["--git-dir",this.gitDir,"--work-tree",this.workspace];try{L(J,{force:!0}),await C([...q,"add",".","--ignore-errors"],this.workspace,"add",{GIT_INDEX_FILE:J});let Z=await C([...q,"write-tree"],this.workspace,"write-tree",{GIT_INDEX_FILE:J}),$=[];for(let K=0;K<this.log.length;K+=200)$.push(...(await this.git("rev-parse",...this.log.slice(K,K+200).map((Q)=>`${Q.hash}^{tree}`))).split(`
|
|
7
|
-
`).map((Q)=>Q.trim()));let N=$.lastIndexOf(Z);if(N<0)return B;let z=this.log[N];for(let K of(await this.git("rev-list",z.hash)).split(`
|
|
8
|
-
`).slice(1)){let Q=this.log.findLastIndex((Y)=>Y.hash===K.trim());if(Q>=0&&$[Q]!==Z)return{at:z,previous:this.log[Q]}}return{at:z,previous:null}}catch{return B}finally{L(J,{force:!0})}}async changedSince(B){try{let J=[];for(let q of(await this.git("diff","--name-status",B)).split(`
|
|
9
|
-
`)){let Z=/^([A-Z])\S*\t(.+)$/.exec(q.trim());if(Z)J.push({status:Z[1],path:Z[2].split("\t").at(-1)})}for(let q of(await this.git("ls-files","--others","--exclude-standard")).split(`
|
|
10
|
-
`))if(q.trim())J.push({status:"?",path:q.trim()});return J}catch{return null}}async restore(B,J){let q=this.log.filter(($)=>$.hash===B||$.hash.startsWith(B)),Z=q.at(-1);if(!Z||B.length<4)return{ok:!1,error:`no checkpoint matches ${B}`};if(new Set(q.map(($)=>$.hash)).size>1)return{ok:!1,error:`ambiguous checkpoint prefix ${B}`};if(J!=="files"&&Z.entryId===void 0)return{ok:!1,error:`checkpoint ${Z.hash.slice(0,8)} has no session entryId`};if(J!=="conversation")try{await this.git("reset","--hard",Z.hash),await this.git("clean","-fd")}catch($){return{ok:!1,error:$ instanceof Error?$.message:String($)}}return{ok:!0,mode:J,checkpoint:Z,...J!=="files"&&Z.entryId!==void 0?{entryId:Z.entryId}:{}}}}var JB,w;var y=D(()=>{JB=new Set(["write","execute"]);w=[".git/",".rovecode/","node_modules/","dist/","build/","out/",".next/","__pycache__/",".venv/","venv/",".DS_Store","*.mp4","*.m4v","*.mov","*.avi","*.mkv","*.webm","*.wmv","*.flv","*.mpg","*.mpeg","*.mp3","*.m4a","*.wav","*.flac","*.ogg","*.aac","*.wma","*.png","*.jpg","*.jpeg","*.gif","*.bmp","*.ico","*.webp","*.tif","*.tiff","*.heic","*.avif","*.psd","*.zip","*.tar","*.gz","*.tgz","*.bz2","*.xz","*.7z","*.rar","*.iso","*.dmg","*.exe","*.dll","*.so","*.dylib","*.node","*.wasm","*.o","*.a","*.class","*.jar","*.pyc","*.sqlite","*.sqlite3","*.db","*.mdb","*.log"]});import{readdirSync as g,readFileSync as k,statSync as h}from"fs";import{join as l}from"path";function _(B){return B.toLowerCase().split(/[^\p{L}\p{N}]+/u).filter((J)=>J.length>0)}function n(B){let J;try{J=JSON.parse(B)}catch{return null}if(!J||typeof J!=="object")return null;let q=J;if(typeof q.id!=="string")return null;let Z=q.entry;if(!Z||typeof Z!=="object"||!("role"in Z))return null;let $=Z.parts;if(!Array.isArray($))return null;let N=[];for(let K of $)if(K&&typeof K==="object"&&K.kind==="text"&&typeof K.text==="string")N.push(K.text);let z=N.join(" ").trim();if(!z)return null;return{entryId:q.id,text:z,timestamp:typeof q.createdAt==="number"?q.createdAt:0}}function a(B){return B.split(`
|
|
11
|
-
`).map((J)=>o.test(J)?"[BLOCKED]":J).join(`
|
|
12
|
-
`)}function f(B){let J=B.charCodeAt(0);if(J>=56320&&J<=57343)B=B.slice(1);let q=B.charCodeAt(B.length-1);if(q>=55296&&q<=56319)B=B.slice(0,-1);return B}function r(B,J){let q=B.replace(/\s+/g," ").trim(),Z=q.toLowerCase(),$=-1;for(let K of J){let Q=Z.indexOf(K);if(Q!==-1&&($===-1||Q<$))$=Q}let N=$===-1?0:Math.max(0,$-p),z=f(q.slice(N,N+v));return(N>0?"\u2026":"")+z+(N+v<q.length?"\u2026":"")}class E{root;docs=new Map;postings=new Map;files=new Map;constructor(B){this.root=B}refresh(){let B={scanned:0,indexed:0,removed:0},J=[];try{J=g(this.root)}catch{}let q=new Set;for(let Z of J){let $=l(this.root,Z,"entries.jsonl"),N;try{let K=h($);N={mtimeMs:K.mtimeMs,size:K.size}}catch{continue}q.add(Z),B.scanned++;let z=this.files.get(Z);if(z&&z.mtimeMs===N.mtimeMs&&z.size===N.size)continue;this.dropSession(Z),this.indexFile(Z,$,N),B.indexed++}for(let Z of[...this.files.keys()])if(!q.has(Z))this.dropSession(Z),B.removed++;return B}dropSession(B){let J=this.files.get(B);if(!J)return;for(let q of J.docKeys){let Z=this.docs.get(q);if(Z)for(let $ of Z.tokens.keys()){let N=this.postings.get($);if(N){if(N.delete(q),N.size===0)this.postings.delete($)}}this.docs.delete(q)}this.files.delete(B)}indexFile(B,J,q){let Z=[],$="";try{$=k(J,"utf8")}catch{}for(let N of $.split(`
|
|
13
|
-
`)){if(!N.trim())continue;let z=n(N);if(!z)continue;let K=`${B.length}:${B}:${z.entryId}`;if(this.docs.has(K))continue;let Q=new Map;for(let Y of _(z.text))Q.set(Y,(Q.get(Y)??0)+1);if(Q.size===0)continue;this.docs.set(K,{sessionId:B,entryId:z.entryId,text:z.text,timestamp:z.timestamp,tokens:Q}),Z.push(K);for(let[Y,G]of Q){let V=this.postings.get(Y);if(!V)V=new Map,this.postings.set(Y,V);V.set(K,G)}}this.files.set(B,{mtimeMs:q.mtimeMs,size:q.size,docKeys:Z})}search(B,J,q){this.refresh();let Z=[...new Set(_(B.slice(0,F)))];if(Z.length===0)return[];let $=null;for(let z of Z){let K=new Map,Q=this.postings.get(z);if(Q)for(let[G,V]of Q)K.set(G,{ex:V,part:0});if(z.length>=d)for(let[G,V]of this.postings){if(G===z||!G.includes(z))continue;for(let[H,X]of V){let O=K.get(H)??{ex:0,part:0};O.part+=X,K.set(H,O)}}let Y=new Map;for(let[G,V]of K){let H=$===null?{exact:0,weighted:0}:$.get(G);if(H===void 0)continue;Y.set(G,{exact:H.exact+(V.ex>0?1:0),weighted:H.weighted+c*V.ex+i*V.part})}if($=Y,$.size===0)return[]}return[...$??new Map].flatMap(([z,K])=>{let Q=this.docs.get(z);return Q&&Q.sessionId!==q?[{key:z,cand:K,doc:Q}]:[]}).sort((z,K)=>K.cand.exact-z.cand.exact||K.cand.weighted-z.cand.weighted||K.doc.timestamp-z.doc.timestamp||(z.key<K.key?-1:1)).slice(0,Math.max(0,J)).map(({doc:z})=>({sessionId:z.sessionId,entryId:z.entryId,preview:a(r(z.text,Z)),timestamp:z.timestamp}))}}function zB(B,J={}){let q=new E(B),Z=Math.max(1,J.maxResults??m);return{schema:{name:"recall",description:"Search past session transcripts (cross-session recall). Full-text over prior conversation "+"message text \u2014 no LLM. Terms are ANDed; exact word matches rank above partial (substring) "+`matches. Returns up to ${Z} hits: sessionId, entryId, timestamp, and a short preview. Use for questions about past conversations: 'what did we decide about X', 'where did we leave Y'.`,args:{type:"object",properties:{query:{type:"string",description:"words to find in past sessions"},limit:{type:"integer",description:`max hits (default ${Math.min(b,Z)}, max ${Z})`}},required:["query"]}},kind:"read",sequential:!1,async execute($,N){let z=$&&typeof $==="object"?$:{},K={query:z.query,limit:z.limit};if(typeof K.query!=="string"||K.query.trim().length===0)return{ok:!1,output:"recall failed: query must be a non-empty string"};let Q=K.query.trim(),Y=Q.length>F?f(Q.slice(0,F))+"\u2026":Q,G=Math.min(b,Z);if(typeof K.limit==="number"&&Number.isFinite(K.limit))G=Math.trunc(K.limit);G=Math.max(1,Math.min(G,Z));let V=q.search(K.query,G,N.sessionId);if(V.length===0)return{ok:!0,output:`recall: no matches for "${Y}" \u2014 terms are ANDed; try fewer or broader terms`,data:{hits:V}};let H=V.map((O)=>`- [${O.sessionId}] entry ${O.entryId} @ ${O.timestamp>0?new Date(O.timestamp).toISOString():"unknown time"}
|
|
14
|
-
${O.preview}`),X=`recall: ${V.length} hit(s) for "${Y}"
|
|
15
|
-
`+H.join(`
|
|
16
|
-
`);if(J.summarize)try{let O=await J.summarize(K.query,V);if(O)X+=`
|
|
17
|
-
|
|
18
|
-
summary: ${O}`}catch(O){X+=`
|
|
19
|
-
|
|
20
|
-
(summarize step failed: ${O instanceof Error?O.message:String(O)}; hits above are unaffected)`}return{ok:!0,output:X,data:{hits:V}}}}}var m=10,b=5,v=120,p=40,d=3,F=512,c=2,i=1,o;var t=D(()=>{o=/(?:ignore previous|disregard above|system prompt)/i});
|
|
21
|
-
export{JB as Xd,ZB as Yd,I as Zd,A as _d,y as $d,E as ae,zB as be,t as ce};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{$m as H,Lm as y}from"./main-2yeveeve.js";import{on as P,sn as I,tn as h}from"./main-nqveez48.js";import{wn as A}from"./main-qsevpgsv.js";import{existsSync as b}from"fs";import{join as X,resolve as F}from"path";import{pathToFileURL as S}from"url";async function O(Q,Z={}){let $={hooks:[],sources:[],warnings:[]};if(process.env.ROVECODE_NO_HOOKS==="1")return $;let z=Z.home??y(),Y=Z.trusted??((V)=>P(z,V)),B=new Set;for(let[V,W]of[["user",z],["project",X(Q,".rovecode")]]){let J=_(W,$.warnings);if(J===null||B.has(F(J)))continue;if(B.add(F(J)),V==="project"&&!Y(J)){$.warnings.push(I(J,"its hooks stay off (they would run code from this repo in-process, with your privileges)"));continue}let D=await p(J,Z.timeoutMs??N(),$.warnings);if(D)$.hooks.push(D),$.sources.push(J)}return $}function _(Q,Z){let $=X(Q,"hooks.ts"),z=X(Q,"hooks.js"),Y=b($),B=b(z);if(Y&&B)Z.push(`${z}: ignored \u2014 ${$} takes precedence`);return Y?$:B?z:null}async function p(Q,Z,$){let z;try{z=await E(import(S(Q).href),Z)}catch(Y){return $.push(`${Q}: failed to load \u2014 ${K(Y)}`),null}if(z===L)return $.push(`${Q}: load timed out after ${Z}ms (top-level await?) \u2014 skipped`),null;return g(Q,C(z)?z.default:void 0,$)}function g(Q,Z,$){if(!C(Z))return $.push(`${Q}: default export must be { version: ${G}, hooks: {\u2026} } \u2014 skipped`),null;if(Z.version!==G){let Y=Z.version,B=Y===void 0?"missing":typeof Y==="string"?JSON.stringify(Y):String(Y);return $.push(`${Q}: hooks API version ${B} is not supported (this rovecode speaks ${G}) \u2014 skipped`),null}if(!C(Z.hooks))return $.push(`${Q}: "hooks" must be an object of hook functions \u2014 skipped`),null;let z={};for(let[Y,B]of Object.entries(Z.hooks)){if(!k.includes(Y)){$.push(`${Q}: unknown hook "${Y}" ignored (known: ${k.join(", ")})`);continue}if(typeof B!=="function"){$.push(`${Q}: hook "${Y}" is not a function \u2014 ignored`);continue}z[Y]=B}return z}function N(Q=process.env){let Z=Number(Q.ROVECODE_HOOK_TIMEOUT_MS??"");return Number.isFinite(Z)&&Z>=1?Math.floor(Z):M}class u{base;warnings=[];timeoutMs;entries=[];loading=null;opened=!1;closing=null;pending=new Set;listener;constructor(Q,Z={}){this.base=Q;this.timeoutMs=Z.timeoutMs??N(),this.listener=Z.onWarning}add(Q,Z="programmatic"){this.entries.push({source:Z,set:Q})}get size(){return this.entries.length}has(Q){return this.entries.some((Z)=>typeof Z.set[Q]==="function")}get ready(){return this.loading??Promise.resolve()}open(Q=this.base.cwd,Z={}){if(this.opened)return this.ready;this.opened=!0;let $=O(Q,{...Z,timeoutMs:this.timeoutMs}).then(async(z)=>{z.hooks.forEach((Y,B)=>this.add(Y,z.sources[B]??"file"));for(let Y of z.warnings)this.warn(Y);await this.dispatch("session_open",[this.base])}).then(()=>{this.loading=null});return this.loading=$,$}async run(Q,...Z){if(this.loading)await this.loading;return this.dispatch(Q,Z)}async dispatch(Q,Z){let $;for(let z of this.entries){let Y=z.set[Q];if(typeof Y!=="function")continue;let B=await this.invoke(z.source,Q,Y,Z),V=f(Q,B,Z,(D)=>this.warn(`${z.source}: ${D}`));if(V===void 0)continue;if(Q!=="post_tool")return V;$=V;let W=Z,J=V.output;if(J!==void 0)W[2]={...W[2],output:J}}return $}invoke(Q,Z,$,z){let Y;try{Y=Promise.resolve($(...z))}catch(B){return this.warn(`${Q}: ${Z} hook threw: ${K(B)} \u2014 ignored, run continues`),Promise.resolve(void 0)}return E(Y,this.timeoutMs).then((B)=>{if(B!==L)return B;this.warn(`${Q}: ${Z} hook timed out after ${this.timeoutMs}ms \u2014 ignored, run continues`);return},(B)=>{this.warn(`${Q}: ${Z} hook threw: ${K(B)} \u2014 ignored, run continues`);return})}observer(Q){let Z={cwd:Q.cwd,sessionId:Q.sessionId},$=!1;return{observe:async(z)=>{if(z.type==="run_start")Z={...Z,runId:z.runId};if(this.tap(Z,z),z.type==="run_start")await this.run("pre_run",Z);else if(z.type==="compaction")await this.run("compaction",Z,z);else if(z.type==="run_end")$=!0,await this.run("post_run",Z,{status:z.status,summary:z.summary})},close:async()=>{if($||Z.runId===void 0)return;$=!0,await this.run("post_run",Z,{status:"stopped",summary:"run aborted"})}}}approver(Q){return async(Z)=>{let $=await this.run("approval",this.base,{...Z,args:q(Z.args),revisedArgs:q(Z.revisedArgs)});if($==="allow")return"once";if($==="deny")return"deny";return Q?Q(Z):"deny"}}tap(Q,Z){if(!this.loading&&!this.has("on_event"))return;let $=this.run("on_event",Q,Z).then(()=>{return},()=>{return});this.pending.add($),$.then(()=>{this.pending.delete($)})}async settle(){await Promise.all([...this.pending])}close(){return this.closing??=(async()=>{if(this.loading)await this.loading;await this.settle(),await this.dispatch("session_close",[this.base])})(),this.closing}onWarning(Q){this.listener=Q;for(let Z of this.warnings)Q(Z)}drainWarnings(){return this.warnings.splice(0)}warn(Q){let Z=U(Q,x);if(this.warnings.push(Z),this.warnings.length>T)this.warnings.shift();this.listener?.(Z)}}function q(Q){try{return structuredClone(Q)}catch{return Q}}function f(Q,Z,$,z){if(Z===void 0||Z===null)return;switch(Q){case"pre_tool":{let Y=C(Z)?Z.deny:void 0;if(typeof Y==="string"&&Y.trim().length>0)return{deny:U(Y.trim(),R)};break}case"approval":if(Z==="allow"||Z==="deny")return Z;break;case"post_tool":{if(!C(Z))break;if(Z.output===void 0)return;if(typeof Z.output!=="string")break;let Y=$[2].output;return{output:c(Z.output,Y.length)}}default:return}z(`${Q} hook returned an invalid result (${w(Z)}) \u2014 ignored`);return}function c(Q,Z){let $=Z+j;if(Q.length<=$)return Q;return Q.slice(0,$)+`
|
|
3
|
-
\u2026 [post_tool output truncated: hooks may add at most ${j} chars]`}function E(Q,Z){return new Promise(($,z)=>{let Y=setTimeout(()=>$(L),Z);Y.ref?.(),Q.then((B)=>{clearTimeout(Y),$(B)},(B)=>{clearTimeout(Y),z(B)})})}function C(Q){return typeof Q==="object"&&Q!==null&&!Array.isArray(Q)}function U(Q,Z){return Q.length<=Z?Q:Q.slice(0,Z)+"\u2026"}function K(Q){if(Q instanceof Error)return Q.message;if(C(Q)&&typeof Q.message==="string")return Q.message;return String(Q)}function w(Q){if(typeof Q==="string")return JSON.stringify(U(Q,40));if(Array.isArray(Q))return"array";if(C(Q))return`object with keys ${Object.keys(Q).slice(0,5).join(",")||"(none)"}`;return typeof Q}var G=1,M=5000,R=400,j=16000,T=50,x=300,k,L;var m=A(()=>{H();h();k=Object.keys({pre_run:0,post_run:0,pre_tool:0,post_tool:0,approval:0,compaction:0,session_open:0,session_close:0,on_event:0});L=Symbol("rovecode.hook.timeout")});
|
|
4
|
-
export{k as Gm,u as Hm,q as Im,m as Jm};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{wn as $}from"./main-qsevpgsv.js";import{createHash as E}from"crypto";import{mkdirSync as R,readFileSync as x,readdirSync as D,statSync as H,writeFileSync as _}from"fs";import{dirname as b,join as W,relative as j,resolve as k}from"path";function O(z){let q={disabled:[],trusted:{}},B;try{B=JSON.parse(x(Q(z),"utf8"))}catch{return q}if(typeof B!=="object"||B===null)return q;let C=B;if(Array.isArray(C.disabled))q.disabled=C.disabled.filter((G)=>typeof G==="string");if(typeof C.trusted==="object"&&C.trusted!==null&&!Array.isArray(C.trusted)){for(let[G,J]of Object.entries(C.trusted))if(typeof J==="string")q.trusted[G]=J}return q}function V(z,q){let B=Q(z);return R(b(B),{recursive:!0}),_(B,JSON.stringify({disabled:[...q.disabled].sort(),trusted:q.trusted},null,2)+`
|
|
3
|
-
`),B}function F(z){let q=[],B=(C)=>{let G;try{G=D(C,{withFileTypes:!0})}catch{return}for(let J of G){if(P.has(J.name))continue;let Z=W(C,J.name);if(J.isDirectory())B(Z);else if(J.isFile())q.push(j(z,Z).replace(/\\/g,"/"))}};return B(z),q.sort()}function m(z){let q=E("sha256");for(let B of F(z)){q.update(B),q.update("\x00");try{q.update(x(W(z,B)))}catch{}q.update("\x00")}return q.digest("hex")}function f(z,q,B){return z.trusted[M(q)]===B}function o(z){try{return H(z).isDirectory()}catch{return!1}}var I="plugins.json",Q=(z)=>W(z,I),P,M=(z)=>k(z).replace(/\\/g,"/");var A=$(()=>{P=new Set(["node_modules",".git"])});import{createHash as T}from"crypto";import{readFileSync as K,statSync as v}from"fs";function U(z){let q=N(z);if(q===void 0){X.delete(z);return}let B=X.get(z);if(B!==void 0&&L(B,q))return B.digest;let C;try{C=T("sha256").update(K(z)).digest("hex")}catch{return}return X.set(z,{...q,digest:C}),C}function w(z){let q=Q(z),B=N(q);if(B===void 0)return Y.delete(q),O(z);let C=Y.get(q);if(C!==void 0&&L(C,B))return C.state;let G=O(z);return Y.set(q,{...B,state:G}),G}function c(z){return(q,B)=>z.trusted[M(q)]===B}function y(z,q){let B=U(q);if(B===void 0)return"absent";return c(w(z))(q,B)?"trusted":"untrusted"}function s(z,q){return y(z,q)==="trusted"}function a(z,q){let B=O(z),C=U(q);if(C===void 0)return delete B.trusted[M(q)],V(z,B),{ok:!1,reason:`${q}: no such file`};return B.trusted[M(q)]=C,V(z,B),{ok:!0,digest:C}}function i(z,q){let B=O(z),C=M(q)in B.trusted;return delete B.trusted[M(q)],V(z,B),C}function t(z,q){return`${z}: not trusted on this machine \u2014 ${q}. ${g}`}var L=(z,q)=>z.mtimeMs===q.mtimeMs&&z.size===q.size,N=(z)=>{try{let q=v(z);return q.isFile()?{mtimeMs:q.mtimeMs,size:q.size}:void 0}catch{return}},X,Y,g="Review: rovecode trust show (in the TUI: /trust show) \xB7 approve: rovecode trust (or /trust)";var u=$(()=>{A();X=new Map;Y=new Map});
|
|
4
|
-
export{Q as cn,O as dn,V as en,F as fn,m as gn,M as hn,f as in,o as jn,A as kn,U as ln,c as mn,y as nn,s as on,a as pn,i as qn,g as rn,t as sn,u as tn};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Hj as S,Ij as V,Jj as z,Kj as G,Lj as P,Mj as A,Nj as k,Oj as I,Pj as _,Qj as b,Rj as t}from"./main-9etavkew.js";function H(Q,q,$="login cancelled"){return new Promise((Y,Z)=>{if(q.aborted){Z(Error($));return}let W=()=>{clearTimeout(K),Z(Error($))},K=setTimeout(()=>{q.removeEventListener("abort",W),Y()},Q);q.addEventListener("abort",W,{once:!0})})}async function y(Q){let q=Q.now??Date.now,$=Q.sleep??H,Y=typeof Q.expiresInSeconds==="number"?q()+Q.expiresInSeconds*1000:Number.POSITIVE_INFINITY,Z=Math.max(1000,Math.floor((Q.intervalSeconds??5)*1000)),W=0;if(Q.waitBeforeFirstPoll){let K=Y-q();if(K>0)await $(Math.min(Z,K),Q.signal)}while(q()<Y){if(Q.signal.aborted)throw Error("login cancelled");let K=await Q.poll();if(K.status==="complete")return K.value;if(K.status==="failed")throw Error(K.message);if(K.status==="slow_down")W+=1,Z=typeof K.intervalSeconds==="number"&&Number.isFinite(K.intervalSeconds)&&K.intervalSeconds>0?Math.max(1000,Math.floor(K.intervalSeconds*1000)):Math.max(1000,Z+5000);let X=Y-q();if(X<=0)break;await $(Math.min(Z,X),Q.signal)}throw Error(W>0?"device flow timed out after one or more slow_down responses (often clock drift in a WSL/VM \u2014 sync the clock and retry)":"device flow timed out")}P();var T={deviceCodeUrl:"https://github.com/login/device/code",accessTokenUrl:"https://github.com/login/oauth/access_token",copilotTokenUrl:"https://api.github.com/copilot_internal/v2/token"},N=atob("SXYxLmI1MDdhMDhjODdlY2ZlOTg="),L="GitHubCopilotChat/0.35.0",j={"User-Agent":L,"Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},O="https://api.individual.githubcopilot.com",E=300000,C="gpt-4o";function v(Q){let q=/proxy-ep=([^;]+)/.exec(Q);if(!q||!q[1])return null;return`https://${q[1].replace(/^proxy\./,"api.")}`}async function f(Q,q,$,Y,Z){let W=await G(Q,q,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded","User-Agent":L},body:new URLSearchParams($).toString()},Y);if(!W.ok)throw await V(Z,W);return z(W,Z)}async function u(Q,q,$){let Y=await f(q,Q.deviceCodeUrl,{client_id:N,scope:"read:user"},$,"GitHub device code request"),{device_code:Z,user_code:W,verification_uri:K,interval:X,expires_in:J}=Y;if(typeof Z!=="string"||typeof W!=="string"||typeof K!=="string"||X!==void 0&&typeof X!=="number"||typeof J!=="number")throw Error("GitHub device code response is missing fields");let x;try{x=new URL(K)}catch{throw Error("GitHub device code response carries an untrusted verification_uri")}if(x.protocol!=="https:"&&x.protocol!=="http:")throw Error("GitHub device code response carries an untrusted verification_uri");return{deviceCode:Z,userCode:W,verificationUri:x.href,interval:X,expiresIn:J}}function g(Q,q,$,Y){return y({intervalSeconds:q.interval,expiresInSeconds:q.expiresIn,waitBeforeFirstPoll:!0,signal:Y,sleep:$.sleep,now:$.now,poll:async()=>{let Z=await f($,Q.accessTokenUrl,{client_id:N,device_code:q.deviceCode,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},Y,"GitHub device token poll");if(typeof Z.access_token==="string"&&Z.access_token.length>0)return{status:"complete",value:Z.access_token};if(typeof Z.error==="string"){if(Z.error==="authorization_pending")return{status:"pending"};if(Z.error==="slow_down")return{status:"slow_down",intervalSeconds:typeof Z.interval==="number"?Z.interval:void 0};return{status:"failed",message:`GitHub device flow failed: ${Z.error}${typeof Z.error_description==="string"?` \u2014 ${Z.error_description.slice(0,160)}`:""}`}}return{status:"failed",message:"GitHub device token response is missing fields"}}})}async function M(Q,q,$,Y){let Z=await G($,Q.copilotTokenUrl,{headers:{Accept:"application/json",Authorization:`Bearer ${q}`,...j}},Y);if(!Z.ok)throw await V("Copilot token exchange",Z);let W=await z(Z,"Copilot token exchange"),{token:K,expires_at:X}=W;if(typeof K!=="string"||K.length===0||typeof X!=="number")throw Error("Copilot token response is missing fields");return{type:"oauth",access:K,refresh:q,expires:X*1000-E}}function R(Q=T){return{id:"github-copilot",label:"GitHub Copilot (device code)",defaultModel:C,async login(q,$){let Y=await u(Q,$,q.signal);q.notify({type:"device_code",userCode:Y.userCode,verificationUri:Y.verificationUri,intervalSeconds:Y.interval??5,expiresInSeconds:Y.expiresIn});let Z=await g(Q,Y,$,q.signal);return q.notify({type:"progress",message:"authorized \u2014 exchanging for a Copilot token"}),M(Q,Z,$,q.signal)},refresh(q,$,Y){return M(Q,q.refresh,Y,$)},toAuth(q){return{apiKey:q.access,baseUrl:Q.chatBaseUrl??v(q.access)??O,headers:{...j}}}}}P();var B="https://auth.openai.com",h={deviceUserCodeUrl:`${B}/api/accounts/deviceauth/usercode`,deviceTokenUrl:`${B}/api/accounts/deviceauth/token`,tokenUrl:`${B}/oauth/token`,deviceVerificationUri:`${B}/codex/device`,deviceRedirectUri:`${B}/deviceauth/callback`,responsesBaseUrl:"https://chatgpt.com/backend-api/codex"},l={"OpenAI-Beta":"responses=experimental",originator:"rovecode"},F="app_EMoamEEZ73f0CkXaXp7hrann",D=900,c="https://api.openai.com/auth";function p(Q){try{let q=Q.split(".");if(q.length!==3||!q[1])return;let $=q[1].replace(/-/g,"+").replace(/_/g,"/"),Z=JSON.parse(atob($+"=".repeat((4-$.length%4)%4)))[c],W=typeof Z==="object"&&Z!==null?Z.chatgpt_account_id:void 0;return typeof W==="string"&&W.length>0?W:void 0}catch{return}}async function a(Q,q,$){if(!Q.ok)throw await V(q,Q);let Y=await z(Q,q),{access_token:Z,refresh_token:W,expires_in:K}=Y;if(typeof Z!=="string"||Z.length===0||typeof W!=="string"||typeof K!=="number")throw Error(`${q}: response is missing fields`);let X=p(Z);return{type:"oauth",access:Z,refresh:W,expires:$()+K*1000,...X!==void 0?{accountId:X}:{}}}async function d(Q,q,$){let Y=await G(q,Q.deviceUserCodeUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client_id:F})},$);if(Y.status===404)throw Error("OpenAI device code login is not enabled for this server (HTTP 404)");if(!Y.ok)throw await V("OpenAI device code request",Y);let Z=await z(Y,"OpenAI device code request"),{device_auth_id:W,user_code:K,interval:X}=Z,J=typeof X==="string"?Number(X.trim()):X;if(typeof W!=="string"||!W||typeof K!=="string"||!K||typeof J!=="number"||!Number.isFinite(J)||J<0)throw Error("OpenAI device code response is missing fields");return{deviceAuthId:W,userCode:K,intervalSeconds:J}}function r(Q,q,$,Y){return y({intervalSeconds:q.intervalSeconds,expiresInSeconds:D,signal:Y,sleep:$.sleep,now:$.now,poll:async()=>{let Z=await G($,Q.deviceTokenUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({device_auth_id:q.deviceAuthId,user_code:q.userCode})},Y);if(Z.ok){let K=await z(Z,"OpenAI device token poll"),{authorization_code:X,code_verifier:J}=K;if(typeof X!=="string"||!X||typeof J!=="string"||!J)return{status:"failed",message:"OpenAI device token response is missing fields"};return{status:"complete",value:{authorizationCode:X,codeVerifier:J}}}if(Z.status===403||Z.status===404)return{status:"pending"};let W;try{let K=await Z.json();W=typeof K?.error==="object"?K.error?.code:K?.error}catch{}if(W==="deviceauth_authorization_pending")return{status:"pending"};if(W==="slow_down")return{status:"slow_down"};return{status:"failed",message:`OpenAI device authorization failed (HTTP ${Z.status})${typeof W==="string"?`: ${W.slice(0,80)}`:""}`}}})}async function U(Q,q,$,Y,Z){let W=await G($,Q.tokenUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(q).toString()},Y);return a(W,Z,$.now)}function m(Q=h){return{id:"openai",label:"OpenAI / ChatGPT (device code)",async login(q,$){let Y=await d(Q,$,q.signal);q.notify({type:"device_code",userCode:Y.userCode,verificationUri:Q.deviceVerificationUri,intervalSeconds:Y.intervalSeconds,expiresInSeconds:D});let Z=await r(Q,Y,$,q.signal);return q.notify({type:"progress",message:"authorized \u2014 exchanging the authorization code"}),U(Q,{grant_type:"authorization_code",client_id:F,code:Z.authorizationCode,code_verifier:Z.codeVerifier,redirect_uri:Q.deviceRedirectUri},$,q.signal,"OpenAI token exchange")},refresh(q,$,Y){return U(Q,{grant_type:"refresh_token",refresh_token:q.refresh,client_id:F},Y,$,"OpenAI token refresh")},toAuth(q){return{apiKey:q.access,baseUrl:Q.responsesBaseUrl,wire:"responses",headers:{...q.accountId?{"chatgpt-account-id":q.accountId}:{},...l}}}}}P();I();t();I();var n={authorizeUrl:"https://openrouter.ai/auth",keysUrl:"https://openrouter.ai/api/v1/auth/keys",chatBaseUrl:"https://openrouter.ai/api/v1"},Gq=A("OpenRouter");async function i(Q,q,$,Y,Z){let W=await G(Y,Q.keysUrl,{method:"POST",headers:{accept:"application/json","content-type":"application/json"},body:JSON.stringify({code:q,code_verifier:$,code_challenge_method:"S256"})},Z);if(!W.ok)throw await V("OpenRouter key exchange",W);let K=await z(W,"OpenRouter key exchange");if(typeof K.key!=="string"||K.key.length===0)throw Error("OpenRouter key exchange: response carries no key");return K.key}async function o(Q,q,$){if(q.signal.aborted)throw S();let{verifier:Y,challenge:Z}=await _(),W=b(),K=k({nonce:W,signal:q.signal,what:"OpenRouter",retryHint:"Run rovecode auth login openrouter again.",onCode:async(J)=>({type:"oauth",access:await i(Q,J,Y,$,q.signal),refresh:"",expires:Number.MAX_SAFE_INTEGER})}),X=new URL(Q.authorizeUrl);X.search=new URLSearchParams({callback_url:K.callbackUrl,code_challenge:Z,code_challenge_method:"S256"}).toString();try{return q.notify({type:"auth_url",url:X.toString(),callbackUrl:K.callbackUrl}),await K.result}finally{K.stop()}}function w(Q=n){return{id:"openrouter",label:"OpenRouter (PKCE, browser + loopback callback)",login:(q,$)=>o(Q,q,$),async refresh(q){return q},toAuth(q){return{apiKey:q.access,baseUrl:Q.chatBaseUrl}}}}var Fq=["github-copilot","openrouter","openai"],Mq={anthropic:"Anthropic OAuth (the Claude subscription login) is an owner decision, not a port \u2014 third-party harnesses that used it were cut off in the Jan-2026 crackdown (research/round3_landscape.md:64-66); use `rovecode auth set anthropic` with an API key."};function s(){return[R(),w(),m()]}function Nq(Q){return s().find((q)=>q.id===Q)}function Lq(){return{fetch:(Q,q)=>fetch(Q,q),now:()=>Date.now(),sleep:(Q,q)=>H(Q,q)}}
|
|
3
|
-
export{Fq as hj,Mq as ij,s as jj,Nq as kj,Lq as lj};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Fm as I,ym as A}from"./main-7rn6bqje.js";import{nn as q,pn as v,qn as z,tn as H}from"./main-nqveez48.js";import{wn as G}from"./main-qsevpgsv.js";import{existsSync as J}from"fs";function W(B){let b=A(B);return[b.harvest,b.project].filter((E)=>J(E))}var R,U,V;var K=G(()=>{H();I();R=q,U=v,V=z});
|
|
3
|
-
export{R as Sd,U as Td,V as Ud,W as Vd,K as Wd};
|