Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion assets/theme-v2/partials/header-nav.html
Original file line numberDiff line numberDiff line change
Expand Up@@ -66,9 +66,9 @@
<a data-nav-link data-toolbox-menu-item data-route="midi" href="toolbox/midi/index.html">MIDI</a>
<a data-nav-link data-toolbox-menu-item data-route="music" href="toolbox/music/index.html">Music</a>
<a data-nav-link data-toolbox-menu-item data-route="particles" href="toolbox/particles/index.html">Particles</a>
<a data-nav-link data-toolbox-menu-item data-route="text-to-speech" href="toolbox/text-to-speech/index.html">Text To Speech</a>
<a data-nav-link data-toolbox-menu-item data-route="videos" href="toolbox/videos/index.html">Videos</a>
<a data-nav-link data-toolbox-menu-item data-route="speech-to-text" href="toolbox/speech-to-text/index.html">Voice Capture</a>
<a data-nav-link data-toolbox-menu-item data-route="text-to-speech" href="toolbox/text-to-speech/index.html">Voice Output</a>
<a data-nav-link data-toolbox-menu-item data-route="voices" href="toolbox/voices/index.html">Voices</a>
</div>
</div>
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
# PR_26171_037 Manual Validation Notes

## Manual Review
- Reviewed the rebuilt active page at `toolbox/text-to-speech/index.html`.
- Confirmed the page uses Theme V2 paths and shared toolbox partials.
- Confirmed the creator workflow exposes text input, voice selection, rate, pitch, volume, Speak, and Stop controls.
- Confirmed the page copy no longer blocks browser preview behind provider-not-implemented behavior.
- Confirmed unavailable speech synthesis has visible actionable status text.
- Confirmed the incorrect `tools/text2speech/` path is absent.

## Environment Note
Audio output was validated through a Playwright Web Speech API stub that records `speak` and `cancel` calls. Physical speaker playback was not audited in this headless validation environment.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
# PR_26171_037 Requirement Checklist

| Requirement | Result | Notes |
| --- | --- | --- |
| Use archive `old_text2speech-V2` as behavior reference only | PASS | Reviewed archive controls and engine behavior; rebuilt in current architecture. |
| Active tool path is `toolbox/text-to-speech/` | PASS | Page and module live under the active toolbox path. |
| Restore browser TTS capability | PASS | Browser preview uses `TextToSpeechEngine` and Web Speech API. |
| Creator can enter text | PASS | Textarea is wired into preview request creation. |
| Creator can select available browser voice | PASS | Voice select is populated from browser voices and handles empty state. |
| Creator can adjust rate, pitch, and volume | PASS | Sliders update visible values and preview request options. |
| Speak/Preview can call browser TTS | PASS | Playwright confirms `speechSynthesis.speak` path is called when available. |
| Stop speech | PASS | Playwright confirms Stop calls cancel. |
| Visible actionable unavailable-engine error | PASS | Missing Web Speech API shows an unavailable status and disables preview actions. |
| Do not block browser TTS behind provider not implemented | PASS | Browser provider is implemented locally; paid providers remain planning only. |
| Remove placeholder-only provider behavior | PASS | Placeholder generation/export shell behavior was removed from active preview path. |
| JavaScript external only | PASS | Page references external scripts only. |
| No inline script/style/event handlers | PASS | Targeted static validation passed. |
| Theme V2 only | PASS | Page references Theme V2 stylesheet and shared partials. |
| No fake generation | PASS | No fake audio generation added. |
| No database tables | PASS | No schema or database table changes made. |
| No external paid provider integration | PASS | Paid provider adapters are planning metadata only. |
| Remove incorrect `tools/text2speech` path | PASS | Static check confirms the path is absent. |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
# PR_26171_037 Validation Report

## Commands
- `node --test tests\tools\Text2SpeechShell.test.mjs` - PASS
- `npx playwright test tests/playwright/tools/TextToSpeechFunctional.spec.mjs --project=playwright --workers=1 --reporter=list` - PASS
- Targeted static Text To Speech validation script - PASS
- `git diff --check` - PASS
- `npm run test:workspace-v2` - FAIL

## Targeted Coverage
- Page loads from `toolbox/text-to-speech/index.html`.
- Text input updates the preview model.
- Voice select renders the available browser voice list and empty/unavailable state.
- Rate, pitch, and volume sliders update visible values.
- Speak calls the browser TTS path when Web Speech API support is available.
- Stop calls `speechSynthesis.cancel()` through the engine.
- Missing Web Speech API support shows a visible actionable error.
- No inline scripts, style blocks, inline styles, or inline event handlers were detected.
- `tools/text2speech/` was absent.

## Project Workspace Command Note
`npm run test:workspace-v2` is the legacy command name for Project Workspace validation. The command ran and failed in `tests/playwright/tools/RootToolsFutureState.spec.mjs` on five broad root/toolbox expectations:
- Root tools list expected `[data-tools-accordion-list] .control-card` entries but found none.
- Common header test did not find `header.site-header` on one active page.
- Learn/tool template/representative tool tests reported failed requests to `http://127.0.0.1:5501/api/...`.

The targeted Text To Speech unit, static, and Playwright validations passed after the functional rebuild.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
# PR_26171_037 Text To Speech Functional Tool Rebuild

## Purpose
- Rebuilt Text To Speech as a functional browser TTS tool in the active path `toolbox/text-to-speech/`.
- Used `archive/v1-v2/tools/old_text2speech-V2` as behavior reference material only.
- Kept browser Web Speech API as the local functional engine for this PR.

## Implementation
- Replaced the placeholder-only Text To Speech page with a Theme V2 / Tool Template V2 aligned workspace surface.
- Added creator text entry, browser voice selection, rate, pitch, and volume controls with visible values.
- Wired Speak and Stop actions through the existing `TextToSpeechEngine` Web Speech API wrapper.
- Added visible actionable unavailable-engine messaging when `speechSynthesis` is not present.
- Removed provider-not-implemented blocking behavior from the browser preview path.
- Kept future paid provider adapters as planning metadata only.
- Updated current toolbox registration and shared navigation labels from `Voice Output` to `Text To Speech`.
- Confirmed `tools/text2speech/` does not exist.

## Scope Notes
- No archived implementation was copied directly.
- No fake generation was added.
- No database tables were added.
- No external paid provider integration was added.
- JavaScript remains external with no inline script blocks, style blocks, inline styles, or inline event handlers.
54 changes: 26 additions & 28 deletions docs_build/dev/reports/codex_changed_files.txt
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,32 @@
# git status --short
M docs_build/dev/reports/codex_changed_files.txt
M docs_build/dev/reports/codex_review.diff
M assets/theme-v2/partials/header-nav.html
M src/dev-runtime/admin/header-nav.local.html
M src/dev-runtime/persistence/tool-repositories/game-journey-mock-repository.js
M src/dev-runtime/server/local-api-router.mjs
M src/shared/toolbox/tool-metadata-inventory.js
M tests/tools/Text2SpeechShell.test.mjs
M toolbox/text-to-speech/index.html
?? docs_build/dev/reports/PR_26171_027-text2speech-rebuild-foundation.md
?? docs_build/dev/reports/PR_26171_029-text2speech-tool-shell.md
?? docs_build/dev/reports/PR_26171_031-text2speech-message-model.md
?? docs_build/dev/reports/PR_26171_033-text2speech-generation-workflow.md
?? docs_build/dev/reports/PR_26171_035-text2speech-provider-adapter-plan.md
?? docs_build/dev/reports/PR_26171_text2speech-manual-validation.md
?? docs_build/dev/reports/PR_26171_text2speech-toolbox-path-correction.md
?? docs_build/dev/reports/PR_26171_text2speech-validation.md
?? docs_build/dev/reports/PR_26171_text2speech-zip-verification.md
?? tests/tools/Text2SpeechShell.test.mjs
?? toolbox/text-to-speech/text2speech.js
M toolbox/text-to-speech/text2speech.js
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-manual-validation.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-requirements.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-validation.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild.md
?? tests/playwright/tools/TextToSpeechFunctional.spec.mjs

# git ls-files --others --exclude-standard
docs_build/dev/reports/PR_26171_027-text2speech-rebuild-foundation.md
docs_build/dev/reports/PR_26171_029-text2speech-tool-shell.md
docs_build/dev/reports/PR_26171_031-text2speech-message-model.md
docs_build/dev/reports/PR_26171_033-text2speech-generation-workflow.md
docs_build/dev/reports/PR_26171_035-text2speech-provider-adapter-plan.md
docs_build/dev/reports/PR_26171_text2speech-manual-validation.md
docs_build/dev/reports/PR_26171_text2speech-toolbox-path-correction.md
docs_build/dev/reports/PR_26171_text2speech-validation.md
docs_build/dev/reports/PR_26171_text2speech-zip-verification.md
tests/tools/Text2SpeechShell.test.mjs
toolbox/text-to-speech/text2speech.js
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-manual-validation.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-requirements.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-validation.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild.md
tests/playwright/tools/TextToSpeechFunctional.spec.mjs

