everybuddy 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.
Files changed (120) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +184 -0
  3. package/dist/atlas/bundled.d.ts +15 -0
  4. package/dist/atlas/bundled.js +438 -0
  5. package/dist/atlas/bundled.js.map +1 -0
  6. package/dist/bones/rarity.d.ts +2 -0
  7. package/dist/bones/rarity.js +43 -0
  8. package/dist/bones/rarity.js.map +1 -0
  9. package/dist/bones/roll.d.ts +10 -0
  10. package/dist/bones/roll.js +71 -0
  11. package/dist/bones/roll.js.map +1 -0
  12. package/dist/bones/species.d.ts +1 -0
  13. package/dist/bones/species.js +3 -0
  14. package/dist/bones/species.js.map +1 -0
  15. package/dist/bones/stats.d.ts +6 -0
  16. package/dist/bones/stats.js +55 -0
  17. package/dist/bones/stats.js.map +1 -0
  18. package/dist/cli/attach.d.ts +5 -0
  19. package/dist/cli/attach.js +64 -0
  20. package/dist/cli/attach.js.map +1 -0
  21. package/dist/cli/card.d.ts +3 -0
  22. package/dist/cli/card.js +19 -0
  23. package/dist/cli/card.js.map +1 -0
  24. package/dist/cli/detach.d.ts +4 -0
  25. package/dist/cli/detach.js +36 -0
  26. package/dist/cli/detach.js.map +1 -0
  27. package/dist/cli/event.d.ts +7 -0
  28. package/dist/cli/event.js +35 -0
  29. package/dist/cli/event.js.map +1 -0
  30. package/dist/cli/hatch.d.ts +6 -0
  31. package/dist/cli/hatch.js +20 -0
  32. package/dist/cli/hatch.js.map +1 -0
  33. package/dist/cli/init.d.ts +2 -0
  34. package/dist/cli/init.js +76 -0
  35. package/dist/cli/init.js.map +1 -0
  36. package/dist/cli/install.d.ts +32 -0
  37. package/dist/cli/install.js +121 -0
  38. package/dist/cli/install.js.map +1 -0
  39. package/dist/cli/io.d.ts +9 -0
  40. package/dist/cli/io.js +35 -0
  41. package/dist/cli/io.js.map +1 -0
  42. package/dist/cli/setup.d.ts +26 -0
  43. package/dist/cli/setup.js +297 -0
  44. package/dist/cli/setup.js.map +1 -0
  45. package/dist/cli/sidecar.d.ts +5 -0
  46. package/dist/cli/sidecar.js +12 -0
  47. package/dist/cli/sidecar.js.map +1 -0
  48. package/dist/i18n/companion.d.ts +9 -0
  49. package/dist/i18n/companion.js +117 -0
  50. package/dist/i18n/companion.js.map +1 -0
  51. package/dist/i18n/ui.d.ts +67 -0
  52. package/dist/i18n/ui.js +270 -0
  53. package/dist/i18n/ui.js.map +1 -0
  54. package/dist/index.d.ts +2 -0
  55. package/dist/index.js +116 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/render/card.d.ts +10 -0
  58. package/dist/render/card.js +188 -0
  59. package/dist/render/card.js.map +1 -0
  60. package/dist/render/color.d.ts +5 -0
  61. package/dist/render/color.js +100 -0
  62. package/dist/render/color.js.map +1 -0
  63. package/dist/render/compose.d.ts +2 -0
  64. package/dist/render/compose.js +10 -0
  65. package/dist/render/compose.js.map +1 -0
  66. package/dist/render/gacha.d.ts +9 -0
  67. package/dist/render/gacha.js +322 -0
  68. package/dist/render/gacha.js.map +1 -0
  69. package/dist/render/sprites.d.ts +5 -0
  70. package/dist/render/sprites.js +316 -0
  71. package/dist/render/sprites.js.map +1 -0
  72. package/dist/runtime/observer.d.ts +73 -0
  73. package/dist/runtime/observer.js +448 -0
  74. package/dist/runtime/observer.js.map +1 -0
  75. package/dist/runtime/sidecar.d.ts +18 -0
  76. package/dist/runtime/sidecar.js +670 -0
  77. package/dist/runtime/sidecar.js.map +1 -0
  78. package/dist/runtime/socket.d.ts +6 -0
  79. package/dist/runtime/socket.js +47 -0
  80. package/dist/runtime/socket.js.map +1 -0
  81. package/dist/runtime/tmux.d.ts +41 -0
  82. package/dist/runtime/tmux.js +186 -0
  83. package/dist/runtime/tmux.js.map +1 -0
  84. package/dist/runtime/types.d.ts +96 -0
  85. package/dist/runtime/types.js +2 -0
  86. package/dist/runtime/types.js.map +1 -0
  87. package/dist/soul/hatch.d.ts +6 -0
  88. package/dist/soul/hatch.js +90 -0
  89. package/dist/soul/hatch.js.map +1 -0
  90. package/dist/soul/profile.d.ts +6 -0
  91. package/dist/soul/profile.js +48 -0
  92. package/dist/soul/profile.js.map +1 -0
  93. package/dist/soul/providers/anthropic.d.ts +17 -0
  94. package/dist/soul/providers/anthropic.js +105 -0
  95. package/dist/soul/providers/anthropic.js.map +1 -0
  96. package/dist/soul/providers/index.d.ts +10 -0
  97. package/dist/soul/providers/index.js +23 -0
  98. package/dist/soul/providers/index.js.map +1 -0
  99. package/dist/soul/providers/openai.d.ts +20 -0
  100. package/dist/soul/providers/openai.js +120 -0
  101. package/dist/soul/providers/openai.js.map +1 -0
  102. package/dist/soul/providers/types.d.ts +4 -0
  103. package/dist/soul/providers/types.js +2 -0
  104. package/dist/soul/providers/types.js.map +1 -0
  105. package/dist/storage/companion.d.ts +3 -0
  106. package/dist/storage/companion.js +155 -0
  107. package/dist/storage/companion.js.map +1 -0
  108. package/dist/storage/config.d.ts +36 -0
  109. package/dist/storage/config.js +220 -0
  110. package/dist/storage/config.js.map +1 -0
  111. package/dist/storage/paths.d.ts +3 -0
  112. package/dist/storage/paths.js +12 -0
  113. package/dist/storage/paths.js.map +1 -0
  114. package/dist/types/companion.d.ts +84 -0
  115. package/dist/types/companion.js +2 -0
  116. package/dist/types/companion.js.map +1 -0
  117. package/dist/types/onboarding.d.ts +12 -0
  118. package/dist/types/onboarding.js +2 -0
  119. package/dist/types/onboarding.js.map +1 -0
  120. package/package.json +52 -0
