Commit Graph

30 Commits

Author SHA1 Message Date
itsamejms 624d82931b fix: set minimal CSP instead of null
CI / frontend (push) Successful in 31s
CI / rust (push) Successful in 5m39s
All LLM/image HTTP goes through Rust (reqwest), so the webview needs
almost nothing: self for assets, data: for generated-image URLs,
inline styles (Vite dev + style attrs), and ws to the Vite dev server
for HMR. Verify on next dev run.
2026-09-06 23:26:25 +01:00
itsamejms 00fb901aee docs: fix stale image-gen refs, Node prereq, version sync; drop dead icons.svg
CI / frontend (push) Successful in 30s
CI / rust (push) Successful in 5m38s
- README: image gen is sd-server (cross-platform), not macOS/Ollama;
  Node 23.6+ note for self-checks; prefs store row in the data table.
- plan.md: superseded banners on the Ollama image-gen sections.
- gitea-release.sh: syncs Cargo.toml too; bumped to 0.1.3 to match.
- public/icons.svg: unreferenced — favicon.svg is the icon.
2026-09-06 23:26:16 +01:00
itsamejms c5d4db4ae1 ci: gitea workflow (lint + self-checks + tsc/vite build + cargo test)
CI / frontend (push) Successful in 32s
CI / rust (push) Successful in 5m39s
npm run check aggregates the three node self-checks so CI (and humans)
run them with one command. Node 23.6+ required for bare .ts execution.
2026-09-06 23:25:46 +01:00
itsamejms a69d7caefb fix: RAG — UTF-8 chunk boundary, source dedupe, embed-model guard + reindex
- chunk(): byte splits that landed mid multibyte char silently dropped
  the whole chunk (accented/CJK lore). Back the boundary off to a char
  boundary; regression test included.
- add_document(): DELETE the source first — re-adding a file no longer
  doubles its chunks.
- chunks now record their embed_model (ALTER TABLE migration for old
  DBs); search skips chunks from a different model; rag_list reports it;
  new rag_reindex re-embeds everything, surfaced in the Lore panel as a
  mismatch banner with a one-click Reindex.
2026-09-06 23:25:22 +01:00
itsamejms 913345a05e test: unique temp dir per generations test — parallel runs raced on one SQLite file 2026-09-06 23:23:25 +01:00
itsamejms 03a634fdd0 fix: persist LLM config to prefs store so Settings survive restarts
set_llm_config only mutated an in-memory Mutex; lib.rs always started
from LlmConfig::default(). Config now round-trips through the same
dm-pal-prefs.json store as dataDir, with a defaults fallback so a
future shape change can't brick startup. Prefs consts now live in
lib.rs (pub) instead of being mirrored per-module.
2026-09-06 23:22:34 +01:00
itsamejms 3eb0a2da2e fix: scrub PII from apple-signing env example + docs that quoted it 2026-09-06 23:20:40 +01:00
itsamejms edeeb7a5cc docs: repo review + master roadmap 2026-09-06 23:19:05 +01:00
itsamejms f3e06d2bd3 updating to use stable-diffusion.cpp for the image generation as ollama has since removed it 2026-08-24 11:23:10 +01:00
itsamejms da443175c5 adding the first run wizard again 2026-08-16 13:53:22 +01:00
itsamejms 65aee44d6b working through a review 2026-08-09 13:49:54 +01:00
itsamejms abf3668081 adding apple signing and updating the build script 2026-08-05 09:20:06 +01:00
itsamejms 35ec227531 chore: release v0.1.3 2026-08-04 17:22:47 +01:00
itsamejms d2eea494fe chore: release v0.1.2 2026-08-04 17:19:20 +01:00
itsamejms 639d768bf1 chore: release v0.1.1 2026-08-04 17:15:32 +01:00
itsamejms 8dcf6d2a28 adding the gitea-release.sh v0.1.3 2026-08-04 14:47:27 +01:00
itsamejms b89a39ec9d building out the components, updating the UI in overview and adding a little sqlite viewer v0.1.0 2026-07-17 09:31:51 +01:00
itsamejms 82f2dcf3df adding initial world map frontend 2026-07-13 10:50:55 +01:00
itsamejms a6171a8158 minor UI fixes 2026-07-13 10:39:51 +01:00
itsamejms a24f3615e0 working through the plan + UI/ UX 2026-07-12 22:13:43 +01:00
itsamejms 5b256242be adding the actual icon 2026-06-29 09:07:05 +01:00
itsamejms a9cdd10806 feat: soundboard, toast notifications, robust JSON parsing
Soundboard (Web Audio API):
- 8 ambient loops: rain, wind, fire, ocean, forest, tavern, thunder, cave
- 8 one-shot SFX: sword, bow, spell, door, coins, horn, dice, footsteps
- Brown noise generation for ambient textures
- Oscillator-based SFX with frequency sweeps
- Volume slider, active state indicators with pulsing dot
- Stop All button when ambients are playing
- Toast notifications on SFX trigger

Toast notification system:
- Zustand-based store with auto-dismiss (4s)
- 4 types: success, error, info, warning
- Slide-in animation from top-right
- Dismissible with × button
- Integrated into App shell

JSON parsing (all AI components):
- Shared lib/llm-parse.ts with extractJson, parseLlmJson, flattenValue, ensureArray
- Strips markdown code fences before parsing
- Handles nested objects where strings expected
- All 5 AI components use parseLlmJson instead of raw regex
- All prompts explicitly request raw JSON with no fences
- ItemForge shows raw response in <details> on parse failure

