@pugi/cli 0.1.0-beta.98 → 1.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +11 -191
- package/bin/pugi +8 -0
- package/package.json +15 -71
- package/postinstall.mjs +31 -0
- package/CHANGELOG.md +0 -132
- package/THIRD_PARTY_NOTICES.md +0 -40
- package/assets/pugi-mascot.ansi +0 -16
- package/assets/pugi-prozr2-mascot.ansi +0 -9
- package/bin/run.js +0 -34
- package/dist/commands/deploy.js +0 -439
- package/dist/commands/flatten.js +0 -191
- package/dist/commands/jobs-watch.js +0 -201
- package/dist/commands/jobs.js +0 -260
- package/dist/commands/retro.js +0 -210
- package/dist/commands/smoke.js +0 -133
- package/dist/core/agent-progress/cleanup.js +0 -134
- package/dist/core/agent-progress/schema.js +0 -144
- package/dist/core/agent-progress/writer.js +0 -101
- package/dist/core/agents/adaptive-router.js +0 -330
- package/dist/core/agents/loader.js +0 -104
- package/dist/core/agents/query-decomposer.js +0 -297
- package/dist/core/agents/registry.js +0 -69
- package/dist/core/approvals/shortcut-resolver.js +0 -98
- package/dist/core/artifact-chain/dispatcher.js +0 -148
- package/dist/core/artifact-chain/exporter.js +0 -164
- package/dist/core/artifact-chain/state.js +0 -243
- package/dist/core/artifact-chain/steps.js +0 -169
- package/dist/core/ask-user/question.js +0 -92
- package/dist/core/audit/audit-trail.js +0 -275
- package/dist/core/auth/ensure-authenticated.js +0 -129
- package/dist/core/auth/env-provider.js +0 -238
- package/dist/core/auto-open-browser.js +0 -128
- package/dist/core/auto-update/channels.js +0 -122
- package/dist/core/auto-update/checker.js +0 -241
- package/dist/core/auto-update/state.js +0 -235
- package/dist/core/bare-mode/index.js +0 -107
- package/dist/core/bash/redirect.js +0 -281
- package/dist/core/bash-classifier.js +0 -1397
- package/dist/core/checkpoint/resumer.js +0 -149
- package/dist/core/checkpoint/rewinder.js +0 -291
- package/dist/core/checkpoints/shadow-git.js +0 -670
- package/dist/core/citations/parser.js +0 -109
- package/dist/core/classifier/yolo-classifier.js +0 -88
- package/dist/core/clipboard.js +0 -70
- package/dist/core/codegraph/decision-store.js +0 -248
- package/dist/core/codegraph/detect-repo.js +0 -459
- package/dist/core/codegraph/install.js +0 -134
- package/dist/core/codegraph/offer-hook.js +0 -220
- package/dist/core/compact/auto-trigger.js +0 -96
- package/dist/core/compact/buffer-rewriter.js +0 -115
- package/dist/core/compact/summarizer.js +0 -208
- package/dist/core/compact/token-counter.js +0 -108
- package/dist/core/consensus/anvil-fanout.js +0 -276
- package/dist/core/consensus/diff-capture.js +0 -491
- package/dist/core/consensus/rubric.js +0 -233
- package/dist/core/context/builder.js +0 -114
- package/dist/core/context/compaction-events.js +0 -99
- package/dist/core/context/compaction.js +0 -602
- package/dist/core/context/index.js +0 -28
- package/dist/core/context/invariants.js +0 -250
- package/dist/core/context/markdown-loader.js +0 -288
- package/dist/core/context/markdown-traverse.js +0 -255
- package/dist/core/context/pugiignore.js +0 -316
- package/dist/core/context/repo-skeleton.js +0 -533
- package/dist/core/context/tool-eviction.js +0 -55
- package/dist/core/context/watcher.js +0 -342
- package/dist/core/context/working-set.js +0 -165
- package/dist/core/coordinator/agent-tools.js +0 -77
- package/dist/core/coordinator/agent-toolset.js +0 -65
- package/dist/core/coordinator/fsm.js +0 -73
- package/dist/core/coordinator/mode-fsm.js +0 -70
- package/dist/core/cost/rate-card.js +0 -129
- package/dist/core/cost/tracker.js +0 -221
- package/dist/core/credentials.js +0 -355
- package/dist/core/cron/scheduler.js +0 -138
- package/dist/core/denial-tracking/index.js +0 -8
- package/dist/core/denial-tracking/state.js +0 -264
- package/dist/core/diagnostics/probe-runner.js +0 -93
- package/dist/core/diagnostics/probes/api.js +0 -46
- package/dist/core/diagnostics/probes/auth.js +0 -93
- package/dist/core/diagnostics/probes/bare-mode.js +0 -42
- package/dist/core/diagnostics/probes/cli-version.js +0 -127
- package/dist/core/diagnostics/probes/config.js +0 -72
- package/dist/core/diagnostics/probes/denial-tracking.js +0 -57
- package/dist/core/diagnostics/probes/disk.js +0 -81
- package/dist/core/diagnostics/probes/engine-live.js +0 -46
- package/dist/core/diagnostics/probes/git.js +0 -65
- package/dist/core/diagnostics/probes/hooks.js +0 -118
- package/dist/core/diagnostics/probes/mcp.js +0 -75
- package/dist/core/diagnostics/probes/node.js +0 -59
- package/dist/core/diagnostics/probes/pnpm.js +0 -36
- package/dist/core/diagnostics/probes/pugi-md.js +0 -89
- package/dist/core/diagnostics/probes/sandbox.js +0 -72
- package/dist/core/diagnostics/probes/session.js +0 -74
- package/dist/core/diagnostics/probes/status-snapshot.js +0 -488
- package/dist/core/diagnostics/probes/workspace.js +0 -63
- package/dist/core/diagnostics/types.js +0 -70
- package/dist/core/dispatch/cache-cleanup.js +0 -197
- package/dist/core/dispatch/cache-handoff.js +0 -295
- package/dist/core/edits/apply-patch-layer-e.js +0 -189
- package/dist/core/edits/dispatch.js +0 -511
- package/dist/core/edits/format-detector.js +0 -260
- package/dist/core/edits/format-matrix.js +0 -26
- package/dist/core/edits/fuzzy-ladder.js +0 -650
- package/dist/core/edits/index.js +0 -19
- package/dist/core/edits/journal.js +0 -199
- package/dist/core/edits/layer-a-apply.js +0 -217
- package/dist/core/edits/layer-a-fuzzy-apply.js +0 -198
- package/dist/core/edits/layer-b-apply.js +0 -211
- package/dist/core/edits/layer-c-apply.js +0 -160
- package/dist/core/edits/layer-d-ast.js +0 -572
- package/dist/core/edits/marker-parser.js +0 -401
- package/dist/core/edits/security-gate.js +0 -223
- package/dist/core/edits/verify-hook.js +0 -273
- package/dist/core/edits/worktree.js +0 -322
- package/dist/core/engine/adapter-runner.js +0 -8
- package/dist/core/engine/anvil-client.js +0 -344
- package/dist/core/engine/auto-compact.js +0 -179
- package/dist/core/engine/budgets.js +0 -192
- package/dist/core/engine/context-prefix.js +0 -155
- package/dist/core/engine/index.js +0 -12
- package/dist/core/engine/intensity.js +0 -163
- package/dist/core/engine/intent.js +0 -260
- package/dist/core/engine/native-pugi.js +0 -1616
- package/dist/core/engine/noop.js +0 -27
- package/dist/core/engine/prompts.js +0 -236
- package/dist/core/engine/strip-internal-fields.js +0 -124
- package/dist/core/engine/tool-bridge.js +0 -2173
- package/dist/core/engine/verification-patterns.js +0 -195
- package/dist/core/evaluation/golden-dataset.js +0 -293
- package/dist/core/feedback/queue.js +0 -177
- package/dist/core/feedback/submitter.js +0 -145
- package/dist/core/file-cache.js +0 -141
- package/dist/core/flatten/flatten-repo.js +0 -439
- package/dist/core/format/osc8-link.js +0 -28
- package/dist/core/hook-chains.js +0 -392
- package/dist/core/hooks/citation-verify-hook.js +0 -138
- package/dist/core/hooks/citation-verify.js +0 -112
- package/dist/core/hooks/events.js +0 -46
- package/dist/core/hooks/index.js +0 -15
- package/dist/core/hooks/registry.js +0 -216
- package/dist/core/hooks/runner.js +0 -236
- package/dist/core/hooks/v2/event-emitter.js +0 -115
- package/dist/core/hooks/v2/executor.js +0 -282
- package/dist/core/hooks/v2/index.js +0 -25
- package/dist/core/hooks/v2/lifecycle.js +0 -104
- package/dist/core/hooks/v2/loader.js +0 -216
- package/dist/core/hooks/v2/matcher.js +0 -125
- package/dist/core/hooks/v2/trust.js +0 -143
- package/dist/core/hooks/v2/types.js +0 -86
- package/dist/core/hooks/worktree-events.js +0 -158
- package/dist/core/hooks.js +0 -415
- package/dist/core/image/renderer.js +0 -71
- package/dist/core/index-store.js +0 -260
- package/dist/core/init/detector.js +0 -582
- package/dist/core/init/template-renderer.js +0 -242
- package/dist/core/jobs/registry.js +0 -462
- package/dist/core/ledger/results-tsv.js +0 -142
- package/dist/core/log-discipline/stdout-redirect.js +0 -51
- package/dist/core/lsp/cache.js +0 -105
- package/dist/core/lsp/client.js +0 -1229
- package/dist/core/lsp/language-detect.js +0 -66
- package/dist/core/lsp/post-edit-diagnostics.js +0 -171
- package/dist/core/lsp/server-detect.js +0 -173
- package/dist/core/lsp/symbol-cache.js +0 -162
- package/dist/core/lsp/symbol-tools.js +0 -664
- package/dist/core/mcp/client.js +0 -385
- package/dist/core/mcp/http-server.js +0 -553
- package/dist/core/mcp/orchestrator-config.js +0 -192
- package/dist/core/mcp/orchestrator-tools.js +0 -806
- package/dist/core/mcp/permission.js +0 -190
- package/dist/core/mcp/registry.js +0 -193
- package/dist/core/mcp/server-tools.js +0 -219
- package/dist/core/mcp/server.js +0 -397
- package/dist/core/mcp/trust.js +0 -91
- package/dist/core/memory/dual-write.js +0 -416
- package/dist/core/memory/passive-extract.js +0 -130
- package/dist/core/memory/phase1-kinds.js +0 -20
- package/dist/core/memory/secret-scanner.js +0 -304
- package/dist/core/memory-sync/queue.js +0 -170
- package/dist/core/metrics/extract.js +0 -113
- package/dist/core/modes/roo-modes.js +0 -68
- package/dist/core/onboarding/ensure-initialized.js +0 -133
- package/dist/core/onboarding/marker.js +0 -111
- package/dist/core/onboarding/telemetry-state.js +0 -108
- package/dist/core/output-style/presets.js +0 -176
- package/dist/core/output-style/state.js +0 -185
- package/dist/core/path-security.js +0 -345
- package/dist/core/permission.js +0 -369
- package/dist/core/permissions/auto-classifier.js +0 -124
- package/dist/core/permissions/bash-parser.js +0 -371
- package/dist/core/permissions/circuit-breaker.js +0 -83
- package/dist/core/permissions/constrained-edit.js +0 -91
- package/dist/core/permissions/gate.js +0 -278
- package/dist/core/permissions/index.js +0 -20
- package/dist/core/permissions/mode.js +0 -174
- package/dist/core/permissions/network-egress.js +0 -137
- package/dist/core/permissions/state.js +0 -241
- package/dist/core/permissions/tool-class.js +0 -107
- package/dist/core/plan-mode/ui-state.js +0 -51
- package/dist/core/plans/plan-artifact.js +0 -721
- package/dist/core/policy-limits/etag-store.js +0 -122
- package/dist/core/prd-check/parser.js +0 -215
- package/dist/core/prd-check/reporter.js +0 -127
- package/dist/core/prd-check/session-review.js +0 -557
- package/dist/core/prd-check/verifiers.js +0 -223
- package/dist/core/prompt-cache/client-cache.js +0 -99
- package/dist/core/prompts/assembly.js +0 -29
- package/dist/core/prompts/registry.js +0 -364
- package/dist/core/pugi-gitignore.js +0 -52
- package/dist/core/pugi-md/cc-compat-rules.js +0 -735
- package/dist/core/pugi-md/context-injector.js +0 -76
- package/dist/core/pugi-md/walk-up.js +0 -207
- package/dist/core/python/uv-installer.js +0 -270
- package/dist/core/python/uv-resolver.js +0 -83
- package/dist/core/rate-limit/narrator.js +0 -146
- package/dist/core/recipes/cli-types.js +0 -20
- package/dist/core/recipes/loader.js +0 -103
- package/dist/core/recipes/runner.js +0 -345
- package/dist/core/recipes/schema.js +0 -587
- package/dist/core/release-notes/parser.js +0 -241
- package/dist/core/release-notes/state.js +0 -116
- package/dist/core/repl/ask.js +0 -512
- package/dist/core/repl/cancellation.js +0 -98
- package/dist/core/repl/cap-warning.js +0 -91
- package/dist/core/repl/clipboard-read.js +0 -174
- package/dist/core/repl/dispatch-fsm.js +0 -220
- package/dist/core/repl/engine-bridge.js +0 -303
- package/dist/core/repl/history-search.js +0 -175
- package/dist/core/repl/history.js +0 -182
- package/dist/core/repl/kill-ring.js +0 -138
- package/dist/core/repl/model-pricing.js +0 -135
- package/dist/core/repl/privacy-banner.js +0 -71
- package/dist/core/repl/session.js +0 -4962
- package/dist/core/repl/slash-commands.js +0 -747
- package/dist/core/repl/store/index.js +0 -12
- package/dist/core/repl/store/jsonl-log.js +0 -321
- package/dist/core/repl/store/lockfile.js +0 -155
- package/dist/core/repl/store/session-store.js +0 -821
- package/dist/core/repl/store/types.js +0 -44
- package/dist/core/repl/store/uuid-v7.js +0 -68
- package/dist/core/repl/tool-route.js +0 -382
- package/dist/core/repl/workspace-context.js +0 -206
- package/dist/core/repo-map/build.js +0 -125
- package/dist/core/repo-map/cache.js +0 -185
- package/dist/core/repo-map/extractor.js +0 -254
- package/dist/core/repo-map/formatter.js +0 -145
- package/dist/core/repo-map/page-rank.js +0 -105
- package/dist/core/repo-map/scanner.js +0 -211
- package/dist/core/retro/git-collector.js +0 -251
- package/dist/core/retro/health-card.js +0 -25
- package/dist/core/retro/metrics.js +0 -342
- package/dist/core/retro/narrative.js +0 -249
- package/dist/core/retro/plane-collector.js +0 -274
- package/dist/core/retro/pr-issue-link.js +0 -65
- package/dist/core/retro/types.js +0 -16
- package/dist/core/retry-budget/budget.js +0 -284
- package/dist/core/retry-budget/index.js +0 -5
- package/dist/core/retry-budget/retry-cap.js +0 -74
- package/dist/core/routing/lead-worker.js +0 -43
- package/dist/core/routing/pre-flight-estimator.js +0 -108
- package/dist/core/runs/run-tree.js +0 -103
- package/dist/core/sandboxing/adapter.js +0 -29
- package/dist/core/sandboxing/index.js +0 -49
- package/dist/core/sandboxing/none.js +0 -19
- package/dist/core/sandboxing/seatbelt.js +0 -183
- package/dist/core/security/injection-scanner.js +0 -367
- package/dist/core/security/output-filter.js +0 -418
- package/dist/core/session/env-file.js +0 -105
- package/dist/core/session/section-budgets.js +0 -140
- package/dist/core/session.js +0 -377
- package/dist/core/settings.js +0 -400
- package/dist/core/share/formatter.js +0 -271
- package/dist/core/share/redactor.js +0 -221
- package/dist/core/share/uploader.js +0 -267
- package/dist/core/skills/defaults.js +0 -457
- package/dist/core/skills/loader.js +0 -454
- package/dist/core/skills/sources.js +0 -480
- package/dist/core/skills/trust.js +0 -172
- package/dist/core/smoke/headless-driver.js +0 -174
- package/dist/core/smoke/orchestrator.js +0 -194
- package/dist/core/smoke/runner.js +0 -238
- package/dist/core/smoke/scenario-parser.js +0 -316
- package/dist/core/statusline.js +0 -99
- package/dist/core/subagents/dispatcher-real.js +0 -600
- package/dist/core/subagents/dispatcher.js +0 -352
- package/dist/core/subagents/index.js +0 -39
- package/dist/core/subagents/isolation-matrix.js +0 -213
- package/dist/core/subagents/spawn.js +0 -101
- package/dist/core/telemetry/emitter.js +0 -229
- package/dist/core/telemetry/queue.js +0 -251
- package/dist/core/theme/context.js +0 -91
- package/dist/core/theme/presets.js +0 -228
- package/dist/core/theme/state.js +0 -181
- package/dist/core/todos/invariant.js +0 -10
- package/dist/core/todos/state.js +0 -177
- package/dist/core/tool-schema/compressor.js +0 -89
- package/dist/core/transport/version-interceptor.js +0 -166
- package/dist/core/trust.js +0 -109
- package/dist/core/tui/thinking-block.js +0 -64
- package/dist/core/vim/keymap.js +0 -288
- package/dist/core/vim/state.js +0 -92
- package/dist/core/watch-markers/marker-watcher.js +0 -133
- package/dist/core/worktree/include-parser.js +0 -249
- package/dist/core/worktree-manager/cleanup.js +0 -123
- package/dist/core/worktree-manager/manager.js +0 -303
- package/dist/index.js +0 -44
- package/dist/runtime/bootstrap.js +0 -190
- package/dist/runtime/cli.js +0 -8121
- package/dist/runtime/commands/agents.js +0 -385
- package/dist/runtime/commands/budget.js +0 -192
- package/dist/runtime/commands/cancel.js +0 -231
- package/dist/runtime/commands/chain.js +0 -489
- package/dist/runtime/commands/codegraph-status.js +0 -227
- package/dist/runtime/commands/compact.js +0 -297
- package/dist/runtime/commands/config.js +0 -595
- package/dist/runtime/commands/cost.js +0 -199
- package/dist/runtime/commands/delegate.js +0 -312
- package/dist/runtime/commands/dispatch.js +0 -126
- package/dist/runtime/commands/doctor.js +0 -579
- package/dist/runtime/commands/feedback.js +0 -184
- package/dist/runtime/commands/hooks.js +0 -187
- package/dist/runtime/commands/init.js +0 -254
- package/dist/runtime/commands/lsp.js +0 -368
- package/dist/runtime/commands/mcp.js +0 -935
- package/dist/runtime/commands/memory.js +0 -582
- package/dist/runtime/commands/model.js +0 -237
- package/dist/runtime/commands/onboarding.js +0 -275
- package/dist/runtime/commands/patch.js +0 -128
- package/dist/runtime/commands/permissions.js +0 -112
- package/dist/runtime/commands/plan.js +0 -143
- package/dist/runtime/commands/prd-check.js +0 -285
- package/dist/runtime/commands/privacy.js +0 -107
- package/dist/runtime/commands/recipe.js +0 -325
- package/dist/runtime/commands/redo-blob-store.js +0 -92
- package/dist/runtime/commands/redo.js +0 -361
- package/dist/runtime/commands/release-notes.js +0 -229
- package/dist/runtime/commands/repo-map.js +0 -95
- package/dist/runtime/commands/report.js +0 -299
- package/dist/runtime/commands/resume.js +0 -118
- package/dist/runtime/commands/review-consensus.js +0 -414
- package/dist/runtime/commands/rewind.js +0 -333
- package/dist/runtime/commands/roster.js +0 -117
- package/dist/runtime/commands/sessions.js +0 -163
- package/dist/runtime/commands/share.js +0 -316
- package/dist/runtime/commands/skills.js +0 -401
- package/dist/runtime/commands/status.js +0 -186
- package/dist/runtime/commands/stickers.js +0 -82
- package/dist/runtime/commands/style.js +0 -194
- package/dist/runtime/commands/theme.js +0 -196
- package/dist/runtime/commands/undo.js +0 -361
- package/dist/runtime/commands/update.js +0 -289
- package/dist/runtime/commands/vim.js +0 -140
- package/dist/runtime/commands/worktree.js +0 -177
- package/dist/runtime/commands/worktrees.js +0 -155
- package/dist/runtime/deprecation-warning.js +0 -69
- package/dist/runtime/engine-exit-code.js +0 -50
- package/dist/runtime/headless-repl.js +0 -195
- package/dist/runtime/headless.js +0 -548
- package/dist/runtime/load-hooks-or-exit.js +0 -71
- package/dist/runtime/plan-decompose.js +0 -531
- package/dist/runtime/sigint-guard.js +0 -272
- package/dist/runtime/stream-renderer.js +0 -195
- package/dist/runtime/update-check.js +0 -294
- package/dist/runtime/version.js +0 -65
- package/dist/runtime/worktree-bootstrap.js +0 -579
- package/dist/skills/bundled/batch.js +0 -617
- package/dist/skills/bundled/index.js +0 -45
- package/dist/skills/bundled/loop.js +0 -358
- package/dist/skills/bundled/remember.js +0 -383
- package/dist/skills/bundled/simplify.js +0 -289
- package/dist/skills/bundled/skillify.js +0 -373
- package/dist/skills/bundled/stuck.js +0 -558
- package/dist/skills/bundled/verify.js +0 -439
- package/dist/testing/vcr.js +0 -486
- package/dist/tools/agent-tool.js +0 -229
- package/dist/tools/apply-patch.js +0 -556
- package/dist/tools/ask-user-question.js +0 -337
- package/dist/tools/ask-user.js +0 -115
- package/dist/tools/bash.js +0 -1238
- package/dist/tools/brief.js +0 -224
- package/dist/tools/cron.js +0 -433
- package/dist/tools/enter-worktree.js +0 -250
- package/dist/tools/exit-worktree.js +0 -147
- package/dist/tools/file-tools.js +0 -553
- package/dist/tools/http-request.js +0 -336
- package/dist/tools/lsp-tools.js +0 -565
- package/dist/tools/mcp-tool.js +0 -260
- package/dist/tools/multi-edit.js +0 -361
- package/dist/tools/powershell.js +0 -268
- package/dist/tools/registry.js +0 -166
- package/dist/tools/server-tools.js +0 -892
- package/dist/tools/skill-tool.js +0 -96
- package/dist/tools/sleep.js +0 -99
- package/dist/tools/synthetic-output.js +0 -133
- package/dist/tools/tasks.js +0 -208
- package/dist/tools/todo-write.js +0 -184
- package/dist/tools/verify-plan-execution.js +0 -295
- package/dist/tools/web-fetch-injection-scanner.js +0 -207
- package/dist/tools/web-fetch.js +0 -720
- package/dist/tools/web-search.js +0 -458
- package/dist/tui/agent-progress-card.js +0 -111
- package/dist/tui/agent-tree-pane.js +0 -9
- package/dist/tui/agent-tree.js +0 -87
- package/dist/tui/ask-cli.js +0 -52
- package/dist/tui/ask-modal.js +0 -211
- package/dist/tui/ask-user-question-chips.js +0 -315
- package/dist/tui/ask-user-question-prompt.js +0 -203
- package/dist/tui/compact-banner.js +0 -81
- package/dist/tui/conversation-pane.js +0 -164
- package/dist/tui/cost-table.js +0 -111
- package/dist/tui/device-flow.js +0 -142
- package/dist/tui/doctor-table.js +0 -46
- package/dist/tui/feedback-prompt.js +0 -156
- package/dist/tui/input-box.js +0 -732
- package/dist/tui/login-picker.js +0 -69
- package/dist/tui/markdown-render.js +0 -266
- package/dist/tui/multi-file-diff-approval.js +0 -375
- package/dist/tui/onboarding-wizard.js +0 -240
- package/dist/tui/permissions-picker.js +0 -86
- package/dist/tui/render.js +0 -160
- package/dist/tui/repl-render.js +0 -770
- package/dist/tui/repl-splash-art.js +0 -64
- package/dist/tui/repl-splash-mascot.js +0 -154
- package/dist/tui/repl-splash.js +0 -117
- package/dist/tui/repl.js +0 -378
- package/dist/tui/slash-palette.js +0 -106
- package/dist/tui/splash-data.js +0 -61
- package/dist/tui/splash.js +0 -31
- package/dist/tui/status-bar.js +0 -209
- package/dist/tui/status-table.js +0 -7
- package/dist/tui/stickers-art.js +0 -136
- package/dist/tui/style-table.js +0 -28
- package/dist/tui/theme-table.js +0 -29
- package/dist/tui/thinking-spinner.js +0 -123
- package/dist/tui/tool-stream-pane.js +0 -140
- package/dist/tui/update-banner.js +0 -33
- package/dist/tui/vim-input.js +0 -267
- package/dist/tui/welcome-banner.js +0 -107
- package/dist/tui/welcome-data.js +0 -293
- package/dist/tui/workspace-context.js +0 -105
- package/docs/examples/codegraph.mcp.json +0 -10
- package/test/scenarios/codegen-create-file.scenario.txt +0 -13
- package/test/scenarios/compact-force.scenario.txt +0 -12
- package/test/scenarios/identity.scenario.txt +0 -11
- package/test/scenarios/persona-handoff.scenario.txt +0 -12
- package/test/scenarios/walkback.scenario.txt +0 -12
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Kill ring for the REPL input - Sprint .
|
|
3
|
-
*
|
|
4
|
-
* Tiny LIFO buffer that backs the readline-style kill commands:
|
|
5
|
-
*
|
|
6
|
-
* Ctrl+U - kill from cursor to line start
|
|
7
|
-
* Ctrl+K - kill from cursor to line end
|
|
8
|
-
* Ctrl+W - kill word backwards (whitespace + punctuation delimiter)
|
|
9
|
-
* Ctrl+Y - yank the most recent kill at the cursor
|
|
10
|
-
*
|
|
11
|
-
* The ring is bounded (MAX_RING_ENTRIES = 10) so the operator's
|
|
12
|
-
* recent kills are reachable without leaking memory across long
|
|
13
|
-
* sessions. We do NOT implement Meta+Y (cycle yanks) at this layer -
|
|
14
|
-
* sticking to the most-recent-yank keeps the input box logic small
|
|
15
|
-
* and matches the bash default for new operators.
|
|
16
|
-
*
|
|
17
|
-
* The module is pure functional: every operation returns a NEW ring,
|
|
18
|
-
* so the input box can stash one in `useState` without mutation
|
|
19
|
-
* worries. Empty slices are no-ops (we do not push empty strings) so
|
|
20
|
-
* Ctrl+U at column 0 does not pollute the ring with `""`.
|
|
21
|
-
*/
|
|
22
|
-
export const MAX_RING_ENTRIES = 10;
|
|
23
|
-
export const EMPTY_KILL_RING = { entries: [] };
|
|
24
|
-
/**
|
|
25
|
-
* Push a slice into the ring. Returns a new ring with the slice at
|
|
26
|
-
* the front; older entries shift right and the tail is dropped if
|
|
27
|
-
* the cap is exceeded. Empty / whitespace-only slices are a no-op so
|
|
28
|
-
* the ring stays meaningful.
|
|
29
|
-
*/
|
|
30
|
-
export function push(ring, slice) {
|
|
31
|
-
if (slice.length === 0)
|
|
32
|
-
return ring;
|
|
33
|
-
const next = [slice, ...ring.entries];
|
|
34
|
-
return { entries: next.slice(0, MAX_RING_ENTRIES) };
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Read the most-recent entry without mutating the ring. Returns
|
|
38
|
-
* `null` when the ring is empty so the caller can decide whether to
|
|
39
|
-
* beep, no-op, or fall through to plain insert.
|
|
40
|
-
*/
|
|
41
|
-
export function yank(ring) {
|
|
42
|
-
return ring.entries.length > 0 ? ring.entries[0] : null;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Word delimiter used by Ctrl+W. Whitespace + ASCII punctuation,
|
|
46
|
-
* matching the readline default. We treat `_` and `-` as part of the
|
|
47
|
-
* word so kebab-case and snake_case identifiers behave as one token
|
|
48
|
-
* (the brief frequently mentions filenames + symbols).
|
|
49
|
-
*/
|
|
50
|
-
const WORD_DELIMITERS = new Set([
|
|
51
|
-
' ', '\t', '\n',
|
|
52
|
-
'.', ',', ';', ':',
|
|
53
|
-
'/', '\\',
|
|
54
|
-
'!', '?', '@', '#', '$', '%', '^', '&', '*',
|
|
55
|
-
'(', ')', '[', ']', '{', '}', '<', '>',
|
|
56
|
-
'"', "'", '`',
|
|
57
|
-
'=', '+', '|', '~',
|
|
58
|
-
]);
|
|
59
|
-
/**
|
|
60
|
-
* Compute the start of the previous word given a cursor position.
|
|
61
|
-
* Walks LEFT from `cursor - 1`, skipping any delimiters that
|
|
62
|
-
* immediately precede the cursor (so Ctrl+W at the end of `foo `
|
|
63
|
-
* still kills `foo`), then continues left until it hits the next
|
|
64
|
-
* delimiter or the start of the line.
|
|
65
|
-
*
|
|
66
|
-
* Returns the offset BEFORE which the kill should start (i.e. the
|
|
67
|
-
* slice to remove is `line.slice(start, cursor)`).
|
|
68
|
-
*/
|
|
69
|
-
export function previousWordStart(line, cursor) {
|
|
70
|
-
let i = Math.min(cursor, line.length) - 1;
|
|
71
|
-
// Skip trailing delimiters.
|
|
72
|
-
while (i >= 0 && WORD_DELIMITERS.has(line[i]))
|
|
73
|
-
i -= 1;
|
|
74
|
-
// Walk through the word.
|
|
75
|
-
while (i >= 0 && !WORD_DELIMITERS.has(line[i]))
|
|
76
|
-
i -= 1;
|
|
77
|
-
return i + 1;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Apply a Ctrl+U kill: from cursor to line start. Returns the new
|
|
81
|
-
* line + cursor + ring. No-op when cursor is already at column 0.
|
|
82
|
-
*/
|
|
83
|
-
export function killToLineStart(line, cursor, ring) {
|
|
84
|
-
if (cursor === 0)
|
|
85
|
-
return { line, cursor, ring };
|
|
86
|
-
const slice = line.slice(0, cursor);
|
|
87
|
-
return {
|
|
88
|
-
line: line.slice(cursor),
|
|
89
|
-
cursor: 0,
|
|
90
|
-
ring: push(ring, slice),
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Apply a Ctrl+K kill: from cursor to line end. Returns the new
|
|
95
|
-
* line + cursor + ring. No-op when cursor is already past the last
|
|
96
|
-
* character.
|
|
97
|
-
*/
|
|
98
|
-
export function killToLineEnd(line, cursor, ring) {
|
|
99
|
-
if (cursor >= line.length)
|
|
100
|
-
return { line, cursor, ring };
|
|
101
|
-
const slice = line.slice(cursor);
|
|
102
|
-
return {
|
|
103
|
-
line: line.slice(0, cursor),
|
|
104
|
-
cursor,
|
|
105
|
-
ring: push(ring, slice),
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Apply a Ctrl+W kill: from cursor back to the start of the previous
|
|
110
|
-
* word. Returns the new line + cursor + ring. No-op when cursor is
|
|
111
|
-
* at column 0.
|
|
112
|
-
*/
|
|
113
|
-
export function killWordBackward(line, cursor, ring) {
|
|
114
|
-
if (cursor === 0)
|
|
115
|
-
return { line, cursor, ring };
|
|
116
|
-
const start = previousWordStart(line, cursor);
|
|
117
|
-
const slice = line.slice(start, cursor);
|
|
118
|
-
return {
|
|
119
|
-
line: line.slice(0, start) + line.slice(cursor),
|
|
120
|
-
cursor: start,
|
|
121
|
-
ring: push(ring, slice),
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Apply a Ctrl+Y yank: insert the most-recent entry at the cursor.
|
|
126
|
-
* Returns the new line + cursor unchanged when the ring is empty
|
|
127
|
-
* (the caller decides whether to surface a visual cue).
|
|
128
|
-
*/
|
|
129
|
-
export function yankAtCursor(line, cursor, ring) {
|
|
130
|
-
const entry = yank(ring);
|
|
131
|
-
if (entry === null)
|
|
132
|
-
return { line, cursor };
|
|
133
|
-
return {
|
|
134
|
-
line: line.slice(0, cursor) + entry + line.slice(cursor),
|
|
135
|
-
cursor: cursor + entry.length,
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
//# sourceMappingURL=kill-ring.js.map
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Static price ladder keyed by exact model slug.
|
|
3
|
-
*
|
|
4
|
-
* Source: provider list-price pages as of. Keep prefix lookup
|
|
5
|
-
* (`priceForModel`) for forward compat — a `claude-opus-4-8` from a future
|
|
6
|
-
* model-router rebind falls back onto the `claude-opus-` family entry.
|
|
7
|
-
*/
|
|
8
|
-
const PRICE_LADDER = new Map([
|
|
9
|
-
// Anthropic Claude family
|
|
10
|
-
['claude-opus-4-7', { inputUsdPerM: 15.0, outputUsdPerM: 75.0 }],
|
|
11
|
-
['claude-opus-4-6', { inputUsdPerM: 15.0, outputUsdPerM: 75.0 }],
|
|
12
|
-
['claude-sonnet-4-6', { inputUsdPerM: 3.0, outputUsdPerM: 15.0 }],
|
|
13
|
-
['claude-sonnet-4-5', { inputUsdPerM: 3.0, outputUsdPerM: 15.0 }],
|
|
14
|
-
['claude-haiku-4-5', { inputUsdPerM: 0.8, outputUsdPerM: 4.0 }],
|
|
15
|
-
// OpenAI family — sentinel entries so a `pugi config set` override lands clean.
|
|
16
|
-
['gpt-4o', { inputUsdPerM: 2.5, outputUsdPerM: 10.0 }],
|
|
17
|
-
['gpt-4o-mini', { inputUsdPerM: 0.15, outputUsdPerM: 0.6 }],
|
|
18
|
-
['o3', { inputUsdPerM: 10.0, outputUsdPerM: 40.0 }],
|
|
19
|
-
['o3-mini', { inputUsdPerM: 1.1, outputUsdPerM: 4.4 }],
|
|
20
|
-
// Mistral
|
|
21
|
-
['mistral-large', { inputUsdPerM: 2.0, outputUsdPerM: 6.0 }],
|
|
22
|
-
['mistral-small', { inputUsdPerM: 0.2, outputUsdPerM: 0.6 }],
|
|
23
|
-
// Embeddings — input-only; output is zero so the meter shows a
|
|
24
|
-
// flat per-call cost without inflating the "output" column.
|
|
25
|
-
['voyage-3', { inputUsdPerM: 0.12, outputUsdPerM: 0 }],
|
|
26
|
-
['voyage-3-large', { inputUsdPerM: 0.18, outputUsdPerM: 0 }],
|
|
27
|
-
]);
|
|
28
|
-
/**
|
|
29
|
-
* Family-prefix fallback. Used when an unknown slug starts with a
|
|
30
|
-
* known family stem (e.g. `claude-sonnet-4-7`).
|
|
31
|
-
*/
|
|
32
|
-
const FAMILY_PREFIX = [
|
|
33
|
-
['claude-opus-', { inputUsdPerM: 15.0, outputUsdPerM: 75.0 }],
|
|
34
|
-
['claude-sonnet-', { inputUsdPerM: 3.0, outputUsdPerM: 15.0 }],
|
|
35
|
-
['claude-haiku-', { inputUsdPerM: 0.8, outputUsdPerM: 4.0 }],
|
|
36
|
-
['gpt-4o', { inputUsdPerM: 2.5, outputUsdPerM: 10.0 }],
|
|
37
|
-
['o3', { inputUsdPerM: 10.0, outputUsdPerM: 40.0 }],
|
|
38
|
-
['mistral-', { inputUsdPerM: 2.0, outputUsdPerM: 6.0 }],
|
|
39
|
-
['voyage-', { inputUsdPerM: 0.12, outputUsdPerM: 0 }],
|
|
40
|
-
];
|
|
41
|
-
/**
|
|
42
|
-
* Default ladder when no model slug is known (e.g. the older admin-api
|
|
43
|
-
* still on the pre- event shape that does not carry `model`). Pinned
|
|
44
|
-
* to Sonnet-tier so the meter is "honestly conservative" — close to the
|
|
45
|
-
* default dispatch lane for `reason` + `codegen` tags.
|
|
46
|
-
*/
|
|
47
|
-
const DEFAULT_PRICE = { inputUsdPerM: 3.0, outputUsdPerM: 15.0 };
|
|
48
|
-
/**
|
|
49
|
-
* Look up the price for a model slug. Resolution order:
|
|
50
|
-
* 1. Exact match in `PRICE_LADDER`.
|
|
51
|
-
* 2. Family-prefix match (`startsWith`).
|
|
52
|
-
* 3. Default Sonnet-tier rate.
|
|
53
|
-
*
|
|
54
|
-
* Pure — never throws. The cost meter calls this on every `agent.tokens`
|
|
55
|
-
* frame so it must stay branch-cheap.
|
|
56
|
-
*/
|
|
57
|
-
export function priceForModel(model) {
|
|
58
|
-
if (!model || typeof model !== 'string')
|
|
59
|
-
return DEFAULT_PRICE;
|
|
60
|
-
const exact = PRICE_LADDER.get(model);
|
|
61
|
-
if (exact)
|
|
62
|
-
return exact;
|
|
63
|
-
for (const [prefix, price] of FAMILY_PREFIX) {
|
|
64
|
-
if (model.startsWith(prefix))
|
|
65
|
-
return price;
|
|
66
|
-
}
|
|
67
|
-
return DEFAULT_PRICE;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Compute the USD cost for a single (input, output, model) triple.
|
|
71
|
-
* Returns a finite number, never NaN/Infinity, capped at zero floor so
|
|
72
|
-
* a buggy upstream that emits negative deltas (theoretically impossible
|
|
73
|
-
* via Anvil but we stay defensive) does not credit the operator's meter.
|
|
74
|
-
*
|
|
75
|
-
* Pure, deterministic, branch-cheap — called on every `agent.tokens`
|
|
76
|
-
* event so the hot path keeps the math inline.
|
|
77
|
-
*/
|
|
78
|
-
export function computeCostUsd(tokensIn, tokensOut, model) {
|
|
79
|
-
const price = priceForModel(model);
|
|
80
|
-
const safeIn = Number.isFinite(tokensIn) && tokensIn > 0 ? tokensIn : 0;
|
|
81
|
-
const safeOut = Number.isFinite(tokensOut) && tokensOut > 0 ? tokensOut : 0;
|
|
82
|
-
const usd = (safeIn * price.inputUsdPerM + safeOut * price.outputUsdPerM) / 1_000_000;
|
|
83
|
-
return Number.isFinite(usd) && usd > 0 ? usd : 0;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Format a token count for the status row. Spec (CEO):
|
|
87
|
-
* - `<1000` → raw integer (e.g. `42`)
|
|
88
|
-
* - `≥1000` → one-decimal `k` (e.g. `1.2k`)
|
|
89
|
-
* - `≥1_000_000` → one-decimal `m` (e.g. `1.0m`)
|
|
90
|
-
*
|
|
91
|
-
* Negative / NaN inputs render as `0`.
|
|
92
|
-
*/
|
|
93
|
-
export function formatTokens(value) {
|
|
94
|
-
if (!Number.isFinite(value) || value <= 0)
|
|
95
|
-
return '0';
|
|
96
|
-
if (value < 1_000)
|
|
97
|
-
return Math.floor(value).toString();
|
|
98
|
-
if (value < 1_000_000)
|
|
99
|
-
return `${(value / 1_000).toFixed(1)}k`;
|
|
100
|
-
return `${(value / 1_000_000).toFixed(1)}m`;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Format USD cost for the status row. Spec (CEO):
|
|
104
|
-
* - `≥ $0.01` → `$X.XX` (two decimals)
|
|
105
|
-
* - `< $0.01` (but > 0) → `$X.XXX` (three decimals, shows fractions
|
|
106
|
-
* of a cent honestly instead of rounding to `$0.00`)
|
|
107
|
-
* - `0` / NaN → `$0.00`
|
|
108
|
-
*/
|
|
109
|
-
export function formatCostUsd(usd) {
|
|
110
|
-
if (!Number.isFinite(usd) || usd <= 0)
|
|
111
|
-
return '$0.00';
|
|
112
|
-
if (usd >= 0.01)
|
|
113
|
-
return `$${usd.toFixed(2)}`;
|
|
114
|
-
return `$${usd.toFixed(3)}`;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Format an elapsed-ms duration as `1m2s` / `45s` / `2h3m`. Used by the
|
|
118
|
-
* status row's session-duration slot. Floors aggressively — we don't
|
|
119
|
-
* want sub-second decimals stealing column width.
|
|
120
|
-
*/
|
|
121
|
-
export function formatDuration(elapsedMs) {
|
|
122
|
-
if (!Number.isFinite(elapsedMs) || elapsedMs <= 0)
|
|
123
|
-
return '0s';
|
|
124
|
-
const totalSec = Math.floor(elapsedMs / 1000);
|
|
125
|
-
if (totalSec < 60)
|
|
126
|
-
return `${totalSec}s`;
|
|
127
|
-
const min = Math.floor(totalSec / 60);
|
|
128
|
-
const sec = totalSec % 60;
|
|
129
|
-
if (min < 60)
|
|
130
|
-
return `${min}m${sec.toString().padStart(2, '0')}s`;
|
|
131
|
-
const hr = Math.floor(min / 60);
|
|
132
|
-
const restMin = min % 60;
|
|
133
|
-
return `${hr}h${restMin.toString().padStart(2, '0')}m`;
|
|
134
|
-
}
|
|
135
|
-
//# sourceMappingURL=model-pricing.js.map
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Privacy mode REPL surface - alpha 6.13 (Phase 1).
|
|
3
|
-
*
|
|
4
|
-
* Two surfaces:
|
|
5
|
-
*
|
|
6
|
-
* 1. `renderPrivacyBanner(mode)` - one-line banner shown on REPL
|
|
7
|
-
* bootstrap (mirrors `apps/admin-api/src/privacy/privacy-mode.ts`
|
|
8
|
-
* `PRIVACY_MODE_BANNER` verbatim - keep in sync, the unit spec
|
|
9
|
-
* asserts they match).
|
|
10
|
-
*
|
|
11
|
-
* 2. `renderPrivacyContractDoc(mode)` - multi-line contract doc the
|
|
12
|
-
* `/privacy` slash command prints. Shows the active mode header
|
|
13
|
-
* + the full 3-mode contract so the operator can compare their
|
|
14
|
-
* current posture to the alternatives without leaving the REPL.
|
|
15
|
-
*
|
|
16
|
-
* The strings are pinned client-side so the contract doc is
|
|
17
|
-
* available even when the operator is offline / has not authenticated
|
|
18
|
-
* yet. The mode value itself is server-side authoritative (resolved
|
|
19
|
-
* via /api/admin/privacy/mode); the banner falls back to "(unknown)"
|
|
20
|
-
* when the round-trip fails.
|
|
21
|
-
*
|
|
22
|
-
* Brand voice: ASCII hyphens only, no em-dashes, no emoji decoration.
|
|
23
|
-
*/
|
|
24
|
-
export const PRIVACY_MODES = ['strict', 'balanced', 'permissive'];
|
|
25
|
-
export function isPrivacyMode(value) {
|
|
26
|
-
return (typeof value === 'string' && PRIVACY_MODES.includes(value));
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* One-line banner. Mirrors `PRIVACY_MODE_BANNER` on the server.
|
|
30
|
-
*/
|
|
31
|
-
const BANNERS = Object.freeze({
|
|
32
|
-
strict: 'Privacy: strict (no upstream LLM, no external tool egress)',
|
|
33
|
-
balanced: 'Privacy: balanced (PII scrubbed before upstream LLM)',
|
|
34
|
-
permissive: 'Privacy: permissive (raw prompts forwarded upstream)',
|
|
35
|
-
});
|
|
36
|
-
export function renderPrivacyBanner(mode) {
|
|
37
|
-
if (!mode || !isPrivacyMode(mode)) {
|
|
38
|
-
return 'Privacy: (unknown - mode lookup pending)';
|
|
39
|
-
}
|
|
40
|
-
return BANNERS[mode];
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Full mode contract doc. Printed by the `/privacy` slash command.
|
|
44
|
-
* Keep in sync with `PRIVACY_MODE_CONTRACT_DOC` on the server.
|
|
45
|
-
*/
|
|
46
|
-
const CONTRACT_DOC = `
|
|
47
|
-
Pugi privacy mode contract (alpha 6.13):
|
|
48
|
-
|
|
49
|
-
strict Maximum privacy. Nothing leaves tenant infra.
|
|
50
|
-
- Upstream LLM calls REFUSED (use self-hosted Ollama / llama.cpp).
|
|
51
|
-
- External tool calls require per-call confirm.
|
|
52
|
-
- Session.db, blobs, transcripts stay on operator disk.
|
|
53
|
-
- No telemetry. No error reporting.
|
|
54
|
-
|
|
55
|
-
balanced Default. PII-scrubbed content goes to the upstream LLM.
|
|
56
|
-
- 3-layer PII scrubber runs before egress (regex + NER + LLM).
|
|
57
|
-
- Tool calls to external services allowed (logged).
|
|
58
|
-
- Anonymized telemetry only (counts + error categories).
|
|
59
|
-
|
|
60
|
-
permissive Verbatim. Power-user mode.
|
|
61
|
-
- Raw prompts forwarded to upstream provider (no scrubbing).
|
|
62
|
-
- Tool calls to external services allowed.
|
|
63
|
-
- Full error reporting (may include prompt fragments).
|
|
64
|
-
- Accepts the upstream provider's data retention policy.
|
|
65
|
-
|
|
66
|
-
Switch with: pugi config set privacy=strict|balanced|permissive
|
|
67
|
-
`.trim();
|
|
68
|
-
export function renderPrivacyContractDoc(currentMode) {
|
|
69
|
-
return `${renderPrivacyBanner(currentMode)}\n\n${CONTRACT_DOC}`;
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=privacy-banner.js.map
|