claude-minipet 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -103,18 +103,42 @@ claude-minipet redeem XXXX-XXXX-XXXX
103
103
  - **🎨 像素画渲染** — Unicode 半块字符 + ANSI 24-bit 真彩色
104
104
  - **💫 多帧动画** — 眨眼、进食、升级、进化等动态效果
105
105
  - **☁️ 云端同步** — 邮箱登录,数据自动同步,跨设备使用
106
+ - **💬 宠物气泡** — 实时语音气泡,显示工作状态、评语、彩蛋
107
+ - **🧠 AI 感知** — 新会话自动识别宠物命令,说"喂宠物"即可执行
108
+
109
+ ## 宠物气泡
110
+
111
+ 状态栏底部始终显示一个实时气泡,宠物会根据当前状态"说话":
112
+
113
+ ```
114
+ ╭────────────────────────────────────────────────╮
115
+ │ >> 疯狂Coding中... [3m25s] │ ← Claude 工作中
116
+ ╰────────────────────────────────────────────────╯
117
+
118
+ ╭────────────────────────────────────────────────╮
119
+ │ [ok] 任务完成了! (用时 5分12秒) │ ← Claude 停止时
120
+ ╰────────────────────────────────────────────────╯
121
+ ```
122
+
123
+ 宠物还会根据你的编码行为吐槽或鼓励:
124
+ - 只 commit 不写测试 → "主人又在裸奔了..."
125
+ - 连续报错 → "又炸了...宠物捂脸"
126
+ - 深夜编码 → "都这么晚了,主人该休息了"
127
+ - 长时间离开后回来 → "主人回来啦!宠物想你了~"
106
128
 
107
129
  ## 经验获取
108
130
 
109
- | 事件 | 经验值 |
110
- |------|--------|
111
- | 发送消息 | +2 |
112
- | Bash 命令 | +3 |
113
- | 编辑/写入文件 | +5 |
114
- | 读取文件 | +1 |
115
- | 测试通过 | +10 |
116
- | Git commit | +15 |
117
- | 创建 PR | +20 |
131
+ | 事件 | 基础经验 | 内容加成 |
132
+ |------|---------|---------|
133
+ | 发送消息 | +3 | +1/100字符 |
134
+ | Bash 命令 | +5 | +1/100字符 |
135
+ | 编辑/写入文件 | +8 | +1/100字符 |
136
+ | 读取文件 | +2 | +1/100字符 |
137
+ | 测试通过 | +15 | +1/100字符 |
138
+ | Git commit | +20 | +1/100字符 |
139
+ | 创建 PR | +30 | +1/100字符 |
140
+
141
+ 内容加成上限 +50,大文件操作获得更多经验。
118
142
 
119
143
  ## 种族
120
144
 
@@ -3,6 +3,7 @@ import { join } from 'node:path';
3
3
  import { homedir } from 'node:os';
4
4
  const CLAUDE_DIR = join(homedir(), '.claude');
5
5
  const SETTINGS_FILE = join(CLAUDE_DIR, 'settings.json');
6
+ const CLAUDE_MD = join(CLAUDE_DIR, 'CLAUDE.md');
6
7
  /** Install hooks and status line config into Claude Code settings */