Full production build passing
2026-06-28 23:08:15 +01:00
itsamejms b23ab61841 fix: robust LLM JSON parsing across all AI components
- Created shared lib/llm-parse.ts with extractJson(), parseLlmJson(),
  flattenValue(), and ensureArray() utilities
- Strips markdown code fences (\`\`\`json ... \`\`\`) before parsing
- Handles nested objects where strings were expected (flattens them)
- Handles arrays that come back as strings or objects
- Updated all AI prompts to explicitly request raw JSON with no fences
- All 5 AI components now use parseLlmJson() instead of raw regex
- ItemForge shows raw LLM response in expandable <details> when parsing fails
- Added 'IMPORTANT: Return ONLY raw JSON' instruction to all prompts
- Full production build passing
2026-06-28 23:03:10 +01:00
itsamejms 9b0483a2ab polish: responsive grid, radial gradient background, better bento card scaling
- Dashboard grid is now responsive: 1 col mobile, 2 cols tablet, 4 cols desktop
- BentoCard span classes converted to responsive variants
- Subtle radial gradient on main background for depth (as per design system §7.7)
- All production builds passing
2026-06-28 22:52:04 +01:00
itsamejms ea827ff20e feat: World Builder, Item Forge, Quest Designer + sidebar navigation
- World Builder: AI-generated worlds with regions, landmarks, conflicts, cultures
- Item Forge: AI magic item generator with rarity-colored headers, mechanical/lore sections
- Quest Designer: AI quest generator with step-through navigation, choices, twist, reward
- Sidebar now navigates to dedicated full-screen views for every tool
- Bento dashboard cards have 'Expand' buttons opening detail views
- Back arrow (←) in title bar returns to dashboard
- Dashboard grid expanded to 5 rows to accommodate Item Forge
- All three new tools also work in compact dashboard mode
- Full production build clean
2026-06-28 22:50:50 +01:00
itsamejms a44de0e4bb feat: sidebar navigation to dedicated detail views
- Sidebar icons now navigate to full-screen views for each tool
- Dashboard bento cards have 'Expand' buttons that open the detail view
- Back arrow (←) in title bar returns to dashboard
- Detail views wrapped in a glass-card with max-w-2xl layout
- Settings page gets its own full layout with heading
- World Map, Quest Designer, Soundboard show placeholder screens with icons
- All nav items in sidebar: World, NPCs, Encounter, Dice, Session, Sound,
  Initiative, Random Tables, Calendar, Settings
2026-06-28 22:43:08 +01:00
itsamejms 4d4518aec0 docs: update plan.md with completed milestones 1-5 2026-06-28 22:40:37 +01:00
itsamejms 5ce2686ced v0.5.0-dm-tools: Initiative tracker, random tables, encounter builder, calendar
- Initiative Tracker: add/remove combatants, roll initiative, HP bars with
  color transitions (green→gold→red), condition badges, round counter,
  next-turn cycling, gold active-state border
- Random Tables: 4 built-in tables (Tavern Names, Weather, NPC Quirks,
  Treasure), dice notation parser, roll history, highlight matching result
- Encounter Builder: AI-generated encounters via LLM, party level/size,
  terrain selector, JSON response parsing, difficulty badge
- Calendar Widget: Faerûn calendar (Hammer–Nightal), event creation per
  day, event indicators, month navigation, year display
- All glass-card wrapped with framer-motion hover/tap animations
- Full production build clean: tsc, vite, cargo, tauri build
2026-06-28 22:40:11 +01:00
itsamejms 9675e05b07 v0.2.0-llm: LLM integration, core utilities, and persistence
- Rust backend: LLM abstraction with OpenAI-compatible + Ollama API clients
- Tauri commands: generate, generate_stream, get/set LLM config
- LLM config: api_url, api_key, model, temperature, max_tokens, top_p
- Works with Ollama (localhost:11434), LM Studio, any OpenAI-compatible API
- Streaming infrastructure via Tauri Channels (LlmEvent)
- tauri-plugin-store, tauri-plugin-fs added
- Frontend: NPC Generator with race/class/alignment selection + AI generation
- Frontend: Dice Roller with notation parsing (2d6+3), presets, history
- Frontend: Session Logger with note-taking + AI summarization
- Frontend: Settings panel for LLM configuration (URL, key, model, temperature)
- App shell: left rail nav with active states, settings toggle
- All glassmorphism cards with gold glow hover states
- Builds clean: tsc, vite build, cargo check, tauri build
2026-06-28 22:36:30 +01:00
itsamejms f30a92ddeb v0.1.0-skeleton: Tauri v2 + React + TS scaffold with design system
- Tauri v2 project with greet command (invoke round-trip verified)
- React + TypeScript + Vite front-end
- Tailwind CSS v4 with dark blue + gold design tokens
- Glassmorphism .glass-card component with backdrop-filter
- BentoCard component (framer-motion, lucide-react icons)
- App shell: left rail nav (56px) + title bar + bento grid dashboard
- Cinzel / Inter / JetBrains Mono font stack
- Dark-only design: #0a0e1a deep, #d4af37 gold accents
- All design tokens as CSS custom properties
- Rust backend: greet command, tauri-plugin-log
- Builds successfully: cargo check, tsc, vite build, tauri build (macOS .app + .dmg)
2026-06-28 22:30:28 +01:00