# git diff --stat
docs_build/dev/reports/codex_changed_files.txt | 40 +-
docs_build/dev/reports/codex_review.diff | 1428 ++++++++++++++++++++++--
toolbox/text-to-speech/index.html | 76 +-
3 files changed, 1406 insertions(+), 138 deletions(-)
assets/theme-v2/partials/header-nav.html | 2 +-
src/dev-runtime/admin/header-nav.local.html | 2 +-
.../game-journey-mock-repository.js | 2 +-
src/dev-runtime/server/local-api-router.mjs | 13 +-
src/shared/toolbox/tool-metadata-inventory.js | 27 ++-
tests/tools/Text2SpeechShell.test.mjs | 36 ++-
toolbox/text-to-speech/index.html | 78 ++++---
toolbox/text-to-speech/text2speech.js | 260 +++++++++++++++++----
8 files changed, 309 insertions(+), 111 deletions(-)
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion assets/theme-v2/partials/header-nav.html
Original file line numberDiff line numberDiff line change
Expand Up@@ -66,9 +66,9 @@
<a data-nav-link data-toolbox-menu-item data-route="midi" href="toolbox/midi/index.html">MIDI</a>
<a data-nav-link data-toolbox-menu-item data-route="music" href="toolbox/music/index.html">Music</a>
<a data-nav-link data-toolbox-menu-item data-route="particles" href="toolbox/particles/index.html">Particles</a>
<a data-nav-link data-toolbox-menu-item data-route="text-to-speech" href="toolbox/text-to-speech/index.html">Text To Speech</a>
<a data-nav-link data-toolbox-menu-item data-route="videos" href="toolbox/videos/index.html">Videos</a>
<a data-nav-link data-toolbox-menu-item data-route="speech-to-text" href="toolbox/speech-to-text/index.html">Voice Capture</a>
<a data-nav-link data-toolbox-menu-item data-route="text-to-speech" href="toolbox/text-to-speech/index.html">Voice Output</a>
<a data-nav-link data-toolbox-menu-item data-route="voices" href="toolbox/voices/index.html">Voices</a>
</div>
</div>
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
# PR_26171_037 Manual Validation Notes

## Manual Review
- Reviewed the rebuilt active page at `toolbox/text-to-speech/index.html`.
- Confirmed the page uses Theme V2 paths and shared toolbox partials.
- Confirmed the creator workflow exposes text input, voice selection, rate, pitch, volume, Speak, and Stop controls.
- Confirmed the page copy no longer blocks browser preview behind provider-not-implemented behavior.
- Confirmed unavailable speech synthesis has visible actionable status text.
- Confirmed the incorrect `tools/text2speech/` path is absent.

## Environment Note
Audio output was validated through a Playwright Web Speech API stub that records `speak` and `cancel` calls. Physical speaker playback was not audited in this headless validation environment.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
# PR_26171_037 Requirement Checklist

| Requirement | Result | Notes |
| --- | --- | --- |
| Use archive `old_text2speech-V2` as behavior reference only | PASS | Reviewed archive controls and engine behavior; rebuilt in current architecture. |
| Active tool path is `toolbox/text-to-speech/` | PASS | Page and module live under the active toolbox path. |
| Restore browser TTS capability | PASS | Browser preview uses `TextToSpeechEngine` and Web Speech API. |
| Creator can enter text | PASS | Textarea is wired into preview request creation. |
| Creator can select available browser voice | PASS | Voice select is populated from browser voices and handles empty state. |
| Creator can adjust rate, pitch, and volume | PASS | Sliders update visible values and preview request options. |
| Speak/Preview can call browser TTS | PASS | Playwright confirms `speechSynthesis.speak` path is called when available. |
| Stop speech | PASS | Playwright confirms Stop calls cancel. |
| Visible actionable unavailable-engine error | PASS | Missing Web Speech API shows an unavailable status and disables preview actions. |
| Do not block browser TTS behind provider not implemented | PASS | Browser provider is implemented locally; paid providers remain planning only. |
| Remove placeholder-only provider behavior | PASS | Placeholder generation/export shell behavior was removed from active preview path. |
| JavaScript external only | PASS | Page references external scripts only. |
| No inline script/style/event handlers | PASS | Targeted static validation passed. |
| Theme V2 only | PASS | Page references Theme V2 stylesheet and shared partials. |
| No fake generation | PASS | No fake audio generation added. |
| No database tables | PASS | No schema or database table changes made. |
| No external paid provider integration | PASS | Paid provider adapters are planning metadata only. |
| Remove incorrect `tools/text2speech` path | PASS | Static check confirms the path is absent. |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
# PR_26171_037 Validation Report

## Commands
- `node --test tests\tools\Text2SpeechShell.test.mjs` - PASS
- `npx playwright test tests/playwright/tools/TextToSpeechFunctional.spec.mjs --project=playwright --workers=1 --reporter=list` - PASS
- Targeted static Text To Speech validation script - PASS
- `git diff --check` - PASS
- `npm run test:workspace-v2` - FAIL

## Targeted Coverage
- Page loads from `toolbox/text-to-speech/index.html`.
- Text input updates the preview model.
- Voice select renders the available browser voice list and empty/unavailable state.
- Rate, pitch, and volume sliders update visible values.
- Speak calls the browser TTS path when Web Speech API support is available.
- Stop calls `speechSynthesis.cancel()` through the engine.
- Missing Web Speech API support shows a visible actionable error.
- No inline scripts, style blocks, inline styles, or inline event handlers were detected.
- `tools/text2speech/` was absent.

## Project Workspace Command Note
`npm run test:workspace-v2` is the legacy command name for Project Workspace validation. The command ran and failed in `tests/playwright/tools/RootToolsFutureState.spec.mjs` on five broad root/toolbox expectations:
- Root tools list expected `[data-tools-accordion-list] .control-card` entries but found none.
- Common header test did not find `header.site-header` on one active page.
- Learn/tool template/representative tool tests reported failed requests to `http://127.0.0.1:5501/api/...`.

The targeted Text To Speech unit, static, and Playwright validations passed after the functional rebuild.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
# PR_26171_037 Text To Speech Functional Tool Rebuild

## Purpose
- Rebuilt Text To Speech as a functional browser TTS tool in the active path `toolbox/text-to-speech/`.
- Used `archive/v1-v2/tools/old_text2speech-V2` as behavior reference material only.
- Kept browser Web Speech API as the local functional engine for this PR.

## Implementation
- Replaced the placeholder-only Text To Speech page with a Theme V2 / Tool Template V2 aligned workspace surface.
- Added creator text entry, browser voice selection, rate, pitch, and volume controls with visible values.
- Wired Speak and Stop actions through the existing `TextToSpeechEngine` Web Speech API wrapper.
- Added visible actionable unavailable-engine messaging when `speechSynthesis` is not present.
- Removed provider-not-implemented blocking behavior from the browser preview path.
- Kept future paid provider adapters as planning metadata only.
- Updated current toolbox registration and shared navigation labels from `Voice Output` to `Text To Speech`.
- Confirmed `tools/text2speech/` does not exist.

## Scope Notes
- No archived implementation was copied directly.
- No fake generation was added.
- No database tables were added.
- No external paid provider integration was added.
- JavaScript remains external with no inline script blocks, style blocks, inline styles, or inline event handlers.
54 changes: 26 additions & 28 deletions docs_build/dev/reports/codex_changed_files.txt
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,32 @@
# git status --short
M docs_build/dev/reports/codex_changed_files.txt
M docs_build/dev/reports/codex_review.diff
M assets/theme-v2/partials/header-nav.html
M src/dev-runtime/admin/header-nav.local.html
M src/dev-runtime/persistence/tool-repositories/game-journey-mock-repository.js
M src/dev-runtime/server/local-api-router.mjs
M src/shared/toolbox/tool-metadata-inventory.js
M tests/tools/Text2SpeechShell.test.mjs
M toolbox/text-to-speech/index.html
?? docs_build/dev/reports/PR_26171_027-text2speech-rebuild-foundation.md
?? docs_build/dev/reports/PR_26171_029-text2speech-tool-shell.md
?? docs_build/dev/reports/PR_26171_031-text2speech-message-model.md
?? docs_build/dev/reports/PR_26171_033-text2speech-generation-workflow.md
?? docs_build/dev/reports/PR_26171_035-text2speech-provider-adapter-plan.md
?? docs_build/dev/reports/PR_26171_text2speech-manual-validation.md
?? docs_build/dev/reports/PR_26171_text2speech-toolbox-path-correction.md
?? docs_build/dev/reports/PR_26171_text2speech-validation.md
?? docs_build/dev/reports/PR_26171_text2speech-zip-verification.md
?? tests/tools/Text2SpeechShell.test.mjs
?? toolbox/text-to-speech/text2speech.js
M toolbox/text-to-speech/text2speech.js
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-manual-validation.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-requirements.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-validation.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild.md
?? tests/playwright/tools/TextToSpeechFunctional.spec.mjs

# git ls-files --others --exclude-standard
docs_build/dev/reports/PR_26171_027-text2speech-rebuild-foundation.md
docs_build/dev/reports/PR_26171_029-text2speech-tool-shell.md
docs_build/dev/reports/PR_26171_031-text2speech-message-model.md
docs_build/dev/reports/PR_26171_033-text2speech-generation-workflow.md
docs_build/dev/reports/PR_26171_035-text2speech-provider-adapter-plan.md
docs_build/dev/reports/PR_26171_text2speech-manual-validation.md
docs_build/dev/reports/PR_26171_text2speech-toolbox-path-correction.md
docs_build/dev/reports/PR_26171_text2speech-validation.md
docs_build/dev/reports/PR_26171_text2speech-zip-verification.md
tests/tools/Text2SpeechShell.test.mjs
toolbox/text-to-speech/text2speech.js
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-manual-validation.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-requirements.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-validation.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild.md
tests/playwright/tools/TextToSpeechFunctional.spec.mjs

