diff --git a/CLAUDE.md b/CLAUDE.md index be265e5bd0..7e03baa2fb 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -153,6 +153,12 @@ Trilium provides powerful user scripting capabilities: - Add migration scripts in `apps/server/src/migrations/` - Update schema in `apps/server/src/assets/db/schema.sql` +### Server-Side Static Assets +- Static assets (templates, SQL, translations, etc.) go in `apps/server/src/assets/` +- Access them at runtime via `RESOURCE_DIR` from `apps/server/src/services/resource_dir.ts` (e.g. `path.join(RESOURCE_DIR, "llm", "skills", "file.md")`) +- **Do not use `import.meta.url`/`fileURLToPath`** to resolve file paths — the server is bundled into CJS for production, so `import.meta.url` will not point to the source directory +- **Do not use `__dirname` with relative paths** from source files — after bundling, `__dirname` points to the bundle output, not the original source tree + ## Build System Notes - Uses pnpm for monorepo management - Vite for fast development builds diff --git a/apps/server/src/services/llm/skills/backend_scripting.md b/apps/server/src/assets/llm/skills/backend_scripting.md similarity index 100% rename from apps/server/src/services/llm/skills/backend_scripting.md rename to apps/server/src/assets/llm/skills/backend_scripting.md diff --git a/apps/server/src/services/llm/skills/frontend_scripting.md b/apps/server/src/assets/llm/skills/frontend_scripting.md similarity index 100% rename from apps/server/src/services/llm/skills/frontend_scripting.md rename to apps/server/src/assets/llm/skills/frontend_scripting.md diff --git a/apps/server/src/services/llm/skills/search_syntax.md b/apps/server/src/assets/llm/skills/search_syntax.md similarity index 100% rename from apps/server/src/services/llm/skills/search_syntax.md rename to apps/server/src/assets/llm/skills/search_syntax.md diff --git a/apps/server/src/services/llm/skills/index.ts b/apps/server/src/services/llm/skills/index.ts index a38ee13a81..614820a5fa 100644 --- a/apps/server/src/services/llm/skills/index.ts +++ b/apps/server/src/services/llm/skills/index.ts @@ -4,13 +4,15 @@ * included in the system prompt; full content is fetched via the load_skill tool. */ -import { tool } from "ai"; import { readFile } from "fs/promises"; -import { dirname, join } from "path"; -import { fileURLToPath } from "url"; +import { join } from "path"; + +import { tool } from "ai"; import { z } from "zod"; -const __dirname = dirname(fileURLToPath(import.meta.url)); +import resourceDir from "../../resource_dir.js"; + +const SKILLS_DIR = join(resourceDir.RESOURCE_DIR, "llm", "skills"); interface SkillDefinition { name: string; @@ -41,7 +43,7 @@ async function loadSkillContent(name: string): Promise { if (!skill) { return null; } - return readFile(join(__dirname, skill.file), "utf-8"); + return readFile(join(SKILLS_DIR, skill.file), "utf-8"); } /**