rovecode 0.3.3 → 0.4.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +527 -0
- package/README.md +46 -48
- package/bin/rovecode.js +24 -0
- package/dist/cli/app-j6gn14w3.js +2 -0
- package/dist/cli/ask-user-cwstt8fz.js +2 -0
- package/dist/cli/auth-login-9bbp9915.js +2 -0
- package/dist/cli/auth-m8p9grty.js +2 -0
- package/dist/cli/bench-16zqdms5.js +9 -0
- package/dist/cli/catalog-1xchffa4.js +2 -0
- package/dist/cli/cli-1n1zb64f.js +2 -0
- package/dist/cli/client-2t9gjkck.js +2 -0
- package/dist/cli/commands-exafvm2b.js +2 -0
- package/dist/cli/connect-6zde0kn3.js +2 -0
- package/dist/cli/context-cmd-5t43wgqt.js +2 -0
- package/dist/cli/context-report-kt01pw8y.js +2 -0
- package/dist/cli/count-remote-ap7x3vh6.js +2 -0
- package/dist/cli/design-ne5zszyh.js +2 -0
- package/dist/cli/dispatch-2r5myxye.js +2 -0
- package/dist/cli/doctor-ws4fh4tn.js +3 -0
- package/dist/cli/executor-bdrjn634.js +2 -0
- package/dist/cli/export-1mxb9g5p.js +2 -0
- package/dist/cli/files-g104xghh.js +2 -0
- package/dist/cli/gauntlet-07xrjpj7.js +2 -0
- package/dist/cli/gauntlet-runner-xvy64436.js +10 -0
- package/dist/cli/gauntlet-wave3-jm91yt5w.js +5 -0
- package/dist/cli/gauntlet-wave4-r13py7p1.js +14 -0
- package/dist/cli/hashline-znvrat11.js +2 -0
- package/dist/cli/http-xafw6fsh.js +143 -0
- package/dist/cli/index-1sgjm25y.js +2 -0
- package/dist/cli/init-g2m0tn4m.js +51 -0
- package/dist/cli/install-avaqjjqq.js +2 -0
- package/dist/cli/loop-mmpfft01.js +2 -0
- package/dist/cli/main-0904f6ps.js +5 -0
- package/dist/cli/main-0ab9fc26.js +9 -0
- package/dist/cli/main-0jys2ccn.js +3 -0
- package/dist/cli/main-0mtcdbs7.js +3 -0
- package/dist/cli/main-0z1w2zsg.js +3 -0
- package/dist/cli/main-1dchs7xv.js +18 -0
- package/dist/cli/main-1ereejm1.js +3 -0
- package/dist/cli/main-1k1kw6b5.js +3 -0
- package/dist/cli/main-27y4sm2k.js +38 -0
- package/dist/cli/main-2wwjex5j.js +58 -0
- package/dist/cli/main-2yeveeve.js +6 -0
- package/dist/cli/main-2yfck9b5.js +3 -0
- package/dist/cli/main-2zmzgkwh.js +3 -0
- package/dist/cli/main-351pz3z7.js +7 -0
- package/dist/cli/main-3gjqfh7a.js +6 -0
- package/dist/cli/main-3nf3kgve.js +3 -0
- package/dist/cli/main-3pjrb2hd.js +3 -0
- package/dist/cli/main-3rxcvgna.js +19 -0
- package/dist/cli/main-4b3jgy66.js +19 -0
- package/dist/cli/main-4wndhjdc.js +7 -0
- package/dist/cli/main-4xcmvxnk.js +3 -0
- package/dist/cli/main-5tbz0wbz.js +4 -0
- package/dist/cli/main-5ywnwthm.js +3 -0
- package/dist/cli/main-6b62vkz0.js +14 -0
- package/dist/cli/main-6dnk69vp.js +3 -0
- package/dist/cli/main-6genrmhs.js +136 -0
- package/dist/cli/main-73g7eff4.js +15 -0
- package/dist/cli/main-7c5thhjd.js +5 -0
- package/dist/cli/main-7rn6bqje.js +3 -0
- package/dist/cli/main-80haw7qk.js +4 -0
- package/dist/cli/main-875s60s2.js +4 -0
- package/dist/cli/main-8kjxbpw4.js +8 -0
- package/dist/cli/main-90ds1z4e.js +10 -0
- package/dist/cli/main-9etavkew.js +3 -0
- package/dist/cli/main-a9njrkk1.js +3 -0
- package/dist/cli/main-aecrjq2d.js +12 -0
- package/dist/cli/main-ck9asesq.js +9 -0
- package/dist/cli/main-cta9racd.js +4 -0
- package/dist/cli/main-ddv7j2ag.js +3 -0
- package/dist/cli/main-dfreez27.js +10 -0
- package/dist/cli/main-f7rw7des.js +3 -0
- package/dist/cli/main-ggcn7rd7.js +5 -0
- package/dist/cli/main-gzkmycnv.js +3 -0
- package/dist/cli/main-hq51jg8v.js +18 -0
- package/dist/cli/main-jft389w9.js +8 -0
- package/dist/cli/main-k1eqkg83.js +3 -0
- package/dist/cli/main-k2y8a2aw.js +9 -0
- package/dist/cli/main-kcpbykxz.js +4 -0
- package/dist/cli/main-kd488vje.js +22 -0
- package/dist/cli/main-kh32yvgk.js +5 -0
- package/dist/cli/main-kqxnqjnv.js +25 -0
- package/dist/cli/main-kyn0xnsg.js +3 -0
- package/dist/cli/main-m1kk6fp5.js +21 -0
- package/dist/cli/main-mv40pcr2.js +4 -0
- package/dist/cli/main-n0t3973w.js +3 -0
- package/dist/cli/main-nqveez48.js +4 -0
- package/dist/cli/main-pknhvrmj.js +3 -0
- package/dist/cli/main-pn1w7a7j.js +3 -0
- package/dist/cli/main-prxxs70n.js +4 -0
- package/dist/cli/main-q3vsesf9.js +3 -0
- package/dist/cli/main-qsevpgsv.js +3 -0
- package/dist/cli/main-rdgdw24b.js +25 -0
- package/dist/cli/main-rfth4tbm.js +16 -0
- package/dist/cli/main-rg0wn0xf.js +5 -0
- package/dist/cli/main-sdmxhtv8.js +4 -0
- package/dist/cli/main-skbp13js.js +18 -0
- package/dist/cli/main-t4xnd213.js +7 -0
- package/dist/cli/main-vqak588n.js +4 -0
- package/dist/cli/main-w2n1303f.js +9 -0
- package/dist/cli/main-wbrdspr2.js +5 -0
- package/dist/cli/main-wsrg79c1.js +7 -0
- package/dist/cli/main-x4r0fne4.js +5 -0
- package/dist/cli/main-xea2f3tn.js +6 -0
- package/dist/cli/main-xg704a3c.js +3 -0
- package/dist/cli/main-xvnrabfp.js +16 -0
- package/dist/cli/main-xy53xf0r.js +4 -0
- package/dist/cli/main-y1fqy60y.js +3 -0
- package/dist/cli/main-yn8cd281.js +34 -0
- package/dist/cli/main-yr0ksc0h.js +4 -0
- package/dist/cli/main-z2ex2vyf.js +4 -0
- package/dist/cli/main-z3aayzvq.js +3 -0
- package/dist/cli/main-zaqh35jg.js +3 -0
- package/dist/cli/main-zc2e8e46.js +4 -0
- package/dist/cli/main-zzrfw6cf.js +13 -0
- package/dist/cli/main.js +280 -0
- package/dist/cli/market-cmd-e14kmx9n.js +5 -0
- package/dist/cli/mcp-login-wq7ktdek.js +2 -0
- package/dist/cli/mcp-market-cmd-9mg3jecy.js +2 -0
- package/dist/cli/notify-b7qc0cjb.js +2 -0
- package/dist/cli/oauth-z8whcgfx.js +2 -0
- package/dist/cli/output-b3ewj3ps.js +16 -0
- package/dist/cli/profiles-6mr5he5e.js +2 -0
- package/dist/cli/provider-config-g7j42q8x.js +2 -0
- package/dist/cli/provider-jr1y8vvm.js +2 -0
- package/dist/cli/registry-s8yk86g0.js +2 -0
- package/dist/cli/registry-t6p8d4mn.js +2 -0
- package/dist/cli/repl-bajwe1mh.js +11 -0
- package/dist/cli/resume-rwn9nz7y.js +2 -0
- package/dist/cli/run-flags-nah7ndpt.js +2 -0
- package/dist/cli/runtime-n7gafzhb.js +2 -0
- package/dist/cli/sandbox-config-emdy18x4.js +2 -0
- package/dist/cli/server-b0nvs2bn.js +5 -0
- package/dist/cli/session-arg-y75wd4kj.js +2 -0
- package/dist/cli/session-j62evmjq.js +2 -0
- package/dist/cli/sessions-cmd-tsnwz0ns.js +7 -0
- package/dist/cli/settings-df10wfez.js +2 -0
- package/dist/cli/setup-jzvv72fg.js +2 -0
- package/dist/cli/sextant-smoke-37m81ke6.js +5 -0
- package/dist/cli/skills-cmd-gjxnxnhx.js +2 -0
- package/dist/cli/smoke-p7748apt.js +8 -0
- package/dist/cli/start-chat-s4st3mm0.js +12 -0
- package/dist/cli/stream-gmeyewds.js +2 -0
- package/dist/cli/task-gh0kkp3n.js +2 -0
- package/dist/cli/tasks-z1kfpe8e.js +2 -0
- package/dist/cli/thinking-0eqkrz6t.js +2 -0
- package/dist/cli/todo-5brcrt9m.js +2 -0
- package/dist/cli/tools-7pzm0vj9.js +2 -0
- package/dist/cli/tools-s635p6s8.js +2 -0
- package/dist/cli/trust-cmd-cjav8zgm.js +2 -0
- package/dist/cli/update-check-pt31bm2f.js +2 -0
- package/dist/cli/update-cmd-tk131s9t.js +2 -0
- package/dist/cli/voice-56nabd8d.js +2 -0
- package/dist/cli/webfetch-xd8q596m.js +2 -0
- package/dist/cli/websearch-5hkf98k1.js +2 -0
- package/dist/cli/workflow-cmd-cy3cvzjp.js +4 -0
- package/dist/cli/workspace-q10g5z3e.js +2 -0
- package/dist/lib/index.js +62 -0
- package/dist/lib/models-index.json +1 -0
- package/dist/lib/plugins.js +55 -0
- package/dist/lib/providers.js +17 -0
- package/dist/lib/public-api.js +20 -0
- package/dist/lib/sdk.js +360 -0
- package/package.json +84 -72
- package/bin/rovecode.ts +0 -21
- package/src/acp/server.ts +0 -374
- package/src/cli/auth-login.ts +0 -122
- package/src/cli/connect.ts +0 -244
- package/src/cli/context-cmd.ts +0 -199
- package/src/cli/dispatch.ts +0 -82
- package/src/cli/doctor.ts +0 -362
- package/src/cli/export.ts +0 -276
- package/src/cli/help.ts +0 -293
- package/src/cli/is-tui-invocation.ts +0 -8
- package/src/cli/main.ts +0 -583
- package/src/cli/market-cmd.ts +0 -658
- package/src/cli/mcp-login.ts +0 -141
- package/src/cli/mcp-market-cmd.ts +0 -302
- package/src/cli/output.ts +0 -382
- package/src/cli/repl.ts +0 -250
- package/src/cli/repomap-root.ts +0 -14
- package/src/cli/resume.ts +0 -57
- package/src/cli/run-flags.ts +0 -43
- package/src/cli/run-limits.ts +0 -78
- package/src/cli/runtime.ts +0 -931
- package/src/cli/session-arg.ts +0 -30
- package/src/cli/sessions-cmd.ts +0 -145
- package/src/cli/setup.ts +0 -153
- package/src/cli/skills-cmd.ts +0 -194
- package/src/cli/start-chat.ts +0 -65
- package/src/cli/trust-cmd.ts +0 -52
- package/src/coding/bash.ts +0 -148
- package/src/coding/checkpoints.ts +0 -327
- package/src/coding/diff.ts +0 -138
- package/src/coding/files.ts +0 -341
- package/src/coding/hashline.ts +0 -274
- package/src/coding/lsp-gate.ts +0 -254
- package/src/coding/lsp-servers.ts +0 -147
- package/src/coding/lsp.ts +0 -283
- package/src/coding/repomap-cache.ts +0 -99
- package/src/coding/repomap-files.ts +0 -192
- package/src/coding/repomap.ts +0 -481
- package/src/core/agents.ts +0 -255
- package/src/core/compaction.ts +0 -259
- package/src/core/config.ts +0 -289
- package/src/core/context-report.ts +0 -228
- package/src/core/context.ts +0 -60
- package/src/core/count-remote.ts +0 -107
- package/src/core/execpolicy-rules.ts +0 -196
- package/src/core/execpolicy.ts +0 -385
- package/src/core/executor.ts +0 -454
- package/src/core/guardrails.ts +0 -400
- package/src/core/hooks.ts +0 -411
- package/src/core/images.ts +0 -230
- package/src/core/intro.ts +0 -266
- package/src/core/loop.ts +0 -567
- package/src/core/modes.ts +0 -372
- package/src/core/orchestrator.ts +0 -245
- package/src/core/proc-group.ts +0 -48
- package/src/core/project-trust.ts +0 -98
- package/src/core/reflection.ts +0 -165
- package/src/core/sandbox-config.ts +0 -186
- package/src/core/session-id.ts +0 -24
- package/src/core/session-images.ts +0 -73
- package/src/core/session-ops.ts +0 -183
- package/src/core/session-text.ts +0 -29
- package/src/core/session.ts +0 -469
- package/src/core/settings.ts +0 -170
- package/src/core/tasks.ts +0 -646
- package/src/core/token-scale.ts +0 -108
- package/src/core/tools.ts +0 -309
- package/src/core/trust.ts +0 -104
- package/src/core/types.ts +0 -330
- package/src/core/update-check.ts +0 -171
- package/src/core/usage.ts +0 -204
- package/src/core/validate.ts +0 -121
- package/src/core/verify-gate.ts +0 -159
- package/src/core/verify.ts +0 -236
- package/src/core/voice.ts +0 -158
- package/src/core/win-job.ts +0 -183
- package/src/core/workspace.ts +0 -184
- package/src/design/audit.ts +0 -797
- package/src/design/direction.ts +0 -190
- package/src/design/rules.ts +0 -157
- package/src/eval/bench.ts +0 -150
- package/src/eval/gauntlet-runner.ts +0 -215
- package/src/eval/gauntlet-support.ts +0 -84
- package/src/eval/gauntlet-wave3.ts +0 -269
- package/src/eval/gauntlet-wave4.ts +0 -217
- package/src/eval/gauntlet.ts +0 -253
- package/src/index.ts +0 -17
- package/src/lanes/agy.ts +0 -95
- package/src/lanes/approval.ts +0 -24
- package/src/lanes/claude.ts +0 -129
- package/src/lanes/codex.ts +0 -127
- package/src/lanes/events.ts +0 -130
- package/src/lanes/job.ts +0 -142
- package/src/lanes/opencode.ts +0 -122
- package/src/lanes/process.ts +0 -184
- package/src/lanes/progress.ts +0 -183
- package/src/lanes/registry.ts +0 -178
- package/src/lanes/runner.ts +0 -124
- package/src/lanes/types.ts +0 -112
- package/src/market/catalogs/mcp-docs.json +0 -111
- package/src/market/catalogs/plugins.json +0 -111
- package/src/market/catalogs/skills.json +0 -478
- package/src/market/clone.ts +0 -72
- package/src/market/context-cost.ts +0 -121
- package/src/market/digest.ts +0 -106
- package/src/market/index.ts +0 -22
- package/src/market/install.ts +0 -578
- package/src/market/manifest.ts +0 -187
- package/src/market/prereq.ts +0 -145
- package/src/market/registry.ts +0 -363
- package/src/market/resolve.ts +0 -111
- package/src/market/types.ts +0 -236
- package/src/market/validate.ts +0 -227
- package/src/mcp/client.ts +0 -449
- package/src/mcp/config.ts +0 -252
- package/src/mcp/local-package.ts +0 -211
- package/src/mcp/market-catalog.ts +0 -84
- package/src/mcp/market-install.ts +0 -289
- package/src/mcp/market.ts +0 -362
- package/src/mcp/oauth.ts +0 -251
- package/src/mcp/prompts-resources.ts +0 -249
- package/src/mcp/shared.ts +0 -149
- package/src/mcp/status.ts +0 -67
- package/src/mcp/tools.ts +0 -275
- package/src/mcp/transport.ts +0 -122
- package/src/mcp/trust.ts +0 -25
- package/src/memory/blocks.ts +0 -278
- package/src/memory/recall.ts +0 -355
- package/src/memory/scope.ts +0 -182
- package/src/memory/store.ts +0 -105
- package/src/memory/tools.ts +0 -99
- package/src/plugins/cli.ts +0 -119
- package/src/plugins/discover.ts +0 -108
- package/src/plugins/index.ts +0 -50
- package/src/plugins/install.ts +0 -184
- package/src/plugins/load.ts +0 -124
- package/src/plugins/manifest.ts +0 -92
- package/src/plugins/state.ts +0 -83
- package/src/providers/auth.ts +0 -408
- package/src/providers/cache.ts +0 -223
- package/src/providers/catalog-local.ts +0 -160
- package/src/providers/catalog.ts +0 -421
- package/src/providers/middleware-context.ts +0 -86
- package/src/providers/middleware.ts +0 -373
- package/src/providers/model-list.ts +0 -23
- package/src/providers/oauth/common.ts +0 -105
- package/src/providers/oauth/device-code.ts +0 -107
- package/src/providers/oauth/github-copilot.ts +0 -146
- package/src/providers/oauth/loopback.ts +0 -158
- package/src/providers/oauth/openai.ts +0 -163
- package/src/providers/oauth/openrouter.ts +0 -89
- package/src/providers/oauth/pkce.ts +0 -45
- package/src/providers/oauth/registry.ts +0 -39
- package/src/providers/oauth/seam.ts +0 -89
- package/src/providers/profile-glm53.ts +0 -111
- package/src/providers/profile-sonnet5-persona.ts +0 -65
- package/src/providers/profile-sonnet5-voice.ts +0 -23
- package/src/providers/profiles.ts +0 -156
- package/src/providers/provider-config.ts +0 -311
- package/src/providers/registry.ts +0 -333
- package/src/providers/responses.ts +0 -209
- package/src/providers/retry.ts +0 -234
- package/src/providers/router.ts +0 -294
- package/src/providers/sse.ts +0 -26
- package/src/providers/stream-errors.ts +0 -117
- package/src/providers/stream.ts +0 -566
- package/src/providers/thinking.ts +0 -189
- package/src/providers/wire-messages.ts +0 -129
- package/src/providers/wire-responses.ts +0 -79
- package/src/providers/wire-select.ts +0 -53
- package/src/server/http.ts +0 -291
- package/src/server/openapi.ts +0 -246
- package/src/sextant/card-hits.ts +0 -102
- package/src/sextant/card-keys.ts +0 -55
- package/src/sextant/context-source.ts +0 -157
- package/src/sextant/crew-cards.ts +0 -350
- package/src/sextant/draw-agents.ts +0 -273
- package/src/sextant/draw-code.ts +0 -388
- package/src/sextant/draw-context.ts +0 -222
- package/src/sextant/draw-frame.ts +0 -164
- package/src/sextant/draw-market.ts +0 -573
- package/src/sextant/draw-messages.ts +0 -386
- package/src/sextant/draw-pet.ts +0 -230
- package/src/sextant/draw-plan.ts +0 -187
- package/src/sextant/draw-tabs.ts +0 -85
- package/src/sextant/draw-util.ts +0 -65
- package/src/sextant/draw-wizard.ts +0 -378
- package/src/sextant/engine.ts +0 -230
- package/src/sextant/frame-hits.ts +0 -25
- package/src/sextant/frame.ts +0 -101
- package/src/sextant/git-status.ts +0 -197
- package/src/sextant/grid.ts +0 -59
- package/src/sextant/input.ts +0 -119
- package/src/sextant/keys.ts +0 -521
- package/src/sextant/layout.ts +0 -86
- package/src/sextant/local-commands.ts +0 -169
- package/src/sextant/market-source.ts +0 -287
- package/src/sextant/mentions.ts +0 -200
- package/src/sextant/message-hits.ts +0 -26
- package/src/sextant/model.ts +0 -387
- package/src/sextant/overlays.ts +0 -456
- package/src/sextant/panel-hits.ts +0 -38
- package/src/sextant/pet.ts +0 -399
- package/src/sextant/screen.ts +0 -324
- package/src/sextant/scroll-hits.ts +0 -66
- package/src/sextant/scrollbar.ts +0 -82
- package/src/sextant/sextant-bridge.ts +0 -174
- package/src/sextant/sextant-cards.ts +0 -142
- package/src/sextant/sextant-diff-base.ts +0 -63
- package/src/sextant/sextant-files.ts +0 -154
- package/src/sextant/sextant-frame-loop.ts +0 -335
- package/src/sextant/sextant-renderer.ts +0 -574
- package/src/sextant/sextant-repo.ts +0 -140
- package/src/sextant/theme.ts +0 -66
- package/src/sextant/tool-rows.ts +0 -189
- package/src/sextant/types.ts +0 -493
- package/src/skills/index.ts +0 -387
- package/src/skills/pack.ts +0 -220
- package/src/skills/spec.ts +0 -162
- package/src/skills/tools.ts +0 -69
- package/src/skills/versioned.ts +0 -227
- package/src/telemetry/otel-export.ts +0 -122
- package/src/telemetry/otel-lanes.ts +0 -89
- package/src/telemetry/otel-logs.ts +0 -131
- package/src/telemetry/otel-metrics.ts +0 -136
- package/src/telemetry/otel.ts +0 -397
- package/src/telemetry/otlp.ts +0 -76
- package/src/tools/ask-user.ts +0 -156
- package/src/tools/bash-bg.ts +0 -94
- package/src/tools/bash-jobs.ts +0 -237
- package/src/tools/design.ts +0 -151
- package/src/tools/evalcell.ts +0 -338
- package/src/tools/html-text.ts +0 -139
- package/src/tools/provider.ts +0 -149
- package/src/tools/task.ts +0 -250
- package/src/tools/todo.ts +0 -320
- package/src/tools/webfetch.ts +0 -332
- package/src/tools/websearch.ts +0 -359
- package/src/tui/agents-cmd.ts +0 -41
- package/src/tui/app.ts +0 -749
- package/src/tui/attach.ts +0 -127
- package/src/tui/boot-notes.ts +0 -41
- package/src/tui/builtin-prompts.ts +0 -59
- package/src/tui/checkpoints-cmd.ts +0 -70
- package/src/tui/clipboard-image.ts +0 -81
- package/src/tui/clipboard.ts +0 -78
- package/src/tui/commands.ts +0 -283
- package/src/tui/config-view.ts +0 -53
- package/src/tui/context-cmds.ts +0 -282
- package/src/tui/cost.ts +0 -108
- package/src/tui/crash-guard.ts +0 -173
- package/src/tui/focus-terminal.ts +0 -34
- package/src/tui/git-cmds.ts +0 -273
- package/src/tui/git-plain.ts +0 -58
- package/src/tui/info-cmd.ts +0 -150
- package/src/tui/input-plain.ts +0 -76
- package/src/tui/mcp-cmd.ts +0 -128
- package/src/tui/memory-note.ts +0 -77
- package/src/tui/modes-cmd.ts +0 -45
- package/src/tui/notify-seq.ts +0 -100
- package/src/tui/notify.ts +0 -318
- package/src/tui/overlays.ts +0 -97
- package/src/tui/pi-renderer.ts +0 -428
- package/src/tui/providers-cmd.ts +0 -377
- package/src/tui/reasoning-view.ts +0 -56
- package/src/tui/renderer.ts +0 -128
- package/src/tui/replay-marker.ts +0 -29
- package/src/tui/session-cmd.ts +0 -148
- package/src/tui/session-manage.ts +0 -95
- package/src/tui/sextant-attach.ts +0 -102
- package/src/tui/sextant-io.ts +0 -202
- package/src/tui/sextant-smoke.ts +0 -110
- package/src/tui/shell-cmd.ts +0 -158
- package/src/tui/smoke.ts +0 -72
- package/src/tui/staged-terminal.ts +0 -50
- package/src/tui/startup.ts +0 -12
- package/src/tui/theme.ts +0 -59
- package/src/tui/todo-label.ts +0 -7
- package/src/tui/trust-card.ts +0 -107
- package/src/tui/tui-commands.ts +0 -87
- package/tsconfig.json +0 -30
- package/vendor/pi-tui/LICENSE +0 -21
- package/vendor/pi-tui/PATCHES.md +0 -12
- package/vendor/pi-tui/PROVENANCE.md +0 -12
- package/vendor/pi-tui/README.upstream.md +0 -854
- 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 +0 -158
- package/vendor/pi-tui/src/autocomplete.ts +0 -827
- package/vendor/pi-tui/src/components/alt-screen-flash.ts +0 -52
- package/vendor/pi-tui/src/components/box.ts +0 -138
- package/vendor/pi-tui/src/components/cancellable-loader.ts +0 -41
- package/vendor/pi-tui/src/components/editor.ts +0 -2364
- package/vendor/pi-tui/src/components/h-stack.ts +0 -45
- package/vendor/pi-tui/src/components/image.ts +0 -128
- package/vendor/pi-tui/src/components/input.ts +0 -448
- package/vendor/pi-tui/src/components/loader.ts +0 -93
- package/vendor/pi-tui/src/components/markdown.ts +0 -1016
- package/vendor/pi-tui/src/components/scroll-view.ts +0 -217
- package/vendor/pi-tui/src/components/select-list.ts +0 -230
- package/vendor/pi-tui/src/components/settings-list.ts +0 -277
- package/vendor/pi-tui/src/components/spacer.ts +0 -29
- package/vendor/pi-tui/src/components/stack.ts +0 -155
- package/vendor/pi-tui/src/components/text.ts +0 -108
- package/vendor/pi-tui/src/components/truncated-text.ts +0 -66
- package/vendor/pi-tui/src/components/v-stack.ts +0 -34
- package/vendor/pi-tui/src/editor-component.ts +0 -75
- package/vendor/pi-tui/src/fuzzy.ts +0 -138
- package/vendor/pi-tui/src/index.ts +0 -149
- package/vendor/pi-tui/src/keybindings.ts +0 -321
- package/vendor/pi-tui/src/keys.ts +0 -1402
- package/vendor/pi-tui/src/kill-ring.ts +0 -47
- package/vendor/pi-tui/src/latex.ts +0 -1381
- package/vendor/pi-tui/src/layout-node.ts +0 -52
- package/vendor/pi-tui/src/layout.ts +0 -411
- package/vendor/pi-tui/src/native-modifiers.ts +0 -60
- package/vendor/pi-tui/src/native-module-path.ts +0 -32
- package/vendor/pi-tui/src/stdin-buffer.ts +0 -445
- package/vendor/pi-tui/src/terminal-colors.ts +0 -74
- package/vendor/pi-tui/src/terminal-image.ts +0 -701
- package/vendor/pi-tui/src/terminal.ts +0 -554
- package/vendor/pi-tui/src/tui-alt-screen.ts +0 -1379
- package/vendor/pi-tui/src/tui-main-screen.ts +0 -655
- package/vendor/pi-tui/src/tui.ts +0 -1264
- package/vendor/pi-tui/src/undo-stack.ts +0 -29
- package/vendor/pi-tui/src/utils.ts +0 -1327
- package/vendor/pi-tui/src/word-navigation.ts +0 -118
- package/vendor/pi-tui/test/test-themes.ts +0 -39
- package/vendor/pi-tui/test/virtual-terminal.ts +0 -219
- /package/{src/providers → dist/cli}/models-index.json +0 -0
package/src/sextant/types.ts
DELETED
|
@@ -1,493 +0,0 @@
|
|
|
1
|
-
/** Sextant surface (Wave 4, ports #40-#46) — the shared type contract every `src/sextant/*`
|
|
2
|
-
* module builds against. Ported from the user's own sextant v0.4.0 prototype (term.js cell
|
|
3
|
-
* buffer, app.js state `S`, layout(), themes); the mock scenario/fixture fields are gone and
|
|
4
|
-
* every panel is fed by real rovecode seams (RunEvent stream, SessionStore, TaskManager, todos.json,
|
|
5
|
-
* approval + ask_user seams, model catalog).
|
|
6
|
-
*
|
|
7
|
-
* Rules for the whole directory (ADR-001/002/003 + the Bun test hazards):
|
|
8
|
-
* - structural interfaces (ScreenLike) so panels, input and the pet compile and test before the
|
|
9
|
-
* core renderer lands; only screen.ts implements ScreenLike for real;
|
|
10
|
-
* - pure modules (model, the draw modules, pet, layout, engine, frame) take `now` as a
|
|
11
|
-
* parameter — no Date.now(), no timers, no process access; the ONE interval lives in
|
|
12
|
-
* sextant-renderer.ts;
|
|
13
|
-
* - one cell per code point unless screen.ts measures otherwise; -1 means "unset" for colors;
|
|
14
|
-
* - this file is types + tiny constants only: no I/O, no imports beyond rovecode type modules. */
|
|
15
|
-
|
|
16
|
-
import type { RunEvent } from "../core/types.ts";
|
|
17
|
-
import type { TaskInfo } from "../core/tasks.ts";
|
|
18
|
-
import type { TodoItem } from "../tools/todo.ts";
|
|
19
|
-
import type { QuestionPrompt } from "../tools/ask-user.ts";
|
|
20
|
-
|
|
21
|
-
// ------------------------------------------------------------------ styling
|
|
22
|
-
|
|
23
|
-
/** attribute bits (term.js `A`) */
|
|
24
|
-
export const ATTR = { BOLD: 1, DIM: 2, ITALIC: 4, UNDERLINE: 8, INVERSE: 16, STRIKE: 32 } as const;
|
|
25
|
-
|
|
26
|
-
/** packed 0xRRGGBB colors; -1 = unset (inherit the cell's current value) */
|
|
27
|
-
export interface Style { fg: number; bg: number; a: number }
|
|
28
|
-
/** a text run: [string, style]; an undefined style means "unstyled" */
|
|
29
|
-
export type Seg = readonly [string, Style | undefined];
|
|
30
|
-
|
|
31
|
-
export interface Rect { x: number; y: number; w: number; h: number }
|
|
32
|
-
|
|
33
|
-
/** The cell-buffer surface every draw function paints on (term.js Screen, minus I/O).
|
|
34
|
-
* Coordinates are 0-based cells; writes outside the buffer are clipped, never thrown. */
|
|
35
|
-
export interface ScreenLike {
|
|
36
|
-
readonly w: number;
|
|
37
|
-
readonly h: number;
|
|
38
|
-
/** write a string at (x,y); returns the x after the last cell written */
|
|
39
|
-
put(x: number, y: number, str: string, st?: Style, maxW?: number): number;
|
|
40
|
-
/** write segments clipped to maxW; returns the x after the last cell */
|
|
41
|
-
text(x: number, y: number, segs: readonly Seg[], maxW?: number): number;
|
|
42
|
-
/** clipped text with a trailing ellipsis when it does not fit */
|
|
43
|
-
clip(x: number, y: number, str: string, st: Style | undefined, maxW: number): number;
|
|
44
|
-
fill(x: number, y: number, w: number, h: number, ch: string, st?: Style): void;
|
|
45
|
-
/** recolor a rectangle's background only */
|
|
46
|
-
tint(x: number, y: number, w: number, h: number, bg: number): void;
|
|
47
|
-
hline(x: number, y: number, w: number, st?: Style, ch?: string): void;
|
|
48
|
-
vline(x: number, y: number, h: number, st?: Style, ch?: string): void;
|
|
49
|
-
/** rounded box (╭╮╰╯); bgFill paints the interior first when given */
|
|
50
|
-
box(x: number, y: number, w: number, h: number, st?: Style, bgFill?: number): void;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// ------------------------------------------------------------------ themes
|
|
54
|
-
|
|
55
|
-
export type ThemeName = "night" | "ember" | "contrast";
|
|
56
|
-
export const THEME_ORDER: readonly ThemeName[] = ["night", "ember", "contrast"];
|
|
57
|
-
|
|
58
|
-
/** buildTheme() output: the palette (app.js THEMES) plus derived mixes, all packed ints */
|
|
59
|
-
export interface Theme {
|
|
60
|
-
name: ThemeName;
|
|
61
|
-
label: string;
|
|
62
|
-
bg: number; bg2: number; fg: number; fg2: number; muted: number; dim: number;
|
|
63
|
-
rule: number; rule2: number; accent: number; accent2: number;
|
|
64
|
-
ok: number; err: number; warn: number; info: number; str: number; ty: number;
|
|
65
|
-
/** derived: mix(bg, accent, .12) / mix(bg, ok, .15) / mix(bg, err, .15) / mix(bg, fg, .08) */
|
|
66
|
-
hlBg: number; addBg: number; delBg: number; selBg: number;
|
|
67
|
-
/** derived: mix(bg, accent, .45) / mix(bg, ok, .55) / mix(bg, fg2, .55) */
|
|
68
|
-
accentDim: number; okDim: number; mixDim: number;
|
|
69
|
-
/** derived frame colors: mix(bg, fg, .28) and .17 */
|
|
70
|
-
frame: number; frameDim: number;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// ------------------------------------------------------------------ input
|
|
74
|
-
|
|
75
|
-
export interface KeyEvent {
|
|
76
|
-
type: "key";
|
|
77
|
-
/** "up" "down" "left" "right" "home" "end" "pageup" "pagedown" "insert" "delete" "enter" "tab"
|
|
78
|
-
* "shift-tab" "backspace" "escape" "space" "f1".."f12", a single character, or "unknown".
|
|
79
|
-
* "space" is Ctrl+Space (the NUL byte) ONLY — the space bar arrives as the character " " with
|
|
80
|
-
* `ch: " "` (input.ts CTRL_NAMES); consumers that insert text must accept both. */
|
|
81
|
-
name: string;
|
|
82
|
-
/** the printable character for plain keys (and the letter for alt+letter) */
|
|
83
|
-
ch?: string;
|
|
84
|
-
ctrl?: boolean;
|
|
85
|
-
alt?: boolean;
|
|
86
|
-
shift?: boolean;
|
|
87
|
-
}
|
|
88
|
-
/** SGR mouse report: b = button bits (0 left, 1 middle, 2 right, 32 = motion/drag, 64/65 = wheel
|
|
89
|
-
* up/down), 0-based cell coordinates, press = "M" (press/motion) vs release "m" */
|
|
90
|
-
export interface MouseEvent { type: "mouse"; b: number; x: number; y: number; press: boolean }
|
|
91
|
-
/** bracketed paste (CSI 200~ … 201~) delivered as ONE event so multi-line pastes never submit */
|
|
92
|
-
export interface PasteEvent { type: "paste"; text: string }
|
|
93
|
-
export type InputEvent = KeyEvent | MouseEvent | PasteEvent;
|
|
94
|
-
|
|
95
|
-
/** a click zone a drawer registered while painting the current frame (drawSuggest / drawPalette /
|
|
96
|
-
* drawHelp / the pet panel); keys.ts walks the list in REVERSE so the last registered zone under
|
|
97
|
-
* the pointer wins (overlays sit above panels) */
|
|
98
|
-
export interface HitZone {
|
|
99
|
-
rect: Rect;
|
|
100
|
-
onClick: () => void;
|
|
101
|
-
/** a key replayed through handleInput after onClick (e.g. Enter to run the row just selected) */
|
|
102
|
-
key?: KeyEvent;
|
|
103
|
-
/** a zone that can be GRABBED: a click inside it makes it the active drag target and every following
|
|
104
|
-
* left-button drag event (until the release) calls this with the pointer's row and the rows moved
|
|
105
|
-
* since the press — the scrollbar thumbs use `dy` to slide proportionally, so the thumb stays under
|
|
106
|
-
* the finger wherever it was grabbed. The closure captures the frame's geometry at grab time. */
|
|
107
|
-
onDrag?: (y: number, dy: number) => void;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/** The terminal the renderer drives (#44): the ONE place raw stdin/stdout live. tui/sextant-io.ts
|
|
111
|
-
* implements it over the process streams (+ the Windows VT-input helper); tests and the smoke use
|
|
112
|
-
* an in-memory double. `env` is the process environment the renderer reads ROVECODE_PET/ROVECODE_THEME from. */
|
|
113
|
-
export interface TerminalIO {
|
|
114
|
-
write(s: string): void;
|
|
115
|
-
/** raw input chunks (utf8); returns the unsubscribe */
|
|
116
|
-
onInput(cb: (chunk: string) => void): () => void;
|
|
117
|
-
onResize(cb: (cols: number, rows: number) => void): () => void;
|
|
118
|
-
size(): { cols: number; rows: number };
|
|
119
|
-
enterRaw(): void;
|
|
120
|
-
leaveRaw(): void;
|
|
121
|
-
env: Readonly<Record<string, string | undefined>>;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// ------------------------------------------------------------------ layout
|
|
125
|
-
|
|
126
|
-
/** layout(w, h, opts) → panel rectangles. Breakpoints (app.js layout()): files column at
|
|
127
|
-
* w ≥ 140 (30 wide at ≥150, else 26); right column (plan + usage) at w ≥ 110 (34 / 28);
|
|
128
|
-
* messages = max(8, round(contentH · 0.34)) rows; usage 5 rows; pet 14 rows when contentH ≥ 36
|
|
129
|
-
* (under files when present, else under plan); null = hidden at this size. */
|
|
130
|
-
export interface Layout {
|
|
131
|
-
w: number;
|
|
132
|
-
h: number;
|
|
133
|
-
/** outer frame (title in the top border, key hints in the bottom border) */
|
|
134
|
-
frame: Rect;
|
|
135
|
-
files: Rect | null;
|
|
136
|
-
code: Rect;
|
|
137
|
-
messages: Rect;
|
|
138
|
-
plan: Rect | null;
|
|
139
|
-
usage: Rect | null;
|
|
140
|
-
pet: Rect | null;
|
|
141
|
-
}
|
|
142
|
-
export interface LayoutOptions { pet: boolean }
|
|
143
|
-
|
|
144
|
-
// ------------------------------------------------------------------ model (state)
|
|
145
|
-
|
|
146
|
-
/** git porcelain classes shown next to a file: M modified · A added/untracked · D deleted */
|
|
147
|
-
export type FileStatus = "M" | "A" | "D";
|
|
148
|
-
|
|
149
|
-
/** one row of the flattened tree (drawFiles consumes rows, not the tree) */
|
|
150
|
-
export interface TreeRow {
|
|
151
|
-
/** cwd-relative posix path ("src/auth/callback.ts" or "src/auth" for a dir) */
|
|
152
|
-
path: string;
|
|
153
|
-
name: string;
|
|
154
|
-
depth: number;
|
|
155
|
-
dir: boolean;
|
|
156
|
-
expanded?: boolean;
|
|
157
|
-
status?: FileStatus;
|
|
158
|
-
/** a collapsed dir containing changed files shows "·" */
|
|
159
|
-
hasChanges?: boolean;
|
|
160
|
-
/** the agent touched this file (read/edit/write) — diamond spinner until this clock */
|
|
161
|
-
touchedUntil?: number;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
export interface FilesState {
|
|
165
|
-
/** all cwd-relative posix file paths (gitListFiles, or a bounded walk when git is absent) */
|
|
166
|
-
paths: string[];
|
|
167
|
-
statuses: Map<string, FileStatus>;
|
|
168
|
-
expanded: Set<string>;
|
|
169
|
-
touched: Map<string, number>;
|
|
170
|
-
cursor: number;
|
|
171
|
-
scroll: number;
|
|
172
|
-
/** bumped at every mutation of paths/statuses/expanded/touched so treeRows can cache by (version, now) */
|
|
173
|
-
version: number;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
export interface RepoInfo { name: string; branch: string | null; modified: number }
|
|
177
|
-
|
|
178
|
-
/** activity shown in the frame header (with the run timer) and driving the pet's mood */
|
|
179
|
-
export type ActivityState =
|
|
180
|
-
| "IDLE" | "THINKING" | "WRITING" | "READING" | "EDITING" | "RUNNING" | "TESTING"
|
|
181
|
-
| "WAITING" | "DELEGATING" | "SUCCESS" | "ERROR";
|
|
182
|
-
|
|
183
|
-
export interface ActivityInfo {
|
|
184
|
-
state: ActivityState;
|
|
185
|
-
/** e.g. "editing callback.ts", "running tests", "waiting for you" */
|
|
186
|
-
label: string;
|
|
187
|
-
runId: string | null;
|
|
188
|
-
startedAt: number | null;
|
|
189
|
-
endedAt: number | null;
|
|
190
|
-
/** clock of the transition into ERROR (the pet's storm trigger); absent until the first error */
|
|
191
|
-
errorAt?: number;
|
|
192
|
-
/** the provider turn in flight: when the loop called the model (turn_start) — absent once a tool
|
|
193
|
-
* runs, the turn ends or the run ends, so the live line only paints while the model itself is busy */
|
|
194
|
-
turnAt?: number;
|
|
195
|
-
/** estimated output tokens streamed so far in that turn — reasoning plus answer text */
|
|
196
|
-
tokens?: number;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
export type CodeMode = "code" | "diff" | "run" | "agents" | "search";
|
|
200
|
-
|
|
201
|
-
export interface DiffHunk {
|
|
202
|
-
/** rendered rows: prefix " " | "+" | "-" plus the line text */
|
|
203
|
-
rows: { op: " " | "+" | "-"; text: string }[];
|
|
204
|
-
oldStart: number;
|
|
205
|
-
newStart: number;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
export interface CodeState {
|
|
209
|
-
mode: CodeMode;
|
|
210
|
-
/** file shown in code/diff mode (cwd-relative) */
|
|
211
|
-
file: string | null;
|
|
212
|
-
/** current file contents (disk) or null when unreadable */
|
|
213
|
-
content: string | null;
|
|
214
|
-
/** [fromLine, toLine] 1-based highlight (the anchor range of the last edit / read) */
|
|
215
|
-
hl: [number, number] | null;
|
|
216
|
-
scroll: number;
|
|
217
|
-
/** last glob/grep result lines */
|
|
218
|
-
search: { query: string; lines: string[] } | null;
|
|
219
|
-
/** last bash call: command, output lines (10k-char tool bound applies), verdict, and the exit
|
|
220
|
-
* code from the tool's `exit=N` header once the call ended (absent while running / unparsable) */
|
|
221
|
-
run: { cmd: string; lines: string[]; status: "running" | "ok" | "fail"; exitCode?: number } | null;
|
|
222
|
-
/** pre-approval preview or post-edit hunks; `base: "head"` marks a HEAD-vs-disk view (no pre-edit
|
|
223
|
-
* content — the /diff command, or an ungated edit whose base could not be rebuilt): cumulative
|
|
224
|
-
* over every uncommitted change, so the title says `vs HEAD` and the row keeps its own counts */
|
|
225
|
-
diff: { file: string; hunks: DiffHunk[]; add: number; del: number; base?: "head" } | null;
|
|
226
|
-
/** agents board selection */
|
|
227
|
-
lane: number;
|
|
228
|
-
laneOpen: boolean;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
/** compact tool row in the messages panel: `· read x` `~ edit x +a −b` `+ write x` `− remove x`
|
|
232
|
-
* `$ run cmd … last line` — verb/glyph derived from the tool name */
|
|
233
|
-
export interface ToolRow {
|
|
234
|
-
kind: "tool";
|
|
235
|
-
callId: string;
|
|
236
|
-
tool: string;
|
|
237
|
-
/** "read" | "edit" | "write" | "remove" | "run" | "search" | "fetch" | "task" | "other" */
|
|
238
|
-
verb: string;
|
|
239
|
-
/** what the row names: basename, command head, url host… */
|
|
240
|
-
label: string;
|
|
241
|
-
/** cwd-relative posix path for file tools (read/edit/write/remove) — the code panel target */
|
|
242
|
-
path?: string;
|
|
243
|
-
running: boolean;
|
|
244
|
-
ok?: boolean;
|
|
245
|
-
/** trailing summary: "18 passed", "+21 −4", "N lines", first output line… */
|
|
246
|
-
detail?: string;
|
|
247
|
-
add?: number;
|
|
248
|
-
del?: number;
|
|
249
|
-
ms?: number;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
export type MessageRow =
|
|
253
|
-
/** `at` = the clock the line was sent (renderer addUser); the `· sent` tag fades 1.4 s after it */
|
|
254
|
-
| { kind: "user"; text: string; /** image chips `[image: name]` */ images?: string[];
|
|
255
|
-
/** `@file` chips — "src/x.ts · 120 lines": the attached read blocks are in the session, never in the panel (mentions.ts) */
|
|
256
|
-
files?: string[]; at?: number }
|
|
257
|
-
/** `id` = the RunEvent messageId the streaming row belongs to (absent on replayed/summary rows) */
|
|
258
|
-
| { kind: "assistant"; text: string; streaming: boolean; id?: string }
|
|
259
|
-
| ToolRow
|
|
260
|
-
| { kind: "system"; text: string; tone: "info" | "warn" | "error" }
|
|
261
|
-
/** a steering note that reached the run (task completion, reflection nudge) */
|
|
262
|
-
| { kind: "steer"; text: string }
|
|
263
|
-
| { kind: "compaction"; text: string };
|
|
264
|
-
|
|
265
|
-
/** the modal card rendered inside the messages panel (ONE at a time) */
|
|
266
|
-
export type CardState =
|
|
267
|
-
| {
|
|
268
|
-
kind: "approval";
|
|
269
|
-
tool: string;
|
|
270
|
-
argsPreview: string;
|
|
271
|
-
/** port #24 unified diff preview when the tool is edit/write */
|
|
272
|
-
detail?: string;
|
|
273
|
-
/** the buttons this card offers, in order — an edit/write card carries the extra `all-edits`
|
|
274
|
-
* door, everything else keeps allow · always · deny */
|
|
275
|
-
verdicts: readonly ("once" | "always" | "all-edits" | "deny")[];
|
|
276
|
-
/** index into `verdicts` */
|
|
277
|
-
selected: number;
|
|
278
|
-
resolve: (answer: "once" | "always" | "all-edits" | "deny") => void;
|
|
279
|
-
}
|
|
280
|
-
| {
|
|
281
|
-
kind: "question";
|
|
282
|
-
prompt: QuestionPrompt;
|
|
283
|
-
/** option index; options.length = the free-text row when allowed; +1 = "skip" */
|
|
284
|
-
selected: number;
|
|
285
|
-
freeText: string;
|
|
286
|
-
resolve: (answer: { kind: "option"; index: number } | { kind: "text"; text: string } | null) => void;
|
|
287
|
-
};
|
|
288
|
-
|
|
289
|
-
export interface UsageState {
|
|
290
|
-
provider: string;
|
|
291
|
-
model: string;
|
|
292
|
-
/** the thinking dial as the runtime holds it ("auto" | "off" | "low" | …); painted in the footer tag
|
|
293
|
-
* next to the model so the person can see what the answer is costing them; unset = not reported */
|
|
294
|
-
effort?: string;
|
|
295
|
-
turns: number;
|
|
296
|
-
tokensIn: number;
|
|
297
|
-
tokensOut: number;
|
|
298
|
-
/** 0..100 estimated context fill, null when the window is unknown */
|
|
299
|
-
contextPct: number | null;
|
|
300
|
-
/** the inputs behind contextPct when known: estimated tokens in the prompt + the model's window */
|
|
301
|
-
contextTokens?: number;
|
|
302
|
-
contextWindow?: number;
|
|
303
|
-
/** null = unpriced */
|
|
304
|
-
costUsd: number | null;
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
export interface PlanState {
|
|
308
|
-
todos: TodoItem[];
|
|
309
|
-
/** loader note (corrupt todos.json) */
|
|
310
|
-
note?: string;
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
export interface InputState {
|
|
314
|
-
text: string;
|
|
315
|
-
cur: number;
|
|
316
|
-
history: string[];
|
|
317
|
-
histIdx: number;
|
|
318
|
-
/** selected row in the suggestion box; -1 = the box was dismissed with Esc and stays hidden until
|
|
319
|
-
* the text changes (keys.ts resets it to 0 on every edit) */
|
|
320
|
-
sgSel: number;
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
export type Focus = "messages" | "code" | "files";
|
|
324
|
-
|
|
325
|
-
/** Which panel occupies the MAIN slot when the terminal is too narrow to show them side by side
|
|
326
|
-
* (layout.ts hides files under 140 columns and the plan column under 110). The tab strip on the main
|
|
327
|
-
* panel's border pages between them; on a wide terminal every panel is on screen and `page` is inert. */
|
|
328
|
-
export type Page = "code" | "files" | "plan";
|
|
329
|
-
export const PAGES: readonly Page[] = ["code", "files", "plan"];
|
|
330
|
-
|
|
331
|
-
export interface Toast { text: string; until: number; tone: "info" | "warn" | "error" }
|
|
332
|
-
|
|
333
|
-
/** A notification worth keeping after its toast fades: a run finishing, a failed tool, a card
|
|
334
|
-
* waiting for the human. Toasts are the transient surface (three seconds, top right); notices are
|
|
335
|
-
* the record behind them, so what you missed while looking away can be read back (⌃b / /notices). */
|
|
336
|
-
export interface Notice {
|
|
337
|
-
id: number;
|
|
338
|
-
/** clock when it happened */
|
|
339
|
-
at: number;
|
|
340
|
-
tone: Toast["tone"];
|
|
341
|
-
kind: "done" | "error" | "approval" | "info";
|
|
342
|
-
text: string;
|
|
343
|
-
/** cleared when the history is opened */
|
|
344
|
-
read: boolean;
|
|
345
|
-
}
|
|
346
|
-
/** the history keeps this many; older notices fall off the front */
|
|
347
|
-
export const MAX_NOTICES = 50;
|
|
348
|
-
|
|
349
|
-
export interface PaletteState {
|
|
350
|
-
query: string;
|
|
351
|
-
sel: number;
|
|
352
|
-
/** flat items: label + what pressing enter does (a slash line, a renderer-local action, or
|
|
353
|
-
* `pick:<value>` for a Renderer.pickOne picker); `hint` overrides the derived right-hand hint */
|
|
354
|
-
items: { label: string; group: string; action: string; hint?: string }[];
|
|
355
|
-
/** what this palette IS, shown on the box: the command palette says nothing and keeps its default,
|
|
356
|
-
* a Renderer.pickOne picker names what is being picked. Painted clipped — a caller's sentence is
|
|
357
|
-
* not a layout contract. */
|
|
358
|
-
title?: string;
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
import type { MarketState } from "./draw-market.ts";
|
|
362
|
-
import type { ContextState } from "./draw-context.ts";
|
|
363
|
-
import type { LiveRuntime } from "./context-source.ts";
|
|
364
|
-
|
|
365
|
-
/** the whole surface state — owned by model.ts (pure `applyEvent`) and mutated by keys.ts */
|
|
366
|
-
export interface SextantState {
|
|
367
|
-
cwd: string;
|
|
368
|
-
repo: RepoInfo;
|
|
369
|
-
files: FilesState;
|
|
370
|
-
activity: ActivityInfo;
|
|
371
|
-
code: CodeState;
|
|
372
|
-
messages: MessageRow[];
|
|
373
|
-
/** messages scroll offset; stick = follow the tail */
|
|
374
|
-
msgScroll: number;
|
|
375
|
-
stick: boolean;
|
|
376
|
-
card: CardState | null;
|
|
377
|
-
plan: PlanState;
|
|
378
|
-
crew: TaskInfo[];
|
|
379
|
-
usage: UsageState;
|
|
380
|
-
input: InputState;
|
|
381
|
-
focus: Focus;
|
|
382
|
-
/** the panel in the main slot on a narrow terminal (see Page); "code" on a wide one */
|
|
383
|
-
page: Page;
|
|
384
|
-
palette: PaletteState | null;
|
|
385
|
-
/** the market overlay (/market, ⌃m); null when it is closed — see draw-market.ts */
|
|
386
|
-
market: MarketState | null;
|
|
387
|
-
/** the context overlay (/context); null when it is closed — see draw-context.ts */
|
|
388
|
-
context: ContextState | null;
|
|
389
|
-
/** the connect wizard (/connect, /setup); null when it is closed — see draw-wizard.ts */
|
|
390
|
-
wizard: import("./draw-wizard.ts").WizardState | null;
|
|
391
|
-
help: boolean;
|
|
392
|
-
toasts: Toast[];
|
|
393
|
-
/** the notification history behind the toasts (Notice); newest last */
|
|
394
|
-
notices: Notice[];
|
|
395
|
-
/** images staged for the next user message (names), shown as chips above the prompt; synced from
|
|
396
|
-
* SextantAttach.staged() each tick — the store owns the stage, this is the painted mirror */
|
|
397
|
-
staged: string[];
|
|
398
|
-
/** first Esc while busy arms "again to stop" until this clock */
|
|
399
|
-
escUntil: number;
|
|
400
|
-
/** two-press ⌃c guarantee (renderer-level): a ⌃c while busy interrupts and arms this clock; a
|
|
401
|
-
* second ⌃c before it quits even if the interrupted run has not settled yet */
|
|
402
|
-
ctrlCUntil?: number;
|
|
403
|
-
running: boolean;
|
|
404
|
-
mode: "plan" | "act";
|
|
405
|
-
yolo: boolean;
|
|
406
|
-
/** the middle permission tier — painted next to plan/auto in the frame footer */
|
|
407
|
-
acceptEdits?: boolean;
|
|
408
|
-
theme: ThemeName;
|
|
409
|
-
/** boot clock for the staggered panel reveal (90 ms steps) */
|
|
410
|
-
bootAt: number;
|
|
411
|
-
/** slash commands known to the prompt/palette (built-ins + custom) */
|
|
412
|
-
/** the app's slash commands for the palette and the suggestions; `choices` = a fixed argument set
|
|
413
|
-
* offered once the command is typed (tui/renderer.ts SlashCommand.choices) */
|
|
414
|
-
commands: { name: string; description: string; choices?: readonly string[] | (() => readonly string[]); choicesThen?: "submit" | "complete" }[];
|
|
415
|
-
version: string;
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
// ------------------------------------------------------------------ seams
|
|
419
|
-
|
|
420
|
-
/** what the renderer receives from the ONE controller (app.ts runTui) beyond the Renderer
|
|
421
|
-
* interface: raw RunEvents (paths, diffs, outputs) and the runtime handles the panels read */
|
|
422
|
-
export interface SextantAttach {
|
|
423
|
-
cwd: string;
|
|
424
|
-
sessionsDir: string;
|
|
425
|
-
/** the ACTIVE session store (changes on /sessions /resume /new) */
|
|
426
|
-
store(): { id: string };
|
|
427
|
-
tasks: { list(): TaskInfo[]; subscribe(fn: (t: TaskInfo) => void): () => void };
|
|
428
|
-
model(): { provider: string; model: string };
|
|
429
|
-
/** context window for the usage bar; undefined when the catalog does not know the model */
|
|
430
|
-
contextWindow(): number | undefined;
|
|
431
|
-
/** session accounting for the usage panel (tui/cost.ts math over the ACTIVE store): cost priced
|
|
432
|
-
* per message at its origin model (null = unpriced), context = estimated prompt tokens */
|
|
433
|
-
usage?(): { costUsd: number | null; contextTokens: number };
|
|
434
|
-
/** Everything /context needs and no other panel does: the transcript to count, the catalog to look a
|
|
435
|
-
* model's window and pricing up in, and the LIVE runtime.
|
|
436
|
-
*
|
|
437
|
-
* The runtime is the point. `rovecode context` on a shell has to BUILD one to learn the system prompt
|
|
438
|
-
* and the tool schemas, and in a fresh session those two are most of the window; here they already
|
|
439
|
-
* exist. Optional all the same — a surface that cannot supply this (a headless dump, a test) still
|
|
440
|
-
* opens the panel, and the panel says its total is a floor rather than under-reporting in silence. */
|
|
441
|
-
contextInputs?(): {
|
|
442
|
-
messages: readonly unknown[];
|
|
443
|
-
lookup: (r: { provider: string; model: string }) => unknown;
|
|
444
|
-
runtime: LiveRuntime | null;
|
|
445
|
-
};
|
|
446
|
-
/** Re-read the MCP files and connect anything new, in this session. The market overlay calls it after
|
|
447
|
-
* installing an MCP server so the answer is "connected" rather than "restart rovecode" — the tools
|
|
448
|
-
* that reach a server (`mcp_list`, `mcp_call`) dispatch by name, so nothing else has to change.
|
|
449
|
-
* Absent when the surface has no runtime behind it (the smoke harness, the tests). */
|
|
450
|
-
reloadMcp?(): Promise<{ added: string[]; removed: string[]; failed: { name: string; error: string }[]; skipped: string[] }>;
|
|
451
|
-
/** `--pet <name>`; the renderer's own option is the fallback */
|
|
452
|
-
petName?: string;
|
|
453
|
-
/** names of the images staged for the NEXT user message (tui/attach.ts stage on the active store),
|
|
454
|
-
* read live each tick so the prompt can show them as chips before they are sent */
|
|
455
|
-
staged?(): string[];
|
|
456
|
-
/** port #54: stage one @image mention for the next message — the SAME stage /attach writes, so the
|
|
457
|
-
* caps and the chip row stay that seam's. Absent in surfaces without a store behind them. */
|
|
458
|
-
attachImage?(abs: string): void;
|
|
459
|
-
/** the connect wizard (draw-wizard.ts): the provider rows step 1 lists (SETUP_PICKS + what the
|
|
460
|
-
* registry already knows; a row may be a "your own URL" door that registers itself when chosen).
|
|
461
|
-
* Absent in surfaces without a runtime — the wizard cannot open there. */
|
|
462
|
-
wizardProviders?(): { key: string; label: string; configured?: boolean; local?: boolean; url?: "openai" | "anthropic" }[];
|
|
463
|
-
/** register a url door's endpoint (providers/registry add, the user file) — the row the walk then keys */
|
|
464
|
-
wizardRegister?(id: string, url: string, protocol: "openai" | "anthropic"): { ok: boolean; error?: string };
|
|
465
|
-
/** store a pasted key (credentials file via auth.ts, never the transcript) and refresh the registry */
|
|
466
|
-
wizardStoreKey?(provider: string, secret: string): { ok: boolean; error?: string };
|
|
467
|
-
/** the models the registry can name for a provider — /models' own source, reused here */
|
|
468
|
-
wizardModels?(provider: string): Promise<{ id: string; note?: string }[]>;
|
|
469
|
-
/** the model step's activate answer: pin the checked rows as the provider's active list
|
|
470
|
-
* (registry setModels — spec.models), empty = un-pin; makeDefault also becomes the default */
|
|
471
|
-
wizardActivateModels?(provider: string, models: readonly string[], makeDefault?: string): { ok: boolean; error?: string; models?: string[] };
|
|
472
|
-
/** the one test call + make-default (registry probe + setDefault, /setup's finish) */
|
|
473
|
-
wizardTest?(provider: string, model: string): Promise<{ ok: boolean; detail: string }>;
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
/** pure reducer contract (model.ts): (state, event, now) → same state object, mutated in place */
|
|
477
|
-
export type ApplyEvent = (s: SextantState, ev: RunEvent, now: number) => void;
|
|
478
|
-
|
|
479
|
-
/** what a headless dump may inject (frame.ts FrameDeps is the concrete shape): the layout function,
|
|
480
|
-
* per-panel painters and the layout options */
|
|
481
|
-
export type PanelPainter = (scr: ScreenLike, rect: Rect, s: SextantState, theme: Theme, now: number) => void;
|
|
482
|
-
export interface DumpFrameDeps {
|
|
483
|
-
layout?: (w: number, h: number, opts: LayoutOptions) => Layout;
|
|
484
|
-
painters?: Partial<Record<"frame" | "files" | "code" | "messages" | "plan" | "usage" | "pet", PanelPainter>>;
|
|
485
|
-
layoutOpts?: LayoutOptions;
|
|
486
|
-
}
|
|
487
|
-
/** headless frame dump (frame.ts): deterministic at a fixed clock — the golden-test seam */
|
|
488
|
-
export type DumpFrame = (s: SextantState, cols: number, rows: number, now: number, theme: Theme, deps?: DumpFrameDeps) => string;
|
|
489
|
-
|
|
490
|
-
export const SEXTANT_MIN_COLS = 100;
|
|
491
|
-
export const SEXTANT_MIN_ROWS = 30;
|
|
492
|
-
/** the four spinner glyphs (SPIN in app.js) */
|
|
493
|
-
export const SPIN: readonly string[] = ["◇", "◈", "◆", "◈"];
|