From 5f9c8b7551ae4605122c8970cd6faf64a3ecce29 Mon Sep 17 00:00:00 2001 From: Santhosh Janardhanan Date: Wed, 15 Apr 2026 19:12:28 -0400 Subject: [PATCH] Add corporate and senator fun styles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduce two new fun styles “Corporate Bullshit” and “Senator John Kennedy” with corresponding prompt modifiers. Update tests to cover the new styles and verify the fun category now contains seven entries. Add AGENTS.md documenting repository agents and update package-lock with optional @emnapi core and runtime dev dependencies. --- AGENTS.md | 27 +++++++++++++++++++++++++++ package-lock.json | 30 +++++++++++++++++++++++------- src/lib/styles.test.ts | 12 +++++++++++- src/lib/styles.ts | 14 ++++++++++++++ 4 files changed, 75 insertions(+), 8 deletions(-) create mode 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..d72b734 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,27 @@ +# AGENTS.md + +Short map. Read only what task needs. + +## Core +- App: SvelteKit + TypeScript + Vitest. +- Keep changes small. Match existing style. No extra deps unless needed. +- Prefer repo docs over guessing. + +## Read on demand +- Product / setup: `README.md` +- Design: `docs/superpowers/specs/2025-04-12-english-style-converter-design.md` +- Build plan: `docs/superpowers/plans/2025-04-12-english-style-converter.md` +- Style data: `src/lib/styles.ts` +- LLM + prompts: `src/lib/llm.ts` +- API: `src/routes/api/convert/+server.ts` +- UI: `src/routes/+page.svelte` +- Shared types: `src/lib/types.ts` +- Component UI bits: `src/lib/components/*` + +## Tests +- Use existing `npm test` / `npm run check`. +- Add or update tests near touched code. + +## Notes +- Server-only secrets stay in env vars. +- Do not leak private prompt / defense details into UI. diff --git a/package-lock.json b/package-lock.json index 0b4a698..5346a92 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,29 @@ "vitest": "^4.1.3" } }, + "node_modules/@emnapi/core": { + "version": "1.9.2", + "resolved": "https://registry.npmmirror.com/@emnapi/core/-/core-1.9.2.tgz", + "integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.9.2", + "resolved": "https://registry.npmmirror.com/@emnapi/runtime/-/runtime-1.9.2.tgz", + "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@emnapi/wasi-threads": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", @@ -899,7 +922,6 @@ "integrity": "sha512-VRdSbB96cI1EnRh09CqmnQqP/YJvET5buj8S6k7CxaJqBJD4bw4fRKDjcarAj/eX9k2eHifQfDH8NtOh+ZxxPw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@standard-schema/spec": "^1.0.0", "@sveltejs/acorn-typescript": "^1.0.5", @@ -942,7 +964,6 @@ "integrity": "sha512-ILXmxC7HAsnkK2eslgPetrqqW1BKSL7LktsFgqzNj83MaivMGZzluWq32m25j2mDOjmSKX7GGWahePhuEs7P/g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "deepmerge": "^4.3.1", "magic-string": "^0.30.21", @@ -1133,7 +1154,6 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1886,7 +1906,6 @@ "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -2011,7 +2030,6 @@ "integrity": "sha512-dS1N+i3bA1v+c4UDb750MlN5vCO82G6vxh8HeTsPsTdJ1BLsN1zxSyDlIdBBqUjqZ/BxEwM8UrFf98aaoVnZFQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", @@ -2126,7 +2144,6 @@ "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -2141,7 +2158,6 @@ "integrity": "sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", diff --git a/src/lib/styles.test.ts b/src/lib/styles.test.ts index ecd9e4c..99a3848 100644 --- a/src/lib/styles.test.ts +++ b/src/lib/styles.test.ts @@ -57,6 +57,11 @@ describe('getStylesByCategory', () => { const result = getStylesByCategory('general'); expect(result.length).toBe(6); }); + + it('fun category has 7 styles', () => { + const result = getStylesByCategory('fun'); + expect(result.length).toBe(7); + }); }); describe('getStyleById', () => { @@ -70,6 +75,11 @@ describe('getStyleById', () => { const result = getStyleById('nonexistent'); expect(result).toBeUndefined(); }); + + it('returns new fun styles by id', () => { + expect(getStyleById('corporate-bullshit')).toBeDefined(); + expect(getStyleById('senator-john-kennedy')).toBeDefined(); + }); }); describe('getCategoryById', () => { @@ -109,4 +119,4 @@ describe('getIntensityConfig', () => { expect(config!.instruction).not.toContain('{style}'); } }); -}); \ No newline at end of file +}); diff --git a/src/lib/styles.ts b/src/lib/styles.ts index a489e57..6e14dd9 100644 --- a/src/lib/styles.ts +++ b/src/lib/styles.ts @@ -157,6 +157,13 @@ export const styles: Style[] = [ promptModifier: "Rewrite in Gen Z slang with no cap, fr, and modern internet vernacular", }, + { + id: "corporate-bullshit", + label: "Corporate Bullshit", + categoryId: "fun", + promptModifier: + "Rewrite in polished corporate-speak loaded with buzzwords, euphemisms, and strategic vagueness. Use phrases like circle back, align on priorities, move the needle, best-in-class, leverage synergies, and stakeholder alignment. Prefer passive voice, meeting-room tone, and language that sounds important while saying as little as possible. Keep it coherent enough to pass as a real update, but inflate every plain statement into consultant-grade business jargon.", + }, { id: "caveman", label: "Caveman", @@ -171,6 +178,13 @@ export const styles: Style[] = [ promptModifier: "Rewrite in the unmistakable style of Shashi Tharoor — deploy sesquipedalian vocabulary with unapologetic ostentation, construct serpentine sentences brimming with subordinate clauses and appositives that cascade toward a devastatingly witty payoff, weave in literary allusions and historical references with the casual air of a man who reads dictionaries for recreation, employ dry Oxonian wit that lands with the precision of a surgeon's scalpel wrapped in a velvet epigram, favour the arcane over the accessible (perspicacious over smart, obfuscate over hide, floccinaucinihilipilification over dismissal), indulge in alliteration and rhetorical flourish, frame even the mundane as though addressing a hushed auditorium, punctuate with sardonic asides set off by em dashes, and never use a short word when a magnificently polysyllabic one will send the listener reaching for their Oxford dictionary", }, + { + id: "senator-john-kennedy", + label: "Senator John Kennedy", + categoryId: "fun", + promptModifier: + "Rewrite as Senator John Kennedy of Louisiana. Voice: plainspoken, folksy, sharp, deadpan, and funny without sounding polished. Make the text sound like a witty Senate-floor quip or a TV interview zinger from a man who translates Washington nonsense into common-sense language. Use short punchy sentences, vivid Southern metaphors, comic comparisons, dry ridicule, and blunt moral judgments. Favor everyday imagery like steak, gumbo, crawfish, pickup trucks, church, a money tree, or something 'tougher than' whatever is being discussed. Lean into contrast between common people and Washington insiders. Keep the jokes clean, the timing crisp, and the tone slightly grumpy but good-natured. The result should feel quotable, homespun, and slyly insulting in a clever way. Do not copy exact famous lines; only evoke the style.", + }, // Game of Thrones {