# git diff --stat
docs_build/dev/reports/codex_changed_files.txt | 40 +-
docs_build/dev/reports/codex_review.diff | 1428 ++++++++++++++++++++++--
toolbox/text-to-speech/index.html | 76 +-
3 files changed, 1406 insertions(+), 138 deletions(-)
assets/theme-v2/partials/header-nav.html | 2 +-
src/dev-runtime/admin/header-nav.local.html | 2 +-
.../game-journey-mock-repository.js | 2 +-
src/dev-runtime/server/local-api-router.mjs | 13 +-
src/shared/toolbox/tool-metadata-inventory.js | 27 ++-
tests/tools/Text2SpeechShell.test.mjs | 36 ++-
toolbox/text-to-speech/index.html | 78 ++++---
toolbox/text-to-speech/text2speech.js | 260 +++++++++++++++++----
8 files changed, 309 insertions(+), 111 deletions(-)
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion assets/theme-v2/partials/header-nav.html
Original file line numberDiff line numberDiff line change
Expand Up@@ -66,9 +66,9 @@
<a data-nav-link data-toolbox-menu-item data-route="midi" href="toolbox/midi/index.html">MIDI</a>
<a data-nav-link data-toolbox-menu-item data-route="music" href="toolbox/music/index.html">Music</a>
<a data-nav-link data-toolbox-menu-item data-route="particles" href="toolbox/particles/index.html">Particles</a>
<a data-nav-link data-toolbox-menu-item data-route="text-to-speech" href="toolbox/text-to-speech/index.html">Text To Speech</a>
<a data-nav-link data-toolbox-menu-item data-route="videos" href="toolbox/videos/index.html">Videos</a>
<a data-nav-link data-toolbox-menu-item data-route="speech-to-text" href="toolbox/speech-to-text/index.html">Voice Capture</a>
<a data-nav-link data-toolbox-menu-item data-route="text-to-speech" href="toolbox/text-to-speech/index.html">Voice Output</a>
<a data-nav-link data-toolbox-menu-item data-route="voices" href="toolbox/voices/index.html">Voices</a>
</div>
</div>
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
# PR_26171_037 Manual Validation Notes

## Manual Review
- Reviewed the rebuilt active page at `toolbox/text-to-speech/index.html`.
- Confirmed the page uses Theme V2 paths and shared toolbox partials.
- Confirmed the creator workflow exposes text input, voice selection, rate, pitch, volume, Speak, and Stop controls.
- Confirmed the page copy no longer blocks browser preview behind provider-not-implemented behavior.
- Confirmed unavailable speech synthesis has visible actionable status text.
- Confirmed the incorrect `tools/text2speech/` path is absent.

## Environment Note
Audio output was validated through a Playwright Web Speech API stub that records `speak` and `cancel` calls. Physical speaker playback was not audited in this headless validation environment.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
# PR_26171_037 Requirement Checklist

| Requirement | Result | Notes |
| --- | --- | --- |
| Use archive `old_text2speech-V2` as behavior reference only | PASS | Reviewed archive controls and engine behavior; rebuilt in current architecture. |
| Active tool path is `toolbox/text-to-speech/` | PASS | Page and module live under the active toolbox path. |
| Restore browser TTS capability | PASS | Browser preview uses `TextToSpeechEngine` and Web Speech API. |
| Creator can enter text | PASS | Textarea is wired into preview request creation. |
| Creator can select available browser voice | PASS | Voice select is populated from browser voices and handles empty state. |
| Creator can adjust rate, pitch, and volume | PASS | Sliders update visible values and preview request options. |
| Speak/Preview can call browser TTS | PASS | Playwright confirms `speechSynthesis.speak` path is called when available. |
| Stop speech | PASS | Playwright confirms Stop calls cancel. |
| Visible actionable unavailable-engine error | PASS | Missing Web Speech API shows an unavailable status and disables preview actions. |
| Do not block browser TTS behind provider not implemented | PASS | Browser provider is implemented locally; paid providers remain planning only. |
| Remove placeholder-only provider behavior | PASS | Placeholder generation/export shell behavior was removed from active preview path. |
| JavaScript external only | PASS | Page references external scripts only. |
| No inline script/style/event handlers | PASS | Targeted static validation passed. |
| Theme V2 only | PASS | Page references Theme V2 stylesheet and shared partials. |
| No fake generation | PASS | No fake audio generation added. |
| No database tables | PASS | No schema or database table changes made. |
| No external paid provider integration | PASS | Paid provider adapters are planning metadata only. |
| Remove incorrect `tools/text2speech` path | PASS | Static check confirms the path is absent. |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
# PR_26171_037 Validation Report

## Commands
- `node --test tests\tools\Text2SpeechShell.test.mjs` - PASS
- `npx playwright test tests/playwright/tools/TextToSpeechFunctional.spec.mjs --project=playwright --workers=1 --reporter=list` - PASS
- Targeted static Text To Speech validation script - PASS
- `git diff --check` - PASS
- `npm run test:workspace-v2` - FAIL

## Targeted Coverage
- Page loads from `toolbox/text-to-speech/index.html`.
- Text input updates the preview model.
- Voice select renders the available browser voice list and empty/unavailable state.
- Rate, pitch, and volume sliders update visible values.
- Speak calls the browser TTS path when Web Speech API support is available.
- Stop calls `speechSynthesis.cancel()` through the engine.
- Missing Web Speech API support shows a visible actionable error.
- No inline scripts, style blocks, inline styles, or inline event handlers were detected.
- `tools/text2speech/` was absent.

## Project Workspace Command Note
`npm run test:workspace-v2` is the legacy command name for Project Workspace validation. The command ran and failed in `tests/playwright/tools/RootToolsFutureState.spec.mjs` on five broad root/toolbox expectations:
- Root tools list expected `[data-tools-accordion-list] .control-card` entries but found none.
- Common header test did not find `header.site-header` on one active page.
- Learn/tool template/representative tool tests reported failed requests to `http://127.0.0.1:5501/api/...`.

The targeted Text To Speech unit, static, and Playwright validations passed after the functional rebuild.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
# PR_26171_037 Text To Speech Functional Tool Rebuild

## Purpose
- Rebuilt Text To Speech as a functional browser TTS tool in the active path `toolbox/text-to-speech/`.
- Used `archive/v1-v2/tools/old_text2speech-V2` as behavior reference material only.
- Kept browser Web Speech API as the local functional engine for this PR.

## Implementation
- Replaced the placeholder-only Text To Speech page with a Theme V2 / Tool Template V2 aligned workspace surface.
- Added creator text entry, browser voice selection, rate, pitch, and volume controls with visible values.
- Wired Speak and Stop actions through the existing `TextToSpeechEngine` Web Speech API wrapper.
- Added visible actionable unavailable-engine messaging when `speechSynthesis` is not present.
- Removed provider-not-implemented blocking behavior from the browser preview path.
- Kept future paid provider adapters as planning metadata only.
- Updated current toolbox registration and shared navigation labels from `Voice Output` to `Text To Speech`.
- Confirmed `tools/text2speech/` does not exist.

## Scope Notes
- No archived implementation was copied directly.
- No fake generation was added.
- No database tables were added.
- No external paid provider integration was added.
- JavaScript remains external with no inline script blocks, style blocks, inline styles, or inline event handlers.
54 changes: 26 additions & 28 deletions docs_build/dev/reports/codex_changed_files.txt
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,32 @@
# git status --short
M docs_build/dev/reports/codex_changed_files.txt
M docs_build/dev/reports/codex_review.diff
M assets/theme-v2/partials/header-nav.html
M src/dev-runtime/admin/header-nav.local.html
M src/dev-runtime/persistence/tool-repositories/game-journey-mock-repository.js
M src/dev-runtime/server/local-api-router.mjs
M src/shared/toolbox/tool-metadata-inventory.js
M tests/tools/Text2SpeechShell.test.mjs
M toolbox/text-to-speech/index.html
?? docs_build/dev/reports/PR_26171_027-text2speech-rebuild-foundation.md
?? docs_build/dev/reports/PR_26171_029-text2speech-tool-shell.md
?? docs_build/dev/reports/PR_26171_031-text2speech-message-model.md
?? docs_build/dev/reports/PR_26171_033-text2speech-generation-workflow.md
?? docs_build/dev/reports/PR_26171_035-text2speech-provider-adapter-plan.md
?? docs_build/dev/reports/PR_26171_text2speech-manual-validation.md
?? docs_build/dev/reports/PR_26171_text2speech-toolbox-path-correction.md
?? docs_build/dev/reports/PR_26171_text2speech-validation.md
?? docs_build/dev/reports/PR_26171_text2speech-zip-verification.md
?? tests/tools/Text2SpeechShell.test.mjs
?? toolbox/text-to-speech/text2speech.js
M toolbox/text-to-speech/text2speech.js
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-manual-validation.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-requirements.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-validation.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild.md
?? tests/playwright/tools/TextToSpeechFunctional.spec.mjs

# git ls-files --others --exclude-standard
docs_build/dev/reports/PR_26171_027-text2speech-rebuild-foundation.md
docs_build/dev/reports/PR_26171_029-text2speech-tool-shell.md
docs_build/dev/reports/PR_26171_031-text2speech-message-model.md
docs_build/dev/reports/PR_26171_033-text2speech-generation-workflow.md
docs_build/dev/reports/PR_26171_035-text2speech-provider-adapter-plan.md
docs_build/dev/reports/PR_26171_text2speech-manual-validation.md
docs_build/dev/reports/PR_26171_text2speech-toolbox-path-correction.md
docs_build/dev/reports/PR_26171_text2speech-validation.md
docs_build/dev/reports/PR_26171_text2speech-zip-verification.md
tests/tools/Text2SpeechShell.test.mjs
toolbox/text-to-speech/text2speech.js
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-manual-validation.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-requirements.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-validation.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild.md
tests/playwright/tools/TextToSpeechFunctional.spec.mjs

