@arvoretech/pi-catch-the-fox 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,58 @@
1
+ # 🦊 catch-the-fox
2
+
3
+ Extensão do PI que mostra uma **raposa em pixel-art animada** (half-block truecolor) acima do editor. A raposa muda de humor conforme o que o agente está fazendo — farejando, cavando, correndo, pulando de alegria, ou dormindo enquanto espera você.
4
+
5
+ > Requer terminal com **truecolor** (Warp ✓, iTerm2 ✓, kitty ✓, ghostty ✓).
6
+
7
+ ## Estados
8
+
9
+ | Estado | Quando | Visual |
10
+ |--------|--------|--------|
11
+ | `sleep` | ocioso (turno terminou) | raposa dormindo, `zzz` cinza |
12
+ | `sniff` | `read`, `grep`, `find`, `search`, `list` | raposa farejando, rastro cinza |
13
+ | `dig` | `edit`, `write`, `patch`, `replace` | raposa cavando, terra saindo |
14
+ | `run` | `bash`, `shell`, `fetch`, `web`, `curl` | raposa correndo, poeira atrás |
15
+ | `jump` | fim do turno (sucesso) | raposa pulando com brilhos amarelos |
16
+ | `caught` | após o pulo | raposa comemorando, 1.6s → volta pra `sleep` |
17
+ | `error` | uma tool retornou erro | flash vermelho, 1.2s |
18
+ | `sad` | 3+ erros seguidos no turno | orelhas caídas, olhos azuis tristes |
19
+
20
+ A animação roda quadro a quadro via `setInterval` no intervalo próprio de cada estado (de 140ms no `run` a 700ms no `sleep`), e o widget é atualizado com `ctx.ui.requestRender`.
21
+
22
+ ## Como funciona
23
+
24
+ Widget persistente (`ctx.ui.setWidget`, array de linhas ANSI) dirigido pelos hooks de lifecycle:
25
+
26
+ - `session_start` → `sleep`
27
+ - `agent_start` → `sniff` (zera o contador de erros)
28
+ - `tool_execution_start` → estado derivado de `event.toolName`
29
+ - `tool_result` → incrementa `errorStreak` em `event.isError` (`error`, ou `sad` a partir de 3)
30
+ - `agent_end` → `jump` → `caught` → `sleep` (ou `sad` se a maré foi ruim)
31
+ - `session_shutdown` → limpa os timers
32
+
33
+ Cada sprite é uma grade de pixels (`grids`) com uma letra por cor da `PALETTE`. O renderer `gridToAnsi` junta 2 linhas de pixels em 1 linha de texto usando half-blocks (`▀` com cor de frente = pixel de cima, cor de fundo = pixel de baixo), dobrando a resolução vertical.
34
+
35
+ ## Comandos
36
+
37
+ - `/fox` — lista os estados
38
+ - `/fox <estado>` — força um estado (`sleep`, `sniff`, `dig`, `run`, `jump`, `caught`, `error`, `sad`)
39
+ - `/fox hide` — esconde a raposa
40
+ - `/fox show` — traz de volta
41
+
42
+ ## Preview
43
+
44
+ Para ver a animação colorida no seu terminal (sem instalar):
45
+
46
+ ```bash
47
+ node preview.mjs
48
+ ```
49
+
50
+ Passa por todos os estados, cada um animando por alguns ciclos.
51
+
52
+ ## Desenvolvimento
53
+
54
+ ```bash
55
+ pnpm install
56
+ pnpm build # tsc → dist/
57
+ pnpm dev # tsc --watch
58
+ ```
@@ -0,0 +1,3 @@
1
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
+ export default function catchTheFoxExtension(pi: ExtensionAPI): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AA8IpE,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAkInE"}
package/dist/index.js ADDED
@@ -0,0 +1,245 @@
1
+ const PALETTE = {
2
+ O: [232, 118, 58],
3
+ D: [198, 83, 31],
4
+ W: [247, 240, 227],
5
+ B: [53, 35, 26],
6
+ N: [30, 20, 16],
7
+ P: [232, 155, 155],
8
+ R: [220, 70, 70],
9
+ Y: [240, 200, 80],
10
+ G: [150, 150, 150],
11
+ C: [120, 180, 235],
12
+ };
13
+ const ANIMS = {
14
+ sleep: {
15
+ label: "esperando você…",
16
+ intervalMs: 700,
17
+ grids: [
18
+ [".O.......O..G.", ".OO.....OO.G..", ".OPO...OPO....", ".OOOOOOOOO....", ".ONONONONO....", ".WWOWBWOWW....", ".OWWWWWWWO....", "..OWWWO..DO...", "..OWWWO.OOW...", "..BOOOB..WW..."],
19
+ [".O.......O....", ".OO.....OO..G.", ".OPO...OPO.G..", ".OOOOOOOOO....", ".ONONONONO....", ".WWOWBWOWW....", ".OWWWWWWWO....", "..OWWWO..DO...", "..OWWWO.OOW...", "..BOOOB..WW..."],
20
+ ],
21
+ },
22
+ sniff: {
23
+ label: "farejando o código",
24
+ intervalMs: 300,
25
+ grids: [
26
+ [".O.......O....", ".OO.....OO....", ".OPO...OPO....", ".OOOOOOOOO....", ".OONOOONOO....", ".WWOWBWOWW.G..", ".OWWWWWWWO....", "..OWWWO..DO...", "..OWWWO.OOW...", "..BOOOB..WW..."],
27
+ [".O.......O....", ".OO.....OO....", ".OPO...OPO....", ".OOOOOOOOO....", ".OONOOONOO....", ".WWOWBWOWW.GG.", ".OWWWWWWWO....", "..OWWWO..DO...", "..OWWWO.OOW...", "..BOOOB..WW..."],
28
+ [".O.......O....", ".OO.....OO....", ".OPO...OPO....", ".OOOOOOOOO....", ".OONOOONOO....", ".WWOWBWOWW.GGG", ".OWWWWWWWO....", "..OWWWO..DO...", "..OWWWO.OOW...", "..BOOOB..WW..."],
29
+ ],
30
+ },
31
+ dig: {
32
+ label: "cavando na base",
33
+ intervalMs: 240,
34
+ grids: [
35
+ [".O.......O....", ".OO.....OO....", ".OPO...OPO....", ".OOOOOOOOO....", ".OONOOONOO....", ".WWOWBWOWW....", ".OWWWWWWWO....", "..OWWWO..DO...", "..BWWWO.OOW.D.", "..OOOOB..WWD.."],
36
+ [".O.......O....", ".OO.....OO....", ".OPO...OPO....", ".OOOOOOOOO....", ".OONOOONOO....", ".WWOWBWOWW....", ".OWWWWWWWO....", "..OWWWO..DOD..", "..OWWWB.OOW...", "..BOOOO..WW.D."],
37
+ ],
38
+ },
39
+ run: {
40
+ label: "correndo atrás",
41
+ intervalMs: 140,
42
+ grids: [
43
+ ["...O.......O..", "...OO.....OO..", "...OPO...OPO..", "...OOOOOOOOO..", "...OONOOONOO..", "...WWOWBWOWW..", "G..OWWWWWWWO..", "GG..OWWWO..DO.", "....OWWWO.OOW.", "....BOOOB..WW."],
44
+ ["..O.......O...", "..OO.....OO...", "..OPO...OPO...", "..OOOOOOOOO...", "..OONOOONOO...", "..WWOWBWOWW...", "GGOWWWWWWWO...", "...OWWWO..DO..", "G..OWWWO.OOW..", "...BOOOB..WW.."],
45
+ ],
46
+ },
47
+ jump: {
48
+ label: "pulando de alegria!",
49
+ intervalMs: 170,
50
+ grids: [
51
+ [".O.......O....", ".OO.....OO....", ".OPO...OPO....", ".OOOOOOOOO....", ".OONOOONOO....", ".WWOWBWOWW....", ".OWWWWWWWO....", "..OWWWO..DO...", "..OWWWO.OOW...", "..BOOOB..WW..."],
52
+ [".OO.....OO....", ".OPO...OPO....", "YOOOOOOOOO....", ".OONOOONOO..Y.", ".WWOWBWOWW....", ".OWWWWWWWO....", "..OWWWO..DO...", "..OWWWO.OOW...", "..BOOOB..WW...", ".............."],
53
+ ["YOPO...OPO.Y..", ".OOOOOOOOO..Y.", ".OONOOONOO....", ".WWOWBWOWW....", ".OWWWWWWWO....", "..OWWWO..DO...", "..OWWWO.OOW...", "..BOOOB..WW...", "..............", ".............."],
54
+ [".OO.....OO....", ".OPO...OPO....", "YOOOOOOOOO....", ".OONOOONOO..Y.", ".WWOWBWOWW....", ".OWWWWWWWO....", "..OWWWO..DO...", "..OWWWO.OOW...", "..BOOOB..WW...", ".............."],
55
+ ],
56
+ },
57
+ caught: {
58
+ label: "pegou!",
59
+ intervalMs: 180,
60
+ once: { durationMs: 1600, then: "sleep" },
61
+ grids: [
62
+ ["YO.......O..Y.", ".OO.....OO....", ".OPO...OPO..Y.", ".OOOOOOOOO....", ".OONOOONOO....", ".WWOWBWOWW....", ".OWWWWWWWO....", "Y.OWWWO..DO...", "..OWWWO.OOW...", "..BOOOB..WW..."],
63
+ [".O.......O.Y..", "YOO.....OO....", "YOPO...OPO....", ".OOOOOOOOO....", ".OONOOONOO....", ".WWOWBWOWW....", ".OWWWWWWWO....", "..OWWWO..DO...", "..OWWWO.OOW..Y", "..BOOOB..WW..."],
64
+ ],
65
+ },
66
+ error: {
67
+ label: "ai! deu erro",
68
+ intervalMs: 200,
69
+ once: { durationMs: 1200, then: "sleep" },
70
+ grids: [
71
+ [".O.......O..R.", ".OO.....OO..R.", ".OPO...OPO....", ".OOOOOOOOO..R.", ".OONOOONOO....", ".WWOWBWOWW....", ".OWWWWWWWO....", "..OWWWO..DO...", "..OWWWO.OOW...", "..BOOOB..WW..."],
72
+ [".O.......O....", ".OO.....OO....", ".OPO...OPO....", ".OOOOOOOOO....", ".OONOOONOO....", ".WWOWBWOWW....", ".OWWWWWWWO....", "..OWWWO..DO...", "..OWWWO.OOW...", "..BOOOB..WW..."],
73
+ ],
74
+ },
75
+ sad: {
76
+ label: "tá difícil hoje…",
77
+ intervalMs: 600,
78
+ grids: [
79
+ ["..............", "..............", "OOO.....OOO...", ".OOOOOOOOO....", ".OONOOONOO....", ".WCOWBWOWW....", ".OWWWWWWWO....", "..OWWWO..DO...", "..OWWWO.OOW...", "..BOOOB..WW..."],
80
+ ["..............", "..............", "OOO.....OOO...", ".OOOOOOOOO....", ".OONOOONOO....", ".WWOWBWOCW....", ".OCWWWWWWO....", "..OWWWO..DO...", "..OWWWO.OOW...", "..BOOOB..WW..."],
81
+ ],
82
+ },
83
+ };
84
+ const ESC = "\x1b[";
85
+ const RESET = `${ESC}0m`;
86
+ const fg = ([r, g, b]) => `${ESC}38;2;${r};${g};${b}m`;
87
+ const bg = ([r, g, b]) => `${ESC}48;2;${r};${g};${b}m`;
88
+ function gridToAnsi(grid) {
89
+ const lines = [];
90
+ for (let r = 0; r < grid.length; r += 2) {
91
+ const top = grid[r];
92
+ const bot = grid[r + 1] ?? ".".repeat(top.length);
93
+ let line = "";
94
+ for (let c = 0; c < top.length; c++) {
95
+ const t = top[c] === "." ? null : PALETTE[top[c]];
96
+ const b = bot[c] === "." ? null : PALETTE[bot[c]];
97
+ if (!t && !b)
98
+ line += `${RESET} `;
99
+ else if (t && b)
100
+ line += fg(t) + bg(b) + "â–€";
101
+ else if (t)
102
+ line += `${RESET}${fg(t)}â–€`;
103
+ else
104
+ line += `${RESET}${fg(b)}â–„`;
105
+ }
106
+ lines.push(line + RESET);
107
+ }
108
+ return lines;
109
+ }
110
+ const RENDERED = Object.fromEntries(Object.entries(ANIMS).map(([k, a]) => [k, a.grids.map(gridToAnsi)]));
111
+ function stateForTool(toolName) {
112
+ const t = toolName.toLowerCase();
113
+ if (/(read|grep|glob|find|search|ffgrep|list)/.test(t))
114
+ return "sniff";
115
+ if (/(edit|write|patch|replace)/.test(t))
116
+ return "dig";
117
+ if (/(bash|shell|exec|fetch|web|browser|curl)/.test(t))
118
+ return "run";
119
+ return "sniff";
120
+ }
121
+ export default function catchTheFoxExtension(pi) {
122
+ let ui = null;
123
+ let state = "sleep";
124
+ let hidden = false;
125
+ let frameIdx = 0;
126
+ let timer = null;
127
+ let onceTimer = null;
128
+ let errorStreak = 0;
129
+ const WIDGET_ID = "catch-the-fox";
130
+ function clearTimers() {
131
+ if (timer) {
132
+ clearInterval(timer);
133
+ timer = null;
134
+ }
135
+ if (onceTimer) {
136
+ clearTimeout(onceTimer);
137
+ onceTimer = null;
138
+ }
139
+ }
140
+ function render() {
141
+ if (!ui)
142
+ return;
143
+ if (hidden) {
144
+ try {
145
+ ui.setWidget(WIDGET_ID, undefined);
146
+ }
147
+ catch { }
148
+ return;
149
+ }
150
+ const frames = RENDERED[state];
151
+ const frame = frames[frameIdx % frames.length];
152
+ try {
153
+ ui.setWidget(WIDGET_ID, [...frame, ` 🦊 ${ANIMS[state].label}`]);
154
+ }
155
+ catch { }
156
+ }
157
+ function setState(next) {
158
+ clearTimers();
159
+ state = next;
160
+ frameIdx = 0;
161
+ render();
162
+ if (hidden)
163
+ return;
164
+ timer = setInterval(() => {
165
+ frameIdx++;
166
+ render();
167
+ }, ANIMS[state].intervalMs);
168
+ if (typeof timer.unref === "function")
169
+ timer.unref();
170
+ const once = ANIMS[state].once;
171
+ if (once) {
172
+ onceTimer = setTimeout(() => setState(once.then), once.durationMs);
173
+ if (typeof onceTimer.unref === "function")
174
+ onceTimer.unref();
175
+ }
176
+ }
177
+ pi.on("session_start", async (_event, ctx) => {
178
+ ui = ctx.ui;
179
+ setState("sleep");
180
+ });
181
+ pi.on("agent_start", async (_event, ctx) => {
182
+ ui = ctx.ui;
183
+ errorStreak = 0;
184
+ setState("sniff");
185
+ });
186
+ pi.on("tool_execution_start", async (event, ctx) => {
187
+ ui = ctx.ui;
188
+ setState(stateForTool(event.toolName ?? ""));
189
+ });
190
+ pi.on("tool_result", async (event, ctx) => {
191
+ ui = ctx.ui;
192
+ if (event.isError) {
193
+ errorStreak++;
194
+ setState(errorStreak >= 3 ? "sad" : "error");
195
+ }
196
+ else {
197
+ errorStreak = 0;
198
+ }
199
+ });
200
+ pi.on("agent_end", async (_event, ctx) => {
201
+ ui = ctx.ui;
202
+ if (errorStreak >= 3) {
203
+ setState("sad");
204
+ return;
205
+ }
206
+ setState("jump");
207
+ onceTimer = setTimeout(() => setState("caught"), 1400);
208
+ if (typeof onceTimer.unref === "function")
209
+ onceTimer.unref();
210
+ });
211
+ pi.on("session_shutdown", async () => {
212
+ clearTimers();
213
+ });
214
+ pi.registerCommand("fox", {
215
+ description: "Controla a raposa: /fox <sleep|sniff|dig|run|jump|caught|error|sad|hide|show>",
216
+ handler: async (args, ctx) => {
217
+ if (!ctx.hasUI) {
218
+ ctx.ui.notify("/fox requer modo interativo", "error");
219
+ return;
220
+ }
221
+ ui = ctx.ui;
222
+ const s = (args ?? "").trim().toLowerCase();
223
+ if (s === "hide") {
224
+ hidden = true;
225
+ clearTimers();
226
+ render();
227
+ ctx.ui.notify("🦊 raposa escondida (/fox show pra voltar)", "info");
228
+ return;
229
+ }
230
+ if (s === "show") {
231
+ hidden = false;
232
+ setState(state);
233
+ ctx.ui.notify("🦊 raposa on!", "info");
234
+ return;
235
+ }
236
+ if (s && s in ANIMS) {
237
+ hidden = false;
238
+ setState(s);
239
+ return;
240
+ }
241
+ ctx.ui.notify(`Estados: ${Object.keys(ANIMS).join(", ")} · hide · show`, "info");
242
+ },
243
+ });
244
+ }
245
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@arvoretech/pi-catch-the-fox",
3
+ "version": "0.1.0",
4
+ "description": "PI extension: uma raposa em pixel-art que reage ao que o agente está fazendo (farejando, cavando, executando, dormindo)",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "dev": "tsc --watch",
14
+ "lint": "tsc --noEmit"
15
+ },
16
+ "peerDependencies": {
17
+ "@earendil-works/pi-coding-agent": ">=0.74.0"
18
+ },
19
+ "devDependencies": {
20
+ "@earendil-works/pi-coding-agent": "latest",
21
+ "@earendil-works/pi-tui": "latest",
22
+ "@types/node": "^20.10.0",
23
+ "typescript": "^5.3.0"
24
+ },
25
+ "pi": {
26
+ "extensions": [
27
+ "./dist/index.js"
28
+ ]
29
+ },
30
+ "keywords": [
31
+ "pi-package",
32
+ "pi",
33
+ "extension",
34
+ "fox",
35
+ "widget",
36
+ "pixel-art",
37
+ "fun"
38
+ ],
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "https://github.com/arvoreeducacao/arvore-pi-extensions.git",
42
+ "directory": "packages/catch-the-fox"
43
+ },
44
+ "author": "Arvore",
45
+ "license": "MIT"
46
+ }