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/core/session-ops.ts
DELETED
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
/** Session management ops (aion port #84, brought over 2026-09-07): resolve · rename · fork · delete · search over the
|
|
2
|
-
* existing SessionStore JSONL tree. The headless `rovecode sessions rename|delete|fork|search` verbs (cli/sessions-cmd.ts),
|
|
3
|
-
* `rovecode trace` / `--resume` (cli/session-arg.ts), `rovecode export` and the TUI /resume all call exactly these
|
|
4
|
-
* functions, so there is ONE id rule, ONE matcher, ONE meta writer, ONE delete path and ONE search — the /resume
|
|
5
|
-
* matching rule used to live three times in this repository (tui/app.ts, tui/session-cmd.ts, cli/export.ts):
|
|
6
|
-
* - ids are validated FIRST (core/session-id.ts: a plain directory name, or a one-line refusal), then resolved
|
|
7
|
-
* through `matchSessions(listSessions(root), ref)` over readdir NAMES only — an unknown id is "no session",
|
|
8
|
-
* answered before any write or mkdir (the SessionStore is constructed only AFTER resolution);
|
|
9
|
-
* - meta writes go through `SessionStore.patchMeta` (core/session.ts), which forces `id` = directory name; a title is
|
|
10
|
-
* one-lined by `oneLineTitle` (session-text.ts) before it is written AND by listSessions when it is read, so a planted
|
|
11
|
-
* meta.json title never reaches a table row, `--json` row, picker label or search hit raw;
|
|
12
|
-
* - delete removes `<sessions>/<id>` and the session's checkpoints shadow dir, the latter from the ONE helper
|
|
13
|
-
* `checkpointShadowDir` (coding/checkpoints.ts) — never a path built from the raw argument;
|
|
14
|
-
* - fork copies entries.jsonl + meta.json + attachments/ verbatim into a fresh uuid dir. The attachments copy is
|
|
15
|
-
* BOUNDED (FORK_MAX_ATTACHMENT_BYTES, 256 MB): a session whose sidecars exceed it is refused with the size, rather
|
|
16
|
-
* than silently doubling a large directory — the copy is measured with one stat per file before anything is written;
|
|
17
|
-
* - search = the RecallIndex over the same root (memory/recall.ts: implicit AND, exact-before-partial, neutralised
|
|
18
|
-
* previews; NO excludeSession — the live session is a candidate) ∪ case-insensitive title-substring hits.
|
|
19
|
-
* Pattern sources (no code copied): opencode (MIT) packages/opencode/src/session/session.ts @ ebece6e — `getForkedTitle`
|
|
20
|
-
* :161-169 (the "(fork #N)" suffix rule = forkTitle below), the title `like` search :561, `remove` :606-627, `fork`
|
|
21
|
-
* :691-732 (copy-up-to-message; here the fork is a verbatim tree copy — branches, chain and leaf survive — and
|
|
22
|
-
* "fork at a turn" is fork then /rewind), `setTitle` :753-755; `cli/cmd/session.ts` :51-68 (delete), :70-147 (list and
|
|
23
|
-
* its json shape). Codex (Apache-2.0, pattern only) `codex-rs/tui/src/session_archive_commands.rs:41-45`
|
|
24
|
-
* `DeleteConfirmation { Prompt, Skip }` → `--yes`. hermes-agent's recall (MIT) is the #17 port this reuses read-only. */
|
|
25
|
-
|
|
26
|
-
import { randomUUID } from "node:crypto";
|
|
27
|
-
import { copyFileSync, cpSync, existsSync, mkdirSync, readdirSync, rmSync, statSync } from "node:fs";
|
|
28
|
-
import { join } from "node:path";
|
|
29
|
-
import { checkpointShadowDir } from "../coding/checkpoints.ts";
|
|
30
|
-
import { RecallIndex } from "../memory/recall.ts";
|
|
31
|
-
import { describeBadSessionId } from "./session-id.ts";
|
|
32
|
-
import { ATTACHMENTS_DIR } from "./session-images.ts";
|
|
33
|
-
import { listSessions, SessionStore, type SessionSummary } from "./session.ts";
|
|
34
|
-
|
|
35
|
-
/** `<cwd>/.rovecode/sessions` — the one sessions root for `cwd` (the same join cli/main.ts and tui/app.ts use) */
|
|
36
|
-
export function sessionsRoot(cwd: string): string {
|
|
37
|
-
return join(cwd, ".rovecode", "sessions");
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/** The ONE /resume matching rule: an exact id wins outright; otherwise every session whose id starts with `ref` —
|
|
41
|
-
* the CALLER decides what to do with 0 or several matches (resolving an ambiguous prefix silently to the first hit
|
|
42
|
-
* resumed the wrong session). */
|
|
43
|
-
export function matchSessions(known: readonly SessionSummary[], ref: string): SessionSummary[] {
|
|
44
|
-
const exact = known.find((s) => s.id === ref);
|
|
45
|
-
return exact ? [exact] : known.filter((s) => s.id.startsWith(ref));
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export type ResolvedSession = { ok: true; id: string; summary: SessionSummary } | { ok: false; error: string };
|
|
49
|
-
|
|
50
|
-
/** the one-line ambiguity message: `"<ref>" matches N sessions: a, b, c, d, … — be more specific` */
|
|
51
|
-
export function ambiguityMessage(ref: string, matches: readonly SessionSummary[]): string {
|
|
52
|
-
const named = matches.slice(0, 4).map((s) => s.id.slice(0, 8)).join(", ");
|
|
53
|
-
return `"${ref}" matches ${matches.length} sessions: ${named}${matches.length > 4 ? ", …" : ""} — be more specific`;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/** Validity (session-id.ts) then the /resume rule over readdir names ONLY (matchSessions, hollow directories included
|
|
57
|
-
* so an exact id still opens a never-written session): an exact id wins, a unique prefix resolves, an ambiguous prefix
|
|
58
|
-
* is refused naming ≤ 4 candidates, anything else — an unknown id, `../x`, an absolute path, "" — is refused with the
|
|
59
|
-
* reason. Reads only; never creates anything. */
|
|
60
|
-
export function resolveSession(root: string, ref: string): ResolvedSession {
|
|
61
|
-
const want = ref.trim();
|
|
62
|
-
if (want === "") return { ok: false, error: "a session id or prefix is required" };
|
|
63
|
-
const bad = describeBadSessionId(want);
|
|
64
|
-
if (bad !== undefined) return { ok: false, error: bad };
|
|
65
|
-
const matches = matchSessions(listSessions(root, { includeHollow: true }), want);
|
|
66
|
-
if (matches.length === 1) return { ok: true, id: matches[0]!.id, summary: matches[0]! };
|
|
67
|
-
if (matches.length > 1) return { ok: false, error: ambiguityMessage(want, matches) };
|
|
68
|
-
return { ok: false, error: `no session matching "${want}"` };
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/** The title normaliser lives beside the scanner (core/session-text.ts — listSessions applies it on READ as well); re-exported
|
|
72
|
-
* here so the two rename paths and their tests import ONE spelling. */
|
|
73
|
-
export { oneLineTitle, TITLE_MAX_CHARS } from "./session-text.ts";
|
|
74
|
-
|
|
75
|
-
/** opencode getForkedTitle (session.ts:161-169): "X" → "X (fork #1)" → "X (fork #2)" → … */
|
|
76
|
-
export function forkTitle(title: string): string {
|
|
77
|
-
const m = /^(.+) \(fork #(\d+)\)$/.exec(title);
|
|
78
|
-
return m ? `${m[1]} (fork #${Number(m[2]) + 1})` : `${title} (fork #1)`;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/** rename: the store is constructed AFTER resolution (its constructor touches nothing) and the title lands through
|
|
82
|
-
* patchMeta — `leaf`, unknown keys and the entries file are untouched. */
|
|
83
|
-
export function renameSession(root: string, id: string, title: string): void {
|
|
84
|
-
new SessionStore(root, id).patchMeta({ title });
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
export interface ForkResult { id: string; from: string; title: string }
|
|
88
|
-
|
|
89
|
-
/** the most a fork copies from `attachments/` before refusing (a 200 MB session must not double silently) */
|
|
90
|
-
export const FORK_MAX_ATTACHMENT_BYTES = 256 * 1024 * 1024;
|
|
91
|
-
|
|
92
|
-
/** bytes under a directory, one stat per file, 0 when absent */
|
|
93
|
-
export function dirBytes(dir: string): number {
|
|
94
|
-
let total = 0;
|
|
95
|
-
let names: string[];
|
|
96
|
-
try { names = readdirSync(dir); } catch { return 0; }
|
|
97
|
-
for (const n of names) {
|
|
98
|
-
const p = join(dir, n);
|
|
99
|
-
try { const st = statSync(p); total += st.isDirectory() ? dirBytes(p) : st.size; } catch { /* vanished mid-walk */ }
|
|
100
|
-
}
|
|
101
|
-
return total;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
const mb = (bytes: number): string => `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
105
|
-
|
|
106
|
-
/** fork = a verbatim copy of entries.jsonl + meta.json + attachments/ (an ALLOW-LIST: todos.json, a legacy memory/ and
|
|
107
|
-
* the checkpoints shadow repo stay with the source) into a fresh uuid dir, then ONE patchMeta — createdAt = now,
|
|
108
|
-
* title = forkTitle(title ?? preview), forkedFrom = source. The chain never hashes the session id, so the fork's
|
|
109
|
-
* reload() finds what the source's finds (`[]` for a clean one), every hash is identical, `leaf` is kept, and the copied
|
|
110
|
-
* sidecars hydrate under the fork's OWN attachments/ (session-images.ts resolves the session-relative form against the
|
|
111
|
-
* new dir). Never `append()`: re-appending path() would lose branches, re-chain, and drop hydrated absolute image paths.
|
|
112
|
-
* Throws (nothing written) when the attachments exceed `maxBytes`. */
|
|
113
|
-
export function forkSession(root: string, source: SessionSummary, opts: { maxBytes?: number } = {}): ForkResult {
|
|
114
|
-
const src = join(root, source.id);
|
|
115
|
-
const attachments = join(src, ATTACHMENTS_DIR);
|
|
116
|
-
const max = opts.maxBytes ?? FORK_MAX_ATTACHMENT_BYTES;
|
|
117
|
-
const size = existsSync(attachments) ? dirBytes(attachments) : 0;
|
|
118
|
-
if (size > max) throw new Error(`session ${source.id.slice(0, 8)} carries ${mb(size)} of attachments, over the fork limit of ${mb(max)} — nothing copied; \`rovecode export ${source.id.slice(0, 8)}\` writes the transcript without them`);
|
|
119
|
-
const id = randomUUID();
|
|
120
|
-
const dst = join(root, id);
|
|
121
|
-
mkdirSync(dst, { recursive: true });
|
|
122
|
-
for (const f of ["entries.jsonl", "meta.json"]) if (existsSync(join(src, f))) copyFileSync(join(src, f), join(dst, f));
|
|
123
|
-
// node fs.cpSync: Windows-safe (no `cp -r`), the core/orchestrator.ts copy-isolation precedent
|
|
124
|
-
if (existsSync(attachments)) cpSync(attachments, join(dst, ATTACHMENTS_DIR), { recursive: true });
|
|
125
|
-
const base = source.title ?? source.preview;
|
|
126
|
-
const title = forkTitle(base === "" ? "(empty session)" : base);
|
|
127
|
-
new SessionStore(root, id).patchMeta({ createdAt: Date.now(), title, forkedFrom: source.id }); // forces id = the new dir
|
|
128
|
-
return { id, from: source.id, title };
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
export interface DeleteResult { removed: string[] }
|
|
132
|
-
|
|
133
|
-
/** delete = exactly `<sessions>/<id>` (entries, meta, attachments, todos.json, a legacy memory/) plus the session's
|
|
134
|
-
* checkpoints shadow dir `<cwd>/.rovecode/checkpoints/<sanitised id>` from checkpointShadowDir (one helper, no second
|
|
135
|
-
* spelling). `id` is a RESOLVED directory name, never the raw argument. rmSync(force) clears read-only files (a shadow
|
|
136
|
-
* repo's objects on Windows). Returns the paths that existed and were removed. */
|
|
137
|
-
export function deleteSession(cwd: string, root: string, id: string): DeleteResult {
|
|
138
|
-
const removed: string[] = [];
|
|
139
|
-
for (const dir of [join(root, id), checkpointShadowDir(cwd, id)]) {
|
|
140
|
-
if (!existsSync(dir)) continue;
|
|
141
|
-
rmSync(dir, { recursive: true, force: true });
|
|
142
|
-
removed.push(dir);
|
|
143
|
-
}
|
|
144
|
-
return { removed };
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
export interface SearchRow {
|
|
148
|
-
sessionId: string;
|
|
149
|
-
/** the session's title when one is set (both tiers) */
|
|
150
|
-
title?: string;
|
|
151
|
-
/** "" for a title hit; the matching entry's id for a recall hit */
|
|
152
|
-
entryId: string;
|
|
153
|
-
timestamp: number;
|
|
154
|
-
/** title hit: the session's first prompt; recall hit: the neutralised snippet around the match */
|
|
155
|
-
preview: string;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/** search = title-substring hits (case-insensitive, `entryId: ""`, listed first) ∪ `RecallIndex.search(query, limit)` over
|
|
159
|
-
* the same root (#17 semantics; NO excludeSession, so the live session is a candidate), de-duplicated on (session, entry),
|
|
160
|
-
* capped at `limit`. The index is rebuilt in memory per call (nothing persisted). Empty query → []. */
|
|
161
|
-
export function searchSessions(root: string, query: string, limit = 10): SearchRow[] {
|
|
162
|
-
const q = query.trim();
|
|
163
|
-
if (q === "") return [];
|
|
164
|
-
const all = listSessions(root);
|
|
165
|
-
const titles = new Map<string, string>();
|
|
166
|
-
for (const s of all) if (s.title !== undefined) titles.set(s.id, s.title);
|
|
167
|
-
const needle = q.toLowerCase();
|
|
168
|
-
const rows: SearchRow[] = [];
|
|
169
|
-
for (const s of all) {
|
|
170
|
-
if (s.title !== undefined && s.title.toLowerCase().includes(needle)) rows.push({ sessionId: s.id, title: s.title, entryId: "", timestamp: s.updatedAt, preview: s.preview });
|
|
171
|
-
}
|
|
172
|
-
for (const h of new RecallIndex(root).search(q, limit)) {
|
|
173
|
-
const title = titles.get(h.sessionId);
|
|
174
|
-
rows.push({ sessionId: h.sessionId, ...(title !== undefined ? { title } : {}), entryId: h.entryId, timestamp: h.timestamp, preview: h.preview });
|
|
175
|
-
}
|
|
176
|
-
const seen = new Set<string>();
|
|
177
|
-
return rows.filter((r) => {
|
|
178
|
-
const key = `${r.sessionId.length}:${r.sessionId}:${r.entryId}`;
|
|
179
|
-
if (seen.has(key)) return false;
|
|
180
|
-
seen.add(key);
|
|
181
|
-
return true;
|
|
182
|
-
}).slice(0, limit);
|
|
183
|
-
}
|
package/src/core/session-text.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/** One-line text normalisers for the session surfaces (aion ports #59 previews and #84 titles, brought over
|
|
2
|
-
* 2026-09-07). Both run on the way OUT of the store — listSessions (core/session.ts, the one scanner) applies them to
|
|
3
|
-
* what it READS — so no consumer (the `rovecode sessions` table and `--json` rows, `GET /sessions`, the TUI /sessions
|
|
4
|
-
* picker, `sessions search` rows) ever sees a raw multi-line or control-laden string from a repo-controlled meta.json
|
|
5
|
-
* or entries.jsonl: a planted title such as "line1\nremoved D:/x\n\u001b[31m…" can neither forge extra table rows nor
|
|
6
|
-
* reach the terminal as an escape sequence, and an empty one is "no title" (the key is absent). The rename path
|
|
7
|
-
* (session-ops.ts) applies the same oneLineTitle BEFORE it writes, so a title rovecode wrote is already in its read form. */
|
|
8
|
-
|
|
9
|
-
import type { Message, TextPart } from "./types.ts";
|
|
10
|
-
|
|
11
|
-
/** Single-line preview of a message's text parts; ≤80 chars, "" when no text. */
|
|
12
|
-
export function previewText(m: Message): string {
|
|
13
|
-
const joined = m.parts.filter((p): p is TextPart => p.kind === "text").map((p) => p.text).join(" ");
|
|
14
|
-
const one = joined.replace(/\s+/g, " ").trim();
|
|
15
|
-
return one.length > 80 ? one.slice(0, 79) + "…" : one;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export const TITLE_MAX_CHARS = 120;
|
|
19
|
-
|
|
20
|
-
/** A title is ONE line: whitespace runs and control characters (C0, DEL and the C1 range — every ANSI escape, 7- or 8-bit,
|
|
21
|
-
* starts with one) collapse to a single space, trimmed, capped at TITLE_MAX_CHARS code points with an ellipsis marking
|
|
22
|
-
* the cut (an astral character — an emoji — is never split into a lone surrogate, so the result is always well-formed
|
|
23
|
-
* for JSON and the terminal); empty → undefined (the write path makes that a usage error, the read path omits the key). */
|
|
24
|
-
export function oneLineTitle(raw: string): string | undefined {
|
|
25
|
-
const one = raw.replace(/[\s\u0000-\u001f\u007f-\u009f]+/g, " ").trim();
|
|
26
|
-
if (one === "") return undefined;
|
|
27
|
-
const cps = Array.from(one);
|
|
28
|
-
return cps.length > TITLE_MAX_CHARS ? cps.slice(0, TITLE_MAX_CHARS - 1).join("") + "…" : one;
|
|
29
|
-
}
|