# git diff --stat
docs_build/dev/reports/codex_changed_files.txt | 40 +-
docs_build/dev/reports/codex_review.diff | 1428 ++++++++++++++++++++++--
toolbox/text-to-speech/index.html | 76 +-
3 files changed, 1406 insertions(+), 138 deletions(-)
assets/theme-v2/partials/header-nav.html | 2 +-
src/dev-runtime/admin/header-nav.local.html | 2 +-
.../game-journey-mock-repository.js | 2 +-
src/dev-runtime/server/local-api-router.mjs | 13 +-
src/shared/toolbox/tool-metadata-inventory.js | 27 ++-
tests/tools/Text2SpeechShell.test.mjs | 36 ++-
toolbox/text-to-speech/index.html | 78 ++++---
toolbox/text-to-speech/text2speech.js | 260 +++++++++++++++++----
8 files changed, 309 insertions(+), 111 deletions(-)
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion assets/theme-v2/partials/header-nav.html
Original file line numberDiff line numberDiff line change
Expand Up@@ -66,9 +66,9 @@
<a data-nav-link data-toolbox-menu-item data-route="midi" href="toolbox/midi/index.html">MIDI</a>
<a data-nav-link data-toolbox-menu-item data-route="music" href="toolbox/music/index.html">Music</a>
<a data-nav-link data-toolbox-menu-item data-route="particles" href="toolbox/particles/index.html">Particles</a>
<a data-nav-link data-toolbox-menu-item data-route="text-to-speech" href="toolbox/text-to-speech/index.html">Text To Speech</a>
<a data-nav-link data-toolbox-menu-item data-route="videos" href="toolbox/videos/index.html">Videos</a>
<a data-nav-link data-toolbox-menu-item data-route="speech-to-text" href="toolbox/speech-to-text/index.html">Voice Capture</a>
<a data-nav-link data-toolbox-menu-item data-route="text-to-speech" href="toolbox/text-to-speech/index.html">Voice Output</a>
<a data-nav-link data-toolbox-menu-item data-route="voices" href="toolbox/voices/index.html">Voices</a>
</div>
</div>
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
# PR_26171_037 Manual Validation Notes

## Manual Review
- Reviewed the rebuilt active page at `toolbox/text-to-speech/index.html`.
- Confirmed the page uses Theme V2 paths and shared toolbox partials.
- Confirmed the creator workflow exposes text input, voice selection, rate, pitch, volume, Speak, and Stop controls.
- Confirmed the page copy no longer blocks browser preview behind provider-not-implemented behavior.
- Confirmed unavailable speech synthesis has visible actionable status text.
- Confirmed the incorrect `tools/text2speech/` path is absent.

## Environment Note
Audio output was validated through a Playwright Web Speech API stub that records `speak` and `cancel` calls. Physical speaker playback was not audited in this headless validation environment.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
# PR_26171_037 Requirement Checklist

| Requirement | Result | Notes |
| --- | --- | --- |
| Use archive `old_text2speech-V2` as behavior reference only | PASS | Reviewed archive controls and engine behavior; rebuilt in current architecture. |
| Active tool path is `toolbox/text-to-speech/` | PASS | Page and module live under the active toolbox path. |
| Restore browser TTS capability | PASS | Browser preview uses `TextToSpeechEngine` and Web Speech API. |
| Creator can enter text | PASS | Textarea is wired into preview request creation. |
| Creator can select available browser voice | PASS | Voice select is populated from browser voices and handles empty state. |
| Creator can adjust rate, pitch, and volume | PASS | Sliders update visible values and preview request options. |
| Speak/Preview can call browser TTS | PASS | Playwright confirms `speechSynthesis.speak` path is called when available. |
| Stop speech | PASS | Playwright confirms Stop calls cancel. |
| Visible actionable unavailable-engine error | PASS | Missing Web Speech API shows an unavailable status and disables preview actions. |
| Do not block browser TTS behind provider not implemented | PASS | Browser provider is implemented locally; paid providers remain planning only. |
| Remove placeholder-only provider behavior | PASS | Placeholder generation/export shell behavior was removed from active preview path. |
| JavaScript external only | PASS | Page references external scripts only. |
| No inline script/style/event handlers | PASS | Targeted static validation passed. |
| Theme V2 only | PASS | Page references Theme V2 stylesheet and shared partials. |
| No fake generation | PASS | No fake audio generation added. |
| No database tables | PASS | No schema or database table changes made. |
| No external paid provider integration | PASS | Paid provider adapters are planning metadata only. |
| Remove incorrect `tools/text2speech` path | PASS | Static check confirms the path is absent. |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
# PR_26171_037 Validation Report

## Commands
- `node --test tests\tools\Text2SpeechShell.test.mjs` - PASS
- `npx playwright test tests/playwright/tools/TextToSpeechFunctional.spec.mjs --project=playwright --workers=1 --reporter=list` - PASS
- Targeted static Text To Speech validation script - PASS
- `git diff --check` - PASS
- `npm run test:workspace-v2` - FAIL

## Targeted Coverage
- Page loads from `toolbox/text-to-speech/index.html`.
- Text input updates the preview model.
- Voice select renders the available browser voice list and empty/unavailable state.
- Rate, pitch, and volume sliders update visible values.
- Speak calls the browser TTS path when Web Speech API support is available.
- Stop calls `speechSynthesis.cancel()` through the engine.
- Missing Web Speech API support shows a visible actionable error.
- No inline scripts, style blocks, inline styles, or inline event handlers were detected.
- `tools/text2speech/` was absent.

## Project Workspace Command Note
`npm run test:workspace-v2` is the legacy command name for Project Workspace validation. The command ran and failed in `tests/playwright/tools/RootToolsFutureState.spec.mjs` on five broad root/toolbox expectations:
- Root tools list expected `[data-tools-accordion-list] .control-card` entries but found none.
- Common header test did not find `header.site-header` on one active page.
- Learn/tool template/representative tool tests reported failed requests to `http://127.0.0.1:5501/api/...`.

The targeted Text To Speech unit, static, and Playwright validations passed after the functional rebuild.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
# PR_26171_037 Text To Speech Functional Tool Rebuild

## Purpose
- Rebuilt Text To Speech as a functional browser TTS tool in the active path `toolbox/text-to-speech/`.
- Used `archive/v1-v2/tools/old_text2speech-V2` as behavior reference material only.
- Kept browser Web Speech API as the local functional engine for this PR.

## Implementation
- Replaced the placeholder-only Text To Speech page with a Theme V2 / Tool Template V2 aligned workspace surface.
- Added creator text entry, browser voice selection, rate, pitch, and volume controls with visible values.
- Wired Speak and Stop actions through the existing `TextToSpeechEngine` Web Speech API wrapper.
- Added visible actionable unavailable-engine messaging when `speechSynthesis` is not present.
- Removed provider-not-implemented blocking behavior from the browser preview path.
- Kept future paid provider adapters as planning metadata only.
- Updated current toolbox registration and shared navigation labels from `Voice Output` to `Text To Speech`.
- Confirmed `tools/text2speech/` does not exist.

## Scope Notes
- No archived implementation was copied directly.
- No fake generation was added.
- No database tables were added.
- No external paid provider integration was added.
- JavaScript remains external with no inline script blocks, style blocks, inline styles, or inline event handlers.
54 changes: 26 additions & 28 deletions docs_build/dev/reports/codex_changed_files.txt
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,32 @@
# git status --short
M docs_build/dev/reports/codex_changed_files.txt
M docs_build/dev/reports/codex_review.diff
M assets/theme-v2/partials/header-nav.html
M src/dev-runtime/admin/header-nav.local.html
M src/dev-runtime/persistence/tool-repositories/game-journey-mock-repository.js
M src/dev-runtime/server/local-api-router.mjs
M src/shared/toolbox/tool-metadata-inventory.js
M tests/tools/Text2SpeechShell.test.mjs
M toolbox/text-to-speech/index.html
?? docs_build/dev/reports/PR_26171_027-text2speech-rebuild-foundation.md
?? docs_build/dev/reports/PR_26171_029-text2speech-tool-shell.md
?? docs_build/dev/reports/PR_26171_031-text2speech-message-model.md
?? docs_build/dev/reports/PR_26171_033-text2speech-generation-workflow.md
?? docs_build/dev/reports/PR_26171_035-text2speech-provider-adapter-plan.md
?? docs_build/dev/reports/PR_26171_text2speech-manual-validation.md
?? docs_build/dev/reports/PR_26171_text2speech-toolbox-path-correction.md
?? docs_build/dev/reports/PR_26171_text2speech-validation.md
?? docs_build/dev/reports/PR_26171_text2speech-zip-verification.md
?? tests/tools/Text2SpeechShell.test.mjs
?? toolbox/text-to-speech/text2speech.js
M toolbox/text-to-speech/text2speech.js
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-manual-validation.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-requirements.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-validation.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild.md
?? tests/playwright/tools/TextToSpeechFunctional.spec.mjs

# git ls-files --others --exclude-standard
docs_build/dev/reports/PR_26171_027-text2speech-rebuild-foundation.md
docs_build/dev/reports/PR_26171_029-text2speech-tool-shell.md
docs_build/dev/reports/PR_26171_031-text2speech-message-model.md
docs_build/dev/reports/PR_26171_033-text2speech-generation-workflow.md
docs_build/dev/reports/PR_26171_035-text2speech-provider-adapter-plan.md
docs_build/dev/reports/PR_26171_text2speech-manual-validation.md
docs_build/dev/reports/PR_26171_text2speech-toolbox-path-correction.md
docs_build/dev/reports/PR_26171_text2speech-validation.md
docs_build/dev/reports/PR_26171_text2speech-zip-verification.md
tests/tools/Text2SpeechShell.test.mjs
toolbox/text-to-speech/text2speech.js
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-manual-validation.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-requirements.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-validation.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild.md
tests/playwright/tools/TextToSpeechFunctional.spec.mjs

