@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,316 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `pugi share` / `/share` command handler — .
|
|
3
|
-
*
|
|
4
|
-
* Exports the current session transcript as Markdown to either a GitHub
|
|
5
|
-
* Gist (default when `gh` is available + auth'd) or a pugi.io public URL
|
|
6
|
-
* (`--pugi`). Mirrors the standard tool's `/share` ergonomics — operator can
|
|
7
|
-
* pin a session for portfolio / debugging / team sharing without copy-
|
|
8
|
-
* pasting the REPL pane by hand.
|
|
9
|
-
*
|
|
10
|
-
* Subcommands / flags (see L20 spec):
|
|
11
|
-
*
|
|
12
|
-
* pugi share Default upload — picks gist when available,
|
|
13
|
-
* falls back to pugi.io.
|
|
14
|
-
* pugi share --gist Force gist target; refuses if `gh` is not
|
|
15
|
-
* installed / authenticated.
|
|
16
|
-
* pugi share --pugi Force pugi.io target.
|
|
17
|
-
* pugi share --redact Run PII scrubber first; shows finding
|
|
18
|
-
* counts in the privacy gate banner.
|
|
19
|
-
* pugi share --preview Print transcript to stdout WITHOUT
|
|
20
|
-
* upload. Always implies a redact step IF
|
|
21
|
-
* `--redact` is also set so the operator
|
|
22
|
-
* inspects the scrubbed shape, not the raw.
|
|
23
|
-
* pugi share --yes Skip the y/n confirmation prompt
|
|
24
|
-
* (CI / scripted callers). Default is
|
|
25
|
-
* ALWAYS to ask before uploading. Refuses
|
|
26
|
-
* if the heuristic detects an active
|
|
27
|
-
* `Bearer ` credential regardless of `--yes`.
|
|
28
|
-
* pugi share --json Emit the result envelope as JSON.
|
|
29
|
-
*
|
|
30
|
-
* Privacy gates (mandatory):
|
|
31
|
-
*
|
|
32
|
-
* 1. Active credential heuristic — refuses upload entirely when the
|
|
33
|
-
* transcript contains a live `Bearer <token>` span. Operators who
|
|
34
|
-
* want to share a debug session that captured an auth header MUST
|
|
35
|
-
* run `--redact` first; the redactor masks the credential before
|
|
36
|
-
* the upload path sees it.
|
|
37
|
-
* 2. Confirmation prompt — y/n question shown to the operator before
|
|
38
|
-
* every upload. Bypassed with `--yes`. Refuses upload on `n` /
|
|
39
|
-
* empty / Ctrl-C.
|
|
40
|
-
* 3. Redact preview — when `--redact` is set, the gate banner shows
|
|
41
|
-
* the per-category finding counts BEFORE the upload prompt so the
|
|
42
|
-
* operator sees what would leave the machine.
|
|
43
|
-
*
|
|
44
|
-
* Same handler powers both `pugi share` (top-level) and `/share`
|
|
45
|
-
* (in-REPL slash). The slash side wires `writeOutput` to the REPL's
|
|
46
|
-
* `appendSystemLine` and never hits stdout directly.
|
|
47
|
-
*/
|
|
48
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
49
|
-
import { resolve } from 'node:path';
|
|
50
|
-
import { createInterface } from 'node:readline/promises';
|
|
51
|
-
import { formatTranscript } from '../../core/share/formatter.js';
|
|
52
|
-
import { containsActiveCredential, redactPii, summariseFindings, } from '../../core/share/redactor.js';
|
|
53
|
-
import { uploadShare, } from '../../core/share/uploader.js';
|
|
54
|
-
export function parseShareFlags(args) {
|
|
55
|
-
const flags = {
|
|
56
|
-
target: 'auto',
|
|
57
|
-
redact: false,
|
|
58
|
-
preview: false,
|
|
59
|
-
yes: false,
|
|
60
|
-
json: false,
|
|
61
|
-
};
|
|
62
|
-
for (const arg of args) {
|
|
63
|
-
if (arg === '--gist')
|
|
64
|
-
flags.target = 'gist';
|
|
65
|
-
else if (arg === '--pugi')
|
|
66
|
-
flags.target = 'pugi';
|
|
67
|
-
else if (arg === '--redact')
|
|
68
|
-
flags.redact = true;
|
|
69
|
-
else if (arg === '--preview')
|
|
70
|
-
flags.preview = true;
|
|
71
|
-
else if (arg === '--yes' || arg === '-y')
|
|
72
|
-
flags.yes = true;
|
|
73
|
-
else if (arg === '--json')
|
|
74
|
-
flags.json = true;
|
|
75
|
-
}
|
|
76
|
-
return flags;
|
|
77
|
-
}
|
|
78
|
-
export async function runShareCommand(args, ctx) {
|
|
79
|
-
const flags = parseShareFlags(args);
|
|
80
|
-
const eventsPath = resolve(ctx.workspaceRoot, '.pugi/events.jsonl');
|
|
81
|
-
if (!existsSync(eventsPath)) {
|
|
82
|
-
ctx.writeOutput({
|
|
83
|
-
command: 'share',
|
|
84
|
-
status: 'no_session',
|
|
85
|
-
message: '.pugi/events.jsonl not found',
|
|
86
|
-
}, 'pugi share: no session log found. Run any pugi command first to create .pugi/events.jsonl.');
|
|
87
|
-
process.exitCode = 2;
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
// Read + format. The formatter walks the events stream once; size cap
|
|
91
|
-
// is implicit (we do not chunk multi-GB files because session logs are
|
|
92
|
-
// capped at a few MB by the cost-tracker / compaction subsystems).
|
|
93
|
-
const eventsJsonl = readFileSync(eventsPath, 'utf8');
|
|
94
|
-
const sessionId = ctx.sessionId ?? deriveSessionIdFromEvents(eventsJsonl) ?? 'no-session';
|
|
95
|
-
const formatted = formatTranscript({
|
|
96
|
-
sessionId,
|
|
97
|
-
workspaceRoot: ctx.workspaceRoot,
|
|
98
|
-
cliVersion: ctx.cliVersion,
|
|
99
|
-
eventsJsonl,
|
|
100
|
-
now: ctx.now,
|
|
101
|
-
});
|
|
102
|
-
// Active-credential gate. Refuses even with `--yes`; redact-first IS
|
|
103
|
-
// the only path to share a transcript with a Bearer token. We check
|
|
104
|
-
// BEFORE redact so the operator's intent is clear in the gate banner.
|
|
105
|
-
const hasLiveCredential = containsActiveCredential(formatted.markdown);
|
|
106
|
-
if (hasLiveCredential && !flags.redact) {
|
|
107
|
-
ctx.writeOutput({
|
|
108
|
-
command: 'share',
|
|
109
|
-
status: 'refused_active_credential',
|
|
110
|
-
message: 'Transcript contains an active Bearer credential. Re-run with --redact to scrub it before sharing.',
|
|
111
|
-
}, 'pugi share: refused — transcript contains an active `Bearer ` credential. ' +
|
|
112
|
-
'Re-run with --redact to scrub it before sharing, or open .pugi/events.jsonl to inspect manually.');
|
|
113
|
-
process.exitCode = 4;
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
// Optional redact pass. We run BEFORE the preview/upload decisions so
|
|
117
|
-
// the operator sees what would actually leave their machine.
|
|
118
|
-
let body = formatted.markdown;
|
|
119
|
-
let redactionSummary = null;
|
|
120
|
-
let redactionFindings = [];
|
|
121
|
-
if (flags.redact) {
|
|
122
|
-
const result = redactPii(body);
|
|
123
|
-
body = result.output;
|
|
124
|
-
redactionSummary = summariseFindings(result);
|
|
125
|
-
redactionFindings = result.findings;
|
|
126
|
-
}
|
|
127
|
-
// Preview path. Always non-destructive: prints the (possibly redacted)
|
|
128
|
-
// transcript + the redact summary, no upload, no prompt. Operators
|
|
129
|
-
// chain `--preview --redact` to see what would be shared before they
|
|
130
|
-
// commit, which is the L20 spec's "inspect first" affordance.
|
|
131
|
-
if (flags.preview) {
|
|
132
|
-
const payload = {
|
|
133
|
-
command: 'share',
|
|
134
|
-
status: 'preview',
|
|
135
|
-
sessionId,
|
|
136
|
-
turnCount: formatted.turnCount,
|
|
137
|
-
eventCount: formatted.eventCount,
|
|
138
|
-
redact: flags.redact,
|
|
139
|
-
redactionSummary,
|
|
140
|
-
redactionFindings,
|
|
141
|
-
markdown: body,
|
|
142
|
-
};
|
|
143
|
-
const text = [
|
|
144
|
-
redactionSummary ? `${redactionSummary}` : null,
|
|
145
|
-
'--- transcript preview (not uploaded) ---',
|
|
146
|
-
body,
|
|
147
|
-
]
|
|
148
|
-
.filter((line) => line !== null)
|
|
149
|
-
.join('\n');
|
|
150
|
-
ctx.writeOutput(payload, text);
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
// Resolve the target. `auto` picks gist if `gh` is available, else
|
|
154
|
-
// falls back to pugi.io. The probe is best-effort — a missing `gh`
|
|
155
|
-
// surfaces as `ghAvailable -> false` and we route to pugi without an
|
|
156
|
-
// error.
|
|
157
|
-
const resolvedTarget = await pickTarget(flags.target, ctx);
|
|
158
|
-
// Confirmation gate. Refused by default unless `--yes`.
|
|
159
|
-
if (!flags.yes) {
|
|
160
|
-
const promptText = redactionSummary
|
|
161
|
-
? `${redactionSummary} Share session transcript to ${resolvedTarget}? [y/N] `
|
|
162
|
-
: `Share session transcript to ${resolvedTarget}? [y/N] `;
|
|
163
|
-
const answer = (await ((ctx.promptYesNo ?? defaultPromptYesNo)(promptText))).trim().toLowerCase();
|
|
164
|
-
if (answer !== 'y' && answer !== 'yes') {
|
|
165
|
-
ctx.writeOutput({
|
|
166
|
-
command: 'share',
|
|
167
|
-
status: 'cancelled',
|
|
168
|
-
target: resolvedTarget,
|
|
169
|
-
message: 'Operator declined the upload.',
|
|
170
|
-
}, 'pugi share: cancelled.');
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
// Resolve pugi.io credentials lazily — gist target does not need them.
|
|
175
|
-
let credential = null;
|
|
176
|
-
if (resolvedTarget === 'pugi') {
|
|
177
|
-
credential = ctx.resolveCredential ? await safeResolveCredential(ctx.resolveCredential) : null;
|
|
178
|
-
}
|
|
179
|
-
const uploadReq = {
|
|
180
|
-
target: resolvedTarget,
|
|
181
|
-
sessionId,
|
|
182
|
-
markdown: body,
|
|
183
|
-
description: `Pugi session ${sessionId}`,
|
|
184
|
-
...(credential?.apiUrl !== undefined ? { apiUrl: credential.apiUrl } : {}),
|
|
185
|
-
...(credential?.apiToken !== undefined ? { apiToken: credential.apiToken } : {}),
|
|
186
|
-
...(ctx.execaLike !== undefined ? { execaLike: ctx.execaLike } : {}),
|
|
187
|
-
...(ctx.fetchLike !== undefined ? { fetchLike: ctx.fetchLike } : {}),
|
|
188
|
-
};
|
|
189
|
-
const result = await uploadShare(uploadReq);
|
|
190
|
-
emitUploadResult(ctx, sessionId, resolvedTarget, redactionSummary, redactionFindings, result);
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Default-target selection. `--gist` / `--pugi` are honoured verbatim;
|
|
194
|
-
* `auto` consults the `gh` probe and picks gist when available. We
|
|
195
|
-
* deliberately do not cache the probe — it costs one syscall and the
|
|
196
|
-
* operator might `gh auth login` between two `pugi share` runs.
|
|
197
|
-
*/
|
|
198
|
-
async function pickTarget(requested, ctx) {
|
|
199
|
-
if (requested === 'gist')
|
|
200
|
-
return 'gist';
|
|
201
|
-
if (requested === 'pugi')
|
|
202
|
-
return 'pugi';
|
|
203
|
-
// auto
|
|
204
|
-
const probe = ctx.ghAvailable ?? defaultGhAvailable(ctx.execaLike);
|
|
205
|
-
return (await probe()) ? 'gist' : 'pugi';
|
|
206
|
-
}
|
|
207
|
-
function defaultGhAvailable(execaLike) {
|
|
208
|
-
return async () => {
|
|
209
|
-
if (!execaLike) {
|
|
210
|
-
// Production: try to spawn `gh --version`. The default execa shim
|
|
211
|
-
// in uploader.ts is the right one but importing it here would
|
|
212
|
-
// create a small cycle; instead we replicate the minimal probe.
|
|
213
|
-
try {
|
|
214
|
-
const { defaultExecaLike } = await import('../../core/share/uploader.js');
|
|
215
|
-
const result = await defaultExecaLike('gh', ['--version']);
|
|
216
|
-
return result.exitCode === 0;
|
|
217
|
-
}
|
|
218
|
-
catch {
|
|
219
|
-
return false;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
try {
|
|
223
|
-
const result = await execaLike('gh', ['--version']);
|
|
224
|
-
return result.exitCode === 0;
|
|
225
|
-
}
|
|
226
|
-
catch {
|
|
227
|
-
return false;
|
|
228
|
-
}
|
|
229
|
-
};
|
|
230
|
-
}
|
|
231
|
-
async function defaultPromptYesNo(question) {
|
|
232
|
-
if (!process.stdin.isTTY) {
|
|
233
|
-
// Non-interactive caller without --yes: refuse rather than block on
|
|
234
|
-
// an empty stdin. Mirrors the install-trust pattern in skills.ts.
|
|
235
|
-
process.stdout.write(`${question}\n(non-interactive stdin; declining)\n`);
|
|
236
|
-
return 'n';
|
|
237
|
-
}
|
|
238
|
-
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
239
|
-
try {
|
|
240
|
-
return await rl.question(question);
|
|
241
|
-
}
|
|
242
|
-
finally {
|
|
243
|
-
rl.close();
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
async function safeResolveCredential(resolver) {
|
|
247
|
-
try {
|
|
248
|
-
return await resolver();
|
|
249
|
-
}
|
|
250
|
-
catch {
|
|
251
|
-
return null;
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
/**
|
|
255
|
-
* Walk the JSONL log from the tail and pick the newest `session.created`
|
|
256
|
-
* id. Mirrors the helper in cost.ts so the two surfaces agree on what
|
|
257
|
-
* "current session" means.
|
|
258
|
-
*/
|
|
259
|
-
function deriveSessionIdFromEvents(raw) {
|
|
260
|
-
const lines = raw.split('\n').filter((line) => line.trim().length > 0);
|
|
261
|
-
for (let i = lines.length - 1; i >= 0; i -= 1) {
|
|
262
|
-
try {
|
|
263
|
-
const parsed = JSON.parse(lines[i]);
|
|
264
|
-
if (parsed.type === 'session' && parsed.name === 'created' && typeof parsed.sessionId === 'string') {
|
|
265
|
-
return parsed.sessionId;
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
catch {
|
|
269
|
-
// skip
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
return null;
|
|
273
|
-
}
|
|
274
|
-
function emitUploadResult(ctx, sessionId, target, redactionSummary, redactionFindings, result) {
|
|
275
|
-
if (result.ok) {
|
|
276
|
-
const payload = {
|
|
277
|
-
command: 'share',
|
|
278
|
-
status: 'ok',
|
|
279
|
-
sessionId,
|
|
280
|
-
target,
|
|
281
|
-
url: result.url,
|
|
282
|
-
remoteId: result.remoteId ?? null,
|
|
283
|
-
redact: redactionSummary !== null,
|
|
284
|
-
redactionSummary,
|
|
285
|
-
redactionFindings,
|
|
286
|
-
};
|
|
287
|
-
const text = [
|
|
288
|
-
redactionSummary,
|
|
289
|
-
`pugi share: uploaded to ${target}.`,
|
|
290
|
-
`URL: ${result.url}`,
|
|
291
|
-
]
|
|
292
|
-
.filter((line) => line !== null)
|
|
293
|
-
.join('\n');
|
|
294
|
-
ctx.writeOutput(payload, text);
|
|
295
|
-
return;
|
|
296
|
-
}
|
|
297
|
-
const payload = {
|
|
298
|
-
command: 'share',
|
|
299
|
-
status: 'upload_failed',
|
|
300
|
-
sessionId,
|
|
301
|
-
target,
|
|
302
|
-
reason: result.reason,
|
|
303
|
-
message: result.message,
|
|
304
|
-
redact: redactionSummary !== null,
|
|
305
|
-
redactionSummary,
|
|
306
|
-
};
|
|
307
|
-
const text = [
|
|
308
|
-
redactionSummary,
|
|
309
|
-
`pugi share: ${result.reason} — ${result.message}`,
|
|
310
|
-
]
|
|
311
|
-
.filter((line) => line !== null)
|
|
312
|
-
.join('\n');
|
|
313
|
-
ctx.writeOutput(payload, text);
|
|
314
|
-
process.exitCode = 3;
|
|
315
|
-
}
|
|
316
|
-
//# sourceMappingURL=share.js.map
|