@pugi/cli 0.1.0-beta.99 → 1.0.0-alpha.10
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
package/dist/tui/login-picker.js
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useState } from 'react';
|
|
3
|
-
import { Box, Text, useInput } from 'ink';
|
|
4
|
-
const ITEMS = [
|
|
5
|
-
{
|
|
6
|
-
provider: 'device',
|
|
7
|
-
title: 'Browser OAuth',
|
|
8
|
-
hint: 'Opens app.pugi.io in your browser to approve this device',
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
provider: 'token',
|
|
12
|
-
title: 'API key',
|
|
13
|
-
hint: 'Paste a personal access token (pugi.io/settings/api-keys)',
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
provider: 'env',
|
|
17
|
-
title: 'Environment variable',
|
|
18
|
-
hint: 'Use PUGI_API_KEY from the current shell',
|
|
19
|
-
},
|
|
20
|
-
];
|
|
21
|
-
/**
|
|
22
|
-
* Arrow-key login picker. Driven entirely by Ink's `useInput`. The
|
|
23
|
-
* component does NOT perform the OAuth flow itself, it only resolves
|
|
24
|
-
* the selected provider back to the caller (CLI dispatcher), which
|
|
25
|
-
* then unmounts Ink and hands control to the existing handlers in
|
|
26
|
-
* runtime/cli.ts.
|
|
27
|
-
*/
|
|
28
|
-
export function LoginPicker(props) {
|
|
29
|
-
const [index, setIndex] = useState(Math.min(Math.max(props.initialIndex ?? 0, 0), ITEMS.length - 1));
|
|
30
|
-
useInput((input, key) => {
|
|
31
|
-
if (key.upArrow || input === 'k') {
|
|
32
|
-
setIndex((current) => (current === 0 ? ITEMS.length - 1 : current - 1));
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
if (key.downArrow || input === 'j') {
|
|
36
|
-
setIndex((current) => (current === ITEMS.length - 1 ? 0 : current + 1));
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
if (key.return) {
|
|
40
|
-
const selected = ITEMS[index];
|
|
41
|
-
if (selected)
|
|
42
|
-
props.onSelect(selected.provider);
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
if (key.escape || input === 'q') {
|
|
46
|
-
props.onCancel();
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
// Number shortcuts mirror the legacy text picker for muscle memory.
|
|
50
|
-
if (input === '1')
|
|
51
|
-
props.onSelect('device');
|
|
52
|
-
if (input === '2')
|
|
53
|
-
props.onSelect('token');
|
|
54
|
-
if (input === '3')
|
|
55
|
-
props.onSelect('env');
|
|
56
|
-
});
|
|
57
|
-
return (_jsxs(Box, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, children: "Sign in to Pugi" }), _jsx(Text, { dimColor: true, children: ` (endpoint: ${props.apiUrl})` })] }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: ITEMS.map((item, itemIndex) => {
|
|
58
|
-
const isSelected = itemIndex === index;
|
|
59
|
-
return (_jsx(PickerRow, { isSelected: isSelected, title: item.title, hint: item.hint }, item.provider));
|
|
60
|
-
}) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: '↑/↓ select Enter confirm Esc cancel' }) })] }));
|
|
61
|
-
}
|
|
62
|
-
function PickerRow({ isSelected, title, hint, }) {
|
|
63
|
-
// Arrow glyph + padded title so highlighted and dim rows share
|
|
64
|
-
// column alignment.
|
|
65
|
-
const indicator = isSelected ? '▸ ' : ' ';
|
|
66
|
-
const padded = title.padEnd(22, ' ');
|
|
67
|
-
return (_jsxs(Text, { children: [_jsxs(Text, { color: isSelected ? 'cyan' : undefined, bold: isSelected, children: [indicator, padded] }), _jsx(Text, { dimColor: true, children: hint })] }));
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=login-picker.js.map
|
|
@@ -1,266 +0,0 @@
|
|
|
1
|
-
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Box, Text } from 'ink';
|
|
3
|
-
const HEADING_COLORS = ['cyan', 'magenta', 'yellow'];
|
|
4
|
-
/**
|
|
5
|
-
* Very small keyword table for cosmetic code accent. The fence label is
|
|
6
|
-
* matched case-insensitively against a handful of languages we expect
|
|
7
|
-
* the personas to emit (ts/tsx/js/jsx/py/sh). Unknown languages render
|
|
8
|
-
* the body in white - no syntax error, no warning. Tests assert that
|
|
9
|
-
* an empty fence label still produces a bordered Box (no crash).
|
|
10
|
-
*/
|
|
11
|
-
const KEYWORDS_BY_LANG = {
|
|
12
|
-
ts: ['const', 'let', 'var', 'function', 'class', 'interface', 'type', 'import', 'export', 'from', 'return', 'if', 'else', 'for', 'while', 'await', 'async', 'new', 'this', 'static', 'public', 'private', 'protected', 'readonly', 'extends', 'implements'],
|
|
13
|
-
tsx: ['const', 'let', 'var', 'function', 'class', 'interface', 'type', 'import', 'export', 'from', 'return', 'if', 'else', 'for', 'while', 'await', 'async', 'new', 'this', 'static', 'public', 'private', 'protected', 'readonly', 'extends', 'implements'],
|
|
14
|
-
js: ['const', 'let', 'var', 'function', 'class', 'import', 'export', 'from', 'return', 'if', 'else', 'for', 'while', 'await', 'async', 'new', 'this'],
|
|
15
|
-
jsx: ['const', 'let', 'var', 'function', 'class', 'import', 'export', 'from', 'return', 'if', 'else', 'for', 'while', 'await', 'async', 'new', 'this'],
|
|
16
|
-
py: ['def', 'class', 'import', 'from', 'return', 'if', 'else', 'elif', 'for', 'while', 'with', 'as', 'try', 'except', 'finally', 'raise', 'lambda', 'pass', 'yield', 'None', 'True', 'False'],
|
|
17
|
-
sh: ['if', 'then', 'else', 'fi', 'for', 'do', 'done', 'while', 'case', 'esac', 'function', 'return', 'export'],
|
|
18
|
-
bash: ['if', 'then', 'else', 'fi', 'for', 'do', 'done', 'while', 'case', 'esac', 'function', 'return', 'export'],
|
|
19
|
-
};
|
|
20
|
-
/**
|
|
21
|
-
* Top-level entry point. Splits the source into lines, runs the
|
|
22
|
-
* block-level state machine, and emits an Ink tree. The component is
|
|
23
|
-
* memo-friendly (pure function of `source`) but we don't wrap in
|
|
24
|
-
* React.memo here - the conversation pane already memoises row keys.
|
|
25
|
-
*/
|
|
26
|
-
export function MarkdownRender(props) {
|
|
27
|
-
const blocks = parseBlocks(props.source);
|
|
28
|
-
const children = blocks.map((block, index) => renderBlock(block, index));
|
|
29
|
-
if (props.inline) {
|
|
30
|
-
return _jsx(_Fragment, { children: children });
|
|
31
|
-
}
|
|
32
|
-
return _jsx(Box, { flexDirection: "column", children: children });
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Walk the source line by line and emit one Block per visual unit. The
|
|
36
|
-
* state machine has two modes: default (heading / list / paragraph) and
|
|
37
|
-
* in-code (every line is appended verbatim to the current code block).
|
|
38
|
-
*
|
|
39
|
-
* Inside a code fence we DO NOT process inline syntax - the body is
|
|
40
|
-
* preserved literally so the operator sees code that actually runs.
|
|
41
|
-
*/
|
|
42
|
-
function parseBlocks(source) {
|
|
43
|
-
const lines = source.split(/\r?\n/);
|
|
44
|
-
const blocks = [];
|
|
45
|
-
let inCode = false;
|
|
46
|
-
let codeLang = '';
|
|
47
|
-
let codeBody = [];
|
|
48
|
-
for (const raw of lines) {
|
|
49
|
-
const line = raw;
|
|
50
|
-
if (inCode) {
|
|
51
|
-
if (/^```/.test(line)) {
|
|
52
|
-
blocks.push({ kind: 'code', lang: codeLang, body: codeBody.join('\n') });
|
|
53
|
-
inCode = false;
|
|
54
|
-
codeBody = [];
|
|
55
|
-
codeLang = '';
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
|
-
codeBody.push(line);
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
const fenceMatch = /^```([A-Za-z0-9_+-]*)\s*$/.exec(line);
|
|
62
|
-
if (fenceMatch) {
|
|
63
|
-
inCode = true;
|
|
64
|
-
codeLang = (fenceMatch[1] ?? '').toLowerCase();
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
if (line.trim().length === 0) {
|
|
68
|
-
blocks.push({ kind: 'blank' });
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
const headingMatch = /^(#{1,3})\s+(.+?)\s*#*\s*$/.exec(line);
|
|
72
|
-
if (headingMatch) {
|
|
73
|
-
const level = headingMatch[1].length;
|
|
74
|
-
const text = headingMatch[2];
|
|
75
|
-
blocks.push({ kind: 'heading', level, text });
|
|
76
|
-
continue;
|
|
77
|
-
}
|
|
78
|
-
const bulletMatch = /^\s*[-*]\s+(.+)$/.exec(line);
|
|
79
|
-
if (bulletMatch) {
|
|
80
|
-
blocks.push({ kind: 'bullet', text: bulletMatch[1] });
|
|
81
|
-
continue;
|
|
82
|
-
}
|
|
83
|
-
const orderedMatch = /^\s*(\d+)\.\s+(.+)$/.exec(line);
|
|
84
|
-
if (orderedMatch) {
|
|
85
|
-
blocks.push({ kind: 'ordered', index: orderedMatch[1], text: orderedMatch[2] });
|
|
86
|
-
continue;
|
|
87
|
-
}
|
|
88
|
-
blocks.push({ kind: 'paragraph', text: line });
|
|
89
|
-
}
|
|
90
|
-
// Unterminated fence: surface what we have as code so the operator
|
|
91
|
-
// still sees the body. Mirrors GitHub's render behavior.
|
|
92
|
-
if (inCode) {
|
|
93
|
-
blocks.push({ kind: 'code', lang: codeLang, body: codeBody.join('\n') });
|
|
94
|
-
}
|
|
95
|
-
return blocks;
|
|
96
|
-
}
|
|
97
|
-
/* ------------------------------------------------------------------ */
|
|
98
|
-
/* Block renderers */
|
|
99
|
-
/* ------------------------------------------------------------------ */
|
|
100
|
-
function renderBlock(block, key) {
|
|
101
|
-
switch (block.kind) {
|
|
102
|
-
case 'heading': {
|
|
103
|
-
const color = HEADING_COLORS[block.level - 1] ?? 'cyan';
|
|
104
|
-
const prefix = '#'.repeat(block.level);
|
|
105
|
-
return (_jsx(Text, { bold: true, color: color, children: `${prefix} ${block.text}` }, key));
|
|
106
|
-
}
|
|
107
|
-
case 'paragraph':
|
|
108
|
-
return (_jsx(Text, { children: renderInline(block.text) }, key));
|
|
109
|
-
case 'bullet':
|
|
110
|
-
return (_jsxs(Box, { children: [_jsx(Text, { color: "#3da9fc", children: '• ' }), _jsx(Text, { children: renderInline(block.text) })] }, key));
|
|
111
|
-
case 'ordered':
|
|
112
|
-
return (_jsxs(Box, { children: [_jsx(Text, { color: "#3da9fc", children: `${block.index}. ` }), _jsx(Text, { children: renderInline(block.text) })] }, key));
|
|
113
|
-
case 'code':
|
|
114
|
-
return renderCodeBlock(block.lang, block.body, key);
|
|
115
|
-
case 'blank':
|
|
116
|
-
// One-line spacer between blocks. We render an empty Text so the
|
|
117
|
-
// height accounting in Ink matches what the operator sees.
|
|
118
|
-
return _jsx(Text, { children: " " }, key);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
function renderCodeBlock(lang, body, key) {
|
|
122
|
-
const lines = body.split('\n');
|
|
123
|
-
const keywords = KEYWORDS_BY_LANG[lang] ?? [];
|
|
124
|
-
return (_jsx(Box, { borderStyle: "round", borderColor: "gray", flexDirection: "column", paddingX: 1, children: lines.map((line, index) => (_jsx(Text, { children: renderCodeLine(line, keywords) }, index))) }, key));
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Per-line code accent. We do NOT build a real lexer - we split on
|
|
128
|
-
* whitespace + punctuation boundaries and color matched keywords cyan,
|
|
129
|
-
* single/double quoted strings green, and `//` / `#` comment tails gray.
|
|
130
|
-
* The output is a list of Ink Text spans. Anything unmatched stays
|
|
131
|
-
* plain white.
|
|
132
|
-
*/
|
|
133
|
-
function renderCodeLine(line, keywords) {
|
|
134
|
-
// Comment tail wins first - we strip it and color the rest.
|
|
135
|
-
const commentIndex = findCommentStart(line);
|
|
136
|
-
const code = commentIndex >= 0 ? line.slice(0, commentIndex) : line;
|
|
137
|
-
const comment = commentIndex >= 0 ? line.slice(commentIndex) : '';
|
|
138
|
-
const spans = [];
|
|
139
|
-
// Tokenise the code portion: alternate runs of word chars vs the rest.
|
|
140
|
-
// Strings are matched as a whole quoted span. The regex is anchored
|
|
141
|
-
// sticky to avoid catastrophic backtracking on long lines.
|
|
142
|
-
const tokenRe = /("[^"]*"|'[^']*'|`[^`]*`|\w+|\s+|[^\s\w]+)/g;
|
|
143
|
-
let match;
|
|
144
|
-
let key = 0;
|
|
145
|
-
while ((match = tokenRe.exec(code)) !== null) {
|
|
146
|
-
const tok = match[0];
|
|
147
|
-
if (/^["'`].*["'`]$/.test(tok)) {
|
|
148
|
-
spans.push(_jsx(Text, { color: "green", children: tok }, key));
|
|
149
|
-
}
|
|
150
|
-
else if (keywords.includes(tok)) {
|
|
151
|
-
spans.push(_jsx(Text, { color: "#3da9fc", bold: true, children: tok }, key));
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
spans.push(_jsx(Text, { children: tok }, key));
|
|
155
|
-
}
|
|
156
|
-
key += 1;
|
|
157
|
-
}
|
|
158
|
-
if (comment.length > 0) {
|
|
159
|
-
spans.push(_jsx(Text, { color: "gray", children: comment }, "comment"));
|
|
160
|
-
}
|
|
161
|
-
return _jsx(_Fragment, { children: spans });
|
|
162
|
-
}
|
|
163
|
-
function findCommentStart(line) {
|
|
164
|
-
// Single-line // or # outside of string literals. The probe is
|
|
165
|
-
// adequate for the persona-emitted snippets - a string literal that
|
|
166
|
-
// contains `//` would mis-color, but the output stays readable.
|
|
167
|
-
let inString = null;
|
|
168
|
-
for (let i = 0; i < line.length; i += 1) {
|
|
169
|
-
const ch = line[i];
|
|
170
|
-
if (inString) {
|
|
171
|
-
if (ch === inString && line[i - 1] !== '\\')
|
|
172
|
-
inString = null;
|
|
173
|
-
continue;
|
|
174
|
-
}
|
|
175
|
-
if (ch === '"' || ch === "'" || ch === '`') {
|
|
176
|
-
inString = ch;
|
|
177
|
-
continue;
|
|
178
|
-
}
|
|
179
|
-
if (ch === '/' && line[i + 1] === '/')
|
|
180
|
-
return i;
|
|
181
|
-
if (ch === '#')
|
|
182
|
-
return i;
|
|
183
|
-
}
|
|
184
|
-
return -1;
|
|
185
|
-
}
|
|
186
|
-
/* ------------------------------------------------------------------ */
|
|
187
|
-
/* Inline tokeniser */
|
|
188
|
-
/* ------------------------------------------------------------------ */
|
|
189
|
-
/**
|
|
190
|
-
* Parse one paragraph line into a list of inline spans, then render
|
|
191
|
-
* them as Ink Text nodes. We walk the source left-to-right and greedily
|
|
192
|
-
* consume the longest delimiter we find. Unmatched delimiters fall
|
|
193
|
-
* through as literal text - personas type `**` mid-sentence sometimes.
|
|
194
|
-
*/
|
|
195
|
-
function renderInline(source) {
|
|
196
|
-
const spans = tokeniseInline(source);
|
|
197
|
-
return (_jsx(_Fragment, { children: spans.map((span, index) => renderSpan(span, index)) }));
|
|
198
|
-
}
|
|
199
|
-
function tokeniseInline(source) {
|
|
200
|
-
const spans = [];
|
|
201
|
-
let buffer = '';
|
|
202
|
-
let i = 0;
|
|
203
|
-
while (i < source.length) {
|
|
204
|
-
const rest = source.slice(i);
|
|
205
|
-
// Inline code wins over bold/italic so that `**` inside backticks
|
|
206
|
-
// renders literally.
|
|
207
|
-
const codeMatch = /^`([^`]+)`/.exec(rest);
|
|
208
|
-
if (codeMatch) {
|
|
209
|
-
flush(buffer, spans);
|
|
210
|
-
buffer = '';
|
|
211
|
-
spans.push({ kind: 'code', text: codeMatch[1] });
|
|
212
|
-
i += codeMatch[0].length;
|
|
213
|
-
continue;
|
|
214
|
-
}
|
|
215
|
-
// Link before bold/italic so `[text **bold**](url)` renders linkish.
|
|
216
|
-
const linkMatch = /^\[([^\]]+)\]\(([^)\s]+)\)/.exec(rest);
|
|
217
|
-
if (linkMatch) {
|
|
218
|
-
flush(buffer, spans);
|
|
219
|
-
buffer = '';
|
|
220
|
-
spans.push({ kind: 'link', text: linkMatch[1], url: linkMatch[2] });
|
|
221
|
-
i += linkMatch[0].length;
|
|
222
|
-
continue;
|
|
223
|
-
}
|
|
224
|
-
// Bold (**) before italic (*) so the greedy match wins.
|
|
225
|
-
const boldMatch = /^\*\*([^*]+)\*\*/.exec(rest);
|
|
226
|
-
if (boldMatch) {
|
|
227
|
-
flush(buffer, spans);
|
|
228
|
-
buffer = '';
|
|
229
|
-
spans.push({ kind: 'bold', text: boldMatch[1] });
|
|
230
|
-
i += boldMatch[0].length;
|
|
231
|
-
continue;
|
|
232
|
-
}
|
|
233
|
-
const italicMatch = /^\*([^*]+)\*/.exec(rest);
|
|
234
|
-
if (italicMatch) {
|
|
235
|
-
flush(buffer, spans);
|
|
236
|
-
buffer = '';
|
|
237
|
-
spans.push({ kind: 'italic', text: italicMatch[1] });
|
|
238
|
-
i += italicMatch[0].length;
|
|
239
|
-
continue;
|
|
240
|
-
}
|
|
241
|
-
buffer += source[i];
|
|
242
|
-
i += 1;
|
|
243
|
-
}
|
|
244
|
-
flush(buffer, spans);
|
|
245
|
-
return spans;
|
|
246
|
-
}
|
|
247
|
-
function flush(buffer, spans) {
|
|
248
|
-
if (buffer.length === 0)
|
|
249
|
-
return;
|
|
250
|
-
spans.push({ kind: 'text', text: buffer });
|
|
251
|
-
}
|
|
252
|
-
function renderSpan(span, key) {
|
|
253
|
-
switch (span.kind) {
|
|
254
|
-
case 'text':
|
|
255
|
-
return _jsx(Text, { children: span.text }, key);
|
|
256
|
-
case 'bold':
|
|
257
|
-
return _jsx(Text, { bold: true, children: span.text }, key);
|
|
258
|
-
case 'italic':
|
|
259
|
-
return _jsx(Text, { italic: true, children: span.text }, key);
|
|
260
|
-
case 'code':
|
|
261
|
-
return _jsx(Text, { color: "green", children: span.text }, key);
|
|
262
|
-
case 'link':
|
|
263
|
-
return (_jsxs(Text, { children: [_jsx(Text, { color: "#3da9fc", underline: true, children: span.text }), _jsx(Text, { dimColor: true, children: ` (${span.url})` })] }, key));
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
//# sourceMappingURL=markdown-render.js.map
|