pet-terminal 1.0.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.
Files changed (147) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +268 -0
  3. package/dist/commands/care.d.ts +3 -0
  4. package/dist/commands/care.d.ts.map +1 -0
  5. package/dist/commands/care.js +103 -0
  6. package/dist/commands/care.js.map +1 -0
  7. package/dist/commands/clean.d.ts +3 -0
  8. package/dist/commands/clean.d.ts.map +1 -0
  9. package/dist/commands/clean.js +105 -0
  10. package/dist/commands/clean.js.map +1 -0
  11. package/dist/commands/feed.d.ts +3 -0
  12. package/dist/commands/feed.d.ts.map +1 -0
  13. package/dist/commands/feed.js +106 -0
  14. package/dist/commands/feed.js.map +1 -0
  15. package/dist/commands/git.d.ts +3 -0
  16. package/dist/commands/git.d.ts.map +1 -0
  17. package/dist/commands/git.js +138 -0
  18. package/dist/commands/git.js.map +1 -0
  19. package/dist/commands/heal.d.ts +3 -0
  20. package/dist/commands/heal.d.ts.map +1 -0
  21. package/dist/commands/heal.js +106 -0
  22. package/dist/commands/heal.js.map +1 -0
  23. package/dist/commands/init.d.ts +3 -0
  24. package/dist/commands/init.d.ts.map +1 -0
  25. package/dist/commands/init.js +89 -0
  26. package/dist/commands/init.js.map +1 -0
  27. package/dist/commands/inventory.d.ts +3 -0
  28. package/dist/commands/inventory.d.ts.map +1 -0
  29. package/dist/commands/inventory.js +113 -0
  30. package/dist/commands/inventory.js.map +1 -0
  31. package/dist/commands/play.d.ts +3 -0
  32. package/dist/commands/play.d.ts.map +1 -0
  33. package/dist/commands/play.js +110 -0
  34. package/dist/commands/play.js.map +1 -0
  35. package/dist/commands/shop.d.ts +3 -0
  36. package/dist/commands/shop.d.ts.map +1 -0
  37. package/dist/commands/shop.js +197 -0
  38. package/dist/commands/shop.js.map +1 -0
  39. package/dist/commands/sleep.d.ts +3 -0
  40. package/dist/commands/sleep.d.ts.map +1 -0
  41. package/dist/commands/sleep.js +48 -0
  42. package/dist/commands/sleep.js.map +1 -0
  43. package/dist/commands/status.d.ts +3 -0
  44. package/dist/commands/status.d.ts.map +1 -0
  45. package/dist/commands/status.js +98 -0
  46. package/dist/commands/status.js.map +1 -0
  47. package/dist/commands/sync.d.ts +3 -0
  48. package/dist/commands/sync.d.ts.map +1 -0
  49. package/dist/commands/sync.js +66 -0
  50. package/dist/commands/sync.js.map +1 -0
  51. package/dist/commands/tutorial.d.ts +3 -0
  52. package/dist/commands/tutorial.d.ts.map +1 -0
  53. package/dist/commands/tutorial.js +210 -0
  54. package/dist/commands/tutorial.js.map +1 -0
  55. package/dist/core/auto-care.d.ts +63 -0
  56. package/dist/core/auto-care.d.ts.map +1 -0
  57. package/dist/core/auto-care.js +295 -0
  58. package/dist/core/auto-care.js.map +1 -0
  59. package/dist/core/config.d.ts +89 -0
  60. package/dist/core/config.d.ts.map +1 -0
  61. package/dist/core/config.js +195 -0
  62. package/dist/core/config.js.map +1 -0
  63. package/dist/core/database.d.ts +29 -0
  64. package/dist/core/database.d.ts.map +1 -0
  65. package/dist/core/database.js +81 -0
  66. package/dist/core/database.js.map +1 -0
  67. package/dist/core/inventory.d.ts +63 -0
  68. package/dist/core/inventory.d.ts.map +1 -0
  69. package/dist/core/inventory.js +140 -0
  70. package/dist/core/inventory.js.map +1 -0
  71. package/dist/core/level-system.d.ts +32 -0
  72. package/dist/core/level-system.d.ts.map +1 -0
  73. package/dist/core/level-system.js +76 -0
  74. package/dist/core/level-system.js.map +1 -0
  75. package/dist/core/pet.d.ts +123 -0
  76. package/dist/core/pet.d.ts.map +1 -0
  77. package/dist/core/pet.js +781 -0
  78. package/dist/core/pet.js.map +1 -0
  79. package/dist/core/shop.d.ts +93 -0
  80. package/dist/core/shop.d.ts.map +1 -0
  81. package/dist/core/shop.js +205 -0
  82. package/dist/core/shop.js.map +1 -0
  83. package/dist/core/time-decay.d.ts +30 -0
  84. package/dist/core/time-decay.d.ts.map +1 -0
  85. package/dist/core/time-decay.js +149 -0
  86. package/dist/core/time-decay.js.map +1 -0
  87. package/dist/core/welcome.d.ts +31 -0
  88. package/dist/core/welcome.d.ts.map +1 -0
  89. package/dist/core/welcome.js +180 -0
  90. package/dist/core/welcome.js.map +1 -0
  91. package/dist/index.d.ts +3 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +80 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/monitor/git-monitor.d.ts +90 -0
  96. package/dist/monitor/git-monitor.d.ts.map +1 -0
  97. package/dist/monitor/git-monitor.js +342 -0
  98. package/dist/monitor/git-monitor.js.map +1 -0
  99. package/dist/types/auto-care.d.ts +86 -0
  100. package/dist/types/auto-care.d.ts.map +1 -0
  101. package/dist/types/auto-care.js +15 -0
  102. package/dist/types/auto-care.js.map +1 -0
  103. package/dist/types/config.d.ts +42 -0
  104. package/dist/types/config.d.ts.map +1 -0
  105. package/dist/types/config.js +24 -0
  106. package/dist/types/config.js.map +1 -0
  107. package/dist/types/git.d.ts +68 -0
  108. package/dist/types/git.d.ts.map +1 -0
  109. package/dist/types/git.js +14 -0
  110. package/dist/types/git.js.map +1 -0
  111. package/dist/types/items.d.ts +41 -0
  112. package/dist/types/items.d.ts.map +1 -0
  113. package/dist/types/items.js +286 -0
  114. package/dist/types/items.js.map +1 -0
  115. package/dist/types/pet.d.ts +42 -0
  116. package/dist/types/pet.d.ts.map +1 -0
  117. package/dist/types/pet.js +16 -0
  118. package/dist/types/pet.js.map +1 -0
  119. package/dist/types/species.d.ts +30 -0
  120. package/dist/types/species.d.ts.map +1 -0
  121. package/dist/types/species.js +164 -0
  122. package/dist/types/species.js.map +1 -0
  123. package/dist/types/stats.d.ts +22 -0
  124. package/dist/types/stats.d.ts.map +1 -0
  125. package/dist/types/stats.js +18 -0
  126. package/dist/types/stats.js.map +1 -0
  127. package/dist/types/time.d.ts +30 -0
  128. package/dist/types/time.d.ts.map +1 -0
  129. package/dist/types/time.js +79 -0
  130. package/dist/types/time.js.map +1 -0
  131. package/dist/ui/ascii-art.d.ts +4 -0
  132. package/dist/ui/ascii-art.d.ts.map +1 -0
  133. package/dist/ui/ascii-art.js +170 -0
  134. package/dist/ui/ascii-art.js.map +1 -0
  135. package/dist/ui/display.d.ts +11 -0
  136. package/dist/ui/display.d.ts.map +1 -0
  137. package/dist/ui/display.js +93 -0
  138. package/dist/ui/display.js.map +1 -0
  139. package/dist/ui/help.d.ts +17 -0
  140. package/dist/ui/help.d.ts.map +1 -0
  141. package/dist/ui/help.js +280 -0
  142. package/dist/ui/help.js.map +1 -0
  143. package/dist/ui/progress-bar.d.ts +9 -0
  144. package/dist/ui/progress-bar.d.ts.map +1 -0
  145. package/dist/ui/progress-bar.js +57 -0
  146. package/dist/ui/progress-bar.js.map +1 -0
  147. package/package.json +61 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Lishang Xu
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,268 @@
1
+ # Pet Terminal [![](https://img.shields.io/npm/v/pet-terminal.svg)](https://www.npmjs.com/package/pet-terminal) [![](https://img.shields.io/npm/dm/pet-terminal.svg)](https://www.npmjs.com/package/pet-terminal) [![](https://img.shields.io/npm/l/pet-terminal.svg)](https://opensource.org/licenses/MIT)
2
+
3
+
4
+ <div align="center">
5
+
6
+ A terminal-based virtual pet that lives in your command line.
7
+ Your pet grows happier when you code!
8
+
9
+ [Features](#-features) &bull; [Installation](#-installation) &bull; [Quick Start](#-quick-start) &bull; [Commands](#-commands) &bull; [Philosophy](#-philosophy)
10
+
11
+ </div>
12
+
13
+ ---
14
+
15
+ ## Features
16
+
17
+ - **Choose your pet**: Cat, Dog, Rabbit, Hamster, Bird, or Dragon
18
+ - **Git integration**: Earn rewards for coding - your pet loves watching you work!
19
+ - **Shop system**: Buy food, toys, and supplies with earned coins
20
+ - **Level up**: Your pet grows stronger as you care for it
21
+ - **One-click care**: Quickly handle all your pet's needs with `pet care`
22
+ - **Stats tracking**: Hunger, happiness, health, cleanliness, energy
23
+ - **Lenient decay**: Stats decay slowly - your pet stays healthy for days!
24
+
25
+ ## Installation
26
+
27
+ ### Global Installation (Recommended)
28
+
29
+ ```bash
30
+ npm install -g pet-terminal
31
+ ```
32
+
33
+ ### Local Installation
34
+
35
+ ```bash
36
+ npm install -g pet-terminal
37
+ ```
38
+
39
+ Or use with npx without installing:
40
+
41
+ ```bash
42
+ npx pet-terminal init
43
+ ```
44
+
45
+ ## Quick Start
46
+
47
+ ```bash
48
+ # Create your first pet
49
+ pet init
50
+
51
+ # Check on your pet
52
+ pet status
53
+
54
+ # See all commands
55
+ pet --help
56
+
57
+ # View the tutorial
58
+ pet tutorial
59
+ ```
60
+
61
+ ## Commands
62
+
63
+ | Command | Aliases | Description |
64
+ |---------|---------|-------------|
65
+ | `pet init` | - | Create a new pet |
66
+ | `pet status` | - | Display your pet's status |
67
+ | `pet feed` | - | Feed your pet |
68
+ | `pet play` | - | Play with your pet |
69
+ | `pet clean` | - | Clean your pet |
70
+ | `pet heal` | - | Heal your pet |
71
+ | `pet sleep` | - | Put pet to sleep/wake up |
72
+ | `pet care` | `auto`, `all` | One-click care for all needs |
73
+ | `pet inventory` | `inv`, `items` | Show your inventory |
74
+ | `pet shop` | `store` | Visit the pet shop |
75
+ | `pet git` | `commits` | Check for new Git commits |
76
+ | `pet sync` | - | Sync time and show changes |
77
+ | `pet tutorial` | `help`, `guide` | Show the tutorial |
78
+
79
+ ## Philosophy
80
+
81
+ > **"Writing code = being with your pet"**
82
+
83
+ Pet Terminal isn't a chore - it's a companion. When you make Git commits, your pet automatically gains stats because they're happy watching you work!
84
+
85
+ This is a zero-burden companion designed to make your coding sessions more enjoyable, not another task to complete.
86
+
87
+ ## How It Works
88
+
89
+ ### Earning Rewards
90
+
91
+ Every Git commit earns you coins and XP:
92
+
93
+ | Commit Type | Prefix Examples | Coins | XP |
94
+ |-------------|-----------------|-------|-----|
95
+ | Bug Fix | `fix:`, `bug:`, `修复` | +10 | +20 |
96
+ | Feature | `feat:`, `add:`, `新` | +8 | +15 |
97
+ | Refactor | `refactor:`, `重构` | +6 | +12 |
98
+ | Normal | any other | +5 | +10 |
99
+
100
+ ### Stat Bonuses
101
+
102
+ Every commit also gives:
103
+ - **Hunger +15**: Your pet feels fed seeing you work
104
+ - **Happiness +10**: Your pet is happy you're here
105
+
106
+ ### Stat Decay
107
+
108
+ Stats decay slowly over time (real-time):
109
+
110
+ | Stat | Decay Rate | Time to Empty (from 100%) |
111
+ |------|-----------|--------------------------|
112
+ | Hunger | -3/hour | ~33 hours |
113
+ | Happiness | -0.67/hour | ~150 hours (~6 days) |
114
+ | Cleanliness | -0.125/hour | ~800 hours (~33 days) |
115
+ | Energy | -2/hour (awake) | ~50 hours |
116
+
117
+ The decay is intentionally lenient - your pet stays healthy for days without attention!
118
+
119
+ ### Streak Bonuses
120
+
121
+ Maintain a daily commit streak for bonus rewards:
122
+ - **3+ days**: +2 stat bonus per commit
123
+ - **7+ days**: +5 stat bonus per commit, +10 daily coins
124
+ - **30+ days**: +5 stat bonus per commit, +50 daily coins
125
+
126
+ ## Screenshots
127
+
128
+ ### Pet Status
129
+
130
+ ```
131
+ ╔══════════════════════════════════════════╗
132
+ ║ SPARKY THE CAT ║
133
+ ╚══════════════════════════════════════════╝
134
+
135
+ /\_/\
136
+ ( o.o )
137
+ > ^ <
138
+
139
+ Status: ⚡ Awake
140
+
141
+ ──────────────────────────────────────────
142
+ Hunger ███████████████░░░░ 80%
143
+ Happiness ████████████████░░░░ 85%
144
+ Health ███████████████████░ 95%
145
+ Cleanliness ████████████░░░░░░░░ 70%
146
+ Energy ██████████████████░░ 90%
147
+ ──────────────────────────────────────────
148
+
149
+ Level: 5 ████████████████░░░░ 85/100 XP
150
+
151
+ Mood: 😊 HAPPY - Sparky is feeling wonderful!
152
+
153
+ Coins: 150 🪙
154
+ Today's earnings: +25 🪙
155
+
156
+ Git Streak: 5 days
157
+ Total Commits: 42
158
+
159
+ 💡 Use 'pet care' for one-click care
160
+ ```
161
+
162
+ ### Git Rewards
163
+
164
+ ```
165
+ ╔══════════════════════════════════════════╗
166
+ ║ GIT COMMITS ║
167
+ ╚══════════════════════════════════════════╝
168
+
169
+ ──────────────────────────────────────────
170
+ Current Streak: 5 days
171
+ Total Rewarded: 42 commits
172
+ ──────────────────────────────────────────
173
+
174
+ Found 3 new commit(s)!
175
+
176
+ 94b2b6e - feat: add new authentication system
177
+ [Feature] +8 🪙 +15 XP
178
+ 📦 Large Commit Bonus!
179
+
180
+ a1b2c3d - fix: resolve memory leak in parser
181
+ [Bug Fix] +10 🪙 +20 XP
182
+
183
+ d4e5f6g - refactor: simplify database queries
184
+ [Refactor] +6 🪙 +12 XP
185
+
186
+ ──────────────────────────────────────────
187
+ Total: +24 🪙 +47 XP
188
+ 🔥 Streak Bonus! +5 🪙
189
+ ──────────────────────────────────────────
190
+
191
+ Your Coins: 150 🪙
192
+ ```
193
+
194
+ ## Configuration
195
+
196
+ Optional config file: `~/.pet-terminal/config.json`
197
+
198
+ ```json
199
+ {
200
+ "decayRate": 1.0,
201
+ "autoCare": {
202
+ "enabled": false,
203
+ "thresholds": {
204
+ "hunger": 70,
205
+ "happiness": 60,
206
+ "cleanliness": 60,
207
+ "health": 70
208
+ }
209
+ }
210
+ }
211
+ ```
212
+
213
+ ### Configuration Options
214
+
215
+ | Option | Type | Default | Description |
216
+ |--------|------|---------|-------------|
217
+ | `decayRate` | number | 1.0 | Global decay multiplier (0.5-2.0) |
218
+ | `autoCare.enabled` | boolean | false | Enable auto-purchase of items |
219
+ | `autoCare.thresholds` | object | - | Stat thresholds for care needs |
220
+
221
+ ## Pet Species
222
+
223
+ | Species | Description | Special Trait |
224
+ |---------|-------------|---------------|
225
+ | 🐱 Cat | Independent and graceful | Higher happiness cap |
226
+ | 🐕 Dog | Loyal and energetic | Faster energy recovery |
227
+ | 🐰 Rabbit | Gentle and affectionate | Extra XP from care |
228
+ | 🐹 Hamster | Small and active | Bonus coins from play |
229
+ | 🐦 Bird | Cheerful and smart | Stat bonuses from commits |
230
+ | 🐉 Dragon | Rare and powerful | All stats boosted |
231
+
232
+ ## Tips & Tricks
233
+
234
+ - **Forgot about your pet?** Run `pet sync` to catch up on time passed
235
+ - **Low on supplies?** Use `pet care` to see what you need
236
+ - **Want quick coins?** Make some commits and run `pet git`
237
+ - **Pet sleeping?** Let them sleep to restore energy
238
+ - **Stats low?** Use `pet care` for one-click care of all needs
239
+
240
+ ## Contributing
241
+
242
+ Contributions are welcome! Please feel free to submit a Pull Request.
243
+
244
+ 1. Fork the repository
245
+ 2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
246
+ 3. Commit your changes (`git commit -m 'feat: add amazing feature'`)
247
+ 4. Push to the branch (`git push origin feature/AmazingFeature`)
248
+ 5. Open a Pull Request
249
+
250
+ ## License
251
+
252
+ MIT License - see [LICENSE](LICENSE) file for details
253
+
254
+ ## Credits
255
+
256
+ Built with:
257
+ - [Commander.js](https://www.npmjs.com/package/commander) - CLI framework
258
+ - [Chalk](https://www.npmjs.com/package/chalk) - Terminal styling
259
+ - [Inquirer](https://www.npmjs.com/package/inquirer) - Interactive prompts
260
+ - [lowdb](https://www.npmjs.com/package/lowdb) - JSON database
261
+
262
+ ---
263
+
264
+ <div align="center">
265
+
266
+ Made with for developers who love their terminal pets
267
+
268
+ </div>
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const careCommand: Command;
3
+ //# sourceMappingURL=care.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"care.d.ts","sourceRoot":"","sources":["../../src/commands/care.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,eAAO,MAAM,WAAW,SAAsB,CAAC"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.careCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const database_1 = require("../core/database");
11
+ const pet_1 = require("../core/pet");
12
+ const display_1 = require("../ui/display");
13
+ const ascii_art_1 = require("../ui/ascii-art");
14
+ const auto_care_1 = require("../core/auto-care");
15
+ exports.careCommand = new commander_1.Command('care');
16
+ exports.careCommand
17
+ .alias('auto')
18
+ .alias('all')
19
+ .description('One-click care for your pet - handle all needs at once')
20
+ .action(async () => {
21
+ const db = new database_1.Database(path_1.default.join(process.cwd(), 'data', 'pet.json'));
22
+ if (!db.hasPet()) {
23
+ console.log(chalk_1.default.yellow("You don't have a pet yet!"));
24
+ console.log(chalk_1.default.gray('Use "pet init" to create one.'));
25
+ return;
26
+ }
27
+ const pet = await pet_1.Pet.loadOrCreate(db);
28
+ const data = pet.getData();
29
+ console.log('');
30
+ console.log((0, display_1.drawHeader)('ONE-CLICK CARE', 46));
31
+ console.log('');
32
+ console.log(chalk_1.default.green((0, ascii_art_1.getPetAscii)(data.species, data.mood, data.isSleeping)));
33
+ console.log('');
34
+ if (data.isSleeping) {
35
+ console.log(chalk_1.default.yellow(`${data.name} is sleeping!`));
36
+ console.log(chalk_1.default.gray('Let them rest to recover energy.'));
37
+ console.log(chalk_1.default.gray('Use "pet sleep" to wake them up when needed.'));
38
+ console.log('');
39
+ return;
40
+ }
41
+ // Perform one-click care
42
+ const autoCare = (0, auto_care_1.createAutoCare)();
43
+ const result = await autoCare.oneClickCare(pet);
44
+ console.log((0, display_1.drawDivider)(46));
45
+ if (result.actionsTaken.length === 0) {
46
+ console.log(chalk_1.default.green(`${data.name} is doing great!`));
47
+ console.log(chalk_1.default.gray('No care needed at the moment.'));
48
+ console.log('');
49
+ console.log(chalk_1.default.gray('Current status:'));
50
+ console.log(chalk_1.default.gray(` Hunger: ${data.stats.hunger}%`));
51
+ console.log(chalk_1.default.gray(` Happiness: ${data.stats.happiness}%`));
52
+ console.log(chalk_1.default.gray(` Cleanliness: ${data.stats.cleanliness}%`));
53
+ console.log(chalk_1.default.gray(` Health: ${data.stats.health}%`));
54
+ console.log(chalk_1.default.gray(` Energy: ${data.stats.energy}%`));
55
+ console.log('');
56
+ return;
57
+ }
58
+ // Show actions taken
59
+ console.log(chalk_1.default.cyan('Actions taken:'));
60
+ for (const action of result.actionsTaken) {
61
+ if (action.success) {
62
+ const statChange = action.statChanges[0];
63
+ if (statChange) {
64
+ console.log(chalk_1.default.green(` ✓ ${getActionMessage(action)} (${statChange.from} → ${statChange.to})`));
65
+ }
66
+ else {
67
+ console.log(chalk_1.default.green(` ✓ ${getActionMessage(action)}`));
68
+ }
69
+ }
70
+ else {
71
+ console.log(chalk_1.default.red(` ✗ ${getActionMessage(action)}`));
72
+ if (action.reason) {
73
+ console.log(chalk_1.default.gray(` ${action.reason}`));
74
+ }
75
+ }
76
+ }
77
+ console.log((0, display_1.drawDivider)(46));
78
+ // Show summary
79
+ const successfulActions = result.actionsTaken.filter((a) => a.success);
80
+ if (successfulActions.length > 0) {
81
+ console.log(chalk_1.default.green(`${data.name} feels much better! 🎉`));
82
+ }
83
+ // Show coins
84
+ console.log('');
85
+ console.log(chalk_1.default.yellow(`Coins: ${pet.getCoins()} 🪙`));
86
+ console.log('');
87
+ });
88
+ function getActionMessage(action) {
89
+ const petName = 'Sparky'; // Generic name, will be replaced with actual pet name in display
90
+ switch (action.action) {
91
+ case 'feed':
92
+ return `Fed ${petName} (${action.itemName})`;
93
+ case 'play':
94
+ return `Played with ${petName} (${action.itemName})`;
95
+ case 'clean':
96
+ return `Cleaned ${petName} (${action.itemName})`;
97
+ case 'heal':
98
+ return `Healed ${petName} (${action.itemName})`;
99
+ default:
100
+ return action.itemName;
101
+ }
102
+ }
103
+ //# sourceMappingURL=care.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"care.js","sourceRoot":"","sources":["../../src/commands/care.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const cleanCommand: Command;
3
+ //# sourceMappingURL=clean.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,eAAO,MAAM,YAAY,SAAuB,CAAC"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.cleanCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const inquirer_1 = __importDefault(require("inquirer"));
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const database_1 = require("../core/database");
12
+ const pet_1 = require("../core/pet");
13
+ const display_1 = require("../ui/display");
14
+ const ascii_art_1 = require("../ui/ascii-art");
15
+ const items_1 = require("../types/items");
16
+ exports.cleanCommand = new commander_1.Command('clean');
17
+ exports.cleanCommand.description('Clean your pet').action(async () => {
18
+ const db = new database_1.Database(path_1.default.join(process.cwd(), 'data', 'pet.json'));
19
+ if (!db.hasPet()) {
20
+ console.log(chalk_1.default.yellow("You don't have a pet yet!"));
21
+ console.log(chalk_1.default.gray('Use "pet init" to create one.'));
22
+ return;
23
+ }
24
+ const pet = await pet_1.Pet.loadOrCreate(db);
25
+ const data = pet.getData();
26
+ const inventory = pet.getInventory();
27
+ if (data.isSleeping) {
28
+ console.log(chalk_1.default.yellow(`${data.name} is sleeping! Wake them up first.`));
29
+ console.log(chalk_1.default.gray('Use "pet sleep" to wake them up.'));
30
+ console.log('');
31
+ return;
32
+ }
33
+ // Get cleaning items from inventory
34
+ const cleaningItems = inventory.getItemsByType(items_1.ItemType.CLEANING);
35
+ if (cleaningItems.length === 0) {
36
+ console.log('');
37
+ console.log((0, display_1.drawHeader)('NO SUPPLIES'));
38
+ console.log('');
39
+ console.log(chalk_1.default.green((0, ascii_art_1.getPetAscii)(data.species, data.mood, data.isSleeping)));
40
+ console.log('');
41
+ console.log(chalk_1.default.yellow("You don't have any cleaning supplies!"));
42
+ console.log(chalk_1.default.gray('Use "pet inventory" to see your items.'));
43
+ console.log(chalk_1.default.gray('Find items through gameplay or future shop features!'));
44
+ console.log('');
45
+ return;
46
+ }
47
+ // If only one cleaning item, use it directly
48
+ if (cleaningItems.length === 1) {
49
+ const itemId = cleaningItems[0].itemId;
50
+ const itemDef = (0, items_1.getItem)(itemId);
51
+ if (itemDef) {
52
+ useCleaningItem(pet, data, itemId, itemDef);
53
+ return;
54
+ }
55
+ }
56
+ // Let user choose which cleaning item to use
57
+ const choices = cleaningItems.map((item) => {
58
+ const itemDef = (0, items_1.getItem)(item.itemId);
59
+ return {
60
+ name: `${itemDef?.emoji || '🧼'} ${itemDef?.name} (x${item.quantity})`,
61
+ value: item.itemId,
62
+ };
63
+ });
64
+ const answers = await inquirer_1.default.prompt([
65
+ {
66
+ type: 'list',
67
+ name: 'itemId',
68
+ message: 'What would you like to use?',
69
+ choices,
70
+ },
71
+ ]);
72
+ const itemId = answers.itemId;
73
+ const itemDef = (0, items_1.getItem)(itemId);
74
+ if (itemDef) {
75
+ useCleaningItem(pet, data, itemId, itemDef);
76
+ }
77
+ });
78
+ function useCleaningItem(pet, data, itemId, itemDef) {
79
+ const result = pet.useItem(itemId);
80
+ console.log('');
81
+ console.log((0, display_1.drawHeader)('GROOMING TIME'));
82
+ console.log('');
83
+ console.log(chalk_1.default.cyan((0, ascii_art_1.getActionAscii)('clean', data.species)));
84
+ console.log('');
85
+ console.log((0, display_1.drawDivider)(42));
86
+ console.log(chalk_1.default.cyan(`${data.name} used the ${itemDef.name}! ${itemDef.emoji}`));
87
+ console.log(chalk_1.default.gray(itemDef.description));
88
+ console.log((0, display_1.drawDivider)(42));
89
+ if (result.success) {
90
+ console.log('');
91
+ const lines = (0, display_1.drawStatChanges)(result.statChanges);
92
+ console.log(lines.join('\n'));
93
+ if (result.levelUp) {
94
+ console.log('');
95
+ console.log(chalk_1.default.yellow.bold(`Level ${result.newLevel} reached! 🎉`));
96
+ }
97
+ console.log('');
98
+ console.log(chalk_1.default.gray(`XP: +${result.xpGained}`));
99
+ }
100
+ else {
101
+ console.log(chalk_1.default.yellow(result.message));
102
+ }
103
+ console.log('');
104
+ }
105
+ //# sourceMappingURL=clean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const feedCommand: Command;
3
+ //# sourceMappingURL=feed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../../src/commands/feed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,eAAO,MAAM,WAAW,SAAsB,CAAC"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.feedCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const inquirer_1 = __importDefault(require("inquirer"));
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const database_1 = require("../core/database");
12
+ const pet_1 = require("../core/pet");
13
+ const display_1 = require("../ui/display");
14
+ const ascii_art_1 = require("../ui/ascii-art");
15
+ const items_1 = require("../types/items");
16
+ exports.feedCommand = new commander_1.Command('feed');
17
+ exports.feedCommand.description('Feed your pet').action(async () => {
18
+ const db = new database_1.Database(path_1.default.join(process.cwd(), 'data', 'pet.json'));
19
+ if (!db.hasPet()) {
20
+ console.log(chalk_1.default.yellow("You don't have a pet yet!"));
21
+ console.log(chalk_1.default.gray('Use "pet init" to create one.'));
22
+ return;
23
+ }
24
+ const pet = await pet_1.Pet.loadOrCreate(db);
25
+ const data = pet.getData();
26
+ const inventory = pet.getInventory();
27
+ if (data.isSleeping) {
28
+ console.log(chalk_1.default.yellow(`${data.name} is sleeping! Wake them up first.`));
29
+ console.log(chalk_1.default.gray('Use "pet sleep" to wake them up.'));
30
+ console.log('');
31
+ return;
32
+ }
33
+ // Get food items from inventory
34
+ const foodItems = inventory.getItemsByType(items_1.ItemType.FOOD);
35
+ if (foodItems.length === 0) {
36
+ console.log('');
37
+ console.log((0, display_1.drawHeader)('PANTRY EMPTY'));
38
+ console.log('');
39
+ console.log(chalk_1.default.green((0, ascii_art_1.getPetAscii)(data.species, data.mood, data.isSleeping)));
40
+ console.log('');
41
+ console.log(chalk_1.default.yellow("You don't have any food!"));
42
+ console.log(chalk_1.default.gray('Use "pet inventory" to see your items.'));
43
+ console.log(chalk_1.default.gray('Find items through gameplay or future shop features!'));
44
+ console.log('');
45
+ return;
46
+ }
47
+ // If only one food item, use it directly
48
+ if (foodItems.length === 1) {
49
+ const itemId = foodItems[0].itemId;
50
+ const itemDef = (0, items_1.getItem)(itemId);
51
+ if (itemDef) {
52
+ useFoodItem(pet, data, itemId, itemDef);
53
+ return;
54
+ }
55
+ }
56
+ // Let user choose which food to use
57
+ const choices = foodItems.map((item) => {
58
+ const itemDef = (0, items_1.getItem)(item.itemId);
59
+ return {
60
+ name: `${itemDef?.emoji || '🍖'} ${itemDef?.name} (x${item.quantity})`,
61
+ value: item.itemId,
62
+ };
63
+ });
64
+ const answers = await inquirer_1.default.prompt([
65
+ {
66
+ type: 'list',
67
+ name: 'itemId',
68
+ message: 'What would you like to feed your pet?',
69
+ choices,
70
+ },
71
+ ]);
72
+ const itemId = answers.itemId;
73
+ const itemDef = (0, items_1.getItem)(itemId);
74
+ if (itemDef) {
75
+ useFoodItem(pet, data, itemId, itemDef);
76
+ }
77
+ });
78
+ function useFoodItem(pet, data, itemId, itemDef) {
79
+ const result = pet.useItem(itemId);
80
+ console.log('');
81
+ console.log((0, display_1.drawHeader)('FEEDING TIME'));
82
+ console.log('');
83
+ console.log(chalk_1.default.green((0, ascii_art_1.getActionAscii)('eat', data.species)));
84
+ console.log('');
85
+ console.log((0, display_1.drawDivider)(42));
86
+ console.log(chalk_1.default.cyan(`${data.name} enjoyed the ${itemDef.name}! ${itemDef.emoji}`));
87
+ console.log(chalk_1.default.gray(itemDef.description));
88
+ console.log((0, display_1.drawDivider)(42));
89
+ if (result.success) {
90
+ console.log('');
91
+ const lines = (0, display_1.drawStatChanges)(result.statChanges);
92
+ console.log(lines.join('\n'));
93
+ if (result.levelUp) {
94
+ console.log('');
95
+ console.log(chalk_1.default.yellow.bold(`Level ${result.newLevel} reached! 🎉`));
96
+ console.log(chalk_1.default.gray(`${data.name} is now a ${pet.getLevelTitle()} ${data.species}!`));
97
+ }
98
+ console.log('');
99
+ console.log(chalk_1.default.gray(`XP: +${result.xpGained}`));
100
+ }
101
+ else {
102
+ console.log(chalk_1.default.yellow(result.message));
103
+ }
104
+ console.log('');
105
+ }
106
+ //# sourceMappingURL=feed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feed.js","sourceRoot":"","sources":["../../src/commands/feed.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,wDAAgC;AAChC,kDAA0B;AAC1B,gDAAwB;AACxB,+CAA4C;AAC5C,qCAAkC;AAClC,2CAAyE;AACzE,+CAA8D;AAC9D,0CAAmD;AAEtC,QAAA,WAAW,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC,CAAC;AAE/C,mBAAW,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;IACzD,MAAM,EAAE,GAAG,IAAI,mBAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAEtE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,SAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;IAErC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,mCAAmC,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,gCAAgC;IAChC,MAAM,SAAS,GAAG,SAAS,CAAC,cAAc,CAAC,gBAAQ,CAAC,IAAI,CAAC,CAAC;IAE1D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,IAAA,oBAAU,EAAC,cAAc,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAA,uBAAW,EAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,yCAAyC;IACzC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACnC,MAAM,OAAO,GAAG,IAAA,eAAO,EAAC,MAAM,CAAC,CAAC;QAChC,IAAI,OAAO,EAAE,CAAC;YACZ,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,IAAA,eAAO,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,OAAO;YACL,IAAI,EAAE,GAAG,OAAO,EAAE,KAAK,IAAI,IAAI,IAAI,OAAO,EAAE,IAAI,MAAM,IAAI,CAAC,QAAQ,GAAG;YACtE,KAAK,EAAE,IAAI,CAAC,MAAM;SACnB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QACpC;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,uCAAuC;YAChD,OAAO;SACR;KACF,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAA,eAAO,EAAC,MAAM,CAAC,CAAC;IAChC,IAAI,OAAO,EAAE,CAAC;QACZ,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,SAAS,WAAW,CAAC,GAAQ,EAAE,IAAS,EAAE,MAAc,EAAE,OAAY;IACpE,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,IAAA,oBAAU,EAAC,cAAc,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAA,0BAAc,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,CAAC,GAAG,CAAC,IAAA,qBAAW,EAAC,EAAE,CAAC,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,gBAAgB,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,IAAA,qBAAW,EAAC,EAAE,CAAC,CAAC,CAAC;IAE7B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,KAAK,GAAG,IAAA,yBAAe,EAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE9B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,QAAQ,cAAc,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,aAAa,GAAG,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QAC3F,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const gitCommand: Command;
3
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/commands/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,eAAO,MAAM,UAAU,SAAqB,CAAC"}