cli-pet 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 (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +150 -0
  3. package/dist/art/animations.d.ts +4 -0
  4. package/dist/art/animations.d.ts.map +1 -0
  5. package/dist/art/animations.js +26 -0
  6. package/dist/art/animations.js.map +1 -0
  7. package/dist/art/ascii.d.ts +4 -0
  8. package/dist/art/ascii.d.ts.map +1 -0
  9. package/dist/art/ascii.js +291 -0
  10. package/dist/art/ascii.js.map +1 -0
  11. package/dist/art/colors.d.ts +26 -0
  12. package/dist/art/colors.d.ts.map +1 -0
  13. package/dist/art/colors.js +57 -0
  14. package/dist/art/colors.js.map +1 -0
  15. package/dist/commands/adopt.d.ts +2 -0
  16. package/dist/commands/adopt.d.ts.map +1 -0
  17. package/dist/commands/adopt.js +104 -0
  18. package/dist/commands/adopt.js.map +1 -0
  19. package/dist/commands/feed.d.ts +2 -0
  20. package/dist/commands/feed.d.ts.map +1 -0
  21. package/dist/commands/feed.js +61 -0
  22. package/dist/commands/feed.js.map +1 -0
  23. package/dist/commands/play.d.ts +2 -0
  24. package/dist/commands/play.d.ts.map +1 -0
  25. package/dist/commands/play.js +85 -0
  26. package/dist/commands/play.js.map +1 -0
  27. package/dist/commands/stats.d.ts +2 -0
  28. package/dist/commands/stats.d.ts.map +1 -0
  29. package/dist/commands/stats.js +64 -0
  30. package/dist/commands/stats.js.map +1 -0
  31. package/dist/commands/status.d.ts +2 -0
  32. package/dist/commands/status.d.ts.map +1 -0
  33. package/dist/commands/status.js +27 -0
  34. package/dist/commands/status.js.map +1 -0
  35. package/dist/commands/tips.d.ts +2 -0
  36. package/dist/commands/tips.d.ts.map +1 -0
  37. package/dist/commands/tips.js +87 -0
  38. package/dist/commands/tips.js.map +1 -0
  39. package/dist/github/activity.d.ts +3 -0
  40. package/dist/github/activity.d.ts.map +1 -0
  41. package/dist/github/activity.js +115 -0
  42. package/dist/github/activity.js.map +1 -0
  43. package/dist/github/analyzer.d.ts +5 -0
  44. package/dist/github/analyzer.d.ts.map +1 -0
  45. package/dist/github/analyzer.js +23 -0
  46. package/dist/github/analyzer.js.map +1 -0
  47. package/dist/index.d.ts +3 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +100 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/pet/engine.d.ts +8 -0
  52. package/dist/pet/engine.d.ts.map +1 -0
  53. package/dist/pet/engine.js +193 -0
  54. package/dist/pet/engine.js.map +1 -0
  55. package/dist/pet/persistence.d.ts +8 -0
  56. package/dist/pet/persistence.d.ts.map +1 -0
  57. package/dist/pet/persistence.js +28 -0
  58. package/dist/pet/persistence.js.map +1 -0
  59. package/dist/pet/types.d.ts +44 -0
  60. package/dist/pet/types.d.ts.map +1 -0
  61. package/dist/pet/types.js +15 -0
  62. package/dist/pet/types.js.map +1 -0
  63. package/dist/utils/config.d.ts +2 -0
  64. package/dist/utils/config.d.ts.map +1 -0
  65. package/dist/utils/config.js +33 -0
  66. package/dist/utils/config.js.map +1 -0
  67. package/dist/utils/display.d.ts +7 -0
  68. package/dist/utils/display.d.ts.map +1 -0
  69. package/dist/utils/display.js +83 -0
  70. package/dist/utils/display.js.map +1 -0
  71. package/package.json +55 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/github/activity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { GitHubActivity } from '../pet/types.js';
2
+ import { analyzeActivity } from '../pet/engine.js';
3
+ export { analyzeActivity };
4
+ export declare function summarizeActivity(activity: GitHubActivity): string;
5
+ //# sourceMappingURL=analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../src/github/analyzer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAkB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAqBlE"}
@@ -0,0 +1,23 @@
1
+ // GitHub activity analyzer — maps raw activity to pet stat changes
2
+ import { analyzeActivity } from '../pet/engine.js';
3
+ export { analyzeActivity };
4
+ export function summarizeActivity(activity) {
5
+ const parts = [];
6
+ if (activity.recentCommits > 0) {
7
+ parts.push(`${activity.recentCommits} commit(s)`);
8
+ }
9
+ if (activity.recentPRsMerged > 0) {
10
+ parts.push(`${activity.recentPRsMerged} PR(s) merged`);
11
+ }
12
+ if (activity.recentPRsReviewed > 0) {
13
+ parts.push(`${activity.recentPRsReviewed} review(s)`);
14
+ }
15
+ if (activity.streakDays > 0) {
16
+ parts.push(`${activity.streakDays}-day streak`);
17
+ }
18
+ if (parts.length === 0) {
19
+ return 'No recent activity found';
20
+ }
21
+ return parts.join(' • ');
22
+ }
23
+ //# sourceMappingURL=analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/github/analyzer.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAGnE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,MAAM,UAAU,iBAAiB,CAAC,QAAwB;IACxD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,QAAQ,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,aAAa,YAAY,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,QAAQ,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,eAAe,eAAe,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,QAAQ,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,iBAAiB,YAAY,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,UAAU,aAAa,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,0BAA0B,CAAC;IACpC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,100 @@
1
+ #!/usr/bin/env node
2
+ // cli-pet — A GitHub-powered virtual pet for your terminal 🐾
3
+ import { Command } from 'commander';
4
+ import chalk from 'chalk';
5
+ import { adoptCommand } from './commands/adopt.js';
6
+ import { statusCommand } from './commands/status.js';
7
+ import { feedCommand } from './commands/feed.js';
8
+ import { playCommand } from './commands/play.js';
9
+ import { statsCommand } from './commands/stats.js';
10
+ import { tipsCommand } from './commands/tips.js';
11
+ import { renderTitle, renderError } from './utils/display.js';
12
+ import { hasPet } from './pet/persistence.js';
13
+ const program = new Command();
14
+ program
15
+ .name('cli-pet')
16
+ .description('🐾 A GitHub-powered virtual pet that lives in your terminal')
17
+ .version('1.0.0');
18
+ program
19
+ .command('adopt')
20
+ .description('🏠 Adopt a new virtual pet')
21
+ .action(async () => {
22
+ try {
23
+ await adoptCommand();
24
+ }
25
+ catch (error) {
26
+ console.log(renderError(error.message));
27
+ }
28
+ });
29
+ program
30
+ .command('status')
31
+ .description('👀 Check on your pet')
32
+ .action(async () => {
33
+ try {
34
+ await statusCommand();
35
+ }
36
+ catch (error) {
37
+ console.log(renderError(error.message));
38
+ }
39
+ });
40
+ program
41
+ .command('feed')
42
+ .description('🍕 Feed your pet with GitHub activity')
43
+ .action(async () => {
44
+ try {
45
+ await feedCommand();
46
+ }
47
+ catch (error) {
48
+ console.log(renderError(error.message));
49
+ }
50
+ });
51
+ program
52
+ .command('play')
53
+ .description('🎮 Play a mini-game with your pet')
54
+ .action(async () => {
55
+ try {
56
+ await playCommand();
57
+ }
58
+ catch (error) {
59
+ console.log(renderError(error.message));
60
+ }
61
+ });
62
+ program
63
+ .command('stats')
64
+ .description('📊 View detailed GitHub stats & pet progress')
65
+ .action(async () => {
66
+ try {
67
+ await statsCommand();
68
+ }
69
+ catch (error) {
70
+ console.log(renderError(error.message));
71
+ }
72
+ });
73
+ program
74
+ .command('tips')
75
+ .description('🧠 Get coding tips from your pet')
76
+ .action(async () => {
77
+ try {
78
+ await tipsCommand();
79
+ }
80
+ catch (error) {
81
+ console.log(renderError(error.message));
82
+ }
83
+ });
84
+ // Default action: show status if pet exists, otherwise show help
85
+ program.action(async () => {
86
+ if (hasPet()) {
87
+ await statusCommand();
88
+ }
89
+ else {
90
+ console.log(renderTitle());
91
+ console.log();
92
+ console.log(chalk.bold(' 🐾 Welcome to cli-pet!'));
93
+ console.log(chalk.dim(' A GitHub-powered virtual pet for your terminal.\n'));
94
+ console.log(chalk.cyan(' Get started by adopting a pet:\n'));
95
+ console.log(chalk.white(' $ cli-pet adopt\n'));
96
+ program.help();
97
+ }
98
+ });
99
+ program.parse();
100
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { PetState, PetStats, PetMood, ActivityImpact, GitHubActivity } from './types.js';
2
+ export declare function calculateMood(stats: PetStats): PetMood;
3
+ export declare function applyDecay(pet: PetState): PetState;
4
+ export declare function applyActivity(pet: PetState, impact: ActivityImpact): PetState;
5
+ export declare function analyzeActivity(activity: GitHubActivity): ActivityImpact;
6
+ export declare function createNewPet(name: string, species: PetState['species']): PetState;
7
+ export declare function getPersonalityMessage(pet: PetState): string;
8
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/pet/engine.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAA+B,MAAM,YAAY,CAAC;AAEtH,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAWtD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ,CA0BlD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAG,QAAQ,CAqB7E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc,CA8DxE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,QAAQ,CAgBjF;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CA6C3D"}
@@ -0,0 +1,193 @@
1
+ // Pet state machine and stat calculations
2
+ import { DEFAULT_STATS, XP_PER_LEVEL } from './types.js';
3
+ export function calculateMood(stats) {
4
+ const avg = (stats.hunger + stats.health + stats.happiness + stats.energy) / 4;
5
+ if (stats.health <= 0 || stats.hunger <= 0)
6
+ return 'dead';
7
+ if (stats.health < 20)
8
+ return 'sick';
9
+ if (stats.hunger < 20)
10
+ return 'hungry';
11
+ if (stats.energy < 15)
12
+ return 'sleeping';
13
+ if (avg >= 85)
14
+ return 'ecstatic';
15
+ if (avg >= 60)
16
+ return 'happy';
17
+ if (avg >= 35)
18
+ return 'sad';
19
+ return 'sad';
20
+ }
21
+ export function applyDecay(pet) {
22
+ const now = new Date();
23
+ const lastFed = new Date(pet.lastFed);
24
+ const hoursSinceLastFed = Math.max(0, (now.getTime() - lastFed.getTime()) / (1000 * 60 * 60));
25
+ // Decay rates per hour
26
+ const hungerDecay = Math.min(hoursSinceLastFed * 2, 50);
27
+ const healthDecay = Math.min(hoursSinceLastFed * 0.5, 20);
28
+ const happinessDecay = Math.min(hoursSinceLastFed * 1.5, 40);
29
+ const energyDecay = Math.min(hoursSinceLastFed * 1, 30);
30
+ const newStats = {
31
+ hunger: clamp(pet.stats.hunger - hungerDecay),
32
+ health: clamp(pet.stats.health - healthDecay),
33
+ happiness: clamp(pet.stats.happiness - happinessDecay),
34
+ energy: clamp(pet.stats.energy - energyDecay),
35
+ };
36
+ const isAlive = newStats.health > 0 && newStats.hunger > 0;
37
+ return {
38
+ ...pet,
39
+ stats: newStats,
40
+ mood: isAlive ? calculateMood(newStats) : 'dead',
41
+ isAlive,
42
+ };
43
+ }
44
+ export function applyActivity(pet, impact) {
45
+ const newStats = {
46
+ hunger: clamp(pet.stats.hunger + impact.hungerChange),
47
+ health: clamp(pet.stats.health + impact.healthChange),
48
+ happiness: clamp(pet.stats.happiness + impact.happinessChange),
49
+ energy: clamp(pet.stats.energy + impact.energyChange),
50
+ };
51
+ const newXp = pet.xp + impact.xpGained;
52
+ const newLevel = pet.level + Math.floor(newXp / XP_PER_LEVEL);
53
+ const remainingXp = newXp % XP_PER_LEVEL;
54
+ return {
55
+ ...pet,
56
+ stats: newStats,
57
+ xp: remainingXp,
58
+ level: newLevel,
59
+ mood: calculateMood(newStats),
60
+ lastFed: new Date().toISOString(),
61
+ isAlive: true,
62
+ };
63
+ }
64
+ export function analyzeActivity(activity) {
65
+ const messages = [];
66
+ let hungerChange = 0;
67
+ let healthChange = 0;
68
+ let happinessChange = 0;
69
+ let energyChange = 0;
70
+ let xpGained = 0;
71
+ // Commits feed the pet
72
+ if (activity.recentCommits > 0) {
73
+ hungerChange += Math.min(activity.recentCommits * 8, 60);
74
+ xpGained += activity.recentCommits * 5;
75
+ if (activity.recentCommits >= 10) {
76
+ messages.push(`🔥 ${activity.recentCommits} commits! Your pet is STUFFED!`);
77
+ }
78
+ else if (activity.recentCommits >= 5) {
79
+ messages.push(`🍕 ${activity.recentCommits} commits — a good meal!`);
80
+ }
81
+ else {
82
+ messages.push(`🍞 ${activity.recentCommits} commit(s) — a light snack.`);
83
+ }
84
+ }
85
+ else {
86
+ messages.push(`😿 No recent commits... your pet is getting hungry!`);
87
+ }
88
+ // CI status affects health
89
+ if (activity.ciSuccessRate >= 0.9) {
90
+ healthChange += 30;
91
+ messages.push(`💚 CI is green! Your pet feels great!`);
92
+ }
93
+ else if (activity.ciSuccessRate >= 0.5) {
94
+ healthChange += 10;
95
+ messages.push(`🟡 CI is flaky — pet is a bit uneasy.`);
96
+ }
97
+ else if (activity.ciSuccessRate >= 0) {
98
+ healthChange -= 10;
99
+ messages.push(`🔴 CI is failing — your pet feels sick!`);
100
+ }
101
+ // PRs boost happiness
102
+ if (activity.recentPRsMerged > 0) {
103
+ happinessChange += activity.recentPRsMerged * 15;
104
+ xpGained += activity.recentPRsMerged * 20;
105
+ messages.push(`🎉 ${activity.recentPRsMerged} PR(s) merged! Pet is thrilled!`);
106
+ }
107
+ if (activity.recentPRsReviewed > 0) {
108
+ happinessChange += activity.recentPRsReviewed * 10;
109
+ xpGained += activity.recentPRsReviewed * 10;
110
+ messages.push(`👀 ${activity.recentPRsReviewed} review(s) done — pet loves teamwork!`);
111
+ }
112
+ // Streaks boost energy
113
+ if (activity.streakDays > 0) {
114
+ energyChange += Math.min(activity.streakDays * 5, 40);
115
+ xpGained += activity.streakDays * 3;
116
+ if (activity.streakDays >= 7) {
117
+ messages.push(`⚡ ${activity.streakDays}-day streak! Pet is SUPERCHARGED!`);
118
+ }
119
+ else if (activity.streakDays >= 3) {
120
+ messages.push(`✨ ${activity.streakDays}-day streak — pet is energized!`);
121
+ }
122
+ else {
123
+ messages.push(`💪 ${activity.streakDays}-day streak — keep it up!`);
124
+ }
125
+ }
126
+ return { hungerChange, healthChange, happinessChange, energyChange, xpGained, messages };
127
+ }
128
+ export function createNewPet(name, species) {
129
+ return {
130
+ name,
131
+ species,
132
+ stats: { ...DEFAULT_STATS },
133
+ mood: 'happy',
134
+ level: 1,
135
+ xp: 0,
136
+ birthDate: new Date().toISOString(),
137
+ lastFed: new Date().toISOString(),
138
+ lastPlayed: new Date().toISOString(),
139
+ totalCommits: 0,
140
+ totalPRs: 0,
141
+ streak: 0,
142
+ isAlive: true,
143
+ };
144
+ }
145
+ export function getPersonalityMessage(pet) {
146
+ const { mood, name, stats, streak } = pet;
147
+ const messages = {
148
+ ecstatic: [
149
+ `${name} is on top of the world! 🌟`,
150
+ `${name} can't stop purring with joy! ✨`,
151
+ `${name} is doing a happy dance! 💃`,
152
+ ],
153
+ happy: [
154
+ `${name} wags their tail at you! 🐾`,
155
+ `${name} looks content and well-fed.`,
156
+ `${name} gives you a grateful look. 😊`,
157
+ ],
158
+ sad: [
159
+ `${name} looks at you with big eyes... 🥺`,
160
+ `${name} could use some attention.`,
161
+ `${name} misses your commits! 📝`,
162
+ ],
163
+ hungry: [
164
+ `${name}'s tummy is rumbling! 🍕`,
165
+ `${name} stares at you expectantly...`,
166
+ `Feed ${name} some commits! 🍞`,
167
+ ],
168
+ sick: [
169
+ `${name} doesn't feel well... fix those builds! 🏥`,
170
+ `${name} needs green CI to recover! 💊`,
171
+ `Poor ${name} is under the weather. 🤒`,
172
+ ],
173
+ sleeping: [
174
+ `Shhh... ${name} is taking a nap. 😴`,
175
+ `${name} is recharging. Come back later! 💤`,
176
+ `${name} fell asleep waiting for activity. 🌙`,
177
+ ],
178
+ dead: [
179
+ `${name} has fainted! Quick, make some commits! 😱`,
180
+ `${name} needs urgent care! Push some code! 🚨`,
181
+ ],
182
+ playing: [
183
+ `${name} is having fun! 🎮`,
184
+ `${name} bounces around playfully! 🎾`,
185
+ ],
186
+ };
187
+ const pool = messages[mood] || messages['happy'];
188
+ return pool[Math.floor(Math.random() * pool.length)];
189
+ }
190
+ function clamp(value, min = 0, max = 100) {
191
+ return Math.max(min, Math.min(max, Math.round(value)));
192
+ }
193
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/pet/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { PetState } from './types.js';
2
+ export declare function savePet(pet: PetState): void;
3
+ export declare function loadPet(): PetState | null;
4
+ export declare function deletePet(): void;
5
+ export declare function hasPet(): boolean;
6
+ export declare function saveGitHubUsername(username: string): void;
7
+ export declare function getGitHubUsername(): string | null;
8
+ //# sourceMappingURL=persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/pet/persistence.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAUtC,wBAAgB,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAE3C;AAED,wBAAgB,OAAO,IAAI,QAAQ,GAAG,IAAI,CAEzC;AAED,wBAAgB,SAAS,IAAI,IAAI,CAEhC;AAED,wBAAgB,MAAM,IAAI,OAAO,CAEhC;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEzD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAEjD"}
@@ -0,0 +1,28 @@
1
+ // Persistence layer — save/load pet state
2
+ import Conf from 'conf';
3
+ const config = new Conf({
4
+ projectName: 'cli-pet',
5
+ defaults: {
6
+ pet: null,
7
+ githubUsername: null,
8
+ },
9
+ });
10
+ export function savePet(pet) {
11
+ config.set('pet', pet);
12
+ }
13
+ export function loadPet() {
14
+ return config.get('pet');
15
+ }
16
+ export function deletePet() {
17
+ config.set('pet', null);
18
+ }
19
+ export function hasPet() {
20
+ return config.get('pet') !== null;
21
+ }
22
+ export function saveGitHubUsername(username) {
23
+ config.set('githubUsername', username);
24
+ }
25
+ export function getGitHubUsername() {
26
+ return config.get('githubUsername');
27
+ }
28
+ //# sourceMappingURL=persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/pet/persistence.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAE1C,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,MAAM,MAAM,GAAG,IAAI,IAAI,CAA0D;IAC/E,WAAW,EAAE,SAAS;IACtB,QAAQ,EAAE;QACR,GAAG,EAAE,IAAI;QACT,cAAc,EAAE,IAAI;KACrB;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,OAAO,CAAC,GAAa;IACnC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAoB,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAkB,CAAC;AACvD,CAAC"}
@@ -0,0 +1,44 @@
1
+ export type PetSpecies = 'cat' | 'dog' | 'dragon' | 'octocat';
2
+ export type PetMood = 'happy' | 'sad' | 'hungry' | 'sick' | 'sleeping' | 'playing' | 'dead' | 'ecstatic';
3
+ export interface PetStats {
4
+ hunger: number;
5
+ health: number;
6
+ happiness: number;
7
+ energy: number;
8
+ }
9
+ export interface PetState {
10
+ name: string;
11
+ species: PetSpecies;
12
+ stats: PetStats;
13
+ mood: PetMood;
14
+ level: number;
15
+ xp: number;
16
+ birthDate: string;
17
+ lastFed: string;
18
+ lastPlayed: string;
19
+ totalCommits: number;
20
+ totalPRs: number;
21
+ streak: number;
22
+ isAlive: boolean;
23
+ }
24
+ export interface GitHubActivity {
25
+ recentCommits: number;
26
+ recentPRsMerged: number;
27
+ recentPRsReviewed: number;
28
+ ciSuccessRate: number;
29
+ streakDays: number;
30
+ totalCommitsToday: number;
31
+ lastActivityDate: string;
32
+ }
33
+ export interface ActivityImpact {
34
+ hungerChange: number;
35
+ healthChange: number;
36
+ happinessChange: number;
37
+ energyChange: number;
38
+ xpGained: number;
39
+ messages: string[];
40
+ }
41
+ export declare const DEFAULT_STATS: PetStats;
42
+ export declare const XP_PER_LEVEL = 100;
43
+ export declare const SPECIES_NAMES: Record<PetSpecies, string>;
44
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/pet/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE9D,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;AAEzG,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,CAAC;IACpB,KAAK,EAAE,QAAQ,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,EAAE,QAK3B,CAAC;AAEF,eAAO,MAAM,YAAY,MAAM,CAAC;AAEhC,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAKpD,CAAC"}
@@ -0,0 +1,15 @@
1
+ // Pet type definitions and interfaces
2
+ export const DEFAULT_STATS = {
3
+ hunger: 50,
4
+ health: 70,
5
+ happiness: 60,
6
+ energy: 60,
7
+ };
8
+ export const XP_PER_LEVEL = 100;
9
+ export const SPECIES_NAMES = {
10
+ cat: '🐱 Cat',
11
+ dog: '🐶 Dog',
12
+ dragon: '🐉 Dragon',
13
+ octocat: '🐙 Octocat',
14
+ };
15
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/pet/types.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAgDtC,MAAM,CAAC,MAAM,aAAa,GAAa;IACrC,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,EAAE;IACV,SAAS,EAAE,EAAE;IACb,MAAM,EAAE,EAAE;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;AAEhC,MAAM,CAAC,MAAM,aAAa,GAA+B;IACvD,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;CACtB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function resolveGitHubUsername(): string | null;
2
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAKA,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CA2BrD"}
@@ -0,0 +1,33 @@
1
+ // User config management
2
+ import { getGitHubUsername, saveGitHubUsername } from '../pet/persistence.js';
3
+ import { execSync } from 'child_process';
4
+ export function resolveGitHubUsername() {
5
+ // Check saved config first
6
+ const saved = getGitHubUsername();
7
+ if (saved)
8
+ return saved;
9
+ // Try gh CLI
10
+ try {
11
+ const username = execSync('gh api user --jq .login', {
12
+ encoding: 'utf8',
13
+ stdio: ['pipe', 'pipe', 'pipe'],
14
+ }).trim();
15
+ if (username) {
16
+ saveGitHubUsername(username);
17
+ return username;
18
+ }
19
+ }
20
+ catch { }
21
+ // Try git config
22
+ try {
23
+ const username = execSync('git config --global user.name', {
24
+ encoding: 'utf8',
25
+ stdio: ['pipe', 'pipe', 'pipe'],
26
+ }).trim();
27
+ if (username)
28
+ return username;
29
+ }
30
+ catch { }
31
+ return null;
32
+ }
33
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,yBAAyB;AAEzB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,UAAU,qBAAqB;IACnC,2BAA2B;IAC3B,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;IAClC,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IAExB,aAAa;IACb,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,yBAAyB,EAAE;YACnD,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,QAAQ,EAAE,CAAC;YACb,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAC7B,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,iBAAiB;IACjB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,+BAA+B,EAAE;YACzD,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { PetState } from '../pet/types.js';
2
+ export declare function renderTitle(): string;
3
+ export declare function renderPetStatus(pet: PetState): string;
4
+ export declare function renderActivityReport(messages: string[]): string;
5
+ export declare function renderError(message: string): string;
6
+ export declare function renderSuccess(message: string): string;
7
+ //# sourceMappingURL=display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/utils/display.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAK3C,wBAAgB,WAAW,IAAI,MAAM,CAOpC;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CA4CrD;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAU/D;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMrD"}
@@ -0,0 +1,83 @@
1
+ // Display helpers for terminal rendering
2
+ import chalk from 'chalk';
3
+ import boxen from 'boxen';
4
+ import figlet from 'figlet';
5
+ import { getAsciiArt } from '../art/ascii.js';
6
+ import { colorizeArt, colorizedBar, colors } from '../art/colors.js';
7
+ import { getPersonalityMessage } from '../pet/engine.js';
8
+ export function renderTitle() {
9
+ try {
10
+ const title = figlet.textSync('cli-pet', { font: 'Small' });
11
+ return colors.title(title);
12
+ }
13
+ catch {
14
+ return colors.title('✦ cli-pet ✦');
15
+ }
16
+ }
17
+ export function renderPetStatus(pet) {
18
+ const art = getAsciiArt(pet.species, pet.mood);
19
+ const coloredArt = colorizeArt(art, pet.mood);
20
+ const nameDisplay = colors.highlight(`${pet.name} the ${pet.species}`);
21
+ const levelDisplay = colors.level(`Lv.${pet.level}`);
22
+ const xpDisplay = colors.xp(`(${pet.xp}/100 XP)`);
23
+ const moodDisplay = chalk.bold(`Mood: ${pet.mood.toUpperCase()}`);
24
+ const aliveDisplay = pet.isAlive ? '' : chalk.bgRed.white(' ⚠ CRITICAL ');
25
+ const ageMs = Date.now() - new Date(pet.birthDate).getTime();
26
+ const ageDays = Math.floor(ageMs / (1000 * 60 * 60 * 24));
27
+ const ageDisplay = colors.muted(`Age: ${ageDays} day(s)`);
28
+ const bars = [
29
+ colorizedBar('Hunger', pet.stats.hunger, '🍕'),
30
+ colorizedBar('Health', pet.stats.health, '❤️ '),
31
+ colorizedBar('Happiness', pet.stats.happiness, '😊'),
32
+ colorizedBar('Energy', pet.stats.energy, '⚡'),
33
+ ].join('\n');
34
+ const message = getPersonalityMessage(pet);
35
+ const content = [
36
+ `${nameDisplay} ${levelDisplay} ${xpDisplay} ${aliveDisplay}`,
37
+ ageDisplay,
38
+ '',
39
+ coloredArt,
40
+ '',
41
+ moodDisplay,
42
+ '',
43
+ bars,
44
+ '',
45
+ colors.info(`💬 "${message}"`),
46
+ ].join('\n');
47
+ return boxen(content, {
48
+ padding: 1,
49
+ margin: 0,
50
+ borderStyle: 'round',
51
+ borderColor: pet.isAlive ? 'green' : 'red',
52
+ title: '🐾 cli-pet',
53
+ titleAlignment: 'center',
54
+ });
55
+ }
56
+ export function renderActivityReport(messages) {
57
+ const content = messages.map((m) => ` ${m}`).join('\n');
58
+ return boxen(content, {
59
+ padding: 1,
60
+ margin: { top: 1, bottom: 0, left: 0, right: 0 },
61
+ borderStyle: 'round',
62
+ borderColor: 'cyan',
63
+ title: '📊 Activity Report',
64
+ titleAlignment: 'center',
65
+ });
66
+ }
67
+ export function renderError(message) {
68
+ return boxen(chalk.red(`❌ ${message}`), {
69
+ padding: 1,
70
+ borderStyle: 'round',
71
+ borderColor: 'red',
72
+ title: '⚠ Error',
73
+ titleAlignment: 'center',
74
+ });
75
+ }
76
+ export function renderSuccess(message) {
77
+ return boxen(chalk.green(`✅ ${message}`), {
78
+ padding: 1,
79
+ borderStyle: 'round',
80
+ borderColor: 'green',
81
+ });
82
+ }
83
+ //# sourceMappingURL=display.js.map