7
8
  export function installHooks() {
8
9
  if (!existsSync(CLAUDE_DIR)) {
@@ -55,6 +56,59 @@ export function installHooks() {
55
56
  };
56
57
  // Write settings
57
58
  writeFileSync(SETTINGS_FILE, JSON.stringify(settings, null, 2), 'utf-8');
59
+ // Install CLAUDE.md pet knowledge
60
+ installClaudeMd();
61
+ }
62
+ const MINIPET_MARKER_START = '<!-- claude-minipet-start -->';
63
+ const MINIPET_MARKER_END = '<!-- claude-minipet-end -->';
64
+ const MINIPET_KNOWLEDGE = `${MINIPET_MARKER_START}
65
+ ## Claude MiniPet (虚拟宠物)
66
+
67
+ 用户安装了 claude-minipet 终端虚拟宠物。当用户提到"宠物"、"喂食"、"摸摸"、"升级"等相关话题时,你应该知道:
68
+
69
+ - \`claude-minipet status\` — 查看宠物状态(等级/经验/心情/饱食/亲密度)
70
+ - \`claude-minipet feed\` — 喂食宠物(饱食度+30)
71
+ - \`claude-minipet pat\` — 摸摸宠物(心情+10,亲密度+2)
72
+ - \`claude-minipet rename <名字>\` — 重命名宠物
73
+ - \`claude-minipet sync\` — 同步宠物数据到云端
74
+ - \`claude-minipet redeem <兑换码>\` — 使用兑换码获取新宠物
75
+
76
+ 宠物会在你编码时自动获取经验升级,状态栏实时显示在终端底部。当用户说"喂宠物"就执行 feed,说"看看宠物"就执行 status。
77
+ ${MINIPET_MARKER_END}`;
78
+ /** Install pet knowledge into global CLAUDE.md */
79
+ function installClaudeMd() {
80
+ let content = '';
81
+ if (existsSync(CLAUDE_MD)) {
82
+ content = readFileSync(CLAUDE_MD, 'utf-8');
83
+ }
84
+ // Already installed?
85
+ if (content.includes(MINIPET_MARKER_START)) {
86
+ // Replace existing block
87
+ const re = new RegExp(MINIPET_MARKER_START.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') +
88
+ '[\\s\\S]*?' +
89
+ MINIPET_MARKER_END.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
90
+ content = content.replace(re, MINIPET_KNOWLEDGE);
91
+ }
92
+ else {
93
+ // Append
94
+ content = content.trimEnd() + '\n\n' + MINIPET_KNOWLEDGE + '\n';
95
+ }
96
+ writeFileSync(CLAUDE_MD, content, 'utf-8');
97
+ }
98
+ /** Remove pet knowledge from global CLAUDE.md */
99
+ function uninstallClaudeMd() {
100
+ if (!existsSync(CLAUDE_MD))
101
+ return;
102
+ let content = readFileSync(CLAUDE_MD, 'utf-8');
103
+ if (!content.includes(MINIPET_MARKER_START))
104
+ return;
105
+ const re = new RegExp('\\n*' +
106
+ MINIPET_MARKER_START.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') +
107
+ '[\\s\\S]*?' +
108
+ MINIPET_MARKER_END.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') +
109
+ '\\n*');
110
+ content = content.replace(re, '\n');
111
+ writeFileSync(CLAUDE_MD, content, 'utf-8');
58
112
  }
59
113
  /** Remove hooks from Claude Code settings */
60
114
  export function uninstallHooks() {
@@ -85,5 +139,7 @@ export function uninstallHooks() {
85
139
  }
86
140
  }
87
141
  writeFileSync(SETTINGS_FILE, JSON.stringify(settings, null, 2), 'utf-8');
142
+ // Remove CLAUDE.md pet knowledge
143
+ uninstallClaudeMd();
88
144
  }
89
145
  //# sourceMappingURL=install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { PetState, HookInput } from './types.js';
2
+ /** Generate a code comment based on stats */
3
+ export declare function generateCodeComment(state: PetState, input: HookInput): string | null;
4
+ export interface MoodReaction {
5
+ moodDelta: number;
6
+ message: string | null;
7
+ anim: 'idle' | 'exp' | 'feed' | 'pat' | 'levelup' | 'evolve' | 'hungry' | 'sad' | null;
8
+ }
9
+ /** Analyze tool response for success/failure signals */
10
+ export declare function reactToCodeQuality(state: PetState, input: HookInput): MoodReaction;
11
+ /** Check for easter egg triggers */
12
+ export declare function checkEasterEgg(state: PetState, input: HookInput): string | null;
@@ -0,0 +1,175 @@
1
+ /** Minimum interval between comments (5 minutes) */
2
+ const COMMENT_COOLDOWN_MS = 5 * 60 * 1000;
3
+ /** Check if comment cooldown has passed */
4
+ function canComment(state) {
5
+ if (!state.lastComment)
6
+ return true;
7
+ return Date.now() - new Date(state.lastComment).getTime() >= COMMENT_COOLDOWN_MS;
8
+ }
9
+ /** Mark comment as sent */
10
+ function markCommented(state) {
11
+ state.lastComment = new Date().toISOString();
12
+ }
13
+ const CODE_COMMENTS = [
14
+ // No tests
15
+ {
16
+ condition: (s) => s.stats.totalCommits > 5 && s.stats.totalTests === 0,
17
+ messages: [
18
+ '主人又在裸奔了...一个测试都没写 ~',
19
+ '提交了这么多代码,测试呢?宠物有点慌...',
20
+ 'commit 了但没 test,主人胆子真大!',
21
+ ],
22
+ },
23
+ // Write a lot but rarely read
24
+ {
25
+ condition: (s) => s.stats.totalEdits > 20 && s.stats.totalReads < s.stats.totalEdits * 0.3,
26
+ messages: [
27
+ '主人写代码不看文档的吗?',
28
+ '写得比看得多好多...主人是凭感觉编程吗?',
29
+ '建议主人偶尔也 Read 一下代码哦~',
30
+ ],
31
+ },
32
+ // Consecutive failures
33
+ {
34
+ condition: (s) => (s.recentFailures ?? 0) >= 3,
35
+ messages: [
36
+ '又炸了...宠物捂脸 🫣',
37
+ '连续报错了!主人要不要歇一会?',
38
+ '错误连连...宠物默默递上咖啡 ~',
39
+ '主人别急,bug 总会修好的!',
40
+ ],
41
+ },
42
+ // Git commit spree
43
+ {
44
+ condition: (s) => s.stats.totalCommits > 0 && s.stats.totalCommits % 10 === 0,
45
+ messages: [
46
+ `哇,已经提交 ${0} 次了!主人好高产!`, // placeholder, replaced at runtime
47
+ '又一个 commit!主人今天状态不错~',
48
+ ],
49
+ },
50
+ // High activity
51
+ {
52
+ condition: (s) => s.stats.totalEdits + s.stats.totalBash > 100,
53
+ messages: [
54
+ '主人今天好肝啊...注意身体哦!',
55
+ '产出爆表!宠物为你骄傲 💪',
56
+ ],
57
+ },
58
+ // Healthy balance
59
+ {
60
+ condition: (s) => s.stats.totalTests > 10 && s.stats.totalCommits > 5,
61
+ messages: [
62
+ '有提交有测试,主人是靠谱的工程师!',
63
+ '测试覆盖不错!宠物心情很好~',
64
+ ],
65
+ },
66
+ ];
67
+ /** Pick a random element */
68
+ function pick(arr) {
69
+ return arr[Math.floor(Math.random() * arr.length)];
70
+ }
71
+ /** Generate a code comment based on stats */
72
+ export function generateCodeComment(state, input) {
73
+ if (!canComment(state))
74
+ return null;
75
+ // Shuffle and try rules
76
+ const shuffled = [...CODE_COMMENTS].sort(() => Math.random() - 0.5);
77
+ for (const rule of shuffled) {
78
+ if (rule.condition(state, input)) {
79
+ markCommented(state);
80
+ let msg = pick(rule.messages);
81
+ // Replace placeholder for commit count
82
+ msg = msg.replace('${0}', String(state.stats.totalCommits));
83
+ return `🐾 ${state.name}: ${msg}`;
84
+ }
85
+ }
86
+ return null;
87
+ }
88
+ /** Analyze tool response for success/failure signals */
89
+ export function reactToCodeQuality(state, input) {
90
+ if (input.hook_event_name !== 'PostToolUse' || !input.tool_response) {
91
+ return { moodDelta: 0, message: null, anim: null };
92
+ }
93
+ const resp = input.tool_response.toLowerCase();
94
+ const toolName = (input.tool_name ?? '').toLowerCase();
95
+ // Test passed
96
+ if (toolName === 'bash' && (resp.includes('passed') || resp.includes('pass') || resp.includes('✓'))) {
97
+ if (resp.includes('test') || resp.includes('vitest') || resp.includes('jest') || resp.includes('pytest')) {
98
+ state.recentFailures = 0;
99
+ return { moodDelta: 5, message: null, anim: 'pat' };
100
+ }
101
+ }
102
+ // Build/command failure
103
+ if (toolName === 'bash') {
104
+ const isError = resp.includes('error') || resp.includes('failed') || resp.includes('fail') ||
105
+ resp.includes('exception') || resp.includes('exit code 1') || resp.includes('command not found');
106
+ const isWarning = resp.includes('warning') || resp.includes('warn');
107
+ if (isError) {
108
+ state.recentFailures = (state.recentFailures ?? 0) + 1;
109
+ const delta = state.recentFailures >= 3 ? -5 : -2;
110
+ return { moodDelta: delta, message: null, anim: state.recentFailures >= 3 ? 'sad' : null };
111
+ }
112
+ if (isWarning) {
113
+ return { moodDelta: -1, message: null, anim: null };
114
+ }
115
+ // Success — reset failure counter
116
+ state.recentFailures = 0;
117
+ }
118
+ return { moodDelta: 0, message: null, anim: null };
119
+ }
120
+ // ─── 4. Easter eggs (time/behavior based) ───
121
+ /** Check for easter egg triggers */
122
+ export function checkEasterEgg(state, input) {
123
+ if (!canComment(state))
124
+ return null;
125
+ const hour = new Date().getHours();
126
+ const rand = Math.random();
127
+ // Late night coding (23:00 - 4:00)
128
+ if (hour >= 23 || hour < 4) {
129
+ if (rand < 0.3) {
130
+ markCommented(state);
131
+ return pick([
132
+ `🐾 ${state.name}: 都这么晚了,主人该休息了 💤`,
133
+ `🐾 ${state.name}: 宠物好困...主人还不睡吗?`,
134
+ `🐾 ${state.name}: 深夜写代码,bug 会变多的哦...`,
135
+ `🐾 ${state.name}: *打哈欠* 主人晚安~`,
136
+ ]);
137
+ }
138
+ }
139
+ // Early morning (5:00 - 7:00)
140
+ if (hour >= 5 && hour < 7) {
141
+ if (rand < 0.3) {
142
+ markCommented(state);
143
+ return pick([
144
+ `🐾 ${state.name}: 主人起得好早!今天也要加油~`,
145
+ `🐾 ${state.name}: 早起的程序员有 bug 修...不对`,
146
+ ]);
147
+ }
148
+ }
149
+ // Back after long idle (> 2 hours)
150
+ if (state.lastActivityTime) {
151
+ const idleMs = Date.now() - new Date(state.lastActivityTime).getTime();
152
+ if (idleMs > 2 * 60 * 60 * 1000) {
153
+ markCommented(state);
154
+ return pick([
155
+ `🐾 ${state.name}: 主人回来啦!宠物想你了~`,
156
+ `🐾 ${state.name}: 好久不见!宠物等了你好久~`,
157
+ `🐾 ${state.name}: 欢迎回来!准备继续写代码了吗?`,
158
+ ]);
159
+ }
160
+ }
161
+ // Random daily chat (2% chance per hook)
162
+ if (rand < 0.02) {
163
+ markCommented(state);
164
+ return pick([
165
+ `🐾 ${state.name}: 主人写的代码真好看~`,
166
+ `🐾 ${state.name}: 宠物觉得这个函数很优雅!`,
167
+ `🐾 ${state.name}: *蹭蹭* 继续加油!`,
168
+ `🐾 ${state.name}: 宠物在认真学习主人的代码呢~`,
169
+ `🐾 ${state.name}: 据说好的变量命名能延年益寿哦`,
170
+ `🐾 ${state.name}: 主人知道吗?第一个 bug 是一只真的虫子 bug`,
171
+ ]);
172
+ }
173
+ return null;
174
+ }
175
+ //# sourceMappingURL=comments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comments.js","sourceRoot":"","sources":["../../src/core/comments.ts"],"names":[],"mappings":"AAEA,oDAAoD;AACpD,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1C,2CAA2C;AAC3C,SAAS,UAAU,CAAC,KAAe;IACjC,IAAI,CAAC,KAAK,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,mBAAmB,CAAC;AACnF,CAAC;AAED,2BAA2B;AAC3B,SAAS,aAAa,CAAC,KAAe;IACpC,KAAK,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAC/C,CAAC;AASD,MAAM,aAAa,GAAkB;IACnC,WAAW;IACX;QACE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC;QACtE,QAAQ,EAAE;YACR,qBAAqB;YACrB,uBAAuB;YACvB,yBAAyB;SAC1B;KACF;IACD,8BAA8B;IAC9B;QACE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG;QAC1F,QAAQ,EAAE;YACR,cAAc;YACd,uBAAuB;YACvB,qBAAqB;SACtB;KACF;IACD,uBAAuB;IACvB;QACE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,IAAI,CAAC;QAC9C,QAAQ,EAAE;YACR,eAAe;YACf,iBAAiB;YACjB,mBAAmB;YACnB,iBAAiB;SAClB;KACF;IACD,mBAAmB;IACnB;QACE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,KAAK,CAAC;QAC7E,QAAQ,EAAE;YACR,UAAU,CAAC,YAAY,EAAG,mCAAmC;YAC7D,sBAAsB;SACvB;KACF;IACD,gBAAgB;IAChB;QACE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG;QAC9D,QAAQ,EAAE;YACR,kBAAkB;YAClB,gBAAgB;SACjB;KACF;IACD,kBAAkB;IAClB;QACE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC;QACrE,QAAQ,EAAE;YACR,mBAAmB;YACnB,gBAAgB;SACjB;KACF;CACF,CAAC;AAEF,4BAA4B;AAC5B,SAAS,IAAI,CAAI,GAAQ;IACvB,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,mBAAmB,CAAC,KAAe,EAAE,KAAgB;IACnE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,wBAAwB;IACxB,MAAM,QAAQ,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IACpE,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YACjC,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,uCAAuC;YACvC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;YAC5D,OAAO,MAAM,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAUD,wDAAwD;AACxD,MAAM,UAAU,kBAAkB,CAAC,KAAe,EAAE,KAAgB;IAClE,IAAI,KAAK,CAAC,eAAe,KAAK,aAAa,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACpE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACrD,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAEvD,cAAc;IACd,IAAI,QAAQ,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACpG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzG,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;YACzB,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACtD,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACxF,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;QACnG,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEpE,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,cAAc,GAAG,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7F,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACtD,CAAC;QACD,kCAAkC;QAClC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACrD,CAAC;AAED,+CAA+C;AAE/C,oCAAoC;AACpC,MAAM,UAAU,cAAc,CAAC,KAAe,EAAE,KAAgB;IAC9D,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAE3B,mCAAmC;IACnC,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QAC3B,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;YACf,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC;gBACV,MAAM,KAAK,CAAC,IAAI,mBAAmB;gBACnC,MAAM,KAAK,CAAC,IAAI,kBAAkB;gBAClC,MAAM,KAAK,CAAC,IAAI,sBAAsB;gBACtC,MAAM,KAAK,CAAC,IAAI,eAAe;aAChC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QAC1B,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;YACf,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC;gBACV,MAAM,KAAK,CAAC,IAAI,kBAAkB;gBAClC,MAAM,KAAK,CAAC,IAAI,sBAAsB;aACvC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC;QACvE,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;YAChC,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC;gBACV,MAAM,KAAK,CAAC,IAAI,gBAAgB;gBAChC,MAAM,KAAK,CAAC,IAAI,iBAAiB;gBACjC,MAAM,KAAK,CAAC,IAAI,mBAAmB;aACpC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;QAChB,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;YACV,MAAM,KAAK,CAAC,IAAI,cAAc;YAC9B,MAAM,KAAK,CAAC,IAAI,gBAAgB;YAChC,MAAM,KAAK,CAAC,IAAI,cAAc;YAC9B,MAAM,KAAK,CAAC,IAAI,kBAAkB;YAClC,MAAM,KAAK,CAAC,IAAI,kBAAkB;YAClC,MAAM,KAAK,CAAC,IAAI,6BAA6B;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -60,6 +60,9 @@ export interface PetState {
60
60
  createdAt: string;
61
61
  lastFed: string;
62
62
  lastInteraction: string;
63
+ lastComment?: string;
64
+ lastActivityTime?: string;
65
+ recentFailures?: number;
63
66
  stats: Stats;
64
67
  }
