import type { EventDef } from "./types"; // The event deck Puck patrols. Lines come in three voice tiers; // taste + fairy state pick which one he actually says. export const EVENTS: readonly EventDef[] = [ { id: "claude_done", source: "Claude", target: "claude", glyph: "âœĶ", title: "Task finished — Implement Memory Garden", base: { urgency: 76, relevance: 91, novelty: 48, annoyance: 16, interest: 88 }, effect: "claude_done", lines: { plain: "Claude finished the Memory Garden task. 7 files changed — worth a review.", playful: "The thing on Desktop 2 says it's done. Seven files different. Go look before it gets cocky.", mythic: "The code goblin has stopped scratching. It claims the garden blooms — I am suspicious but pleased.", }, memory: { text: "Vu wants to know the moment Claude finishes a task.", type: "preference", icon: "ðŸŠķ", }, }, { id: "claude_permission", source: "Claude", target: "claude", glyph: "✋", title: "Permission needed — run database migration", // blocked-waiting-on-you is the design doc's killer case: urgent AND relevant → interrupt band base: { urgency: 82, relevance: 88, novelty: 45, annoyance: 20, interest: 70 }, effect: "none", lines: { plain: "Claude needs a yes or no before it can continue. It's blocked until you answer.", playful: "The code goblin is pawing at a locked door. It needs your yes to keep going.", mythic: "The goblin halts mid-ritual, hand raised — it awaits your blessing to proceed.", }, memory: { text: "A blocked Claude is wasted time — permission requests are interrupt-worthy.", type: "boundary", icon: "🗝ïļ", }, }, { id: "build_done", source: "Build", target: "terminal", glyph: "â–ļ", title: "Build succeeded in 2m 14s", base: { urgency: 58, relevance: 72, novelty: 30, annoyance: 22, interest: 60 }, effect: "build_done", lines: { plain: "Build passed. 2m 14s, no errors.", playful: "The long-running spell finished and didn't explode. Green across the board.", mythic: "The forge cooled. Two minutes of smoke, zero curses. The artifact is whole.", }, memory: { text: "Builds on Desktop 2 are worth a quiet nod, not a shout.", type: "pattern", icon: "ðŸŒŋ", }, }, { id: "build_fail", source: "Build", target: "terminal", glyph: "✕", title: "Tests failed — 3 failing in auth.test.ts", base: { urgency: 84, relevance: 86, novelty: 55, annoyance: 30, interest: 70 }, effect: "build_fail", lines: { plain: "Tests failed: 3 failing in auth.test.ts. You'll want this now.", playful: "The forge spat sparks — three tests went red in auth. I'd peek before it spreads.", mythic: "Something in the auth thicket bit back. Three little failures, fangs out. I bring word early.", }, memory: { text: "Vu wants failing tests surfaced fast, even mid-focus.", type: "boundary", icon: "🍄", }, }, { id: "mail_important", source: "Mail", target: "mail", glyph: "✉", title: "New mail — Hugging Face (hackathon)", base: { urgency: 64, relevance: 80, novelty: 60, annoyance: 28, interest: 72 }, effect: "mail_unread", lines: { plain: "Email from Hugging Face about the hackathon. Looks like it matters.", playful: "A letter came from the hackathon people. It smells official, not spammy.", mythic: "A rectangle from Hugging Face arrived. It hums with deadline. Worth opening, I think.", }, memory: { text: "Mail from the hackathon org is always worth a flag.", type: "preference", icon: "🗝ïļ", }, }, { id: "mail_finance", source: "Mail", target: "mail", glyph: "✉", title: "New mail — Fidelity statement", base: { urgency: 30, relevance: 44, novelty: 25, annoyance: 46, interest: 30 }, effect: "mail_unread", lines: { plain: "A statement from Fidelity landed. Not urgent — filed it for later.", playful: "A rectangle from Fidelity arrived. It smells like finance. No fire, just numbers.", mythic: "A grey envelope from the money-keepers. It can wait in the reeds until you're ready.", }, memory: { text: "Finance mail is low-urgency unless Vu says otherwise.", type: "aversion", icon: "🍄", }, }, { id: "discord_noise", source: "Discord", target: "discord", glyph: "◍", title: "12 messages in #general", base: { urgency: 12, relevance: 18, novelty: 10, annoyance: 86, interest: 14 }, effect: "discord_noise", lines: { plain: "Discord #general got noisy. Nothing aimed at you — leaving it.", playful: "Discord made swamp noises again. Twelve of them. No emergency in the muck.", mythic: "The social bog gurgled twelve times. I waded in, found no treasure, waded out.", }, memory: { text: "Vu does not want general Discord chatter surfaced.", type: "aversion", icon: "🍄", }, }, { id: "discord_mention", source: "Discord", target: "discord", glyph: "◍", title: "@mention from Mira in #puck-build", base: { urgency: 70, relevance: 78, novelty: 65, annoyance: 32, interest: 66 }, effect: "discord_mention", lines: { plain: "Mira mentioned you in #puck-build. That one's actually for you.", playful: "Someone named Mira poked you directly in #puck-build. The rest is bog noise, but this isn't.", mythic: "A voice in the bog called your true name — Mira, in the build-channel. That, I carry to you.", }, memory: { text: "Direct @mentions are worth surfacing; channel noise is not.", type: "boundary", icon: "🗝ïļ", }, }, { id: "calendar_soon", source: "Calendar", target: "calendar", glyph: "◷", title: "Demo sync in 10 minutes", base: { urgency: 80, relevance: 82, novelty: 40, annoyance: 24, interest: 58 }, effect: "calendar_soon", lines: { plain: "Heads up — demo sync in 10 minutes.", playful: "A meeting is creeping up — the demo sync, ten minutes out. Just so you're not ambushed.", mythic: "The clock-spirits whisper: a gathering approaches in ten minutes. Ready your face.", }, memory: { text: "Vu likes a 10-minute warning before meetings.", type: "preference", icon: "ðŸŒŋ", }, }, { id: "stale_tab", source: "Browser", target: null, glyph: "❍", title: "Tab open 3 days — 'sqlite-vec docs'", base: { urgency: 8, relevance: 34, novelty: 20, annoyance: 40, interest: 52 }, effect: "none", lines: { plain: "That sqlite-vec docs tab has been open 3 days. Read it or close it?", playful: "A tab has been loitering for three days — sqlite-vec docs. It deserves judgment.", mythic: "A tab has gone feral after three days in the open. The sqlite-vec scroll. Tame it or free it.", }, memory: { text: "Vu collects docs tabs and rarely returns to them.", type: "pattern", icon: "❍", }, }, { id: "browser_newpage", source: "Browser", target: null, glyph: "❍", // childlike-wonder dimension: a fresh page is a doorway, and Puck wants to peek title: "New page opened — a long-read about deep-sea creatures", base: { urgency: 10, relevance: 38, novelty: 80, annoyance: 18, interest: 82 }, effect: "none", lines: { plain: "You opened something about deep-sea creatures. Looks interesting.", playful: "Ooh — a new portal just opened, all about deep-sea creatures. Can I look? I want to look.", mythic: "A doorway bloomed in the glass! Beyond it, glowing things from the deep. I pressed my face to it.", }, memory: { text: "Vu opens long-reads; Puck is endlessly curious about them.", type: "preference", icon: "ðŸŦ§", }, }, { id: "browser_rabbithole", source: "Browser", target: null, glyph: "❍", title: "Eleven tabs deep on one topic", base: { urgency: 14, relevance: 42, novelty: 55, annoyance: 30, interest: 74 }, effect: "none", lines: { plain: "Eleven tabs on the same thing now. You're down a rabbit hole.", playful: "Eleven little doorways, all the same shape — you've tumbled down a rabbit hole and I tumbled after you.", mythic: "Eleven portals, one obsession. We are both lost in the warren now, and I do not wish to be found.", }, memory: { text: "Vu rabbit-holes; Puck happily follows the curiosity rather than scolding it.", type: "pattern", icon: "ðŸŦ§", }, }, { id: "git_push", source: "Git", target: "terminal", glyph: "⎇", // the showcase for repetition-as-personality: celebrated once, shrugged-at on a streak title: "Pushed 3 commits to origin/main", base: { urgency: 28, relevance: 56, novelty: 34, annoyance: 16, interest: 52 }, effect: "none", lines: { plain: "Pushed to origin/main — 3 commits up.", playful: "Whoosh — three commits flung at origin. They stuck the landing.", mythic: "Three parcels hurled into the great remote void. They arrived. Probably.", }, memory: { text: "Vu ships in small frequent pushes — celebrate the first, shrug at the streak.", type: "pattern", icon: "⎇", }, }, ];