Centralize all path management via src/config/paths.ts

- Add getPaths() with workspace, scripts, ppt skin/template paths
- Export getWorkspacePath(args?) helper — removes duplicate local functions
  and stale process.cwd()/workspace fallbacks from sqlite, pdf, excel,
  image, pubmed, email, audio-transcribe (7 files)
- weather.ts: replace __dirname-relative scripts path with getPaths().scripts
- Move ppt/ to .smallclaw/skills/presenter/ppt/; update server-v2.ts,
  pptx.ts, pptx_gen.py (argparse --skin-dir/--template-dir)
- Fix PPT skin thumbnail serving: res.sendFile → fs.createReadStream
  (bypasses send module dotfiles restriction for .smallclaw/ paths)
- Fix workspace default: .smallclaw/workspace (was project root workspace/)
- Fix subagent paths to use SMALLCLAW_DATA_DIR env var
- Fix Monaco marked module load failure: restore define.amd on
  DOMContentLoaded after deferred UMD libs (tone, magenta) have loaded
- Add AudioContext resume on first user click (Chrome autoplay policy)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
kim
2026-05-28 16:55:14 +09:00
co-authored by Claude Sonnet 4.6
parent 5608b83850
commit 2d3e33b6b3
15 changed files with 96 additions and 85 deletions
+15 -3
View File
@@ -27,10 +27,22 @@
<script src="https://cdn.jsdelivr.net/combine/npm/tone@14,npm/@magenta/music@1.23.1/es6/core.js,npm/html-midi-player@1.6.0" defer></script>
<script src="https://cdn.jsdelivr.net/npm/monaco-editor@0.45.0/min/vs/loader.js"></script>
<script>
// Prevent deferred UMD libs (tone, @magenta/music, html-midi-player) from
// using Monaco's AMD define() — multiple anonymous define() calls in one
// combined script cause "Can only have one anonymous define call per script".
// Hide AMD from deferred UMD libs (tone, @magenta/music, html-midi-player) so they
// don't call Monaco's anonymous define() — that would cause "Can only have one
// anonymous define call per script". Restore define.amd on DOMContentLoaded (after
// deferred scripts have run as globals) so Monaco's lazy modules like
// vs/base/common/marked/marked can register themselves via AMD as expected.
var _savedDefineAmd = window.define ? window.define.amd : undefined;
if (window.define) window.define.amd = false;
document.addEventListener('DOMContentLoaded', function() {
if (window.define && _savedDefineAmd !== undefined) window.define.amd = _savedDefineAmd;
}, { once: true });
// Resume Tone.js AudioContext on first user gesture (Chrome autoplay policy)
document.addEventListener('click', function() {
if (window.Tone && Tone.context && Tone.context.state !== 'running') Tone.context.resume();
}, { once: true });
</script>
</head>
<body>