65
68
  /** User configuration */
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAsGA,uBAAuB;AACvB,MAAM,CAAC,MAAM,WAAW,GAA2B;IACjD,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,EAAE;IACV,YAAY,EAAE,EAAE;CACjB,CAAC;AAEF,yCAAyC;AACzC,MAAM,CAAC,MAAM,eAAe,GAA+E;IACzG,MAAM,EAAE,EAAE,WAAW,EAAE,0BAA0B,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE;IAChF,WAAW,EAAE,EAAE,WAAW,EAAE,2BAA2B,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE;IACtF,SAAS,EAAE,EAAE,WAAW,EAAE,wBAAwB,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,EAAE;IAC5F,MAAM,EAAE,EAAE,WAAW,EAAE,+BAA+B,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE;IACpF,MAAM,EAAE,EAAE,WAAW,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE;IAC9E,QAAQ,EAAE,EAAE,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,EAAE;CACpF,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAyGA,uBAAuB;AACvB,MAAM,CAAC,MAAM,WAAW,GAA2B;IACjD,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,EAAE;IACV,YAAY,EAAE,EAAE;CACjB,CAAC;AAEF,yCAAyC;AACzC,MAAM,CAAC,MAAM,eAAe,GAA+E;IACzG,MAAM,EAAE,EAAE,WAAW,EAAE,0BAA0B,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE;IAChF,WAAW,EAAE,EAAE,WAAW,EAAE,2BAA2B,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE;IACtF,SAAS,EAAE,EAAE,WAAW,EAAE,wBAAwB,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,EAAE;IAC5F,MAAM,EAAE,EAAE,WAAW,EAAE,+BAA+B,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE;IACpF,MAAM,EAAE,EAAE,WAAW,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE;IAC9E,QAAQ,EAAE,EAAE,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,EAAE;CACpF,CAAC"}
@@ -4,6 +4,8 @@ import { RARITY_INFO } from '../core/rarity.js';
4
4
  import { evolutionAnimation, levelUpNotification, stageUpNotification, greetingMessage } from '../render/animation.js';
