@pugi/cli 0.1.0-beta.99 → 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 -195
- 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,140 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* — `pugi vim` top-level command + REPL slash
|
|
3
|
-
* companion.
|
|
4
|
-
*
|
|
5
|
-
* Operator surface:
|
|
6
|
-
*
|
|
7
|
-
* pugi vim Show current vim-mode state.
|
|
8
|
-
* pugi vim on Enable + persist (~/.pugi/config.json).
|
|
9
|
-
* pugi vim off Disable + persist (default).
|
|
10
|
-
* /vim Toggle from inside the REPL.
|
|
11
|
-
* /vim on Enable from inside the REPL.
|
|
12
|
-
* /vim off Disable from inside the REPL.
|
|
13
|
-
*
|
|
14
|
-
* The same runner backs both surfaces so the slash + the shell verb
|
|
15
|
-
* stay single-sourced — operators trained on one read the same
|
|
16
|
-
* payload + banner on the other.
|
|
17
|
-
*
|
|
18
|
-
* Exit codes:
|
|
19
|
-
* 0 — show / enable / disable / toggle happy path
|
|
20
|
-
* 2 — unknown subcommand (e.g. `pugi vim chaos`)
|
|
21
|
-
*
|
|
22
|
-
* NOTE: there are NO `--persist` flag and no workspace tier. Vim mode
|
|
23
|
-
* is a single user-level preference, matching the upstream behavior note
|
|
24
|
-
* that operators expect modal editing to be a body-memory trait, not
|
|
25
|
-
* a per-repo concern (see `core/vim/state.ts` header).
|
|
26
|
-
*/
|
|
27
|
-
import { resolveVimMode, setVimMode } from '../../core/vim/state.js';
|
|
28
|
-
/**
|
|
29
|
-
* Banner shown on enable so the operator can see the binding cheat
|
|
30
|
-
* sheet without reaching for `/help`. Echoed by both surfaces.
|
|
31
|
-
*/
|
|
32
|
-
export const VIM_ENABLED_BANNER = 'Vim mode on. Esc=normal, i=insert, :w=submit, :q=cancel.';
|
|
33
|
-
/**
|
|
34
|
-
* Entry point. Parses `args`, flips persistence as needed, emits the
|
|
35
|
-
* payload + text via `ctx.writeOutput`, and returns the exit code.
|
|
36
|
-
*/
|
|
37
|
-
export async function runVimCommand(args, ctx) {
|
|
38
|
-
// Validate args before reading state so a bad call never has a
|
|
39
|
-
// side-effect.
|
|
40
|
-
if (args.length > 1) {
|
|
41
|
-
const payload = {
|
|
42
|
-
command: 'vim',
|
|
43
|
-
status: 'invalid_args',
|
|
44
|
-
active: resolveVimMode({ env: ctx.env }),
|
|
45
|
-
message: `pugi vim takes at most one argument (on / off / toggle). Got: ${args.join(' ')}`,
|
|
46
|
-
attemptedArg: args.join(' '),
|
|
47
|
-
};
|
|
48
|
-
ctx.writeOutput(payload, payload.message);
|
|
49
|
-
return 2;
|
|
50
|
-
}
|
|
51
|
-
const current = resolveVimMode({ env: ctx.env });
|
|
52
|
-
const verb = args[0]?.toLowerCase() ?? '';
|
|
53
|
-
// No args → toggle (slash convention from the upstream behavior ). The
|
|
54
|
-
// CLI shell surface ALSO toggles on bare invocation so the two
|
|
55
|
-
// surfaces converge; if the operator wants the read-only show they
|
|
56
|
-
// can pipe through `pugi vim --json` or query the config directly.
|
|
57
|
-
// We surface the change as a `show` status when nothing flipped so
|
|
58
|
-
// scripts can distinguish read from write.
|
|
59
|
-
if (verb === '') {
|
|
60
|
-
const next = !current;
|
|
61
|
-
setVimMode(next, { env: ctx.env });
|
|
62
|
-
const status = next ? 'enabled' : 'disabled';
|
|
63
|
-
const message = next ? VIM_ENABLED_BANNER : 'Vim mode off.';
|
|
64
|
-
const payload = {
|
|
65
|
-
command: 'vim',
|
|
66
|
-
status,
|
|
67
|
-
active: next,
|
|
68
|
-
previous: current,
|
|
69
|
-
message,
|
|
70
|
-
};
|
|
71
|
-
ctx.writeOutput(payload, payload.message);
|
|
72
|
-
return 0;
|
|
73
|
-
}
|
|
74
|
-
if (verb === 'on' || verb === 'enable' || verb === 'true') {
|
|
75
|
-
if (current) {
|
|
76
|
-
const payload = {
|
|
77
|
-
command: 'vim',
|
|
78
|
-
status: 'unchanged',
|
|
79
|
-
active: true,
|
|
80
|
-
previous: true,
|
|
81
|
-
message: 'Vim mode already on.',
|
|
82
|
-
};
|
|
83
|
-
ctx.writeOutput(payload, payload.message);
|
|
84
|
-
return 0;
|
|
85
|
-
}
|
|
86
|
-
setVimMode(true, { env: ctx.env });
|
|
87
|
-
const payload = {
|
|
88
|
-
command: 'vim',
|
|
89
|
-
status: 'enabled',
|
|
90
|
-
active: true,
|
|
91
|
-
previous: current,
|
|
92
|
-
message: VIM_ENABLED_BANNER,
|
|
93
|
-
};
|
|
94
|
-
ctx.writeOutput(payload, payload.message);
|
|
95
|
-
return 0;
|
|
96
|
-
}
|
|
97
|
-
if (verb === 'off' || verb === 'disable' || verb === 'false') {
|
|
98
|
-
if (!current) {
|
|
99
|
-
const payload = {
|
|
100
|
-
command: 'vim',
|
|
101
|
-
status: 'unchanged',
|
|
102
|
-
active: false,
|
|
103
|
-
previous: false,
|
|
104
|
-
message: 'Vim mode already off.',
|
|
105
|
-
};
|
|
106
|
-
ctx.writeOutput(payload, payload.message);
|
|
107
|
-
return 0;
|
|
108
|
-
}
|
|
109
|
-
setVimMode(false, { env: ctx.env });
|
|
110
|
-
const payload = {
|
|
111
|
-
command: 'vim',
|
|
112
|
-
status: 'disabled',
|
|
113
|
-
active: false,
|
|
114
|
-
previous: current,
|
|
115
|
-
message: 'Vim mode off.',
|
|
116
|
-
};
|
|
117
|
-
ctx.writeOutput(payload, payload.message);
|
|
118
|
-
return 0;
|
|
119
|
-
}
|
|
120
|
-
if (verb === 'status' || verb === 'show') {
|
|
121
|
-
const payload = {
|
|
122
|
-
command: 'vim',
|
|
123
|
-
status: 'show',
|
|
124
|
-
active: current,
|
|
125
|
-
message: current ? 'Vim mode is on.' : 'Vim mode is off.',
|
|
126
|
-
};
|
|
127
|
-
ctx.writeOutput(payload, payload.message);
|
|
128
|
-
return 0;
|
|
129
|
-
}
|
|
130
|
-
const payload = {
|
|
131
|
-
command: 'vim',
|
|
132
|
-
status: 'invalid_args',
|
|
133
|
-
active: current,
|
|
134
|
-
message: `Unknown vim subcommand "${verb}". Try one of: on, off, status.`,
|
|
135
|
-
attemptedArg: verb,
|
|
136
|
-
};
|
|
137
|
-
ctx.writeOutput(payload, payload.message);
|
|
138
|
-
return 2;
|
|
139
|
-
}
|
|
140
|
-
//# sourceMappingURL=vim.js.map
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `pugi worktree <op>` — Phase 1.
|
|
3
|
-
*
|
|
4
|
-
* Manual control over the scratch worktree primitive. Three subcommands:
|
|
5
|
-
*
|
|
6
|
-
* pugi worktree create [branch] # spawns `.pugi/worktrees/<uuid>`
|
|
7
|
-
* pugi worktree promote <path> # applies the worktree's diff back to cwd
|
|
8
|
-
* pugi worktree drop <path> # removes the worktree (idempotent)
|
|
9
|
-
*
|
|
10
|
-
* Output: human-readable by default, structured JSON under --json so
|
|
11
|
-
* scripted callers can chain (`pugi worktree create --json | jq .path`).
|
|
12
|
-
*
|
|
13
|
-
* The same primitives are used by the `pugi build` and
|
|
14
|
-
* `pugi review --consensus` paths internally; this surface is the
|
|
15
|
-
* operator escape hatch for debugging / manual experimentation.
|
|
16
|
-
*
|
|
17
|
-
* Brand voice: ASCII only, no emoji, no banned words.
|
|
18
|
-
*/
|
|
19
|
-
import { spawnSync } from 'node:child_process';
|
|
20
|
-
import { resolve, sep } from 'node:path';
|
|
21
|
-
import { createWorktree, dropWorktree, promoteWorktree } from '../../core/edits/worktree.js';
|
|
22
|
-
/**
|
|
23
|
-
* R1 fix (2026-05-26, PR r1, P2 #10): operator-facing path
|
|
24
|
-
* validation. The core `promoteWorktree` / `dropWorktree` primitives
|
|
25
|
-
* already gate their inputs, but mirroring the check at the CLI surface
|
|
26
|
-
* gives the operator a clean error message before we even attempt the
|
|
27
|
-
* git invocation (which would otherwise leak `git rev-parse HEAD` stderr).
|
|
28
|
-
*/
|
|
29
|
-
function isUnderScratchRoot(cwd, candidate) {
|
|
30
|
-
const scratchRoot = resolve(cwd, '.pugi', 'worktrees');
|
|
31
|
-
const abs = resolve(cwd, candidate);
|
|
32
|
-
return abs.startsWith(scratchRoot + sep) && abs !== scratchRoot;
|
|
33
|
-
}
|
|
34
|
-
export async function runWorktreeCommand(args, opts) {
|
|
35
|
-
const [op, ...rest] = args;
|
|
36
|
-
if (!op)
|
|
37
|
-
return usage();
|
|
38
|
-
if (op === 'create') {
|
|
39
|
-
const branch = rest[0];
|
|
40
|
-
const result = createWorktree({
|
|
41
|
-
cwd: opts.cwd,
|
|
42
|
-
...(branch ? { branch } : {}),
|
|
43
|
-
});
|
|
44
|
-
if (!result.ok) {
|
|
45
|
-
return {
|
|
46
|
-
ok: false,
|
|
47
|
-
text: opts.json
|
|
48
|
-
? JSON.stringify(result, null, 2)
|
|
49
|
-
: `worktree create failed: ${result.reason}: ${result.detail}`,
|
|
50
|
-
exitCode: 1,
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
const handle = result.value;
|
|
54
|
-
return {
|
|
55
|
-
ok: true,
|
|
56
|
-
text: opts.json
|
|
57
|
-
? JSON.stringify({ path: handle.path, baseSha: handle.baseSha }, null, 2)
|
|
58
|
-
: `worktree created: ${handle.path}\nbase: ${handle.baseSha}`,
|
|
59
|
-
exitCode: 0,
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
if (op === 'promote') {
|
|
63
|
-
const worktreePath = rest[0];
|
|
64
|
-
if (!worktreePath) {
|
|
65
|
-
return {
|
|
66
|
-
ok: false,
|
|
67
|
-
text: 'Usage: pugi worktree promote <path>',
|
|
68
|
-
exitCode: 2,
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
if (!isUnderScratchRoot(opts.cwd, worktreePath)) {
|
|
72
|
-
return {
|
|
73
|
-
ok: false,
|
|
74
|
-
text: opts.json
|
|
75
|
-
? JSON.stringify({
|
|
76
|
-
ok: false,
|
|
77
|
-
reason: 'invalid_worktree_path',
|
|
78
|
-
detail: `worktree path must live under <cwd>/.pugi/worktrees/`,
|
|
79
|
-
}, null, 2)
|
|
80
|
-
: `promote failed: invalid_worktree_path: ${worktreePath} is not under .pugi/worktrees/`,
|
|
81
|
-
exitCode: 3,
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
// Resolve the worktree path's base SHA from its own git HEAD so
|
|
85
|
-
// the operator never has to remember it after `worktree create`.
|
|
86
|
-
const abs = resolve(opts.cwd, worktreePath);
|
|
87
|
-
const head = spawnSync('git', ['rev-parse', 'HEAD'], { cwd: abs, encoding: 'utf8' });
|
|
88
|
-
if (head.status !== 0) {
|
|
89
|
-
return {
|
|
90
|
-
ok: false,
|
|
91
|
-
text: `cannot read HEAD of ${abs}: ${head.stderr.trim() || 'git rev-parse failed'}`,
|
|
92
|
-
exitCode: 1,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
const baseSha = head.stdout.trim();
|
|
96
|
-
const result = promoteWorktree({
|
|
97
|
-
cwd: opts.cwd,
|
|
98
|
-
worktreePath: abs,
|
|
99
|
-
baseSha,
|
|
100
|
-
...(opts.dryRun ? { dryRun: true } : {}),
|
|
101
|
-
});
|
|
102
|
-
if (!result.ok) {
|
|
103
|
-
return {
|
|
104
|
-
ok: false,
|
|
105
|
-
text: opts.json
|
|
106
|
-
? JSON.stringify(result, null, 2)
|
|
107
|
-
: `promote failed: ${result.reason}: ${result.detail}`,
|
|
108
|
-
exitCode: result.reason === 'protected_file_in_worktree' ? 3 : 1,
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
const prefix = opts.dryRun ? 'dry-run: would promote' : 'promoted';
|
|
112
|
-
return {
|
|
113
|
-
ok: true,
|
|
114
|
-
text: opts.json
|
|
115
|
-
? JSON.stringify({ filesChanged: result.value.filesChanged, dryRun: opts.dryRun ?? false }, null, 2)
|
|
116
|
-
: `${prefix} ${result.value.filesChanged} files from ${abs}`,
|
|
117
|
-
exitCode: 0,
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
if (op === 'drop') {
|
|
121
|
-
const worktreePath = rest[0];
|
|
122
|
-
if (!worktreePath) {
|
|
123
|
-
return {
|
|
124
|
-
ok: false,
|
|
125
|
-
text: 'Usage: pugi worktree drop <path>',
|
|
126
|
-
exitCode: 2,
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
if (!isUnderScratchRoot(opts.cwd, worktreePath)) {
|
|
130
|
-
return {
|
|
131
|
-
ok: false,
|
|
132
|
-
text: opts.json
|
|
133
|
-
? JSON.stringify({
|
|
134
|
-
ok: false,
|
|
135
|
-
reason: 'invalid_worktree_path',
|
|
136
|
-
detail: `worktree path must live under <cwd>/.pugi/worktrees/`,
|
|
137
|
-
}, null, 2)
|
|
138
|
-
: `drop failed: invalid_worktree_path: ${worktreePath} is not under .pugi/worktrees/`,
|
|
139
|
-
exitCode: 3,
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
const abs = resolve(opts.cwd, worktreePath);
|
|
143
|
-
const result = dropWorktree(abs, opts.cwd);
|
|
144
|
-
if (!result.ok) {
|
|
145
|
-
return {
|
|
146
|
-
ok: false,
|
|
147
|
-
text: opts.json
|
|
148
|
-
? JSON.stringify(result, null, 2)
|
|
149
|
-
: `drop failed: ${result.reason}: ${result.detail}`,
|
|
150
|
-
exitCode: result.reason === 'invalid_worktree_path' ? 3 : 1,
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
return {
|
|
154
|
-
ok: true,
|
|
155
|
-
text: opts.json
|
|
156
|
-
? JSON.stringify({ dropped: abs }, null, 2)
|
|
157
|
-
: `worktree dropped: ${abs}`,
|
|
158
|
-
exitCode: 0,
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
return {
|
|
162
|
-
ok: false,
|
|
163
|
-
text: `unknown worktree operation: ${op}. Supported: create, promote, drop`,
|
|
164
|
-
exitCode: 2,
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
function usage() {
|
|
168
|
-
return {
|
|
169
|
-
ok: false,
|
|
170
|
-
text: 'Usage: pugi worktree <op>\n' +
|
|
171
|
-
' pugi worktree create [branch]\n' +
|
|
172
|
-
' pugi worktree promote <path>\n' +
|
|
173
|
-
' pugi worktree drop <path>',
|
|
174
|
-
exitCode: 2,
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
//# sourceMappingURL=worktree.js.map
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `pugi worktrees <op>` — .
|
|
3
|
-
*
|
|
4
|
-
* Plural surface for the agent-bound worktree manager. Distinct from the
|
|
5
|
-
* singular `pugi worktree <op>` which manages UUID-keyed
|
|
6
|
-
* scratch worktrees for the manual `create / promote / drop` flow.
|
|
7
|
-
*
|
|
8
|
-
* pugi worktrees list # show active agent worktrees
|
|
9
|
-
* pugi worktrees cleanup <agent-id> # remove one
|
|
10
|
-
* pugi worktrees cleanup --all-stale # sweep orphans + completed/failed
|
|
11
|
-
* pugi worktrees cleanup --all-stale --dry-run
|
|
12
|
-
*
|
|
13
|
-
* Output: human-readable by default, NDJSON envelope under --json.
|
|
14
|
-
*
|
|
15
|
-
* Brand voice: ASCII only, no emoji, no banned words.
|
|
16
|
-
*/
|
|
17
|
-
import { runStaleCleanup } from '../../core/worktree-manager/cleanup.js';
|
|
18
|
-
import { WorktreeManager } from '../../core/worktree-manager/manager.js';
|
|
19
|
-
export async function runWorktreesCommand(args, opts) {
|
|
20
|
-
const [op, ...rest] = args;
|
|
21
|
-
if (!op)
|
|
22
|
-
return usage();
|
|
23
|
-
if (op === 'list') {
|
|
24
|
-
return runList(opts);
|
|
25
|
-
}
|
|
26
|
-
if (op === 'cleanup') {
|
|
27
|
-
return runCleanup(rest, opts);
|
|
28
|
-
}
|
|
29
|
-
return {
|
|
30
|
-
ok: false,
|
|
31
|
-
text: `unknown worktrees operation: ${op}. Supported: list, cleanup`,
|
|
32
|
-
exitCode: 2,
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
function runList(opts) {
|
|
36
|
-
const manager = new WorktreeManager({ cwd: opts.cwd });
|
|
37
|
-
const result = manager.list();
|
|
38
|
-
if (!result.ok) {
|
|
39
|
-
return {
|
|
40
|
-
ok: false,
|
|
41
|
-
text: opts.json
|
|
42
|
-
? JSON.stringify(result, null, 2)
|
|
43
|
-
: `worktrees list failed: ${result.reason}: ${result.detail}`,
|
|
44
|
-
exitCode: 1,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
const rows = result.value;
|
|
48
|
-
if (opts.json) {
|
|
49
|
-
return {
|
|
50
|
-
ok: true,
|
|
51
|
-
text: JSON.stringify({ worktrees: rows }, null, 2),
|
|
52
|
-
exitCode: 0,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
if (rows.length === 0) {
|
|
56
|
-
return { ok: true, text: 'no agent worktrees', exitCode: 0 };
|
|
57
|
-
}
|
|
58
|
-
const lines = [];
|
|
59
|
-
lines.push('AGENT ID BRANCH GIT PATH');
|
|
60
|
-
for (const row of rows) {
|
|
61
|
-
lines.push(`${pad(row.agentId, 28)}${pad(row.branch, 36)}${pad(row.gitTracked ? 'yes' : 'no', 8)}${row.path}`);
|
|
62
|
-
}
|
|
63
|
-
return { ok: true, text: lines.join('\n'), exitCode: 0 };
|
|
64
|
-
}
|
|
65
|
-
function runCleanup(args, opts) {
|
|
66
|
-
// --all-stale sweeps every classified stale entry. Otherwise the next
|
|
67
|
-
// positional arg is the agent id to remove.
|
|
68
|
-
const allStale = args.includes('--all-stale');
|
|
69
|
-
if (allStale) {
|
|
70
|
-
const report = runStaleCleanup({ cwd: opts.cwd }, opts.dryRun ? { dryRun: true } : {});
|
|
71
|
-
return formatStaleReport(report, opts);
|
|
72
|
-
}
|
|
73
|
-
const agentId = args.find((a) => !a.startsWith('--'));
|
|
74
|
-
if (!agentId) {
|
|
75
|
-
return {
|
|
76
|
-
ok: false,
|
|
77
|
-
text: 'Usage: pugi worktrees cleanup <agent-id> | --all-stale [--dry-run]',
|
|
78
|
-
exitCode: 2,
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
const manager = new WorktreeManager({ cwd: opts.cwd });
|
|
82
|
-
const result = manager.cleanup(agentId);
|
|
83
|
-
if (!result.ok) {
|
|
84
|
-
// Missing-worktree is idempotent: surface the structured note but
|
|
85
|
-
// return exit 0 so a double-cleanup in a teardown hook never trips
|
|
86
|
-
// CI. Every other failure mode (invalid id, git failure) stays
|
|
87
|
-
// exit 1.
|
|
88
|
-
return {
|
|
89
|
-
ok: false,
|
|
90
|
-
text: opts.json
|
|
91
|
-
? JSON.stringify(result, null, 2)
|
|
92
|
-
: `cleanup failed: ${result.reason}: ${result.detail}`,
|
|
93
|
-
exitCode: result.reason === 'worktree_missing' ? 0 : 1,
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
return {
|
|
97
|
-
ok: true,
|
|
98
|
-
text: opts.json
|
|
99
|
-
? JSON.stringify({ removed: result.value.removed }, null, 2)
|
|
100
|
-
: `worktree removed: ${result.value.removed}`,
|
|
101
|
-
exitCode: 0,
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
function formatStaleReport(report, opts) {
|
|
105
|
-
if (opts.json) {
|
|
106
|
-
return {
|
|
107
|
-
ok: report.errors.length === 0,
|
|
108
|
-
text: JSON.stringify(report, null, 2),
|
|
109
|
-
exitCode: report.errors.length === 0 ? 0 : 1,
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
const lines = [];
|
|
113
|
-
lines.push(`scanned: ${report.scanned} worktree(s)`);
|
|
114
|
-
if (report.removed.length > 0) {
|
|
115
|
-
lines.push(`removed: ${report.removed.length}`);
|
|
116
|
-
for (const r of report.removed)
|
|
117
|
-
lines.push(` - ${r}`);
|
|
118
|
-
}
|
|
119
|
-
if (report.preserved.length > 0) {
|
|
120
|
-
lines.push(`preserved: ${report.preserved.length}`);
|
|
121
|
-
for (const p of report.preserved)
|
|
122
|
-
lines.push(` - ${p.agentId} (${p.reason})`);
|
|
123
|
-
}
|
|
124
|
-
if (opts.dryRun) {
|
|
125
|
-
lines.push('dry-run: classifications only, nothing removed');
|
|
126
|
-
for (const c of report.classified)
|
|
127
|
-
lines.push(` - ${c.agentId}: ${c.class}`);
|
|
128
|
-
}
|
|
129
|
-
if (report.errors.length > 0) {
|
|
130
|
-
lines.push(`errors: ${report.errors.length}`);
|
|
131
|
-
for (const e of report.errors)
|
|
132
|
-
lines.push(` - ${e.agentId}: ${e.detail}`);
|
|
133
|
-
}
|
|
134
|
-
return {
|
|
135
|
-
ok: report.errors.length === 0,
|
|
136
|
-
text: lines.join('\n'),
|
|
137
|
-
exitCode: report.errors.length === 0 ? 0 : 1,
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
function usage() {
|
|
141
|
-
return {
|
|
142
|
-
ok: false,
|
|
143
|
-
text: 'Usage: pugi worktrees <op>\n' +
|
|
144
|
-
' pugi worktrees list\n' +
|
|
145
|
-
' pugi worktrees cleanup <agent-id>\n' +
|
|
146
|
-
' pugi worktrees cleanup --all-stale [--dry-run]',
|
|
147
|
-
exitCode: 2,
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
function pad(s, n) {
|
|
151
|
-
if (s.length >= n)
|
|
152
|
-
return `${s.slice(0, n - 1)} `;
|
|
153
|
-
return s + ' '.repeat(n - s.length);
|
|
154
|
-
}
|
|
155
|
-
//# sourceMappingURL=worktrees.js.map
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Centralised deprecation warning helper (Trust Sprint item 7).
|
|
3
|
-
*
|
|
4
|
-
* Pugi CLI is in 0.x and we are introducing the first generation of
|
|
5
|
-
* collapsed env vars. Operators with existing scripts need a clear
|
|
6
|
-
* forward path without breakage. Pattern:
|
|
7
|
-
*
|
|
8
|
-
* warnDeprecation('PUGI_OLD_FLAG', 'PUGI_NEW_FLAG=1', 'rationale...');
|
|
9
|
-
*
|
|
10
|
-
* Behaviour:
|
|
11
|
-
* - Emits ONE stderr line per (old, new) pair per process. Repeat
|
|
12
|
-
* calls for the same pair are suppressed so the operator does not
|
|
13
|
-
* see the same noise across many tool invocations in a session.
|
|
14
|
-
* - Silenced entirely when `PUGI_SUPPRESS_DEPRECATION_WARNINGS=1` is
|
|
15
|
-
* set (CI escape hatch; documented in operator-deploy-checklist).
|
|
16
|
-
* - Silenced in test runs via the standard `NODE_ENV=test` /
|
|
17
|
-
* `PUGI_TEST_MODE=1` checks so spec output stays clean.
|
|
18
|
-
*
|
|
19
|
-
* Brand rule: no AI attribution, no em dashes. Copy stays short and
|
|
20
|
-
* actionable so the operator can paste the new form into their script
|
|
21
|
-
* in one read.
|
|
22
|
-
*/
|
|
23
|
-
const warnedPairs = new Set();
|
|
24
|
-
/**
|
|
25
|
-
* Reset the warned-once memo. Tests call this between cases so the
|
|
26
|
-
* one-warning-per-pair guard does not bleed across specs.
|
|
27
|
-
*/
|
|
28
|
-
export function resetDeprecationWarningsForTest() {
|
|
29
|
-
warnedPairs.clear();
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Emit a single deprecation warning to stderr.
|
|
33
|
-
*
|
|
34
|
-
* @param oldName literal name of the deprecated env/flag the operator
|
|
35
|
-
* is using (e.g. 'PUGI_MCP_EXEC_ENABLED').
|
|
36
|
-
* @param newName literal name of the replacement env/flag, including
|
|
37
|
-
* the form an operator should type (e.g.
|
|
38
|
-
* 'PUGI_MCP_ORCHESTRATOR=1').
|
|
39
|
-
* @param hint optional one-line rationale appended after the
|
|
40
|
-
* redirect. Keep under 80 chars; multi-line wrapping
|
|
41
|
-
* is the operator's terminal job, not ours.
|
|
42
|
-
*/
|
|
43
|
-
export function warnDeprecation(oldName, newName, hint) {
|
|
44
|
-
if (isSilenced())
|
|
45
|
-
return;
|
|
46
|
-
const key = `${oldName}->${newName}`;
|
|
47
|
-
if (warnedPairs.has(key))
|
|
48
|
-
return;
|
|
49
|
-
warnedPairs.add(key);
|
|
50
|
-
const baseLine = `pugi: deprecation: ${oldName} is deprecated; prefer ${newName}.`;
|
|
51
|
-
const line = hint && hint.length > 0 ? `${baseLine} ${hint}` : baseLine;
|
|
52
|
-
process.stderr.write(`${line}\n`);
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Internal helper. Lifted so tests can mock or override.
|
|
56
|
-
*/
|
|
57
|
-
function isSilenced() {
|
|
58
|
-
const env = process.env;
|
|
59
|
-
if (env.PUGI_SUPPRESS_DEPRECATION_WARNINGS === '1')
|
|
60
|
-
return true;
|
|
61
|
-
if (env.PUGI_TEST_MODE === '1')
|
|
62
|
-
return true;
|
|
63
|
-
// NODE_ENV=test is set by `node --test`'s harness and by the
|
|
64
|
-
// pugi-cli vitest workflows.
|
|
65
|
-
if (env.NODE_ENV === 'test')
|
|
66
|
-
return true;
|
|
67
|
-
return false;
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=deprecation-warning.js.map
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* engine-exit-code - Phase 1 verification gate invariant (PUGI-299).
|
|
3
|
-
*
|
|
4
|
-
* The runtime resolves the CLI exit code from the engine outcome via a
|
|
5
|
-
* deterministic ladder. Extracted from `cli.ts` so the invariant is
|
|
6
|
-
* exercisable from a focused spec without mounting the 9700-LOC entry
|
|
7
|
-
* module.
|
|
8
|
-
*
|
|
9
|
-
* Contract (in priority order):
|
|
10
|
-
* 1. `status === 'needs_verification'` → exit 2
|
|
11
|
-
* 2. `unverifiedReason === 'verification_command_failed'` → exit 1
|
|
12
|
-
* 3. `verificationFailures` is a non-empty array → exit 1
|
|
13
|
-
* 4. `verified === false && status === 'done'` → exit 2
|
|
14
|
-
* 5. `status === 'done'` → exit 0
|
|
15
|
-
* 6. `status === 'failed'` → exit 8
|
|
16
|
-
* 7. `status === 'blocked'` (catch-all) → exit 9
|
|
17
|
-
*
|
|
18
|
-
* The rule fires defensively: rules 3 + 4 cover producer bugs where a
|
|
19
|
-
* future engine adapter forgets to flip `unverifiedReason` or
|
|
20
|
-
* downgrade the status to `needs_verification`. Today
|
|
21
|
-
* `computeVerificationOutcome` always synthesises one of the two,
|
|
22
|
-
* but the invariant locks the contract.
|
|
23
|
-
*/
|
|
24
|
-
export const ENGINE_EXIT_CODES = {
|
|
25
|
-
done: 0,
|
|
26
|
-
failed: 8,
|
|
27
|
-
blocked: 9,
|
|
28
|
-
engine_unavailable: 1,
|
|
29
|
-
needs_verification: 2,
|
|
30
|
-
};
|
|
31
|
-
export function resolveEngineExitCode(result) {
|
|
32
|
-
if (result.status === 'needs_verification') {
|
|
33
|
-
return ENGINE_EXIT_CODES.needs_verification;
|
|
34
|
-
}
|
|
35
|
-
if (result.unverifiedReason === 'verification_command_failed') {
|
|
36
|
-
return 1;
|
|
37
|
-
}
|
|
38
|
-
if (Array.isArray(result.verificationFailures) && result.verificationFailures.length > 0) {
|
|
39
|
-
return 1;
|
|
40
|
-
}
|
|
41
|
-
if (result.verified === false && result.status === 'done') {
|
|
42
|
-
return ENGINE_EXIT_CODES.needs_verification;
|
|
43
|
-
}
|
|
44
|
-
if (result.status === 'done')
|
|
45
|
-
return ENGINE_EXIT_CODES.done;
|
|
46
|
-
if (result.status === 'failed')
|
|
47
|
-
return ENGINE_EXIT_CODES.failed;
|
|
48
|
-
return ENGINE_EXIT_CODES.blocked;
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=engine-exit-code.js.map
|