@@ -0,0 +1,322 @@
1
+ import { renderCompanionCard, getSpriteFrameCount, getCardLineCount } from "./card.js";
2
+ import { colorize, bold, dim, rainbow } from "./color.js";
3
+ import { composeFrame } from "./compose.js";
4
+ import { SPECIES, EYES } from "./sprites.js";
5
+ const CANVAS_WIDTH = 44;
6
+ const CANVAS_HEIGHT = 12;
7
+ const HIDE_CURSOR = "\x1b[?25l";
8
+ const SHOW_CURSOR = "\x1b[?25h";
9
+ const CLEAR_LINE = "\x1b[2K";
10
+ const MOVE_UP = (n) => `\x1b[${n}A`;
11
+ function getPhaseTimings(tier) {
12
+ const timings = [
13
+ { charge: 800, summon: 500, hold: 300, flash: 250, silhouette: 400, reveal: 500 }, // Common
14
+ { charge: 1000, summon: 600, hold: 400, flash: 350, silhouette: 400, reveal: 500 }, // Uncommon
15
+ { charge: 1200, summon: 800, hold: 500, flash: 450, silhouette: 450, reveal: 500 }, // Rare
16
+ { charge: 1400, summon: 1000, hold: 600, flash: 600, silhouette: 450, reveal: 600 }, // Epic
17
+ { charge: 1800, summon: 1200, hold: 800, flash: 800, silhouette: 500, reveal: 700 }, // Legendary
18
+ ];
19
+ return timings[Math.min(tier, timings.length - 1)];
20
+ }
21
+ const SPINNER_CHARS = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
22
+ // --- Canvas management ---
23
+ function drawCanvas(io, lines) {
24
+ const padded = padCanvasLines(lines);
25
+ for (const line of padded) {
26
+ io.writeLine(line);
27
+ }
28
+ }
29
+ function redrawCanvas(io, lines) {
30
+ const padded = padCanvasLines(lines);
31
+ io.write(MOVE_UP(CANVAS_HEIGHT));
32
+ for (const line of padded) {
33
+ io.write(`${CLEAR_LINE}${line}\n`);
34
+ }
35
+ }
36
+ function padCanvasLines(lines) {
37
+ const result = [];
38
+ for (let i = 0; i < CANVAS_HEIGHT; i++) {
39
+ result.push(lines[i] ?? "");
40
+ }
41
+ return result;
42
+ }
43
+ function centerLine(text, width) {
44
+ const stripped = text.replace(/\u001B\[[0-9;]*m/g, "");
45
+ const visible = Array.from(stripped).length;
46
+ const pad = Math.max(0, Math.floor((width - visible) / 2));
47
+ return " ".repeat(pad) + text;
48
+ }
49
+ // --- Phase 1: Summon (particle convergence) ---
50
+ function renderParticleFrames(tier) {
51
+ const chars = [".", "·", "*", "✦", "★"];
52
+ const particle = chars[Math.min(tier, chars.length - 1)];
53
+ const frameCount = tier <= 0 ? 2 : tier <= 2 ? 3 : 5;
54
+ const frames = [];
55
+ for (let step = 0; step < frameCount; step++) {
56
+ const progress = step / Math.max(1, frameCount - 1);
57
+ const spread = Math.round((1 - progress) * (CANVAS_WIDTH / 2 - 2));
58
+ const lines = [];
59
+ for (let row = 0; row < CANVAS_HEIGHT; row++) {
60
+ const distFromCenter = Math.abs(row - Math.floor(CANVAS_HEIGHT / 2));
61
+ if (distFromCenter > Math.round((1 - progress) * (CANVAS_HEIGHT / 2))) {
62
+ lines.push("");
63
+ continue;
64
+ }
65
+ const chars = new Array(CANVAS_WIDTH).fill(" ");
66
+ const center = Math.floor(CANVAS_WIDTH / 2);
67
+ // Place particles symmetrically converging toward center
68
+ const offset = Math.max(0, spread - distFromCenter * 2);
69
+ if (offset > 0 && center - offset >= 0)
70
+ chars[center - offset] = particle;
71
+ if (offset > 0 && center + offset < CANVAS_WIDTH)
72
+ chars[center + offset] = particle;
73
+ if (progress > 0.5)
74
+ chars[center] = particle;
75
+ const line = chars.join("");
76
+ lines.push(tier >= 4 ? colorize(line, "#FBBF24") : tier >= 3 ? colorize(line, "#C084FC") : dim(line));
77
+ }
78
+ frames.push(lines);
79
+ }
80
+ return frames;
81
+ }
82
+ // --- Phase 2: Rarity flash ---
83
+ function renderRarityFlash(bones) {
84
+ const { rarity } = bones;
85
+ const tier = rarity.tier;
86
+ const color = rarity.color;
87
+ const starsText = `${rarity.stars}`;
88
+ const frames = [];
89
+ // Flash frame
90
+ const flashLines = [];
91
+ for (let row = 0; row < CANVAS_HEIGHT; row++) {
92
+ const center = Math.floor(CANVAS_HEIGHT / 2);
93
+ const dist = Math.abs(row - center);
94
+ if (tier <= 0) {
95
+ // Common: only center line
96
+ flashLines.push(row === center ? colorize(centerLine(starsText, CANVAS_WIDTH), color) : "");
97
+ }
98
+ else if (tier <= 1) {
99
+ // Uncommon: two lines
100
+ flashLines.push(dist <= 1 ? colorize(centerLine(dist === 0 ? starsText : "· · ·", CANVAS_WIDTH), color) : "");
101
+ }
102
+ else {
103
+ // Rare+: full canvas colored
104
+ const fill = row === center ? starsText : "─".repeat(CANVAS_WIDTH);
105
+ flashLines.push(colorize(centerLine(row === center ? fill : fill, CANVAS_WIDTH), color));
106
+ }
107
+ }
108
+ frames.push(flashLines);
109
+ // Epic: add shake frames
110
+ if (tier >= 3) {
111
+ const shakeLeft = flashLines.map((line) => ` ${line}`);
112
+ const shakeRight = flashLines.map((line) => line.startsWith(" ") ? line.slice(1) : line);
113
+ frames.push(shakeLeft, shakeRight);
114
+ }
115
+ // Legendary: rainbow stars frame
116
+ if (tier >= 4) {
117
+ const rainbowLines = [];
118
+ for (let row = 0; row < CANVAS_HEIGHT; row++) {
119
+ const center = Math.floor(CANVAS_HEIGHT / 2);
120
+ if (row === center) {
121
+ rainbowLines.push(centerLine(rainbow(`★ ${starsText} ★`), CANVAS_WIDTH));
122
+ }
123
+ else if (row === center - 1 || row === center + 1) {
124
+ rainbowLines.push(centerLine(rainbow("✦ · ✦ · ✦"), CANVAS_WIDTH));
125
+ }
126
+ else {
127
+ rainbowLines.push(colorize(centerLine("·", CANVAS_WIDTH), color));
128
+ }
129
+ }
130
+ frames.push(rainbowLines);
131
+ }
132
+ return frames;
133
+ }
134
+ // --- Phase 3: Silhouette ---
135
+ function renderSilhouette(bones) {
136
+ const species = SPECIES[bones.species];
137
+ const eye = EYES[bones.eye];
138
+ if (!species?.frames[0] || !eye)
139
+ return emptyCanvas();
140
+ // Compose with real eye but render all as dim
141
+ const frame = species.frames[0];
142
+ const raw = frame.map((line) => line.replace(/\{E\}/g, "?"));
143
+ const silhouetteLines = [];
144
+ for (let row = 0; row < CANVAS_HEIGHT; row++) {
145
+ const spriteStart = Math.floor((CANVAS_HEIGHT - raw.length) / 2);
146
+ const spriteRow = row - spriteStart;
147
+ if (spriteRow >= 0 && spriteRow < raw.length) {
148
+ silhouetteLines.push(centerLine(dim(raw[spriteRow]), CANVAS_WIDTH));
149
+ }
150
+ else {
151
+ silhouetteLines.push("");
152
+ }
153
+ }
154
+ return silhouetteLines;
155
+ }
156
+ // --- Phase 4: Full reveal ---
157
+ function renderRevealSprite(bones) {
158
+ const species = SPECIES[bones.species];
159
+ const eye = EYES[bones.eye];
160
+ if (!species?.frames[0] || !eye)
161
+ return emptyCanvas();
162
+ const sprite = composeFrame(species.frames[0], eye.char, bones.hat, bones.color);
163
+ const lines = [];
164
+ for (let row = 0; row < CANVAS_HEIGHT; row++) {
165
+ const spriteStart = Math.floor((CANVAS_HEIGHT - sprite.length) / 2) - 1;
166
+ const spriteRow = row - spriteStart;
167
+ if (spriteRow >= 0 && spriteRow < sprite.length) {
168
+ lines.push(centerLine(sprite[spriteRow], CANVAS_WIDTH));
169
+ }
170
+ else {
171
+ lines.push("");
172
+ }
173
+ }
174
+ return lines;
175
+ }
176
+ function renderRevealWithName(bones, soul, nameProgress) {
177
+ const species = SPECIES[bones.species];
178
+ const eye = EYES[bones.eye];
179
+ if (!species?.frames[0] || !eye)
180
+ return emptyCanvas();
181
+ const sprite = composeFrame(species.frames[0], eye.char, bones.hat, bones.color);
182
+ const lines = [];
183
+ const nameChars = Math.round(soul.name.length * nameProgress);
184
+ const partialName = soul.name.slice(0, nameChars);
185
+ const rarityText = `◆ ${bones.rarity.stars}`;
186
+ const rarityLine = bones.rarity.tier >= 4 ? rainbow(rarityText) : colorize(rarityText, bones.rarity.color);
187
+ for (let row = 0; row < CANVAS_HEIGHT; row++) {
188
+ const spriteStart = Math.floor((CANVAS_HEIGHT - sprite.length - 3) / 2);
189
+ const spriteRow = row - spriteStart;
190
+ const nameRow = spriteStart + sprite.length + 1;
191
+ const rarityRow = nameRow + 1;
192
+ if (spriteRow >= 0 && spriteRow < sprite.length) {
193
+ lines.push(centerLine(sprite[spriteRow], CANVAS_WIDTH));
194
+ }
195
+ else if (row === nameRow && nameProgress > 0) {
196
+ lines.push(centerLine(bold(partialName), CANVAS_WIDTH));
197
+ }
198
+ else if (row === rarityRow && nameProgress >= 1) {
199
+ lines.push(centerLine(rarityLine, CANVAS_WIDTH));
200
+ }
201
+ else {
202
+ lines.push("");
203
+ }
204
+ }
205
+ return lines;
206
+ }
207
+ function emptyCanvas() {
208
+ return new Array(CANVAS_HEIGHT).fill("");
209
+ }
210
+ // --- Main animation ---
211
+ export async function playGachaAnimation(options) {
212
+ const { record, language, io, sleep } = options;
213
+ const { bones, soul } = record;
214
+ if (!io.supportsAnsi) {
215
+ // Non-TTY fallback: just print the card
216
+ io.writeLine(renderCompanionCard(record, { language }));
217
+ return;
218
+ }
219
+ const timings = getPhaseTimings(bones.rarity.tier);
220
+ io.write(HIDE_CURSOR);
221
+ try {
222
+ // Phase 0: Charge — spinner builds anticipation
223
+ const chargeLabel = language === "zh" ? "正在召唤" : "Summoning";
224
+ const chargeFrameCount = Math.round(timings.charge / 80);
225
+ const chargeCanvas = emptyCanvas();
226
+ const centerRow = Math.floor(CANVAS_HEIGHT / 2);
227
+ chargeCanvas[centerRow] = centerLine(dim(`${SPINNER_CHARS[0]} ${chargeLabel}...`), CANVAS_WIDTH);
228
+ drawCanvas(io, chargeCanvas);
229
+ for (let i = 1; i < chargeFrameCount; i++) {
230
+ await sleep(80);
231
+ const spinner = SPINNER_CHARS[i % SPINNER_CHARS.length];
232
+ // Intensify text as charge progresses
233
+ const progress = i / chargeFrameCount;
234
+ const dots = progress < 0.33 ? "." : progress < 0.66 ? ".." : "...";
235
+ const label = `${spinner} ${chargeLabel}${dots}`;
236
+ const frame = emptyCanvas();
237
+ frame[centerRow] = centerLine(progress > 0.7 ? colorize(label, bones.rarity.color) : dim(label), CANVAS_WIDTH);
238
+ // Add peripheral particles in later phase of charge
239
+ if (progress > 0.5) {
240
+ const sparkle = progress > 0.8 ? "✦" : "·";
241
+ frame[centerRow - 2] = centerLine(dim(sparkle), CANVAS_WIDTH);
242
+ frame[centerRow + 2] = centerLine(dim(sparkle), CANVAS_WIDTH);
243
+ }
244
+ redrawCanvas(io, frame);
245
+ }
246
+ // Phase 1: Summon particles converge
247
+ const particleFrames = renderParticleFrames(bones.rarity.tier);
248
+ const summonPerFrame = Math.round(timings.summon / particleFrames.length);
249
+ redrawCanvas(io, particleFrames[0]);
250
+ for (let i = 1; i < particleFrames.length; i++) {
251
+ await sleep(summonPerFrame);
252
+ redrawCanvas(io, particleFrames[i]);
253
+ }
254
+ // Hold — particles freeze at center, tension before the flash
255
+ await sleep(timings.hold);
256
+ // Phase 2: Rarity flash
257
+ const flashFrames = renderRarityFlash(bones);
258
+ const flashPerFrame = Math.round(timings.flash / flashFrames.length);
259
+ for (const frame of flashFrames) {
260
+ await sleep(flashPerFrame);
261
+ redrawCanvas(io, frame);
262
+ }
263
+ // Phase 3: Silhouette
264
+ await sleep(100);
265
+ const silhouette = renderSilhouette(bones);
266
+ redrawCanvas(io, silhouette);
267
+ await sleep(timings.silhouette);
268
+ // Phase 4: Full reveal with typewriter name
269
+ const revealSprite = renderRevealSprite(bones);
270
+ redrawCanvas(io, revealSprite);
271
+ await sleep(150);
272
+ // Typewriter name effect
273
+ const nameSteps = Math.max(3, Math.min(soul.name.length, 8));
274
+ const typeDelay = Math.round((timings.reveal - 150) / nameSteps);
275
+ for (let step = 1; step <= nameSteps; step++) {
276
+ const progress = step / nameSteps;
277
+ redrawCanvas(io, renderRevealWithName(bones, soul, progress));
278
+ await sleep(typeDelay);
279
+ }
280
+ // Brief hold on complete reveal
281
+ await sleep(300);
282
+ // Phase 5: Clear gacha canvas completely
283
+ io.write(MOVE_UP(CANVAS_HEIGHT));
284
+ for (let i = 0; i < CANVAS_HEIGHT; i++) {
285
+ io.write(`${CLEAR_LINE}\n`);
286
+ }
287
+ io.write(MOVE_UP(CANVAS_HEIGHT));
288
+ // Render first card to measure its height
289
+ const firstCard = renderCompanionCard(record, { language, spriteFrameIndex: 0 });
290
+ const cardLines = getCardLineCount(firstCard);
291
+ // If the card is taller than the canvas, scroll down to make room
292
+ // by printing blank lines, then move back up
293
+ if (cardLines > CANVAS_HEIGHT) {
294
+ const extra = cardLines - CANVAS_HEIGHT;
295
+ for (let i = 0; i < extra; i++) {
296
+ io.write("\n");
297
+ }
298
+ io.write(MOVE_UP(extra));
299
+ }
300
+ // Animate card with cycling sprite frames
301
+ const frameCount = getSpriteFrameCount(record);
302
+ const animCycles = 6;
303
+ const animDelay = 300;
304
+ // Write first frame
305
+ for (const line of firstCard.split("\n")) {
306
+ io.write(`${CLEAR_LINE}${line}\n`);
307
+ }
308
+ for (let i = 1; i < animCycles * frameCount; i++) {
309
+ await sleep(animDelay);
310
+ const card = renderCompanionCard(record, { language, spriteFrameIndex: i });
311
+ io.write(MOVE_UP(cardLines));
312
+ for (const line of card.split("\n")) {
313
+ io.write(`${CLEAR_LINE}${line}\n`);
314
+ }
315
+ }
316
+ }
317
+ finally {
318
+ io.write(SHOW_CURSOR);
319
+ }
320
+ // No need to reprint — the last animated frame IS the final card in terminal history
321
+ }
322
+ //# sourceMappingURL=gacha.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gacha.js","sourceRoot":"","sources":["../../src/render/gacha.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { EyeDefinition, HatDefinition, SpeciesDefinition } from "../types/companion.js";
2
+ export declare const SPECIES: Record<string, SpeciesDefinition>;
3
+ export declare const EYES: Record<string, EyeDefinition>;
4
+ export declare const HATS: Record<string, HatDefinition>;
5
+ export declare function renderCompactFace(speciesId: string, eyeChar: string): string;