diff --git a/AUDIT.md b/AUDIT.md index dffa363d..bf879eac 100644 --- a/AUDIT.md +++ b/AUDIT.md @@ -1,8 +1,8 @@ # WorldScript Studio — Codebase Audit Report -**Date:** 2026-04-17 (baseline); **follow-up chain:** … → 2026-05-28 (v1.19.0 — Security/Voice/RTL/Logger B-1..B-8) → **2026-05-30 (B-1 passphrase UX + CI unblock)** → **2026-05-31 (i18n audit + settings features + CI stabilization)** → **2026-05-31 (Edge-AI Perfection Cycle — Phases 0-7 complete)** → **2026-06-01 (Post-crash session: CI stabilisation + 14 CodeAnt AI fixes + E2E hardening)** → **2026-06-02 (Perf Phase 2.3 — pipeline-LRU unification + PR #69 CodeAnt fixes)** → **2026-06-03 (WorkerBus v2 Phase 3 — Rust TaskSupervisor + Tauri-build unblock)** → **2026-06-06 (Phase 3 i18n Expansion — ja/zh/pt/el + Intl APIs)** → **2026-06-09 (v1.21 Deep Audit Correction — Whisper WASM download UI + 3 CodeAnt fixes + CloudSync LWW)** → **2026-06-09 (feat/deep-audit-v1.21 — CSP hardening, zh locale ≤5% EN, coverage Batches A/B/C, VoiceActivityCoordinator B-2 bridge)** → **2026-06-11 (Ultimate Copilot v2 Phase 2+3 — markdown, sidebar, Apply-to-chapter, InlineAnnotation, ProForge chip; PR #110+#111)** → **2026-06-11 (v1.22.0 release — OpenRouter Cloud 5 provider, AI Execution Modes hybrid/cloud/local/eco, AiModeIndicator, SW cache-invalidation fix)** → **2026-06-13/14 (v1.23 perfection batch — OpenRouter + AI-Execution-Mode settings sections localized/modernized, i18n single-brace interpolation bug-class fix + `i18nPlaceholders` regression guard, bundle split + budget tightening PR #130)** → **2026-06-16 (v1.23.0 release — rebrand StoryCraft → WorldScript Studio, local-first data foundation ADR-0008, Tauri blank-screen + asset-URL fixes, AI error taxonomy + retry hardening, command-palette & local-AI settings localization, WorldScript W monogram icons)** → **2026-06-16 (post-release documentation perfection pass — corpus sync, metric reconciliation, history archival, dependabot hardening)** → **2026-06-17 (Language expansion — +6 locales fi/sv/hu/is/eu/fa (RTL); PR #174 merged; `LanguageSelector` exonym localization via `portal.language.names.*`; portal chrome 100 % for the 6 new langs; README/AUDIT/CHANGELOG docs sync)** +**Date:** 2026-04-17 (baseline); **follow-up chain:** … → 2026-05-28 (v1.19.0 — Security/Voice/RTL/Logger B-1..B-8) → **2026-05-30 (B-1 passphrase UX + CI unblock)** → **2026-05-31 (i18n audit + settings features + CI stabilization)** → **2026-05-31 (Edge-AI Perfection Cycle — Phases 0-7 complete)** → **2026-06-01 (Post-crash session: CI stabilisation + 14 CodeAnt AI fixes + E2E hardening)** → **2026-06-02 (Perf Phase 2.3 — pipeline-LRU unification + PR #69 CodeAnt fixes)** → **2026-06-03 (WorkerBus v2 Phase 3 — Rust TaskSupervisor + Tauri-build unblock)** → **2026-06-06 (Phase 3 i18n Expansion — ja/zh/pt/el + Intl APIs)** → **2026-06-09 (v1.21 Deep Audit Correction — Whisper WASM download UI + 3 CodeAnt fixes + CloudSync LWW)** → **2026-06-09 (feat/deep-audit-v1.21 — CSP hardening, zh locale ≤5% EN, coverage Batches A/B/C, VoiceActivityCoordinator B-2 bridge)** → **2026-06-11 (Ultimate Copilot v2 Phase 2+3 — markdown, sidebar, Apply-to-chapter, InlineAnnotation, ProForge chip; PR #110+#111)** → **2026-06-11 (v1.22.0 release — OpenRouter Cloud 5 provider, AI Execution Modes hybrid/cloud/local/eco, AiModeIndicator, SW cache-invalidation fix)** → **2026-06-13/14 (v1.23 perfection batch — OpenRouter + AI-Execution-Mode settings sections localized/modernized, i18n single-brace interpolation bug-class fix + `i18nPlaceholders` regression guard, bundle split + budget tightening PR #130)** → **2026-06-16 (v1.23.0 release — rebrand StoryCraft → WorldScript Studio, local-first data foundation ADR-0008, Tauri blank-screen + asset-URL fixes, AI error taxonomy + retry hardening, command-palette & local-AI settings localization, WorldScript W monogram icons)** → **2026-06-16 (post-release documentation perfection pass — corpus sync, metric reconciliation, history archival, dependabot hardening)** → **2026-06-17 (Language expansion — +6 locales fi/sv/hu/is/eu/fa (RTL); PR #174 merged; `LanguageSelector` exonym localization via `portal.language.names.*`; portal chrome 100 % for the 6 new langs; README/AUDIT/CHANGELOG docs sync)** → **2026-07-28 (v1.24.1 — Local-AI reliability fixes #266, Dependabot backlog triage, Issue #60 audit closeout, security/build hardening)** **Scope:** Full application, repository configuration, CI/CD, documentation, release validation -**Current version:** **v1.24.0** — 2026-06-21 (Critical & Immediate hardening sequence: Privacy → Analytics opt-out now gates all DuckDB writes + telemetry (SEC-6); reusable `Badge` + experimental labeling; +101 tests for collab-transport/ProForge/Copilot; voice consent clarity; device-aware Ollama recommendation + one-click pull; dependency/onboarding/docs hygiene; **2786 keys × 17 locales**) +**Current version:** **v1.24.1** — 2026-07-28 (Local-AI reliability — desktop Ollama/LM Studio/vLLM discovery + browser status-badge fixes; AI heuristic-fallback foundation + Outline/Character/World/Plot-Board generators; real self-hosted LanguageTool integration; 20-PR Dependabot backlog triage; Issue #60 vendor-fork audit closeout; `persist-credentials`/CWE-209 security hardening; **2844 keys × 19 locales**) **Quality gate (2026-06-17 — language expansion +6 locales):** lint ✅ · typecheck ✅ · i18n:check ✅ (**2716 keys × 17 locales** — fi/sv/hu/is/eu + fa RTL) · placeholder guard ✅ (17 bundles) · targeted unit tests ✅ (LanguageSelector 9 · I18nContext 59 · i18nPlaceholders 33). `LanguageSelector` exonym labels localized via `portal.language.names.*` (native endonym stays hardcoded by design). **Bulk translation completed** for all 10 Beta locales (glossary v2.0, ~44 anchor terms/locale; placeholder-masked, checkpointed): post-run coverage fi 91 % · sv 90 % · hu 91 % · is 92 % · eu 92 % · fa 93 % · ja 99 % · zh 100 % · pt 98 % · el 97 % (Beta MT; human native review tracked). Two bulk-script bugs fixed: (1) `glossaryTranslate` partial-match left ~1,300 strings partially English → now exact-match only; (2) `--all` mangled `help.json` rich HTML → `help.json` excluded from `--all` (`ALL_SKIP`) and kept English fallback for the 6 new langs (tag-dense markup isn't MT-safe; human-review task). New `docs/TRANSLATION-GUIDE.md` + `I18N-GLOSSARY.md` v2.0. @@ -14,12 +14,14 @@ ## v1.24.1 Local-AI reliability + Dependabot batch (2026-07-28) -**Quality gate (2026-07-28):** lint ✅ · typecheck ✅ · i18n:check ✅ (**2834 keys × 19 locales** — `ru`/`ko` added since the v1.24.0 count above; `settings.ai.providerStatusUnavailableBrowser` new key) · targeted unit tests ✅ (PR #272: 40 · PR #273: 64, incl. new badge-reconciliation + scan-endpoint-order coverage). +**Quality gate (2026-07-28):** lint ✅ · typecheck ✅ · i18n:check ✅ (**2844 keys × 19 locales** — `ru`/`ko` added since the v1.24.0 count above; `settings.ai.providerStatusUnavailableBrowser` + `settings.ai.testError.*` new keys) · targeted unit tests ✅ (127 across the 7 merged PRs, incl. badge-reconciliation, scan-endpoint-order, CWE-209 stale-request-guard, and binder-pin-reconciliation coverage) · **5807+ tests / 525 files** · CI Quality Gate (Node 22 + 24) green on every merged PR. -- **#266 (Ollama/LM Studio/vLLM), two remaining halves fixed**, both root-caused with a real build+runtime repro rather than guessed: (1) desktop discovery was still broken after #269 because `vite.config.ts` externalized `@tauri-apps/*` even for the Tauri build itself, leaving `services/localServerHttp.ts`'s plugin-http import unresolvable in the packaged app — fixed via a shared `isTauriBuild()` check (PR #272); (2) the browser status badge and the desktop-only banner were driven by two unreconciled state signals, so the badge always read "Ready" next to a banner saying otherwise — fixed with a distinct "Not available in browser" label (PR #273). -- **Dependabot backlog triaged:** 13 of 18 open PRs merged directly; the remaining 5 (AI-SDK v4 family, biome 2.5.x, dev-tooling/Babel 8) each had a real breaking-change blocker, root-caused and fixed with real code (AI-SDK family combined into PR #275; biome and dev-tooling fixes pushed directly onto their Dependabot branches) rather than force-merged or suppressed. See `TODO.md` § v1.24.1 for the full breakdown. +- **#266 (Ollama/LM Studio/vLLM), two remaining halves fixed**, both root-caused with a real build+runtime repro rather than guessed: (1) desktop discovery was still broken after #269 because `vite.config.ts` externalized `@tauri-apps/*` even for the Tauri build itself, leaving `services/localServerHttp.ts`'s plugin-http import unresolvable in the packaged app — fixed via a shared `isTauriBuild()` check (PR #272); (2) the browser status badge and the desktop-only banner were driven by two unreconciled state signals, so the badge always read "Ready" next to a banner saying otherwise — fixed with a distinct "Not available in browser" label (PR #273). Issue closed with a full root-cause explanation. +- **Dependabot backlog triaged — 20 PRs resolved (16 merged, 4 closed as superseded):** 14 were straightforward bumps (Actions, small JS/dev-tooling patches, Tauri/Rust crates, the tauri-deps group, a stray `log` crate bump); the other 6 each had a real breaking-change blocker, root-caused and fixed with real code rather than force-merged or suppressed — biome 2.5.x and dev-tooling/Babel 8 were fixed directly on their own Dependabot branch and merged, while the 4-PR AI-SDK v4 family (`@ai-sdk/google`/`@ai-sdk/openai`/`@ai-sdk/react`/`ai`) was combined into one coordinated PR #275 and the 4 originals closed as superseded. See `TODO.md` § v1.24.1 for the full breakdown. - **Issue #60 (vendor-fork audit):** confirmed done (fork `10.3.0-sc2`, `verify:vendor` CI guard); status comment posted, issue stays open per its own standing-reminder policy. - **CLAUDE.md doc-drift correction:** locale roster count (17→19) and per-locale module count (20→21) were stale relative to `i18n/locales.ts` (the actual SSOT). +- **`pnpm run build` warnings eliminated:** an invalid `[dir:ltr]`/`[dir:rtl]` Tailwind arbitrary variant (compiled to the invalid CSS pseudo-class `:is(dir:ltr)`) replaced with Tailwind's built-in `ltr:`/`rtl:` direction variants; 3 dynamic `import()` calls Rolldown flagged as ineffective (already statically imported elsewhere) converted to static imports. +- **CodeRabbit review-body findings that failed to post inline** (GitHub API error on a rate-limited re-review of PR #274) verified against current code and fixed: `AiProviderCard` a11y (`role="status" aria-live="polite"`) and a genuine CWE-209 stale-request race in `handleTest` (monotonic request-id guard); `ollamaService.ts`'s `plugin_unavailable` branch no longer forwards `LocalServerError.message` directly. ## v1.24.0 Dependency Hygiene + Onboarding + Docs Truth-up (2026-06-21, PR F) diff --git a/CHANGELOG.md b/CHANGELOG.md index eca265cc..b0d5aeeb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.24.1] — 2026-07-28 + +> Local-AI reliability (desktop Ollama/LM Studio/vLLM discovery, misleading browser status badge), +> the AI heuristic-fallback foundation + Outline/Character/World/Plot-Board generators, real +> self-hosted LanguageTool integration, a 20-PR Dependabot backlog triage (16 merged directly, +> 4 closed as superseded after the AI SDK v4 family/biome 2.5.x/dev-tooling-Babel-8 blockers were +> root-caused and fixed), the Issue #60 vendor-fork audit +> closeout, and security/build hardening (`persist-credentials` CWE-522, `ltr`/`rtl` Tailwind fix, +> 3 ineffective dynamic imports, 2 CWE-209 fixes). + ### Added - **Heuristic fallback for Plot-Board "suggest next beat".** Completes offline coverage of the diff --git a/README.md b/README.md index 2f8dd645..b71890c0 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,11 @@ TypeScript 7 (tsgo) Gemini · OpenAI · OpenRouter · Ollama · WebLLM WebGPU · ONNX · Transformers.js - v1.24.0 + v1.24.1 IndexedDB v8 PWA v3.0 - i18n 19 locales — 2806 keys - 5807+ tests / 509 files + i18n 19 locales — 2844 keys + 5807+ tests / 525 files Codecov Coverage License MIT CI Status @@ -351,7 +351,7 @@ One-click encrypted export of your entire project library from **Settings → Da ### 🌐 Full Multi-Language Support -Shipped UI locales with **2806 i18n keys** across all 17 languages — zero hardcoded user-facing strings: +Shipped UI locales with **2844 i18n keys** across all 19 languages — zero hardcoded user-facing strings: - 🇩🇪 **German** (Deutsch) - 🇬🇧 **English** @@ -460,8 +460,8 @@ The Settings → AI panel shows a live GPU status badge with adapter details and | **PDF Export** | jsPDF | Client-side, configurable PDF document generation | | **Document Export** | docx + jszip | Word-compatible `.docx` generation (lazy-loaded) | | **PWA** | Service Worker + Web App Manifest v3 | Offline support, installability, Workbox chunking | -| **i18n** | Custom React Context (`I18nContext.tsx`) | 2806 keys × 19 locales (de/en/es/fr/it + ar/he/fa RTL Beta + ja/zh/pt/el/fi/sv/hu/is/eu Beta); EN fallback; `localStorage` persistence | -| **Testing** | Vitest 4.x (5807+ tests / 509 files) + Playwright E2E | Unit/integration + cross-browser E2E; Stryker mutation (manual workflow) | +| **i18n** | Custom React Context (`I18nContext.tsx`) | 2844 keys × 19 locales (de/en/es/fr/it + ar/he/fa RTL Beta + ja/zh/pt/el/fi/sv/hu/is/eu Beta); EN fallback; `localStorage` persistence | +| **Testing** | Vitest 4.x (5807+ tests / 525 files) + Playwright E2E | Unit/integration + cross-browser E2E; Stryker mutation (manual workflow) | | **Code Quality** | Biome (lint + format) + TypeScript 7 (tsgo) strict | `--error-on-warnings` in CI; zero `any` policy | | **Visualization** | Force-directed graph | Interactive character relationship network | | **Desktop** | Tauri v2 | Cross-platform installer; auto-updater via `latest.json` | @@ -498,7 +498,7 @@ WorldScript-Studio/ │ ├── sw.js # PWA Service Worker │ └── manifest.json # PWA Web App Manifest v3 ├── tests/ -│ ├── unit/ # Vitest unit tests (5807+ tests, 509 files) +│ ├── unit/ # Vitest unit tests (5807+ tests, 525 files) │ │ ├── ai/ # aiSmallModules, aiCoreFallbackPaths │ │ └── settings/ # WebLlmPanel, AiSections │ └── e2e/ # Playwright specs + helpers.ts @@ -656,10 +656,10 @@ The main pipeline is [`.github/workflows/ci.yml`](.github/workflows/ci.yml). Opt | `deploy` | `main` only | GitHub Pages after **`build` + `e2e`** succeed | | `scorecard` | weekly + `main` push | OpenSSF Scorecard — SARIF uploaded to GitHub Code Scanning | -**Current test metrics (2026-06-16):** -- **5807+ unit tests** across **509 test files** — all passing +**Current test metrics (2026-07-28):** +- **5807+ unit tests** across **525 test files** — all passing - Coverage thresholds: lines ≥ 74 · branches ≥ 60 · functions ≥ 67 · statements ≥ 72 — enforced in CI (see Codecov badge for live metrics) -- i18n: **2806 keys × 19 locales** (en/de/fr/es/it + ar/he/fa RTL Beta + ja/zh/pt/el/fi/sv/hu/is/eu Beta) +- i18n: **2844 keys × 19 locales** (en/de/fr/es/it + ar/he/fa RTL Beta + ja/zh/pt/el/fi/sv/hu/is/eu Beta) **CI-cloud-first workflow (recommended):** On constrained hardware run **`pnpm run lint && pnpm run i18n:check && pnpm run typecheck`** locally, then push and let CI handle coverage, E2E, Lighthouse, and Stryker. Authoritative numbers come from CI artifacts (Codecov, JUnit). After CI goes green, update the README badges and `AUDIT.md` quality-gate line from the reported metrics. See **[`docs/CI.md`](docs/CI.md) § Cloud CI-first vs local development** for the full post-merge doc-update checklist. diff --git a/TODO.md b/TODO.md index f73c6794..8beb0173 100644 --- a/TODO.md +++ b/TODO.md @@ -51,12 +51,14 @@ Status: 🔄 in progress | ⬜ open | ✅ done - ✅ **Desktop Ollama/LM Studio/vLLM discovery fixed (#266)** — `vite.config.ts`'s `rollupOptions.external` was unconditionally externalizing `@tauri-apps/*` even for the Tauri desktop build itself, leaving `services/localServerHttp.ts`'s `@tauri-apps/plugin-http` import unresolvable in the packaged `.deb`/`.msi`. Fixed via a shared `isTauriBuild()` check; see the 2026-07-28 update in [ADR 0012](docs/adr/0012-local-server-connectivity-tauri-http.md). - ✅ **Misleading "Ready" status badge for Ollama in the browser fixed (#266)** — the status badge and the desktop-only banner were driven by two unreconciled state signals; badge now shows a distinct "Not available in browser" label. Scan also now prefers native `/api/tags` over the OpenAI-compat shim for Ollama. -- ✅ **Dependabot batch** — 13 of 18 open PRs merged directly (Actions bumps, small JS/dev-tooling patches, Tauri/Rust crates, the tauri-deps group). The remaining 5 all had real breaking-change blockers, root-caused and fixed rather than force-merged or suppressed: - - **#255 / #249 / #253 / #250** (`@ai-sdk/google`/`@ai-sdk/openai`/`@ai-sdk/react`/`ai` major bumps) — `@ai-sdk/google@4` alone emits `LanguageModelV4`, incompatible with the pre-upgrade `ai` package's `LanguageModel` type; root cause was a partial-family upgrade. Fixed by bumping all four together in **PR #275** (`feat/ai-sdk-v4-upgrade`), which supersedes these 4 PRs — closed once #275 merges. +- ✅ **Dependabot batch — 20 PRs resolved (16 merged, 4 closed as superseded)** — 14 were straightforward bumps merged directly (Actions bumps, small JS/dev-tooling patches, Tauri/Rust crates, the tauri-deps group, and a stray `log` crate bump in `/src-tauri`, #246). The remaining 6 all had real breaking-change blockers, root-caused and fixed rather than force-merged or suppressed: + - **#255 / #249 / #253 / #250** (`@ai-sdk/google`/`@ai-sdk/openai`/`@ai-sdk/react`/`ai` major bumps) — `@ai-sdk/google@4` alone emits `LanguageModelV4`, incompatible with the pre-upgrade `ai` package's `LanguageModel` type; root cause was a partial-family upgrade. Fixed by bumping all four together in **PR #275** (`feat/ai-sdk-v4-upgrade`), which supersedes these 4 PRs — closed once #275 merged. - **#252** (`@biomejs/biome` 2.4→2.5) — schema-version mismatch plus 2 real new lint findings (`noUnsafeOptionalChaining` ×4, `noUndeclaredEnvVars` ×21 via `turbo.json` `globalEnv`) fixed with real code changes, no suppressions; pushed directly onto the Dependabot branch. - **#265** (dev-tooling group) — `@babel/core@8` transitively broke `react-docgen@8.0.3`'s Storybook build (`loadPartialConfig` removed); fixed by capping the existing `pnpm-workspace.yaml` override at `<8`, verified with a real `build-storybook` run; pushed directly onto the Dependabot branch. - ✅ **Issue #60 (vendor-fork audit)** — status comment posted confirming the audit is done (fork at `10.3.0-sc2`, `verify:vendor` CI guard); issue stays open per its own "permanent reminder" note. - ✅ **CLAUDE.md locale-count drift fixed** — i18n section undercounted the locale roster (17 vs. the actual 19 — `ru`/`ko` were added in a prior PR but never reflected) and the per-locale module count (20 vs. 21). +- ✅ **`pnpm run build` warnings fixed** — invalid `[dir:ltr]`/`[dir:rtl]` Tailwind arbitrary variant (compiled to the invalid CSS pseudo-class `:is(dir:ltr)`) replaced with the built-in `ltr:`/`rtl:` direction variants; 3 ineffective dynamic `import()` calls (already statically imported elsewhere) converted to static imports. +- ✅ **CodeRabbit findings that failed to post inline on PR #274** — a rate-limited re-review posted 10 findings as review-body text instead of formal threads (GitHub API error). Verified each against current code: 2 already fixed, 5 real (a11y + a genuine CWE-209 stale-request race in `AiProviderCard.handleTest`, an unsafe `LocalServerError.message` passthrough in `ollamaService.ts`, a loose test assertion) fixed with code + dedicated regression tests, 1 already resolved by an earlier commit, 2 judged already-adequately-covered by existing comments. ## Dependency-Hygiene Backlog (carried forward) diff --git a/graphify-out/GRAPH_REPORT.md b/graphify-out/GRAPH_REPORT.md index a6ab4ec5..517a0b45 100644 --- a/graphify-out/GRAPH_REPORT.md +++ b/graphify-out/GRAPH_REPORT.md @@ -1,12 +1,12 @@ -# Graph Report - StoryCraft-Studio (2026-06-24) +# Graph Report - WorldScript-Studio (2026-07-28) ## Corpus Check -- 1161 files · ~1,309,314 words +- 1182 files · ~803,833 words - Verdict: corpus is large enough that graph structure adds value. ## Summary -- 5044 nodes · 8851 edges · 87 communities detected -- Extraction: 76% EXTRACTED · 24% INFERRED · 0% AMBIGUOUS · INFERRED: 2165 edges (avg confidence: 0.8) +- 3739 nodes · 4920 edges · 72 communities detected +- Extraction: 70% EXTRACTED · 30% INFERRED · 0% AMBIGUOUS · INFERRED: 1482 edges (avg confidence: 0.8) - Token cost: 0 input · 0 output ## Community Hubs (Navigation) @@ -39,551 +39,432 @@ - [[_COMMUNITY_Community 26|Community 26]] - [[_COMMUNITY_Community 27|Community 27]] - [[_COMMUNITY_Community 28|Community 28]] +- [[_COMMUNITY_Community 29|Community 29]] - [[_COMMUNITY_Community 30|Community 30]] -- [[_COMMUNITY_Community 32|Community 32]] -- [[_COMMUNITY_Community 33|Community 33]] +- [[_COMMUNITY_Community 31|Community 31]] +- [[_COMMUNITY_Community 34|Community 34]] - [[_COMMUNITY_Community 35|Community 35]] +- [[_COMMUNITY_Community 36|Community 36]] - [[_COMMUNITY_Community 37|Community 37]] - [[_COMMUNITY_Community 38|Community 38]] - [[_COMMUNITY_Community 39|Community 39]] +- [[_COMMUNITY_Community 40|Community 40]] - [[_COMMUNITY_Community 42|Community 42]] -- [[_COMMUNITY_Community 44|Community 44]] +- [[_COMMUNITY_Community 43|Community 43]] - [[_COMMUNITY_Community 45|Community 45]] +- [[_COMMUNITY_Community 46|Community 46]] +- [[_COMMUNITY_Community 47|Community 47]] - [[_COMMUNITY_Community 48|Community 48]] -- [[_COMMUNITY_Community 49|Community 49]] -- [[_COMMUNITY_Community 52|Community 52]] -- [[_COMMUNITY_Community 57|Community 57]] -- [[_COMMUNITY_Community 60|Community 60]] -- [[_COMMUNITY_Community 63|Community 63]] -- [[_COMMUNITY_Community 64|Community 64]] -- [[_COMMUNITY_Community 65|Community 65]] -- [[_COMMUNITY_Community 66|Community 66]] -- [[_COMMUNITY_Community 71|Community 71]] -- [[_COMMUNITY_Community 72|Community 72]] -- [[_COMMUNITY_Community 77|Community 77]] -- [[_COMMUNITY_Community 83|Community 83]] +- [[_COMMUNITY_Community 51|Community 51]] +- [[_COMMUNITY_Community 53|Community 53]] +- [[_COMMUNITY_Community 54|Community 54]] +- [[_COMMUNITY_Community 61|Community 61]] +- [[_COMMUNITY_Community 67|Community 67]] +- [[_COMMUNITY_Community 70|Community 70]] +- [[_COMMUNITY_Community 73|Community 73]] +- [[_COMMUNITY_Community 74|Community 74]] +- [[_COMMUNITY_Community 75|Community 75]] +- [[_COMMUNITY_Community 76|Community 76]] +- [[_COMMUNITY_Community 84|Community 84]] +- [[_COMMUNITY_Community 85|Community 85]] - [[_COMMUNITY_Community 86|Community 86]] -- [[_COMMUNITY_Community 90|Community 90]] -- [[_COMMUNITY_Community 99|Community 99]] -- [[_COMMUNITY_Community 134|Community 134]] -- [[_COMMUNITY_Community 145|Community 145]] -- [[_COMMUNITY_Community 151|Community 151]] -- [[_COMMUNITY_Community 184|Community 184]] -- [[_COMMUNITY_Community 232|Community 232]] -- [[_COMMUNITY_Community 274|Community 274]] -- [[_COMMUNITY_Community 279|Community 279]] -- [[_COMMUNITY_Community 745|Community 745]] -- [[_COMMUNITY_Community 746|Community 746]] -- [[_COMMUNITY_Community 747|Community 747]] -- [[_COMMUNITY_Community 748|Community 748]] -- [[_COMMUNITY_Community 749|Community 749]] -- [[_COMMUNITY_Community 750|Community 750]] -- [[_COMMUNITY_Community 751|Community 751]] -- [[_COMMUNITY_Community 752|Community 752]] -- [[_COMMUNITY_Community 753|Community 753]] -- [[_COMMUNITY_Community 754|Community 754]] -- [[_COMMUNITY_Community 755|Community 755]] -- [[_COMMUNITY_Community 756|Community 756]] -- [[_COMMUNITY_Community 757|Community 757]] -- [[_COMMUNITY_Community 758|Community 758]] -- [[_COMMUNITY_Community 759|Community 759]] -- [[_COMMUNITY_Community 760|Community 760]] -- [[_COMMUNITY_Community 761|Community 761]] -- [[_COMMUNITY_Community 762|Community 762]] -- [[_COMMUNITY_Community 763|Community 763]] -- [[_COMMUNITY_Community 764|Community 764]] -- [[_COMMUNITY_Community 765|Community 765]] -- [[_COMMUNITY_Community 766|Community 766]] -- [[_COMMUNITY_Community 767|Community 767]] -- [[_COMMUNITY_Community 768|Community 768]] -- [[_COMMUNITY_Community 769|Community 769]] +- [[_COMMUNITY_Community 89|Community 89]] +- [[_COMMUNITY_Community 93|Community 93]] +- [[_COMMUNITY_Community 101|Community 101]] +- [[_COMMUNITY_Community 105|Community 105]] +- [[_COMMUNITY_Community 107|Community 107]] +- [[_COMMUNITY_Community 111|Community 111]] +- [[_COMMUNITY_Community 123|Community 123]] +- [[_COMMUNITY_Community 163|Community 163]] +- [[_COMMUNITY_Community 175|Community 175]] +- [[_COMMUNITY_Community 182|Community 182]] +- [[_COMMUNITY_Community 219|Community 219]] +- [[_COMMUNITY_Community 271|Community 271]] +- [[_COMMUNITY_Community 315|Community 315]] +- [[_COMMUNITY_Community 319|Community 319]] ## God Nodes (most connected - your core abstractions) -1. `mt()` - 104 edges -2. `Bv` - 74 edges -3. `fn()` - 63 edges -4. `t()` - 50 edges -5. `Ze()` - 43 edges -6. `wx()` - 41 edges -7. `xA` - 40 edges -8. `CloudSyncBackend` - 39 edges -9. `StorageManager` - 36 edges -10. `tA()` - 34 edges +1. `fn()` - 63 edges +2. `t()` - 42 edges +3. `CloudSyncBackend` - 39 edges +4. `StorageManager` - 36 edges +5. `useTranslation()` - 33 edges +6. `retryFs()` - 31 edges +7. `VoiceCommandService` - 30 edges +8. `useAppDispatch()` - 29 edges +9. `match()` - 27 edges +10. `getItem()` - 24 edges ## Surprising Connections (you probably didn't know these) -- `useTranslation()` --calls--> `IdbUnlockModal()` [INFERRED] - hooks/useTranslation.ts → components/settings/IdbUnlockModal.tsx +- `offlineFallback()` --calls--> `match()` [INFERRED] + public/sw.js → tests/unit/GrammarCheckPanel.test.tsx - `getItem()` --calls--> `readMode()` [INFERRED] features/featureFlags/featureFlagsStorage.ts → components/copilot/CopilotPanel.tsx - `setItem()` --calls--> `writeMode()` [INFERRED] features/featureFlags/featureFlagsStorage.ts → components/copilot/CopilotPanel.tsx -- `Ja()` --calls--> `matches()` [INFERRED] - e2e-deep-report/trace/assets/codeMirrorModule-Ds_H_9Yq.js → tests/unit/ai/localModelStorageService.test.ts -- `stubDownload()` --calls--> `fn()` [INFERRED] - tests/unit/epubApiService.test.ts → stories/PWAComponents.stories.tsx +- `setItem()` --calls--> `enableDebugLogging()` [INFERRED] + features/featureFlags/featureFlagsStorage.ts → services/logger.ts +- `removeItem()` --calls--> `disableDebugLogging()` [INFERRED] + features/featureFlags/featureFlagsStorage.ts → services/logger.ts ## Communities ### Community 0 - "Community 0" Cohesion: 0.01 -Nodes (329): md(), flushMicrotasks(), _0, _2(), A0, a2(), aA(), ab() (+321 more) +Nodes (125): recordLatency(), AiInferenceCacheService, hashKey(), assertCloudAiAllowed(), assertCloudAiAllowedSync(), assertLoraLocalOnly(), _clearPendingRequestsForTest(), createCancellationToken() (+117 more) ### Community 1 - "Community 1" Cohesion: 0.01 -Nodes (132): recordLatency(), AiInferenceCacheService, hashKey(), _cleanupPendingRequest(), _clearPendingRequestsForTest(), binderDepth(), collectSubtreeIds(), createCancellationToken() (+124 more) +Nodes (60): makeContext(), makeContext(), makeDeps(), makeStoreState(), createFakeAdapter(), createFakeDevice(), makeCopilot(), makeContext() (+52 more) ### Community 2 - "Community 2" -Cohesion: 0.01 -Nodes (171): af(), ef(), ff(), Ja(), lf(), mt(), nf(), of() (+163 more) +Cohesion: 0.02 +Nodes (65): AnalyticsBootstrap(), App(), ViewLoader(), useCommandExecutor(), CopilotLauncher(), parseHash(), readCurrentView(), Header() (+57 more) ### Community 3 - "Community 3" -Cohesion: 0.01 -Nodes (98): accessibilityPresetDefaults(), normalizeAccessibilitySettings(), applyPreset(), handleRemoveKey(), handleSaveKey(), handleTestConnection(), CloudSyncBackend, decryptCloudPayload() (+90 more) +Cohesion: 0.02 +Nodes (42): loadAgent(), analyticsPersistenceAllowedNow(), isAnalyticsPersistenceAllowed(), bindAbortSignal(), setRetryFeedback(), CircuitBreaker, loadStoryCodex(), translate() (+34 more) ### Community 4 - "Community 4" -Cohesion: 0.01 -Nodes (80): handleCopyForNotion(), handleDocxImport(), handleExport(), handlePasteImport(), handleBuildLocalRag(), handleWebllmDownload(), isCustomOllamaModel(), analyticsPersistenceAllowedNow() (+72 more) +Cohesion: 0.03 +Nodes (61): getActiveAiMode(), getLocalFallbackModel(), AnalyticsAgent, check(), extractCatalogFlags(), extractDefaultsFromSlice(), extractFlagsFromSlice(), extractHiddenFlags() (+53 more) ### Community 5 - "Community 5" Cohesion: 0.02 -Nodes (92): AdaptiveAiEngine, _clearLatencyHistory(), estimateLatency(), getTaskConfig(), selectModelForBackend(), pipeline(), pipeline(), start() (+84 more) +Nodes (57): glossaryTranslate(), loadCheckpoint(), loadGlossary(), main(), maskPlaceholders(), parseArgs(), restorePlaceholders(), saveCheckpoint() (+49 more) ### Community 6 - "Community 6" Cohesion: 0.03 -Nodes (17): a_(), bh, Dh(), eA(), el(), GE(), Gh(), lv() (+9 more) +Nodes (57): item(), BookPreviewView(), getLocalUser(), getRandomColor(), handleKeyDown(), sanitizeRoomInput(), stripControlChars(), deleteIdb() (+49 more) ### Community 7 - "Community 7" -Cohesion: 0.01 -Nodes (80): categoryFromMessage(), categoryFromStatus(), classificationFor(), classifyAiError(), extractStatus(), getAiErrorMessage(), isOffline(), clampRetryAfter() (+72 more) +Cohesion: 0.03 +Nodes (58): collectSubtreeIds(), installDesktopMenu(), installCloseToTray(), installDesktopTray(), routeTask(), addDebouncedListener(), getLocalFirstHandle(), initAdaptiveAiOnStartup() (+50 more) ### Community 8 - "Community 8" -Cohesion: 0.03 -Nodes (69): FsAssetStore, glossaryTranslate(), loadCheckpoint(), loadGlossary(), main(), maskPlaceholders(), parseArgs(), restorePlaceholders() (+61 more) +Cohesion: 0.06 +Nodes (39): attachCause(), cleanPrompt(), sanitizePromptBlock(), stripControlChars(), handleRemoveKey(), handleSaveKey(), handleTestConnection(), FsAssetStore (+31 more) ### Community 9 - "Community 9" -Cohesion: 0.02 -Nodes (70): item(), clearBenchmarkResults(), getLocalUser(), getRandomColor(), handleKeyDown(), sanitizeRoomInput(), stripControlChars(), deleteIdb() (+62 more) +Cohesion: 0.03 +Nodes (40): handleCopyForNotion(), handleDocxImport(), handleExport(), handlePasteImport(), binderDepth(), handleAddFolder(), handleAddLink(), handleAddNote() (+32 more) ### Community 10 - "Community 10" -Cohesion: 0.02 -Nodes (35): isEcoMode(), generateMessageId(), getWorker(), send(), EcoModeService, FeedbackService, handleEcoToggle(), KokoroTtsEngine (+27 more) +Cohesion: 0.04 +Nodes (65): getOpenRouterFallbackProvider(), getOpenRouterModel(), isCloudOnlyMode(), isOffline(), notifyLocalModelsReady(), shouldRouteLocally(), shouldUseOpenRouter(), _cleanupPendingRequest() (+57 more) ### Community 11 - "Community 11" -Cohesion: 0.02 -Nodes (64): AnalyticsBootstrap(), App(), ViewLoader(), BookPreviewView(), useCommandExecutor(), CopilotLauncher(), Header(), useAppDispatch() (+56 more) +Cohesion: 0.03 +Nodes (48): MockDoc, MockWebrtcProvider, releaseComputeDevice(), decrypt(), decryptJson(), encrypt(), encryptJson(), dbNameForProject() (+40 more) ### Community 12 - "Community 12" -Cohesion: 0.03 -Nodes (97): AiModeIndicator(), getActiveAiMode(), getOpenRouterFallbackProvider(), getOpenRouterModel(), isCloudOnlyMode(), isOffline(), notifyLocalModelsReady(), shouldRouteLocally() (+89 more) +Cohesion: 0.04 +Nodes (16): isEcoMode(), FeedbackService, ConsentRequiredError, createSttEngine(), WebSpeechSttEngine, createTtsEngine(), WebSpeechTtsEngine, createVadEngine() (+8 more) ### Community 13 - "Community 13" -Cohesion: 0.05 -Nodes (53): getLocalFallbackModel(), generateJson(), attachCause(), cleanPrompt(), sanitizePromptBlock(), stripControlChars(), stripJsonFences(), AnalyticsAgent (+45 more) +Cohesion: 0.04 +Nodes (49): createAttentionPipeline(), createComputePipeline(), createKvCachePipeline(), createMlpPipeline(), createSimilarityBuffers(), createSimilarityPipeline(), encodeSimilarityUniforms(), getComputeDevice() (+41 more) ### Community 14 - "Community 14" -Cohesion: 0.03 -Nodes (35): AudioNavigator, getFocusable(), onKeyDown(), onPointerUp(), buildEncodedPayload(), makeCommands(), makeProjectData(), Hb() (+27 more) +Cohesion: 0.04 +Nodes (22): CloudSyncBackend, CloudSyncClient, decryptCloudPayload(), deriveCloudSyncKey(), encryptCloudPayload(), hasMigrationMarker(), legacyDatabaseListed(), migrateLegacyWorldscriptDbIfNeeded() (+14 more) ### Community 15 - "Community 15" -Cohesion: 0.04 -Nodes (61): countWords(), enrichProjectIndex(), extractCharacterNames(), getDb(), indexProject(), listIndexedProjects(), removeProjectIndex(), semanticSearchProjects() (+53 more) +Cohesion: 0.03 +Nodes (30): pipeline(), applyPreset(), async(), close(), isSidebar(), onKey(), onPointerDown(), readMode() (+22 more) ### Community 16 - "Community 16" Cohesion: 0.04 -Nodes (35): assertNoSeriousViolations(), loadAgent(), bindAbortSignal(), setRetryFeedback(), navigateToCollaborationSettings(), connectSrcTokens(), group1(), tauriCsp() (+27 more) +Nodes (26): start(), handleBuildLocalRag(), handleWebllmDownload(), isCustomOllamaModel(), EcoModeService, GpuResourceManager, detectWebGpuSupport(), isAbortError() (+18 more) ### Community 17 - "Community 17" -Cohesion: 0.06 -Nodes (15): bb(), d_, f_, h_, kS(), mc(), ps(), r0() (+7 more) +Cohesion: 0.05 +Nodes (25): CollabEncryptionRequiredError, CollaborationService, resolveWebRtcSignalingUrls(), getDuckDb(), initDuckDb(), isOPFSSupported(), decryptDuckDbData(), encryptDuckDbData() (+17 more) ### Community 18 - "Community 18" -Cohesion: 0.04 -Nodes (39): collect(), buildPaletteCommandModels(), collectAllDefinitions(), resolveTitle(), runCommandById(), DeadLetterQueue, openDlqDb(), storeClear() (+31 more) +Cohesion: 0.05 +Nodes (39): countWords(), enrichProjectIndex(), extractCharacterNames(), getDb(), indexProject(), listIndexedProjects(), removeProjectIndex(), semanticSearchProjects() (+31 more) ### Community 19 - "Community 19" -Cohesion: 0.04 -Nodes (37): createAttentionPipeline(), createComputePipeline(), createKvCachePipeline(), createMlpPipeline(), createSimilarityBuffers(), createSimilarityPipeline(), encodeSimilarityUniforms(), getComputeDevice() (+29 more) +Cohesion: 0.06 +Nodes (17): navigateToCollaborationSettings(), clickNavItem(), ensureBlankProject(), flushWriterDebounce(), seedGeminiApiKey(), selectFirstEnabledWriterSection(), waitForMainChrome(), waitForSpaReady() (+9 more) ### Community 20 - "Community 20" -Cohesion: 0.1 -Nodes (11): bc(), fr(), Go(), jS(), LS, Xd, xn(), aa (+3 more) +Cohesion: 0.06 +Nodes (30): AdaptiveAiEngine, _clearLatencyHistory(), estimateLatency(), getTaskConfig(), selectModelForBackend(), clearBenchmarkResults(), getLastBenchmarkResults(), loadResults() (+22 more) ### Community 21 - "Community 21" Cohesion: 0.07 -Nodes (32): applyPreset(), async(), close(), isSidebar(), onKey(), onPointerDown(), readMode(), writeMode() (+24 more) - -### Community 22 - "Community 22" -Cohesion: 0.06 Nodes (13): createBrowserProForgeCapability(), buildPorts(), runCopilotDiagnostic(), buildNormManuscriptExport(), paginateNormLines(), stripLightMarkdown(), wrapParagraphToLines(), wrapPlainTextToNormLines() (+5 more) -### Community 23 - "Community 23" -Cohesion: 0.11 +### Community 22 - "Community 22" +Cohesion: 0.1 Nodes (1): StorageManager -### Community 24 - "Community 24" +### Community 23 - "Community 23" Cohesion: 0.07 Nodes (16): smallProject(), buildCharacter(), buildLargeManuscript(), buildParagraph(), buildSectionContent(), buildWorld(), countWords(), makeRng() (+8 more) +### Community 24 - "Community 24" +Cohesion: 0.1 +Nodes (20): handleEncryptedLibraryExport(), handleExportSettingsJson(), createImageRegistrar(), esc(), exportEpub(), exportEpubViaApi(), renderBody(), renderLine() (+12 more) + ### Community 25 - "Community 25" -Cohesion: 0.14 -Nodes (21): handleToggle(), handleDelete(), handleFileChange(), activateAdapter(), clearDatasetEntries(), deactivateAdapter(), deleteAdapter(), exportAdapter() (+13 more) +Cohesion: 0.16 +Nodes (23): AiModeIndicator(), isOpenRouterFreeModel(), buildHeaders(), buildMessages(), buildRequestBody(), computeBackoffMs(), delay(), _delayProvider() (+15 more) ### Community 26 - "Community 26" Cohesion: 0.14 -Nodes (15): normalize(), buildExcerpt(), extractCharacters(), extractManuscriptSections(), searchAcrossProjectIndex(), searchAcrossProjects(), normalizeSearch(), scoreAgainstQuery() (+7 more) +Nodes (21): handleToggle(), handleDelete(), handleFileChange(), activateAdapter(), clearDatasetEntries(), deactivateAdapter(), deleteAdapter(), exportAdapter() (+13 more) ### Community 27 - "Community 27" -Cohesion: 0.35 -Nodes (2): cc, Gb() +Cohesion: 0.14 +Nodes (15): normalize(), buildExcerpt(), extractCharacters(), extractManuscriptSections(), searchAcrossProjectIndex(), searchAcrossProjects(), normalizeSearch(), scoreAgainstQuery() (+7 more) ### Community 28 - "Community 28" -Cohesion: 0.17 -Nodes (9): applyTextEdit(), applyReviewEditsToSection(), containsDisallowedControlChar(), isValidRange(), nearestFreeOccurrence(), planAcceptedManuscriptEdits(), validateProposedText(), applyEditsPure() (+1 more) +Cohesion: 0.16 +Nodes (15): collect(), analyze_text(), count_sentences(), count_syllables(), counts_words_chars_and_spaces(), empty_text_is_all_zero(), flesch_score_is_finite_for_real_prose(), run_text_analyze() (+7 more) + +### Community 29 - "Community 29" +Cohesion: 0.11 +Nodes (9): renderSheet(), renderPanel(), componentDidCatch(), render(), renderEdges(), renderPanel(), createHookWrapper(), isDispatcherAction() (+1 more) ### Community 30 - "Community 30" -Cohesion: 0.21 -Nodes (8): classifyDevice(), detectIsMobile(), getBatteryLevel(), getHealthReport(), getMemoryInfo(), getStorageQuotaMb(), classifyVram(), detectWebGpuDetails() +Cohesion: 0.2 +Nodes (14): categoryFromMessage(), categoryFromStatus(), classificationFor(), classifyAiError(), extractStatus(), getAiErrorMessage(), isOffline(), clampRetryAfter() (+6 more) -### Community 32 - "Community 32" +### Community 31 - "Community 31" +Cohesion: 0.17 +Nodes (9): applyTextEdit(), extractCodeBlock(), applyReviewEditsToSection(), containsDisallowedControlChar(), isValidRange(), nearestFreeOccurrence(), planAcceptedManuscriptEdits(), validateProposedText() (+1 more) + +### Community 34 - "Community 34" +Cohesion: 0.2 +Nodes (7): characterHeuristicGenerator(), outlineHeuristicGenerator(), planOutlineBeats(), plotBoardHeuristicGenerator(), clampConfidence(), makeHeuristicResult(), worldHeuristicGenerator() + +### Community 35 - "Community 35" +Cohesion: 0.27 +Nodes (7): assertPermission(), createDeniedConstructor(), createSandboxedRunner(), installRuntimeGuards(), normalizePluginSource(), restoreConstructor(), restoreRuntimeGuards() + +### Community 36 - "Community 36" +Cohesion: 0.22 +Nodes (4): accessibilityPresetDefaults(), normalizeAccessibilitySettings(), applyPreset(), baseSettings() + +### Community 37 - "Community 37" Cohesion: 0.29 Nodes (1): PriorityTaskQueue -### Community 33 - "Community 33" +### Community 38 - "Community 38" +Cohesion: 0.33 +Nodes (1): AudioNavigator + +### Community 39 - "Community 39" Cohesion: 0.25 Nodes (3): useManuscriptLayout(), useMediaQuery(), useResizablePanels() -### Community 35 - "Community 35" +### Community 40 - "Community 40" +Cohesion: 0.32 +Nodes (4): clearServiceWorkerCaches(), deleteAllIndexedDBDatabases(), runWipe(), wipeAllAppData() + +### Community 42 - "Community 42" +Cohesion: 0.43 +Nodes (4): getTransformers(), handleInference(), loadPipeline(), runInference() + +### Community 43 - "Community 43" Cohesion: 0.29 Nodes (5): MockAudioContext, MockBufferSource, MockGain, NonEndingSource, TrackingContext -### Community 37 - "Community 37" +### Community 45 - "Community 45" Cohesion: 0.33 Nodes (3): useSwipeGesture(), useWriterLayout(), useWriterViewContext() -### Community 38 - "Community 38" +### Community 46 - "Community 46" Cohesion: 0.53 Nodes (4): buildWebNNExecutionProviders(), detectWebNN(), isDirectMLAvailable(), isDirectMLHeuristic() -### Community 39 - "Community 39" +### Community 47 - "Community 47" +Cohesion: 0.4 +Nodes (2): getFocusable(), onKeyDown() + +### Community 48 - "Community 48" Cohesion: 0.7 Nodes (4): check_cuda_and_vram(), check_package(), check_python_version(), main() -### Community 42 - "Community 42" +### Community 51 - "Community 51" Cohesion: 0.5 Nodes (3): createStorageMock(), setupStorage(), SpeechSynthesisUtteranceMock -### Community 44 - "Community 44" -Cohesion: 0.4 -Nodes (4): Room, SignalingConn, WebrtcConn, WebrtcProvider - -### Community 45 - "Community 45" +### Community 53 - "Community 53" Cohesion: 0.4 Nodes (2): useDashboardContext(), DashboardHeader() -### Community 48 - "Community 48" -Cohesion: 0.6 -Nodes (4): applyFormula(), computeReadabilitySnapshot(), estimateSyllables(), getSyllablePattern() - -### Community 49 - "Community 49" -Cohesion: 0.5 -Nodes (1): rc +### Community 54 - "Community 54" +Cohesion: 0.4 +Nodes (4): Room, SignalingConn, WebrtcConn, WebrtcProvider -### Community 52 - "Community 52" +### Community 61 - "Community 61" Cohesion: 0.67 Nodes (2): makeConfig(), startPipelinePayload() -### Community 57 - "Community 57" +### Community 67 - "Community 67" Cohesion: 0.67 Nodes (2): make(), noop() -### Community 60 - "Community 60" +### Community 70 - "Community 70" Cohesion: 0.67 Nodes (2): defaultProject(), setProjectData() -### Community 63 - "Community 63" +### Community 73 - "Community 73" Cohesion: 0.83 Nodes (3): makeChars(), makeProject(), makeWorlds() -### Community 64 - "Community 64" +### Community 74 - "Community 74" Cohesion: 0.83 Nodes (3): emptyChars(), emptyWorlds(), makeProject() -### Community 65 - "Community 65" +### Community 75 - "Community 75" Cohesion: 0.5 Nodes (2): ManuscriptDesktopLayout(), useManuscriptViewContext() -### Community 66 - "Community 66" +### Community 76 - "Community 76" Cohesion: 0.5 Nodes (3): AsyncDuckDB, AsyncDuckDBConnection, ConsoleLogger -### Community 71 - "Community 71" +### Community 84 - "Community 84" +Cohesion: 0.67 +Nodes (2): getFocusable(), handleTabKey() + +### Community 85 - "Community 85" Cohesion: 0.67 Nodes (2): getQuestionsForArchetype(), getTemplateForArchetype() -### Community 72 - "Community 72" +### Community 86 - "Community 86" Cohesion: 0.83 Nodes (3): esc(), inline(), renderExportMarkdownToHtml() -### Community 77 - "Community 77" +### Community 89 - "Community 89" +Cohesion: 1.0 +Nodes (2): isTauriBuild(), resolveViteBase() + +### Community 93 - "Community 93" Cohesion: 0.67 Nodes (1): makeSection() -### Community 83 - "Community 83" +### Community 101 - "Community 101" Cohesion: 0.67 Nodes (1): MockGoogleGenAI -### Community 86 - "Community 86" +### Community 105 - "Community 105" Cohesion: 0.67 Nodes (1): makeDeps() -### Community 90 - "Community 90" +### Community 107 - "Community 107" +Cohesion: 1.0 +Nodes (2): fireSwipe(), makePointerEvent() + +### Community 111 - "Community 111" Cohesion: 0.67 Nodes (1): FakeAudioContext -### Community 99 - "Community 99" +### Community 123 - "Community 123" Cohesion: 0.67 Nodes (1): TaskError -### Community 134 - "Community 134" +### Community 163 - "Community 163" Cohesion: 1.0 Nodes (1): MockIntersectionObserver -### Community 145 - "Community 145" +### Community 175 - "Community 175" Cohesion: 1.0 Nodes (1): MockWorker -### Community 151 - "Community 151" +### Community 182 - "Community 182" Cohesion: 1.0 Nodes (1): MockBroadcastChannel -### Community 184 - "Community 184" +### Community 219 - "Community 219" Cohesion: 1.0 Nodes (1): MockIntersectionObserver -### Community 232 - "Community 232" +### Community 271 - "Community 271" Cohesion: 1.0 Nodes (1): MockWorker -### Community 274 - "Community 274" +### Community 315 - "Community 315" Cohesion: 1.0 Nodes (1): FileSystemService -### Community 279 - "Community 279" +### Community 319 - "Community 319" Cohesion: 1.0 Nodes (1): IndexedDBService -### Community 745 - "Community 745" -Cohesion: 1.0 -Nodes (1): Remove ANSI escape codes from text. - -### Community 746 - "Community 746" -Cohesion: 1.0 -Nodes (1): Remove timestamp strings from text. - -### Community 747 - "Community 747" -Cohesion: 1.0 -Nodes (1): Replace long base64 strings with placeholder. - -### Community 748 - "Community 748" -Cohesion: 1.0 -Nodes (1): Remove NPM/pnpm warning lines. - -### Community 749 - "Community 749" -Cohesion: 1.0 -Nodes (1): Remove redundant success messages. - -### Community 750 - "Community 750" -Cohesion: 1.0 -Nodes (1): Apply all preprocessing steps to reduce token payload. - -### Community 751 - "Community 751" -Cohesion: 1.0 -Nodes (1): Extract only error-related sections from log. - -### Community 752 - "Community 752" -Cohesion: 1.0 -Nodes (1): Pydantic models for CI Analyzer structured output. QNBS-v3: These models enforce - -### Community 753 - "Community 753" -Cohesion: 1.0 -Nodes (1): Structured CI error for VS Code problem matcher integration. - -### Community 754 - "Community 754" -Cohesion: 1.0 -Nodes (1): Vitest JSON test result structure. - -### Community 755 - "Community 755" -Cohesion: 1.0 -Nodes (1): Full Vitest JSON report structure. - -### Community 756 - "Community 756" -Cohesion: 1.0 -Nodes (1): Stryker per-file mutation report. - -### Community 757 - "Community 757" -Cohesion: 1.0 -Nodes (1): Full Stryker JSON report structure. - -### Community 758 - "Community 758" -Cohesion: 1.0 -Nodes (1): Initialize OpenRouter client for Poolside Laguna model. - -### Community 759 - "Community 759" -Cohesion: 1.0 -Nodes (1): Analyze Vitest JSON report and raw logs for errors. - -### Community 760 - "Community 760" -Cohesion: 1.0 -Nodes (1): Analyze Stryker JSON report for surviving mutants. - -### Community 761 - "Community 761" -Cohesion: 1.0 -Nodes (1): Send preprocessed errors to LLM for analysis. - -### Community 762 - "Community 762" -Cohesion: 1.0 -Nodes (1): Format errors for VS Code problem matcher. - -### Community 763 - "Community 763" -Cohesion: 1.0 -Nodes (1): Main entry point for CI analyzer. - -### Community 764 - "Community 764" -Cohesion: 1.0 -Nodes (1): Execute gh CLI command and return parsed JSON output. - -### Community 765 - "Community 765" -Cohesion: 1.0 -Nodes (1): Get the ID of the most recent failed CI run. - -### Community 766 - "Community 766" -Cohesion: 1.0 -Nodes (1): Download a specific artifact from a workflow run. - -### Community 767 - "Community 767" -Cohesion: 1.0 -Nodes (1): Get raw logs from a failed workflow run. - -### Community 768 - "Community 768" -Cohesion: 1.0 -Nodes (1): Parse Vitest JSON report for failing tests. - -### Community 769 - "Community 769" -Cohesion: 1.0 -Nodes (1): Parse Stryker JSON report for surviving mutants. - ## Knowledge Gaps -- **54 isolated node(s):** `Emits JSON progress events on each training log step.`, `qb`, `v2`, `MockIntersectionObserver`, `MockWorker` (+49 more) +- **27 isolated node(s):** `Emits JSON progress events on each training log step.`, `MockIntersectionObserver`, `MockWorker`, `MockGoogleGenAI`, `MockBroadcastChannel` (+22 more) These have ≤1 connection - possible missing edges or undocumented components. -- **Thin community `Community 23`** (36 nodes): `storageService.ts`, `StorageManager`, `.clearApiKey()`, `.clearGeminiApiKey()`, `.constructor()`, `.deleteAllBinderAssetsForProject()`, `.deleteBinderAsset()`, `.deleteImage()`, `.deleteProject()`, `.deleteRagVectors()`, `.deleteSnapshot()`, `.deleteStoryCodex()`, `.getApiKey()`, `.getBackend()`, `.getBinderAsset()`, `.getGeminiApiKey()`, `.getImage()`, `.getRagVectors()`, `.getSnapshotData()`, `.getStoryCodex()`, `.hasSavedData()`, `.initializeBackend()`, `.listBinderAssetIds()`, `.listProjects()`, `.listSnapshots()`, `.loadProject()`, `.loadSettings()`, `.saveApiKey()`, `.saveBinderAsset()`, `.saveGeminiApiKey()`, `.saveImage()`, `.saveProject()`, `.saveRagVectors()`, `.saveSettings()`, `.saveSnapshot()`, `.saveStoryCodex()` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 27`** (17 nodes): `cc`, `._applyAttribute()`, `._assert()`, `.constructor()`, `._eof()`, `._isWhitespace()`, `._next()`, `.parse()`, `._peek()`, `._readAttributes()`, `._readIdentifier()`, `._readRegex()`, `._readString()`, `._readStringOrRegex()`, `._skipWhitespace()`, `._throwError()`, `Gb()` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 32`** (10 nodes): `taskQueue.ts`, `PriorityTaskQueue`, `.constructor()`, `.dequeue()`, `.effectivePriority()`, `.enqueue()`, `.peek()`, `.promoteStarvedTasks()`, `.stats()`, `.totalDepth()` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 45`** (5 nodes): `DashboardHeader.tsx`, `DashboardContext.ts`, `useDashboardContext()`, `Chip()`, `DashboardHeader()` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 49`** (4 nodes): `rc`, `.constructor()`, `.toSource()`, `.toString()` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 52`** (4 nodes): `makeConfig()`, `makeReviewItem()`, `startPipelinePayload()`, `proForgeSlice.test.ts` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 57`** (4 nodes): `make()`, `noop()`, `aiRetry.test.ts`, `aiRetry.test.ts` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 60`** (4 nodes): `useDashboard.test.ts`, `defaultProject()`, `defaultSection()`, `setProjectData()` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 65`** (4 nodes): `ManuscriptDesktopLayout.tsx`, `ManuscriptViewContext.ts`, `ManuscriptDesktopLayout()`, `useManuscriptViewContext()` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 71`** (4 nodes): `getAllTemplates()`, `getQuestionsForArchetype()`, `getTemplateForArchetype()`, `characterInterviewTemplates.ts` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 77`** (3 nodes): `makeSection()`, `plotBoardService.test.ts`, `plotBoardService.test.ts` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 83`** (3 nodes): `makeStream()`, `MockGoogleGenAI`, `geminiService.test.ts` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 86`** (3 nodes): `makeDeps()`, `aiSuggestions.test.ts`, `aiSuggestions.test.ts` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 90`** (3 nodes): `useMicLevel.test.ts`, `FakeAudioContext`, `resolveStream()` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 99`** (3 nodes): `types.ts`, `TaskError`, `.constructor()` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 134`** (2 nodes): `MockIntersectionObserver`, `BookPreviewView.test.tsx` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 145`** (2 nodes): `MockWorker`, `duckdbClient.test.ts` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 151`** (2 nodes): `MockBroadcastChannel`, `tabLeaderElection.test.ts` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 184`** (2 nodes): `useBookPreviewView.test.ts`, `MockIntersectionObserver` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 232`** (2 nodes): `workerPool.test.ts`, `MockWorker` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 274`** (2 nodes): `FileSystemService`, `index.ts` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 279`** (2 nodes): `IndexedDBService`, `index.ts` - Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 745`** (1 nodes): `Remove ANSI escape codes from text.` +- **Thin community `Community 22`** (37 nodes): `.initialize()`, `storageService.ts`, `StorageManager`, `.clearApiKey()`, `.clearGeminiApiKey()`, `.constructor()`, `.deleteAllBinderAssetsForProject()`, `.deleteBinderAsset()`, `.deleteImage()`, `.deleteProject()`, `.deleteRagVectors()`, `.deleteSnapshot()`, `.deleteStoryCodex()`, `.getApiKey()`, `.getBackend()`, `.getBinderAsset()`, `.getGeminiApiKey()`, `.getImage()`, `.getRagVectors()`, `.getSnapshotData()`, `.getStoryCodex()`, `.hasSavedData()`, `.initializeBackend()`, `.listBinderAssetIds()`, `.listProjects()`, `.listSnapshots()`, `.loadProject()`, `.loadSettings()`, `.saveApiKey()`, `.saveBinderAsset()`, `.saveGeminiApiKey()`, `.saveImage()`, `.saveProject()`, `.saveRagVectors()`, `.saveSettings()`, `.saveSnapshot()`, `.saveStoryCodex()` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 746`** (1 nodes): `Remove timestamp strings from text.` +- **Thin community `Community 37`** (10 nodes): `taskQueue.ts`, `PriorityTaskQueue`, `.constructor()`, `.dequeue()`, `.effectivePriority()`, `.enqueue()`, `.peek()`, `.promoteStarvedTasks()`, `.stats()`, `.totalDepth()` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 747`** (1 nodes): `Replace long base64 strings with placeholder.` +- **Thin community `Community 38`** (9 nodes): `AudioNavigator`, `.announce()`, `.focusElement()`, `.focusFirstIn()`, `.getFocusedLabel()`, `.nextLandmark()`, `.previousLandmark()`, `.scanLandmarks()`, `audioNavigator.ts` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 748`** (1 nodes): `Remove NPM/pnpm warning lines.` +- **Thin community `Community 47`** (6 nodes): `getFocusable()`, `onKeyDown()`, `onPointerDown()`, `onPointerMove()`, `onPointerUp()`, `BottomSheet.tsx` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 749`** (1 nodes): `Remove redundant success messages.` +- **Thin community `Community 53`** (5 nodes): `DashboardHeader.tsx`, `DashboardContext.ts`, `useDashboardContext()`, `Chip()`, `DashboardHeader()` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 750`** (1 nodes): `Apply all preprocessing steps to reduce token payload.` +- **Thin community `Community 61`** (4 nodes): `makeConfig()`, `makeReviewItem()`, `startPipelinePayload()`, `proForgeSlice.test.ts` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 751`** (1 nodes): `Extract only error-related sections from log.` +- **Thin community `Community 67`** (4 nodes): `make()`, `noop()`, `aiRetry.test.ts`, `aiRetry.test.ts` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 752`** (1 nodes): `Pydantic models for CI Analyzer structured output. QNBS-v3: These models enforce` +- **Thin community `Community 70`** (4 nodes): `useDashboard.test.ts`, `defaultProject()`, `defaultSection()`, `setProjectData()` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 753`** (1 nodes): `Structured CI error for VS Code problem matcher integration.` +- **Thin community `Community 75`** (4 nodes): `ManuscriptDesktopLayout.tsx`, `ManuscriptViewContext.ts`, `ManuscriptDesktopLayout()`, `useManuscriptViewContext()` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 754`** (1 nodes): `Vitest JSON test result structure.` +- **Thin community `Community 84`** (4 nodes): `Drawer.tsx`, `getFocusable()`, `handleEsc()`, `handleTabKey()` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 755`** (1 nodes): `Full Vitest JSON report structure.` +- **Thin community `Community 85`** (4 nodes): `getAllTemplates()`, `getQuestionsForArchetype()`, `getTemplateForArchetype()`, `characterInterviewTemplates.ts` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 756`** (1 nodes): `Stryker per-file mutation report.` +- **Thin community `Community 89`** (3 nodes): `resolveViteBase.ts`, `isTauriBuild()`, `resolveViteBase()` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 757`** (1 nodes): `Full Stryker JSON report structure.` +- **Thin community `Community 93`** (3 nodes): `makeSection()`, `plotBoardService.test.ts`, `plotBoardService.test.ts` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 758`** (1 nodes): `Initialize OpenRouter client for Poolside Laguna model.` +- **Thin community `Community 101`** (3 nodes): `makeStream()`, `MockGoogleGenAI`, `geminiService.test.ts` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 759`** (1 nodes): `Analyze Vitest JSON report and raw logs for errors.` +- **Thin community `Community 105`** (3 nodes): `makeDeps()`, `aiSuggestions.test.ts`, `aiSuggestions.test.ts` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 760`** (1 nodes): `Analyze Stryker JSON report for surviving mutants.` +- **Thin community `Community 107`** (3 nodes): `useSwipeGesture.test.ts`, `fireSwipe()`, `makePointerEvent()` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 761`** (1 nodes): `Send preprocessed errors to LLM for analysis.` +- **Thin community `Community 111`** (3 nodes): `useMicLevel.test.ts`, `FakeAudioContext`, `resolveStream()` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 762`** (1 nodes): `Format errors for VS Code problem matcher.` +- **Thin community `Community 123`** (3 nodes): `types.ts`, `TaskError`, `.constructor()` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 763`** (1 nodes): `Main entry point for CI analyzer.` +- **Thin community `Community 163`** (2 nodes): `MockIntersectionObserver`, `BookPreviewView.test.tsx` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 764`** (1 nodes): `Execute gh CLI command and return parsed JSON output.` +- **Thin community `Community 175`** (2 nodes): `MockWorker`, `duckdbClient.test.ts` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 765`** (1 nodes): `Get the ID of the most recent failed CI run.` +- **Thin community `Community 182`** (2 nodes): `MockBroadcastChannel`, `tabLeaderElection.test.ts` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 766`** (1 nodes): `Download a specific artifact from a workflow run.` +- **Thin community `Community 219`** (2 nodes): `useBookPreviewView.test.ts`, `MockIntersectionObserver` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 767`** (1 nodes): `Get raw logs from a failed workflow run.` +- **Thin community `Community 271`** (2 nodes): `workerPool.test.ts`, `MockWorker` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 768`** (1 nodes): `Parse Vitest JSON report for failing tests.` +- **Thin community `Community 315`** (2 nodes): `FileSystemService`, `index.ts` Too small to be a meaningful cluster - may be noise or needs more connections extracted. -- **Thin community `Community 769`** (1 nodes): `Parse Stryker JSON report for surviving mutants.` +- **Thin community `Community 319`** (2 nodes): `IndexedDBService`, `index.ts` Too small to be a meaningful cluster - may be noise or needs more connections extracted. ## Suggested Questions _Questions this graph is uniquely positioned to answer:_ -- **Why does `mt()` connect `Community 2` to `Community 0`, `Community 1`, `Community 4`, `Community 5`, `Community 6`, `Community 10`, `Community 13`, `Community 14`, `Community 17`, `Community 20`, `Community 21`, `Community 22`?** - _High betweenness centrality (0.082) - this node is a cross-community bridge._ -- **Why does `fn()` connect `Community 7` to `Community 1`, `Community 3`, `Community 8`, `Community 13`, `Community 14`, `Community 21`, `Community 22`?** - _High betweenness centrality (0.054) - this node is a cross-community bridge._ -- **Why does `wx()` connect `Community 0` to `Community 2`, `Community 4`, `Community 8`, `Community 10`, `Community 19`?** - _High betweenness centrality (0.039) - this node is a cross-community bridge._ -- **Are the 87 inferred relationships involving `mt()` (e.g. with `pE()` and `xE()`) actually correct?** - _`mt()` has 87 INFERRED edges - model-reasoned connections that need verification._ +- **Why does `fn()` connect `Community 1` to `Community 0`, `Community 3`, `Community 8`, `Community 15`, `Community 21`, `Community 24`, `Community 29`, `Community 30`?** + _High betweenness centrality (0.062) - this node is a cross-community bridge._ +- **Why does `t()` connect `Community 9` to `Community 2`, `Community 7`, `Community 8`, `Community 15`, `Community 16`, `Community 24`, `Community 25`, `Community 26`, `Community 30`?** + _High betweenness centrality (0.049) - this node is a cross-community bridge._ +- **Why does `useTranslation()` connect `Community 2` to `Community 0`, `Community 25`, `Community 6`?** + _High betweenness centrality (0.030) - this node is a cross-community bridge._ - **Are the 62 inferred relationships involving `fn()` (e.g. with `makeMediaQuery()` and `MockSpeechRecognition()`) actually correct?** _`fn()` has 62 INFERRED edges - model-reasoned connections that need verification._ -- **Are the 49 inferred relationships involving `t()` (e.g. with `.flattenForSingleProject()` and `fr()`) actually correct?** - _`t()` has 49 INFERRED edges - model-reasoned connections that need verification._ -- **What connects `Emits JSON progress events on each training log step.`, `qb`, `v2` to the rest of the system?** - _54 weakly-connected nodes found - possible documentation gaps or missing edges._ \ No newline at end of file +- **Are the 41 inferred relationships involving `t()` (e.g. with `handleSaveKey()` and `handleRemoveKey()`) actually correct?** + _`t()` has 41 INFERRED edges - model-reasoned connections that need verification._ +- **Are the 32 inferred relationships involving `useTranslation()` (e.g. with `ViewLoader()` and `App()`) actually correct?** + _`useTranslation()` has 32 INFERRED edges - model-reasoned connections that need verification._ +- **What connects `Emits JSON progress events on each training log step.`, `MockIntersectionObserver`, `MockWorker` to the rest of the system?** + _27 weakly-connected nodes found - possible documentation gaps or missing edges._ \ No newline at end of file diff --git a/package.json b/package.json index ce938eda..8ff06f88 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "worldscript-studio", "private": true, - "version": "1.24.0", + "version": "1.24.1", "description": "WorldScript Studio — offline-first, AI-powered creative writing application.", "author": "QNBS", "keywords": [ diff --git a/public/sw.js b/public/sw.js index 4077b774..46ea50a5 100644 --- a/public/sw.js +++ b/public/sw.js @@ -5,7 +5,7 @@ // offline fallback, push notifications, share target // ============================================================ -const APP_VERSION = '1.24.0'; +const APP_VERSION = '1.24.1'; const CACHE_STATIC = `worldscript-static-v${APP_VERSION}`; const CACHE_DYNAMIC = `worldscript-dynamic-v${APP_VERSION}`; const CACHE_IMAGES = `worldscript-images-v${APP_VERSION}`; diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index f925981c..d718c13d 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -6593,7 +6593,7 @@ dependencies = [ [[package]] name = "worldscript-studio" -version = "1.24.0" +version = "1.24.1" dependencies = [ "base64 0.22.1", "candle-core", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 76463c1d..f1e8b962 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "worldscript-studio" -version = "1.24.0" +version = "1.24.1" description = "AI-powered creative writing and world-building application" authors = ["QNBS"] license = "MIT" diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 13d8bd24..9b5a9069 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "../node_modules/@tauri-apps/cli/config.schema.json", "productName": "WorldScript Studio", - "version": "1.24.0", + "version": "1.24.1", "identifier": "com.worldscript.studio", "build": { "frontendDist": "../dist",