# git diff --stat
docs_build/dev/reports/codex_changed_files.txt | 40 +-
docs_build/dev/reports/codex_review.diff | 1428 ++++++++++++++++++++++--
toolbox/text-to-speech/index.html | 76 +-
3 files changed, 1406 insertions(+), 138 deletions(-)
assets/theme-v2/partials/header-nav.html | 2 +-
src/dev-runtime/admin/header-nav.local.html | 2 +-
.../game-journey-mock-repository.js | 2 +-
src/dev-runtime/server/local-api-router.mjs | 13 +-
src/shared/toolbox/tool-metadata-inventory.js | 27 ++-
tests/tools/Text2SpeechShell.test.mjs | 36 ++-
toolbox/text-to-speech/index.html | 78 ++++---
toolbox/text-to-speech/text2speech.js | 260 +++++++++++++++++----
8 files changed, 309 insertions(+), 111 deletions(-)
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion assets/theme-v2/partials/header-nav.html
Original file line numberDiff line numberDiff line change
Expand Up@@ -66,9 +66,9 @@
<a data-nav-link data-toolbox-menu-item data-route="midi" href="toolbox/midi/index.html">MIDI</a>
<a data-nav-link data-toolbox-menu-item data-route="music" href="toolbox/music/index.html">Music</a>
<a data-nav-link data-toolbox-menu-item data-route="particles" href="toolbox/particles/index.html">Particles</a>
<a data-nav-link data-toolbox-menu-item data-route="text-to-speech" href="toolbox/text-to-speech/index.html">Text To Speech</a>
<a data-nav-link data-toolbox-menu-item data-route="videos" href="toolbox/videos/index.html">Videos</a>
<a data-nav-link data-toolbox-menu-item data-route="speech-to-text" href="toolbox/speech-to-text/index.html">Voice Capture</a>
<a data-nav-link data-toolbox-menu-item data-route="text-to-speech" href="toolbox/text-to-speech/index.html">Voice Output</a>
<a data-nav-link data-toolbox-menu-item data-route="voices" href="toolbox/voices/index.html">Voices</a>
</div>
</div>
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
# PR_26171_037 Manual Validation Notes

## Manual Review
- Reviewed the rebuilt active page at `toolbox/text-to-speech/index.html`.
- Confirmed the page uses Theme V2 paths and shared toolbox partials.
- Confirmed the creator workflow exposes text input, voice selection, rate, pitch, volume, Speak, and Stop controls.
- Confirmed the page copy no longer blocks browser preview behind provider-not-implemented behavior.
- Confirmed unavailable speech synthesis has visible actionable status text.
- Confirmed the incorrect `tools/text2speech/` path is absent.

## Environment Note
Audio output was validated through a Playwright Web Speech API stub that records `speak` and `cancel` calls. Physical speaker playback was not audited in this headless validation environment.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
# PR_26171_037 Requirement Checklist

| Requirement | Result | Notes |
| --- | --- | --- |
| Use archive `old_text2speech-V2` as behavior reference only | PASS | Reviewed archive controls and engine behavior; rebuilt in current architecture. |
| Active tool path is `toolbox/text-to-speech/` | PASS | Page and module live under the active toolbox path. |
| Restore browser TTS capability | PASS | Browser preview uses `TextToSpeechEngine` and Web Speech API. |
| Creator can enter text | PASS | Textarea is wired into preview request creation. |
| Creator can select available browser voice | PASS | Voice select is populated from browser voices and handles empty state. |
| Creator can adjust rate, pitch, and volume | PASS | Sliders update visible values and preview request options. |
| Speak/Preview can call browser TTS | PASS | Playwright confirms `speechSynthesis.speak` path is called when available. |
| Stop speech | PASS | Playwright confirms Stop calls cancel. |
| Visible actionable unavailable-engine error | PASS | Missing Web Speech API shows an unavailable status and disables preview actions. |
| Do not block browser TTS behind provider not implemented | PASS | Browser provider is implemented locally; paid providers remain planning only. |
| Remove placeholder-only provider behavior | PASS | Placeholder generation/export shell behavior was removed from active preview path. |
| JavaScript external only | PASS | Page references external scripts only. |
| No inline script/style/event handlers | PASS | Targeted static validation passed. |
| Theme V2 only | PASS | Page references Theme V2 stylesheet and shared partials. |
| No fake generation | PASS | No fake audio generation added. |
| No database tables | PASS | No schema or database table changes made. |
| No external paid provider integration | PASS | Paid provider adapters are planning metadata only. |
| Remove incorrect `tools/text2speech` path | PASS | Static check confirms the path is absent. |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
# PR_26171_037 Validation Report

## Commands
- `node --test tests\tools\Text2SpeechShell.test.mjs` - PASS
- `npx playwright test tests/playwright/tools/TextToSpeechFunctional.spec.mjs --project=playwright --workers=1 --reporter=list` - PASS
- Targeted static Text To Speech validation script - PASS
- `git diff --check` - PASS
- `npm run test:workspace-v2` - FAIL

## Targeted Coverage
- Page loads from `toolbox/text-to-speech/index.html`.
- Text input updates the preview model.
- Voice select renders the available browser voice list and empty/unavailable state.
- Rate, pitch, and volume sliders update visible values.
- Speak calls the browser TTS path when Web Speech API support is available.
- Stop calls `speechSynthesis.cancel()` through the engine.
- Missing Web Speech API support shows a visible actionable error.
- No inline scripts, style blocks, inline styles, or inline event handlers were detected.
- `tools/text2speech/` was absent.

## Project Workspace Command Note
`npm run test:workspace-v2` is the legacy command name for Project Workspace validation. The command ran and failed in `tests/playwright/tools/RootToolsFutureState.spec.mjs` on five broad root/toolbox expectations:
- Root tools list expected `[data-tools-accordion-list] .control-card` entries but found none.
- Common header test did not find `header.site-header` on one active page.
- Learn/tool template/representative tool tests reported failed requests to `http://127.0.0.1:5501/api/...`.

The targeted Text To Speech unit, static, and Playwright validations passed after the functional rebuild.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
# PR_26171_037 Text To Speech Functional Tool Rebuild

## Purpose
- Rebuilt Text To Speech as a functional browser TTS tool in the active path `toolbox/text-to-speech/`.
- Used `archive/v1-v2/tools/old_text2speech-V2` as behavior reference material only.
- Kept browser Web Speech API as the local functional engine for this PR.

## Implementation
- Replaced the placeholder-only Text To Speech page with a Theme V2 / Tool Template V2 aligned workspace surface.
- Added creator text entry, browser voice selection, rate, pitch, and volume controls with visible values.
- Wired Speak and Stop actions through the existing `TextToSpeechEngine` Web Speech API wrapper.
- Added visible actionable unavailable-engine messaging when `speechSynthesis` is not present.
- Removed provider-not-implemented blocking behavior from the browser preview path.
- Kept future paid provider adapters as planning metadata only.
- Updated current toolbox registration and shared navigation labels from `Voice Output` to `Text To Speech`.
- Confirmed `tools/text2speech/` does not exist.

## Scope Notes
- No archived implementation was copied directly.
- No fake generation was added.
- No database tables were added.
- No external paid provider integration was added.
- JavaScript remains external with no inline script blocks, style blocks, inline styles, or inline event handlers.
54 changes: 26 additions & 28 deletions docs_build/dev/reports/codex_changed_files.txt
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,32 @@
# git status --short
M docs_build/dev/reports/codex_changed_files.txt
M docs_build/dev/reports/codex_review.diff
M assets/theme-v2/partials/header-nav.html
M src/dev-runtime/admin/header-nav.local.html
M src/dev-runtime/persistence/tool-repositories/game-journey-mock-repository.js
M src/dev-runtime/server/local-api-router.mjs
M src/shared/toolbox/tool-metadata-inventory.js
M tests/tools/Text2SpeechShell.test.mjs
M toolbox/text-to-speech/index.html
?? docs_build/dev/reports/PR_26171_027-text2speech-rebuild-foundation.md
?? docs_build/dev/reports/PR_26171_029-text2speech-tool-shell.md
?? docs_build/dev/reports/PR_26171_031-text2speech-message-model.md
?? docs_build/dev/reports/PR_26171_033-text2speech-generation-workflow.md
?? docs_build/dev/reports/PR_26171_035-text2speech-provider-adapter-plan.md
?? docs_build/dev/reports/PR_26171_text2speech-manual-validation.md
?? docs_build/dev/reports/PR_26171_text2speech-toolbox-path-correction.md
?? docs_build/dev/reports/PR_26171_text2speech-validation.md
?? docs_build/dev/reports/PR_26171_text2speech-zip-verification.md
?? tests/tools/Text2SpeechShell.test.mjs
?? toolbox/text-to-speech/text2speech.js
M toolbox/text-to-speech/text2speech.js
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-manual-validation.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-requirements.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-validation.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild.md
?? tests/playwright/tools/TextToSpeechFunctional.spec.mjs

# git ls-files --others --exclude-standard
docs_build/dev/reports/PR_26171_027-text2speech-rebuild-foundation.md
docs_build/dev/reports/PR_26171_029-text2speech-tool-shell.md
docs_build/dev/reports/PR_26171_031-text2speech-message-model.md
docs_build/dev/reports/PR_26171_033-text2speech-generation-workflow.md
docs_build/dev/reports/PR_26171_035-text2speech-provider-adapter-plan.md
docs_build/dev/reports/PR_26171_text2speech-manual-validation.md
docs_build/dev/reports/PR_26171_text2speech-toolbox-path-correction.md
docs_build/dev/reports/PR_26171_text2speech-validation.md
docs_build/dev/reports/PR_26171_text2speech-zip-verification.md
tests/tools/Text2SpeechShell.test.mjs
toolbox/text-to-speech/text2speech.js
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-manual-validation.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-requirements.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-validation.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild.md
tests/playwright/tools/TextToSpeechFunctional.spec.mjs

