refactor: update import paths for react/compiler-runtime to react-compiler-runtime
feat: add OpenClaude local agent playbook for setup and usage instructions chore: implement provider bootstrap script for profile initialization chore: create provider launch script to manage provider execution chore: add system check script for runtime diagnostics and validation feat: implement useEffectEventCompat hook for React 18 compatibility
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -3,3 +3,5 @@ dist/
|
|||||||
*.tsbuildinfo
|
*.tsbuildinfo
|
||||||
.env
|
.env
|
||||||
.env.*
|
.env.*
|
||||||
|
.openclaude-profile.json
|
||||||
|
reports/
|
||||||
|
|||||||
294
PLAYBOOK.md
Normal file
294
PLAYBOOK.md
Normal file
@@ -0,0 +1,294 @@
|
|||||||
|
# OpenClaude Local Agent Playbook
|
||||||
|
|
||||||
|
This playbook is a practical guide to run OpenClaude with a local model (Ollama), work safely, and get strong day-to-day results.
|
||||||
|
|
||||||
|
## 1. What You Have
|
||||||
|
|
||||||
|
- A CLI agent loop that can read/write files, run terminal commands, and help with coding workflows.
|
||||||
|
- A local provider profile system (`profile:init` and `dev:profile`).
|
||||||
|
- Runtime checks (`doctor:runtime`) and reporting (`doctor:report`).
|
||||||
|
- A local model profile currently set to `llama3.1:8b`.
|
||||||
|
|
||||||
|
## 2. Daily Start (Fast Path)
|
||||||
|
|
||||||
|
Run this in your project root:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
bun run dev:profile
|
||||||
|
```
|
||||||
|
|
||||||
|
For quick switches:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# low latency preset
|
||||||
|
bun run dev:fast
|
||||||
|
|
||||||
|
# better coding quality preset
|
||||||
|
bun run dev:code
|
||||||
|
```
|
||||||
|
|
||||||
|
If everything is healthy, OpenClaude starts directly.
|
||||||
|
|
||||||
|
## 3. One-Time Setup (If Needed)
|
||||||
|
|
||||||
|
### 3.1 Initialize a local profile
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
bun run profile:init -- --provider ollama --model llama3.1:8b
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.2 Confirm profile file
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
Get-Content .\.openclaude-profile.json
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.3 Validate environment
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
bun run doctor:runtime
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. Health and Diagnostics
|
||||||
|
|
||||||
|
### 4.1 Human-readable checks
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
bun run doctor:runtime
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.2 JSON diagnostics (automation/logging)
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
bun run doctor:runtime:json
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.3 Persist runtime report
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
bun run doctor:report
|
||||||
|
```
|
||||||
|
|
||||||
|
Report output:
|
||||||
|
|
||||||
|
- `reports/doctor-runtime.json`
|
||||||
|
|
||||||
|
### 4.4 Hardening checks
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# practical checks (smoke + runtime doctor)
|
||||||
|
bun run hardening:check
|
||||||
|
|
||||||
|
# strict checks (includes typecheck)
|
||||||
|
bun run hardening:strict
|
||||||
|
```
|
||||||
|
|
||||||
|
## 5. Provider Modes
|
||||||
|
|
||||||
|
## 5.1 Local mode (Ollama)
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
bun run profile:init -- --provider ollama --model llama3.1:8b
|
||||||
|
bun run dev:profile
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected behavior:
|
||||||
|
|
||||||
|
- No API key required.
|
||||||
|
- `OPENAI_BASE_URL` should be `http://localhost:11434/v1`.
|
||||||
|
|
||||||
|
## 5.2 OpenAI mode
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
bun run profile:init -- --provider openai --api-key sk-... --model gpt-4o
|
||||||
|
bun run dev:profile
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected behavior:
|
||||||
|
|
||||||
|
- Real API key required.
|
||||||
|
- Placeholder values fail fast.
|
||||||
|
|
||||||
|
## 6. Troubleshooting Matrix
|
||||||
|
|
||||||
|
## 6.1 `Script not found "dev"`
|
||||||
|
|
||||||
|
Cause:
|
||||||
|
|
||||||
|
- You ran command in the wrong folder.
|
||||||
|
|
||||||
|
Fix:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
cd C:\Users\Lucas Pedry\Documents\openclaude\openclaude
|
||||||
|
bun run dev:profile
|
||||||
|
```
|
||||||
|
|
||||||
|
## 6.2 `ollama: term not recognized`
|
||||||
|
|
||||||
|
Cause:
|
||||||
|
|
||||||
|
- Ollama not installed or PATH not loaded in this terminal.
|
||||||
|
|
||||||
|
Fix:
|
||||||
|
|
||||||
|
- Install Ollama from https://ollama.com/download/windows or `winget install Ollama.Ollama`.
|
||||||
|
- Open a new terminal and run:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
ollama --version
|
||||||
|
```
|
||||||
|
|
||||||
|
## 6.3 `Provider reachability failed` for localhost
|
||||||
|
|
||||||
|
Cause:
|
||||||
|
|
||||||
|
- Ollama service not running.
|
||||||
|
|
||||||
|
Fix:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
ollama serve
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, in another terminal:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
bun run doctor:runtime
|
||||||
|
```
|
||||||
|
|
||||||
|
## 6.4 `Missing key for non-local provider URL`
|
||||||
|
|
||||||
|
Cause:
|
||||||
|
|
||||||
|
- `OPENAI_BASE_URL` points to remote endpoint without key.
|
||||||
|
|
||||||
|
Fix:
|
||||||
|
|
||||||
|
- Re-initialize profile for ollama:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
bun run profile:init -- --provider ollama --model llama3.1:8b
|
||||||
|
```
|
||||||
|
|
||||||
|
## 6.5 Placeholder key (`SUA_CHAVE`) error
|
||||||
|
|
||||||
|
Cause:
|
||||||
|
|
||||||
|
- Placeholder was used instead of real key.
|
||||||
|
|
||||||
|
Fix:
|
||||||
|
|
||||||
|
- For OpenAI: use a real key.
|
||||||
|
- For Ollama: no key needed; keep localhost base URL.
|
||||||
|
|
||||||
|
## 7. Recommended Local Models
|
||||||
|
|
||||||
|
- Fast/general: `llama3.1:8b`
|
||||||
|
- Better coding quality (if hardware supports): `qwen2.5-coder:14b`
|
||||||
|
- Low-resource fallback: smaller instruct model
|
||||||
|
|
||||||
|
Switch model quickly:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
bun run profile:init -- --provider ollama --model qwen2.5-coder:14b
|
||||||
|
bun run dev:profile
|
||||||
|
```
|
||||||
|
|
||||||
|
Preset shortcuts already configured:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
bun run profile:fast # llama3.2:3b
|
||||||
|
bun run profile:code # qwen2.5-coder:7b
|
||||||
|
```
|
||||||
|
|
||||||
|
## 8. Practical Prompt Playbook (Copy/Paste)
|
||||||
|
|
||||||
|
## 8.1 Code understanding
|
||||||
|
|
||||||
|
- "Map this repository architecture and explain the execution flow from entrypoint to tool invocation."
|
||||||
|
- "Find the top 5 risky modules and explain why."
|
||||||
|
|
||||||
|
## 8.2 Refactoring
|
||||||
|
|
||||||
|
- "Refactor this module for clarity without behavior change, then run checks and summarize diff impact."
|
||||||
|
- "Extract shared logic from duplicated functions and add minimal tests."
|
||||||
|
|
||||||
|
## 8.3 Debugging
|
||||||
|
|
||||||
|
- "Reproduce the failure, identify root cause, implement fix, and validate with commands."
|
||||||
|
- "Trace this error path and list likely failure points with confidence levels."
|
||||||
|
|
||||||
|
## 8.4 Reliability
|
||||||
|
|
||||||
|
- "Add runtime guardrails and fail-fast messages for invalid provider env vars."
|
||||||
|
- "Create a diagnostic command that outputs JSON report for CI artifacts."
|
||||||
|
|
||||||
|
## 8.5 Review mode
|
||||||
|
|
||||||
|
- "Do a code review of unstaged changes, prioritize bugs/regressions, and suggest concrete patches."
|
||||||
|
|
||||||
|
## 9. Safe Working Rules
|
||||||
|
|
||||||
|
- Run `doctor:runtime` before debugging provider issues.
|
||||||
|
- Prefer `dev:profile` over manual env edits.
|
||||||
|
- Keep `.openclaude-profile.json` local (already gitignored).
|
||||||
|
- Use `doctor:report` before asking for help so you have a reproducible snapshot.
|
||||||
|
|
||||||
|
## 10. Quick Recovery Checklist
|
||||||
|
|
||||||
|
When something breaks, run in order:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
bun run doctor:runtime
|
||||||
|
bun run doctor:report
|
||||||
|
bun run smoke
|
||||||
|
```
|
||||||
|
|
||||||
|
If answers are very slow, check processor mode:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
ollama ps
|
||||||
|
```
|
||||||
|
|
||||||
|
If `PROCESSOR` shows `CPU`, your setup is valid but latency will be higher for large models.
|
||||||
|
|
||||||
|
If local model mode is failing:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
ollama --version
|
||||||
|
ollama serve
|
||||||
|
bun run doctor:runtime
|
||||||
|
bun run dev:profile
|
||||||
|
```
|
||||||
|
|
||||||
|
## 11. Command Reference
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# profile
|
||||||
|
bun run profile:init -- --provider ollama --model llama3.1:8b
|
||||||
|
bun run profile:init -- --provider openai --api-key sk-... --model gpt-4o
|
||||||
|
|
||||||
|
# launch
|
||||||
|
bun run dev:profile
|
||||||
|
bun run dev:ollama
|
||||||
|
bun run dev:openai
|
||||||
|
|
||||||
|
# diagnostics
|
||||||
|
bun run doctor:runtime
|
||||||
|
bun run doctor:runtime:json
|
||||||
|
bun run doctor:report
|
||||||
|
|
||||||
|
# quality
|
||||||
|
bun run smoke
|
||||||
|
bun run hardening:check
|
||||||
|
bun run hardening:strict
|
||||||
|
```
|
||||||
|
|
||||||
|
## 12. Success Criteria
|
||||||
|
|
||||||
|
Your setup is healthy when:
|
||||||
|
|
||||||
|
- `bun run doctor:runtime` passes provider and reachability checks.
|
||||||
|
- `bun run dev:profile` opens the CLI normally.
|
||||||
|
- Model shown in the UI matches your selected profile model.
|
||||||
57
README.md
57
README.md
@@ -168,6 +168,63 @@ You can also use `ANTHROPIC_MODEL` to override the model name. `OPENAI_MODEL` ta
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Runtime Hardening
|
||||||
|
|
||||||
|
Use these commands to keep the CLI stable and catch environment mistakes early:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# quick startup sanity check
|
||||||
|
bun run smoke
|
||||||
|
|
||||||
|
# validate provider env + reachability
|
||||||
|
bun run doctor:runtime
|
||||||
|
|
||||||
|
# print machine-readable runtime diagnostics
|
||||||
|
bun run doctor:runtime:json
|
||||||
|
|
||||||
|
# persist a diagnostics report to reports/doctor-runtime.json
|
||||||
|
bun run doctor:report
|
||||||
|
|
||||||
|
# full local hardening check (typecheck + smoke + runtime doctor)
|
||||||
|
bun run hardening:check
|
||||||
|
|
||||||
|
# strict hardening (includes project-wide typecheck)
|
||||||
|
bun run hardening:strict
|
||||||
|
```
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
- `doctor:runtime` fails fast if `CLAUDE_CODE_USE_OPENAI=1` with a placeholder key (`SUA_CHAVE`) or a missing key for non-local providers.
|
||||||
|
- Local providers (for example `http://localhost:11434/v1`) can run without `OPENAI_API_KEY`.
|
||||||
|
|
||||||
|
### Provider Launch Profiles
|
||||||
|
|
||||||
|
Use profile launchers to avoid repeated environment setup:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# one-time profile bootstrap (auto-detect ollama, otherwise openai)
|
||||||
|
bun run profile:init
|
||||||
|
|
||||||
|
# openai bootstrap with explicit key
|
||||||
|
bun run profile:init -- --provider openai --api-key sk-...
|
||||||
|
|
||||||
|
# ollama bootstrap with custom model
|
||||||
|
bun run profile:init -- --provider ollama --model llama3.1:8b
|
||||||
|
|
||||||
|
# launch using persisted profile (.openclaude-profile.json)
|
||||||
|
bun run dev:profile
|
||||||
|
|
||||||
|
# OpenAI profile (requires OPENAI_API_KEY in your shell)
|
||||||
|
bun run dev:openai
|
||||||
|
|
||||||
|
# Ollama profile (defaults: localhost:11434, llama3.1:8b)
|
||||||
|
bun run dev:ollama
|
||||||
|
```
|
||||||
|
|
||||||
|
`dev:openai` and `dev:ollama` run `doctor:runtime` first and only launch the app if checks pass.
|
||||||
|
For `dev:ollama`, make sure Ollama is running locally before launch.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## What Works
|
## What Works
|
||||||
|
|
||||||
- **All tools**: Bash, FileRead, FileWrite, FileEdit, Glob, Grep, WebFetch, WebSearch, Agent, MCP, LSP, NotebookEdit, Tasks
|
- **All tools**: Bash, FileRead, FileWrite, FileEdit, Glob, Grep, WebFetch, WebSearch, Agent, MCP, LSP, NotebookEdit, Tasks
|
||||||
|
|||||||
40
bun.lock
40
bun.lock
@@ -8,6 +8,7 @@
|
|||||||
"@alcalzone/ansi-tokenize": "^0.3.0",
|
"@alcalzone/ansi-tokenize": "^0.3.0",
|
||||||
"@anthropic-ai/bedrock-sdk": "^0.26.0",
|
"@anthropic-ai/bedrock-sdk": "^0.26.0",
|
||||||
"@anthropic-ai/foundry-sdk": "^0.2.0",
|
"@anthropic-ai/foundry-sdk": "^0.2.0",
|
||||||
|
"@anthropic-ai/sandbox-runtime": "^0.0.46",
|
||||||
"@anthropic-ai/sdk": "^0.81.0",
|
"@anthropic-ai/sdk": "^0.81.0",
|
||||||
"@anthropic-ai/vertex-sdk": "^0.14.0",
|
"@anthropic-ai/vertex-sdk": "^0.14.0",
|
||||||
"@commander-js/extra-typings": "^12.0.0",
|
"@commander-js/extra-typings": "^12.0.0",
|
||||||
@@ -32,6 +33,7 @@
|
|||||||
"chokidar": "^4.0.0",
|
"chokidar": "^4.0.0",
|
||||||
"cli-boxes": "^3.0.0",
|
"cli-boxes": "^3.0.0",
|
||||||
"cli-highlight": "^2.1.0",
|
"cli-highlight": "^2.1.0",
|
||||||
|
"code-excerpt": "^4.0.0",
|
||||||
"commander": "^12.0.0",
|
"commander": "^12.0.0",
|
||||||
"diff": "^7.0.0",
|
"diff": "^7.0.0",
|
||||||
"emoji-regex": "^10.4.0",
|
"emoji-regex": "^10.4.0",
|
||||||
@@ -53,12 +55,13 @@
|
|||||||
"picomatch": "^4.0.0",
|
"picomatch": "^4.0.0",
|
||||||
"proper-lockfile": "^4.1.2",
|
"proper-lockfile": "^4.1.2",
|
||||||
"qrcode": "^1.5.4",
|
"qrcode": "^1.5.4",
|
||||||
"react": "^18.3.1",
|
"react": "^19.2.4",
|
||||||
"react-compiler-runtime": "^1.0.0",
|
"react-compiler-runtime": "^1.0.0",
|
||||||
"react-reconciler": "^0.29.2",
|
"react-reconciler": "^0.33.0",
|
||||||
"semver": "^7.6.3",
|
"semver": "^7.6.3",
|
||||||
"shell-quote": "^1.8.2",
|
"shell-quote": "^1.8.2",
|
||||||
"signal-exit": "^4.1.0",
|
"signal-exit": "^4.1.0",
|
||||||
|
"stack-utils": "^2.0.6",
|
||||||
"strip-ansi": "^7.1.0",
|
"strip-ansi": "^7.1.0",
|
||||||
"supports-hyperlinks": "^3.1.0",
|
"supports-hyperlinks": "^3.1.0",
|
||||||
"tree-kill": "^1.2.2",
|
"tree-kill": "^1.2.2",
|
||||||
@@ -75,7 +78,8 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/bun": "^1.2.0",
|
"@types/bun": "^1.2.0",
|
||||||
"@types/react": "^18.3.0",
|
"@types/node": "^25.5.0",
|
||||||
|
"@types/react": "^19.2.14",
|
||||||
"typescript": "^5.7.0",
|
"typescript": "^5.7.0",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -87,6 +91,8 @@
|
|||||||
|
|
||||||
"@anthropic-ai/foundry-sdk": ["@anthropic-ai/foundry-sdk@0.2.3", "", { "dependencies": { "@anthropic-ai/sdk": ">=0.50.3 <1" } }, "sha512-pD5yYnAeem5s8wDLbdf8/N8CejF/edRd9TJV+0PrT9tLKv6ggQimnr7d05pQn6FrIYACPmty9hekCo2JgepP0w=="],
|
"@anthropic-ai/foundry-sdk": ["@anthropic-ai/foundry-sdk@0.2.3", "", { "dependencies": { "@anthropic-ai/sdk": ">=0.50.3 <1" } }, "sha512-pD5yYnAeem5s8wDLbdf8/N8CejF/edRd9TJV+0PrT9tLKv6ggQimnr7d05pQn6FrIYACPmty9hekCo2JgepP0w=="],
|
||||||
|
|
||||||
|
"@anthropic-ai/sandbox-runtime": ["@anthropic-ai/sandbox-runtime@0.0.46", "", { "dependencies": { "@pondwader/socks5-server": "^1.0.10", "@types/lodash-es": "^4.17.12", "commander": "^12.1.0", "lodash-es": "^4.17.23", "shell-quote": "^1.8.3", "zod": "^3.24.1" }, "bin": { "srt": "dist/cli.js" } }, "sha512-FeVZ4rbdiHNPiMtf70xkiwogDGXYcCKCPmYjrED2HGNlk5jOabgrlvUROz0SsVksIh24SVRuTwNTK/yGBFm/5w=="],
|
||||||
|
|
||||||
"@anthropic-ai/sdk": ["@anthropic-ai/sdk@0.81.0", "", { "dependencies": { "json-schema-to-ts": "^3.1.1" }, "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["zod"], "bin": { "anthropic-ai-sdk": "bin/cli" } }, "sha512-D4K5PvEV6wPiRtVlVsJHIUhHAmOZ6IT/I9rKlTf84gR7GyyAurPJK7z9BOf/AZqC5d1DhYQGJNKRmV+q8dGhgw=="],
|
"@anthropic-ai/sdk": ["@anthropic-ai/sdk@0.81.0", "", { "dependencies": { "json-schema-to-ts": "^3.1.1" }, "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["zod"], "bin": { "anthropic-ai-sdk": "bin/cli" } }, "sha512-D4K5PvEV6wPiRtVlVsJHIUhHAmOZ6IT/I9rKlTf84gR7GyyAurPJK7z9BOf/AZqC5d1DhYQGJNKRmV+q8dGhgw=="],
|
||||||
|
|
||||||
"@anthropic-ai/vertex-sdk": ["@anthropic-ai/vertex-sdk@0.14.4", "", { "dependencies": { "@anthropic-ai/sdk": ">=0.50.3 <1", "google-auth-library": "^9.4.2" } }, "sha512-BZUPRWghZxfSFtAxU563wH+jfWBPoedAwsVxG35FhmNsjeV8tyfN+lFriWhCpcZApxA4NdT6Soov+PzfnxxD5g=="],
|
"@anthropic-ai/vertex-sdk": ["@anthropic-ai/vertex-sdk@0.14.4", "", { "dependencies": { "@anthropic-ai/sdk": ">=0.50.3 <1", "google-auth-library": "^9.4.2" } }, "sha512-BZUPRWghZxfSFtAxU563wH+jfWBPoedAwsVxG35FhmNsjeV8tyfN+lFriWhCpcZApxA4NdT6Soov+PzfnxxD5g=="],
|
||||||
@@ -213,6 +219,8 @@
|
|||||||
|
|
||||||
"@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.40.0", "", {}, "sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw=="],
|
"@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.40.0", "", {}, "sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw=="],
|
||||||
|
|
||||||
|
"@pondwader/socks5-server": ["@pondwader/socks5-server@1.0.10", "", {}, "sha512-bQY06wzzR8D2+vVCUoBsr5QS2U6UgPUQRmErNwtsuI6vLcyRKkafjkr3KxbtGFf9aBBIV2mcvlsKD1UYaIV+sg=="],
|
||||||
|
|
||||||
"@protobufjs/aspromise": ["@protobufjs/aspromise@1.1.2", "", {}, "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="],
|
"@protobufjs/aspromise": ["@protobufjs/aspromise@1.1.2", "", {}, "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="],
|
||||||
|
|
||||||
"@protobufjs/base64": ["@protobufjs/base64@1.1.2", "", {}, "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="],
|
"@protobufjs/base64": ["@protobufjs/base64@1.1.2", "", {}, "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="],
|
||||||
@@ -329,11 +337,13 @@
|
|||||||
|
|
||||||
"@types/bun": ["@types/bun@1.3.11", "", { "dependencies": { "bun-types": "1.3.11" } }, "sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg=="],
|
"@types/bun": ["@types/bun@1.3.11", "", { "dependencies": { "bun-types": "1.3.11" } }, "sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg=="],
|
||||||
|
|
||||||
|
"@types/lodash": ["@types/lodash@4.17.24", "", {}, "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ=="],
|
||||||
|
|
||||||
|
"@types/lodash-es": ["@types/lodash-es@4.17.12", "", { "dependencies": { "@types/lodash": "*" } }, "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ=="],
|
||||||
|
|
||||||
"@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="],
|
"@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="],
|
||||||
|
|
||||||
"@types/prop-types": ["@types/prop-types@15.7.15", "", {}, "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw=="],
|
"@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="],
|
||||||
|
|
||||||
"@types/react": ["@types/react@18.3.28", "", { "dependencies": { "@types/prop-types": "*", "csstype": "^3.2.2" } }, "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw=="],
|
|
||||||
|
|
||||||
"accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="],
|
"accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="],
|
||||||
|
|
||||||
@@ -387,6 +397,8 @@
|
|||||||
|
|
||||||
"cliui": ["cliui@7.0.4", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ=="],
|
"cliui": ["cliui@7.0.4", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ=="],
|
||||||
|
|
||||||
|
"code-excerpt": ["code-excerpt@4.0.0", "", { "dependencies": { "convert-to-spaces": "^2.0.1" } }, "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA=="],
|
||||||
|
|
||||||
"color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
|
"color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
|
||||||
|
|
||||||
"color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="],
|
"color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="],
|
||||||
@@ -399,6 +411,8 @@
|
|||||||
|
|
||||||
"content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="],
|
"content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="],
|
||||||
|
|
||||||
|
"convert-to-spaces": ["convert-to-spaces@2.0.1", "", {}, "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ=="],
|
||||||
|
|
||||||
"cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="],
|
"cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="],
|
||||||
|
|
||||||
"cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="],
|
"cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="],
|
||||||
@@ -449,6 +463,8 @@
|
|||||||
|
|
||||||
"escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="],
|
"escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="],
|
||||||
|
|
||||||
|
"escape-string-regexp": ["escape-string-regexp@2.0.0", "", {}, "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="],
|
||||||
|
|
||||||
"etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="],
|
"etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="],
|
||||||
|
|
||||||
"eventsource": ["eventsource@3.0.7", "", { "dependencies": { "eventsource-parser": "^3.0.1" } }, "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA=="],
|
"eventsource": ["eventsource@3.0.7", "", { "dependencies": { "eventsource-parser": "^3.0.1" } }, "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA=="],
|
||||||
@@ -559,8 +575,6 @@
|
|||||||
|
|
||||||
"jose": ["jose@6.2.2", "", {}, "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ=="],
|
"jose": ["jose@6.2.2", "", {}, "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ=="],
|
||||||
|
|
||||||
"js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="],
|
|
||||||
|
|
||||||
"json-bigint": ["json-bigint@1.0.0", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="],
|
"json-bigint": ["json-bigint@1.0.0", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="],
|
||||||
|
|
||||||
"json-schema-to-ts": ["json-schema-to-ts@3.1.1", "", { "dependencies": { "@babel/runtime": "^7.18.3", "ts-algebra": "^2.0.0" } }, "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g=="],
|
"json-schema-to-ts": ["json-schema-to-ts@3.1.1", "", { "dependencies": { "@babel/runtime": "^7.18.3", "ts-algebra": "^2.0.0" } }, "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g=="],
|
||||||
@@ -585,8 +599,6 @@
|
|||||||
|
|
||||||
"long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="],
|
"long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="],
|
||||||
|
|
||||||
"loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="],
|
|
||||||
|
|
||||||
"lru-cache": ["lru-cache@11.2.7", "", {}, "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA=="],
|
"lru-cache": ["lru-cache@11.2.7", "", {}, "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA=="],
|
||||||
|
|
||||||
"marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="],
|
"marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="],
|
||||||
@@ -667,11 +679,11 @@
|
|||||||
|
|
||||||
"raw-body": ["raw-body@3.0.2", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" } }, "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="],
|
"raw-body": ["raw-body@3.0.2", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" } }, "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="],
|
||||||
|
|
||||||
"react": ["react@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ=="],
|
"react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="],
|
||||||
|
|
||||||
"react-compiler-runtime": ["react-compiler-runtime@1.0.0", "", { "peerDependencies": { "react": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^0.0.0-experimental" } }, "sha512-rRfjYv66HlG8896yPUDONgKzG5BxZD1nV9U6rkm+7VCuvQc903C4MjcoZR4zPw53IKSOX9wMQVpA1IAbRtzQ7w=="],
|
"react-compiler-runtime": ["react-compiler-runtime@1.0.0", "", { "peerDependencies": { "react": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^0.0.0-experimental" } }, "sha512-rRfjYv66HlG8896yPUDONgKzG5BxZD1nV9U6rkm+7VCuvQc903C4MjcoZR4zPw53IKSOX9wMQVpA1IAbRtzQ7w=="],
|
||||||
|
|
||||||
"react-reconciler": ["react-reconciler@0.29.2", "", { "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" }, "peerDependencies": { "react": "^18.3.1" } }, "sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg=="],
|
"react-reconciler": ["react-reconciler@0.33.0", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.0" } }, "sha512-KetWRytFv1epdpJc3J4G75I4WrplZE5jOL7Yq0p34+OVOKF4Se7WrdIdVC45XsSSmUTlht2FM/fM1FZb1mfQeA=="],
|
||||||
|
|
||||||
"readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="],
|
"readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="],
|
||||||
|
|
||||||
@@ -689,7 +701,7 @@
|
|||||||
|
|
||||||
"safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="],
|
"safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="],
|
||||||
|
|
||||||
"scheduler": ["scheduler@0.23.2", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ=="],
|
"scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="],
|
||||||
|
|
||||||
"semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
|
"semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
|
||||||
|
|
||||||
@@ -717,6 +729,8 @@
|
|||||||
|
|
||||||
"signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="],
|
"signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="],
|
||||||
|
|
||||||
|
"stack-utils": ["stack-utils@2.0.6", "", { "dependencies": { "escape-string-regexp": "^2.0.0" } }, "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ=="],
|
||||||
|
|
||||||
"statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="],
|
"statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="],
|
||||||
|
|
||||||
"string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="],
|
"string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="],
|
||||||
|
|||||||
29
package.json
29
package.json
@@ -8,13 +8,29 @@
|
|||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "bun run scripts/build.ts",
|
"build": "bun run scripts/build.ts",
|
||||||
"dev": "bun run src/entrypoints/cli.tsx",
|
"dev": "bun run build && node dist/cli.mjs",
|
||||||
"start": "node dist/cli.mjs"
|
"dev:profile": "bun run scripts/provider-launch.ts",
|
||||||
|
"dev:openai": "bun run scripts/provider-launch.ts openai",
|
||||||
|
"dev:ollama": "bun run scripts/provider-launch.ts ollama",
|
||||||
|
"profile:init": "bun run scripts/provider-bootstrap.ts",
|
||||||
|
"profile:fast": "bun run profile:init -- --provider ollama --model llama3.2:3b",
|
||||||
|
"profile:code": "bun run profile:init -- --provider ollama --model qwen2.5-coder:7b",
|
||||||
|
"dev:fast": "bun run profile:fast && bun run dev:profile",
|
||||||
|
"dev:code": "bun run profile:code && bun run dev:profile",
|
||||||
|
"start": "node dist/cli.mjs",
|
||||||
|
"typecheck": "tsc --noEmit",
|
||||||
|
"smoke": "bun run build && node dist/cli.mjs --version",
|
||||||
|
"doctor:runtime": "bun run scripts/system-check.ts",
|
||||||
|
"doctor:runtime:json": "bun run scripts/system-check.ts --json",
|
||||||
|
"doctor:report": "bun run scripts/system-check.ts --out reports/doctor-runtime.json",
|
||||||
|
"hardening:check": "bun run smoke && bun run doctor:runtime",
|
||||||
|
"hardening:strict": "bun run typecheck && bun run hardening:check"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@alcalzone/ansi-tokenize": "^0.3.0",
|
"@alcalzone/ansi-tokenize": "^0.3.0",
|
||||||
"@anthropic-ai/bedrock-sdk": "^0.26.0",
|
"@anthropic-ai/bedrock-sdk": "^0.26.0",
|
||||||
"@anthropic-ai/foundry-sdk": "^0.2.0",
|
"@anthropic-ai/foundry-sdk": "^0.2.0",
|
||||||
|
"@anthropic-ai/sandbox-runtime": "^0.0.46",
|
||||||
"@anthropic-ai/sdk": "^0.81.0",
|
"@anthropic-ai/sdk": "^0.81.0",
|
||||||
"@anthropic-ai/vertex-sdk": "^0.14.0",
|
"@anthropic-ai/vertex-sdk": "^0.14.0",
|
||||||
"@commander-js/extra-typings": "^12.0.0",
|
"@commander-js/extra-typings": "^12.0.0",
|
||||||
@@ -39,6 +55,7 @@
|
|||||||
"chokidar": "^4.0.0",
|
"chokidar": "^4.0.0",
|
||||||
"cli-boxes": "^3.0.0",
|
"cli-boxes": "^3.0.0",
|
||||||
"cli-highlight": "^2.1.0",
|
"cli-highlight": "^2.1.0",
|
||||||
|
"code-excerpt": "^4.0.0",
|
||||||
"commander": "^12.0.0",
|
"commander": "^12.0.0",
|
||||||
"diff": "^7.0.0",
|
"diff": "^7.0.0",
|
||||||
"emoji-regex": "^10.4.0",
|
"emoji-regex": "^10.4.0",
|
||||||
@@ -60,12 +77,13 @@
|
|||||||
"picomatch": "^4.0.0",
|
"picomatch": "^4.0.0",
|
||||||
"proper-lockfile": "^4.1.2",
|
"proper-lockfile": "^4.1.2",
|
||||||
"qrcode": "^1.5.4",
|
"qrcode": "^1.5.4",
|
||||||
"react": "^18.3.1",
|
"react": "^19.2.4",
|
||||||
"react-compiler-runtime": "^1.0.0",
|
"react-compiler-runtime": "^1.0.0",
|
||||||
"react-reconciler": "^0.29.2",
|
"react-reconciler": "^0.33.0",
|
||||||
"semver": "^7.6.3",
|
"semver": "^7.6.3",
|
||||||
"shell-quote": "^1.8.2",
|
"shell-quote": "^1.8.2",
|
||||||
"signal-exit": "^4.1.0",
|
"signal-exit": "^4.1.0",
|
||||||
|
"stack-utils": "^2.0.6",
|
||||||
"strip-ansi": "^7.1.0",
|
"strip-ansi": "^7.1.0",
|
||||||
"supports-hyperlinks": "^3.1.0",
|
"supports-hyperlinks": "^3.1.0",
|
||||||
"tree-kill": "^1.2.2",
|
"tree-kill": "^1.2.2",
|
||||||
@@ -82,7 +100,8 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/bun": "^1.2.0",
|
"@types/bun": "^1.2.0",
|
||||||
"@types/react": "^18.3.0",
|
"@types/node": "^25.5.0",
|
||||||
|
"@types/react": "^19.2.14",
|
||||||
"typescript": "^5.7.0"
|
"typescript": "^5.7.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|||||||
99
scripts/provider-bootstrap.ts
Normal file
99
scripts/provider-bootstrap.ts
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
// @ts-nocheck
|
||||||
|
import { writeFileSync } from 'node:fs'
|
||||||
|
import { resolve } from 'node:path'
|
||||||
|
|
||||||
|
type ProviderProfile = 'openai' | 'ollama'
|
||||||
|
|
||||||
|
type ProfileFile = {
|
||||||
|
profile: ProviderProfile
|
||||||
|
env: {
|
||||||
|
OPENAI_BASE_URL?: string
|
||||||
|
OPENAI_MODEL?: string
|
||||||
|
OPENAI_API_KEY?: string
|
||||||
|
}
|
||||||
|
createdAt: string
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseArg(name: string): string | null {
|
||||||
|
const args = process.argv.slice(2)
|
||||||
|
const idx = args.indexOf(name)
|
||||||
|
if (idx === -1) return null
|
||||||
|
return args[idx + 1] ?? null
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseProviderArg(): ProviderProfile | 'auto' {
|
||||||
|
const p = parseArg('--provider')?.toLowerCase()
|
||||||
|
if (p === 'openai' || p === 'ollama') return p
|
||||||
|
return 'auto'
|
||||||
|
}
|
||||||
|
|
||||||
|
async function hasLocalOllama(): Promise<boolean> {
|
||||||
|
const endpoint = 'http://localhost:11434/api/tags'
|
||||||
|
const controller = new AbortController()
|
||||||
|
const timeout = setTimeout(() => controller.abort(), 1200)
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await fetch(endpoint, {
|
||||||
|
method: 'GET',
|
||||||
|
signal: controller.signal,
|
||||||
|
})
|
||||||
|
return response.ok
|
||||||
|
} catch {
|
||||||
|
return false
|
||||||
|
} finally {
|
||||||
|
clearTimeout(timeout)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function sanitizeApiKey(key: string | null): string | undefined {
|
||||||
|
if (!key || key === 'SUA_CHAVE') return undefined
|
||||||
|
return key
|
||||||
|
}
|
||||||
|
|
||||||
|
async function main(): Promise<void> {
|
||||||
|
const provider = parseProviderArg()
|
||||||
|
const argModel = parseArg('--model')
|
||||||
|
const argBaseUrl = parseArg('--base-url')
|
||||||
|
const argApiKey = parseArg('--api-key')
|
||||||
|
|
||||||
|
let selected: ProviderProfile
|
||||||
|
if (provider === 'auto') {
|
||||||
|
selected = (await hasLocalOllama()) ? 'ollama' : 'openai'
|
||||||
|
} else {
|
||||||
|
selected = provider
|
||||||
|
}
|
||||||
|
|
||||||
|
const env: ProfileFile['env'] = {}
|
||||||
|
if (selected === 'ollama') {
|
||||||
|
env.OPENAI_BASE_URL = argBaseUrl || 'http://localhost:11434/v1'
|
||||||
|
env.OPENAI_MODEL = argModel || process.env.OPENAI_MODEL || 'llama3.1:8b'
|
||||||
|
const key = sanitizeApiKey(argApiKey || process.env.OPENAI_API_KEY || null)
|
||||||
|
if (key) env.OPENAI_API_KEY = key
|
||||||
|
} else {
|
||||||
|
env.OPENAI_BASE_URL = argBaseUrl || process.env.OPENAI_BASE_URL || 'https://api.openai.com/v1'
|
||||||
|
env.OPENAI_MODEL = argModel || process.env.OPENAI_MODEL || 'gpt-4o'
|
||||||
|
const key = sanitizeApiKey(argApiKey || process.env.OPENAI_API_KEY || null)
|
||||||
|
if (!key) {
|
||||||
|
console.error('OpenAI profile requires a real API key. Use --api-key or set OPENAI_API_KEY.')
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
env.OPENAI_API_KEY = key
|
||||||
|
}
|
||||||
|
|
||||||
|
const profile: ProfileFile = {
|
||||||
|
profile: selected,
|
||||||
|
env,
|
||||||
|
createdAt: new Date().toISOString(),
|
||||||
|
}
|
||||||
|
|
||||||
|
const outputPath = resolve(process.cwd(), '.openclaude-profile.json')
|
||||||
|
writeFileSync(outputPath, JSON.stringify(profile, null, 2), 'utf8')
|
||||||
|
|
||||||
|
console.log(`Saved profile: ${selected}`)
|
||||||
|
console.log(`Path: ${outputPath}`)
|
||||||
|
console.log('Next: bun run dev:profile')
|
||||||
|
}
|
||||||
|
|
||||||
|
await main()
|
||||||
|
|
||||||
|
export {}
|
||||||
138
scripts/provider-launch.ts
Normal file
138
scripts/provider-launch.ts
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
// @ts-nocheck
|
||||||
|
import { spawn } from 'node:child_process'
|
||||||
|
import { existsSync, readFileSync } from 'node:fs'
|
||||||
|
import { resolve } from 'node:path'
|
||||||
|
|
||||||
|
type ProviderProfile = 'openai' | 'ollama'
|
||||||
|
|
||||||
|
type ProfileFile = {
|
||||||
|
profile: ProviderProfile
|
||||||
|
env?: {
|
||||||
|
OPENAI_BASE_URL?: string
|
||||||
|
OPENAI_MODEL?: string
|
||||||
|
OPENAI_API_KEY?: string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseProfile(argv: string[]): ProviderProfile | 'auto' | null {
|
||||||
|
const profile = argv[0]?.toLowerCase()
|
||||||
|
if (!profile) return 'auto'
|
||||||
|
if (profile === 'auto') return 'auto'
|
||||||
|
if (profile === 'openai' || profile === 'ollama') return profile
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadPersistedProfile(): ProfileFile | null {
|
||||||
|
const path = resolve(process.cwd(), '.openclaude-profile.json')
|
||||||
|
if (!existsSync(path)) return null
|
||||||
|
try {
|
||||||
|
const parsed = JSON.parse(readFileSync(path, 'utf8')) as ProfileFile
|
||||||
|
if (parsed.profile === 'openai' || parsed.profile === 'ollama') {
|
||||||
|
return parsed
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
} catch {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function hasLocalOllama(): Promise<boolean> {
|
||||||
|
const endpoint = 'http://localhost:11434/api/tags'
|
||||||
|
const controller = new AbortController()
|
||||||
|
const timeout = setTimeout(() => controller.abort(), 1200)
|
||||||
|
try {
|
||||||
|
const response = await fetch(endpoint, { signal: controller.signal })
|
||||||
|
return response.ok
|
||||||
|
} catch {
|
||||||
|
return false
|
||||||
|
} finally {
|
||||||
|
clearTimeout(timeout)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function runCommand(command: string, env: NodeJS.ProcessEnv): Promise<number> {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
const child = spawn(command, {
|
||||||
|
cwd: process.cwd(),
|
||||||
|
env,
|
||||||
|
stdio: 'inherit',
|
||||||
|
shell: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
child.on('close', code => resolve(code ?? 1))
|
||||||
|
child.on('error', () => resolve(1))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildEnv(profile: ProviderProfile, persisted: ProfileFile | null): NodeJS.ProcessEnv {
|
||||||
|
const persistedEnv = persisted?.env ?? {}
|
||||||
|
const env: NodeJS.ProcessEnv = {
|
||||||
|
...process.env,
|
||||||
|
CLAUDE_CODE_USE_OPENAI: '1',
|
||||||
|
}
|
||||||
|
|
||||||
|
if (profile === 'ollama') {
|
||||||
|
env.OPENAI_BASE_URL = persistedEnv.OPENAI_BASE_URL || process.env.OPENAI_BASE_URL || 'http://localhost:11434/v1'
|
||||||
|
env.OPENAI_MODEL = persistedEnv.OPENAI_MODEL || process.env.OPENAI_MODEL || 'llama3.1:8b'
|
||||||
|
if (!process.env.OPENAI_API_KEY || process.env.OPENAI_API_KEY === 'SUA_CHAVE') {
|
||||||
|
delete env.OPENAI_API_KEY
|
||||||
|
}
|
||||||
|
return env
|
||||||
|
}
|
||||||
|
|
||||||
|
env.OPENAI_BASE_URL = process.env.OPENAI_BASE_URL || persistedEnv.OPENAI_BASE_URL || 'https://api.openai.com/v1'
|
||||||
|
env.OPENAI_MODEL = process.env.OPENAI_MODEL || persistedEnv.OPENAI_MODEL || 'gpt-4o'
|
||||||
|
env.OPENAI_API_KEY = process.env.OPENAI_API_KEY || persistedEnv.OPENAI_API_KEY
|
||||||
|
return env
|
||||||
|
}
|
||||||
|
|
||||||
|
function printSummary(profile: ProviderProfile, env: NodeJS.ProcessEnv): void {
|
||||||
|
const keySet = Boolean(env.OPENAI_API_KEY)
|
||||||
|
console.log(`Launching profile: ${profile}`)
|
||||||
|
console.log(`OPENAI_BASE_URL=${env.OPENAI_BASE_URL}`)
|
||||||
|
console.log(`OPENAI_MODEL=${env.OPENAI_MODEL}`)
|
||||||
|
console.log(`OPENAI_API_KEY_SET=${keySet}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function main(): Promise<void> {
|
||||||
|
const requestedProfile = parseProfile(process.argv.slice(2))
|
||||||
|
if (!requestedProfile) {
|
||||||
|
console.error('Usage: bun run scripts/provider-launch.ts [openai|ollama|auto]')
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
const persisted = loadPersistedProfile()
|
||||||
|
let profile: ProviderProfile
|
||||||
|
|
||||||
|
if (requestedProfile === 'auto') {
|
||||||
|
if (persisted) {
|
||||||
|
profile = persisted.profile
|
||||||
|
} else {
|
||||||
|
profile = (await hasLocalOllama()) ? 'ollama' : 'openai'
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
profile = requestedProfile
|
||||||
|
}
|
||||||
|
|
||||||
|
const env = buildEnv(profile, persisted)
|
||||||
|
|
||||||
|
if (profile === 'openai' && (!env.OPENAI_API_KEY || env.OPENAI_API_KEY === 'SUA_CHAVE')) {
|
||||||
|
console.error('OPENAI_API_KEY is required for openai profile and cannot be SUA_CHAVE. Run: bun run profile:init -- --provider openai --api-key <key>')
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
printSummary(profile, env)
|
||||||
|
|
||||||
|
const doctorCode = await runCommand('bun run scripts/system-check.ts', env)
|
||||||
|
if (doctorCode !== 0) {
|
||||||
|
console.error('Runtime doctor failed. Fix configuration before launching.')
|
||||||
|
process.exit(doctorCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
const devCode = await runCommand('bun run dev', env)
|
||||||
|
process.exit(devCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
await main()
|
||||||
|
|
||||||
|
export {}
|
||||||
288
scripts/system-check.ts
Normal file
288
scripts/system-check.ts
Normal file
@@ -0,0 +1,288 @@
|
|||||||
|
// @ts-nocheck
|
||||||
|
import { existsSync, mkdirSync, writeFileSync } from 'node:fs'
|
||||||
|
import { dirname, join, resolve } from 'node:path'
|
||||||
|
import { spawnSync } from 'node:child_process'
|
||||||
|
|
||||||
|
type CheckResult = {
|
||||||
|
ok: boolean
|
||||||
|
label: string
|
||||||
|
detail?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
type CliOptions = {
|
||||||
|
json: boolean
|
||||||
|
outFile: string | null
|
||||||
|
}
|
||||||
|
|
||||||
|
function pass(label: string, detail?: string): CheckResult {
|
||||||
|
return { ok: true, label, detail }
|
||||||
|
}
|
||||||
|
|
||||||
|
function fail(label: string, detail?: string): CheckResult {
|
||||||
|
return { ok: false, label, detail }
|
||||||
|
}
|
||||||
|
|
||||||
|
function isTruthy(value: string | undefined): boolean {
|
||||||
|
if (!value) return false
|
||||||
|
const normalized = value.trim().toLowerCase()
|
||||||
|
return normalized !== '' && normalized !== '0' && normalized !== 'false' && normalized !== 'no'
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseOptions(argv: string[]): CliOptions {
|
||||||
|
const options: CliOptions = {
|
||||||
|
json: false,
|
||||||
|
outFile: null,
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < argv.length; i++) {
|
||||||
|
const arg = argv[i]
|
||||||
|
if (arg === '--json') {
|
||||||
|
options.json = true
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if (arg === '--out') {
|
||||||
|
const next = argv[i + 1]
|
||||||
|
if (next && !next.startsWith('--')) {
|
||||||
|
options.outFile = next
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return options
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkNodeVersion(): CheckResult {
|
||||||
|
const raw = process.versions.node
|
||||||
|
const major = Number(raw.split('.')[0] ?? '0')
|
||||||
|
if (Number.isNaN(major)) {
|
||||||
|
return fail('Node.js version', `Could not parse version: ${raw}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (major < 20) {
|
||||||
|
return fail('Node.js version', `Detected ${raw}. Require >= 20.`)
|
||||||
|
}
|
||||||
|
|
||||||
|
return pass('Node.js version', raw)
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkBunRuntime(): CheckResult {
|
||||||
|
const bunVersion = (globalThis as { Bun?: { version?: string } }).Bun?.version
|
||||||
|
if (!bunVersion) {
|
||||||
|
return pass('Bun runtime', 'Not running inside Bun (this is acceptable for Node startup).')
|
||||||
|
}
|
||||||
|
return pass('Bun runtime', bunVersion)
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkBuildArtifacts(): CheckResult {
|
||||||
|
const distCli = resolve(process.cwd(), 'dist', 'cli.mjs')
|
||||||
|
if (!existsSync(distCli)) {
|
||||||
|
return fail('Build artifacts', `Missing ${distCli}. Run: bun run build`)
|
||||||
|
}
|
||||||
|
return pass('Build artifacts', distCli)
|
||||||
|
}
|
||||||
|
|
||||||
|
function isLocalBaseUrl(baseUrl: string): boolean {
|
||||||
|
try {
|
||||||
|
const url = new URL(baseUrl)
|
||||||
|
return url.hostname === 'localhost' || url.hostname === '127.0.0.1' || url.hostname === '::1'
|
||||||
|
} catch {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function currentBaseUrl(): string {
|
||||||
|
return process.env.OPENAI_BASE_URL ?? 'https://api.openai.com/v1'
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkOpenAIEnv(): CheckResult[] {
|
||||||
|
const results: CheckResult[] = []
|
||||||
|
const useOpenAI = isTruthy(process.env.CLAUDE_CODE_USE_OPENAI)
|
||||||
|
|
||||||
|
if (!useOpenAI) {
|
||||||
|
results.push(pass('Provider mode', 'Anthropic login flow enabled (CLAUDE_CODE_USE_OPENAI is off).'))
|
||||||
|
return results
|
||||||
|
}
|
||||||
|
|
||||||
|
const baseUrl = process.env.OPENAI_BASE_URL ?? 'https://api.openai.com/v1'
|
||||||
|
const model = process.env.OPENAI_MODEL
|
||||||
|
const key = process.env.OPENAI_API_KEY
|
||||||
|
|
||||||
|
results.push(pass('Provider mode', 'OpenAI-compatible provider enabled.'))
|
||||||
|
|
||||||
|
if (!model) {
|
||||||
|
results.push(pass('OPENAI_MODEL', 'Not set. Runtime fallback model will be used.'))
|
||||||
|
} else {
|
||||||
|
results.push(pass('OPENAI_MODEL', model))
|
||||||
|
}
|
||||||
|
|
||||||
|
results.push(pass('OPENAI_BASE_URL', baseUrl))
|
||||||
|
|
||||||
|
if (key === 'SUA_CHAVE') {
|
||||||
|
results.push(fail('OPENAI_API_KEY', 'Placeholder value detected: SUA_CHAVE.'))
|
||||||
|
} else if (!key && !isLocalBaseUrl(baseUrl)) {
|
||||||
|
results.push(fail('OPENAI_API_KEY', 'Missing key for non-local provider URL.'))
|
||||||
|
} else if (!key) {
|
||||||
|
results.push(pass('OPENAI_API_KEY', 'Not set (allowed for local providers like Ollama/LM Studio).'))
|
||||||
|
} else {
|
||||||
|
results.push(pass('OPENAI_API_KEY', 'Configured.'))
|
||||||
|
}
|
||||||
|
|
||||||
|
return results
|
||||||
|
}
|
||||||
|
|
||||||
|
async function checkBaseUrlReachability(): Promise<CheckResult> {
|
||||||
|
if (!isTruthy(process.env.CLAUDE_CODE_USE_OPENAI)) {
|
||||||
|
return pass('Provider reachability', 'Skipped (OpenAI-compatible mode disabled).')
|
||||||
|
}
|
||||||
|
|
||||||
|
const baseUrl = currentBaseUrl()
|
||||||
|
const key = process.env.OPENAI_API_KEY
|
||||||
|
const endpoint = `${baseUrl.replace(/\/$/, '')}/models`
|
||||||
|
|
||||||
|
const controller = new AbortController()
|
||||||
|
const timeout = setTimeout(() => controller.abort(), 4000)
|
||||||
|
|
||||||
|
try {
|
||||||
|
const headers: Record<string, string> = {}
|
||||||
|
if (key) {
|
||||||
|
headers.Authorization = `Bearer ${key}`
|
||||||
|
}
|
||||||
|
|
||||||
|
const response = await fetch(endpoint, {
|
||||||
|
method: 'GET',
|
||||||
|
headers,
|
||||||
|
signal: controller.signal,
|
||||||
|
})
|
||||||
|
|
||||||
|
if (response.status === 200 || response.status === 401 || response.status === 403) {
|
||||||
|
return pass('Provider reachability', `Reached ${endpoint} (status ${response.status}).`)
|
||||||
|
}
|
||||||
|
|
||||||
|
return fail('Provider reachability', `Unexpected status ${response.status} from ${endpoint}.`)
|
||||||
|
} catch (error) {
|
||||||
|
const message = error instanceof Error ? error.message : String(error)
|
||||||
|
return fail('Provider reachability', `Failed to reach ${endpoint}: ${message}`)
|
||||||
|
} finally {
|
||||||
|
clearTimeout(timeout)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkOllamaProcessorMode(): CheckResult {
|
||||||
|
if (!isTruthy(process.env.CLAUDE_CODE_USE_OPENAI)) {
|
||||||
|
return pass('Ollama processor mode', 'Skipped (OpenAI-compatible mode disabled).')
|
||||||
|
}
|
||||||
|
|
||||||
|
const baseUrl = currentBaseUrl()
|
||||||
|
if (!isLocalBaseUrl(baseUrl)) {
|
||||||
|
return pass('Ollama processor mode', 'Skipped (provider URL is not local).')
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = spawnSync('ollama', ['ps'], {
|
||||||
|
cwd: process.cwd(),
|
||||||
|
encoding: 'utf8',
|
||||||
|
shell: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
if (result.status !== 0) {
|
||||||
|
const detail = (result.stderr || result.stdout || 'Unable to run ollama ps').trim()
|
||||||
|
return fail('Ollama processor mode', detail)
|
||||||
|
}
|
||||||
|
|
||||||
|
const output = (result.stdout || '').trim()
|
||||||
|
if (!output) {
|
||||||
|
return fail('Ollama processor mode', 'ollama ps returned empty output.')
|
||||||
|
}
|
||||||
|
|
||||||
|
const lines = output.split(/\r?\n/).map(line => line.trim()).filter(Boolean)
|
||||||
|
const modelLine = lines.find(line => line.includes(':') && !line.startsWith('NAME'))
|
||||||
|
if (!modelLine) {
|
||||||
|
return pass('Ollama processor mode', 'No loaded model found (run a prompt first).')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modelLine.includes('CPU')) {
|
||||||
|
return pass('Ollama processor mode', 'Detected CPU mode. This is valid but can be slow for larger models.')
|
||||||
|
}
|
||||||
|
|
||||||
|
return pass('Ollama processor mode', `Detected non-CPU mode: ${modelLine}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
function serializeSafeEnvSummary(): Record<string, string | boolean> {
|
||||||
|
return {
|
||||||
|
CLAUDE_CODE_USE_OPENAI: isTruthy(process.env.CLAUDE_CODE_USE_OPENAI),
|
||||||
|
OPENAI_MODEL: process.env.OPENAI_MODEL ?? '(unset)',
|
||||||
|
OPENAI_BASE_URL: process.env.OPENAI_BASE_URL ?? 'https://api.openai.com/v1',
|
||||||
|
OPENAI_API_KEY_SET: Boolean(process.env.OPENAI_API_KEY),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function printResults(results: CheckResult[]): void {
|
||||||
|
for (const result of results) {
|
||||||
|
const icon = result.ok ? 'PASS' : 'FAIL'
|
||||||
|
const suffix = result.detail ? ` - ${result.detail}` : ''
|
||||||
|
console.log(`[${icon}] ${result.label}${suffix}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function writeJsonReport(
|
||||||
|
options: CliOptions,
|
||||||
|
results: CheckResult[],
|
||||||
|
): void {
|
||||||
|
const payload = {
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
cwd: process.cwd(),
|
||||||
|
summary: {
|
||||||
|
total: results.length,
|
||||||
|
passed: results.filter(result => result.ok).length,
|
||||||
|
failed: results.filter(result => !result.ok).length,
|
||||||
|
},
|
||||||
|
env: serializeSafeEnvSummary(),
|
||||||
|
results,
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.json) {
|
||||||
|
console.log(JSON.stringify(payload, null, 2))
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.outFile) {
|
||||||
|
const outputPath = resolve(process.cwd(), options.outFile)
|
||||||
|
mkdirSync(dirname(outputPath), { recursive: true })
|
||||||
|
writeFileSync(outputPath, JSON.stringify(payload, null, 2), 'utf8')
|
||||||
|
if (!options.json) {
|
||||||
|
console.log(`Report written to ${outputPath}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function main(): Promise<void> {
|
||||||
|
const options = parseOptions(process.argv.slice(2))
|
||||||
|
const results: CheckResult[] = []
|
||||||
|
|
||||||
|
results.push(checkNodeVersion())
|
||||||
|
results.push(checkBunRuntime())
|
||||||
|
results.push(checkBuildArtifacts())
|
||||||
|
results.push(...checkOpenAIEnv())
|
||||||
|
results.push(await checkBaseUrlReachability())
|
||||||
|
results.push(checkOllamaProcessorMode())
|
||||||
|
|
||||||
|
if (!options.json) {
|
||||||
|
printResults(results)
|
||||||
|
}
|
||||||
|
|
||||||
|
writeJsonReport(options, results)
|
||||||
|
|
||||||
|
const hasFailure = results.some(result => !result.ok)
|
||||||
|
if (hasFailure) {
|
||||||
|
process.exitCode = 1
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!options.json) {
|
||||||
|
console.log('\nRuntime checks completed successfully.')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
await main()
|
||||||
|
|
||||||
|
export {}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import { feature } from 'bun:bundle';
|
import { feature } from 'bun:bundle';
|
||||||
import figures from 'figures';
|
import figures from 'figures';
|
||||||
import React, { useEffect, useRef, useState } from 'react';
|
import React, { useEffect, useRef, useState } from 'react';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import { feature } from 'bun:bundle';
|
import { feature } from 'bun:bundle';
|
||||||
import React, { useEffect } from 'react';
|
import React, { useEffect } from 'react';
|
||||||
import { useNotifications } from '../context/notifications.js';
|
import { useNotifications } from '../context/notifications.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
/**
|
/**
|
||||||
* Miscellaneous subcommand handlers — extracted from main.tsx for lazy loading.
|
* Miscellaneous subcommand handlers — extracted from main.tsx for lazy loading.
|
||||||
* setup-token, doctor, install
|
* setup-token, doctor, install
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import chalk from 'chalk';
|
import chalk from 'chalk';
|
||||||
import figures from 'figures';
|
import figures from 'figures';
|
||||||
import React, { useEffect } from 'react';
|
import React, { useEffect } from 'react';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import { feature } from 'bun:bundle';
|
import { feature } from 'bun:bundle';
|
||||||
import { toString as qrToString } from 'qrcode';
|
import { toString as qrToString } from 'qrcode';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { useEffect, useRef, useState } from 'react';
|
import { useEffect, useRef, useState } from 'react';
|
||||||
import { useInterval } from 'usehooks-ts';
|
import { useInterval } from 'usehooks-ts';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React, { useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
import { type OptionWithDescription, Select } from '../../components/CustomSelect/select.js';
|
import { type OptionWithDescription, Select } from '../../components/CustomSelect/select.js';
|
||||||
import { Dialog } from '../../components/design-system/Dialog.js';
|
import { Dialog } from '../../components/design-system/Dialog.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import { mkdir, writeFile } from 'fs/promises';
|
import { mkdir, writeFile } from 'fs/promises';
|
||||||
import { marked, type Tokens } from 'marked';
|
import { marked, type Tokens } from 'marked';
|
||||||
import { tmpdir } from 'os';
|
import { tmpdir } from 'os';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { useMainLoopModel } from '../../hooks/useMainLoopModel.js';
|
import { useMainLoopModel } from '../../hooks/useMainLoopModel.js';
|
||||||
import { type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS, logEvent } from '../../services/analytics/index.js';
|
import { type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS, logEvent } from '../../services/analytics/index.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import type { CommandResultDisplay, LocalJSXCommandContext } from '../../commands.js';
|
import type { CommandResultDisplay, LocalJSXCommandContext } from '../../commands.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import chalk from 'chalk';
|
import chalk from 'chalk';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React, { useCallback, useState } from 'react';
|
import React, { useCallback, useState } from 'react';
|
||||||
import TextInput from '../../components/TextInput.js';
|
import TextInput from '../../components/TextInput.js';
|
||||||
import { useTerminalSize } from '../../hooks/useTerminalSize.js';
|
import { useTerminalSize } from '../../hooks/useTerminalSize.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React, { useCallback, useState } from 'react';
|
import React, { useCallback, useState } from 'react';
|
||||||
import TextInput from '../../components/TextInput.js';
|
import TextInput from '../../components/TextInput.js';
|
||||||
import { useTerminalSize } from '../../hooks/useTerminalSize.js';
|
import { useTerminalSize } from '../../hooks/useTerminalSize.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Text } from '../../ink.js';
|
import { Text } from '../../ink.js';
|
||||||
export function CheckGitHubStep() {
|
export function CheckGitHubStep() {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React, { useCallback, useState } from 'react';
|
import React, { useCallback, useState } from 'react';
|
||||||
import TextInput from '../../components/TextInput.js';
|
import TextInput from '../../components/TextInput.js';
|
||||||
import { useTerminalSize } from '../../hooks/useTerminalSize.js';
|
import { useTerminalSize } from '../../hooks/useTerminalSize.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Box, Text } from '../../ink.js';
|
import { Box, Text } from '../../ink.js';
|
||||||
import type { Workflow } from './types.js';
|
import type { Workflow } from './types.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { GITHUB_ACTION_SETUP_DOCS_URL } from '../../constants/github-app.js';
|
import { GITHUB_ACTION_SETUP_DOCS_URL } from '../../constants/github-app.js';
|
||||||
import { Box, Text } from '../../ink.js';
|
import { Box, Text } from '../../ink.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Select } from 'src/components/CustomSelect/index.js';
|
import { Select } from 'src/components/CustomSelect/index.js';
|
||||||
import { Box, Text } from '../../ink.js';
|
import { Box, Text } from '../../ink.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import figures from 'figures';
|
import figures from 'figures';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { GITHUB_ACTION_SETUP_DOCS_URL } from '../../constants/github-app.js';
|
import { GITHUB_ACTION_SETUP_DOCS_URL } from '../../constants/github-app.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Box, Text } from '../../ink.js';
|
import { Box, Text } from '../../ink.js';
|
||||||
type SuccessStepProps = {
|
type SuccessStepProps = {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import figures from 'figures';
|
import figures from 'figures';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { GITHUB_ACTION_SETUP_DOCS_URL } from '../../constants/github-app.js';
|
import { GITHUB_ACTION_SETUP_DOCS_URL } from '../../constants/github-app.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import { homedir } from 'node:os';
|
import { homedir } from 'node:os';
|
||||||
import { join } from 'node:path';
|
import { join } from 'node:path';
|
||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import { feature } from 'bun:bundle';
|
import { feature } from 'bun:bundle';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { resetCostState } from '../../bootstrap/state.js';
|
import { resetCostState } from '../../bootstrap/state.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React, { useEffect, useRef } from 'react';
|
import React, { useEffect, useRef } from 'react';
|
||||||
import { MCPSettings } from '../../components/mcp/index.js';
|
import { MCPSettings } from '../../components/mcp/index.js';
|
||||||
import { MCPReconnect } from '../../components/mcp/MCPReconnect.js';
|
import { MCPReconnect } from '../../components/mcp/MCPReconnect.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import { toString as qrToString } from 'qrcode';
|
import { toString as qrToString } from 'qrcode';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { useCallback, useEffect, useState } from 'react';
|
import { useCallback, useEffect, useState } from 'react';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import chalk from 'chalk';
|
import chalk from 'chalk';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import type { CommandResultDisplay } from '../../commands.js';
|
import type { CommandResultDisplay } from '../../commands.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { handlePlanModeTransition } from '../../bootstrap/state.js';
|
import { handlePlanModeTransition } from '../../bootstrap/state.js';
|
||||||
import type { LocalJSXCommandContext } from '../../commands.js';
|
import type { LocalJSXCommandContext } from '../../commands.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import figures from 'figures';
|
import figures from 'figures';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { useCallback, useEffect, useMemo, useState } from 'react';
|
import { useCallback, useEffect, useMemo, useState } from 'react';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import figures from 'figures';
|
import figures from 'figures';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { useEffect, useRef, useState } from 'react';
|
import { useEffect, useRef, useState } from 'react';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import figures from 'figures';
|
import figures from 'figures';
|
||||||
import React, { useCallback, useState } from 'react';
|
import React, { useCallback, useState } from 'react';
|
||||||
import { Dialog } from '../../components/design-system/Dialog.js';
|
import { Dialog } from '../../components/design-system/Dialog.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import figures from 'figures';
|
import figures from 'figures';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { useCallback, useEffect, useState } from 'react';
|
import { useCallback, useEffect, useState } from 'react';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import figures from 'figures';
|
import figures from 'figures';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { Box, Text } from '../../ink.js';
|
import { Box, Text } from '../../ink.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import figures from 'figures';
|
import figures from 'figures';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { Box, color, Text, useTheme } from '../../ink.js';
|
import { Box, color, Text, useTheme } from '../../ink.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import figures from 'figures';
|
import figures from 'figures';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
/**
|
/**
|
||||||
* Shared helper functions and types for plugin details views
|
* Shared helper functions and types for plugin details views
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React, { useMemo, useState } from 'react';
|
import React, { useMemo, useState } from 'react';
|
||||||
import type { CommandResultDisplay, LocalJSXCommandContext } from '../../commands.js';
|
import type { CommandResultDisplay, LocalJSXCommandContext } from '../../commands.js';
|
||||||
import { type OptionWithDescription, Select } from '../../components/CustomSelect/select.js';
|
import { type OptionWithDescription, Select } from '../../components/CustomSelect/select.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import chalk from 'chalk';
|
import chalk from 'chalk';
|
||||||
import type { UUID } from 'crypto';
|
import type { UUID } from 'crypto';
|
||||||
import figures from 'figures';
|
import figures from 'figures';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React, { useCallback, useRef, useState } from 'react';
|
import React, { useCallback, useRef, useState } from 'react';
|
||||||
import { Select } from '../../components/CustomSelect/select.js';
|
import { Select } from '../../components/CustomSelect/select.js';
|
||||||
import { Dialog } from '../../components/design-system/Dialog.js';
|
import { Dialog } from '../../components/design-system/Dialog.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import { toString as qrToString } from 'qrcode';
|
import { toString as qrToString } from 'qrcode';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import chalk from 'chalk';
|
import chalk from 'chalk';
|
||||||
import type { UUID } from 'crypto';
|
import type { UUID } from 'crypto';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import type { CommandResultDisplay } from '../../commands.js';
|
import type { CommandResultDisplay } from '../../commands.js';
|
||||||
import { Pane } from '../../components/design-system/Pane.js';
|
import { Pane } from '../../components/design-system/Pane.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import { execa } from 'execa';
|
import { execa } from 'execa';
|
||||||
import { readFile } from 'fs/promises';
|
import { readFile } from 'fs/promises';
|
||||||
import { join } from 'path';
|
import { join } from 'path';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { Box, Text } from '../ink.js';
|
import { Box, Text } from '../ink.js';
|
||||||
import { formatNumber } from '../utils/format.js';
|
import { formatNumber } from '../utils/format.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { FpsMetricsProvider } from '../context/fpsMetrics.js';
|
import { FpsMetricsProvider } from '../context/fpsMetrics.js';
|
||||||
import { StatsProvider, type StatsStore } from '../context/stats.js';
|
import { StatsProvider, type StatsStore } from '../context/stats.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Text } from '../ink.js';
|
import { Text } from '../ink.js';
|
||||||
import { saveGlobalConfig } from '../utils/config.js';
|
import { saveGlobalConfig } from '../utils/config.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { logEvent } from 'src/services/analytics/index.js';
|
import { logEvent } from 'src/services/analytics/index.js';
|
||||||
import { Box, Link, Text } from '../ink.js';
|
import { Box, Link, Text } from '../ink.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import { feature } from 'bun:bundle';
|
import { feature } from 'bun:bundle';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import type { AutoUpdaterResult } from '../utils/autoUpdater.js';
|
import type { AutoUpdaterResult } from '../utils/autoUpdater.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import { Box, Link, Text } from '../ink.js';
|
import { Box, Link, Text } from '../ink.js';
|
||||||
import { type AwsAuthStatus, AwsAuthStatusManager } from '../utils/awsAuthStatusManager.js';
|
import { type AwsAuthStatus, AwsAuthStatusManager } from '../utils/awsAuthStatusManager.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { renderPlaceholder } from '../hooks/renderPlaceholder.js';
|
import { renderPlaceholder } from '../hooks/renderPlaceholder.js';
|
||||||
import { usePasteHandler } from '../hooks/usePasteHandler.js';
|
import { usePasteHandler } from '../hooks/usePasteHandler.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Box } from '../ink.js';
|
import { Box } from '../ink.js';
|
||||||
import { BashTool } from '../tools/BashTool/BashTool.js';
|
import { BashTool } from '../tools/BashTool/BashTool.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import { basename } from 'path';
|
import { basename } from 'path';
|
||||||
import { toString as qrToString } from 'qrcode';
|
import { toString as qrToString } from 'qrcode';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React, { useCallback } from 'react';
|
import React, { useCallback } from 'react';
|
||||||
import { logEvent } from 'src/services/analytics/index.js';
|
import { logEvent } from 'src/services/analytics/index.js';
|
||||||
import { Box, Link, Newline, Text } from '../ink.js';
|
import { Box, Link, Newline, Text } from '../ink.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Text } from '../ink.js';
|
import { Text } from '../ink.js';
|
||||||
import { Select } from './CustomSelect/index.js';
|
import { Select } from './CustomSelect/index.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { logEvent } from 'src/services/analytics/index.js';
|
import { logEvent } from 'src/services/analytics/index.js';
|
||||||
// eslint-disable-next-line custom-rules/prefer-use-keybindings -- enter to continue
|
// eslint-disable-next-line custom-rules/prefer-use-keybindings -- enter to continue
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React, { useCallback } from 'react';
|
import React, { useCallback } from 'react';
|
||||||
import { logEvent } from 'src/services/analytics/index.js';
|
import { logEvent } from 'src/services/analytics/index.js';
|
||||||
import { Box, Link, Text } from '../ink.js';
|
import { Box, Link, Text } from '../ink.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { pathToFileURL } from 'url';
|
import { pathToFileURL } from 'url';
|
||||||
import Link from '../ink/components/Link.js';
|
import Link from '../ink/components/Link.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { BLACK_CIRCLE } from '../constants/figures.js';
|
import { BLACK_CIRCLE } from '../constants/figures.js';
|
||||||
import { Box, Text } from '../ink.js';
|
import { Box, Text } from '../ink.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import type { KeybindingAction, KeybindingContextName } from '../keybindings/types.js';
|
import type { KeybindingAction, KeybindingContextName } from '../keybindings/types.js';
|
||||||
import { useShortcutDisplay } from '../keybindings/useShortcutDisplay.js';
|
import { useShortcutDisplay } from '../keybindings/useShortcutDisplay.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
||||||
import { type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS, logEvent } from 'src/services/analytics/index.js';
|
import { type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS, logEvent } from 'src/services/analytics/index.js';
|
||||||
import { installOAuthTokens } from '../cli/handlers/auth.js';
|
import { installOAuthTokens } from '../cli/handlers/auth.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import figures from 'figures';
|
import figures from 'figures';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { Box, Text } from '../ink.js';
|
import { Box, Text } from '../ink.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import { feature } from 'bun:bundle';
|
import { feature } from 'bun:bundle';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { Box, Text } from '../ink.js';
|
import { Box, Text } from '../ink.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
/**
|
/**
|
||||||
* CoordinatorTaskPanel — Steerable list of background agents.
|
* CoordinatorTaskPanel — Steerable list of background agents.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Box, Link, Text } from '../ink.js';
|
import { Box, Link, Text } from '../ink.js';
|
||||||
import { Select } from './CustomSelect/index.js';
|
import { Select } from './CustomSelect/index.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import chalk from 'chalk';
|
import chalk from 'chalk';
|
||||||
import React, { useContext } from 'react';
|
import React, { useContext } from 'react';
|
||||||
import { Text } from '../ink.js';
|
import { Text } from '../ink.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import figures from 'figures';
|
import figures from 'figures';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Box, Text } from '../../ink.js';
|
import { Box, Text } from '../../ink.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React, { type ReactNode, useEffect, useRef, useState } from 'react';
|
import React, { type ReactNode, useEffect, useRef, useState } from 'react';
|
||||||
// eslint-disable-next-line custom-rules/prefer-use-keybindings -- UP arrow exit not in Attachments bindings
|
// eslint-disable-next-line custom-rules/prefer-use-keybindings -- UP arrow exit not in Attachments bindings
|
||||||
import { Box, Text, useInput } from '../../ink.js';
|
import { Box, Text, useInput } from '../../ink.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React, { type ReactNode } from 'react';
|
import React, { type ReactNode } from 'react';
|
||||||
import { ListItem } from '../design-system/ListItem.js';
|
import { ListItem } from '../design-system/ListItem.js';
|
||||||
export type SelectOptionProps = {
|
export type SelectOptionProps = {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import figures from 'figures';
|
import figures from 'figures';
|
||||||
import React, { type ReactNode, useEffect, useRef, useState } from 'react';
|
import React, { type ReactNode, useEffect, useRef, useState } from 'react';
|
||||||
import { useDeclaredCursor } from '../../ink/hooks/use-declared-cursor.js';
|
import { useDeclaredCursor } from '../../ink/hooks/use-declared-cursor.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import type { CommandResultDisplay } from '../commands.js';
|
import type { CommandResultDisplay } from '../commands.js';
|
||||||
// eslint-disable-next-line custom-rules/prefer-use-keybindings -- raw input for "any key" dismiss and y/n prompt
|
// eslint-disable-next-line custom-rules/prefer-use-keybindings -- raw input for "any key" dismiss and y/n prompt
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { Box, Text } from '../../ink.js';
|
import { Box, Text } from '../../ink.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { getSlowOperations } from '../bootstrap/state.js';
|
import { getSlowOperations } from '../bootstrap/state.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React, { useCallback } from 'react';
|
import React, { useCallback } from 'react';
|
||||||
import type { ChannelEntry } from '../bootstrap/state.js';
|
import type { ChannelEntry } from '../bootstrap/state.js';
|
||||||
import { Box, Text } from '../ink.js';
|
import { Box, Text } from '../ink.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import { relative } from 'path';
|
import { relative } from 'path';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Box, Text } from '../ink.js';
|
import { Box, Text } from '../ink.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React, { useCallback, useEffect, useRef } from 'react';
|
import React, { useCallback, useEffect, useRef } from 'react';
|
||||||
import { Box, Text } from '../ink.js';
|
import { Box, Text } from '../ink.js';
|
||||||
import { isMaxSubscriber, isProSubscriber, isTeamSubscriber } from '../utils/auth.js';
|
import { isMaxSubscriber, isProSubscriber, isTeamSubscriber } from '../utils/auth.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import sample from 'lodash-es/sample.js';
|
import sample from 'lodash-es/sample.js';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { gracefulShutdown } from '../utils/gracefulShutdown.js';
|
import { gracefulShutdown } from '../utils/gracefulShutdown.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import type { ToolResultBlockParam } from '@anthropic-ai/sdk/resources/messages/messages.mjs';
|
import type { ToolResultBlockParam } from '@anthropic-ai/sdk/resources/messages/messages.mjs';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { stripUnderlineAnsi } from 'src/components/shell/OutputLine.js';
|
import { stripUnderlineAnsi } from 'src/components/shell/OutputLine.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { InterruptedByUser } from './InterruptedByUser.js';
|
import { InterruptedByUser } from './InterruptedByUser.js';
|
||||||
import { MessageResponse } from './MessageResponse.js';
|
import { MessageResponse } from './MessageResponse.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import chalk from 'chalk';
|
import chalk from 'chalk';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { LIGHTNING_BOLT } from '../constants/figures.js';
|
import { LIGHTNING_BOLT } from '../constants/figures.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS, logEvent } from 'src/services/analytics/index.js';
|
import { type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS, logEvent } from 'src/services/analytics/index.js';
|
||||||
import { Box, Text } from '../../ink.js';
|
import { Box, Text } from '../../ink.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Box, Text } from '../../ink.js';
|
import { Box, Text } from '../../ink.js';
|
||||||
import { useDebouncedDigitInput } from './useDebouncedDigitInput.js';
|
import { useDebouncedDigitInput } from './useDebouncedDigitInput.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { BLACK_CIRCLE } from '../../constants/figures.js';
|
import { BLACK_CIRCLE } from '../../constants/figures.js';
|
||||||
import { Box, Text } from '../../ink.js';
|
import { Box, Text } from '../../ink.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
||||||
import { isFeedbackSurveyDisabled } from 'src/services/analytics/config.js';
|
import { isFeedbackSurveyDisabled } from 'src/services/analytics/config.js';
|
||||||
import { checkStatsigFeatureGate_CACHED_MAY_BE_STALE } from 'src/services/analytics/growthbook.js';
|
import { checkStatsigFeatureGate_CACHED_MAY_BE_STALE } from 'src/services/analytics/growthbook.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import type { StructuredPatchHunk } from 'diff';
|
import type { StructuredPatchHunk } from 'diff';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { Suspense, use, useState } from 'react';
|
import { Suspense, use, useState } from 'react';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import type { StructuredPatchHunk } from 'diff';
|
import type { StructuredPatchHunk } from 'diff';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { useTerminalSize } from '../hooks/useTerminalSize.js';
|
import { useTerminalSize } from '../hooks/useTerminalSize.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import type { StructuredPatchHunk } from 'diff';
|
import type { StructuredPatchHunk } from 'diff';
|
||||||
import { relative } from 'path';
|
import { relative } from 'path';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { pathToFileURL } from 'url';
|
import { pathToFileURL } from 'url';
|
||||||
import Link from '../ink/components/Link.js';
|
import Link from '../ink/components/Link.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import figures from 'figures';
|
import figures from 'figures';
|
||||||
import React, { createContext, type ReactNode, type RefObject, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';
|
import React, { createContext, type ReactNode, type RefObject, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';
|
||||||
import { fileURLToPath } from 'url';
|
import { fileURLToPath } from 'url';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import { resolve as resolvePath } from 'path';
|
import { resolve as resolvePath } from 'path';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { useEffect, useRef, useState } from 'react';
|
import { useEffect, useRef, useState } from 'react';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
import { type Command, formatDescriptionWithSource } from '../../commands.js';
|
import { type Command, formatDescriptionWithSource } from '../../commands.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { Box, Text } from '../../ink.js';
|
import { Box, Text } from '../../ink.js';
|
||||||
import { PromptInputHelpMenu } from '../PromptInput/PromptInputHelpMenu.js';
|
import { PromptInputHelpMenu } from '../PromptInput/PromptInputHelpMenu.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { useExitOnCtrlCDWithKeybindings } from 'src/hooks/useExitOnCtrlCDWithKeybindings.js';
|
import { useExitOnCtrlCDWithKeybindings } from 'src/hooks/useExitOnCtrlCDWithKeybindings.js';
|
||||||
import { useShortcutDisplay } from 'src/keybindings/useShortcutDisplay.js';
|
import { useShortcutDisplay } from 'src/keybindings/useShortcutDisplay.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { c as _c } from "react/compiler-runtime";
|
import { c as _c } from "react-compiler-runtime";
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { memo, useEffect, useMemo, useRef, useState } from 'react';
|
import { memo, useEffect, useMemo, useRef, useState } from 'react';
|
||||||
import { useSettings } from '../hooks/useSettings.js';
|
import { useSettings } from '../hooks/useSettings.js';
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user