@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,294 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Update check + install-method detection — Sprint .
|
|
3
|
-
*
|
|
4
|
-
* Shows the REPL operator a one-shot banner at startup when the npm
|
|
5
|
-
* registry advertises a `@pugi/cli` version newer than what is running.
|
|
6
|
-
* The banner adapts the upgrade hint per install method so the operator
|
|
7
|
-
* sees a copy-pasteable command for their toolchain (brew / npm / curl).
|
|
8
|
-
*
|
|
9
|
-
* Constraints baked into the spec:
|
|
10
|
-
*
|
|
11
|
-
* - **Default-quiet.** Network errors, cache misses, and the
|
|
12
|
-
* `PUGI_SKIP_UPDATE_BANNER=1` env var all return `null` so the
|
|
13
|
-
* REPL renders unchanged.
|
|
14
|
-
* - **24h cache.** The check runs at most once per day, persisted to
|
|
15
|
-
* `~/.pugi/update-check.json`. Repeated REPL launches in the same
|
|
16
|
-
* day skip the registry call entirely.
|
|
17
|
-
* - **3s timeout.** A slow registry never blocks REPL startup; the
|
|
18
|
-
* undici request is aborted after 3 seconds and treated as a
|
|
19
|
-
* silent miss.
|
|
20
|
-
* - **Pure helpers, IO at the edge.** Detection, comparison, cache
|
|
21
|
-
* decode/encode are exported as pure functions with explicit env /
|
|
22
|
-
* home / now / fetch seams so the spec's 8 tests can drive every
|
|
23
|
-
* branch without touching the network or the real filesystem.
|
|
24
|
-
*/
|
|
25
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
26
|
-
import { homedir } from 'node:os';
|
|
27
|
-
import { resolve } from 'node:path';
|
|
28
|
-
import { request } from 'undici';
|
|
29
|
-
const REGISTRY_URL = 'https://registry.npmjs.org/@pugi/cli/latest';
|
|
30
|
-
const FETCH_TIMEOUT_MS = 3_000;
|
|
31
|
-
const CACHE_TTL_MS = 24 * 60 * 60 * 1_000;
|
|
32
|
-
/**
|
|
33
|
-
* Pin the install toolchain from the binary path + a small set of env
|
|
34
|
-
* markers. Order matters: the curl installer sets PUGI_VIA_CURL_INSTALL
|
|
35
|
-
* unconditionally, so we honor it first; brew is path-based; npm is the
|
|
36
|
-
* fallback for anything that looks like a node_modules layout; otherwise
|
|
37
|
-
* unknown.
|
|
38
|
-
*/
|
|
39
|
-
export function detectInstallMethod(input = {}) {
|
|
40
|
-
const env = input.env ?? process.env;
|
|
41
|
-
const execPath = input.execPath ?? process.execPath;
|
|
42
|
-
if (env.PUGI_VIA_CURL_INSTALL === '1')
|
|
43
|
-
return 'curl';
|
|
44
|
-
// Homebrew on macOS keeps node + bin shims under /opt/homebrew (Apple
|
|
45
|
-
// silicon) or /usr/local/Cellar (Intel). Either suffices to pin brew.
|
|
46
|
-
if (execPath.includes('/opt/homebrew/') ||
|
|
47
|
-
execPath.includes('/usr/local/Cellar/') ||
|
|
48
|
-
execPath.includes('/homebrew/')) {
|
|
49
|
-
return 'brew';
|
|
50
|
-
}
|
|
51
|
-
// npm-global layouts: nvm, fnm, asdf, volta, yarn-global, and the
|
|
52
|
-
// classic `~/.npm-packages` PATH prefix all leave a fingerprint on
|
|
53
|
-
// execPath or PATH. Treat any of these as `npm` so the banner shows
|
|
54
|
-
// the matching `npm install -g` hint.
|
|
55
|
-
const pathEntries = (env.PATH ?? '').split(':');
|
|
56
|
-
const npmFingerprints = [
|
|
57
|
-
'/.nvm/',
|
|
58
|
-
'/.fnm/',
|
|
59
|
-
'/.volta/',
|
|
60
|
-
'/.asdf/',
|
|
61
|
-
'/.npm-packages/',
|
|
62
|
-
'/.config/yarn/global',
|
|
63
|
-
];
|
|
64
|
-
if (npmFingerprints.some((marker) => execPath.includes(marker)))
|
|
65
|
-
return 'npm';
|
|
66
|
-
if (pathEntries.some((entry) => entry.includes('/.npm-packages') || entry.includes('/.config/yarn/global'))) {
|
|
67
|
-
return 'npm';
|
|
68
|
-
}
|
|
69
|
-
if (execPath.includes('/node_modules/'))
|
|
70
|
-
return 'npm';
|
|
71
|
-
return 'unknown';
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Cache path resolver. PUGI_HOME wins (test seam matches the rest of
|
|
75
|
-
* the codebase), else `~/.pugi/update-check.json`.
|
|
76
|
-
*/
|
|
77
|
-
export function resolveCachePath(home, env = process.env) {
|
|
78
|
-
const root = env.PUGI_HOME ?? resolve(home ?? homedir(), '.pugi');
|
|
79
|
-
return resolve(root, 'update-check.json');
|
|
80
|
-
}
|
|
81
|
-
export function loadCache(home, env = process.env) {
|
|
82
|
-
const path = resolveCachePath(home, env);
|
|
83
|
-
if (!existsSync(path))
|
|
84
|
-
return null;
|
|
85
|
-
try {
|
|
86
|
-
const text = readFileSync(path, 'utf8');
|
|
87
|
-
const parsed = JSON.parse(text);
|
|
88
|
-
if (typeof parsed.checkedAt !== 'string' || typeof parsed.latestVersion !== 'string') {
|
|
89
|
-
return null;
|
|
90
|
-
}
|
|
91
|
-
return { checkedAt: parsed.checkedAt, latestVersion: parsed.latestVersion };
|
|
92
|
-
}
|
|
93
|
-
catch {
|
|
94
|
-
// Corrupt or unreadable cache — treat as no cache. The next write
|
|
95
|
-
// overwrites the file cleanly.
|
|
96
|
-
return null;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
export function saveCache(record, home, env = process.env) {
|
|
100
|
-
const path = resolveCachePath(home, env);
|
|
101
|
-
const dir = path.slice(0, path.lastIndexOf('/'));
|
|
102
|
-
try {
|
|
103
|
-
if (!existsSync(dir))
|
|
104
|
-
mkdirSync(dir, { recursive: true });
|
|
105
|
-
writeFileSync(path, `${JSON.stringify(record, null, 2)}\n`, { encoding: 'utf8' });
|
|
106
|
-
}
|
|
107
|
-
catch {
|
|
108
|
-
// Best-effort. A read-only home or full disk should not crash REPL
|
|
109
|
-
// startup — we just skip caching this round.
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
export function isCacheFresh(record, nowMs) {
|
|
113
|
-
const checkedMs = Date.parse(record.checkedAt);
|
|
114
|
-
if (!Number.isFinite(checkedMs))
|
|
115
|
-
return false;
|
|
116
|
-
return nowMs - checkedMs < CACHE_TTL_MS;
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Compare two semver strings (with prerelease support sufficient for
|
|
120
|
-
* `0.1.0-alpha.6` vs `0.1.0-alpha.7` / `0.1.0-beta.1` / `1.0.0`).
|
|
121
|
-
*
|
|
122
|
-
* Returns:
|
|
123
|
-
* -1 if `a < b`
|
|
124
|
-
* 0 if `a === b`
|
|
125
|
-
* 1 if `a > b`
|
|
126
|
-
*
|
|
127
|
-
* Rules follow semver §11:
|
|
128
|
-
* - Major.Minor.Patch compared numerically left-to-right.
|
|
129
|
-
* - A version with a prerelease tag is LOWER than the same version
|
|
130
|
-
* without one (`1.0.0-alpha` < `1.0.0`).
|
|
131
|
-
* - Prerelease identifiers compared dot-by-dot; numeric chunks
|
|
132
|
-
* numerically, mixed chunks ASCII-lexicographic.
|
|
133
|
-
*/
|
|
134
|
-
export function compareVersions(a, b) {
|
|
135
|
-
const [coreA, preA] = splitVersion(a);
|
|
136
|
-
const [coreB, preB] = splitVersion(b);
|
|
137
|
-
for (let i = 0; i < 3; i += 1) {
|
|
138
|
-
const da = coreA[i] ?? 0;
|
|
139
|
-
const db = coreB[i] ?? 0;
|
|
140
|
-
if (da < db)
|
|
141
|
-
return -1;
|
|
142
|
-
if (da > db)
|
|
143
|
-
return 1;
|
|
144
|
-
}
|
|
145
|
-
if (preA === null && preB === null)
|
|
146
|
-
return 0;
|
|
147
|
-
if (preA === null)
|
|
148
|
-
return 1;
|
|
149
|
-
if (preB === null)
|
|
150
|
-
return -1;
|
|
151
|
-
return comparePrerelease(preA, preB);
|
|
152
|
-
}
|
|
153
|
-
function splitVersion(v) {
|
|
154
|
-
const dashIdx = v.indexOf('-');
|
|
155
|
-
const coreStr = dashIdx === -1 ? v : v.slice(0, dashIdx);
|
|
156
|
-
const preStr = dashIdx === -1 ? null : v.slice(dashIdx + 1);
|
|
157
|
-
const core = coreStr.split('.').map((n) => {
|
|
158
|
-
const parsed = Number.parseInt(n, 10);
|
|
159
|
-
return Number.isFinite(parsed) ? parsed : 0;
|
|
160
|
-
});
|
|
161
|
-
return [core, preStr];
|
|
162
|
-
}
|
|
163
|
-
function comparePrerelease(a, b) {
|
|
164
|
-
const partsA = a.split('.');
|
|
165
|
-
const partsB = b.split('.');
|
|
166
|
-
const max = Math.max(partsA.length, partsB.length);
|
|
167
|
-
for (let i = 0; i < max; i += 1) {
|
|
168
|
-
const pa = partsA[i];
|
|
169
|
-
const pb = partsB[i];
|
|
170
|
-
if (pa === undefined)
|
|
171
|
-
return -1;
|
|
172
|
-
if (pb === undefined)
|
|
173
|
-
return 1;
|
|
174
|
-
const na = Number.parseInt(pa, 10);
|
|
175
|
-
const nb = Number.parseInt(pb, 10);
|
|
176
|
-
const aIsNum = String(na) === pa;
|
|
177
|
-
const bIsNum = String(nb) === pb;
|
|
178
|
-
if (aIsNum && bIsNum) {
|
|
179
|
-
if (na < nb)
|
|
180
|
-
return -1;
|
|
181
|
-
if (na > nb)
|
|
182
|
-
return 1;
|
|
183
|
-
continue;
|
|
184
|
-
}
|
|
185
|
-
if (aIsNum)
|
|
186
|
-
return -1; // numeric < alphanumeric, per semver §11
|
|
187
|
-
if (bIsNum)
|
|
188
|
-
return 1;
|
|
189
|
-
if (pa < pb)
|
|
190
|
-
return -1;
|
|
191
|
-
if (pa > pb)
|
|
192
|
-
return 1;
|
|
193
|
-
}
|
|
194
|
-
return 0;
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* One-shot registry GET. Wrapped in a 3s timeout and silently swallows
|
|
198
|
-
* every failure mode — the spec says cache miss / network error = no
|
|
199
|
-
* banner. Returns the `version` string from npm's well-known
|
|
200
|
-
* `/:pkg/latest` document on success, or `null` on any failure.
|
|
201
|
-
*/
|
|
202
|
-
export async function fetchLatestVersion(fetcher = request) {
|
|
203
|
-
const controller = new AbortController();
|
|
204
|
-
const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
|
|
205
|
-
try {
|
|
206
|
-
const response = await fetcher(REGISTRY_URL, {
|
|
207
|
-
method: 'GET',
|
|
208
|
-
headers: { accept: 'application/json' },
|
|
209
|
-
bodyTimeout: FETCH_TIMEOUT_MS,
|
|
210
|
-
headersTimeout: FETCH_TIMEOUT_MS,
|
|
211
|
-
signal: controller.signal,
|
|
212
|
-
});
|
|
213
|
-
if (response.statusCode < 200 || response.statusCode >= 300) {
|
|
214
|
-
await response.body.dump();
|
|
215
|
-
return null;
|
|
216
|
-
}
|
|
217
|
-
const text = await response.body.text();
|
|
218
|
-
const parsed = JSON.parse(text);
|
|
219
|
-
if (typeof parsed.version !== 'string' || parsed.version.length === 0)
|
|
220
|
-
return null;
|
|
221
|
-
return parsed.version;
|
|
222
|
-
}
|
|
223
|
-
catch {
|
|
224
|
-
return null;
|
|
225
|
-
}
|
|
226
|
-
finally {
|
|
227
|
-
clearTimeout(timer);
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* High-level orchestrator wired into the CLI startup path. Returns the
|
|
232
|
-
* banner payload when an update is available AND every silence rule
|
|
233
|
-
* declines to fire, otherwise `null`.
|
|
234
|
-
*
|
|
235
|
-
* Silence rules (any one of these short-circuits to `null`):
|
|
236
|
-
* - `cliSkip === true` (operator passed `--no-update-check`).
|
|
237
|
-
* - `env.PUGI_SKIP_UPDATE_BANNER === '1'`.
|
|
238
|
-
* - `isTty === false` (CI / piped / scripted invocation).
|
|
239
|
-
* - Cache + network both miss — silent skip per spec.
|
|
240
|
-
* - `installed >= latest` — no upgrade to advertise.
|
|
241
|
-
*/
|
|
242
|
-
export async function checkForUpdate(options) {
|
|
243
|
-
const env = options.env ?? process.env;
|
|
244
|
-
const now = options.now ?? Date.now;
|
|
245
|
-
const cliSkip = options.cliSkip === true;
|
|
246
|
-
const envSkip = env.PUGI_SKIP_UPDATE_BANNER === '1';
|
|
247
|
-
const isTty = options.isTty ??
|
|
248
|
-
(Boolean(process.stdout.isTTY) &&
|
|
249
|
-
Boolean(process.stdin.isTTY));
|
|
250
|
-
if (cliSkip || envSkip || !isTty)
|
|
251
|
-
return null;
|
|
252
|
-
// Cache-first path. A fresh cache (<24h) bypasses the registry round
|
|
253
|
-
// trip entirely so a daily REPL operator pays one network call per
|
|
254
|
-
// calendar day.
|
|
255
|
-
const cached = loadCache(options.home, env);
|
|
256
|
-
let latest = null;
|
|
257
|
-
if (cached && isCacheFresh(cached, now())) {
|
|
258
|
-
latest = cached.latestVersion;
|
|
259
|
-
}
|
|
260
|
-
else {
|
|
261
|
-
latest = await fetchLatestVersion(options.fetcher);
|
|
262
|
-
if (latest) {
|
|
263
|
-
saveCache({ checkedAt: new Date(now()).toISOString(), latestVersion: latest }, options.home, env);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
if (!latest)
|
|
267
|
-
return null;
|
|
268
|
-
if (compareVersions(options.installed, latest) >= 0)
|
|
269
|
-
return null;
|
|
270
|
-
return {
|
|
271
|
-
installed: options.installed,
|
|
272
|
-
latest,
|
|
273
|
-
method: detectInstallMethod({ env }),
|
|
274
|
-
};
|
|
275
|
-
}
|
|
276
|
-
/**
|
|
277
|
-
* Render the per-method upgrade command. Pure helper so the Ink
|
|
278
|
-
* banner component and any future JSON / log surface share one source
|
|
279
|
-
* of truth on the copy.
|
|
280
|
-
*/
|
|
281
|
-
export function upgradeCommand(method) {
|
|
282
|
-
switch (method) {
|
|
283
|
-
case 'brew':
|
|
284
|
-
return 'brew upgrade pugi-io/tap/pugi';
|
|
285
|
-
case 'npm':
|
|
286
|
-
return 'npm install -g @pugi/cli@latest';
|
|
287
|
-
case 'curl':
|
|
288
|
-
return 'curl -fsSL https://install.pugi.io | sh';
|
|
289
|
-
case 'unknown':
|
|
290
|
-
default:
|
|
291
|
-
return 'npm install -g @pugi/cli@latest # or your install method';
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
//# sourceMappingURL=update-check.js.map
|
package/dist/runtime/version.js
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pugi CLI ↔ admin-api version handshake — shared constants.
|
|
3
|
-
*
|
|
4
|
-
* The CLI declares its installed version on every outbound request to
|
|
5
|
-
* the admin-api so the server can enforce a minClientVersion floor and
|
|
6
|
-
* surface a soft-warn for stale-but-allowed installs. See ADR-225 and
|
|
7
|
-
* `apps/admin-api/src/runtime/version.contract.ts` for the server side.
|
|
8
|
-
*
|
|
9
|
-
* # Why the constants live here, not in `@pugi/sdk`
|
|
10
|
-
*
|
|
11
|
-
* The SDK ships to customers as part of the public npm package; bumping
|
|
12
|
-
* a header name there would force a coupled CLI ↔ SDK release. Keeping
|
|
13
|
-
* the constants in the CLI gives us room to evolve the handshake
|
|
14
|
-
* without coupling the SDK's release cadence to it.
|
|
15
|
-
*/
|
|
16
|
-
/**
|
|
17
|
-
* Defensive semver sanitizer — single source of truth for the
|
|
18
|
-
* `0.0.0-unknown` fallback when a partially-published pnpm release
|
|
19
|
-
* leaks `workspace:*` into the version literal. `runtime/cli.ts`
|
|
20
|
-
* re-exports this under its `__test__` surface so the existing
|
|
21
|
-
* cli.ts test corpus keeps working with zero churn.
|
|
22
|
-
*
|
|
23
|
-
* Lives here (not in cli.ts) because the version handshake interceptor
|
|
24
|
-
* needs the same guarantee without pulling in the heavyweight cli.ts
|
|
25
|
-
* module graph during transport bootstrap.
|
|
26
|
-
*/
|
|
27
|
-
export function sanitizeSemver(raw) {
|
|
28
|
-
if (typeof raw !== 'string')
|
|
29
|
-
return '0.0.0-unknown';
|
|
30
|
-
const trimmed = raw.trim();
|
|
31
|
-
if (!trimmed)
|
|
32
|
-
return '0.0.0-unknown';
|
|
33
|
-
const stripped = trimmed.replace(/^(workspace:|npm:|file:)/, '');
|
|
34
|
-
if (/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(stripped)) {
|
|
35
|
-
return stripped;
|
|
36
|
-
}
|
|
37
|
-
return '0.0.0-unknown';
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Installed CLI version — single source of truth for the handshake
|
|
41
|
-
* header value. Mirrors the literal in `runtime/cli.ts` (intentional
|
|
42
|
-
* duplication because the cli.ts module pulls in Ink + half the CLI
|
|
43
|
-
* surface and the transport interceptor must remain side-effect-free
|
|
44
|
-
* during import). When bumping the CLI version BOTH literals must be
|
|
45
|
-
* updated; the release smoke-test (`pack:smoke`) verifies they agree.
|
|
46
|
-
*/
|
|
47
|
-
export const PUGI_CLI_VERSION = sanitizeSemver('0.1.0-beta.98');
|
|
48
|
-
/**
|
|
49
|
-
* Outbound: the CLI's installed semver. Read at request time by
|
|
50
|
-
* `version-interceptor.ts` and injected on every `fetch` call.
|
|
51
|
-
*/
|
|
52
|
-
export const PUGI_CLI_VERSION_HEADER = 'X-Pugi-Cli-Version';
|
|
53
|
-
/**
|
|
54
|
-
* Inbound: the server's recommendation for which CLI version operators
|
|
55
|
-
* should be on. Surfaces through the UpdateBanner alongside the npm
|
|
56
|
-
* registry poll (the higher of the two wins).
|
|
57
|
-
*/
|
|
58
|
-
export const PUGI_CLI_UPGRADE_RECOMMENDED_HEADER = 'X-Pugi-Cli-Upgrade-Recommended';
|
|
59
|
-
/**
|
|
60
|
-
* Inbound: server's own admin-api version. Useful for diagnostics
|
|
61
|
-
* (`pugi doctor --json`) but no enforcement logic keys off it — server
|
|
62
|
-
* drift between admin-api releases is normal during rolling deploys.
|
|
63
|
-
*/
|
|
64
|
-
export const PUGI_SERVER_VERSION_HEADER = 'X-Pugi-Server-Version';
|
|
65
|
-
//# sourceMappingURL=version.js.map
|