# git diff --stat
docs_build/dev/reports/codex_changed_files.txt | 40 +-
docs_build/dev/reports/codex_review.diff | 1428 ++++++++++++++++++++++--
toolbox/text-to-speech/index.html | 76 +-
3 files changed, 1406 insertions(+), 138 deletions(-)
assets/theme-v2/partials/header-nav.html | 2 +-
src/dev-runtime/admin/header-nav.local.html | 2 +-
.../game-journey-mock-repository.js | 2 +-
src/dev-runtime/server/local-api-router.mjs | 13 +-
src/shared/toolbox/tool-metadata-inventory.js | 27 ++-
tests/tools/Text2SpeechShell.test.mjs | 36 ++-
toolbox/text-to-speech/index.html | 78 ++++---
toolbox/text-to-speech/text2speech.js | 260 +++++++++++++++++----
8 files changed, 309 insertions(+), 111 deletions(-)
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion assets/theme-v2/partials/header-nav.html
Original file line numberDiff line numberDiff line change
Expand Up@@ -66,9 +66,9 @@
<a data-nav-link data-toolbox-menu-item data-route="midi" href="toolbox/midi/index.html">MIDI</a>
<a data-nav-link data-toolbox-menu-item data-route="music" href="toolbox/music/index.html">Music</a>
<a data-nav-link data-toolbox-menu-item data-route="particles" href="toolbox/particles/index.html">Particles</a>
<a data-nav-link data-toolbox-menu-item data-route="text-to-speech" href="toolbox/text-to-speech/index.html">Text To Speech</a>
<a data-nav-link data-toolbox-menu-item data-route="videos" href="toolbox/videos/index.html">Videos</a>
<a data-nav-link data-toolbox-menu-item data-route="speech-to-text" href="toolbox/speech-to-text/index.html">Voice Capture</a>
<a data-nav-link data-toolbox-menu-item data-route="text-to-speech" href="toolbox/text-to-speech/index.html">Voice Output</a>
<a data-nav-link data-toolbox-menu-item data-route="voices" href="toolbox/voices/index.html">Voices</a>
</div>
</div>
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
# PR_26171_037 Manual Validation Notes

## Manual Review
- Reviewed the rebuilt active page at `toolbox/text-to-speech/index.html`.
- Confirmed the page uses Theme V2 paths and shared toolbox partials.
- Confirmed the creator workflow exposes text input, voice selection, rate, pitch, volume, Speak, and Stop controls.
- Confirmed the page copy no longer blocks browser preview behind provider-not-implemented behavior.
- Confirmed unavailable speech synthesis has visible actionable status text.
- Confirmed the incorrect `tools/text2speech/` path is absent.

## Environment Note
Audio output was validated through a Playwright Web Speech API stub that records `speak` and `cancel` calls. Physical speaker playback was not audited in this headless validation environment.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
# PR_26171_037 Requirement Checklist

| Requirement | Result | Notes |
| --- | --- | --- |
| Use archive `old_text2speech-V2` as behavior reference only | PASS | Reviewed archive controls and engine behavior; rebuilt in current architecture. |
| Active tool path is `toolbox/text-to-speech/` | PASS | Page and module live under the active toolbox path. |
| Restore browser TTS capability | PASS | Browser preview uses `TextToSpeechEngine` and Web Speech API. |
| Creator can enter text | PASS | Textarea is wired into preview request creation. |
| Creator can select available browser voice | PASS | Voice select is populated from browser voices and handles empty state. |
| Creator can adjust rate, pitch, and volume | PASS | Sliders update visible values and preview request options. |
| Speak/Preview can call browser TTS | PASS | Playwright confirms `speechSynthesis.speak` path is called when available. |
| Stop speech | PASS | Playwright confirms Stop calls cancel. |
| Visible actionable unavailable-engine error | PASS | Missing Web Speech API shows an unavailable status and disables preview actions. |
| Do not block browser TTS behind provider not implemented | PASS | Browser provider is implemented locally; paid providers remain planning only. |
| Remove placeholder-only provider behavior | PASS | Placeholder generation/export shell behavior was removed from active preview path. |
| JavaScript external only | PASS | Page references external scripts only. |
| No inline script/style/event handlers | PASS | Targeted static validation passed. |
| Theme V2 only | PASS | Page references Theme V2 stylesheet and shared partials. |
| No fake generation | PASS | No fake audio generation added. |
| No database tables | PASS | No schema or database table changes made. |
| No external paid provider integration | PASS | Paid provider adapters are planning metadata only. |
| Remove incorrect `tools/text2speech` path | PASS | Static check confirms the path is absent. |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
# PR_26171_037 Validation Report

## Commands
- `node --test tests\tools\Text2SpeechShell.test.mjs` - PASS
- `npx playwright test tests/playwright/tools/TextToSpeechFunctional.spec.mjs --project=playwright --workers=1 --reporter=list` - PASS
- Targeted static Text To Speech validation script - PASS
- `git diff --check` - PASS
- `npm run test:workspace-v2` - FAIL

## Targeted Coverage
- Page loads from `toolbox/text-to-speech/index.html`.
- Text input updates the preview model.
- Voice select renders the available browser voice list and empty/unavailable state.
- Rate, pitch, and volume sliders update visible values.
- Speak calls the browser TTS path when Web Speech API support is available.
- Stop calls `speechSynthesis.cancel()` through the engine.
- Missing Web Speech API support shows a visible actionable error.
- No inline scripts, style blocks, inline styles, or inline event handlers were detected.
- `tools/text2speech/` was absent.

## Project Workspace Command Note
`npm run test:workspace-v2` is the legacy command name for Project Workspace validation. The command ran and failed in `tests/playwright/tools/RootToolsFutureState.spec.mjs` on five broad root/toolbox expectations:
- Root tools list expected `[data-tools-accordion-list] .control-card` entries but found none.
- Common header test did not find `header.site-header` on one active page.
- Learn/tool template/representative tool tests reported failed requests to `http://127.0.0.1:5501/api/...`.

The targeted Text To Speech unit, static, and Playwright validations passed after the functional rebuild.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
# PR_26171_037 Text To Speech Functional Tool Rebuild

## Purpose
- Rebuilt Text To Speech as a functional browser TTS tool in the active path `toolbox/text-to-speech/`.
- Used `archive/v1-v2/tools/old_text2speech-V2` as behavior reference material only.
- Kept browser Web Speech API as the local functional engine for this PR.

## Implementation
- Replaced the placeholder-only Text To Speech page with a Theme V2 / Tool Template V2 aligned workspace surface.
- Added creator text entry, browser voice selection, rate, pitch, and volume controls with visible values.
- Wired Speak and Stop actions through the existing `TextToSpeechEngine` Web Speech API wrapper.
- Added visible actionable unavailable-engine messaging when `speechSynthesis` is not present.
- Removed provider-not-implemented blocking behavior from the browser preview path.
- Kept future paid provider adapters as planning metadata only.
- Updated current toolbox registration and shared navigation labels from `Voice Output` to `Text To Speech`.
- Confirmed `tools/text2speech/` does not exist.

## Scope Notes
- No archived implementation was copied directly.
- No fake generation was added.
- No database tables were added.
- No external paid provider integration was added.
- JavaScript remains external with no inline script blocks, style blocks, inline styles, or inline event handlers.
54 changes: 26 additions & 28 deletions docs_build/dev/reports/codex_changed_files.txt
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,32 @@
# git status --short
M docs_build/dev/reports/codex_changed_files.txt
M docs_build/dev/reports/codex_review.diff
M assets/theme-v2/partials/header-nav.html
M src/dev-runtime/admin/header-nav.local.html
M src/dev-runtime/persistence/tool-repositories/game-journey-mock-repository.js
M src/dev-runtime/server/local-api-router.mjs
M src/shared/toolbox/tool-metadata-inventory.js
M tests/tools/Text2SpeechShell.test.mjs
M toolbox/text-to-speech/index.html
?? docs_build/dev/reports/PR_26171_027-text2speech-rebuild-foundation.md
?? docs_build/dev/reports/PR_26171_029-text2speech-tool-shell.md
?? docs_build/dev/reports/PR_26171_031-text2speech-message-model.md
?? docs_build/dev/reports/PR_26171_033-text2speech-generation-workflow.md
?? docs_build/dev/reports/PR_26171_035-text2speech-provider-adapter-plan.md
?? docs_build/dev/reports/PR_26171_text2speech-manual-validation.md
?? docs_build/dev/reports/PR_26171_text2speech-toolbox-path-correction.md
?? docs_build/dev/reports/PR_26171_text2speech-validation.md
?? docs_build/dev/reports/PR_26171_text2speech-zip-verification.md
?? tests/tools/Text2SpeechShell.test.mjs
?? toolbox/text-to-speech/text2speech.js
M toolbox/text-to-speech/text2speech.js
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-manual-validation.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-requirements.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-validation.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild.md
?? tests/playwright/tools/TextToSpeechFunctional.spec.mjs

# git ls-files --others --exclude-standard
docs_build/dev/reports/PR_26171_027-text2speech-rebuild-foundation.md
docs_build/dev/reports/PR_26171_029-text2speech-tool-shell.md
docs_build/dev/reports/PR_26171_031-text2speech-message-model.md
docs_build/dev/reports/PR_26171_033-text2speech-generation-workflow.md
docs_build/dev/reports/PR_26171_035-text2speech-provider-adapter-plan.md
docs_build/dev/reports/PR_26171_text2speech-manual-validation.md
docs_build/dev/reports/PR_26171_text2speech-toolbox-path-correction.md
docs_build/dev/reports/PR_26171_text2speech-validation.md
docs_build/dev/reports/PR_26171_text2speech-zip-verification.md
tests/tools/Text2SpeechShell.test.mjs
toolbox/text-to-speech/text2speech.js
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-manual-validation.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-requirements.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-validation.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild.md
tests/playwright/tools/TextToSpeechFunctional.spec.mjs

