petdex-cc 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +247 -0
- package/README_CN.md +247 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +78 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/src/assets/tray-icon.png +0 -0
- package/dist/src/cli/config.d.ts +9 -0
- package/dist/src/cli/config.d.ts.map +1 -0
- package/dist/src/cli/config.js +41 -0
- package/dist/src/cli/config.js.map +1 -0
- package/dist/src/cli/install.d.ts +2 -0
- package/dist/src/cli/install.d.ts.map +1 -0
- package/dist/src/cli/install.js +62 -0
- package/dist/src/cli/install.js.map +1 -0
- package/dist/src/cli/list.d.ts +2 -0
- package/dist/src/cli/list.d.ts.map +1 -0
- package/dist/src/cli/list.js +20 -0
- package/dist/src/cli/list.js.map +1 -0
- package/dist/src/cli/start.d.ts +3 -0
- package/dist/src/cli/start.d.ts.map +1 -0
- package/dist/src/cli/start.js +37 -0
- package/dist/src/cli/start.js.map +1 -0
- package/dist/src/cli/status.d.ts +2 -0
- package/dist/src/cli/status.d.ts.map +1 -0
- package/dist/src/cli/status.js +8 -0
- package/dist/src/cli/status.js.map +1 -0
- package/dist/src/cli/stop.d.ts +2 -0
- package/dist/src/cli/stop.d.ts.map +1 -0
- package/dist/src/cli/stop.js +39 -0
- package/dist/src/cli/stop.js.map +1 -0
- package/dist/src/cli/switch.d.ts +2 -0
- package/dist/src/cli/switch.d.ts.map +1 -0
- package/dist/src/cli/switch.js +34 -0
- package/dist/src/cli/switch.js.map +1 -0
- package/dist/src/cli/uninstall.d.ts +2 -0
- package/dist/src/cli/uninstall.d.ts.map +1 -0
- package/dist/src/cli/uninstall.js +18 -0
- package/dist/src/cli/uninstall.js.map +1 -0
- package/dist/src/hooks/register.d.ts +3 -0
- package/dist/src/hooks/register.d.ts.map +1 -0
- package/dist/src/hooks/register.js +113 -0
- package/dist/src/hooks/register.js.map +1 -0
- package/dist/src/hooks/write-scripts.d.ts +2 -0
- package/dist/src/hooks/write-scripts.d.ts.map +1 -0
- package/dist/src/hooks/write-scripts.js +39 -0
- package/dist/src/hooks/write-scripts.js.map +1 -0
- package/dist/src/main/ai-speech.d.ts +22 -0
- package/dist/src/main/ai-speech.d.ts.map +1 -0
- package/dist/src/main/ai-speech.js +131 -0
- package/dist/src/main/ai-speech.js.map +1 -0
- package/dist/src/main/event-mapper.d.ts +10 -0
- package/dist/src/main/event-mapper.d.ts.map +1 -0
- package/dist/src/main/event-mapper.js +92 -0
- package/dist/src/main/event-mapper.js.map +1 -0
- package/dist/src/main/index.d.ts +2 -0
- package/dist/src/main/index.d.ts.map +1 -0
- package/dist/src/main/index.js +175 -0
- package/dist/src/main/index.js.map +1 -0
- package/dist/src/main/server.d.ts +8 -0
- package/dist/src/main/server.d.ts.map +1 -0
- package/dist/src/main/server.js +81 -0
- package/dist/src/main/server.js.map +1 -0
- package/dist/src/main/storage.d.ts +15 -0
- package/dist/src/main/storage.d.ts.map +1 -0
- package/dist/src/main/storage.js +90 -0
- package/dist/src/main/storage.js.map +1 -0
- package/dist/src/main/tray.d.ts +3 -0
- package/dist/src/main/tray.d.ts.map +1 -0
- package/dist/src/main/tray.js +156 -0
- package/dist/src/main/tray.js.map +1 -0
- package/dist/src/petdex-api/client.d.ts +21 -0
- package/dist/src/petdex-api/client.d.ts.map +1 -0
- package/dist/src/petdex-api/client.js +23 -0
- package/dist/src/petdex-api/client.js.map +1 -0
- package/dist/src/petdex-api/download.d.ts +8 -0
- package/dist/src/petdex-api/download.d.ts.map +1 -0
- package/dist/src/petdex-api/download.js +45 -0
- package/dist/src/petdex-api/download.js.map +1 -0
- package/dist/src/renderer/bubble.d.ts +30 -0
- package/dist/src/renderer/bubble.d.ts.map +1 -0
- package/dist/src/renderer/bubble.js +69 -0
- package/dist/src/renderer/bubble.js.map +1 -0
- package/dist/src/renderer/click-through.d.ts +21 -0
- package/dist/src/renderer/click-through.d.ts.map +1 -0
- package/dist/src/renderer/click-through.js +29 -0
- package/dist/src/renderer/click-through.js.map +1 -0
- package/dist/src/renderer/context-menu.d.ts +24 -0
- package/dist/src/renderer/context-menu.d.ts.map +1 -0
- package/dist/src/renderer/context-menu.js +83 -0
- package/dist/src/renderer/context-menu.js.map +1 -0
- package/dist/src/renderer/drag.d.ts +3 -0
- package/dist/src/renderer/drag.d.ts.map +1 -0
- package/dist/src/renderer/drag.js +57 -0
- package/dist/src/renderer/drag.js.map +1 -0
- package/dist/src/renderer/index.html +264 -0
- package/dist/src/renderer/pet-sprite.d.ts +25 -0
- package/dist/src/renderer/pet-sprite.d.ts.map +1 -0
- package/dist/src/renderer/pet-sprite.js +59 -0
- package/dist/src/renderer/pet-sprite.js.map +1 -0
- package/dist/src/renderer/renderer.d.ts +2 -0
- package/dist/src/renderer/renderer.d.ts.map +1 -0
- package/dist/src/renderer/renderer.js +244 -0
- package/dist/src/renderer/renderer.js.map +1 -0
- package/dist/src/renderer/wander.d.ts +8 -0
- package/dist/src/renderer/wander.d.ts.map +1 -0
- package/dist/src/renderer/wander.js +137 -0
- package/dist/src/renderer/wander.js.map +1 -0
- package/dist/src/shared/events.d.ts +62 -0
- package/dist/src/shared/events.d.ts.map +1 -0
- package/dist/src/shared/events.js +2 -0
- package/dist/src/shared/events.js.map +1 -0
- package/dist/src/shared/levels.d.ts +18 -0
- package/dist/src/shared/levels.d.ts.map +1 -0
- package/dist/src/shared/levels.js +20 -0
- package/dist/src/shared/levels.js.map +1 -0
- package/dist/src/shared/pet-states.d.ts +72 -0
- package/dist/src/shared/pet-states.d.ts.map +1 -0
- package/dist/src/shared/pet-states.js +20 -0
- package/dist/src/shared/pet-states.js.map +1 -0
- package/package.json +48 -0
- package/src/assets/tray-icon.png +0 -0
- package/src/hooks/bridge.ps1 +11 -0
- package/src/hooks/bridge.sh +9 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 devnomad-byte
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://img.shields.io/badge/version-0.1.0-8b5cf6?style=flat-square" />
|
|
3
|
+
<img src="https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-0ea5e9?style=flat-square" />
|
|
4
|
+
<img src="https://img.shields.io/badge/node-%3E%3D18-22c55e?style=flat-square" />
|
|
5
|
+
<img src="https://img.shields.io/badge/license-MIT-f59e0b?style=flat-square" />
|
|
6
|
+
<img src="https://img.shields.io/badge/pets-1569%20available-ec4899?style=flat-square" />
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
<h1 align="center">
|
|
10
|
+
<br />
|
|
11
|
+
<code>petdex-cc</code>
|
|
12
|
+
<br />
|
|
13
|
+
<sub><b>Desktop Pet Companion for Claude Code</b></sub>
|
|
14
|
+
<br />
|
|
15
|
+
<sub><i>Animated pets that react to your coding in real-time</i></sub>
|
|
16
|
+
</h1>
|
|
17
|
+
|
|
18
|
+
<p align="center">
|
|
19
|
+
<a href="./README_CN.md">中文文档</a>
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
<br />
|
|
25
|
+
|
|
26
|
+
> Pick a companion from [**petdex.crafter.run**](https://petdex.crafter.run/) — 1,569 pets to choose from.
|
|
27
|
+
> Install with one command. Watch your pet come alive as you code.
|
|
28
|
+
|
|
29
|
+
<br />
|
|
30
|
+
|
|
31
|
+
## What It Does
|
|
32
|
+
|
|
33
|
+
Your desktop pet lives in a transparent, always-on-top window and **reacts to your Claude Code activity in real-time**:
|
|
34
|
+
|
|
35
|
+
| What happens in Claude Code | What your pet does |
|
|
36
|
+
|---|---|
|
|
37
|
+
| You read a file | Pet reviews the code with you |
|
|
38
|
+
| You edit or write a file | Pet watches your changes |
|
|
39
|
+
| You run a shell command | Pet runs alongside you |
|
|
40
|
+
| A task completes | Pet celebrates with a happy jump |
|
|
41
|
+
| An error occurs | Pet shows concern and encouragement |
|
|
42
|
+
| You go idle | Pet waves and sends time-appropriate greetings |
|
|
43
|
+
| You level up | Pet glows, sparkles, and celebrates |
|
|
44
|
+
|
|
45
|
+
<br />
|
|
46
|
+
|
|
47
|
+
## Quick Start
|
|
48
|
+
|
|
49
|
+
### Prerequisites
|
|
50
|
+
|
|
51
|
+
- [Node.js](https://nodejs.org/) >= 18
|
|
52
|
+
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) installed (`~/.claude/` exists)
|
|
53
|
+
|
|
54
|
+
### Install a Pet
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Browse pets → https://petdex.crafter.run/
|
|
58
|
+
# Pick one, then install it with the slug:
|
|
59
|
+
|
|
60
|
+
npx petdex-cc install boba
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
That's it. Your pet appears on your desktop immediately.
|
|
64
|
+
|
|
65
|
+
> **Popular pets:** `boba` (otter) · `doraemon` · `noir-webling` (spider detective) · `ikun-hoops` (basketball chick)
|
|
66
|
+
|
|
67
|
+
<br />
|
|
68
|
+
|
|
69
|
+
## CLI Commands
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
petdex-cc install <slug> Install a pet and configure hooks
|
|
73
|
+
petdex-cc start Start the desktop pet
|
|
74
|
+
petdex-cc stop Stop the desktop pet
|
|
75
|
+
petdex-cc list Browse available pets from Petdex
|
|
76
|
+
petdex-cc switch <slug> Switch to a different pet
|
|
77
|
+
petdex-cc status Show current pet status & level
|
|
78
|
+
petdex-cc uninstall Remove hooks and pet data
|
|
79
|
+
petdex-cc config Configure API key and settings
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
<br />
|
|
83
|
+
|
|
84
|
+
## Level System
|
|
85
|
+
|
|
86
|
+
Your pet grows as you code. Every Claude Code action counts as an event.
|
|
87
|
+
|
|
88
|
+
| Level | Name | Events Needed | Visual Effect |
|
|
89
|
+
|:---:|---|---:|---|
|
|
90
|
+
| 1 | **Byte** | 0 | Base pet |
|
|
91
|
+
| 2 | **Process** | 50 | Soft breathing glow |
|
|
92
|
+
| 3 | **Thread** | 200 | Rotating aura ring |
|
|
93
|
+
| 4 | **Module** | 500 | Stronger effects |
|
|
94
|
+
| 5 | **Kernel** | 1,000 | Floating light particles |
|
|
95
|
+
| 6 | **Neural** | 2,000 | Pink particle storm |
|
|
96
|
+
| 7 | **Quantum** | 5,000 | Cyan energy field |
|
|
97
|
+
| 8 | **Singularity** | 10,000 | Golden halo + all effects |
|
|
98
|
+
|
|
99
|
+
<br />
|
|
100
|
+
|
|
101
|
+
## AI Speech
|
|
102
|
+
|
|
103
|
+
When you have an Anthropic API key configured (via `petdex-cc config` or Claude Code settings), your pet generates **context-aware speech bubbles**:
|
|
104
|
+
|
|
105
|
+
- Task completed → AI-generated encouragement
|
|
106
|
+
- Error occurred → Comforting words
|
|
107
|
+
- Idle for too long → Time-appropriate greetings
|
|
108
|
+
- Level up → Celebration message
|
|
109
|
+
|
|
110
|
+
No API key? Built-in preset lines work great too.
|
|
111
|
+
|
|
112
|
+
<br />
|
|
113
|
+
|
|
114
|
+
## Developer Setup
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# Clone the repo
|
|
118
|
+
git clone https://github.com/devnomad-byte/petdex-cc.git
|
|
119
|
+
cd petdex-cc
|
|
120
|
+
|
|
121
|
+
# Install dependencies
|
|
122
|
+
npm install
|
|
123
|
+
|
|
124
|
+
# Build
|
|
125
|
+
npm run build
|
|
126
|
+
|
|
127
|
+
# Start the pet (development)
|
|
128
|
+
npx electron .
|
|
129
|
+
|
|
130
|
+
# Or install globally for CLI access
|
|
131
|
+
npm link
|
|
132
|
+
petdex-cc install boba
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Project Structure
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
petdex-cc/
|
|
139
|
+
├── bin/cli.ts CLI entry point
|
|
140
|
+
├── src/
|
|
141
|
+
│ ├── main/ Electron main process
|
|
142
|
+
│ │ ├── index.ts Window & event loop
|
|
143
|
+
│ │ ├── server.ts HTTP event receiver (hooks → pet)
|
|
144
|
+
│ │ ├── ai-speech.ts AI speech generation
|
|
145
|
+
│ │ ├── storage.ts State persistence with HMAC signing
|
|
146
|
+
│ │ ├── tray.ts System tray menu
|
|
147
|
+
│ │ └── event-mapper.ts Hook events → pet actions
|
|
148
|
+
│ ├── renderer/ Electron renderer (pet UI)
|
|
149
|
+
│ │ ├── index.html Transparent window HTML/CSS
|
|
150
|
+
│ │ ├── renderer.ts Main renderer logic
|
|
151
|
+
│ │ ├── pet-sprite.ts Spritesheet animation engine
|
|
152
|
+
│ │ ├── bubble.ts Speech bubble system
|
|
153
|
+
│ │ ├── click-through.ts Click transparency
|
|
154
|
+
│ │ └── drag.ts Draggable pet
|
|
155
|
+
│ ├── cli/ CLI commands
|
|
156
|
+
│ ├── hooks/ Claude Code hooks registration
|
|
157
|
+
│ └── petdex-api/ Petdex API client & download
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Build Commands
|
|
161
|
+
|
|
162
|
+
| Command | What it does |
|
|
163
|
+
|---|---|
|
|
164
|
+
| `npm run build` | TypeScript compile + bundle renderer |
|
|
165
|
+
| `npm run check` | Type-check without emitting |
|
|
166
|
+
| `npx electron .` | Start pet from compiled output |
|
|
167
|
+
|
|
168
|
+
<br />
|
|
169
|
+
|
|
170
|
+
## How It Works
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
Claude Code ──hooks──▶ ~/.claude/settings.json
|
|
174
|
+
│
|
|
175
|
+
▼
|
|
176
|
+
bridge.ps1 / bridge.sh
|
|
177
|
+
│
|
|
178
|
+
▼
|
|
179
|
+
HTTP POST /event (localhost)
|
|
180
|
+
│
|
|
181
|
+
▼
|
|
182
|
+
┌───────────────┐
|
|
183
|
+
│ petdex-cc │
|
|
184
|
+
│ (Electron) │
|
|
185
|
+
│ │
|
|
186
|
+
│ event-mapper │──▶ pet action + speech bubble
|
|
187
|
+
│ storage │──▶ level up detection
|
|
188
|
+
│ ai-speech │──▶ AI-generated responses
|
|
189
|
+
└───────────────┘
|
|
190
|
+
│
|
|
191
|
+
▼
|
|
192
|
+
Desktop pet window
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
<br />
|
|
196
|
+
|
|
197
|
+
## Configuration
|
|
198
|
+
|
|
199
|
+
### API Key (optional, for AI speech)
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
# Set via config command
|
|
203
|
+
petdex-cc config --api-key <your-key> --api-base-url <url>
|
|
204
|
+
|
|
205
|
+
# Or it auto-detects from Claude Code settings (~/.claude/settings.json)
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Hook Events
|
|
209
|
+
|
|
210
|
+
petdex-cc registers these Claude Code hooks automatically:
|
|
211
|
+
|
|
212
|
+
| Hook Event | Trigger |
|
|
213
|
+
|---|---|
|
|
214
|
+
| `PostToolUse` | After Read, Edit, Write, Bash, Glob, Grep |
|
|
215
|
+
| `PostToolUseFailure` | After any tool fails |
|
|
216
|
+
| `Stop` | Claude finishes responding |
|
|
217
|
+
| `StopFailure` | Claude stops with an error |
|
|
218
|
+
| `Notification` | Idle notification |
|
|
219
|
+
| `SessionStart` | Claude Code starts or resumes |
|
|
220
|
+
| `SessionEnd` | Claude Code session ends |
|
|
221
|
+
| `TaskCompleted` | A task is marked complete |
|
|
222
|
+
|
|
223
|
+
<br />
|
|
224
|
+
|
|
225
|
+
## Find Your Pet
|
|
226
|
+
|
|
227
|
+
Visit [**petdex.crafter.run**](https://petdex.crafter.run/) to browse all 1,569+ community pets. Each pet has a unique slug you use to install:
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
# Find a pet you like, copy its slug, then:
|
|
231
|
+
petdex-cc install <slug>
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
<br />
|
|
235
|
+
|
|
236
|
+
## License
|
|
237
|
+
|
|
238
|
+
MIT — see [LICENSE](./LICENSE) for details.
|
|
239
|
+
|
|
240
|
+
<br />
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
<p align="center">
|
|
245
|
+
<sub>Built with love for the Claude Code community</sub><br />
|
|
246
|
+
<sub>Pets powered by <a href="https://petdex.crafter.run/">Petdex</a></sub>
|
|
247
|
+
</p>
|
package/README_CN.md
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://img.shields.io/badge/version-0.1.0-8b5cf6?style=flat-square" />
|
|
3
|
+
<img src="https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-0ea5e9?style=flat-square" />
|
|
4
|
+
<img src="https://img.shields.io/badge/node-%3E%3D18-22c55e?style=flat-square" />
|
|
5
|
+
<img src="https://img.shields.io/badge/license-MIT-f59e0b?style=flat-square" />
|
|
6
|
+
<img src="https://img.shields.io/badge/pets-1569%20%E6%AC%BE-ec4899?style=flat-square" />
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
<h1 align="center">
|
|
10
|
+
<br />
|
|
11
|
+
<code>petdex-cc</code>
|
|
12
|
+
<br />
|
|
13
|
+
<sub><b>Claude Code 桌面宠物伴侣</b></sub>
|
|
14
|
+
<br />
|
|
15
|
+
<sub><i>实时响应你编码行为的动画宠物</i></sub>
|
|
16
|
+
</h1>
|
|
17
|
+
|
|
18
|
+
<p align="center">
|
|
19
|
+
<a href="./README.md">English</a>
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
<br />
|
|
25
|
+
|
|
26
|
+
> 从 [**petdex.crafter.run**](https://petdex.crafter.run/) 挑选你的伙伴 — 1,569 款宠物任你选。
|
|
27
|
+
> 一条命令安装,宠物立刻出现在你的桌面上。
|
|
28
|
+
|
|
29
|
+
<br />
|
|
30
|
+
|
|
31
|
+
## 它能做什么
|
|
32
|
+
|
|
33
|
+
你的桌面宠物住在一个透明、始终置顶的窗口中,**实时响应你在 Claude Code 中的每一次操作**:
|
|
34
|
+
|
|
35
|
+
| Claude Code 中发生的事 | 你的宠物在做什么 |
|
|
36
|
+
|---|---|
|
|
37
|
+
| 你读取文件 | 宠物陪你一起看代码 |
|
|
38
|
+
| 你编辑或写入文件 | 宠物关注你的修改 |
|
|
39
|
+
| 你运行终端命令 | 宠物跟你一起跑起来 |
|
|
40
|
+
| 任务完成 | 宠物开心跳跃庆祝 |
|
|
41
|
+
| 出现错误 | 宠物送上鼓励和安慰 |
|
|
42
|
+
| 你离开太久 | 宠物挥手并问候(早上好/午安/晚安) |
|
|
43
|
+
| 你升级了 | 宠物发光、闪烁、庆祝 |
|
|
44
|
+
|
|
45
|
+
<br />
|
|
46
|
+
|
|
47
|
+
## 快速开始
|
|
48
|
+
|
|
49
|
+
### 环境要求
|
|
50
|
+
|
|
51
|
+
- [Node.js](https://nodejs.org/) >= 18
|
|
52
|
+
- 已安装 [Claude Code](https://docs.anthropic.com/en/docs/claude-code)(存在 `~/.claude/` 目录)
|
|
53
|
+
|
|
54
|
+
### 安装宠物
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# 浏览宠物 → https://petdex.crafter.run/
|
|
58
|
+
# 看中哪个,用它的 slug 安装:
|
|
59
|
+
|
|
60
|
+
npx petdex-cc install boba
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
就这样。宠物立刻出现在桌面上。
|
|
64
|
+
|
|
65
|
+
> **热门宠物:** `boba`(水獭) · `doraemon`(哆啦A梦) · `noir-webling`(蜘蛛侦探) · `ikun-hoops`(篮球小鸡) · `星星人`(星星头)
|
|
66
|
+
|
|
67
|
+
<br />
|
|
68
|
+
|
|
69
|
+
## 命令一览
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
petdex-cc install <slug> 安装宠物并配置 hooks
|
|
73
|
+
petdex-cc start 启动桌面宠物
|
|
74
|
+
petdex-cc stop 停止桌面宠物
|
|
75
|
+
petdex-cc list 浏览 Petdex 上的可用宠物
|
|
76
|
+
petdex-cc switch <slug> 切换到另一只宠物
|
|
77
|
+
petdex-cc status 查看当前宠物状态和等级
|
|
78
|
+
petdex-cc uninstall 移除 hooks 和宠物数据
|
|
79
|
+
petdex-cc config 配置 API Key 和设置
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
<br />
|
|
83
|
+
|
|
84
|
+
## 等级系统
|
|
85
|
+
|
|
86
|
+
你的宠物随你的编码而成长。每次 Claude Code 操作都算作一次事件。
|
|
87
|
+
|
|
88
|
+
| 等级 | 名称 | 所需事件数 | 视觉效果 |
|
|
89
|
+
|:---:|---|---:|---|
|
|
90
|
+
| 1 | **Byte** | 0 | 基础宠物 |
|
|
91
|
+
| 2 | **Process** | 50 | 柔和呼吸发光 |
|
|
92
|
+
| 3 | **Thread** | 200 | 旋转光环 |
|
|
93
|
+
| 4 | **Module** | 500 | 效果增强 |
|
|
94
|
+
| 5 | **Kernel** | 1,000 | 漂浮光点粒子 |
|
|
95
|
+
| 6 | **Neural** | 2,000 | 粉色粒子风暴 |
|
|
96
|
+
| 7 | **Quantum** | 5,000 | 青色能量场 |
|
|
97
|
+
| 8 | **Singularity** | 10,000 | 金色光环 + 全部特效 |
|
|
98
|
+
|
|
99
|
+
<br />
|
|
100
|
+
|
|
101
|
+
## AI 语音
|
|
102
|
+
|
|
103
|
+
当你配置了 Anthropic API Key(通过 `petdex-cc config` 或 Claude Code 设置),宠物会生成**上下文感知的中文语音气泡**:
|
|
104
|
+
|
|
105
|
+
- 任务完成 → AI 生成的鼓励语
|
|
106
|
+
- 出现错误 → 安慰的话语
|
|
107
|
+
- 空闲太久 → 时段问候
|
|
108
|
+
- 升级 → 庆祝语
|
|
109
|
+
|
|
110
|
+
没有 API Key?内置预设台词也很好用。
|
|
111
|
+
|
|
112
|
+
<br />
|
|
113
|
+
|
|
114
|
+
## 开发者安装
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# 克隆仓库
|
|
118
|
+
git clone https://github.com/devnomad-byte/petdex-cc.git
|
|
119
|
+
cd petdex-cc
|
|
120
|
+
|
|
121
|
+
# 安装依赖
|
|
122
|
+
npm install
|
|
123
|
+
|
|
124
|
+
# 构建
|
|
125
|
+
npm run build
|
|
126
|
+
|
|
127
|
+
# 启动宠物(开发模式)
|
|
128
|
+
npx electron .
|
|
129
|
+
|
|
130
|
+
# 或者全局安装以使用 CLI
|
|
131
|
+
npm link
|
|
132
|
+
petdex-cc install boba
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### 项目结构
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
petdex-cc/
|
|
139
|
+
├── bin/cli.ts CLI 入口
|
|
140
|
+
├── src/
|
|
141
|
+
│ ├── main/ Electron 主进程
|
|
142
|
+
│ │ ├── index.ts 窗口 & 事件循环
|
|
143
|
+
│ │ ├── server.ts HTTP 事件接收器(hooks → 宠物)
|
|
144
|
+
│ │ ├── ai-speech.ts AI 语音生成
|
|
145
|
+
│ │ ├── storage.ts 状态持久化(HMAC 签名)
|
|
146
|
+
│ │ ├── tray.ts 系统托盘菜单
|
|
147
|
+
│ │ └── event-mapper.ts Hook 事件 → 宠物动作
|
|
148
|
+
│ ├── renderer/ Electron 渲染进程(宠物 UI)
|
|
149
|
+
│ │ ├── index.html 透明窗口 HTML/CSS
|
|
150
|
+
│ │ ├── renderer.ts 主渲染逻辑
|
|
151
|
+
│ │ ├── pet-sprite.ts 精灵图动画引擎
|
|
152
|
+
│ │ ├── bubble.ts 语音气泡系统
|
|
153
|
+
│ │ ├── click-through.ts 点击穿透
|
|
154
|
+
│ │ └── drag.ts 可拖拽宠物
|
|
155
|
+
│ ├── cli/ CLI 命令
|
|
156
|
+
│ ├── hooks/ Claude Code hooks 注册
|
|
157
|
+
│ └── petdex-api/ Petdex API 客户端 & 下载
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### 构建命令
|
|
161
|
+
|
|
162
|
+
| 命令 | 说明 |
|
|
163
|
+
|---|---|
|
|
164
|
+
| `npm run build` | TypeScript 编译 + 打包渲染器 |
|
|
165
|
+
| `npm run check` | 仅类型检查 |
|
|
166
|
+
| `npx electron .` | 从编译输出启动宠物 |
|
|
167
|
+
|
|
168
|
+
<br />
|
|
169
|
+
|
|
170
|
+
## 工作原理
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
Claude Code ──hooks──▶ ~/.claude/settings.json
|
|
174
|
+
│
|
|
175
|
+
▼
|
|
176
|
+
bridge.ps1 / bridge.sh
|
|
177
|
+
│
|
|
178
|
+
▼
|
|
179
|
+
HTTP POST /event (localhost)
|
|
180
|
+
│
|
|
181
|
+
▼
|
|
182
|
+
┌───────────────┐
|
|
183
|
+
│ petdex-cc │
|
|
184
|
+
│ (Electron) │
|
|
185
|
+
│ │
|
|
186
|
+
│ event-mapper │──▶ 宠物动作 + 语音气泡
|
|
187
|
+
│ storage │──▶ 升级检测
|
|
188
|
+
│ ai-speech │──▶ AI 生成的回复
|
|
189
|
+
└───────────────┘
|
|
190
|
+
│
|
|
191
|
+
▼
|
|
192
|
+
桌面宠物窗口
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
<br />
|
|
196
|
+
|
|
197
|
+
## 配置
|
|
198
|
+
|
|
199
|
+
### API Key(可选,用于 AI 语音)
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
# 通过 config 命令设置
|
|
203
|
+
petdex-cc config --api-key <your-key> --api-base-url <url>
|
|
204
|
+
|
|
205
|
+
# 或者自动从 Claude Code 设置中读取(~/.claude/settings.json)
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Hook 事件
|
|
209
|
+
|
|
210
|
+
petdex-cc 自动注册以下 Claude Code hooks:
|
|
211
|
+
|
|
212
|
+
| Hook 事件 | 触发时机 |
|
|
213
|
+
|---|---|
|
|
214
|
+
| `PostToolUse` | Read、Edit、Write、Bash、Glob、Grep 之后 |
|
|
215
|
+
| `PostToolUseFailure` | 工具执行失败时 |
|
|
216
|
+
| `Stop` | Claude 完成响应时 |
|
|
217
|
+
| `StopFailure` | Claude 停止并报错时 |
|
|
218
|
+
| `Notification` | 空闲通知 |
|
|
219
|
+
| `SessionStart` | Claude Code 启动或恢复时 |
|
|
220
|
+
| `SessionEnd` | Claude Code 会话结束时 |
|
|
221
|
+
| `TaskCompleted` | 任务标记完成时 |
|
|
222
|
+
|
|
223
|
+
<br />
|
|
224
|
+
|
|
225
|
+
## 挑选你的宠物
|
|
226
|
+
|
|
227
|
+
访问 [**petdex.crafter.run**](https://petdex.crafter.run/) 浏览全部 1,569+ 款社区宠物。每只宠物都有唯一的 slug,用它来安装:
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
# 找到喜欢的宠物,复制它的 slug,然后:
|
|
231
|
+
petdex-cc install <slug>
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
<br />
|
|
235
|
+
|
|
236
|
+
## 许可证
|
|
237
|
+
|
|
238
|
+
MIT — 详见 [LICENSE](./LICENSE)。
|
|
239
|
+
|
|
240
|
+
<br />
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
<p align="center">
|
|
245
|
+
<sub>为 Claude Code 社区用心打造</sub><br />
|
|
246
|
+
<sub>宠物来自 <a href="https://petdex.crafter.run/">Petdex</a></sub>
|
|
247
|
+
</p>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":""}
|
package/dist/bin/cli.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { install } from "../src/cli/install.js";
|
|
3
|
+
import { start } from "../src/cli/start.js";
|
|
4
|
+
import { stop } from "../src/cli/stop.js";
|
|
5
|
+
import { list } from "../src/cli/list.js";
|
|
6
|
+
import { switchPet } from "../src/cli/switch.js";
|
|
7
|
+
import { status } from "../src/cli/status.js";
|
|
8
|
+
import { uninstall } from "../src/cli/uninstall.js";
|
|
9
|
+
import { config } from "../src/cli/config.js";
|
|
10
|
+
const args = process.argv.slice(2);
|
|
11
|
+
const command = args[0];
|
|
12
|
+
const rest = args.slice(1);
|
|
13
|
+
async function main() {
|
|
14
|
+
switch (command) {
|
|
15
|
+
case "install":
|
|
16
|
+
if (!rest[0]) {
|
|
17
|
+
console.error("Usage: petdex-cc install <pet-slug>");
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
await install(rest[0]);
|
|
21
|
+
break;
|
|
22
|
+
case "start":
|
|
23
|
+
start();
|
|
24
|
+
break;
|
|
25
|
+
case "stop":
|
|
26
|
+
stop();
|
|
27
|
+
break;
|
|
28
|
+
case "list":
|
|
29
|
+
await list();
|
|
30
|
+
break;
|
|
31
|
+
case "switch":
|
|
32
|
+
if (!rest[0]) {
|
|
33
|
+
console.error("Usage: petdex-cc switch <pet-slug>");
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
await switchPet(rest[0]);
|
|
37
|
+
break;
|
|
38
|
+
case "status":
|
|
39
|
+
status();
|
|
40
|
+
break;
|
|
41
|
+
case "uninstall":
|
|
42
|
+
uninstall();
|
|
43
|
+
break;
|
|
44
|
+
case "config":
|
|
45
|
+
config(rest);
|
|
46
|
+
break;
|
|
47
|
+
case "help":
|
|
48
|
+
case "--help":
|
|
49
|
+
case "-h":
|
|
50
|
+
printHelp();
|
|
51
|
+
break;
|
|
52
|
+
default:
|
|
53
|
+
console.log(`Unknown command: ${command ?? ""}`);
|
|
54
|
+
printHelp();
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function printHelp() {
|
|
59
|
+
console.log(`
|
|
60
|
+
petdex-cc - Desktop pet companion for Claude Code
|
|
61
|
+
|
|
62
|
+
Commands:
|
|
63
|
+
install <slug> Install a pet from Petdex and configure hooks
|
|
64
|
+
start Start the desktop pet
|
|
65
|
+
stop Stop the desktop pet
|
|
66
|
+
list List available pets from Petdex
|
|
67
|
+
switch <slug> Switch to a different pet
|
|
68
|
+
status Show current pet status and level
|
|
69
|
+
uninstall Remove petdex-cc hooks and data
|
|
70
|
+
config Configure API key and settings
|
|
71
|
+
help Show this help message
|
|
72
|
+
`);
|
|
73
|
+
}
|
|
74
|
+
main().catch((err) => {
|
|
75
|
+
console.error(err.message);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE3B,KAAK,UAAU,IAAI;IACjB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS;YACZ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM;QACR,KAAK,OAAO;YACV,KAAK,EAAE,CAAC;YACR,MAAM;QACR,KAAK,MAAM;YACT,IAAI,EAAE,CAAC;YACP,MAAM;QACR,KAAK,MAAM;YACT,MAAM,IAAI,EAAE,CAAC;YACb,MAAM;QACR,KAAK,QAAQ;YACX,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,EAAE,CAAC;YACT,MAAM;QACR,KAAK,WAAW;YACd,SAAS,EAAE,CAAC;YACZ,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,CAAC,IAAI,CAAC,CAAC;YACb,MAAM;QACR,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,SAAS,EAAE,CAAC;YACZ,MAAM;QACR;YACE,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;YACjD,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;CAab,CAAC,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
Binary file
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface UserConfig {
|
|
2
|
+
apiKey?: string;
|
|
3
|
+
apiBaseUrl?: string;
|
|
4
|
+
cooldownMinutes?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function loadConfig(): UserConfig;
|
|
7
|
+
export declare function saveConfig(config: UserConfig): void;
|
|
8
|
+
export declare function config(args: string[]): void;
|
|
9
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,UAAU,IAAI,UAAU,CAOvC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAKnD;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAqB3C"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
const CONFIG_PATH = join(homedir(), ".petdex-cc", "config.json");
|
|
5
|
+
export function loadConfig() {
|
|
6
|
+
if (!existsSync(CONFIG_PATH))
|
|
7
|
+
return {};
|
|
8
|
+
try {
|
|
9
|
+
return JSON.parse(readFileSync(CONFIG_PATH, "utf8"));
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return {};
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function saveConfig(config) {
|
|
16
|
+
const dir = join(homedir(), ".petdex-cc");
|
|
17
|
+
mkdirSync(dir, { recursive: true });
|
|
18
|
+
writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2));
|
|
19
|
+
console.log("Configuration saved.");
|
|
20
|
+
}
|
|
21
|
+
export function config(args) {
|
|
22
|
+
const config = loadConfig();
|
|
23
|
+
for (let i = 0; i < args.length; i += 2) {
|
|
24
|
+
const key = args[i];
|
|
25
|
+
const value = args[i + 1];
|
|
26
|
+
switch (key) {
|
|
27
|
+
case "--api-key":
|
|
28
|
+
config.apiKey = value;
|
|
29
|
+
break;
|
|
30
|
+
case "--api-base-url":
|
|
31
|
+
config.apiBaseUrl = value;
|
|
32
|
+
break;
|
|
33
|
+
case "--cooldown":
|
|
34
|
+
config.cooldownMinutes = Number(value);
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
saveConfig(config);
|
|
39
|
+
console.log("Current config:", JSON.stringify(config, null, 2));
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;AAQjE,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAkB;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;IAC1C,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAc;IACnC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,WAAW;gBACd,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;gBACtB,MAAM;YACR,KAAK,gBAAgB;gBACnB,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;gBAC1B,MAAM;YACR,KAAK,YAAY;gBACf,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvC,MAAM;QACV,CAAC;IACH,CAAC;IAED,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/cli/install.ts"],"names":[],"mappings":"AAeA,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CzD"}
|