@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 +58 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +245 -0
- package/dist/index.js.map +1 -0
- package/package.json +46 -0
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
|
+
```
|
package/dist/index.d.ts
ADDED
|
@@ -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":"AAcA,MAAM,OAAO,GAAwB;IACnC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;IACjB,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACf,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACf,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;IACjB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;CACnB,CAAC;AASF,MAAM,KAAK,GAA2B;IACpC,KAAK,EAAE;QACL,KAAK,EAAE,iBAAiB;QACxB,UAAU,EAAE,GAAG;QACf,KAAK,EAAE;YACL,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;YACpL,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;SACrL;KACF;IACD,KAAK,EAAE;QACL,KAAK,EAAE,oBAAoB;QAC3B,UAAU,EAAE,GAAG;QACf,KAAK,EAAE;YACL,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;YACpL,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;YACpL,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;SACrL;KACF;IACD,GAAG,EAAE;QACH,KAAK,EAAE,iBAAiB;QACxB,UAAU,EAAE,GAAG;QACf,KAAK,EAAE;YACL,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;YACpL,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;SACrL;KACF;IACD,GAAG,EAAE;QACH,KAAK,EAAE,gBAAgB;QACvB,UAAU,EAAE,GAAG;QACf,KAAK,EAAE;YACL,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;YACpL,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;SACrL;KACF;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,qBAAqB;QAC5B,UAAU,EAAE,GAAG;QACf,KAAK,EAAE;YACL,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;YACpL,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;YACpL,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;YACpL,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;SACrL;KACF;IACD,MAAM,EAAE;QACN,KAAK,EAAE,QAAQ;QACf,UAAU,EAAE,GAAG;QACf,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;QACzC,KAAK,EAAE;YACL,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;YACpL,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;SACrL;KACF;IACD,KAAK,EAAE;QACL,KAAK,EAAE,cAAc;QACrB,UAAU,EAAE,GAAG;QACf,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;QACzC,KAAK,EAAE;YACL,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;YACpL,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;SACrL;KACF;IACD,GAAG,EAAE;QACH,KAAK,EAAE,kBAAkB;QACzB,UAAU,EAAE,GAAG;QACf,KAAK,EAAE;YACL,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;YACpL,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;SACrL;KACF;CACF,CAAC;AAEF,MAAM,GAAG,GAAG,OAAO,CAAC;AACpB,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC;AACzB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5D,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAE5D,SAAS,UAAU,CAAC,IAAc;IAChC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;gBAAE,IAAI,IAAI,GAAG,KAAK,GAAG,CAAC;iBAC7B,IAAI,CAAC,IAAI,CAAC;gBAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;iBACxC,IAAI,CAAC;gBAAE,IAAI,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;;gBACnC,IAAI,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC,CAAQ,CAAC,GAAG,CAAC;QAC1C,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,QAAQ,GAAiC,MAAM,CAAC,WAAW,CAC/D,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CACpC,CAAC;AAElC,SAAS,YAAY,CAAC,QAAgB;IACpC,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,0CAA0C,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IACvE,IAAI,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACvD,IAAI,0CAA0C,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAAgB;IAC3D,IAAI,EAAE,GAAQ,IAAI,CAAC;IACnB,IAAI,KAAK,GAAa,OAAO,CAAC;IAC9B,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,KAAK,GAA0C,IAAI,CAAC;IACxD,IAAI,SAAS,GAAyC,IAAI,CAAC;IAC3D,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,MAAM,SAAS,GAAG,eAAe,CAAC;IAElC,SAAS,WAAW;QAClB,IAAI,KAAK,EAAE,CAAC;YACV,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAED,SAAS,MAAM;QACb,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC;gBACH,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACrC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,GAAG,KAAK,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACnE,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,SAAS,QAAQ,CAAC,IAAc;QAC9B,WAAW,EAAE,CAAC;QACd,KAAK,GAAG,IAAI,CAAC;QACb,QAAQ,GAAG,CAAC,CAAC;QACb,MAAM,EAAE,CAAC;QACT,IAAI,MAAM;YAAE,OAAO;QACnB,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YACvB,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,CAAC;QACX,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;QAC5B,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;YAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;QAC/B,IAAI,IAAI,EAAE,CAAC;YACT,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACnE,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU;gBAAE,SAAS,CAAC,KAAK,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC3C,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;QACZ,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QACzC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;QACZ,WAAW,GAAG,CAAC,CAAC;QAChB,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,sBAAsB,EAAE,KAAK,EAAE,KAAU,EAAE,GAAQ,EAAE,EAAE;QAC3D,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;QACZ,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,KAAU,EAAE,GAAQ,EAAE,EAAE;QAClD,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;QACZ,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,WAAW,EAAE,CAAC;YACd,QAAQ,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QACvC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;QACZ,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACrB,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjB,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;QACvD,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU;YAAE,SAAS,CAAC,KAAK,EAAE,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QACnC,WAAW,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE;QACxB,WAAW,EACT,+EAA+E;QACjF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC3B,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;gBACtD,OAAO;YACT,CAAC;YACD,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;YACZ,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;gBACjB,MAAM,GAAG,IAAI,CAAC;gBACd,WAAW,EAAE,CAAC;gBACd,MAAM,EAAE,CAAC;gBACT,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,4CAA4C,EAAE,MAAM,CAAC,CAAC;gBACpE,OAAO;YACT,CAAC;YACD,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;gBACjB,MAAM,GAAG,KAAK,CAAC;gBACf,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAChB,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;gBACvC,OAAO;YACT,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;gBACpB,MAAM,GAAG,KAAK,CAAC;gBACf,QAAQ,CAAC,CAAa,CAAC,CAAC;gBACxB,OAAO;YACT,CAAC;YACD,GAAG,CAAC,EAAE,CAAC,MAAM,CACX,YAAY,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EACzD,MAAM,CACP,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
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
|
+
}
|