# git diff --stat
docs_build/dev/reports/codex_changed_files.txt | 40 +-
docs_build/dev/reports/codex_review.diff | 1428 ++++++++++++++++++++++--
toolbox/text-to-speech/index.html | 76 +-
3 files changed, 1406 insertions(+), 138 deletions(-)
assets/theme-v2/partials/header-nav.html | 2 +-
src/dev-runtime/admin/header-nav.local.html | 2 +-
.../game-journey-mock-repository.js | 2 +-
src/dev-runtime/server/local-api-router.mjs | 13 +-
src/shared/toolbox/tool-metadata-inventory.js | 27 ++-
tests/tools/Text2SpeechShell.test.mjs | 36 ++-
toolbox/text-to-speech/index.html | 78 ++++---
toolbox/text-to-speech/text2speech.js | 260 +++++++++++++++++----
8 files changed, 309 insertions(+), 111 deletions(-)
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion assets/theme-v2/partials/header-nav.html
Original file line numberDiff line numberDiff line change
Expand Up@@ -66,9 +66,9 @@
<a data-nav-link data-toolbox-menu-item data-route="midi" href="toolbox/midi/index.html">MIDI</a>
<a data-nav-link data-toolbox-menu-item data-route="music" href="toolbox/music/index.html">Music</a>
<a data-nav-link data-toolbox-menu-item data-route="particles" href="toolbox/particles/index.html">Particles</a>
<a data-nav-link data-toolbox-menu-item data-route="text-to-speech" href="toolbox/text-to-speech/index.html">Text To Speech</a>
<a data-nav-link data-toolbox-menu-item data-route="videos" href="toolbox/videos/index.html">Videos</a>
<a data-nav-link data-toolbox-menu-item data-route="speech-to-text" href="toolbox/speech-to-text/index.html">Voice Capture</a>
<a data-nav-link data-toolbox-menu-item data-route="text-to-speech" href="toolbox/text-to-speech/index.html">Voice Output</a>
<a data-nav-link data-toolbox-menu-item data-route="voices" href="toolbox/voices/index.html">Voices</a>
</div>
</div>
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
# PR_26171_037 Manual Validation Notes

## Manual Review
- Reviewed the rebuilt active page at `toolbox/text-to-speech/index.html`.
- Confirmed the page uses Theme V2 paths and shared toolbox partials.
- Confirmed the creator workflow exposes text input, voice selection, rate, pitch, volume, Speak, and Stop controls.
- Confirmed the page copy no longer blocks browser preview behind provider-not-implemented behavior.
- Confirmed unavailable speech synthesis has visible actionable status text.
- Confirmed the incorrect `tools/text2speech/` path is absent.

## Environment Note
Audio output was validated through a Playwright Web Speech API stub that records `speak` and `cancel` calls. Physical speaker playback was not audited in this headless validation environment.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
# PR_26171_037 Requirement Checklist

| Requirement | Result | Notes |
| --- | --- | --- |
| Use archive `old_text2speech-V2` as behavior reference only | PASS | Reviewed archive controls and engine behavior; rebuilt in current architecture. |
| Active tool path is `toolbox/text-to-speech/` | PASS | Page and module live under the active toolbox path. |
| Restore browser TTS capability | PASS | Browser preview uses `TextToSpeechEngine` and Web Speech API. |
| Creator can enter text | PASS | Textarea is wired into preview request creation. |
| Creator can select available browser voice | PASS | Voice select is populated from browser voices and handles empty state. |
| Creator can adjust rate, pitch, and volume | PASS | Sliders update visible values and preview request options. |
| Speak/Preview can call browser TTS | PASS | Playwright confirms `speechSynthesis.speak` path is called when available. |
| Stop speech | PASS | Playwright confirms Stop calls cancel. |
| Visible actionable unavailable-engine error | PASS | Missing Web Speech API shows an unavailable status and disables preview actions. |
| Do not block browser TTS behind provider not implemented | PASS | Browser provider is implemented locally; paid providers remain planning only. |
| Remove placeholder-only provider behavior | PASS | Placeholder generation/export shell behavior was removed from active preview path. |
| JavaScript external only | PASS | Page references external scripts only. |
| No inline script/style/event handlers | PASS | Targeted static validation passed. |
| Theme V2 only | PASS | Page references Theme V2 stylesheet and shared partials. |
| No fake generation | PASS | No fake audio generation added. |
| No database tables | PASS | No schema or database table changes made. |
| No external paid provider integration | PASS | Paid provider adapters are planning metadata only. |
| Remove incorrect `tools/text2speech` path | PASS | Static check confirms the path is absent. |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
# PR_26171_037 Validation Report

## Commands
- `node --test tests\tools\Text2SpeechShell.test.mjs` - PASS
- `npx playwright test tests/playwright/tools/TextToSpeechFunctional.spec.mjs --project=playwright --workers=1 --reporter=list` - PASS
- Targeted static Text To Speech validation script - PASS
- `git diff --check` - PASS
- `npm run test:workspace-v2` - FAIL

## Targeted Coverage
- Page loads from `toolbox/text-to-speech/index.html`.
- Text input updates the preview model.
- Voice select renders the available browser voice list and empty/unavailable state.
- Rate, pitch, and volume sliders update visible values.
- Speak calls the browser TTS path when Web Speech API support is available.
- Stop calls `speechSynthesis.cancel()` through the engine.
- Missing Web Speech API support shows a visible actionable error.
- No inline scripts, style blocks, inline styles, or inline event handlers were detected.
- `tools/text2speech/` was absent.

## Project Workspace Command Note
`npm run test:workspace-v2` is the legacy command name for Project Workspace validation. The command ran and failed in `tests/playwright/tools/RootToolsFutureState.spec.mjs` on five broad root/toolbox expectations:
- Root tools list expected `[data-tools-accordion-list] .control-card` entries but found none.
- Common header test did not find `header.site-header` on one active page.
- Learn/tool template/representative tool tests reported failed requests to `http://127.0.0.1:5501/api/...`.

The targeted Text To Speech unit, static, and Playwright validations passed after the functional rebuild.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
# PR_26171_037 Text To Speech Functional Tool Rebuild

## Purpose
- Rebuilt Text To Speech as a functional browser TTS tool in the active path `toolbox/text-to-speech/`.
- Used `archive/v1-v2/tools/old_text2speech-V2` as behavior reference material only.
- Kept browser Web Speech API as the local functional engine for this PR.

## Implementation
- Replaced the placeholder-only Text To Speech page with a Theme V2 / Tool Template V2 aligned workspace surface.
- Added creator text entry, browser voice selection, rate, pitch, and volume controls with visible values.
- Wired Speak and Stop actions through the existing `TextToSpeechEngine` Web Speech API wrapper.
- Added visible actionable unavailable-engine messaging when `speechSynthesis` is not present.
- Removed provider-not-implemented blocking behavior from the browser preview path.
- Kept future paid provider adapters as planning metadata only.
- Updated current toolbox registration and shared navigation labels from `Voice Output` to `Text To Speech`.
- Confirmed `tools/text2speech/` does not exist.

## Scope Notes
- No archived implementation was copied directly.
- No fake generation was added.
- No database tables were added.
- No external paid provider integration was added.
- JavaScript remains external with no inline script blocks, style blocks, inline styles, or inline event handlers.
54 changes: 26 additions & 28 deletions docs_build/dev/reports/codex_changed_files.txt
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,32 @@
# git status --short
M docs_build/dev/reports/codex_changed_files.txt
M docs_build/dev/reports/codex_review.diff
M assets/theme-v2/partials/header-nav.html
M src/dev-runtime/admin/header-nav.local.html
M src/dev-runtime/persistence/tool-repositories/game-journey-mock-repository.js
M src/dev-runtime/server/local-api-router.mjs
M src/shared/toolbox/tool-metadata-inventory.js
M tests/tools/Text2SpeechShell.test.mjs
M toolbox/text-to-speech/index.html
?? docs_build/dev/reports/PR_26171_027-text2speech-rebuild-foundation.md
?? docs_build/dev/reports/PR_26171_029-text2speech-tool-shell.md
?? docs_build/dev/reports/PR_26171_031-text2speech-message-model.md
?? docs_build/dev/reports/PR_26171_033-text2speech-generation-workflow.md
?? docs_build/dev/reports/PR_26171_035-text2speech-provider-adapter-plan.md
?? docs_build/dev/reports/PR_26171_text2speech-manual-validation.md
?? docs_build/dev/reports/PR_26171_text2speech-toolbox-path-correction.md
?? docs_build/dev/reports/PR_26171_text2speech-validation.md
?? docs_build/dev/reports/PR_26171_text2speech-zip-verification.md
?? tests/tools/Text2SpeechShell.test.mjs
?? toolbox/text-to-speech/text2speech.js
M toolbox/text-to-speech/text2speech.js
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-manual-validation.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-requirements.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-validation.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild.md
?? tests/playwright/tools/TextToSpeechFunctional.spec.mjs

# git ls-files --others --exclude-standard
docs_build/dev/reports/PR_26171_027-text2speech-rebuild-foundation.md
docs_build/dev/reports/PR_26171_029-text2speech-tool-shell.md
docs_build/dev/reports/PR_26171_031-text2speech-message-model.md
docs_build/dev/reports/PR_26171_033-text2speech-generation-workflow.md
docs_build/dev/reports/PR_26171_035-text2speech-provider-adapter-plan.md
docs_build/dev/reports/PR_26171_text2speech-manual-validation.md
docs_build/dev/reports/PR_26171_text2speech-toolbox-path-correction.md
docs_build/dev/reports/PR_26171_text2speech-validation.md
docs_build/dev/reports/PR_26171_text2speech-zip-verification.md
tests/tools/Text2SpeechShell.test.mjs
toolbox/text-to-speech/text2speech.js
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-manual-validation.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-requirements.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-validation.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild.md
tests/playwright/tools/TextToSpeechFunctional.spec.mjs