5
5
  import { triggerAnim } from '../render/anim-state.js';
6
6
  import { syncPetToServer, loadAuth } from '../core/sync.js';
7
+ import { generateCodeComment, reactToCodeQuality, checkEasterEgg } from '../core/comments.js';
8
+ import { saveBubble, setBubbleCoding, setBubbleDone } from '../render/bubble.js';
7
9
  /** Main hook handler - reads stdin JSON, processes event, outputs response */
8
10
  export async function handleHook() {
9
11
  // Require both auth and pet state
@@ -25,8 +27,24 @@ export async function handleHook() {
25
27
  catch {
26
28
  process.exit(0);
27
29
  }
30
+ // Set bubble mode based on Claude's work state
31
+ if (input.hook_event_name === 'UserPromptSubmit' || input.hook_event_name === 'PostToolUse') {
32
+ setBubbleCoding();
33
+ }
34
+ else if (input.hook_event_name === 'Stop') {
35
+ setBubbleDone();
36
+ }
28
37
  // Process the event
29
38
  const messages = processHookEvent(state, input);
39
+ // 2. Mood reacts to code quality (success/failure)
40
+ const moodReaction = reactToCodeQuality(state, input);
41
+ if (moodReaction.moodDelta !== 0) {
42
+ state.mood = Math.max(0, Math.min(100, state.mood + moodReaction.moodDelta));
43
+ saveState(state);
44
+ }
45
+ if (moodReaction.anim) {
46
+ triggerAnim(moodReaction.anim);
47
+ }
30
48
  // Check for evolution opportunity
31
49
  const prevEvolution = state.evolution;
32
50
  const evoCandidate = checkEvolution(state);
@@ -55,12 +73,14 @@ export async function handleHook() {
55
73
  const level = parseInt(msg.split(':')[1]);
56
74
  const color = RARITY_INFO[state.rarity].color;
57
75
  systemMessages.push(levelUpNotification(state.name, level, color));
76
+ saveBubble(`🎉 升级了!Lv.${level}!`);
58
77
  triggerAnim('levelup');
59
78
  }
60
79
  else if (msg.startsWith('stage_up:')) {
61
80
  const stage = msg.split(':')[1];
62
81
  const color = RARITY_INFO[state.rarity].color;
63
82
  systemMessages.push(stageUpNotification(state.name, stage, color));
83
+ saveBubble(`✨ 进化了!进入${stage === 'growth' ? '成长期' : '最终形态'}!`);
64
84
  triggerAnim('levelup');
65
85
  }
66
86
  else if (msg.startsWith('evolution:')) {
@@ -70,12 +90,32 @@ export async function handleHook() {
70
90
  const color = RARITY_INFO[state.rarity].color;
71
91
  const fromName = state.species;
72
92
  systemMessages.push(evolutionAnimation(state.name, fromName, evo.name, evo.nameZh, color));
93
+ saveBubble(`🧬 进化为 ${evo.nameZh}!`);
73
94
  // Clear pending evolution after showing
74
95
  state.pendingEvolution = null;
75
96
  saveState(state);
76
97
  }
77
98
  }
78
99
  }
100
+ // 4. Easter eggs first (idle return, late night, etc.)
101
+ const egg = checkEasterEgg(state, input);
102
+ if (egg) {
103
+ systemMessages.push(egg);
104
+ saveBubble(egg);
105
+ saveState(state);
106
+ }
107
+ // 1. Code comments (stats-based, 5min cooldown, skip if egg triggered)
108
+ if (!egg) {
109
+ const comment = generateCodeComment(state, input);
110
+ if (comment) {
111
+ systemMessages.push(comment);
112
+ saveBubble(comment);
113
+ saveState(state);
114
+ }
115
+ }
116
+ // Track activity time for idle detection (must be after easter egg check)
117
+ state.lastActivityTime = new Date().toISOString();
118
+ saveState(state);
79
119
  // Background sync to server (fire and forget)
80
120
  if (loadAuth()) {
81
121
  syncPetToServer(state).catch(() => { });
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/hooks/handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/hooks/handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { PetState } from '../core/types.js';
2
+ /** Called on UserPromptSubmit / PostToolUse — Claude is working */
3
+ export declare function setBubbleCoding(): void;
4
+ /** Called on Stop — Claude finished */
5
+ export declare function setBubbleDone(): void;
6
+ /** Called for comments/easter eggs/levelup — priority message */
7
+ export declare function saveBubble(text: string): void;
8
+ /** Get the current bubble text for statusline display */
9
+ export declare function getStatusBubble(state: PetState): string;
10
+ /** Render a speech bubble with box-drawing characters */
11
+ export declare function renderBubble(text: string, maxWidth: number): string;
@@ -0,0 +1,165 @@
1
+ import { readFileSync, writeFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ import { fg, RESET, visibleLength } from './pixel.js';
5
+ const BUBBLE_FILE = join(homedir(), '.claude-minipet', 'bubble.json');
6
+ /** Save bubble state */
7
+ function writeBubble(data) {
8
+ writeFileSync(BUBBLE_FILE, JSON.stringify(data), 'utf-8');
9
+ }
10
+ /** Read bubble state */
11
+ function readBubble() {
12
+ try {
13
+ const raw = readFileSync(BUBBLE_FILE, 'utf-8');
14
+ return JSON.parse(raw);
15
+ }
16
+ catch {
17
+ return null;
18
+ }
19
+ }
20
+ // ── Hook-called writers ──
21
+ /** Called on UserPromptSubmit / PostToolUse — Claude is working */
22
+ export function setBubbleCoding() {
23
+ const existing = readBubble();
24
+ // Keep startedAt if already coding
25
+ const startedAt = (existing?.mode === 'coding' && existing.startedAt)
26
+ ? existing.startedAt
27
+ : Date.now();
28
+ writeBubble({ mode: 'coding', text: '', timestamp: Date.now(), startedAt });
29
+ }
30
+ /** Called on Stop — Claude finished */
31
+ export function setBubbleDone() {
32
+ const existing = readBubble();
33
+ let duration = '';
34
+ if (existing?.mode === 'coding' && existing.startedAt) {
35
+ const secs = Math.floor((Date.now() - existing.startedAt) / 1000);
36
+ if (secs >= 60) {
37
+ duration = ` (用时 ${Math.floor(secs / 60)}分${secs % 60}秒)`;
38
+ }
39
+ else if (secs > 5) {
40
+ duration = ` (用时 ${secs}秒)`;
41
+ }
42
+ }
43
+ writeBubble({ mode: 'done', text: `任务完成了!${duration}`, timestamp: Date.now() });
44
+ }
45
+ /** Called for comments/easter eggs/levelup — priority message */
46
+ export function saveBubble(text) {
47
+ writeBubble({ mode: 'comment', text, timestamp: Date.now() });
48
+ }
49
+ // ── Statusline reader ──
50
+ /** Animated dots: cycles through . .. ... based on time */
51
+ function animDots() {
52
+ const phase = Math.floor(Date.now() / 600) % 3; // ~0.6s per phase
53
+ return '.'.repeat(phase + 1) + ' '.repeat(2 - phase);
54
+ }
55
+ /** Format elapsed time nicely */
56
+ function formatElapsed(ms) {
57
+ const secs = Math.floor(ms / 1000);
58
+ if (secs < 60)
59
+ return `${secs}s`;
60
+ const mins = Math.floor(secs / 60);
61
+ const remSecs = secs % 60;
62
+ if (mins < 60)
63
+ return `${mins}m${remSecs > 0 ? remSecs + 's' : ''}`;
64
+ return `${Math.floor(mins / 60)}h${mins % 60}m`;
65
+ }
66
+ /** Get the current bubble text for statusline display */
67
+ export function getStatusBubble(state) {
68
+ const data = readBubble();
69
+ if (data) {
70
+ // Comment/easter egg/levelup — show for 30s
71
+ if (data.mode === 'comment') {
72
+ if (Date.now() - data.timestamp < 30_000) {
73
+ // Strip pet name prefix
74
+ const m = data.text.match(/^🐾\s*.+?:\s*/);
75
+ return m ? data.text.slice(m[0].length) : data.text;
76
+ }
77
+ }
78
+ // Done — show for 60s
79
+ if (data.mode === 'done') {
80
+ if (Date.now() - data.timestamp < 60_000) {
81
+ return `[ok] ${data.text}`;
82
+ }
83
+ }
84
+ // Coding — show with animated dots + elapsed time
85
+ if (data.mode === 'coding') {
86
+ // If no activity for >5 min, Claude probably isn't working anymore
87
+ if (state.lastActivityTime) {
88
+ const idleMs = Date.now() - new Date(state.lastActivityTime).getTime();
89
+ if (idleMs > 5 * 60 * 1000) {
90
+ // Fall through to idle status below
91
+ }
92
+ else {
93
+ const elapsed = data.startedAt ? formatElapsed(Date.now() - data.startedAt) : '';
94
+ const dots = animDots();
95
+ const timeStr = elapsed ? ` [${elapsed}]` : '';
96
+ return `>> 疯狂Coding中${dots}${timeStr}`;
97
+ }
98
+ }
99
+ else {
100
+ const dots = animDots();
101
+ return `>> 疯狂Coding中${dots}`;
102
+ }
103
+ }
104
+ }
105
+ // ── Fallback: state-based status ──
106
+ const hour = new Date().getHours();
107
+ let idleMinutes = 0;
108
+ if (state.lastActivityTime) {
109
+ idleMinutes = Math.floor((Date.now() - new Date(state.lastActivityTime).getTime()) / 60000);
110
+ }
111
+ // Critical notifications
112
+ if (state.hunger <= 10)
113
+ return '好饿...主人快喂我!';
114
+ if (state.mood <= 20)
115
+ return '心情好差...摸摸我好吗?';
116
+ if ((state.recentFailures ?? 0) >= 3)
117
+ return '连续报错了,主人别急~';
118
+ // Idle states
119
+ if (idleMinutes >= 2 && idleMinutes < 10) {
120
+ const msgs = ['主人在思考吗?', '*歪头等待中*', '稍微休息一下也好~'];
121
+ return msgs[Math.floor(Date.now() / 10000) % msgs.length]; // deterministic per 10s
122
+ }
123
+ if (idleMinutes >= 10 && idleMinutes < 60) {
124
+ return `zzZ 待机中...已经 ${idleMinutes} 分钟了`;
125
+ }
126
+ if (idleMinutes >= 60) {
127
+ const hrs = Math.floor(idleMinutes / 60);
128
+ return hrs >= 2 ? `zzZ 主人离开 ${hrs} 小时了...` : 'zzZ 主人还在吗? 想你~';
129
+ }
130
+ // Time-based
131
+ if (hour >= 23 || hour < 5)
132
+ return '好晚了...主人注意休息哦~';
133
+ if (hour >= 5 && hour < 8)
134
+ return '早安! 今天也要加油~';
135
+ if (hour >= 12 && hour < 13)
136
+ return '午饭时间到了哦~';
137
+ // Default idle — use deterministic message to avoid flicker
138
+ const defaults = [
139
+ '~ 宠物在这里陪你~',
140
+ '今天的代码会很顺利的!',
141
+ '*摇尾巴等待中*',
142
+ '随时准备陪主人编码!',
143
+ ];
144
+ return defaults[Math.floor(Date.now() / 15000) % defaults.length]; // rotate every 15s
145
+ }
146
+ /** Render a speech bubble with box-drawing characters */
147
+ export function renderBubble(text, maxWidth) {
148
+ const dimColor = { r: 140, g: 140, b: 160 };
149
+ const textColor = { r: 220, g: 220, b: 230 };
150
+ const dim = fg(dimColor);
151
+ const txt = fg(textColor);
152
+ let msg = text;
153
+ // Truncate if too long
154
+ if (visibleLength(msg) > maxWidth - 4) {
155
+ msg = msg.slice(0, maxWidth - 7) + '...';
156
+ }
157
+ // Fixed width — keeps bubble stable across refreshes
158
+ const innerWidth = Math.max(maxWidth - 4, visibleLength(msg));
159
+ const padding = Math.max(0, innerWidth - visibleLength(msg));
160
+ const top = `${dim}╭${'─'.repeat(innerWidth + 2)}╮${RESET}`;
161
+ const middle = `${dim}│${RESET} ${txt}${msg}${RESET}${' '.repeat(padding)} ${dim}│${RESET}`;
162
+ const bottom = `${dim}╰${'─'.repeat(innerWidth + 2)}╯${RESET}`;
163
+ return `${top}\n${middle}\n${bottom}`;
164
+ }
165
+ //# sourceMappingURL=bubble.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bubble.js","sourceRoot":"","sources":["../../src/render/bubble.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import { renderSprite, buildPalette, progressBar, fg, RESET, BOLD, padEnd } from
6
6
  import { getCurrentFrame, getAnimDecoration } from './frames.js';
7
7
  import { loadAnimState } from './anim-state.js';
8
8
  import { loadAuth } from '../core/sync.js';
9
+ import { getStatusBubble, renderBubble } from './bubble.js';
9
10
  /** Render the full status line output */
10
11
  export function renderStatusLine(state) {
11
12
  const dna = parseDNA(state.dna);
@@ -112,6 +113,10 @@ export function renderStatusLine(state) {
112
113
  const statsPart = i < statsLines.length ? statsLines[i] : '';
113
114
  output.push(`${petPart}${gap}${statsPart}`);
114
115
  }
116
+ // Speech bubble (always shown — real-time status awareness)
117
+ const bubbleText = getStatusBubble(state);
118
+ const bubbleWidth = 50;
119
+ output.push(renderBubble(bubbleText, bubbleWidth));
115
120
  return output.join('\n');
116
121
  }
117
122
  //# sourceMappingURL=statusline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"statusline.js","sourceRoot":"","sources":["../../src/render/statusline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAkC,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,yCAAyC;AACzC,MAAM,UAAU,gBAAgB,CAAC,KAAe;IAC9C,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAE7C,6BAA6B;IAC7B,IAAI,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC;IAC/B,IAAI,SAAS,GAAG,GAAG,CAAC,cAAc,CAAC;IACnC,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QACxB,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAC9B,CAAC;IAED,kBAAkB;IAClB,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAClC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAEtD,8CAA8C;IAC9C,IAAI,QAAe,CAAC;IACpB,IAAI,UAAiB,CAAC;IAEtB,IAAI,OAAO,KAAK,MAAM,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QACtC,yCAAyC;QACzC,QAAQ,GAAG,OAAO,CAAC;QACnB,UAAU,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IAC1C,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACtD,8BAA8B;QAC9B,QAAQ,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QACtC,UAAU,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IAC1C,CAAC;SAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QAC9B,6CAA6C;QAC7C,QAAQ,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QAC9D,UAAU,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IAC1C,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QAC7B,0BAA0B;QAC1B,QAAQ,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QACtC,UAAU,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IAC1C,CAAC;SAAM,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACrD,gBAAgB;QAChB,QAAQ,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QACtC,UAAU,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IAC1C,CAAC;SAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,yBAAyB;QACzB,QAAQ,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;QAChF,UAAU,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,eAAe;QACf,QAAQ,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QACtC,UAAU,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAEzF,wDAAwD;IACxD,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAE/C,mFAAmF;IACnF,IAAI,OAAO,KAAK,MAAM,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QACtC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC;QAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC;QAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,oBAAoB;IAChF,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/C,sEAAsE;IACtE,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IAE3C,sBAAsB;IACtB,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;IACpD,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS;QAC7B,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,SAAS;QAC7E,CAAC,CAAC,WAAW,CAAC;IAEhB,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IAClD,MAAM,UAAU,GAAU,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IACrD,MAAM,WAAW,GAAU,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IACrD,MAAM,SAAS,GAAU,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IACpD,MAAM,QAAQ,GAAU,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IAEnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE9E,gBAAgB;IAChB,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAExF,qDAAqD;IACrD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAU,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAU,CAAC;IAC/H,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAU,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAU,CAAC;IAExI,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,QAAQ,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7E,YAAY;IACZ,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAErE,MAAM,UAAU,GAAG;QACjB,GAAG,WAAW,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE,MAAM,KAAK,CAAC,KAAK,GAAG,KAAK,IAAI,aAAa,GAAG,OAAO,EAAE;QACtG,QAAQ,MAAM,IAAI,MAAM,GAAG;QAC3B,SAAS,KAAK,CAAC,IAAI,UAAU,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;QACvF,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,OAAO,OAAO,EAAE,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,GAAG,QAAQ,EAAE;KACxF,CAAC;IAEF,iDAAiD;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC;IACjB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACjG,MAAM,SAAS,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,GAAG,GAAG,SAAS,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"statusline.js","sourceRoot":"","sources":["../../src/render/statusline.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-minipet",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "🐾 A virtual pet for Claude Code TUI — it grows, evolves, and codes with you! / Claude Code 终端虚拟宠物 - 陪你写代码、升级、进化!",
5
5
  "type": "module",
6
6
  "bin": {