@posthog/wizard 2.9.0 → 2.10.0
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/README.md +40 -0
- package/dist/McpScreen-BmHapIaP.js +3357 -0
- package/dist/McpScreen-BmHapIaP.js.map +1 -0
- package/dist/add-mcp-server-to-clients-DZtISNrs.js +455 -0
- package/dist/add-mcp-server-to-clients-DZtISNrs.js.map +1 -0
- package/dist/agent-runner-CGwrcr57.js +1112 -0
- package/dist/agent-runner-CGwrcr57.js.map +1 -0
- package/dist/agent-skill-BVjJqol6.js +59 -0
- package/dist/agent-skill-BVjJqol6.js.map +1 -0
- package/dist/analytics-C4jO5Qda.js +207 -0
- package/dist/analytics-C4jO5Qda.js.map +1 -0
- package/dist/analytics-CpjaBpx6.js +2 -0
- package/dist/bin.d.ts +1 -2
- package/dist/bin.js +635 -524
- package/dist/bin.js.map +1 -1
- package/dist/craft-pre-release.sh +10 -0
- package/dist/debug-CIyf0ZGx.js +2 -0
- package/dist/debug-CyJ_3dTP.js +201 -0
- package/dist/debug-CyJ_3dTP.js.map +1 -0
- package/dist/defaults-DoVkE0gW.js +234 -0
- package/dist/defaults-DoVkE0gW.js.map +1 -0
- package/dist/detection-CkLpxBCD.js +122 -0
- package/dist/detection-CkLpxBCD.js.map +1 -0
- package/dist/env-api-key-K8TdTDII.js +20 -0
- package/dist/env-api-key-K8TdTDII.js.map +1 -0
- package/dist/file-utils-BWneZy6p.js +38 -0
- package/dist/file-utils-BWneZy6p.js.map +1 -0
- package/dist/generate-version.cjs +11 -0
- package/dist/package-json-BQgl5C3Z.js +2 -0
- package/dist/package-json-Ctq6LSl8.js +25 -0
- package/dist/package-json-Ctq6LSl8.js.map +1 -0
- package/dist/package-manager-nUQ-ebjr.js +222 -0
- package/dist/package-manager-nUQ-ebjr.js.map +1 -0
- package/dist/posthog-integration-BzxdDK4z.js +230 -0
- package/dist/posthog-integration-BzxdDK4z.js.map +1 -0
- package/dist/readiness-Dn7eq8NE.js +2156 -0
- package/dist/readiness-Dn7eq8NE.js.map +1 -0
- package/dist/registry-s55_iuJT.js +2922 -0
- package/dist/registry-s55_iuJT.js.map +1 -0
- package/dist/rolldown-runtime-B_-DWIq7.js +15 -0
- package/dist/router-D5A1Sb4p.js +141 -0
- package/dist/router-D5A1Sb4p.js.map +1 -0
- package/dist/setup-utils-CdDnllRW.js +928 -0
- package/dist/setup-utils-CdDnllRW.js.map +1 -0
- package/dist/smoke-test-ci.sh +165 -0
- package/dist/start-playground-B8qCLu7U.js +1005 -0
- package/dist/start-playground-B8qCLu7U.js.map +1 -0
- package/dist/start-tui-PygiIyNC.js +1887 -0
- package/dist/start-tui-PygiIyNC.js.map +1 -0
- package/dist/steps-CySv8XdD.js +146 -0
- package/dist/steps-CySv8XdD.js.map +1 -0
- package/dist/telemetry-Ct_GGkSO.js +13 -0
- package/dist/telemetry-Ct_GGkSO.js.map +1 -0
- package/dist/wizard-abort-7HUIsqv1.js +39 -0
- package/dist/wizard-abort-7HUIsqv1.js.map +1 -0
- package/dist/wizard-abort-Dhjb2o08.js +2 -0
- package/dist/wizard-session-Db6R023m.js +62 -0
- package/dist/wizard-session-Db6R023m.js.map +1 -0
- package/dist/wizard-session-y7nf6aKH.js +2 -0
- package/npm-shrinkwrap.json +2 -2
- package/package.json +16 -8
- package/dist/src/__tests__/cli.test.d.ts +0 -1
- package/dist/src/__tests__/cli.test.js +0 -256
- package/dist/src/__tests__/cli.test.js.map +0 -1
- package/dist/src/__tests__/package-json.test.d.ts +0 -1
- package/dist/src/__tests__/package-json.test.js +0 -173
- package/dist/src/__tests__/package-json.test.js.map +0 -1
- package/dist/src/__tests__/wizard-abort.test.d.ts +0 -1
- package/dist/src/__tests__/wizard-abort.test.js +0 -148
- package/dist/src/__tests__/wizard-abort.test.js.map +0 -1
- package/dist/src/frameworks/android/android-wizard-agent.d.ts +0 -6
- package/dist/src/frameworks/android/android-wizard-agent.js +0 -142
- package/dist/src/frameworks/android/android-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/android/utils.d.ts +0 -11
- package/dist/src/frameworks/android/utils.js +0 -97
- package/dist/src/frameworks/android/utils.js.map +0 -1
- package/dist/src/frameworks/angular/angular-wizard-agent.d.ts +0 -4
- package/dist/src/frameworks/angular/angular-wizard-agent.js +0 -65
- package/dist/src/frameworks/angular/angular-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/angular/utils.d.ts +0 -4
- package/dist/src/frameworks/angular/utils.js +0 -9
- package/dist/src/frameworks/angular/utils.js.map +0 -1
- package/dist/src/frameworks/astro/astro-wizard-agent.d.ts +0 -7
- package/dist/src/frameworks/astro/astro-wizard-agent.js +0 -102
- package/dist/src/frameworks/astro/astro-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/astro/utils.d.ts +0 -14
- package/dist/src/frameworks/astro/utils.js +0 -114
- package/dist/src/frameworks/astro/utils.js.map +0 -1
- package/dist/src/frameworks/django/django-wizard-agent.d.ts +0 -8
- package/dist/src/frameworks/django/django-wizard-agent.js +0 -173
- package/dist/src/frameworks/django/django-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/django/utils.d.ts +0 -31
- package/dist/src/frameworks/django/utils.js +0 -306
- package/dist/src/frameworks/django/utils.js.map +0 -1
- package/dist/src/frameworks/fastapi/fastapi-wizard-agent.d.ts +0 -5
- package/dist/src/frameworks/fastapi/fastapi-wizard-agent.js +0 -191
- package/dist/src/frameworks/fastapi/fastapi-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/fastapi/utils.d.ts +0 -26
- package/dist/src/frameworks/fastapi/utils.js +0 -258
- package/dist/src/frameworks/fastapi/utils.js.map +0 -1
- package/dist/src/frameworks/flask/flask-wizard-agent.d.ts +0 -8
- package/dist/src/frameworks/flask/flask-wizard-agent.js +0 -179
- package/dist/src/frameworks/flask/flask-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/flask/utils.d.ts +0 -28
- package/dist/src/frameworks/flask/utils.js +0 -344
- package/dist/src/frameworks/flask/utils.js.map +0 -1
- package/dist/src/frameworks/javascript-node/javascript-node-wizard-agent.d.ts +0 -4
- package/dist/src/frameworks/javascript-node/javascript-node-wizard-agent.js +0 -61
- package/dist/src/frameworks/javascript-node/javascript-node-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/javascript-web/javascript-web-wizard-agent.d.ts +0 -3
- package/dist/src/frameworks/javascript-web/javascript-web-wizard-agent.js +0 -152
- package/dist/src/frameworks/javascript-web/javascript-web-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/javascript-web/utils.d.ts +0 -28
- package/dist/src/frameworks/javascript-web/utils.js +0 -147
- package/dist/src/frameworks/javascript-web/utils.js.map +0 -1
- package/dist/src/frameworks/laravel/laravel-wizard-agent.d.ts +0 -10
- package/dist/src/frameworks/laravel/laravel-wizard-agent.js +0 -182
- package/dist/src/frameworks/laravel/laravel-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/laravel/utils.d.ts +0 -38
- package/dist/src/frameworks/laravel/utils.js +0 -238
- package/dist/src/frameworks/laravel/utils.js.map +0 -1
- package/dist/src/frameworks/nextjs/nextjs-wizard-agent.d.ts +0 -7
- package/dist/src/frameworks/nextjs/nextjs-wizard-agent.js +0 -94
- package/dist/src/frameworks/nextjs/nextjs-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/nextjs/utils.d.ts +0 -12
- package/dist/src/frameworks/nextjs/utils.js +0 -52
- package/dist/src/frameworks/nextjs/utils.js.map +0 -1
- package/dist/src/frameworks/nuxt/nuxt-wizard-agent.d.ts +0 -6
- package/dist/src/frameworks/nuxt/nuxt-wizard-agent.js +0 -77
- package/dist/src/frameworks/nuxt/nuxt-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/python/python-wizard-agent.d.ts +0 -7
- package/dist/src/frameworks/python/python-wizard-agent.js +0 -195
- package/dist/src/frameworks/python/python-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/python/utils.d.ts +0 -28
- package/dist/src/frameworks/python/utils.js +0 -147
- package/dist/src/frameworks/python/utils.js.map +0 -1
- package/dist/src/frameworks/rails/rails-wizard-agent.d.ts +0 -8
- package/dist/src/frameworks/rails/rails-wizard-agent.js +0 -90
- package/dist/src/frameworks/rails/rails-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/rails/utils.d.ts +0 -37
- package/dist/src/frameworks/rails/utils.js +0 -187
- package/dist/src/frameworks/rails/utils.js.map +0 -1
- package/dist/src/frameworks/react-native/react-native-wizard-agent.d.ts +0 -7
- package/dist/src/frameworks/react-native/react-native-wizard-agent.js +0 -89
- package/dist/src/frameworks/react-native/react-native-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/react-native/utils.d.ts +0 -8
- package/dist/src/frameworks/react-native/utils.js +0 -28
- package/dist/src/frameworks/react-native/utils.js.map +0 -1
- package/dist/src/frameworks/react-router/react-router-wizard-agent.d.ts +0 -7
- package/dist/src/frameworks/react-router/react-router-wizard-agent.js +0 -94
- package/dist/src/frameworks/react-router/react-router-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/react-router/utils.d.ts +0 -13
- package/dist/src/frameworks/react-router/utils.js +0 -161
- package/dist/src/frameworks/react-router/utils.js.map +0 -1
- package/dist/src/frameworks/ruby/ruby-wizard-agent.d.ts +0 -7
- package/dist/src/frameworks/ruby/ruby-wizard-agent.js +0 -113
- package/dist/src/frameworks/ruby/ruby-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/ruby/utils.d.ts +0 -25
- package/dist/src/frameworks/ruby/utils.js +0 -158
- package/dist/src/frameworks/ruby/utils.js.map +0 -1
- package/dist/src/frameworks/svelte/svelte-wizard-agent.d.ts +0 -4
- package/dist/src/frameworks/svelte/svelte-wizard-agent.js +0 -61
- package/dist/src/frameworks/svelte/svelte-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/swift/swift-wizard-agent.d.ts +0 -7
- package/dist/src/frameworks/swift/swift-wizard-agent.js +0 -143
- package/dist/src/frameworks/swift/swift-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/swift/utils.d.ts +0 -8
- package/dist/src/frameworks/swift/utils.js +0 -105
- package/dist/src/frameworks/swift/utils.js.map +0 -1
- package/dist/src/frameworks/tanstack-router/tanstack-router-wizard-agent.d.ts +0 -7
- package/dist/src/frameworks/tanstack-router/tanstack-router-wizard-agent.js +0 -96
- package/dist/src/frameworks/tanstack-router/tanstack-router-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/tanstack-router/utils.d.ts +0 -11
- package/dist/src/frameworks/tanstack-router/utils.js +0 -149
- package/dist/src/frameworks/tanstack-router/utils.js.map +0 -1
- package/dist/src/frameworks/tanstack-start/tanstack-start-wizard-agent.d.ts +0 -4
- package/dist/src/frameworks/tanstack-start/tanstack-start-wizard-agent.js +0 -64
- package/dist/src/frameworks/tanstack-start/tanstack-start-wizard-agent.js.map +0 -1
- package/dist/src/frameworks/tanstack-start/utils.d.ts +0 -4
- package/dist/src/frameworks/tanstack-start/utils.js +0 -9
- package/dist/src/frameworks/tanstack-start/utils.js.map +0 -1
- package/dist/src/frameworks/vue/vue-wizard-agent.d.ts +0 -4
- package/dist/src/frameworks/vue/vue-wizard-agent.js +0 -62
- package/dist/src/frameworks/vue/vue-wizard-agent.js.map +0 -1
- package/dist/src/lib/__tests__/agent-interface.test.d.ts +0 -1
- package/dist/src/lib/__tests__/agent-interface.test.js +0 -317
- package/dist/src/lib/__tests__/agent-interface.test.js.map +0 -1
- package/dist/src/lib/__tests__/cloudflare-detection.test.d.ts +0 -1
- package/dist/src/lib/__tests__/cloudflare-detection.test.js +0 -119
- package/dist/src/lib/__tests__/cloudflare-detection.test.js.map +0 -1
- package/dist/src/lib/__tests__/wizard-tools.test.d.ts +0 -1
- package/dist/src/lib/__tests__/wizard-tools.test.js +0 -200
- package/dist/src/lib/__tests__/wizard-tools.test.js.map +0 -1
- package/dist/src/lib/__tests__/yara-hooks.test.d.ts +0 -1
- package/dist/src/lib/__tests__/yara-hooks.test.js +0 -432
- package/dist/src/lib/__tests__/yara-hooks.test.js.map +0 -1
- package/dist/src/lib/__tests__/yara-scanner.test.d.ts +0 -1
- package/dist/src/lib/__tests__/yara-scanner.test.js +0 -613
- package/dist/src/lib/__tests__/yara-scanner.test.js.map +0 -1
- package/dist/src/lib/agent/__tests__/agent-prompt.test.d.ts +0 -1
- package/dist/src/lib/agent/__tests__/agent-prompt.test.js +0 -57
- package/dist/src/lib/agent/__tests__/agent-prompt.test.js.map +0 -1
- package/dist/src/lib/agent/agent-interface.d.ts +0 -171
- package/dist/src/lib/agent/agent-interface.js +0 -1082
- package/dist/src/lib/agent/agent-interface.js.map +0 -1
- package/dist/src/lib/agent/agent-prompt.d.ts +0 -23
- package/dist/src/lib/agent/agent-prompt.js +0 -47
- package/dist/src/lib/agent/agent-prompt.js.map +0 -1
- package/dist/src/lib/agent/agent-runner.d.ts +0 -78
- package/dist/src/lib/agent/agent-runner.js +0 -323
- package/dist/src/lib/agent/agent-runner.js.map +0 -1
- package/dist/src/lib/agent/commandments.d.ts +0 -1
- package/dist/src/lib/agent/commandments.js +0 -26
- package/dist/src/lib/agent/commandments.js.map +0 -1
- package/dist/src/lib/api.d.ts +0 -75
- package/dist/src/lib/api.js +0 -105
- package/dist/src/lib/api.js.map +0 -1
- package/dist/src/lib/cloudflare-detection.d.ts +0 -14
- package/dist/src/lib/cloudflare-detection.js +0 -74
- package/dist/src/lib/cloudflare-detection.js.map +0 -1
- package/dist/src/lib/constants.d.ts +0 -74
- package/dist/src/lib/constants.js +0 -98
- package/dist/src/lib/constants.js.map +0 -1
- package/dist/src/lib/detection/__tests__/context.test.d.ts +0 -1
- package/dist/src/lib/detection/__tests__/context.test.js +0 -72
- package/dist/src/lib/detection/__tests__/context.test.js.map +0 -1
- package/dist/src/lib/detection/__tests__/features.test.d.ts +0 -1
- package/dist/src/lib/detection/__tests__/features.test.js +0 -75
- package/dist/src/lib/detection/__tests__/features.test.js.map +0 -1
- package/dist/src/lib/detection/__tests__/package-manager.test.d.ts +0 -1
- package/dist/src/lib/detection/__tests__/package-manager.test.js +0 -195
- package/dist/src/lib/detection/__tests__/package-manager.test.js.map +0 -1
- package/dist/src/lib/detection/context.d.ts +0 -31
- package/dist/src/lib/detection/context.js +0 -92
- package/dist/src/lib/detection/context.js.map +0 -1
- package/dist/src/lib/detection/features.d.ts +0 -16
- package/dist/src/lib/detection/features.js +0 -56
- package/dist/src/lib/detection/features.js.map +0 -1
- package/dist/src/lib/detection/framework.d.ts +0 -14
- package/dist/src/lib/detection/framework.js +0 -35
- package/dist/src/lib/detection/framework.js.map +0 -1
- package/dist/src/lib/detection/index.d.ts +0 -3
- package/dist/src/lib/detection/index.js +0 -11
- package/dist/src/lib/detection/index.js.map +0 -1
- package/dist/src/lib/detection/package-manager.d.ts +0 -37
- package/dist/src/lib/detection/package-manager.js +0 -183
- package/dist/src/lib/detection/package-manager.js.map +0 -1
- package/dist/src/lib/framework-config.d.ts +0 -175
- package/dist/src/lib/framework-config.js +0 -22
- package/dist/src/lib/framework-config.js.map +0 -1
- package/dist/src/lib/health-checks/__tests__/health-checks.test.d.ts +0 -18
- package/dist/src/lib/health-checks/__tests__/health-checks.test.js +0 -759
- package/dist/src/lib/health-checks/__tests__/health-checks.test.js.map +0 -1
- package/dist/src/lib/health-checks/endpoints.d.ts +0 -4
- package/dist/src/lib/health-checks/endpoints.js +0 -49
- package/dist/src/lib/health-checks/endpoints.js.map +0 -1
- package/dist/src/lib/health-checks/index.d.ts +0 -4
- package/dist/src/lib/health-checks/index.js +0 -24
- package/dist/src/lib/health-checks/index.js.map +0 -1
- package/dist/src/lib/health-checks/readiness.d.ts +0 -29
- package/dist/src/lib/health-checks/readiness.js +0 -188
- package/dist/src/lib/health-checks/readiness.js.map +0 -1
- package/dist/src/lib/health-checks/statuspage.d.ts +0 -9
- package/dist/src/lib/health-checks/statuspage.js +0 -105
- package/dist/src/lib/health-checks/statuspage.js.map +0 -1
- package/dist/src/lib/health-checks/types.d.ts +0 -32
- package/dist/src/lib/health-checks/types.js +0 -10
- package/dist/src/lib/health-checks/types.js.map +0 -1
- package/dist/src/lib/helper-functions.d.ts +0 -1
- package/dist/src/lib/helper-functions.js +0 -6
- package/dist/src/lib/helper-functions.js.map +0 -1
- package/dist/src/lib/middleware/benchmark.d.ts +0 -54
- package/dist/src/lib/middleware/benchmark.js +0 -45
- package/dist/src/lib/middleware/benchmark.js.map +0 -1
- package/dist/src/lib/middleware/benchmarks/cache-tracker.d.ts +0 -44
- package/dist/src/lib/middleware/benchmarks/cache-tracker.js +0 -81
- package/dist/src/lib/middleware/benchmarks/cache-tracker.js.map +0 -1
- package/dist/src/lib/middleware/benchmarks/compaction-tracker.d.ts +0 -29
- package/dist/src/lib/middleware/benchmarks/compaction-tracker.js +0 -60
- package/dist/src/lib/middleware/benchmarks/compaction-tracker.js.map +0 -1
- package/dist/src/lib/middleware/benchmarks/context-size-tracker.d.ts +0 -26
- package/dist/src/lib/middleware/benchmarks/context-size-tracker.js +0 -56
- package/dist/src/lib/middleware/benchmarks/context-size-tracker.js.map +0 -1
- package/dist/src/lib/middleware/benchmarks/cost-tracker.d.ts +0 -16
- package/dist/src/lib/middleware/benchmarks/cost-tracker.js +0 -76
- package/dist/src/lib/middleware/benchmarks/cost-tracker.js.map +0 -1
- package/dist/src/lib/middleware/benchmarks/duration-tracker.d.ts +0 -20
- package/dist/src/lib/middleware/benchmarks/duration-tracker.js +0 -40
- package/dist/src/lib/middleware/benchmarks/duration-tracker.js.map +0 -1
- package/dist/src/lib/middleware/benchmarks/index.d.ts +0 -9
- package/dist/src/lib/middleware/benchmarks/index.js +0 -60
- package/dist/src/lib/middleware/benchmarks/index.js.map +0 -1
- package/dist/src/lib/middleware/benchmarks/json-writer.d.ts +0 -15
- package/dist/src/lib/middleware/benchmarks/json-writer.js +0 -144
- package/dist/src/lib/middleware/benchmarks/json-writer.js.map +0 -1
- package/dist/src/lib/middleware/benchmarks/summary.d.ts +0 -9
- package/dist/src/lib/middleware/benchmarks/summary.js +0 -102
- package/dist/src/lib/middleware/benchmarks/summary.js.map +0 -1
- package/dist/src/lib/middleware/benchmarks/token-tracker.d.ts +0 -40
- package/dist/src/lib/middleware/benchmarks/token-tracker.js +0 -77
- package/dist/src/lib/middleware/benchmarks/token-tracker.js.map +0 -1
- package/dist/src/lib/middleware/benchmarks/turn-counter.d.ts +0 -34
- package/dist/src/lib/middleware/benchmarks/turn-counter.js +0 -59
- package/dist/src/lib/middleware/benchmarks/turn-counter.js.map +0 -1
- package/dist/src/lib/middleware/config.d.ts +0 -24
- package/dist/src/lib/middleware/config.js +0 -78
- package/dist/src/lib/middleware/config.js.map +0 -1
- package/dist/src/lib/middleware/index.d.ts +0 -11
- package/dist/src/lib/middleware/index.js +0 -18
- package/dist/src/lib/middleware/index.js.map +0 -1
- package/dist/src/lib/middleware/phase-detector.d.ts +0 -7
- package/dist/src/lib/middleware/phase-detector.js +0 -64
- package/dist/src/lib/middleware/phase-detector.js.map +0 -1
- package/dist/src/lib/middleware/pipeline.d.ts +0 -29
- package/dist/src/lib/middleware/pipeline.js +0 -82
- package/dist/src/lib/middleware/pipeline.js.map +0 -1
- package/dist/src/lib/middleware/types.d.ts +0 -40
- package/dist/src/lib/middleware/types.js +0 -9
- package/dist/src/lib/middleware/types.js.map +0 -1
- package/dist/src/lib/registry.d.ts +0 -3
- package/dist/src/lib/registry.js +0 -49
- package/dist/src/lib/registry.js.map +0 -1
- package/dist/src/lib/safe-tools.d.ts +0 -2
- package/dist/src/lib/safe-tools.js +0 -215
- package/dist/src/lib/safe-tools.js.map +0 -1
- package/dist/src/lib/skill-install.d.ts +0 -10
- package/dist/src/lib/skill-install.js +0 -23
- package/dist/src/lib/skill-install.js.map +0 -1
- package/dist/src/lib/version.d.ts +0 -1
- package/dist/src/lib/version.js +0 -6
- package/dist/src/lib/version.js.map +0 -1
- package/dist/src/lib/wizard-session.d.ts +0 -146
- package/dist/src/lib/wizard-session.js +0 -116
- package/dist/src/lib/wizard-session.js.map +0 -1
- package/dist/src/lib/wizard-tools.d.ts +0 -91
- package/dist/src/lib/wizard-tools.js +0 -389
- package/dist/src/lib/wizard-tools.js.map +0 -1
- package/dist/src/lib/workflows/__tests__/agent-skill.test.d.ts +0 -1
- package/dist/src/lib/workflows/__tests__/agent-skill.test.js +0 -66
- package/dist/src/lib/workflows/__tests__/agent-skill.test.js.map +0 -1
- package/dist/src/lib/workflows/__tests__/revenue-analytics-detect.test.d.ts +0 -1
- package/dist/src/lib/workflows/__tests__/revenue-analytics-detect.test.js +0 -101
- package/dist/src/lib/workflows/__tests__/revenue-analytics-detect.test.js.map +0 -1
- package/dist/src/lib/workflows/__tests__/workflow-registry.test.d.ts +0 -1
- package/dist/src/lib/workflows/__tests__/workflow-registry.test.js +0 -32
- package/dist/src/lib/workflows/__tests__/workflow-registry.test.js.map +0 -1
- package/dist/src/lib/workflows/__tests__/workflow-step.test.d.ts +0 -1
- package/dist/src/lib/workflows/__tests__/workflow-step.test.js +0 -54
- package/dist/src/lib/workflows/__tests__/workflow-step.test.js.map +0 -1
- package/dist/src/lib/workflows/agent-skill/index.d.ts +0 -44
- package/dist/src/lib/workflows/agent-skill/index.js +0 -47
- package/dist/src/lib/workflows/agent-skill/index.js.map +0 -1
- package/dist/src/lib/workflows/agent-skill/steps.d.ts +0 -8
- package/dist/src/lib/workflows/agent-skill/steps.js +0 -32
- package/dist/src/lib/workflows/agent-skill/steps.js.map +0 -1
- package/dist/src/lib/workflows/posthog-integration/detect.d.ts +0 -12
- package/dist/src/lib/workflows/posthog-integration/detect.js +0 -57
- package/dist/src/lib/workflows/posthog-integration/detect.js.map +0 -1
- package/dist/src/lib/workflows/posthog-integration/index.d.ts +0 -3
- package/dist/src/lib/workflows/posthog-integration/index.js +0 -152
- package/dist/src/lib/workflows/posthog-integration/index.js.map +0 -1
- package/dist/src/lib/workflows/posthog-integration/steps.d.ts +0 -9
- package/dist/src/lib/workflows/posthog-integration/steps.js +0 -100
- package/dist/src/lib/workflows/posthog-integration/steps.js.map +0 -1
- package/dist/src/lib/workflows/revenue-analytics/detect.d.ts +0 -40
- package/dist/src/lib/workflows/revenue-analytics/detect.js +0 -156
- package/dist/src/lib/workflows/revenue-analytics/detect.js.map +0 -1
- package/dist/src/lib/workflows/revenue-analytics/index.d.ts +0 -4
- package/dist/src/lib/workflows/revenue-analytics/index.js +0 -30
- package/dist/src/lib/workflows/revenue-analytics/index.js.map +0 -1
- package/dist/src/lib/workflows/revenue-analytics/steps.d.ts +0 -8
- package/dist/src/lib/workflows/revenue-analytics/steps.js +0 -48
- package/dist/src/lib/workflows/revenue-analytics/steps.js.map +0 -1
- package/dist/src/lib/workflows/workflow-registry.d.ts +0 -18
- package/dist/src/lib/workflows/workflow-registry.js +0 -32
- package/dist/src/lib/workflows/workflow-registry.js.map +0 -1
- package/dist/src/lib/workflows/workflow-step.d.ts +0 -126
- package/dist/src/lib/workflows/workflow-step.js +0 -28
- package/dist/src/lib/workflows/workflow-step.js.map +0 -1
- package/dist/src/lib/yara-hooks.d.ts +0 -44
- package/dist/src/lib/yara-hooks.js +0 -377
- package/dist/src/lib/yara-hooks.js.map +0 -1
- package/dist/src/lib/yara-scanner.d.ts +0 -61
- package/dist/src/lib/yara-scanner.js +0 -328
- package/dist/src/lib/yara-scanner.js.map +0 -1
- package/dist/src/steps/add-mcp-server-to-clients/MCPClient.d.ts +0 -30
- package/dist/src/steps/add-mcp-server-to-clients/MCPClient.js +0 -138
- package/dist/src/steps/add-mcp-server-to-clients/MCPClient.js.map +0 -1
- package/dist/src/steps/add-mcp-server-to-clients/__tests__/defaults.test.d.ts +0 -1
- package/dist/src/steps/add-mcp-server-to-clients/__tests__/defaults.test.js +0 -72
- package/dist/src/steps/add-mcp-server-to-clients/__tests__/defaults.test.js.map +0 -1
- package/dist/src/steps/add-mcp-server-to-clients/clients/__tests__/claude.test.d.ts +0 -1
- package/dist/src/steps/add-mcp-server-to-clients/clients/__tests__/claude.test.js +0 -341
- package/dist/src/steps/add-mcp-server-to-clients/clients/__tests__/claude.test.js.map +0 -1
- package/dist/src/steps/add-mcp-server-to-clients/clients/__tests__/codex.test.d.ts +0 -1
- package/dist/src/steps/add-mcp-server-to-clients/clients/__tests__/codex.test.js +0 -108
- package/dist/src/steps/add-mcp-server-to-clients/clients/__tests__/codex.test.js.map +0 -1
- package/dist/src/steps/add-mcp-server-to-clients/clients/claude-code.d.ts +0 -89
- package/dist/src/steps/add-mcp-server-to-clients/clients/claude-code.js +0 -169
- package/dist/src/steps/add-mcp-server-to-clients/clients/claude-code.js.map +0 -1
- package/dist/src/steps/add-mcp-server-to-clients/clients/claude.d.ts +0 -80
- package/dist/src/steps/add-mcp-server-to-clients/clients/claude.js +0 -64
- package/dist/src/steps/add-mcp-server-to-clients/clients/claude.js.map +0 -1
- package/dist/src/steps/add-mcp-server-to-clients/clients/codex.d.ts +0 -88
- package/dist/src/steps/add-mcp-server-to-clients/clients/codex.js +0 -76
- package/dist/src/steps/add-mcp-server-to-clients/clients/codex.js.map +0 -1
- package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.d.ts +0 -84
- package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.js +0 -61
- package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.js.map +0 -1
- package/dist/src/steps/add-mcp-server-to-clients/clients/visual-studio-code.d.ts +0 -92
- package/dist/src/steps/add-mcp-server-to-clients/clients/visual-studio-code.js +0 -101
- package/dist/src/steps/add-mcp-server-to-clients/clients/visual-studio-code.js.map +0 -1
- package/dist/src/steps/add-mcp-server-to-clients/clients/zed.d.ts +0 -110
- package/dist/src/steps/add-mcp-server-to-clients/clients/zed.js +0 -102
- package/dist/src/steps/add-mcp-server-to-clients/clients/zed.js.map +0 -1
- package/dist/src/steps/add-mcp-server-to-clients/defaults.d.ts +0 -119
- package/dist/src/steps/add-mcp-server-to-clients/defaults.js +0 -239
- package/dist/src/steps/add-mcp-server-to-clients/defaults.js.map +0 -1
- package/dist/src/steps/add-mcp-server-to-clients/index.d.ts +0 -23
- package/dist/src/steps/add-mcp-server-to-clients/index.js +0 -111
- package/dist/src/steps/add-mcp-server-to-clients/index.js.map +0 -1
- package/dist/src/steps/add-or-update-environment-variables.d.ts +0 -10
- package/dist/src/steps/add-or-update-environment-variables.js +0 -188
- package/dist/src/steps/add-or-update-environment-variables.js.map +0 -1
- package/dist/src/steps/index.d.ts +0 -4
- package/dist/src/steps/index.js +0 -21
- package/dist/src/steps/index.js.map +0 -1
- package/dist/src/steps/run-prettier.d.ts +0 -5
- package/dist/src/steps/run-prettier.js +0 -91
- package/dist/src/steps/run-prettier.js.map +0 -1
- package/dist/src/steps/upload-environment-variables/EnvironmentProvider.d.ts +0 -11
- package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js +0 -12
- package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js.map +0 -1
- package/dist/src/steps/upload-environment-variables/index.d.ts +0 -6
- package/dist/src/steps/upload-environment-variables/index.js +0 -38
- package/dist/src/steps/upload-environment-variables/index.js.map +0 -1
- package/dist/src/steps/upload-environment-variables/providers/__tests__/vercel.test.d.ts +0 -1
- package/dist/src/steps/upload-environment-variables/providers/__tests__/vercel.test.js +0 -117
- package/dist/src/steps/upload-environment-variables/providers/__tests__/vercel.test.js.map +0 -1
- package/dist/src/steps/upload-environment-variables/providers/vercel.d.ts +0 -15
- package/dist/src/steps/upload-environment-variables/providers/vercel.js +0 -142
- package/dist/src/steps/upload-environment-variables/providers/vercel.js.map +0 -1
- package/dist/src/telemetry.d.ts +0 -2
- package/dist/src/telemetry.js +0 -13
- package/dist/src/telemetry.js.map +0 -1
- package/dist/src/ui/index.d.ts +0 -8
- package/dist/src/ui/index.js +0 -17
- package/dist/src/ui/index.js.map +0 -1
- package/dist/src/ui/logging-ui.d.ts +0 -52
- package/dist/src/ui/logging-ui.js +0 -121
- package/dist/src/ui/logging-ui.js.map +0 -1
- package/dist/src/ui/tui/App.d.ts +0 -6
- package/dist/src/ui/tui/App.js +0 -10
- package/dist/src/ui/tui/App.js.map +0 -1
- package/dist/src/ui/tui/__tests__/flows.test.d.ts +0 -1
- package/dist/src/ui/tui/__tests__/flows.test.js +0 -115
- package/dist/src/ui/tui/__tests__/flows.test.js.map +0 -1
- package/dist/src/ui/tui/__tests__/layout-helpers.test.d.ts +0 -1
- package/dist/src/ui/tui/__tests__/layout-helpers.test.js +0 -68
- package/dist/src/ui/tui/__tests__/layout-helpers.test.js.map +0 -1
- package/dist/src/ui/tui/__tests__/router.test.d.ts +0 -1
- package/dist/src/ui/tui/__tests__/router.test.js +0 -87
- package/dist/src/ui/tui/__tests__/router.test.js.map +0 -1
- package/dist/src/ui/tui/__tests__/store.test.d.ts +0 -1
- package/dist/src/ui/tui/__tests__/store.test.js +0 -889
- package/dist/src/ui/tui/__tests__/store.test.js.map +0 -1
- package/dist/src/ui/tui/components/LearnCard.d.ts +0 -10
- package/dist/src/ui/tui/components/LearnCard.js +0 -217
- package/dist/src/ui/tui/components/LearnCard.js.map +0 -1
- package/dist/src/ui/tui/components/ServiceHealthList.d.ts +0 -15
- package/dist/src/ui/tui/components/ServiceHealthList.js +0 -57
- package/dist/src/ui/tui/components/ServiceHealthList.js.map +0 -1
- package/dist/src/ui/tui/components/TipsCard.d.ts +0 -9
- package/dist/src/ui/tui/components/TipsCard.js +0 -55
- package/dist/src/ui/tui/components/TipsCard.js.map +0 -1
- package/dist/src/ui/tui/components/TitleBar.d.ts +0 -6
- package/dist/src/ui/tui/components/TitleBar.js +0 -17
- package/dist/src/ui/tui/components/TitleBar.js.map +0 -1
- package/dist/src/ui/tui/flows.d.ts +0 -51
- package/dist/src/ui/tui/flows.js +0 -75
- package/dist/src/ui/tui/flows.js.map +0 -1
- package/dist/src/ui/tui/hooks/useStdoutDimensions.d.ts +0 -9
- package/dist/src/ui/tui/hooks/useStdoutDimensions.js +0 -37
- package/dist/src/ui/tui/hooks/useStdoutDimensions.js.map +0 -1
- package/dist/src/ui/tui/ink-ui.d.ts +0 -58
- package/dist/src/ui/tui/ink-ui.js +0 -125
- package/dist/src/ui/tui/ink-ui.js.map +0 -1
- package/dist/src/ui/tui/package.json +0 -1
- package/dist/src/ui/tui/playground/PlaygroundApp.d.ts +0 -12
- package/dist/src/ui/tui/playground/PlaygroundApp.js +0 -44
- package/dist/src/ui/tui/playground/PlaygroundApp.js.map +0 -1
- package/dist/src/ui/tui/playground/demos/HealthCheckDemo.d.ts +0 -11
- package/dist/src/ui/tui/playground/demos/HealthCheckDemo.js +0 -57
- package/dist/src/ui/tui/playground/demos/HealthCheckDemo.js.map +0 -1
- package/dist/src/ui/tui/playground/demos/InputDemo.d.ts +0 -4
- package/dist/src/ui/tui/playground/demos/InputDemo.js +0 -53
- package/dist/src/ui/tui/playground/demos/InputDemo.js.map +0 -1
- package/dist/src/ui/tui/playground/demos/LayoutDemo.d.ts +0 -5
- package/dist/src/ui/tui/playground/demos/LayoutDemo.js +0 -25
- package/dist/src/ui/tui/playground/demos/LayoutDemo.js.map +0 -1
- package/dist/src/ui/tui/playground/demos/LogDemo.d.ts +0 -5
- package/dist/src/ui/tui/playground/demos/LogDemo.js +0 -53
- package/dist/src/ui/tui/playground/demos/LogDemo.js.map +0 -1
- package/dist/src/ui/tui/playground/demos/ModalDemo.d.ts +0 -6
- package/dist/src/ui/tui/playground/demos/ModalDemo.js +0 -13
- package/dist/src/ui/tui/playground/demos/ModalDemo.js.map +0 -1
- package/dist/src/ui/tui/playground/demos/ProgressDemo.d.ts +0 -5
- package/dist/src/ui/tui/playground/demos/ProgressDemo.js +0 -58
- package/dist/src/ui/tui/playground/demos/ProgressDemo.js.map +0 -1
- package/dist/src/ui/tui/playground/demos/RunScreenDemo.d.ts +0 -11
- package/dist/src/ui/tui/playground/demos/RunScreenDemo.js +0 -159
- package/dist/src/ui/tui/playground/demos/RunScreenDemo.js.map +0 -1
- package/dist/src/ui/tui/playground/demos/WelcomeDemo.d.ts +0 -9
- package/dist/src/ui/tui/playground/demos/WelcomeDemo.js +0 -15
- package/dist/src/ui/tui/playground/demos/WelcomeDemo.js.map +0 -1
- package/dist/src/ui/tui/playground/start-playground.d.ts +0 -4
- package/dist/src/ui/tui/playground/start-playground.js +0 -24
- package/dist/src/ui/tui/playground/start-playground.js.map +0 -1
- package/dist/src/ui/tui/primitives/CardLayout.d.ts +0 -12
- package/dist/src/ui/tui/primitives/CardLayout.js +0 -10
- package/dist/src/ui/tui/primitives/CardLayout.js.map +0 -1
- package/dist/src/ui/tui/primitives/ConfirmationInput.d.ts +0 -13
- package/dist/src/ui/tui/primitives/ConfirmationInput.js +0 -35
- package/dist/src/ui/tui/primitives/ConfirmationInput.js.map +0 -1
- package/dist/src/ui/tui/primitives/ContentSequencer.d.ts +0 -42
- package/dist/src/ui/tui/primitives/ContentSequencer.js +0 -137
- package/dist/src/ui/tui/primitives/ContentSequencer.js.map +0 -1
- package/dist/src/ui/tui/primitives/DissolveTransition.d.ts +0 -21
- package/dist/src/ui/tui/primitives/DissolveTransition.js +0 -149
- package/dist/src/ui/tui/primitives/DissolveTransition.js.map +0 -1
- package/dist/src/ui/tui/primitives/Divider.d.ts +0 -6
- package/dist/src/ui/tui/primitives/Divider.js +0 -15
- package/dist/src/ui/tui/primitives/Divider.js.map +0 -1
- package/dist/src/ui/tui/primitives/EventPlanViewer.d.ts +0 -9
- package/dist/src/ui/tui/primitives/EventPlanViewer.js +0 -9
- package/dist/src/ui/tui/primitives/EventPlanViewer.js.map +0 -1
- package/dist/src/ui/tui/primitives/GroupedPickerMenu.d.ts +0 -23
- package/dist/src/ui/tui/primitives/GroupedPickerMenu.js +0 -182
- package/dist/src/ui/tui/primitives/GroupedPickerMenu.js.map +0 -1
- package/dist/src/ui/tui/primitives/HNViewer.d.ts +0 -7
- package/dist/src/ui/tui/primitives/HNViewer.js +0 -63
- package/dist/src/ui/tui/primitives/HNViewer.js.map +0 -1
- package/dist/src/ui/tui/primitives/LinesBlock.d.ts +0 -16
- package/dist/src/ui/tui/primitives/LinesBlock.js +0 -37
- package/dist/src/ui/tui/primitives/LinesBlock.js.map +0 -1
- package/dist/src/ui/tui/primitives/LoadingBox.d.ts +0 -8
- package/dist/src/ui/tui/primitives/LoadingBox.js +0 -10
- package/dist/src/ui/tui/primitives/LoadingBox.js.map +0 -1
- package/dist/src/ui/tui/primitives/LogViewer.d.ts +0 -11
- package/dist/src/ui/tui/primitives/LogViewer.js +0 -55
- package/dist/src/ui/tui/primitives/LogViewer.js.map +0 -1
- package/dist/src/ui/tui/primitives/ModalOverlay.d.ts +0 -25
- package/dist/src/ui/tui/primitives/ModalOverlay.js +0 -7
- package/dist/src/ui/tui/primitives/ModalOverlay.js.map +0 -1
- package/dist/src/ui/tui/primitives/NodeBlock.d.ts +0 -13
- package/dist/src/ui/tui/primitives/NodeBlock.js +0 -17
- package/dist/src/ui/tui/primitives/NodeBlock.js.map +0 -1
- package/dist/src/ui/tui/primitives/PickerMenu.d.ts +0 -20
- package/dist/src/ui/tui/primitives/PickerMenu.js +0 -143
- package/dist/src/ui/tui/primitives/PickerMenu.js.map +0 -1
- package/dist/src/ui/tui/primitives/ProgressList.d.ts +0 -17
- package/dist/src/ui/tui/primitives/ProgressList.js +0 -32
- package/dist/src/ui/tui/primitives/ProgressList.js.map +0 -1
- package/dist/src/ui/tui/primitives/PromptLabel.d.ts +0 -11
- package/dist/src/ui/tui/primitives/PromptLabel.js +0 -13
- package/dist/src/ui/tui/primitives/PromptLabel.js.map +0 -1
- package/dist/src/ui/tui/primitives/ScreenContainer.d.ts +0 -16
- package/dist/src/ui/tui/primitives/ScreenContainer.js +0 -36
- package/dist/src/ui/tui/primitives/ScreenContainer.js.map +0 -1
- package/dist/src/ui/tui/primitives/ScreenErrorBoundary.d.ts +0 -22
- package/dist/src/ui/tui/primitives/ScreenErrorBoundary.js +0 -35
- package/dist/src/ui/tui/primitives/ScreenErrorBoundary.js.map +0 -1
- package/dist/src/ui/tui/primitives/SplitView.d.ts +0 -11
- package/dist/src/ui/tui/primitives/SplitView.js +0 -9
- package/dist/src/ui/tui/primitives/SplitView.js.map +0 -1
- package/dist/src/ui/tui/primitives/TabContainer.d.ts +0 -23
- package/dist/src/ui/tui/primitives/TabContainer.js +0 -45
- package/dist/src/ui/tui/primitives/TabContainer.js.map +0 -1
- package/dist/src/ui/tui/primitives/TextBlock.d.ts +0 -41
- package/dist/src/ui/tui/primitives/TextBlock.js +0 -144
- package/dist/src/ui/tui/primitives/TextBlock.js.map +0 -1
- package/dist/src/ui/tui/primitives/content-types.d.ts +0 -37
- package/dist/src/ui/tui/primitives/content-types.js +0 -19
- package/dist/src/ui/tui/primitives/content-types.js.map +0 -1
- package/dist/src/ui/tui/primitives/index.d.ts +0 -27
- package/dist/src/ui/tui/primitives/index.js +0 -24
- package/dist/src/ui/tui/primitives/index.js.map +0 -1
- package/dist/src/ui/tui/primitives/layout-helpers.d.ts +0 -36
- package/dist/src/ui/tui/primitives/layout-helpers.js +0 -95
- package/dist/src/ui/tui/primitives/layout-helpers.js.map +0 -1
- package/dist/src/ui/tui/primitives/text-helpers.d.ts +0 -10
- package/dist/src/ui/tui/primitives/text-helpers.js +0 -43
- package/dist/src/ui/tui/primitives/text-helpers.js.map +0 -1
- package/dist/src/ui/tui/router.d.ts +0 -58
- package/dist/src/ui/tui/router.js +0 -96
- package/dist/src/ui/tui/router.js.map +0 -1
- package/dist/src/ui/tui/screen-registry.d.ts +0 -19
- package/dist/src/ui/tui/screen-registry.js +0 -44
- package/dist/src/ui/tui/screen-registry.js.map +0 -1
- package/dist/src/ui/tui/screens/AuthErrorScreen.d.ts +0 -7
- package/dist/src/ui/tui/screens/AuthErrorScreen.js +0 -16
- package/dist/src/ui/tui/screens/AuthErrorScreen.js.map +0 -1
- package/dist/src/ui/tui/screens/AuthScreen.d.ts +0 -13
- package/dist/src/ui/tui/screens/AuthScreen.js +0 -20
- package/dist/src/ui/tui/screens/AuthScreen.js.map +0 -1
- package/dist/src/ui/tui/screens/IntroScreen.d.ts +0 -16
- package/dist/src/ui/tui/screens/IntroScreen.js +0 -79
- package/dist/src/ui/tui/screens/IntroScreen.js.map +0 -1
- package/dist/src/ui/tui/screens/ManagedSettingsScreen.d.ts +0 -13
- package/dist/src/ui/tui/screens/ManagedSettingsScreen.js +0 -32
- package/dist/src/ui/tui/screens/ManagedSettingsScreen.js.map +0 -1
- package/dist/src/ui/tui/screens/McpScreen.d.ts +0 -24
- package/dist/src/ui/tui/screens/McpScreen.js +0 -127
- package/dist/src/ui/tui/screens/McpScreen.js.map +0 -1
- package/dist/src/ui/tui/screens/OutroScreen.d.ts +0 -11
- package/dist/src/ui/tui/screens/OutroScreen.js +0 -22
- package/dist/src/ui/tui/screens/OutroScreen.js.map +0 -1
- package/dist/src/ui/tui/screens/PortConflictScreen.d.ts +0 -11
- package/dist/src/ui/tui/screens/PortConflictScreen.js +0 -30
- package/dist/src/ui/tui/screens/PortConflictScreen.js.map +0 -1
- package/dist/src/ui/tui/screens/RevenueIntroScreen.d.ts +0 -16
- package/dist/src/ui/tui/screens/RevenueIntroScreen.js +0 -64
- package/dist/src/ui/tui/screens/RevenueIntroScreen.js.map +0 -1
- package/dist/src/ui/tui/screens/RunScreen.d.ts +0 -16
- package/dist/src/ui/tui/screens/RunScreen.js +0 -73
- package/dist/src/ui/tui/screens/RunScreen.js.map +0 -1
- package/dist/src/ui/tui/screens/SettingsOverrideScreen.d.ts +0 -6
- package/dist/src/ui/tui/screens/SettingsOverrideScreen.js +0 -30
- package/dist/src/ui/tui/screens/SettingsOverrideScreen.js.map +0 -1
- package/dist/src/ui/tui/screens/SetupScreen.d.ts +0 -13
- package/dist/src/ui/tui/screens/SetupScreen.js +0 -74
- package/dist/src/ui/tui/screens/SetupScreen.js.map +0 -1
- package/dist/src/ui/tui/screens/SkillsScreen.d.ts +0 -14
- package/dist/src/ui/tui/screens/SkillsScreen.js +0 -71
- package/dist/src/ui/tui/screens/SkillsScreen.js.map +0 -1
- package/dist/src/ui/tui/screens/health/HealthCheckScreen.d.ts +0 -14
- package/dist/src/ui/tui/screens/health/HealthCheckScreen.js +0 -77
- package/dist/src/ui/tui/screens/health/HealthCheckScreen.js.map +0 -1
- package/dist/src/ui/tui/services/mcp-installer.d.ts +0 -21
- package/dist/src/ui/tui/services/mcp-installer.js +0 -58
- package/dist/src/ui/tui/services/mcp-installer.js.map +0 -1
- package/dist/src/ui/tui/start-tui.d.ts +0 -9
- package/dist/src/ui/tui/start-tui.js +0 -41
- package/dist/src/ui/tui/start-tui.js.map +0 -1
- package/dist/src/ui/tui/store.d.ts +0 -190
- package/dist/src/ui/tui/store.js +0 -472
- package/dist/src/ui/tui/store.js.map +0 -1
- package/dist/src/ui/tui/styles.d.ts +0 -32
- package/dist/src/ui/tui/styles.js +0 -35
- package/dist/src/ui/tui/styles.js.map +0 -1
- package/dist/src/ui/wizard-ui.d.ts +0 -81
- package/dist/src/ui/wizard-ui.js +0 -19
- package/dist/src/ui/wizard-ui.js.map +0 -1
- package/dist/src/utils/__tests__/analytics.test.d.ts +0 -1
- package/dist/src/utils/__tests__/analytics.test.js +0 -136
- package/dist/src/utils/__tests__/analytics.test.js.map +0 -1
- package/dist/src/utils/__tests__/provisioning.test.d.ts +0 -1
- package/dist/src/utils/__tests__/provisioning.test.js +0 -192
- package/dist/src/utils/__tests__/provisioning.test.js.map +0 -1
- package/dist/src/utils/__tests__/semver.test.d.ts +0 -1
- package/dist/src/utils/__tests__/semver.test.js +0 -159
- package/dist/src/utils/__tests__/semver.test.js.map +0 -1
- package/dist/src/utils/__tests__/setup-utils.test.d.ts +0 -1
- package/dist/src/utils/__tests__/setup-utils.test.js +0 -138
- package/dist/src/utils/__tests__/setup-utils.test.js.map +0 -1
- package/dist/src/utils/analytics.d.ts +0 -33
- package/dist/src/utils/analytics.js +0 -137
- package/dist/src/utils/analytics.js.map +0 -1
- package/dist/src/utils/anthropic-status.d.ts +0 -17
- package/dist/src/utils/anthropic-status.js +0 -49
- package/dist/src/utils/anthropic-status.js.map +0 -1
- package/dist/src/utils/bash.d.ts +0 -2
- package/dist/src/utils/bash.js +0 -54
- package/dist/src/utils/bash.js.map +0 -1
- package/dist/src/utils/custom-headers.d.ts +0 -9
- package/dist/src/utils/custom-headers.js +0 -24
- package/dist/src/utils/custom-headers.js.map +0 -1
- package/dist/src/utils/debug.d.ts +0 -29
- package/dist/src/utils/debug.js +0 -87
- package/dist/src/utils/debug.js.map +0 -1
- package/dist/src/utils/env-api-key.d.ts +0 -5
- package/dist/src/utils/env-api-key.js +0 -57
- package/dist/src/utils/env-api-key.js.map +0 -1
- package/dist/src/utils/environment.d.ts +0 -4
- package/dist/src/utils/environment.js +0 -77
- package/dist/src/utils/environment.js.map +0 -1
- package/dist/src/utils/file-utils.d.ts +0 -10
- package/dist/src/utils/file-utils.js +0 -49
- package/dist/src/utils/file-utils.js.map +0 -1
- package/dist/src/utils/logging.d.ts +0 -9
- package/dist/src/utils/logging.js +0 -47
- package/dist/src/utils/logging.js.map +0 -1
- package/dist/src/utils/oauth.d.ts +0 -33
- package/dist/src/utils/oauth.js +0 -288
- package/dist/src/utils/oauth.js.map +0 -1
- package/dist/src/utils/package-json.d.ts +0 -30
- package/dist/src/utils/package-json.js +0 -47
- package/dist/src/utils/package-json.js.map +0 -1
- package/dist/src/utils/package-manager.d.ts +0 -21
- package/dist/src/utils/package-manager.js +0 -210
- package/dist/src/utils/package-manager.js.map +0 -1
- package/dist/src/utils/provisioning.d.ts +0 -25
- package/dist/src/utils/provisioning.js +0 -191
- package/dist/src/utils/provisioning.js.map +0 -1
- package/dist/src/utils/rules/astro-rules.md +0 -44
- package/dist/src/utils/rules/next-rules.md +0 -9
- package/dist/src/utils/rules/react-native-rules.md +0 -7
- package/dist/src/utils/rules/react-rules.md +0 -7
- package/dist/src/utils/rules/svelte-rules.md +0 -7
- package/dist/src/utils/rules/universal.md +0 -32
- package/dist/src/utils/semver.d.ts +0 -21
- package/dist/src/utils/semver.js +0 -87
- package/dist/src/utils/semver.js.map +0 -1
- package/dist/src/utils/setup-utils.d.ts +0 -79
- package/dist/src/utils/setup-utils.js +0 -406
- package/dist/src/utils/setup-utils.js.map +0 -1
- package/dist/src/utils/string.d.ts +0 -1
- package/dist/src/utils/string.js +0 -9
- package/dist/src/utils/string.js.map +0 -1
- package/dist/src/utils/types.d.ts +0 -85
- package/dist/src/utils/types.js +0 -3
- package/dist/src/utils/types.js.map +0 -1
- package/dist/src/utils/urls.d.ts +0 -7
- package/dist/src/utils/urls.js +0 -78
- package/dist/src/utils/urls.js.map +0 -1
- package/dist/src/utils/vendor/is-unicorn-supported.d.ts +0 -1
- package/dist/src/utils/vendor/is-unicorn-supported.js +0 -24
- package/dist/src/utils/vendor/is-unicorn-supported.js.map +0 -1
- package/dist/src/utils/wizard-abort.d.ts +0 -16
- package/dist/src/utils/wizard-abort.js +0 -59
- package/dist/src/utils/wizard-abort.js.map +0 -1
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* GroupedPickerMenu — Multi-select with category headers.
|
|
4
|
-
*
|
|
5
|
-
* Renders groups of options with bold category labels.
|
|
6
|
-
* Arrow keys navigate selectable items (headers are skipped),
|
|
7
|
-
* space toggles, "a" toggles all, enter submits.
|
|
8
|
-
*
|
|
9
|
-
* When content exceeds available terminal height, the list scrolls
|
|
10
|
-
* to keep the focused item visible with ↑/↓ indicators.
|
|
11
|
-
*/
|
|
12
|
-
import { Box, Text, useInput } from 'ink';
|
|
13
|
-
import { useState, useMemo } from 'react';
|
|
14
|
-
import { Icons, Colors } from '../styles.js';
|
|
15
|
-
import { PromptLabel } from './PromptLabel.js';
|
|
16
|
-
import { useStdoutDimensions } from '../hooks/useStdoutDimensions.js';
|
|
17
|
-
/** Truncate text with "…" if it exceeds maxWidth. */
|
|
18
|
-
function truncateWithEllipsis(text, maxWidth) {
|
|
19
|
-
if (text.length <= maxWidth)
|
|
20
|
-
return text;
|
|
21
|
-
return text.slice(0, maxWidth - 1) + '…';
|
|
22
|
-
}
|
|
23
|
-
/** Rows consumed by chrome outside this component (title bar, screen padding, etc.) */
|
|
24
|
-
const CHROME_OVERHEAD = 10;
|
|
25
|
-
/** Rows used by the prompt label, hint text, and marginTop before content. */
|
|
26
|
-
const MENU_CHROME = 3;
|
|
27
|
-
/** Count the visual rows occupied by rows[start..end), accounting for header margins. */
|
|
28
|
-
function countVisualRows(rows, start, end) {
|
|
29
|
-
let count = 0;
|
|
30
|
-
for (let i = start; i < end && i < rows.length; i++) {
|
|
31
|
-
if (rows[i].kind === 'header' && i > start)
|
|
32
|
-
count += 1; // marginTop gap
|
|
33
|
-
count += 1;
|
|
34
|
-
}
|
|
35
|
-
return count;
|
|
36
|
-
}
|
|
37
|
-
/** From scrollOffset, find how many flat rows fit in the visual budget. */
|
|
38
|
-
function computeVisibleEnd(rows, scrollOffset, budget) {
|
|
39
|
-
let visualCount = 0;
|
|
40
|
-
let i = scrollOffset;
|
|
41
|
-
while (i < rows.length) {
|
|
42
|
-
const cost = rows[i].kind === 'header' && i > scrollOffset ? 2 : 1;
|
|
43
|
-
if (visualCount + cost > budget)
|
|
44
|
-
break;
|
|
45
|
-
visualCount += cost;
|
|
46
|
-
i++;
|
|
47
|
-
}
|
|
48
|
-
return i;
|
|
49
|
-
}
|
|
50
|
-
/** Adjust scroll offset to keep focusedRowIdx visible within the viewport. */
|
|
51
|
-
function adjustScrollOffset(currentOffset, focusedRowIdx, rows, viewportBudget) {
|
|
52
|
-
const visibleEnd = computeVisibleEnd(rows, currentOffset, viewportBudget);
|
|
53
|
-
// Already visible
|
|
54
|
-
if (focusedRowIdx >= currentOffset && focusedRowIdx < visibleEnd) {
|
|
55
|
-
return currentOffset;
|
|
56
|
-
}
|
|
57
|
-
// Focus moved above viewport — scroll up, including group header if adjacent
|
|
58
|
-
if (focusedRowIdx < currentOffset) {
|
|
59
|
-
let newOffset = focusedRowIdx;
|
|
60
|
-
if (newOffset > 0 && rows[newOffset - 1]?.kind === 'header') {
|
|
61
|
-
newOffset--;
|
|
62
|
-
}
|
|
63
|
-
return Math.max(0, newOffset);
|
|
64
|
-
}
|
|
65
|
-
// Focus moved below viewport — scroll down minimally
|
|
66
|
-
let newOffset = currentOffset + 1;
|
|
67
|
-
while (newOffset < rows.length) {
|
|
68
|
-
const end = computeVisibleEnd(rows, newOffset, viewportBudget);
|
|
69
|
-
if (focusedRowIdx < end)
|
|
70
|
-
break;
|
|
71
|
-
newOffset++;
|
|
72
|
-
}
|
|
73
|
-
return Math.min(newOffset, Math.max(0, rows.length - 1));
|
|
74
|
-
}
|
|
75
|
-
export const GroupedPickerMenu = ({ message, groups, initialSelected, onSelect, }) => {
|
|
76
|
-
const [termCols, termRows] = useStdoutDimensions();
|
|
77
|
-
// Available width for option labels, after subtracting layout chrome:
|
|
78
|
-
// paddingX(2) + marginLeft(2) + option marginLeft(1) + gap(1) + checkbox(2) = 8
|
|
79
|
-
const labelWidth = Math.max(10, Math.min(termCols, 120) - 8);
|
|
80
|
-
// Build a flat row list with headers interleaved
|
|
81
|
-
const rows = useMemo(() => {
|
|
82
|
-
const result = [];
|
|
83
|
-
for (const [groupName, options] of Object.entries(groups)) {
|
|
84
|
-
result.push({ kind: 'header', label: groupName });
|
|
85
|
-
for (const opt of options) {
|
|
86
|
-
result.push({ kind: 'option', ...opt });
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return result;
|
|
90
|
-
}, [groups]);
|
|
91
|
-
// Indices of selectable (non-header) rows
|
|
92
|
-
const selectableIndices = useMemo(() => rows
|
|
93
|
-
.map((r, i) => (r.kind === 'option' ? i : -1))
|
|
94
|
-
.filter((i) => i >= 0), [rows]);
|
|
95
|
-
// All option values for toggle-all
|
|
96
|
-
const allValues = useMemo(() => rows
|
|
97
|
-
.filter((r) => r.kind === 'option')
|
|
98
|
-
.map((r) => r.value), [rows]);
|
|
99
|
-
const [focusedSelectable, setFocusedSelectable] = useState(0);
|
|
100
|
-
const [selected, setSelected] = useState(() => new Set(initialSelected ?? allValues));
|
|
101
|
-
const [scrollOffset, setScrollOffset] = useState(0);
|
|
102
|
-
const focusedRowIdx = selectableIndices[focusedSelectable] ?? 0;
|
|
103
|
-
// Viewport budget: how many visual rows can be shown
|
|
104
|
-
const viewportBudget = Math.max(5, termRows - CHROME_OVERHEAD - MENU_CHROME);
|
|
105
|
-
const totalVisual = countVisualRows(rows, 0, rows.length);
|
|
106
|
-
const needsScroll = totalVisual > viewportBudget;
|
|
107
|
-
const effectiveBudget = needsScroll ? viewportBudget - 2 : viewportBudget;
|
|
108
|
-
useInput((input, key) => {
|
|
109
|
-
let newFocused = focusedSelectable;
|
|
110
|
-
if (key.upArrow) {
|
|
111
|
-
newFocused =
|
|
112
|
-
focusedSelectable > 0
|
|
113
|
-
? focusedSelectable - 1
|
|
114
|
-
: selectableIndices.length - 1;
|
|
115
|
-
}
|
|
116
|
-
if (key.downArrow) {
|
|
117
|
-
newFocused =
|
|
118
|
-
focusedSelectable < selectableIndices.length - 1
|
|
119
|
-
? focusedSelectable + 1
|
|
120
|
-
: 0;
|
|
121
|
-
}
|
|
122
|
-
if (newFocused !== focusedSelectable) {
|
|
123
|
-
setFocusedSelectable(newFocused);
|
|
124
|
-
if (needsScroll) {
|
|
125
|
-
const newFocusedRowIdx = selectableIndices[newFocused] ?? 0;
|
|
126
|
-
setScrollOffset((prev) => adjustScrollOffset(prev, newFocusedRowIdx, rows, effectiveBudget));
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
if (input === ' ') {
|
|
130
|
-
const targetRowIdx = selectableIndices[newFocused] ?? 0;
|
|
131
|
-
const row = rows[targetRowIdx];
|
|
132
|
-
if (row?.kind === 'option') {
|
|
133
|
-
setSelected((prev) => {
|
|
134
|
-
const next = new Set(prev);
|
|
135
|
-
if (next.has(row.value)) {
|
|
136
|
-
next.delete(row.value);
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
next.add(row.value);
|
|
140
|
-
}
|
|
141
|
-
return next;
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
if (input === 'a') {
|
|
146
|
-
setSelected((prev) => {
|
|
147
|
-
if (prev.size === allValues.length) {
|
|
148
|
-
return new Set();
|
|
149
|
-
}
|
|
150
|
-
return new Set(allValues);
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
if (key.return) {
|
|
154
|
-
onSelect([...selected]);
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
// Determine visible slice
|
|
158
|
-
const visibleStart = needsScroll ? scrollOffset : 0;
|
|
159
|
-
const visibleEnd = needsScroll
|
|
160
|
-
? computeVisibleEnd(rows, visibleStart, effectiveBudget)
|
|
161
|
-
: rows.length;
|
|
162
|
-
const visibleRows = rows.slice(visibleStart, visibleEnd);
|
|
163
|
-
const hiddenAbove = needsScroll
|
|
164
|
-
? selectableIndices.filter((s) => s < visibleStart).length
|
|
165
|
-
: 0;
|
|
166
|
-
const hiddenBelow = needsScroll
|
|
167
|
-
? selectableIndices.filter((s) => s >= visibleEnd).length
|
|
168
|
-
: 0;
|
|
169
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(PromptLabel, { message: message }), _jsxs(Text, { dimColor: true, children: [' ', "(space to toggle, a to toggle all, enter to confirm)"] }), _jsxs(Box, { flexDirection: "column", marginTop: 1, marginLeft: 2, children: [needsScroll && (_jsx(Text, { dimColor: true, children: hiddenAbove > 0 ? `↑ ${hiddenAbove} more` : ' ' })), visibleRows.map((row, relIdx) => {
|
|
170
|
-
const absIdx = visibleStart + relIdx;
|
|
171
|
-
if (row.kind === 'header') {
|
|
172
|
-
return (_jsx(Box, { marginTop: relIdx > 0 && absIdx > 0 ? 1 : 0, children: _jsx(Text, { bold: true, dimColor: true, children: row.label }) }, `h-${absIdx}`));
|
|
173
|
-
}
|
|
174
|
-
const isFocused = focusedRowIdx === absIdx;
|
|
175
|
-
const isSelected = selected.has(row.value);
|
|
176
|
-
const checkbox = isSelected ? Icons.squareFilled : Icons.squareOpen;
|
|
177
|
-
const fullLabel = row.hint ? `${row.label} (${row.hint})` : row.label;
|
|
178
|
-
const label = truncateWithEllipsis(fullLabel, labelWidth);
|
|
179
|
-
return (_jsxs(Box, { gap: 1, marginLeft: 1, children: [_jsx(Text, { color: isSelected ? 'white' : Colors.muted, dimColor: !isFocused && !isSelected, children: checkbox }), _jsx(Box, { flexGrow: 1, flexShrink: 1, overflow: "hidden", children: _jsx(Text, { color: isFocused ? Colors.accent : undefined, bold: isFocused, dimColor: !isFocused, wrap: "truncate", children: label }) })] }, row.value));
|
|
180
|
-
}), needsScroll && (_jsx(Text, { dimColor: true, children: hiddenBelow > 0 ? `↓ ${hiddenBelow} more` : ' ' }))] })] }));
|
|
181
|
-
};
|
|
182
|
-
//# sourceMappingURL=GroupedPickerMenu.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GroupedPickerMenu.js","sourceRoot":"","sources":["../../../../../src/ui/tui/primitives/GroupedPickerMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * GroupedPickerMenu — Multi-select with category headers.\n *\n * Renders groups of options with bold category labels.\n * Arrow keys navigate selectable items (headers are skipped),\n * space toggles, \"a\" toggles all, enter submits.\n *\n * When content exceeds available terminal height, the list scrolls\n * to keep the focused item visible with ↑/↓ indicators.\n */\n\nimport { Box, Text, useInput } from 'ink';\nimport { useState, useMemo } from 'react';\nimport { Icons, Colors } from '../styles.js';\nimport { PromptLabel } from './PromptLabel.js';\nimport { useStdoutDimensions } from '../hooks/useStdoutDimensions.js';\n\ninterface GroupOption {\n value: string;\n label: string;\n hint?: string;\n}\n\ninterface GroupedPickerMenuProps {\n message?: string;\n groups: Record<string, GroupOption[]>;\n initialSelected?: string[];\n onSelect: (values: string[]) => void;\n}\n\ntype Row =\n | { kind: 'header'; label: string }\n | { kind: 'option'; value: string; label: string; hint?: string };\n\n/** Truncate text with \"…\" if it exceeds maxWidth. */\nfunction truncateWithEllipsis(text: string, maxWidth: number): string {\n if (text.length <= maxWidth) return text;\n return text.slice(0, maxWidth - 1) + '…';\n}\n\n/** Rows consumed by chrome outside this component (title bar, screen padding, etc.) */\nconst CHROME_OVERHEAD = 10;\n/** Rows used by the prompt label, hint text, and marginTop before content. */\nconst MENU_CHROME = 3;\n\n/** Count the visual rows occupied by rows[start..end), accounting for header margins. */\nfunction countVisualRows(rows: Row[], start: number, end: number): number {\n let count = 0;\n for (let i = start; i < end && i < rows.length; i++) {\n if (rows[i].kind === 'header' && i > start) count += 1; // marginTop gap\n count += 1;\n }\n return count;\n}\n\n/** From scrollOffset, find how many flat rows fit in the visual budget. */\nfunction computeVisibleEnd(\n rows: Row[],\n scrollOffset: number,\n budget: number,\n): number {\n let visualCount = 0;\n let i = scrollOffset;\n while (i < rows.length) {\n const cost = rows[i].kind === 'header' && i > scrollOffset ? 2 : 1;\n if (visualCount + cost > budget) break;\n visualCount += cost;\n i++;\n }\n return i;\n}\n\n/** Adjust scroll offset to keep focusedRowIdx visible within the viewport. */\nfunction adjustScrollOffset(\n currentOffset: number,\n focusedRowIdx: number,\n rows: Row[],\n viewportBudget: number,\n): number {\n const visibleEnd = computeVisibleEnd(rows, currentOffset, viewportBudget);\n\n // Already visible\n if (focusedRowIdx >= currentOffset && focusedRowIdx < visibleEnd) {\n return currentOffset;\n }\n\n // Focus moved above viewport — scroll up, including group header if adjacent\n if (focusedRowIdx < currentOffset) {\n let newOffset = focusedRowIdx;\n if (newOffset > 0 && rows[newOffset - 1]?.kind === 'header') {\n newOffset--;\n }\n return Math.max(0, newOffset);\n }\n\n // Focus moved below viewport — scroll down minimally\n let newOffset = currentOffset + 1;\n while (newOffset < rows.length) {\n const end = computeVisibleEnd(rows, newOffset, viewportBudget);\n if (focusedRowIdx < end) break;\n newOffset++;\n }\n return Math.min(newOffset, Math.max(0, rows.length - 1));\n}\n\nexport const GroupedPickerMenu = ({\n message,\n groups,\n initialSelected,\n onSelect,\n}: GroupedPickerMenuProps) => {\n const [termCols, termRows] = useStdoutDimensions();\n\n // Available width for option labels, after subtracting layout chrome:\n // paddingX(2) + marginLeft(2) + option marginLeft(1) + gap(1) + checkbox(2) = 8\n const labelWidth = Math.max(10, Math.min(termCols, 120) - 8);\n\n // Build a flat row list with headers interleaved\n const rows = useMemo<Row[]>(() => {\n const result: Row[] = [];\n for (const [groupName, options] of Object.entries(groups)) {\n result.push({ kind: 'header', label: groupName });\n for (const opt of options) {\n result.push({ kind: 'option', ...opt });\n }\n }\n return result;\n }, [groups]);\n\n // Indices of selectable (non-header) rows\n const selectableIndices = useMemo(\n () =>\n rows\n .map((r, i) => (r.kind === 'option' ? i : -1))\n .filter((i) => i >= 0),\n [rows],\n );\n\n // All option values for toggle-all\n const allValues = useMemo(\n () =>\n rows\n .filter((r): r is Row & { kind: 'option' } => r.kind === 'option')\n .map((r) => r.value),\n [rows],\n );\n\n const [focusedSelectable, setFocusedSelectable] = useState(0);\n const [selected, setSelected] = useState<Set<string>>(\n () => new Set(initialSelected ?? allValues),\n );\n const [scrollOffset, setScrollOffset] = useState(0);\n\n const focusedRowIdx = selectableIndices[focusedSelectable] ?? 0;\n\n // Viewport budget: how many visual rows can be shown\n const viewportBudget = Math.max(5, termRows - CHROME_OVERHEAD - MENU_CHROME);\n const totalVisual = countVisualRows(rows, 0, rows.length);\n const needsScroll = totalVisual > viewportBudget;\n const effectiveBudget = needsScroll ? viewportBudget - 2 : viewportBudget;\n\n useInput((input, key) => {\n let newFocused = focusedSelectable;\n\n if (key.upArrow) {\n newFocused =\n focusedSelectable > 0\n ? focusedSelectable - 1\n : selectableIndices.length - 1;\n }\n if (key.downArrow) {\n newFocused =\n focusedSelectable < selectableIndices.length - 1\n ? focusedSelectable + 1\n : 0;\n }\n\n if (newFocused !== focusedSelectable) {\n setFocusedSelectable(newFocused);\n if (needsScroll) {\n const newFocusedRowIdx = selectableIndices[newFocused] ?? 0;\n setScrollOffset((prev) =>\n adjustScrollOffset(prev, newFocusedRowIdx, rows, effectiveBudget),\n );\n }\n }\n\n if (input === ' ') {\n const targetRowIdx = selectableIndices[newFocused] ?? 0;\n const row = rows[targetRowIdx];\n if (row?.kind === 'option') {\n setSelected((prev) => {\n const next = new Set(prev);\n if (next.has(row.value)) {\n next.delete(row.value);\n } else {\n next.add(row.value);\n }\n return next;\n });\n }\n }\n if (input === 'a') {\n setSelected((prev) => {\n if (prev.size === allValues.length) {\n return new Set();\n }\n return new Set(allValues);\n });\n }\n if (key.return) {\n onSelect([...selected]);\n }\n });\n\n // Determine visible slice\n const visibleStart = needsScroll ? scrollOffset : 0;\n const visibleEnd = needsScroll\n ? computeVisibleEnd(rows, visibleStart, effectiveBudget)\n : rows.length;\n const visibleRows = rows.slice(visibleStart, visibleEnd);\n const hiddenAbove = needsScroll\n ? selectableIndices.filter((s) => s < visibleStart).length\n : 0;\n const hiddenBelow = needsScroll\n ? selectableIndices.filter((s) => s >= visibleEnd).length\n : 0;\n\n return (\n <Box flexDirection=\"column\">\n <PromptLabel message={message} />\n <Text dimColor>\n {' '}\n (space to toggle, a to toggle all, enter to confirm)\n </Text>\n <Box flexDirection=\"column\" marginTop={1} marginLeft={2}>\n {needsScroll && (\n <Text dimColor>\n {hiddenAbove > 0 ? `↑ ${hiddenAbove} more` : ' '}\n </Text>\n )}\n {visibleRows.map((row, relIdx) => {\n const absIdx = visibleStart + relIdx;\n\n if (row.kind === 'header') {\n return (\n <Box\n key={`h-${absIdx}`}\n marginTop={relIdx > 0 && absIdx > 0 ? 1 : 0}\n >\n <Text bold dimColor>\n {row.label}\n </Text>\n </Box>\n );\n }\n\n const isFocused = focusedRowIdx === absIdx;\n const isSelected = selected.has(row.value);\n const checkbox = isSelected ? Icons.squareFilled : Icons.squareOpen;\n const fullLabel = row.hint ? `${row.label} (${row.hint})` : row.label;\n const label = truncateWithEllipsis(fullLabel, labelWidth);\n\n return (\n <Box key={row.value} gap={1} marginLeft={1}>\n <Text\n color={isSelected ? 'white' : Colors.muted}\n dimColor={!isFocused && !isSelected}\n >\n {checkbox}\n </Text>\n <Box flexGrow={1} flexShrink={1} overflow=\"hidden\">\n <Text\n color={isFocused ? Colors.accent : undefined}\n bold={isFocused}\n dimColor={!isFocused}\n wrap=\"truncate\"\n >\n {label}\n </Text>\n </Box>\n </Box>\n );\n })}\n {needsScroll && (\n <Text dimColor>\n {hiddenBelow > 0 ? `↓ ${hiddenBelow} more` : ' '}\n </Text>\n )}\n </Box>\n </Box>\n );\n};\n"]}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* HNViewer — Top 10 Hacker News stories.
|
|
4
|
-
*
|
|
5
|
-
* Fetches from the HN Firebase API on mount.
|
|
6
|
-
* Each story has a [1]–[0] numeral; typing it opens the HN comments page.
|
|
7
|
-
*/
|
|
8
|
-
import { Box, Text, useInput } from 'ink';
|
|
9
|
-
import { useState, useEffect } from 'react';
|
|
10
|
-
import { Colors } from '../styles.js';
|
|
11
|
-
const HN_API = 'https://hacker-news.firebaseio.com/v0';
|
|
12
|
-
export const HNViewer = () => {
|
|
13
|
-
const [stories, setStories] = useState([]);
|
|
14
|
-
const [loading, setLoading] = useState(true);
|
|
15
|
-
useEffect(() => {
|
|
16
|
-
void (async () => {
|
|
17
|
-
try {
|
|
18
|
-
const res = await fetch(`${HN_API}/topstories.json`);
|
|
19
|
-
const ids = (await res.json());
|
|
20
|
-
const top10 = ids.slice(0, 10);
|
|
21
|
-
const items = await Promise.all(top10.map(async (id) => {
|
|
22
|
-
const r = await fetch(`${HN_API}/item/${id}.json`);
|
|
23
|
-
return r.json();
|
|
24
|
-
}));
|
|
25
|
-
setStories(items);
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
// Silently fail — tab just stays empty
|
|
29
|
-
}
|
|
30
|
-
setLoading(false);
|
|
31
|
-
})();
|
|
32
|
-
}, []);
|
|
33
|
-
useInput((input) => {
|
|
34
|
-
// Map keys 1–9 → index 0–8, key 0 → index 9
|
|
35
|
-
const num = parseInt(input, 10);
|
|
36
|
-
if (isNaN(num))
|
|
37
|
-
return;
|
|
38
|
-
const index = num === 0 ? 9 : num - 1;
|
|
39
|
-
const story = stories[index];
|
|
40
|
-
if (!story)
|
|
41
|
-
return;
|
|
42
|
-
const url = `https://news.ycombinator.com/item?id=${story.id}`;
|
|
43
|
-
void import('child_process').then(({ exec }) => {
|
|
44
|
-
exec(`open "${url}" 2>/dev/null || xdg-open "${url}" 2>/dev/null`);
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
if (loading) {
|
|
48
|
-
return (_jsx(Box, { paddingX: 1, children: _jsx(Text, { dimColor: true, children: "Loading Hacker News..." }) }));
|
|
49
|
-
}
|
|
50
|
-
if (stories.length === 0) {
|
|
51
|
-
return (_jsx(Box, { paddingX: 1, children: _jsx(Text, { dimColor: true, children: "Could not load Hacker News." }) }));
|
|
52
|
-
}
|
|
53
|
-
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(Text, { bold: true, color: Colors.accent, children: "Hacker News \u2014 Top 10" }), _jsx(Box, { height: 1 }), stories.map((story, i) => {
|
|
54
|
-
const key = i === 9 ? '0' : String(i + 1);
|
|
55
|
-
const date = new Date(story.time * 1000);
|
|
56
|
-
const dateStr = date.toLocaleDateString('en-US', {
|
|
57
|
-
month: 'short',
|
|
58
|
-
day: 'numeric',
|
|
59
|
-
});
|
|
60
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Text, { color: Colors.accent, bold: true, children: ["[", key, "]"] }), _jsxs(Text, { bold: true, children: [" ", story.title] })] }), _jsx(Box, { marginLeft: 4, children: _jsxs(Text, { dimColor: true, children: [story.score, "pts \u2022 ", story.by, ", ", dateStr] }) })] }, story.id));
|
|
61
|
-
})] }));
|
|
62
|
-
};
|
|
63
|
-
//# sourceMappingURL=HNViewer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HNViewer.js","sourceRoot":"","sources":["../../../../../src/ui/tui/primitives/HNViewer.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * HNViewer — Top 10 Hacker News stories.\n *\n * Fetches from the HN Firebase API on mount.\n * Each story has a [1]–[0] numeral; typing it opens the HN comments page.\n */\n\nimport { Box, Text, useInput } from 'ink';\nimport { useState, useEffect } from 'react';\nimport { Colors } from '../styles.js';\n\nconst HN_API = 'https://hacker-news.firebaseio.com/v0';\n\ninterface HNStory {\n id: number;\n title: string;\n by: string;\n time: number;\n score: number;\n}\n\nexport const HNViewer = () => {\n const [stories, setStories] = useState<HNStory[]>([]);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n void (async () => {\n try {\n const res = await fetch(`${HN_API}/topstories.json`);\n const ids = (await res.json()) as number[];\n const top10 = ids.slice(0, 10);\n\n const items = await Promise.all(\n top10.map(async (id) => {\n const r = await fetch(`${HN_API}/item/${id}.json`);\n return r.json() as Promise<HNStory>;\n }),\n );\n\n setStories(items);\n } catch {\n // Silently fail — tab just stays empty\n }\n setLoading(false);\n })();\n }, []);\n\n useInput((input) => {\n // Map keys 1–9 → index 0–8, key 0 → index 9\n const num = parseInt(input, 10);\n if (isNaN(num)) return;\n const index = num === 0 ? 9 : num - 1;\n const story = stories[index];\n if (!story) return;\n\n const url = `https://news.ycombinator.com/item?id=${story.id}`;\n void import('child_process').then(({ exec }) => {\n exec(`open \"${url}\" 2>/dev/null || xdg-open \"${url}\" 2>/dev/null`);\n });\n });\n\n if (loading) {\n return (\n <Box paddingX={1}>\n <Text dimColor>Loading Hacker News...</Text>\n </Box>\n );\n }\n\n if (stories.length === 0) {\n return (\n <Box paddingX={1}>\n <Text dimColor>Could not load Hacker News.</Text>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text bold color={Colors.accent}>\n Hacker News — Top 10\n </Text>\n <Box height={1} />\n {stories.map((story, i) => {\n const key = i === 9 ? '0' : String(i + 1);\n const date = new Date(story.time * 1000);\n const dateStr = date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n });\n\n return (\n <Box key={story.id} flexDirection=\"column\">\n <Box>\n <Text color={Colors.accent} bold>\n [{key}]\n </Text>\n <Text bold> {story.title}</Text>\n </Box>\n <Box marginLeft={4}>\n <Text dimColor>\n {story.score}pts • {story.by}, {dateStr}\n </Text>\n </Box>\n </Box>\n );\n })}\n </Box>\n );\n};\n"]}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LinesBlock — Reveals ReactNode lines one at a time.
|
|
3
|
-
* Each line can contain colors, bold, ASCII art — any JSX.
|
|
4
|
-
*/
|
|
5
|
-
import { type ReactNode } from 'react';
|
|
6
|
-
interface LinesBlockProps {
|
|
7
|
-
lines: ReactNode[];
|
|
8
|
-
interval: number;
|
|
9
|
-
active: boolean;
|
|
10
|
-
completed: boolean;
|
|
11
|
-
onComplete: () => void;
|
|
12
|
-
/** Max rows this block may occupy. When exceeded, top lines are truncated. */
|
|
13
|
-
maxHeight?: number;
|
|
14
|
-
}
|
|
15
|
-
export declare const LinesBlock: ({ lines, interval, active, completed, onComplete, maxHeight, }: LinesBlockProps) => import("react/jsx-runtime").JSX.Element;
|
|
16
|
-
export {};
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* LinesBlock — Reveals ReactNode lines one at a time.
|
|
4
|
-
* Each line can contain colors, bold, ASCII art — any JSX.
|
|
5
|
-
*/
|
|
6
|
-
import { Box } from 'ink';
|
|
7
|
-
import { useState, useEffect } from 'react';
|
|
8
|
-
export const LinesBlock = ({ lines, interval, active, completed, onComplete, maxHeight, }) => {
|
|
9
|
-
const [revealedCount, setRevealedCount] = useState(0);
|
|
10
|
-
// Reveal lines one at a time
|
|
11
|
-
useEffect(() => {
|
|
12
|
-
if (!active || revealedCount >= lines.length)
|
|
13
|
-
return;
|
|
14
|
-
const timer = setTimeout(() => setRevealedCount((c) => c + 1), revealedCount === 0 ? 0 : interval);
|
|
15
|
-
return () => clearTimeout(timer);
|
|
16
|
-
}, [active, revealedCount, lines.length, interval]);
|
|
17
|
-
// Fire onComplete when all lines revealed
|
|
18
|
-
useEffect(() => {
|
|
19
|
-
if (active && revealedCount >= lines.length)
|
|
20
|
-
onComplete();
|
|
21
|
-
}, [active, revealedCount, lines.length, onComplete]);
|
|
22
|
-
// When maxHeight is set, only show the last maxHeight lines
|
|
23
|
-
const visibleStart = maxHeight != null
|
|
24
|
-
? Math.max(0, (completed ? lines.length : revealedCount) - maxHeight)
|
|
25
|
-
: 0;
|
|
26
|
-
return (_jsx(Box, { flexDirection: "column", children: lines.map((line, li) => {
|
|
27
|
-
if (completed) {
|
|
28
|
-
if (li < visibleStart)
|
|
29
|
-
return null;
|
|
30
|
-
return _jsx(Box, { children: line }, li);
|
|
31
|
-
}
|
|
32
|
-
if (li >= revealedCount || li < visibleStart)
|
|
33
|
-
return null;
|
|
34
|
-
return _jsx(Box, { children: line }, li);
|
|
35
|
-
}) }));
|
|
36
|
-
};
|
|
37
|
-
//# sourceMappingURL=LinesBlock.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LinesBlock.js","sourceRoot":"","sources":["../../../../../src/ui/tui/primitives/LinesBlock.tsx"],"names":[],"mappings":";AAAA;;;GAGG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAC;AAY5D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,UAAU,EACV,SAAS,GACO,EAAE,EAAE;IACpB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEtD,6BAA6B;IAC7B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,IAAI,aAAa,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO;QACrD,MAAM,KAAK,GAAG,UAAU,CACtB,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EACpC,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CACnC,CAAC;QACF,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEpD,0CAA0C;IAC1C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,IAAI,aAAa,IAAI,KAAK,CAAC,MAAM;YAAE,UAAU,EAAE,CAAC;IAC5D,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAEtD,4DAA4D;IAC5D,MAAM,YAAY,GAChB,SAAS,IAAI,IAAI;QACf,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;QACrE,CAAC,CAAC,CAAC,CAAC;IAER,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,YACxB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;YACtB,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,EAAE,GAAG,YAAY;oBAAE,OAAO,IAAI,CAAC;gBACnC,OAAO,KAAC,GAAG,cAAW,IAAI,IAAT,EAAE,CAAc,CAAC;YACpC,CAAC;YACD,IAAI,EAAE,IAAI,aAAa,IAAI,EAAE,GAAG,YAAY;gBAAE,OAAO,IAAI,CAAC;YAC1D,OAAO,KAAC,GAAG,cAAW,IAAI,IAAT,EAAE,CAAc,CAAC;QACpC,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/**\n * LinesBlock — Reveals ReactNode lines one at a time.\n * Each line can contain colors, bold, ASCII art — any JSX.\n */\n\nimport { Box } from 'ink';\nimport { useState, useEffect, type ReactNode } from 'react';\n\ninterface LinesBlockProps {\n lines: ReactNode[];\n interval: number;\n active: boolean;\n completed: boolean;\n onComplete: () => void;\n /** Max rows this block may occupy. When exceeded, top lines are truncated. */\n maxHeight?: number;\n}\n\nexport const LinesBlock = ({\n lines,\n interval,\n active,\n completed,\n onComplete,\n maxHeight,\n}: LinesBlockProps) => {\n const [revealedCount, setRevealedCount] = useState(0);\n\n // Reveal lines one at a time\n useEffect(() => {\n if (!active || revealedCount >= lines.length) return;\n const timer = setTimeout(\n () => setRevealedCount((c) => c + 1),\n revealedCount === 0 ? 0 : interval,\n );\n return () => clearTimeout(timer);\n }, [active, revealedCount, lines.length, interval]);\n\n // Fire onComplete when all lines revealed\n useEffect(() => {\n if (active && revealedCount >= lines.length) onComplete();\n }, [active, revealedCount, lines.length, onComplete]);\n\n // When maxHeight is set, only show the last maxHeight lines\n const visibleStart =\n maxHeight != null\n ? Math.max(0, (completed ? lines.length : revealedCount) - maxHeight)\n : 0;\n\n return (\n <Box flexDirection=\"column\">\n {lines.map((line, li) => {\n if (completed) {\n if (li < visibleStart) return null;\n return <Box key={li}>{line}</Box>;\n }\n if (li >= revealedCount || li < visibleStart) return null;\n return <Box key={li}>{line}</Box>;\n })}\n </Box>\n );\n};\n"]}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* LoadingBox — Spinner with message.
|
|
4
|
-
*/
|
|
5
|
-
import { Box, Text } from 'ink';
|
|
6
|
-
import { Spinner } from '@inkjs/ui';
|
|
7
|
-
export const LoadingBox = ({ message }) => {
|
|
8
|
-
return (_jsxs(Box, { gap: 1, children: [_jsx(Spinner, {}), _jsx(Text, { children: message })] }));
|
|
9
|
-
};
|
|
10
|
-
//# sourceMappingURL=LoadingBox.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LoadingBox.js","sourceRoot":"","sources":["../../../../../src/ui/tui/primitives/LoadingBox.tsx"],"names":[],"mappings":";AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAE,OAAO,EAAmB,EAAE,EAAE;IACzD,OAAO,CACL,MAAC,GAAG,IAAC,GAAG,EAAE,CAAC,aACT,KAAC,OAAO,KAAG,EACX,KAAC,IAAI,cAAE,OAAO,GAAQ,IAClB,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/**\n * LoadingBox — Spinner with message.\n */\n\nimport { Box, Text } from 'ink';\nimport { Spinner } from '@inkjs/ui';\n\ninterface LoadingBoxProps {\n message: string;\n}\n\nexport const LoadingBox = ({ message }: LoadingBoxProps) => {\n return (\n <Box gap={1}>\n <Spinner />\n <Text>{message}</Text>\n </Box>\n );\n};\n"]}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LogViewer — Real-time log tail, pinned to available terminal height.
|
|
3
|
-
* Only renders the last N lines that fit on screen.
|
|
4
|
-
*/
|
|
5
|
-
interface LogViewerProps {
|
|
6
|
-
filePath: string;
|
|
7
|
-
/** Fixed visible height. Defaults to terminal rows minus chrome. */
|
|
8
|
-
height?: number;
|
|
9
|
-
}
|
|
10
|
-
export declare const LogViewer: ({ filePath, height }: LogViewerProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
-
export {};
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* LogViewer — Real-time log tail, pinned to available terminal height.
|
|
4
|
-
* Only renders the last N lines that fit on screen.
|
|
5
|
-
*/
|
|
6
|
-
import { Box, Text } from 'ink';
|
|
7
|
-
import { useState, useEffect } from 'react';
|
|
8
|
-
import * as fs from 'fs';
|
|
9
|
-
import { useStdoutDimensions } from '../hooks/useStdoutDimensions.js';
|
|
10
|
-
/** Rows consumed by TitleBar + spacer + ScreenContainer padding + status bar + tab bar */
|
|
11
|
-
const CHROME_ROWS = 8;
|
|
12
|
-
export const LogViewer = ({ filePath, height }) => {
|
|
13
|
-
const [, rows] = useStdoutDimensions();
|
|
14
|
-
const visibleLines = height ?? Math.max(5, rows - CHROME_ROWS);
|
|
15
|
-
const [lines, setLines] = useState([]);
|
|
16
|
-
useEffect(() => {
|
|
17
|
-
const readTail = () => {
|
|
18
|
-
try {
|
|
19
|
-
const content = fs.readFileSync(filePath, 'utf-8');
|
|
20
|
-
const allLines = content.split('\n');
|
|
21
|
-
setLines(allLines.slice(-visibleLines));
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
setLines(['(No log file found)']);
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
readTail();
|
|
28
|
-
let watcher;
|
|
29
|
-
try {
|
|
30
|
-
watcher = fs.watch(filePath, () => {
|
|
31
|
-
readTail();
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
catch {
|
|
35
|
-
// File might not exist yet — retry when it appears
|
|
36
|
-
const interval = setInterval(() => {
|
|
37
|
-
try {
|
|
38
|
-
fs.accessSync(filePath);
|
|
39
|
-
readTail();
|
|
40
|
-
clearInterval(interval);
|
|
41
|
-
watcher = fs.watch(filePath, () => readTail());
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
// Still waiting
|
|
45
|
-
}
|
|
46
|
-
}, 1000);
|
|
47
|
-
return () => clearInterval(interval);
|
|
48
|
-
}
|
|
49
|
-
return () => {
|
|
50
|
-
watcher?.close();
|
|
51
|
-
};
|
|
52
|
-
}, [filePath, visibleLines]);
|
|
53
|
-
return (_jsx(Box, { flexDirection: "column", height: visibleLines, children: lines.map((line, i) => (_jsx(Text, { dimColor: true, wrap: "truncate", children: line }, i))) }));
|
|
54
|
-
};
|
|
55
|
-
//# sourceMappingURL=LogViewer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LogViewer.js","sourceRoot":"","sources":["../../../../../src/ui/tui/primitives/LogViewer.tsx"],"names":[],"mappings":";AAAA;;;GAGG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,0FAA0F;AAC1F,MAAM,WAAW,GAAG,CAAC,CAAC;AAQtB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAkB,EAAE,EAAE;IAChE,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,mBAAmB,EAAE,CAAC;IACvC,MAAM,YAAY,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,WAAW,CAAC,CAAC;IAE/D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IAEjD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACrC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;YAC1C,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC;QAEF,QAAQ,EAAE,CAAC;QAEX,IAAI,OAAiC,CAAC;QACtC,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE;gBAChC,QAAQ,EAAE,CAAC;YACb,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,mDAAmD;YACnD,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;gBAChC,IAAI,CAAC;oBACH,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBACxB,QAAQ,EAAE,CAAC;oBACX,aAAa,CAAC,QAAQ,CAAC,CAAC;oBACxB,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACjD,CAAC;gBAAC,MAAM,CAAC;oBACP,gBAAgB;gBAClB,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,CAAC;YAET,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,GAAG,EAAE;YACV,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;IAE7B,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,MAAM,EAAE,YAAY,YAC7C,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,KAAC,IAAI,IAAS,QAAQ,QAAC,IAAI,EAAC,UAAU,YACnC,IAAI,IADI,CAAC,CAEL,CACR,CAAC,GACE,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/**\n * LogViewer — Real-time log tail, pinned to available terminal height.\n * Only renders the last N lines that fit on screen.\n */\n\nimport { Box, Text } from 'ink';\nimport { useState, useEffect } from 'react';\nimport * as fs from 'fs';\nimport { useStdoutDimensions } from '../hooks/useStdoutDimensions.js';\n\n/** Rows consumed by TitleBar + spacer + ScreenContainer padding + status bar + tab bar */\nconst CHROME_ROWS = 8;\n\ninterface LogViewerProps {\n filePath: string;\n /** Fixed visible height. Defaults to terminal rows minus chrome. */\n height?: number;\n}\n\nexport const LogViewer = ({ filePath, height }: LogViewerProps) => {\n const [, rows] = useStdoutDimensions();\n const visibleLines = height ?? Math.max(5, rows - CHROME_ROWS);\n\n const [lines, setLines] = useState<string[]>([]);\n\n useEffect(() => {\n const readTail = () => {\n try {\n const content = fs.readFileSync(filePath, 'utf-8');\n const allLines = content.split('\\n');\n setLines(allLines.slice(-visibleLines));\n } catch {\n setLines(['(No log file found)']);\n }\n };\n\n readTail();\n\n let watcher: fs.FSWatcher | undefined;\n try {\n watcher = fs.watch(filePath, () => {\n readTail();\n });\n } catch {\n // File might not exist yet — retry when it appears\n const interval = setInterval(() => {\n try {\n fs.accessSync(filePath);\n readTail();\n clearInterval(interval);\n watcher = fs.watch(filePath, () => readTail());\n } catch {\n // Still waiting\n }\n }, 1000);\n\n return () => clearInterval(interval);\n }\n\n return () => {\n watcher?.close();\n };\n }, [filePath, visibleLines]);\n\n return (\n <Box flexDirection=\"column\" height={visibleLines}>\n {lines.map((line, i) => (\n <Text key={i} dimColor wrap=\"truncate\">\n {line}\n </Text>\n ))}\n </Box>\n );\n};\n"]}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ModalOverlay — Reusable centered card for overlay screens.
|
|
3
|
-
*
|
|
4
|
-
* Shared layout for HealthCheckScreen, SettingsOverrideScreen, PortConflictScreen, etc.
|
|
5
|
-
* Provides: centered card with border, title, body, optional feedback, divider, and actions.
|
|
6
|
-
*/
|
|
7
|
-
import type { ReactNode } from 'react';
|
|
8
|
-
interface ModalOverlayProps {
|
|
9
|
-
/** Card border color */
|
|
10
|
-
borderColor: string;
|
|
11
|
-
/** Title text */
|
|
12
|
-
title: string;
|
|
13
|
-
/** Title text color (defaults to borderColor) */
|
|
14
|
-
titleColor?: string;
|
|
15
|
-
/** Card width (default 68) */
|
|
16
|
-
width?: number;
|
|
17
|
-
/** Body content */
|
|
18
|
-
children: ReactNode;
|
|
19
|
-
/** Optional feedback message (shown in yellow above the divider) */
|
|
20
|
-
feedback?: string | null;
|
|
21
|
-
/** Footer content below the divider (typically ConfirmationInput) */
|
|
22
|
-
footer?: ReactNode;
|
|
23
|
-
}
|
|
24
|
-
export declare const ModalOverlay: ({ borderColor, title, titleColor, width, children, feedback, footer, }: ModalOverlayProps) => import("react/jsx-runtime").JSX.Element;
|
|
25
|
-
export {};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Box, Text } from 'ink';
|
|
3
|
-
import { Divider } from './Divider.js';
|
|
4
|
-
export const ModalOverlay = ({ borderColor, title, titleColor, width = 68, children, feedback, footer, }) => {
|
|
5
|
-
return (_jsx(Box, { flexDirection: "column", flexGrow: 1, alignItems: "center", justifyContent: "center", children: _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: borderColor, paddingX: 3, paddingY: 1, width: width, children: [_jsx(Box, { justifyContent: "center", marginBottom: 1, children: _jsx(Text, { color: titleColor ?? borderColor, bold: true, children: title }) }), children, feedback && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "yellow", children: feedback }) })), footer && (_jsxs(_Fragment, { children: [_jsx(Box, { marginY: 1, children: _jsx(Divider, {}) }), footer] }))] }) }));
|
|
6
|
-
};
|
|
7
|
-
//# sourceMappingURL=ModalOverlay.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ModalOverlay.js","sourceRoot":"","sources":["../../../../../src/ui/tui/primitives/ModalOverlay.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAmBvC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAC3B,WAAW,EACX,KAAK,EACL,UAAU,EACV,KAAK,GAAG,EAAE,EACV,QAAQ,EACR,QAAQ,EACR,MAAM,GACY,EAAE,EAAE;IACtB,OAAO,CACL,KAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,QAAQ,EAAE,CAAC,EACX,UAAU,EAAC,QAAQ,EACnB,cAAc,EAAC,QAAQ,YAEvB,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,KAAK,aAEZ,KAAC,GAAG,IAAC,cAAc,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,YAC1C,KAAC,IAAI,IAAC,KAAK,EAAE,UAAU,IAAI,WAAW,EAAE,IAAI,kBACzC,KAAK,GACD,GACH,EAEL,QAAQ,EAER,QAAQ,IAAI,CACX,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,QAAQ,GAAQ,GAClC,CACP,EAEA,MAAM,IAAI,CACT,8BACE,KAAC,GAAG,IAAC,OAAO,EAAE,CAAC,YACb,KAAC,OAAO,KAAG,GACP,EACL,MAAM,IACN,CACJ,IACG,GACF,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/**\n * ModalOverlay — Reusable centered card for overlay screens.\n *\n * Shared layout for HealthCheckScreen, SettingsOverrideScreen, PortConflictScreen, etc.\n * Provides: centered card with border, title, body, optional feedback, divider, and actions.\n */\n\nimport type { ReactNode } from 'react';\nimport { Box, Text } from 'ink';\nimport { Divider } from './Divider.js';\n\ninterface ModalOverlayProps {\n /** Card border color */\n borderColor: string;\n /** Title text */\n title: string;\n /** Title text color (defaults to borderColor) */\n titleColor?: string;\n /** Card width (default 68) */\n width?: number;\n /** Body content */\n children: ReactNode;\n /** Optional feedback message (shown in yellow above the divider) */\n feedback?: string | null;\n /** Footer content below the divider (typically ConfirmationInput) */\n footer?: ReactNode;\n}\n\nexport const ModalOverlay = ({\n borderColor,\n title,\n titleColor,\n width = 68,\n children,\n feedback,\n footer,\n}: ModalOverlayProps) => {\n return (\n <Box\n flexDirection=\"column\"\n flexGrow={1}\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={borderColor}\n paddingX={3}\n paddingY={1}\n width={width}\n >\n <Box justifyContent=\"center\" marginBottom={1}>\n <Text color={titleColor ?? borderColor} bold>\n {title}\n </Text>\n </Box>\n\n {children}\n\n {feedback && (\n <Box marginTop={1}>\n <Text color=\"yellow\">{feedback}</Text>\n </Box>\n )}\n\n {footer && (\n <>\n <Box marginY={1}>\n <Divider />\n </Box>\n {footer}\n </>\n )}\n </Box>\n </Box>\n );\n};\n"]}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* NodeBlock — Renders static JSX, fires onComplete immediately.
|
|
3
|
-
* The sequencer's blockInterval handles dwell time.
|
|
4
|
-
*/
|
|
5
|
-
import { type ReactNode } from 'react';
|
|
6
|
-
interface NodeBlockProps {
|
|
7
|
-
content: ReactNode;
|
|
8
|
-
active: boolean;
|
|
9
|
-
completed: boolean;
|
|
10
|
-
onComplete: () => void;
|
|
11
|
-
}
|
|
12
|
-
export declare const NodeBlock: ({ content, active, completed, onComplete, }: NodeBlockProps) => import("react/jsx-runtime").JSX.Element;
|
|
13
|
-
export {};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* NodeBlock — Renders static JSX, fires onComplete immediately.
|
|
4
|
-
* The sequencer's blockInterval handles dwell time.
|
|
5
|
-
*/
|
|
6
|
-
import { Text } from 'ink';
|
|
7
|
-
import { useEffect } from 'react';
|
|
8
|
-
export const NodeBlock = ({ content, active, completed, onComplete, }) => {
|
|
9
|
-
useEffect(() => {
|
|
10
|
-
if (active)
|
|
11
|
-
onComplete();
|
|
12
|
-
}, [active, onComplete]);
|
|
13
|
-
if (completed)
|
|
14
|
-
return _jsx(Text, { dimColor: true, children: content });
|
|
15
|
-
return _jsx(_Fragment, { children: content });
|
|
16
|
-
};
|
|
17
|
-
//# sourceMappingURL=NodeBlock.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NodeBlock.js","sourceRoot":"","sources":["../../../../../src/ui/tui/primitives/NodeBlock.tsx"],"names":[],"mappings":";AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAC;AASlD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EACxB,OAAO,EACP,MAAM,EACN,SAAS,EACT,UAAU,GACK,EAAE,EAAE;IACnB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM;YAAE,UAAU,EAAE,CAAC;IAC3B,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAEzB,IAAI,SAAS;QAAE,OAAO,KAAC,IAAI,IAAC,QAAQ,kBAAE,OAAO,GAAQ,CAAC;IACtD,OAAO,4BAAG,OAAO,GAAI,CAAC;AACxB,CAAC,CAAC","sourcesContent":["/**\n * NodeBlock — Renders static JSX, fires onComplete immediately.\n * The sequencer's blockInterval handles dwell time.\n */\n\nimport { Text } from 'ink';\nimport { useEffect, type ReactNode } from 'react';\n\ninterface NodeBlockProps {\n content: ReactNode;\n active: boolean;\n completed: boolean;\n onComplete: () => void;\n}\n\nexport const NodeBlock = ({\n content,\n active,\n completed,\n onComplete,\n}: NodeBlockProps) => {\n useEffect(() => {\n if (active) onComplete();\n }, [active, onComplete]);\n\n if (completed) return <Text dimColor>{content}</Text>;\n return <>{content}</>;\n};\n"]}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PickerMenu — Single and multi select.
|
|
3
|
-
* Single mode: custom renderer with small triangle indicator.
|
|
4
|
-
* Multi mode: checkbox glyphs with space to toggle.
|
|
5
|
-
*/
|
|
6
|
-
interface PickerOption<T> {
|
|
7
|
-
label: string;
|
|
8
|
-
value: T;
|
|
9
|
-
hint?: string;
|
|
10
|
-
}
|
|
11
|
-
interface PickerMenuProps<T> {
|
|
12
|
-
message?: string;
|
|
13
|
-
options: PickerOption<T>[];
|
|
14
|
-
mode?: 'single' | 'multi';
|
|
15
|
-
centered?: boolean;
|
|
16
|
-
columns?: 1 | 2 | 3 | 4;
|
|
17
|
-
onSelect: (value: T | T[]) => void;
|
|
18
|
-
}
|
|
19
|
-
export declare const PickerMenu: <T>({ message, options, mode, centered, columns, onSelect, }: PickerMenuProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
20
|
-
export {};
|