Spaces:
Running
Running
| 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: "β", | |
| }, | |
| }, | |
| ]; | |