# git diff --stat
docs_build/dev/reports/codex_changed_files.txt | 40 +-
docs_build/dev/reports/codex_review.diff | 1428 ++++++++++++++++++++++--
toolbox/text-to-speech/index.html | 76 +-
3 files changed, 1406 insertions(+), 138 deletions(-)
assets/theme-v2/partials/header-nav.html | 2 +-
src/dev-runtime/admin/header-nav.local.html | 2 +-
.../game-journey-mock-repository.js | 2 +-
src/dev-runtime/server/local-api-router.mjs | 13 +-
src/shared/toolbox/tool-metadata-inventory.js | 27 ++-
tests/tools/Text2SpeechShell.test.mjs | 36 ++-
toolbox/text-to-speech/index.html | 78 ++++---
toolbox/text-to-speech/text2speech.js | 260 +++++++++++++++++----
8 files changed, 309 insertions(+), 111 deletions(-)
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion assets/theme-v2/partials/header-nav.html
Original file line numberDiff line numberDiff line change
Expand Up@@ -66,9 +66,9 @@
<a data-nav-link data-toolbox-menu-item data-route="midi" href="toolbox/midi/index.html">MIDI</a>
<a data-nav-link data-toolbox-menu-item data-route="music" href="toolbox/music/index.html">Music</a>
<a data-nav-link data-toolbox-menu-item data-route="particles" href="toolbox/particles/index.html">Particles</a>
<a data-nav-link data-toolbox-menu-item data-route="text-to-speech" href="toolbox/text-to-speech/index.html">Text To Speech</a>
<a data-nav-link data-toolbox-menu-item data-route="videos" href="toolbox/videos/index.html">Videos</a>
<a data-nav-link data-toolbox-menu-item data-route="speech-to-text" href="toolbox/speech-to-text/index.html">Voice Capture</a>
<a data-nav-link data-toolbox-menu-item data-route="text-to-speech" href="toolbox/text-to-speech/index.html">Voice Output</a>
<a data-nav-link data-toolbox-menu-item data-route="voices" href="toolbox/voices/index.html">Voices</a>
</div>
</div>
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
# PR_26171_037 Manual Validation Notes

## Manual Review
- Reviewed the rebuilt active page at `toolbox/text-to-speech/index.html`.
- Confirmed the page uses Theme V2 paths and shared toolbox partials.
- Confirmed the creator workflow exposes text input, voice selection, rate, pitch, volume, Speak, and Stop controls.
- Confirmed the page copy no longer blocks browser preview behind provider-not-implemented behavior.
- Confirmed unavailable speech synthesis has visible actionable status text.
- Confirmed the incorrect `tools/text2speech/` path is absent.

## Environment Note
Audio output was validated through a Playwright Web Speech API stub that records `speak` and `cancel` calls. Physical speaker playback was not audited in this headless validation environment.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
# PR_26171_037 Requirement Checklist

| Requirement | Result | Notes |
| --- | --- | --- |
| Use archive `old_text2speech-V2` as behavior reference only | PASS | Reviewed archive controls and engine behavior; rebuilt in current architecture. |
| Active tool path is `toolbox/text-to-speech/` | PASS | Page and module live under the active toolbox path. |
| Restore browser TTS capability | PASS | Browser preview uses `TextToSpeechEngine` and Web Speech API. |
| Creator can enter text | PASS | Textarea is wired into preview request creation. |
| Creator can select available browser voice | PASS | Voice select is populated from browser voices and handles empty state. |
| Creator can adjust rate, pitch, and volume | PASS | Sliders update visible values and preview request options. |
| Speak/Preview can call browser TTS | PASS | Playwright confirms `speechSynthesis.speak` path is called when available. |
| Stop speech | PASS | Playwright confirms Stop calls cancel. |
| Visible actionable unavailable-engine error | PASS | Missing Web Speech API shows an unavailable status and disables preview actions. |
| Do not block browser TTS behind provider not implemented | PASS | Browser provider is implemented locally; paid providers remain planning only. |
| Remove placeholder-only provider behavior | PASS | Placeholder generation/export shell behavior was removed from active preview path. |
| JavaScript external only | PASS | Page references external scripts only. |
| No inline script/style/event handlers | PASS | Targeted static validation passed. |
| Theme V2 only | PASS | Page references Theme V2 stylesheet and shared partials. |
| No fake generation | PASS | No fake audio generation added. |
| No database tables | PASS | No schema or database table changes made. |
| No external paid provider integration | PASS | Paid provider adapters are planning metadata only. |
| Remove incorrect `tools/text2speech` path | PASS | Static check confirms the path is absent. |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
# PR_26171_037 Validation Report

## Commands
- `node --test tests\tools\Text2SpeechShell.test.mjs` - PASS
- `npx playwright test tests/playwright/tools/TextToSpeechFunctional.spec.mjs --project=playwright --workers=1 --reporter=list` - PASS
- Targeted static Text To Speech validation script - PASS
- `git diff --check` - PASS
- `npm run test:workspace-v2` - FAIL

## Targeted Coverage
- Page loads from `toolbox/text-to-speech/index.html`.
- Text input updates the preview model.
- Voice select renders the available browser voice list and empty/unavailable state.
- Rate, pitch, and volume sliders update visible values.
- Speak calls the browser TTS path when Web Speech API support is available.
- Stop calls `speechSynthesis.cancel()` through the engine.
- Missing Web Speech API support shows a visible actionable error.
- No inline scripts, style blocks, inline styles, or inline event handlers were detected.
- `tools/text2speech/` was absent.

## Project Workspace Command Note
`npm run test:workspace-v2` is the legacy command name for Project Workspace validation. The command ran and failed in `tests/playwright/tools/RootToolsFutureState.spec.mjs` on five broad root/toolbox expectations:
- Root tools list expected `[data-tools-accordion-list] .control-card` entries but found none.
- Common header test did not find `header.site-header` on one active page.
- Learn/tool template/representative tool tests reported failed requests to `http://127.0.0.1:5501/api/...`.

The targeted Text To Speech unit, static, and Playwright validations passed after the functional rebuild.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
# PR_26171_037 Text To Speech Functional Tool Rebuild

## Purpose
- Rebuilt Text To Speech as a functional browser TTS tool in the active path `toolbox/text-to-speech/`.
- Used `archive/v1-v2/tools/old_text2speech-V2` as behavior reference material only.
- Kept browser Web Speech API as the local functional engine for this PR.

## Implementation
- Replaced the placeholder-only Text To Speech page with a Theme V2 / Tool Template V2 aligned workspace surface.
- Added creator text entry, browser voice selection, rate, pitch, and volume controls with visible values.
- Wired Speak and Stop actions through the existing `TextToSpeechEngine` Web Speech API wrapper.
- Added visible actionable unavailable-engine messaging when `speechSynthesis` is not present.
- Removed provider-not-implemented blocking behavior from the browser preview path.
- Kept future paid provider adapters as planning metadata only.
- Updated current toolbox registration and shared navigation labels from `Voice Output` to `Text To Speech`.
- Confirmed `tools/text2speech/` does not exist.

## Scope Notes
- No archived implementation was copied directly.
- No fake generation was added.
- No database tables were added.
- No external paid provider integration was added.
- JavaScript remains external with no inline script blocks, style blocks, inline styles, or inline event handlers.
54 changes: 26 additions & 28 deletions docs_build/dev/reports/codex_changed_files.txt
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,32 @@
# git status --short
M docs_build/dev/reports/codex_changed_files.txt
M docs_build/dev/reports/codex_review.diff
M assets/theme-v2/partials/header-nav.html
M src/dev-runtime/admin/header-nav.local.html
M src/dev-runtime/persistence/tool-repositories/game-journey-mock-repository.js
M src/dev-runtime/server/local-api-router.mjs
M src/shared/toolbox/tool-metadata-inventory.js
M tests/tools/Text2SpeechShell.test.mjs
M toolbox/text-to-speech/index.html
?? docs_build/dev/reports/PR_26171_027-text2speech-rebuild-foundation.md
?? docs_build/dev/reports/PR_26171_029-text2speech-tool-shell.md
?? docs_build/dev/reports/PR_26171_031-text2speech-message-model.md
?? docs_build/dev/reports/PR_26171_033-text2speech-generation-workflow.md
?? docs_build/dev/reports/PR_26171_035-text2speech-provider-adapter-plan.md
?? docs_build/dev/reports/PR_26171_text2speech-manual-validation.md
?? docs_build/dev/reports/PR_26171_text2speech-toolbox-path-correction.md
?? docs_build/dev/reports/PR_26171_text2speech-validation.md
?? docs_build/dev/reports/PR_26171_text2speech-zip-verification.md
?? tests/tools/Text2SpeechShell.test.mjs
?? toolbox/text-to-speech/text2speech.js
M toolbox/text-to-speech/text2speech.js
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-manual-validation.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-requirements.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-validation.md
?? docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild.md
?? tests/playwright/tools/TextToSpeechFunctional.spec.mjs

# git ls-files --others --exclude-standard
docs_build/dev/reports/PR_26171_027-text2speech-rebuild-foundation.md
docs_build/dev/reports/PR_26171_029-text2speech-tool-shell.md
docs_build/dev/reports/PR_26171_031-text2speech-message-model.md
docs_build/dev/reports/PR_26171_033-text2speech-generation-workflow.md
docs_build/dev/reports/PR_26171_035-text2speech-provider-adapter-plan.md
docs_build/dev/reports/PR_26171_text2speech-manual-validation.md
docs_build/dev/reports/PR_26171_text2speech-toolbox-path-correction.md
docs_build/dev/reports/PR_26171_text2speech-validation.md
docs_build/dev/reports/PR_26171_text2speech-zip-verification.md
tests/tools/Text2SpeechShell.test.mjs
toolbox/text-to-speech/text2speech.js
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-manual-validation.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-requirements.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild-validation.md
docs_build/dev/reports/PR_26171_037-text2speech-functional-tool-rebuild.md
tests/playwright/tools/TextToSpeechFunctional.spec.mjs

# git diff --stat
docs_build/dev/reports/codex_changed_files.txt | 40 +-
docs_build/dev/reports/codex_review.diff | 1428 ++++++++++++++++++++++--
toolbox/text-to-speech/index.html | 76 +-
3 files changed, 1406 insertions(+), 138 deletions(-)
assets/theme-v2/partials/header-nav.html | 2 +-
src/dev-runtime/admin/header-nav.local.html | 2 +-
.../game-journey-mock-repository.js | 2 +-
src/dev-runtime/server/local-api-router.mjs | 13 +-
src/shared/toolbox/tool-metadata-inventory.js | 27 ++-
tests/tools/Text2SpeechShell.test.mjs | 36 ++-
toolbox/text-to-speech/index.html | 78 ++++---
toolbox/text-to-speech/text2speech.js | 260 +++++++++++++++++----
8 files changed, 309 insertions(+), 111 deletions(-)
Loading
Loading