rovecode 0.3.2 → 0.4.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +512 -0
- package/README.md +33 -45
- package/bin/rovecode.js +24 -0
- package/dist/cli/app-dybnr56b.js +2 -0
- package/dist/cli/ask-user-p8hq4xgj.js +2 -0
- package/dist/cli/auth-login-ewpgw5sm.js +2 -0
- package/dist/cli/auth-m8p9grty.js +2 -0
- package/dist/cli/bench-xv3ypwev.js +9 -0
- package/dist/cli/catalog-737wb2s0.js +2 -0
- package/dist/cli/cli-arhg40m0.js +2 -0
- package/dist/cli/client-cf2pxx8q.js +2 -0
- package/dist/cli/commands-3p7e4xxs.js +2 -0
- package/dist/cli/connect-3q93d7cb.js +2 -0
- package/dist/cli/context-cmd-eqxmxhzq.js +2 -0
- package/dist/cli/context-report-hbw9zfes.js +2 -0
- package/dist/cli/count-remote-mby98cd0.js +2 -0
- package/dist/cli/design-122y0axd.js +2 -0
- package/dist/cli/dispatch-b4egzvvh.js +2 -0
- package/dist/cli/doctor-x4jkv72e.js +3 -0
- package/dist/cli/executor-ftvg6tsy.js +2 -0
- package/dist/cli/export-pdgdhkch.js +2 -0
- package/dist/cli/files-cez9a96p.js +2 -0
- package/dist/cli/gauntlet-r3xxaszc.js +2 -0
- package/dist/cli/gauntlet-runner-r515m7kk.js +10 -0
- package/dist/cli/gauntlet-wave3-bnkjk2v2.js +5 -0
- package/dist/cli/gauntlet-wave4-acs9s60q.js +14 -0
- package/dist/cli/hashline-ewg5hbe3.js +2 -0
- package/dist/cli/http-n0kehsk8.js +5 -0
- package/dist/cli/index-z5qt1s76.js +2 -0
- package/dist/cli/install-80mp63kx.js +2 -0
- package/dist/cli/loop-12twjcat.js +2 -0
- package/dist/cli/main-01pv9206.js +4 -0
- package/dist/cli/main-0jys2ccn.js +3 -0
- package/dist/cli/main-1ztz6fkj.js +10 -0
- package/dist/cli/main-23q7cmww.js +9 -0
- package/dist/cli/main-2rzbexn2.js +3 -0
- package/dist/cli/main-2wyax8k9.js +9 -0
- package/dist/cli/main-2yeveeve.js +6 -0
- package/dist/cli/main-2z3dek0b.js +3 -0
- package/dist/cli/main-2zgsknth.js +3 -0
- package/dist/cli/main-45ejth3a.js +4 -0
- package/dist/cli/main-45rn3trk.js +22 -0
- package/dist/cli/main-4p4e2w7x.js +4 -0
- package/dist/cli/main-4y0tnfpa.js +16 -0
- package/dist/cli/main-5py0rkmc.js +4 -0
- package/dist/cli/main-6dtqmbt6.js +7 -0
- package/dist/cli/main-6h9x282m.js +4 -0
- package/dist/cli/main-6vjeds42.js +3 -0
- package/dist/cli/main-78gq4bt9.js +6 -0
- package/dist/cli/main-7jd5vh3x.js +4 -0
- package/dist/cli/main-7kt6r53y.js +4 -0
- package/dist/cli/main-8c1tbazx.js +58 -0
- package/dist/cli/main-9a9rnh47.js +19 -0
- package/dist/cli/main-9ht36z12.js +3 -0
- package/dist/cli/main-a2yfvcy9.js +7 -0
- package/dist/cli/main-a3f51n0x.js +5 -0
- package/dist/cli/main-b8zq261k.js +3 -0
- package/dist/cli/main-bxtvnf6d.js +13 -0
- package/dist/cli/main-edxc3yzt.js +4 -0
- package/dist/cli/main-evgz4mp5.js +21 -0
- package/dist/cli/main-f33fc5je.js +9 -0
- package/dist/cli/main-fvnpq46y.js +12 -0
- package/dist/cli/main-gbbty4d4.js +3 -0
- package/dist/cli/main-gth53dnt.js +25 -0
- package/dist/cli/main-hqbz10aw.js +9 -0
- package/dist/cli/main-hrrvcfan.js +38 -0
- package/dist/cli/main-hzwtsb2m.js +5 -0
- package/dist/cli/main-j7ttv0sd.js +34 -0
- package/dist/cli/main-jak598k9.js +5 -0
- package/dist/cli/main-kba6zeyd.js +6 -0
- package/dist/cli/main-kwwsz6rq.js +3 -0
- package/dist/cli/main-m8vm17zq.js +3 -0
- package/dist/cli/main-mg4f96e1.js +3 -0
- package/dist/cli/main-mg9b20ac.js +18 -0
- package/dist/cli/main-mgb9ccnx.js +3 -0
- package/dist/cli/main-mjt2p7aj.js +3 -0
- package/dist/cli/main-n6qrdbmy.js +3 -0
- package/dist/cli/main-na7wse0x.js +5 -0
- package/dist/cli/main-nqveez48.js +4 -0
- package/dist/cli/main-ntqef02r.js +10 -0
- package/dist/cli/main-nvc3yjay.js +136 -0
- package/dist/cli/main-p0cfn6nr.js +16 -0
- package/dist/cli/main-qj2djy17.js +19 -0
- package/dist/cli/main-qsevpgsv.js +3 -0
- package/dist/cli/main-qvarybsp.js +3 -0
- package/dist/cli/main-rebtt91r.js +5 -0
- package/dist/cli/main-rpg7h8mb.js +3 -0
- package/dist/cli/main-rsy72qmw.js +15 -0
- package/dist/cli/main-rvetps99.js +18 -0
- package/dist/cli/main-s4bb0jav.js +3 -0
- package/dist/cli/main-s9v8k74e.js +3 -0
- package/dist/cli/main-tjvwmscs.js +3 -0
- package/dist/cli/main-tkgarpjj.js +4 -0
- package/dist/cli/main-v8y60bb2.js +3 -0
- package/dist/cli/main-vhrrq337.js +3 -0
- package/dist/cli/main-vp2dfb7s.js +4 -0
- package/dist/cli/main-vqbr22sz.js +8 -0
- package/dist/cli/main-vxnwe5xx.js +18 -0
- package/dist/cli/main-wgph00xf.js +5 -0
- package/dist/cli/main-wk2csfnj.js +5 -0
- package/dist/cli/main-wm997zjx.js +3 -0
- package/dist/cli/main-wpkyraxh.js +3 -0
- package/dist/cli/main-wqt32p5x.js +4 -0
- package/dist/cli/main-x9ct6y1a.js +3 -0
- package/dist/cli/main-xfekqh9m.js +7 -0
- package/dist/cli/main-xt9zc3n6.js +7 -0
- package/dist/cli/main-xx2z3zh5.js +4 -0
- package/dist/cli/main-y5c82rxr.js +3 -0
- package/dist/cli/main-yrjt2sqt.js +14 -0
- package/dist/cli/main-ys6zj3yr.js +3 -0
- package/dist/cli/main-ywbxshqc.js +8 -0
- package/dist/cli/main-z13755t8.js +25 -0
- package/dist/cli/main-zc7pyrbj.js +4 -0
- package/dist/cli/main.js +279 -0
- package/dist/cli/market-cmd-bm5xvn9f.js +5 -0
- package/dist/cli/mcp-login-bthtfpt7.js +2 -0
- package/dist/cli/mcp-market-cmd-mbeshfyd.js +2 -0
- package/dist/cli/notify-54v5z9dz.js +2 -0
- package/dist/cli/oauth-g5gme95c.js +2 -0
- package/dist/cli/output-satndjap.js +16 -0
- package/dist/cli/profiles-sfhpbq3m.js +2 -0
- package/dist/cli/provider-config-hv3xtdt4.js +2 -0
- package/dist/cli/provider-kwzq6g84.js +2 -0
- package/dist/cli/registry-fh0hdnyn.js +2 -0
- package/dist/cli/registry-y1y8e94r.js +2 -0
- package/dist/cli/repl-t4z03mqq.js +11 -0
- package/dist/cli/resume-fqt4chg8.js +2 -0
- package/dist/cli/run-flags-rysbag9t.js +2 -0
- package/dist/cli/runtime-j19fjbsa.js +2 -0
- package/dist/cli/sandbox-config-g4qxd7y5.js +2 -0
- package/dist/cli/server-r0b6bksk.js +5 -0
- package/dist/cli/session-arg-txmn5g4x.js +2 -0
- package/dist/cli/session-ed250d9j.js +2 -0
- package/dist/cli/sessions-cmd-adw7svfn.js +7 -0
- package/dist/cli/settings-y9rzcqx8.js +2 -0
- package/dist/cli/setup-jmbr11j0.js +2 -0
- package/dist/cli/sextant-smoke-tcth0vea.js +5 -0
- package/dist/cli/skills-cmd-zbdy99v6.js +2 -0
- package/dist/cli/smoke-1bg937kx.js +8 -0
- package/dist/cli/start-chat-p01cdks3.js +12 -0
- package/dist/cli/stream-4wmyaypz.js +2 -0
- package/dist/cli/task-eg4s093s.js +2 -0
- package/dist/cli/tasks-12v9rr9k.js +2 -0
- package/dist/cli/thinking-a5ngvqyh.js +2 -0
- package/dist/cli/todo-1wxpcecx.js +2 -0
- package/dist/cli/tools-2ftsya7w.js +2 -0
- package/dist/cli/tools-x1tj4fxm.js +2 -0
- package/dist/cli/trust-cmd-hccxehzb.js +2 -0
- package/dist/cli/update-check-ygt3vd7m.js +2 -0
- package/dist/cli/update-cmd-v23qhr8c.js +2 -0
- package/dist/cli/voice-g1gtck92.js +2 -0
- package/dist/cli/webfetch-0nnrjgb5.js +2 -0
- package/dist/cli/websearch-f0vr2p7d.js +2 -0
- package/dist/cli/workspace-9rq1w4ta.js +2 -0
- package/dist/lib/index.js +62 -0
- package/dist/lib/models-index.json +1 -0
- package/dist/lib/plugins.js +6 -0
- package/dist/lib/providers.js +17 -0
- package/dist/lib/public-api.js +20 -0
- package/dist/rovecode.exe +4 -0
- package/package.json +38 -11
- 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
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{readFileSync as de,writeFileSync as xe,mkdirSync as ge,chmodSync as _t,cpSync as ht,existsSync as S,rmSync as _e}from"fs";import{join as C}from"path";import{homedir as ft}from"os";var wt=384,tt=()=>(process.platform==="win32"?process.env.USERPROFILE:process.env.HOME)||ft();function z(){let e=process.env.ROVECODE_HOME,t=e??C(tt(),".rovecode");return vt(t,{explicit:e!==void 0}),t}var j=!1;function vt(e,t={}){if(j&&t.legacyDir===void 0)return;if(t.legacyDir===void 0)j=!0;try{if(S(e))return;let i=t.legacyDir??C(tt(),".cumulus");if(t.explicit===!0)return;if(e===i||!S(i))return;ht(i,e,{recursive:!0}),(t.note??((u)=>console.error(u)))(`migrated ${i} \u2192 ${e} (the config directory was renamed; the old one is untouched)`);let o=C(e,"credentials.json");if(S(o)&&process.platform!=="win32")_t(o,wt)}catch{}}import{existsSync as Nt,readFileSync as Tt,readdirSync as Gt,statSync as St}from"fs";import{join as L,resolve as at}from"path";import{createHash as bt}from"crypto";import{mkdirSync as kt,readFileSync as et,readdirSync as qt,statSync as Bt,writeFileSync as Mt}from"fs";import{dirname as At,join as O,relative as It,resolve as Et}from"path";var zt="plugins.json",Q=(e)=>O(e,zt),Qt=new Set(["node_modules",".git"]);function g(e){let t={disabled:[],trusted:{}},i;try{i=JSON.parse(et(Q(e),"utf8"))}catch{return t}if(typeof i!=="object"||i===null)return t;let o=i;if(Array.isArray(o.disabled))t.disabled=o.disabled.filter((u)=>typeof u==="string");if(typeof o.trusted==="object"&&o.trusted!==null&&!Array.isArray(o.trusted)){for(let[u,c]of Object.entries(o.trusted))if(typeof c==="string")t.trusted[u]=c}return t}function B(e,t){let i=Q(e);return kt(At(i),{recursive:!0}),Mt(i,JSON.stringify({disabled:[...t.disabled].sort(),trusted:t.trusted},null,2)+`
|
|
3
|
+
`),i}function y(e){let t=[],i=(o)=>{let u;try{u=qt(o,{withFileTypes:!0})}catch{return}for(let c of u){if(Qt.has(c.name))continue;let r=O(o,c.name);if(c.isDirectory())i(r);else if(c.isFile())t.push(It(e,r).replace(/\\/g,"/"))}};return i(e),t.sort()}function K(e){let t=bt("sha256");for(let i of y(e)){t.update(i),t.update("\x00");try{t.update(et(O(e,i)))}catch{}t.update("\x00")}return t.digest("hex")}var M=(e)=>Et(e).replace(/\\/g,"/");function it(e,t,i){return e.trusted[M(t)]===i}function b(e){try{return Bt(e).isDirectory()}catch{return!1}}var Kt=/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g,Lt=/<[^<>]*[a-z][^<>]*>/g;function Pt(e,t,i){return e.replace(Kt,(o,u)=>{let c=t[u];if(c===void 0)return i.push(u),"";return c})}function x(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}function ot(e,t,i,o,u=process.env,c={}){if(!x(t)){o.push(`${i}: server "${e}" is not an object; skipped`);return}let r=[],s=(v)=>Pt(v,u,r),m=typeof t.command==="string"&&t.command.length>0?t.command:void 0,n=typeof t.url==="string"&&t.url.length>0?s(t.url):void 0,a=typeof t.transport==="string"?t.transport:typeof t.type==="string"?t.type:void 0,l;if(a==="stdio")l="stdio";else if(a==="http"||a==="streamable-http"||a==="streamable_http")l="http";else if(a==="sse")l="sse";else if(a!==void 0){o.push(`${i}: server "${e}" has unknown transport "${a}"; skipped`);return}else l=n!==void 0?"http":m!==void 0?"stdio":void 0;if(l===void 0){o.push(`${i}: server "${e}" has neither command nor url; skipped`);return}if(l==="stdio"&&m===void 0){o.push(`${i}: stdio server "${e}" is missing command; skipped`);return}if(l==="http"||l==="sse"){if(n===void 0){o.push(`${i}: ${l} server "${e}" is missing url; skipped`);return}try{new URL(n)}catch{o.push(`${i}: ${l} server "${e}" has invalid url "${n}"; skipped`);return}}let p;if(t.args!==void 0)if(Array.isArray(t.args)&&t.args.every((v)=>typeof v==="string"))p=t.args.map(s);else{o.push(`${i}: server "${e}" has non-string args; skipped`);return}let d;if(x(t.env)){d={};for(let[v,Y]of Object.entries(t.env))if(typeof Y==="string")d[v]=s(Y)}let f;if(x(t.headers)){f={};for(let[v,Y]of Object.entries(t.headers))if(typeof Y==="string")f[v]=s(Y)}let w;if(x(t.oauth)){if(w={},typeof t.oauth.clientId==="string"&&t.oauth.clientId.length>0)w.clientId=t.oauth.clientId;if(typeof t.oauth.scope==="string"&&t.oauth.scope.length>0)w.scope=t.oauth.scope;if(Object.keys(w).length===0)w=void 0}if(r.length>0){o.push(`${i}: server "${e}" needs ${[...new Set(r)].map((v)=>`\${${v}}`).join(", ")} set in the environment; skipped`);return}let P=Yt({args:p,env:d,headers:f,url:n});if(P.length>0&&c.allowPlaceholders!==!0){o.push(`${i}: server "${e}" still has ${P.join(", ")} to fill in; skipped (edit that line and it will connect)`);return}let q={name:e,transport:l};if(m!==void 0)q.command=m;if(p!==void 0)q.args=p;if(d!==void 0)q.env=d;if(n!==void 0)q.url=n;if(f!==void 0)q.headers=f;if(w!==void 0)q.oauth=w;if(typeof t.enabled==="boolean")q.enabled=t.enabled;return q}function Yt(e){return[...new Set([...e.args??[],...Object.values(e.env??{}),...Object.values(e.headers??{}),...e.url!==void 0?[e.url]:[]].flatMap((t)=>[...t.matchAll(Lt)].map((i)=>i[0])))]}var A=1,I="plugin.json",yt=200,ut=/^[a-z0-9][a-z0-9-]{0,63}$/,Vt=/\.(?:[cm]?[jt]s)$/i;function Dt(e){if(e.length===0||e.startsWith("/")||e.startsWith("\\")||/^[A-Za-z]:/.test(e))return!1;return!e.split(/[\\/]/).some((t)=>t==="..")}function V(e,t,i){let o;try{o=JSON.parse(e)}catch(m){return i.push(`${t}: not valid JSON \u2014 ${m.message}`),null}if(!x(o))return i.push(`${t}: must be an object`),null;let u=o.api;if(u!==A){let m=u===void 0?"missing":typeof u==="string"?JSON.stringify(u):String(u);return i.push(`${t}: plugin API version ${m} is not supported (this rovecode speaks ${A}) \u2014 skipped`),null}let c=o.name;if(typeof c!=="string"||!ut.test(c))return i.push(`${t}: "name" must match ${ut} \u2014 skipped`),null;let r=typeof o.version==="string"&&o.version.trim()?o.version.trim().slice(0,40):null;if(r===null)return i.push(`${t}: "version" must be a non-empty string \u2014 skipped`),null;let s={name:c,version:r,description:"",api:A};if(o.description!==void 0)if(typeof o.description==="string")s.description=o.description.replace(/\s+/g," ").trim().slice(0,yt);else i.push(`${t}: "description" is not a string \u2014 ignored`);for(let m of["entry","commands","skills"]){let n=o[m];if(n===void 0)continue;if(typeof n!=="string"||!Dt(n)){i.push(`${t}: "${m}" must be a relative path inside the plugin \u2014 ignored`);continue}if(m==="entry"&&!Vt.test(n)){i.push(`${t}: "entry" must be a .ts or .js module \u2014 ignored`);continue}s[m]=n.replace(/\\/g,"/")}if(o.mcp!==void 0)if(x(o.mcp))s.mcp=o.mcp;else i.push(`${t}: "mcp" must be an object of servers keyed by name \u2014 ignored`);for(let m of Object.keys(o))if(!["name","version","description","api","entry","commands","skills","mcp"].includes(m))i.push(`${t}: unknown field "${m}" ignored`);return s}function D(e){let t=[];if(e.entry)t.push(`code: ${e.entry}`);if(e.commands)t.push(`commands: ${e.commands}/`);if(e.skills)t.push(`skills: ${e.skills}/`);if(e.mcp)t.push(`mcp: ${Object.keys(e.mcp).join(", ")||"(none)"}`);return t}function T(e,t){let i=L(t,"plugins"),o=L(e,".rovecode","plugins");return at(i)===at(o)?[["project",o]]:[["user",i],["project",o]]}function E(e,t={}){let i={plugins:[],warnings:[]};if(process.env.ROVECODE_NO_PLUGINS==="1")return i;let o=t.home??z(),u=t.state??g(o),c=new Map;for(let[r,s]of T(e,o)){if(!b(s))continue;let m;try{m=Gt(s).sort()}catch(n){i.warnings.push(`${s}: cannot list \u2014 ${n.message}`);continue}for(let n of m){let a=L(s,n);if(!b(a)||!Nt(L(a,I)))continue;let l=Ct(a,n,r,u),p=c.get(l.name);if(p)i.warnings.push(`${a}: plugin "${l.name}" shadows ${p.dir} (project over user)`);c.set(l.name,l);for(let d of l.problems)i.warnings.push(d)}}return i.plugins=[...c.values()].sort((r,s)=>r.name.localeCompare(s.name)),i}function Ct(e,t,i,o){let u=L(e,I),c=[],r=null;try{r=V(Tt(u,"utf8"),u,c)}catch(f){c.push(`${u}: cannot read \u2014 ${f.message}`)}let s=null;try{s=K(e)}catch{s=null}let m=r?.name??t;if(r&&r.name!==t)c.push(`${u}: name "${r.name}" differs from its folder "${t}" \u2014 the manifest name is the plugin's identity`);let n;if(r===null)n="broken";else if(o.disabled.includes(m))n="disabled";else if(i==="project"&&(s===null||!it(o,e,s)))n="untrusted";else n="active";let a=`plugin ${m}`,l=r?lt(e,r.commands,`${a}: commands`,c):null,p=r?lt(e,r.skills,`${a}: skills`,c):null,d=[];if(r?.mcp)for(let[f,w]of Object.entries(r.mcp)){let P=ot(f,w,u,c);if(P)d.push(P)}return{name:m,dir:e,scope:i,manifest:r,status:n,digest:s,problems:c,commandsDir:l,skillsDir:p,mcp:d}}function lt(e,t,i,o){if(!t)return null;let u=L(e,t);try{if(St(u).isDirectory())return u}catch{}return o.push(`${i} directory "${t}" does not exist \u2014 ignored`),null}import{existsSync as Ot}from"fs";import{join as Ft}from"path";import{pathToFileURL as Rt}from"url";var F=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});var Oe=Symbol("rovecode.hook.timeout");var rt=5000;function Ut(e=process.env){let t=Number(e.ROVECODE_PLUGIN_TIMEOUT_MS);return Number.isFinite(t)&&t>=1?Math.floor(t):rt}var nt=["read","write","execute","spawn","memory","network","custom"],ct=/^[a-z][a-z0-9_]{0,63}$/,R=Symbol("timed-out");async function pt(e,t){let i,o=new Promise((u)=>{i=setTimeout(()=>u(R),t)});try{return await Promise.race([e,o])}finally{if(i!==void 0)clearTimeout(i)}}var st=(e)=>e instanceof Error?e.message:String(e);async function U(e,t){let i=[],o=[];for(let u of e)o.push(await Xt(u,t,i));return{plugins:o,warnings:i}}async function Xt(e,t,i){let o={...e,tools:[],hooks:null};if(e.status!=="active"||e.manifest===null)return o;let u=e.manifest,c=`plugin ${e.name}`;if(!u.entry)return o;let r=Ft(e.dir,u.entry);if(!Ot(r))return i.push(`${c}: entry ${u.entry} does not exist \u2014 no tools or hooks loaded`),o;let s=t.timeoutMs??Ut(),m;try{m=await pt(import(Rt(r).href),s)}catch(a){return i.push(`${c}: ${u.entry} failed to load \u2014 ${st(a)}`),o}if(m===R)return i.push(`${c}: ${u.entry} load timed out after ${s}ms (top-level await?) \u2014 skipped`),o;let n=x(m)?m.default:void 0;if(!x(n))return i.push(`${c}: ${u.entry} must \`export default { api: ${A}, tools?, hooks? }\` \u2014 skipped`),o;if(n.api!==A)return i.push(`${c}: ${u.entry} declares api ${String(n.api)}; this rovecode speaks ${A} \u2014 skipped`),o;for(let a of Object.keys(n))if(!["api","tools","hooks"].includes(a))i.push(`${c}: ${u.entry} exports unknown member "${a}" \u2014 ignored`);if(n.tools!==void 0){let a;try{let p=n.tools;a=typeof p==="function"?await pt(Promise.resolve(p({cwd:t.cwd,home:t.home,pluginDir:e.dir})),s):p}catch(p){i.push(`${c}: tools() threw \u2014 ${st(p)}`),a=[]}if(a===R)i.push(`${c}: tools() timed out after ${s}ms \u2014 no tools loaded`),a=[];if(!Array.isArray(a))i.push(`${c}: "tools" must be an array (or a function returning one) \u2014 ignored`),a=[];let l=new Set;for(let p of a){let d=Wt(p,c,i);if(!d)continue;if(l.has(d.schema.name)){i.push(`${c}: tool "${d.schema.name}" declared twice \u2014 first kept`);continue}l.add(d.schema.name),o.tools.push(d)}}if(n.hooks!==void 0)if(!x(n.hooks))i.push(`${c}: "hooks" must be an object of hook functions \u2014 ignored`);else{let a={};for(let[l,p]of Object.entries(n.hooks)){if(!F.includes(l)){i.push(`${c}: unknown hook "${l}" ignored (known: ${F.join(", ")})`);continue}if(typeof p!=="function"){i.push(`${c}: hook "${l}" is not a function \u2014 ignored`);continue}a[l]=p}if(Object.keys(a).length)o.hooks=a}return o}function Wt(e,t,i){if(!x(e)||!x(e.schema))return i.push(`${t}: a tool without a schema was dropped`),null;let o=e.schema,u=o.name;if(typeof u!=="string"||!ct.test(u))return i.push(`${t}: tool name ${JSON.stringify(u)} must match ${ct} \u2014 dropped`),null;if(typeof o.description!=="string"||!o.description.trim())return i.push(`${t}: tool "${u}" needs a description \u2014 dropped`),null;if(!x(o.args))return i.push(`${t}: tool "${u}" needs a JSON-Schema "args" object \u2014 dropped`),null;if(!nt.includes(e.kind))return i.push(`${t}: tool "${u}" kind ${JSON.stringify(e.kind)} is not one of ${nt.join("|")} \u2014 dropped (the kind is its permission class)`),null;if(typeof e.execute!=="function")return i.push(`${t}: tool "${u}" has no execute() \u2014 dropped`),null;return e}import{cpSync as Zt,existsSync as N,lstatSync as Ht,mkdirSync as Jt,mkdtempSync as mt,readFileSync as $t,renameSync as jt,rmSync as G}from"fs";import{tmpdir as te}from"os";import{join as _,resolve as X,sep as ee}from"path";var ie=(e,t)=>`${e}#${t??""}`;var oe=/^(?:https?:\/\/|git@|ssh:\/\/|git:\/\/)|\.git$/i,dt=(e)=>oe.test(e)&&!N(e),ue=async(e,t)=>{let i=Bun.spawn(e,{cwd:t,stdout:"ignore",stderr:"pipe",stdin:"ignore"}),o=await new Response(i.stderr).text();return{code:await i.exited,stderr:o}};function h(e,t,i){return T(t,i).find(([o])=>o===e)?.[1]??_(i,"plugins")}function ae(e){try{return Ht(e).isSymbolicLink()}catch{return!0}}async function W(e,t){let i=e,o=null,u=t.copy??((c,r,s)=>Zt(c,r,{recursive:!0,filter:s}));try{if(dt(e)){let l=ie(e),p=t.cloneCache?.get(l);if(p!==void 0&&b(p))i=p;else{o=mt(_(te(),"rovecode-plugin-"));let d=await(t.spawn??ue)(["git","clone","--depth","1","--quiet","--",e,"."],o);if(d.code!==0)return{ok:!1,error:`git clone failed (exit ${d.code})${d.stderr.trim()?`: ${d.stderr.trim().split(`
|
|
4
|
+
`).at(-1)}`:""}`};if(i=o,t.cloneCache!==void 0)t.cloneCache.set(l,o),o=null}}if(i=X(i),t.subfolder!==void 0&&t.subfolder!==""){let l=t.subfolder.split("\\").join("/");if(l.startsWith("/")||/^[A-Za-z]:/.test(l)||l.split("/").includes(".."))return{ok:!1,error:`subfolder "${t.subfolder}" escapes the source`};let p=X(_(i,l));if(p!==i&&!p.startsWith(i+ee))return{ok:!1,error:`subfolder "${t.subfolder}" escapes the source`};if(!b(p))return{ok:!1,error:`${e}: no folder "${t.subfolder}" inside it`};i=p}if(!b(i))return{ok:!1,error:`${e}: not a directory`};let c=_(i,I);if(!N(c))return{ok:!1,error:`${e}: no ${I} \u2014 a plugin is a folder with a manifest`};let r=[],s=V($t(c,"utf8"),c,r);if(s===null)return{ok:!1,error:r.join("; ")||`${c}: invalid manifest`};let m=h(t.scope,t.cwd,t.home),n=_(m,s.name);if(X(n)===i)return{ok:!1,error:`${e} is already the installed copy`};if(N(n)&&!t.force)return{ok:!1,error:`plugin "${s.name}" already exists at ${n} (use --force to replace)`};Jt(m,{recursive:!0});let a=mt(_(m,`.rovecode-add-${s.name}-`));try{if(u(i,a,(l)=>!/(?:^|[\\/])(?:node_modules|\.git)(?:[\\/]|$)/.test(l)&&!ae(l)),N(n))G(n,{recursive:!0,force:!0});jt(a,n)}catch(l){return{ok:!1,error:`could not install "${s.name}" into ${n}: ${l instanceof Error?l.message:String(l)}`}}finally{G(a,{recursive:!0,force:!0})}if(t.scope==="project"){let l=g(t.home);l.trusted[M(n)]=K(n),B(t.home,l)}return{ok:!0,name:s.name,dir:n,scope:t.scope,manifest:s}}finally{if(o)G(o,{recursive:!0,force:!0})}}function Z(e,t){let i=_(h(t.scope,t.cwd,t.home),e);if(!b(i))return{ok:!1,error:`no ${t.scope} plugin "${e}" at ${i}`};G(i,{recursive:!0,force:!0});let o=g(t.home);return delete o.trusted[M(i)],B(t.home,o),{ok:!0,dir:i}}function H(e,t,i){let o=g(i);if(o.disabled=o.disabled.filter((u)=>u!==e),!t)o.disabled.push(e);return B(i,o)}function J(e,t){let i=_(h("project",t.cwd,t.home),e);if(!b(i)||!N(_(i,I)))return{ok:!1,error:`no project plugin "${e}" under ${h("project",t.cwd,t.home)}`};let o=K(i),u=g(t.home);return u.trusted[M(i)]=o,B(t.home,u),{ok:!0,dir:i,digest:o}}function $(e,t){let i=_(h("project",t.cwd,t.home),e),o=g(t.home),u=M(i)in o.trusted;return delete o.trusted[M(i)],B(t.home,o),u}import{relative as le}from"path";var k=["usage: rovecode plugin <command>"," list every plugin in ~/.rovecode/plugins and .rovecode/plugins, with its status"," add <folder|git-url> [--project] [--force]"," copy (or shallow-clone) a plugin into the user scope, or this repo's .rovecode/plugins"," remove <name> [--project] delete the installed copy"," enable <name> \xB7 disable <name>"," switch a plugin off/on in every scope (~/.rovecode/plugins.json)"," trust <name> approve a PROJECT plugin's current files on this machine \u2014 until they change"," untrust <name> withdraw that approval"," show <name> manifest, files and what it contributes, without running any of it","status: active \xB7 disabled \xB7 untrusted (project plugin not yet approved here) \xB7 broken (see problems)"].join(`
|
|
5
|
+
`),xt=(e,t)=>e.includes(t),ne=(e)=>e.filter((t)=>!t.startsWith("--"));async function ce(e,t={}){let i=t.cwd??process.cwd(),o=t.home??z(),u=t.out??((a)=>console.log(a)),c=t.err??((a)=>console.error(a)),[r="list",...s]=e,m=xt(s,"--project")?"project":"user",n=ne(s)[0];switch(r){case"list":case"ls":{let{plugins:a,warnings:l}=E(i,{home:o});if(a.length===0)u(`no plugins. add one: rovecode plugin add <folder|git-url> (user: ${h("user",i,o)}, project: ${le(i,h("project",i,o))||"."})`);for(let p of a)u(gt(p));for(let p of l)c(`warning: ${p}`);return 0}case"add":{let a=n;if(!a)return c(k),2;let l=await W(a,{cwd:i,home:o,scope:m,force:xt(s,"--force"),...t.spawn?{spawn:t.spawn}:{}});if(!l.ok)return c(`plugin add: ${l.error}`),1;u(`added ${l.name}@${l.manifest.version} (${l.scope}) \u2192 ${l.dir}`);for(let p of D(l.manifest))u(` ${p}`);if(l.scope==="project")u(` trusted on this machine (recorded in ${Q(o)}); a change to its files will ask again`);return u("restart rovecode to load it \u2014 plugins are read once per process, like hooks"),0}case"remove":case"rm":{if(!n)return c(k),2;let a=Z(n,{cwd:i,home:o,scope:m});if(!a.ok)return c(`plugin remove: ${a.error}`),1;return u(`removed ${n} (${m}) from ${a.dir}`),0}case"enable":case"disable":{if(!n)return c(k),2;if(!E(i,{home:o}).plugins.some((p)=>p.name===n))c(`warning: no installed plugin named "${n}" \u2014 the setting is recorded anyway`);let l=H(n,r==="enable",o);return u(`${n} ${r}d (${l})`),0}case"trust":{if(!n)return c(k),2;let a=E(i,{home:o}).plugins.find((p)=>p.name===n&&p.scope==="project");if(!a)return c(`plugin trust: no project plugin "${n}" under ${h("project",i,o)}`),1;if(a.manifest===null){c(`plugin trust: "${n}" is broken \u2014 fix it first:`);for(let p of a.problems)c(` ${p}`);return 1}let l=J(n,{cwd:i,home:o});if(!l.ok)return c(`plugin trust: ${l.error}`),1;u(`trusted ${n}@${a.manifest.version} \u2014 ${y(a.dir).length} files, digest ${l.digest.slice(0,12)}\u2026`);for(let p of D(a.manifest))u(` ${p}`);return u("it loads on the next start; `rovecode plugin show "+n+"` lists every file it brings"),0}case"untrust":{if(!n)return c(k),2;return u($(n,{cwd:i,home:o})?`untrusted ${n}`:`${n} was not trusted`),0}case"show":case"info":{if(!n)return c(k),2;let a=E(i,{home:o}).plugins.find((l)=>l.name===n);if(!a)return c(`plugin show: no plugin "${n}"`),1;if(u(gt(a)),u(` folder: ${a.dir}`),a.digest)u(` digest: ${a.digest}`);if(a.manifest)for(let l of D(a.manifest))u(` ${l}`);for(let l of y(a.dir))u(` - ${l}`);for(let l of a.problems)u(` ! ${l}`);if(a.status==="untrusted")u(` run \`rovecode plugin trust ${a.name}\` after reading the files above`);return 0}case"help":case"--help":case"-h":return u(k),0;default:return c(`unknown plugin command "${r}"
|
|
6
|
+
${k}`),2}}function gt(e){let t=e.manifest?`@${e.manifest.version}`:"",i=e.manifest?.description?` \u2014 ${e.manifest.description}`:"";return`${(e.name+t).padEnd(28)} ${e.scope.padEnd(8)} ${e.status.padEnd(9)}${i}`.trimEnd()}async function _i(e,t={}){let i=t.home??z(),o=E(e,{home:i,state:g(i)}),u=await U(o.plugins,{cwd:e,home:i,...t.timeoutMs!==void 0?{timeoutMs:t.timeoutMs}:{}});return{plugins:u.plugins,warnings:[...o.warnings,...u.warnings]}}function hi(e){if(e.length===0)return null;let t=(o)=>e.filter((u)=>u.status===o).map((u)=>u.name),i=[];for(let o of["active","untrusted","disabled","broken"]){let u=t(o);if(u.length)i.push(`${u.length} ${o} (${u.join(", ")})`)}return`plugins: ${i.join(" \xB7 ")}`}export{$ as untrustPlugin,J as trustPlugin,hi as summarizePlugins,Q as statePath,H as setPluginEnabled,h as scopeRoot,B as saveState,Z as removePlugin,T as pluginRoots,y as pluginFiles,K as pluginDigest,V as parseManifest,g as loadState,_i as loadPlugins,dt as isGitSource,E as discoverPlugins,D as contributions,ce as cmdPlugin,W as addPlugin,U as activatePlugins,k as PLUGIN_USAGE,A as PLUGIN_API_VERSION,I as MANIFEST_FILE,rt as DEFAULT_PLUGIN_TIMEOUT_MS};
|