@pugi/cli 0.1.0-beta.99 → 1.0.0-alpha.2
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/device-flow.js
DELETED
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useState } from 'react';
|
|
3
|
-
import { Box, Text, useInput } from 'ink';
|
|
4
|
-
const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
5
|
-
const ACCENT_CYAN = 'cyan';
|
|
6
|
-
const ACCENT_RED = 'red';
|
|
7
|
-
/**
|
|
8
|
-
* P2-1 (triple-review): both `userCode` and
|
|
9
|
-
* `verificationUrl` originate from a server response and would render
|
|
10
|
-
* verbatim into Ink `<Text>`. A hostile or compromised server could
|
|
11
|
-
* embed ANSI escape sequences (clear screen, cursor moves, hyperlink
|
|
12
|
-
* faking) and they would EXECUTE in the user's terminal. We whitelist
|
|
13
|
-
* the user code to the documented alphabet (uppercase letters, digits,
|
|
14
|
-
* dashes) and clamp the URL to the same safe-http guard used by the
|
|
15
|
-
* auto-open helper. Anything outside the whitelist renders as a
|
|
16
|
-
* `<invalid>` placeholder so the visual contract stays intact while
|
|
17
|
-
* the dangerous bytes never reach the terminal.
|
|
18
|
-
*/
|
|
19
|
-
const USER_CODE_PATTERN = /^[A-Z0-9-]{1,16}$/;
|
|
20
|
-
function sanitizeUserCode(code) {
|
|
21
|
-
return USER_CODE_PATTERN.test(code) ? code : '<invalid>';
|
|
22
|
-
}
|
|
23
|
-
function hasControlChar(input) {
|
|
24
|
-
// Reject any C0 (0x00-0x1F, 0x7F) or C1 (0x80-0x9F) control byte.
|
|
25
|
-
// ESC (0x1B) is the gateway character for every ANSI escape sequence
|
|
26
|
-
// we care about (CSI, OSC, hyperlink), and CSI alone (0x9B) is the
|
|
27
|
-
// C1 single-byte form some terminals still honour.
|
|
28
|
-
for (let i = 0; i < input.length; i += 1) {
|
|
29
|
-
const code = input.charCodeAt(i);
|
|
30
|
-
if (code <= 0x1f)
|
|
31
|
-
return true;
|
|
32
|
-
if (code === 0x7f)
|
|
33
|
-
return true;
|
|
34
|
-
if (code >= 0x80 && code <= 0x9f)
|
|
35
|
-
return true;
|
|
36
|
-
}
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
39
|
-
function sanitizeDisplayUrl(url) {
|
|
40
|
-
// Reject control characters BEFORE handing to `new URL`. The URL
|
|
41
|
-
// parser preserves ESC bytes inside the path, so a server response
|
|
42
|
-
// with an embedded escape would otherwise round-trip into the Ink
|
|
43
|
-
// render and execute against the user terminal.
|
|
44
|
-
if (hasControlChar(url))
|
|
45
|
-
return '<invalid URL>';
|
|
46
|
-
try {
|
|
47
|
-
const parsed = new URL(url);
|
|
48
|
-
if (parsed.protocol !== 'https:' && parsed.protocol !== 'http:') {
|
|
49
|
-
return '<invalid URL>';
|
|
50
|
-
}
|
|
51
|
-
return url;
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
return '<invalid URL>';
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Pugi device-flow Ink view. Stateless w.r.t. the network — the host
|
|
59
|
-
* supplies `status` and we render the matching frame.
|
|
60
|
-
*/
|
|
61
|
-
export function DeviceFlow(props) {
|
|
62
|
-
const copiedFlashMs = props.copiedFlashMs ?? 800;
|
|
63
|
-
const spinnerIntervalMs = props.spinnerIntervalMs ?? 120;
|
|
64
|
-
const [copied, setCopied] = useState(false);
|
|
65
|
-
const [spinnerFrame, setSpinnerFrame] = useState(0);
|
|
66
|
-
useInput((input, key) => {
|
|
67
|
-
if (key.escape) {
|
|
68
|
-
props.onCancel();
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
if (input === 'c' || input === 'C') {
|
|
72
|
-
// The host owns the clipboard side effect. The component just
|
|
73
|
-
// signals the intent and surfaces the "Copied!" flash.
|
|
74
|
-
props.onCopy();
|
|
75
|
-
setCopied(true);
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
if (key.return && props.status.kind === 'success') {
|
|
79
|
-
props.onContinue();
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
// Spinner pulse — only while polling. Pausing the interval on
|
|
84
|
-
// success/failure avoids a no-op timer surviving past the final
|
|
85
|
-
// render frame.
|
|
86
|
-
useEffect(() => {
|
|
87
|
-
if (props.status.kind !== 'polling')
|
|
88
|
-
return;
|
|
89
|
-
const handle = setInterval(() => {
|
|
90
|
-
setSpinnerFrame((current) => (current + 1) % SPINNER_FRAMES.length);
|
|
91
|
-
}, spinnerIntervalMs);
|
|
92
|
-
return () => clearInterval(handle);
|
|
93
|
-
}, [props.status.kind, spinnerIntervalMs]);
|
|
94
|
-
// "Copied!" auto-clear so the chip flashes briefly without sticking.
|
|
95
|
-
useEffect(() => {
|
|
96
|
-
if (!copied)
|
|
97
|
-
return;
|
|
98
|
-
const handle = setTimeout(() => setCopied(false), copiedFlashMs);
|
|
99
|
-
return () => clearTimeout(handle);
|
|
100
|
-
}, [copied, copiedFlashMs]);
|
|
101
|
-
return (_jsxs(Box, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [_jsx(Box, { children: _jsx(Text, { bold: true, color: ACCENT_CYAN, children: "Authorize Pugi CLI" }) }), _jsx(CodeChip, { code: sanitizeUserCode(props.userCode) }), _jsx(BrowserHintRow, { opened: props.browserOpened, url: sanitizeDisplayUrl(props.verificationUrl), copied: copied }), _jsx(Box, { marginTop: 1, children: _jsx(StatusRow, { status: props.status, spinnerFrame: spinnerFrame }) }), _jsx(Box, { marginTop: 1, children: _jsx(FooterHint, { status: props.status }) })] }));
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Centered short-code "chip". The Pugi device-flow user code is
|
|
105
|
-
* always the 9-character "XXXX-XXXX" form (4 + dash + 4) generated by
|
|
106
|
-
* the Anvil device-flow start endpoint — we render it in cyan-bold so
|
|
107
|
-
* the user's eye lands on it instantly when comparing against the
|
|
108
|
-
* cabinet page.
|
|
109
|
-
*/
|
|
110
|
-
function CodeChip({ code }) {
|
|
111
|
-
return (_jsx(Box, { marginTop: 1, justifyContent: "center", children: _jsx(Text, { bold: true, color: ACCENT_CYAN, children: ` ${code} ` }) }));
|
|
112
|
-
}
|
|
113
|
-
function BrowserHintRow({ opened, url, copied, }) {
|
|
114
|
-
if (copied) {
|
|
115
|
-
return (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: ACCENT_CYAN, children: "Copied!" }) }));
|
|
116
|
-
}
|
|
117
|
-
if (opened) {
|
|
118
|
-
return (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "Browser opened to" }), _jsx(Text, { dimColor: true, children: url })] }));
|
|
119
|
-
}
|
|
120
|
-
return (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "Browser didn't open? Use the URL below to sign in (c to copy)" }), _jsx(Text, { children: url })] }));
|
|
121
|
-
}
|
|
122
|
-
function StatusRow({ status, spinnerFrame, }) {
|
|
123
|
-
if (status.kind === 'polling') {
|
|
124
|
-
const glyph = SPINNER_FRAMES[spinnerFrame] ?? SPINNER_FRAMES[0];
|
|
125
|
-
return (_jsxs(Text, { children: [_jsx(Text, { color: ACCENT_CYAN, children: glyph }), _jsx(Text, { children: ' Waiting for browser approval…' })] }));
|
|
126
|
-
}
|
|
127
|
-
if (status.kind === 'success') {
|
|
128
|
-
return (_jsxs(Text, { children: [_jsx(Text, { color: ACCENT_CYAN, children: '✓ ' }), _jsx(Text, { color: ACCENT_CYAN, children: `Logged in as ${status.principalLabel}` })] }));
|
|
129
|
-
}
|
|
130
|
-
// failure
|
|
131
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [_jsx(Text, { color: ACCENT_RED, children: '✗ ' }), _jsx(Text, { color: ACCENT_RED, children: status.reason })] }), status.hint ? _jsx(Text, { dimColor: true, children: status.hint }) : null] }));
|
|
132
|
-
}
|
|
133
|
-
function FooterHint({ status }) {
|
|
134
|
-
if (status.kind === 'success') {
|
|
135
|
-
return _jsx(Text, { dimColor: true, children: "Press Enter to continue\u2026" });
|
|
136
|
-
}
|
|
137
|
-
if (status.kind === 'failure') {
|
|
138
|
-
return _jsx(Text, { dimColor: true, children: "Esc to dismiss \u00B7 Run `pugi login` again to retry" });
|
|
139
|
-
}
|
|
140
|
-
return _jsx(Text, { dimColor: true, children: "Esc to cancel \u00B7 c to copy URL" });
|
|
141
|
-
}
|
|
142
|
-
//# sourceMappingURL=device-flow.js.map
|
package/dist/tui/doctor-table.js
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Box, Text } from 'ink';
|
|
3
|
-
import { useTheme } from '../core/theme/context.js';
|
|
4
|
-
/**
|
|
5
|
-
* status colors flow through the active theme
|
|
6
|
-
* instead of being hard-coded Ink color names. The `colorblind`
|
|
7
|
-
* preset re-maps OK/WARN/ERROR to a blue-yellow-magenta axis so
|
|
8
|
-
* deuteranopia operators can still distinguish the three states; the
|
|
9
|
-
* `default` / `dark` / `light` themes route to green/yellow/red
|
|
10
|
-
* variants tuned for each background. `skipped` keeps a muted color
|
|
11
|
-
* (theme-controlled muted token) so dimmed rows still pick up the
|
|
12
|
-
* theme tint.
|
|
13
|
-
*/
|
|
14
|
-
function buildStatusColor(theme) {
|
|
15
|
-
return {
|
|
16
|
-
ok: theme.success,
|
|
17
|
-
warn: theme.warning,
|
|
18
|
-
error: theme.error,
|
|
19
|
-
skipped: theme.muted,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
function buildOverallColor(theme) {
|
|
23
|
-
return {
|
|
24
|
-
healthy: theme.success,
|
|
25
|
-
warning: theme.warning,
|
|
26
|
-
error: theme.error,
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
export function DoctorTable({ envelope }) {
|
|
30
|
-
const theme = useTheme();
|
|
31
|
-
const statusColor = buildStatusColor(theme);
|
|
32
|
-
const overallColor = buildOverallColor(theme);
|
|
33
|
-
const nameWidth = Math.max('NAME'.length, ...envelope.probes.map((row) => row.name.length));
|
|
34
|
-
const statusWidth = Math.max('STATUS'.length, ...envelope.probes.map((row) => row.status.length));
|
|
35
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, children: "Pugi Doctor" }) }), envelope.probes.map((row) => (_jsx(DoctorRow, { row: row, nameWidth: nameWidth, statusWidth: statusWidth, statusColor: statusColor }, row.name))), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { children: [envelope.counts.error, " error(s), ", envelope.counts.warn, " warning(s), ", envelope.counts.ok, " ok,", ' ', envelope.counts.skipped, " skipped. Overall:", ' ', _jsx(Text, { color: overallColor[envelope.overall], bold: true, children: envelope.overall.toUpperCase() })] }) }), _jsx(Box, { children: _jsxs(Text, { dimColor: true, children: ["CLI ", envelope.meta.cliVersion, " Node ", envelope.meta.nodeVersion, " cwd ", envelope.meta.cwd] }) })] }));
|
|
36
|
-
}
|
|
37
|
-
function DoctorRow({ row, nameWidth, statusWidth, statusColor }) {
|
|
38
|
-
const namePart = row.name.padEnd(nameWidth, ' ');
|
|
39
|
-
const statusPart = row.status.toUpperCase().padEnd(statusWidth, ' ');
|
|
40
|
-
const latencyPart = typeof row.latencyMs === 'number' ? ` (${row.latencyMs}ms)` : '';
|
|
41
|
-
const showRemediation = typeof row.remediation === 'string' &&
|
|
42
|
-
row.remediation.length > 0 &&
|
|
43
|
-
(row.status === 'warn' || row.status === 'error');
|
|
44
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Text, { children: [namePart, " "] }), _jsx(Text, { color: statusColor[row.status], bold: true, children: statusPart }), _jsxs(Text, { children: [' ', row.detail, latencyPart] })] }), showRemediation && (_jsx(Box, { marginLeft: nameWidth + statusWidth + 4, children: _jsxs(Text, { dimColor: true, children: ["\u2192 ", row.remediation] }) }))] }));
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=doctor-table.js.map
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* `/feedback` interactive prompt — .
|
|
4
|
-
*
|
|
5
|
-
* Five-step wizard mounted from both the top-level `pugi feedback`
|
|
6
|
-
* shell handler and the in-REPL `/feedback` slash. Steps:
|
|
7
|
-
*
|
|
8
|
-
* 1. category — bug / feature / general / praise (numeric pick 1-4)
|
|
9
|
-
* 2. rating — 1-5 stars (numeric pick 1-5)
|
|
10
|
-
* 3. comment — free-text, multi-line, Ctrl-D submits, Esc cancels
|
|
11
|
-
* 4. context — y/n include last 5 turns (redacted)? default no
|
|
12
|
-
* 5. confirm — y/n submit?
|
|
13
|
-
*
|
|
14
|
-
* Brand voice gate: ASCII glyphs only, no em-dashes, no banned brand
|
|
15
|
-
* words. Copy is intentionally power-word neutral so the future i18n
|
|
16
|
-
* landing localises cleanly.
|
|
17
|
-
*
|
|
18
|
-
* The component is PURE in the Ink sense — props in, one terminal
|
|
19
|
-
* `onResolve` event out. The caller owns the submit + queue logic.
|
|
20
|
-
*
|
|
21
|
-
* The verdict the operator submits is:
|
|
22
|
-
* - `{ cancelled: true }` when the operator presses Esc at any step
|
|
23
|
-
* - `{ cancelled: false, draft }` when the wizard completes
|
|
24
|
-
*
|
|
25
|
-
* `draft` is the assembled `FeedbackDraft` — NOT yet a full envelope
|
|
26
|
-
* (the caller still injects `ts` + `cliVersion` + maybe `tier`).
|
|
27
|
-
*/
|
|
28
|
-
import { useState } from 'react';
|
|
29
|
-
import { Box, Text, render, useApp, useInput } from 'ink';
|
|
30
|
-
const CATEGORIES = [
|
|
31
|
-
{ value: 'bug', label: 'bug', gloss: 'something broke or behaves unexpectedly' },
|
|
32
|
-
{ value: 'feature', label: 'feature', gloss: 'request a new capability' },
|
|
33
|
-
{ value: 'general', label: 'general', gloss: 'observation, idea, comment' },
|
|
34
|
-
{ value: 'praise', label: 'praise', gloss: 'positive note for the team' },
|
|
35
|
-
];
|
|
36
|
-
export function FeedbackPrompt(props) {
|
|
37
|
-
const [step, setStep] = useState('category');
|
|
38
|
-
const [category, setCategory] = useState(null);
|
|
39
|
-
const [rating, setRating] = useState(null);
|
|
40
|
-
const [commentBuffer, setCommentBuffer] = useState('');
|
|
41
|
-
const [includeContext, setIncludeContext] = useState(false);
|
|
42
|
-
useInput((input, key) => {
|
|
43
|
-
if (key.escape) {
|
|
44
|
-
props.onResolve({ cancelled: true });
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
if (step === 'category') {
|
|
48
|
-
const n = Number.parseInt(input, 10);
|
|
49
|
-
if (!Number.isNaN(n) && n >= 1 && n <= CATEGORIES.length) {
|
|
50
|
-
const picked = CATEGORIES[n - 1];
|
|
51
|
-
if (picked) {
|
|
52
|
-
setCategory(picked.value);
|
|
53
|
-
setStep('rating');
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
if (step === 'rating') {
|
|
59
|
-
const n = Number.parseInt(input, 10);
|
|
60
|
-
if (!Number.isNaN(n) && n >= 1 && n <= 5) {
|
|
61
|
-
setRating(n);
|
|
62
|
-
setStep('comment');
|
|
63
|
-
}
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
if (step === 'comment') {
|
|
67
|
-
// Ctrl-D submits the comment (even when empty — rating-only
|
|
68
|
-
// feedback is allowed). Enter inserts a newline so the
|
|
69
|
-
// operator can write multi-line bug repros without the wizard
|
|
70
|
-
// ending the buffer prematurely.
|
|
71
|
-
if (key.ctrl && (input === 'd' || input === '')) {
|
|
72
|
-
setStep('context');
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
if (key.return) {
|
|
76
|
-
setCommentBuffer((prev) => prev + '\n');
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
if (key.backspace || key.delete) {
|
|
80
|
-
setCommentBuffer((prev) => prev.slice(0, -1));
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
// Printable characters land in the buffer. We accept anything
|
|
84
|
-
// non-empty + non-control. Ink's useInput sometimes delivers
|
|
85
|
-
// multi-char paste bursts as one `input` — we append the whole
|
|
86
|
-
// burst so paste lands intact.
|
|
87
|
-
if (input && !key.ctrl && !key.meta) {
|
|
88
|
-
setCommentBuffer((prev) => prev + input);
|
|
89
|
-
}
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
if (step === 'context') {
|
|
93
|
-
if (input === 'y' || input === 'Y') {
|
|
94
|
-
setIncludeContext(true);
|
|
95
|
-
setStep('confirm');
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
if (input === 'n' || input === 'N' || key.return) {
|
|
99
|
-
// Default no — Enter at the context prompt picks "no" so
|
|
100
|
-
// the operator can blast through with all defaults.
|
|
101
|
-
setIncludeContext(false);
|
|
102
|
-
setStep('confirm');
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
if (step === 'confirm') {
|
|
108
|
-
if (input === 'y' || input === 'Y' || key.return) {
|
|
109
|
-
if (category != null && rating != null) {
|
|
110
|
-
props.onResolve({
|
|
111
|
-
cancelled: false,
|
|
112
|
-
draft: {
|
|
113
|
-
category,
|
|
114
|
-
rating,
|
|
115
|
-
comment: commentBuffer,
|
|
116
|
-
includeSessionContext: includeContext,
|
|
117
|
-
},
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
if (input === 'n' || input === 'N') {
|
|
123
|
-
props.onResolve({ cancelled: true });
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
}, { isActive: !props.inert });
|
|
129
|
-
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Pugi /feedback" }), _jsx(Text, { children: " \u2014 share what you saw. Esc cancels at any step." })] }), step === 'category' && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "1. Category" }), CATEGORIES.map((c, idx) => (_jsx(Text, { children: ` ${idx + 1}. ${c.label.padEnd(8)} ${c.gloss}` }, c.value))), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Pick 1-4." }) })] })), step === 'rating' && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "2. Rating" }), _jsx(Text, { children: ` 1=poor, 5=excellent. Picked category: ${category ?? '?'}` }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Pick 1-5." }) })] })), step === 'comment' && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "3. Comment" }), _jsx(Text, { dimColor: true, children: "Multi-line. Enter inserts a newline. Ctrl-D submits." }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: commentBuffer.length === 0 ? (_jsx(Text, { dimColor: true, children: "(empty \u2014 Ctrl-D submits without a comment)" })) : (commentBuffer.split('\n').map((line, idx) => (_jsx(Text, { children: `> ${line}` }, idx)))) })] })), step === 'context' && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "4. Include session context?" }), _jsx(Text, { children: ' Last 5 turns, redacted (tokens / *_KEY=* values stripped).' }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "y / n \u2014 default n (Enter)." }) })] })), step === 'confirm' && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "5. Submit?" }), _jsx(Text, { children: ` category=${category ?? '?'} rating=${rating ?? '?'} context=${includeContext ? 'yes' : 'no'}` }), _jsx(Text, { children: ` comment=${commentBuffer.length} chars` }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "y / n \u2014 default y (Enter)." }) })] }))] }));
|
|
130
|
-
}
|
|
131
|
-
export async function renderFeedbackPrompt() {
|
|
132
|
-
let resolveOuter;
|
|
133
|
-
const outerPromise = new Promise((resolve) => {
|
|
134
|
-
resolveOuter = resolve;
|
|
135
|
-
});
|
|
136
|
-
function App() {
|
|
137
|
-
const { exit } = useApp();
|
|
138
|
-
return (_jsx(FeedbackPrompt, { onResolve: (verdict) => {
|
|
139
|
-
resolveOuter(verdict);
|
|
140
|
-
// Mirror renderAskCli: tiny delay so Ink flushes unmount
|
|
141
|
-
// before the caller prints the toast line.
|
|
142
|
-
setTimeout(() => exit(), 16);
|
|
143
|
-
} }));
|
|
144
|
-
}
|
|
145
|
-
const instance = render(_jsx(App, {}));
|
|
146
|
-
const verdict = await outerPromise;
|
|
147
|
-
try {
|
|
148
|
-
await instance.waitUntilExit();
|
|
149
|
-
}
|
|
150
|
-
catch {
|
|
151
|
-
// Ink can throw when exit() races with a re-render — the verdict
|
|
152
|
-
// is already captured so we ignore.
|
|
153
|
-
}
|
|
154
|
-
return verdict;
|
|
155
|
-
}
|
|
156
|
-
//# sourceMappingURL=feedback-prompt.js.map
|