@bitcobblers/wod-wiki-tools 0.36.2134 → 0.36.2135

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/bin/wod.cjs +274 -69
  2. package/dist/bin/wod.cjs.map +1 -1
  3. package/dist/bin/wod.mjs +5 -14
  4. package/dist/bin/wod.mjs.map +1 -1
  5. package/dist/{chunk-EUQWEX6Z.mjs → chunk-CYKNTEGY.mjs} +3 -3
  6. package/dist/chunk-CYKNTEGY.mjs.map +1 -0
  7. package/dist/{compiler-KT6P3AC6.mjs → chunk-FZKXOYMJ.mjs} +4 -5
  8. package/dist/chunk-FZKXOYMJ.mjs.map +1 -0
  9. package/dist/{chunk-32FASQP5.mjs → chunk-MA6BBTWC.mjs} +54 -12
  10. package/dist/chunk-MA6BBTWC.mjs.map +1 -0
  11. package/dist/{chunk-B3QJYJVI.mjs → chunk-OTJAPVT2.mjs} +217 -52
  12. package/dist/chunk-OTJAPVT2.mjs.map +1 -0
  13. package/dist/{chunk-K3GZZFAC.mjs → chunk-V23POHG2.mjs} +10 -9
  14. package/dist/chunk-V23POHG2.mjs.map +1 -0
  15. package/dist/compiler-CTPLIZJK.mjs +9 -0
  16. package/dist/compiler-CTPLIZJK.mjs.map +1 -0
  17. package/dist/index.cjs +274 -58
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.cts +3 -1
  20. package/dist/index.d.ts +3 -1
  21. package/dist/index.mjs +5 -4
  22. package/dist/server/app.cjs +7 -6
  23. package/dist/server/app.cjs.map +1 -1
  24. package/dist/server/app.mjs +1 -1
  25. package/dist/server-JXECWS4A.mjs +11 -0
  26. package/dist/{server-3TJZDKQC.mjs.map → server-JXECWS4A.mjs.map} +1 -1
  27. package/dist/web/playground/assets/main-Bod1taHc.js +188 -0
  28. package/dist/web/playground/assets/{statementBuilderFlow-DXlHS86r.js → statementBuilderFlow-CCaLco1R.js} +2 -2
  29. package/dist/web/playground/assets/{vendor-codemirror-BtJgoBjf.js → vendor-codemirror-C41SFn-r.js} +2 -2
  30. package/dist/web/playground/assets/vendor-g-NJOjvC.js +198 -0
  31. package/dist/web/playground/index.html +3 -3
  32. package/dist/web/playground/seed/core/chunks/canvas.2d3e2e0e.json +1 -0
  33. package/dist/web/playground/seed/core/manifest.json +7 -7
  34. package/dist/web/playground/seed/core/report.html +11 -11
  35. package/dist/web/server/assets/main-DtiBHHer.js +187 -0
  36. package/dist/web/server/assets/{statementBuilderFlow-CXugzTXB.js → statementBuilderFlow-MCfILbWE.js} +2 -2
  37. package/dist/web/server/assets/{vendor-codemirror-BtJgoBjf.js → vendor-codemirror-C41SFn-r.js} +2 -2
  38. package/dist/web/server/assets/vendor-g-NJOjvC.js +198 -0
  39. package/dist/web/server/index.html +3 -3
  40. package/dist/web/server/seed/core/chunks/canvas.2d3e2e0e.json +1 -0
  41. package/dist/web/server/seed/core/manifest.json +7 -7
  42. package/dist/web/server/seed/core/report.html +11 -11
  43. package/package.json +6 -8
  44. package/dist/chunk-32FASQP5.mjs.map +0 -1
  45. package/dist/chunk-B3QJYJVI.mjs.map +0 -1
  46. package/dist/chunk-EUQWEX6Z.mjs.map +0 -1
  47. package/dist/chunk-K3GZZFAC.mjs.map +0 -1
  48. package/dist/compiler-KT6P3AC6.mjs.map +0 -1
  49. package/dist/server-3TJZDKQC.mjs +0 -11
  50. package/dist/web/playground/assets/main-Bj_mxNMk.js +0 -212
  51. package/dist/web/playground/assets/vendor-BlJqgFME.js +0 -201
  52. package/dist/web/playground/seed/core/chunks/canvas.054cd7db.json +0 -1
  53. package/dist/web/server/assets/main-CfAVkURA.js +0 -211
  54. package/dist/web/server/assets/vendor-BlJqgFME.js +0 -201
  55. package/dist/web/server/seed/core/chunks/canvas.054cd7db.json +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/db.ts","../../src/seedbuild/contract.ts","../../src/seedbuild/effort-slugs.ts","../../src/seedbuild/filename.ts","../../src/seedbuild/frontmatter.ts","../../src/seedbuild/effort-file.ts","../../src/seedbuild/git-version.ts","../../src/seedbuild/report.ts","../../src/seedbuild/compiler.ts","../../src/server/errors.ts","../../src/server/app.ts","../../src/cli/server.ts","../../src/cli/loader.ts","../../src/cli/parse.ts","../../src/cli/run.ts","../../src/cli/query.ts","../../src/cli/runner.ts","../../src/cli/config.ts","../../src/cli/persist.ts","../../src/cli/seed.ts","../../src/cli/formatters.ts","../../src/version.ts","../../src/bin/wod.ts"],"names":["blockContentId","bundledEfforts","CANVAS_CHUNK_ID","SEED_SCHEMA","KNOWN_SECTION_WIDGETS","extractEffortSlugs","isEffortDiscipline","execSync","join","writeFileSync","existsSync","readdirSync","parseDashboardNote","buildDashboardDocument","isDashboardWidgetType","resolveWidgetType","parseQuery","readFileSync","reconcileNoteBlocks","parseDocumentSections","section","path","parseScript","whiteboardParser","mkdirSync","createHash","relative","rmSync","bun","storeDefinition","keyFromValue","realpath","sep","stat","resolve","getRow","listRows","countRows","refreshDomain","wipeRows","wipeDomain","MAX_BODY","handleDomainQuery","realpathSync","StorageError","dist","registerLanguagePack","createParser","buildStatementTree","createIRFile","toStoredOutputStatement","frozenNow","createCompiler","createMockClock","RuntimeStack","EventBus","ScriptRuntime","createAnalyticsEngineForBlock","StartSessionAction","NextEvent","isIRFile","inMemoryEventStore","toEventRows","toSummaryEventRows","validateNoteBlocks","QueryService","isPipelineQuery","result","isFindQuery","nodeRequire","nodePath","nodeFs","sameRow","assertSeedManifest","seedMetaKey","emptySeedMeta","assertSeedRows","seedNoteId","applySeedChunk","data","lines","matchedCount","getFs","value","extractNoteIdentity","extractTypedTags","composeNoteMarkdown","sessionToCsv","effortToMarkdown","equipmentToCsv","db","markdownToEffort","csvToEquipmentLabels","csvToSessionRows","generateSeed","runCliServer","spawnSync","fileURLToPath"],"mappings":"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","file":"wod.cjs","sourcesContent":["/**\n * Local SQLite seam for the `wod` CLI.\n *\n * Opens a libsql `file:` database, initializes the shared storage schema\n * (KV store tables + domain projections), and adapts the rows into the WQL\n * store interfaces — the same shape the playground builds over IndexedDB.\n *\n * Everything heavy is loaded lazily (`@libsql/client`,\n * `@bitcobblers/wod-wiki-storage/sql`, node `fs`/`crypto`) so browser\n * bundles that import the engine index never pull native drivers; the\n * dynamic specifiers stay external in the CLI bundle.\n */\n\nimport type { EventRecord } from '@bitcobblers/wod-wiki-core';\nimport type { IStorage, KeyDTO, Note, Session } from '@bitcobblers/wod-wiki-storage';\nimport type { RangeDTO, StoreDef } from '@bitcobblers/wod-wiki-storage';\nimport type {\n Database,\n LibsqlClient,\n SqlConnection,\n} from '@bitcobblers/wod-wiki-storage/sql';\nimport type { CliDatabaseConfig } from './config';\nimport type {\n BlockQueryStore,\n EventStore,\n EffortQueryStore,\n NoteQueryStore,\n WqlDomainReadResult,\n} from '@bitcobblers/wod-wiki-wql';\nimport { bundledEfforts } from '@bitcobblers/wod-wiki-lang';\n\n/** Structural CJS require — avoids the deprecated NodeJS namespace type. */\ntype CjsRequire = (id: string) => unknown;\n\n/** Minimal node builtin surfaces the CLI uses (kept out of browser bundles). */\nexport interface PathShim { resolve(...parts: string[]): string; join(...parts: string[]): string; dirname(p: string): string; basename(p: string): string }\nexport interface FsShim {\n mkdirSync(p: string, opts: { recursive: boolean }): void;\n existsSync(p: string): boolean;\n unlinkSync(p: string): void;\n readFileSync(p: string, encoding: string): string;\n writeFileSync(p: string, data: string, encoding: string): void;\n}\nexport interface HashShim { update(data: string): HashShim; digest(): Uint8Array }\nexport interface CryptoShim {\n createHash(algorithm: string): HashShim;\n randomUUID(): string;\n}\nexport const nodePath = (): PathShim => nodeRequire()('node:path') as PathShim;\nexport const nodeFs = (): FsShim => nodeRequire()('node:fs') as FsShim;\nexport const nodeCrypto = (): CryptoShim => nodeRequire()('node:crypto') as CryptoShim;\n\n/** Lazy CJS require — keeps node builtins out of browser bundles. */\nfunction nodeRequire(): CjsRequire {\n const g = globalThis as { process?: { versions?: Record<string, string> }; Bun?: unknown; require?: CjsRequire };\n if (typeof g.process?.versions?.node === 'undefined' && typeof g.Bun === 'undefined') {\n throw new Error('SQLite operations are only supported in Node / Bun environments');\n }\n const req = g.require ?? (typeof require === 'function' ? require : undefined);\n if (!req) throw new Error('SQLite operations require a CJS require shim (missing tsup banner?)');\n return req;\n}\n\n/** The storage/sql surface the CLI uses — structural mirror so the lazy import types check. */\nexport interface SqlApi {\n libsqlDatabase(client: LibsqlClient): Database;\n SqlStorage: new (db: Database) => IStorage;\n initializeStore(db: Database): Promise<void>;\n initializeDomain(db: Database): Promise<void>;\n verifyReadiness(db: Database): Promise<void>;\n storeDefinition(name: string): StoreDef;\n listRows(conn: SqlConnection, def: StoreDef, range?: RangeDTO, count?: number, indexName?: string): Promise<unknown[]>;\n getRow(conn: SqlConnection, def: StoreDef, key: KeyDTO): Promise<unknown | undefined>;\n getRows(conn: SqlConnection, def: StoreDef, keys: KeyDTO[]): Promise<(unknown | undefined)[]>;\n putRow(conn: SqlConnection, def: StoreDef, value: unknown): Promise<unknown>;\n deleteRows(conn: SqlConnection, def: StoreDef, keyOrRange: unknown): Promise<void>;\n refreshDomain(conn: SqlConnection, ops: unknown[]): Promise<unknown>;\n handleDomainQuery(db: Database, body: unknown): Promise<unknown>;\n}\n\nlet sqlModulePromise: Promise<SqlApi> | undefined;\n\n/** Lazily import the storage SQL subpath (kept external in the CLI bundle). */\nexport function loadSql(): Promise<SqlApi> {\n sqlModulePromise ??= import(/* @vite-ignore */ '@bitcobblers/wod-wiki-storage/sql') as Promise<SqlApi>;\n return sqlModulePromise;\n}\n\nexport interface CliDb {\n db: Database;\n storage: IStorage;\n /** Absolute path of the underlying .sqlite file — or the sanitized display\n * label (URL without credentials) for remote backends. */\n path: string;\n close(): Promise<void>;\n}\n\n/**\n * Resolve the effective database path: explicit flag wins, then\n * WOD_WIKI_DB, then ./wodwiki.db in the current working directory.\n */\nexport function resolveDbPath(dbPath?: string): string {\n const chosen = dbPath ?? process.env.WOD_WIKI_DB ?? './wodwiki.db';\n return nodePath().resolve(process.cwd(), chosen);\n}\n\n/**\n * Open the CLI database: a legacy local sqlite path (internal callers,\n * created/initialized as before) or a resolved backend config from ./config.\n *\n * opts.initialize (default true): run the schema + projection\n * initialization. false → verify the schema/projection guards only: a\n * missing local sqlite file is NOT created and yields an actionable\n * `wod init` error; remote targets are only probed, never created.\n *\n * opts.create (explicit init requests only, postgres): when the configured\n * PostgreSQL database is missing, openDatabase creates it through the admin\n * \"postgres\" database before initializing. Turso has no management API —\n * its hosted target must already exist.\n */\nexport async function openCliDb(\n target?: string | CliDatabaseConfig,\n opts?: { initialize?: boolean; create?: boolean },\n): Promise<CliDb> {\n if (target === undefined || typeof target === 'string') {\n return openSqliteDb(resolveDbPath(target), opts);\n }\n switch (target.kind) {\n case 'sqlite':\n return openSqliteDb(target.path, opts);\n case 'turso':\n return openRemoteDb(\n { DB_DRIVER: 'turso', DATABASE_URL: target.url, LIBSQL_AUTH_TOKEN: target.authToken },\n target.label,\n opts,\n );\n case 'postgres':\n return openRemoteDb({ DB_DRIVER: 'postgres', DATABASE_URL: target.url }, target.label, opts);\n }\n}\n\nasync function openSqliteDb(resolved: string, opts?: { initialize?: boolean; create?: boolean }): Promise<CliDb> {\n const [{ createClient }, sql] = await Promise.all([\n import(/* @vite-ignore */ '@libsql/client') as Promise<{ createClient: (config: { url: string }) => LibsqlClient }>,\n loadSql(),\n ]);\n const initialize = opts?.initialize ?? true;\n if (!initialize && !nodeFs().existsSync(resolved)) {\n throw new Error(`[wod] no database at ${resolved} — run \\`wod init\\` to create and initialize it`);\n }\n if (initialize) nodeFs().mkdirSync(nodePath().dirname(resolved), { recursive: true });\n const db = sql.libsqlDatabase(createClient({ url: `file:${resolved}` }));\n try {\n if (initialize) {\n await sql.initializeStore(db);\n await sql.initializeDomain(db);\n } else {\n // Guards only — no schema creation on an existing file either.\n await sql.verifyReadiness(db).catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`${message} — run \\`wod init\\` to initialize it`, { cause: error });\n });\n }\n return { db, storage: new sql.SqlStorage(db), path: resolved, close: () => db.close() };\n } catch (error) {\n await db.close();\n throw error;\n }\n}\n\n/** Open a postgres/turso/remote-sqlite backend through the extracted server\n * adapter (dynamic on purpose: node-only subpath kept out of browser\n * bundles and external in the CLI bundle). Never falls back locally. */\nasync function openRemoteDb(\n env: Record<string, string | undefined>,\n label: string,\n opts?: { initialize?: boolean; create?: boolean },\n): Promise<CliDb> {\n const [{ openDatabase }, sql] = await Promise.all([\n import(/* @vite-ignore */ '@bitcobblers/wod-wiki-storage/sql/node') as Promise<{\n openDatabase: (env?: Record<string, string | undefined>, opts?: { create?: boolean }) => Promise<Database>;\n }>,\n loadSql(),\n ]);\n let db: Database | undefined;\n try {\n db = await openDatabase(env, { create: opts?.create });\n if (opts?.initialize === false) {\n await sql.verifyReadiness(db);\n } else {\n await sql.initializeStore(db);\n await sql.initializeDomain(db);\n }\n } catch (error) {\n await db?.close().catch(() => {});\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(\n `[wod] ${label}: ${message}${opts?.initialize === false ? ' — run `wod init` to initialize it' : ''}`,\n { cause: error },\n );\n }\n return { db, storage: new sql.SqlStorage(db), path: label, close: () => db.close() };\n}\n\n// ---------------------------------------------------------------------------\n// Identity helpers\n// ---------------------------------------------------------------------------\n\n/** RFC-4122 byte munging + formatting over a 16-byte digest slice. */\nexport function formatV5Digest(digest: Uint8Array): string {\n const bytes = digest.slice(0, 16);\n bytes[6] = (bytes[6] & 0x0f) | 0x50; // version 5\n bytes[8] = (bytes[8] & 0x3f) | 0x80; // RFC-4122 variant\n const hex = [...bytes].map((b) => b.toString(16).padStart(2, '0'));\n return `${hex.slice(0, 4).join('')}-${hex.slice(4, 6).join('')}-${hex.slice(6, 8).join('')}-${hex.slice(8, 10).join('')}-${hex.slice(10, 16).join('')}`;\n}\n\n/** RFC-4122 v5 (SHA-1) name-based UUID — deterministic seed/note identity. */\nexport function uuid5(namespace: string, name: string): string {\n return formatV5Digest(nodeCrypto().createHash('sha1').update(namespace).update(name).digest());\n}\n\n/** Local namespace for wod-CLI derived identities (not shared with seed ids). */\nexport const CLI_UUID_NAMESPACE = 'c0ffee00-8b1a-4e2c-9d3f-5a6b7c8d9e0f';\n\n/**\n * Stable note identity for a parsed/run source: the same file always maps\n * to the same note, so re-parsing updates instead of duplicating. Stdin\n * sources content-address (no stable path exists).\n */\nexport function stableNoteId(sourceLabel: string, content: string): string {\n if (sourceLabel && sourceLabel !== '-') {\n return uuid5(CLI_UUID_NAMESPACE, `wod-cli:${nodePath().resolve(process.cwd(), sourceLabel)}`);\n }\n return uuid5(CLI_UUID_NAMESPACE, `wod-cli:stdin:${content.length}:${content.slice(0, 256)}`);\n}\n\nexport function randomId(): string {\n return nodeCrypto().randomUUID();\n}\n\n// ---------------------------------------------------------------------------\n// WQL store adapters over the sqlite rows\n// ---------------------------------------------------------------------------\n\nasync function allRows(sql: SqlApi, db: Database, store: string): Promise<unknown[]> {\n return sql.listRows(db, sql.storeDefinition(store));\n}\n\nasync function rowsByIndex(sql: SqlApi, db: Database, store: string, index: string, only: string): Promise<unknown[]> {\n return sql.listRows(db, sql.storeDefinition(store), { only }, undefined, index);\n}\n\n/** EventStore over the `events` table — whole-table reads, keyed writes. */\nexport function sqliteEventStore(db: Database): EventStore {\n const all = async (): Promise<EventRecord[]> => (await allRows(await loadSql(), db, 'events')) as EventRecord[];\n return {\n getEventsByTimeRange: async (start, end) => (await all()).filter((r) => r.timestamp >= start && r.timestamp <= end),\n getEventsByResult: async (resultId) => (await all()).filter((r) => r.resultId === resultId),\n getEventsForNote: async (noteId) => (await all()).filter((r) => r.noteId === noteId),\n getEventsByContent: async (blockContentId) => (await all()).filter((r) => r.blockContentId === blockContentId),\n scanAll: all,\n appendEvents: async (appended) => {\n const sql = await loadSql();\n await db.transaction(async (tx) => {\n const eventsDef = sql.storeDefinition('events');\n for (const row of appended) await sql.putRow(tx, eventsDef, row);\n });\n },\n finalizeSummaries: async (resultId, finals) => {\n const sql = await loadSql();\n await db.transaction(async (tx) => {\n const eventsDef = sql.storeDefinition('events');\n const existing = ((await sql.listRows(tx, eventsDef)) as EventRecord[]).filter(\n (r) => r.resultId === resultId && r.grain === 'summary' && r.origin !== 'user',\n );\n for (const row of existing) await sql.deleteRows(tx, eventsDef, row.id);\n for (const row of finals) await sql.putRow(tx, eventsDef, row);\n });\n },\n deleteEvents: async (ids) => {\n const sql = await loadSql();\n await db.transaction(async (tx) => {\n const eventsDef = sql.storeDefinition('events');\n for (const id of ids) await sql.deleteRows(tx, eventsDef, id);\n });\n },\n };\n}\n\ninterface StoredTag { id: string; label: string; type?: string }\ninterface StoredNoteTag { id: string; noteId: string; tagId: string }\n\n/** NoteQueryStore over the notes/tags/note_tags rows + domain projection reads. */\nexport function sqliteNoteStore(db: Database): NoteQueryStore {\n return {\n getAllNotes: async () => (await allRows(await loadSql(), db, 'notes')) as never,\n getNotesByIds: async (noteIds) => {\n const sql = await loadSql();\n const rows = await sql.getRows(db, sql.storeDefinition('notes'), [...noteIds]) as Array<Note | undefined>;\n return rows.filter((row): row is Note => row !== undefined);\n },\n getNoteIdsForTag: async (label) => {\n const sql = await loadSql();\n const tags = ((await allRows(sql, db, 'tags')) as StoredTag[]).filter((t) => t.label === label);\n const ids: Record<string, true> = {};\n for (const tag of tags) {\n for (const row of await rowsByIndex(sql, db, 'note_tags', 'by-tag', tag.id)) {\n ids[(row as StoredNoteTag).noteId] = true;\n }\n }\n return new Set(Object.keys(ids));\n },\n getNoteTagLabels: async (noteId) => {\n const sql = await loadSql();\n const tagRows = (await allRows(sql, db, 'tags')) as StoredTag[];\n const labelById: Record<string, string> = {};\n for (const t of tagRows) labelById[t.id] = t.label;\n const links = (await rowsByIndex(sql, db, 'note_tags', 'by-note', noteId)) as StoredNoteTag[];\n return links.map((l) => labelById[l.tagId]).filter((l): l is string => typeof l === 'string');\n },\n queryDomain: async (request) => {\n // WQL's domain wire is a structural mirror of the storage DomainQuery.\n const result = await (await loadSql()).handleDomainQuery(db, request as never);\n return result as WqlDomainReadResult;\n },\n };\n}\n\n/** BlockQueryStore over the block_index rows + domain projection reads. */\nexport function sqliteBlockStore(db: Database): BlockQueryStore {\n return {\n getAllBlocks: async () => (await allRows(await loadSql(), db, 'block_index')) as never,\n queryDomain: async (request) => {\n const result = await (await loadSql()).handleDomainQuery(db, { ...request, plan: 'blocks' } as never);\n return result as WqlDomainReadResult;\n },\n };\n}\n\ninterface Slugged { slug: string }\n\n/**\n * EffortQueryStore: rows the seed wrote into the `efforts` registry win by\n * slug; the lang-bundled registry fills the rest (same fallback the\n * playground's RegistryEffortStore performs).\n */\nexport function sqliteEffortStore(db: Database): EffortQueryStore {\n return {\n getAllEfforts: async () => {\n const stored = (await allRows(await loadSql(), db, 'efforts')) as Slugged[];\n const bySlug: Record<string, unknown> = {};\n for (const effort of stored) bySlug[effort.slug] = effort;\n for (const effort of bundledEfforts as unknown as Slugged[]) {\n bySlug[effort.slug] ??= effort;\n }\n return Object.values(bySlug) as never;\n },\n };\n}\n\n/** Generic by-index reader over a store table — the QueryService seam shape. */\nexport interface IndexStore { getAllFromIndex(index: string, key: string): Promise<unknown[]> }\n\n/** Indexed reads over `block_efforts` / `tags` / `note_tags` rows. */\nexport function sqliteIndexStore(db: Database, store: 'block_efforts' | 'tags' | 'note_tags'): IndexStore {\n return {\n getAllFromIndex: async (index, key) => rowsByIndex(await loadSql(), db, store, index, key),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Download bundles (exchange feedstock)\n// ---------------------------------------------------------------------------\n\nexport interface NoteBundle {\n note: Note | undefined;\n}\n\nexport interface SessionBundle {\n session: Session;\n events: EventRecord[];\n}\n\n/** Fetch the whole authored Note. */\nexport async function getNoteBundle(db: Database, noteId: string): Promise<NoteBundle> {\n const sql = await loadSql();\n const note = await sql.getRow(db, sql.storeDefinition('notes'), noteId) as Note | undefined;\n return { note };\n}\n\n/** Fetch a session + its event/summary rows. */\nexport async function getSessionBundle(db: Database, resultId: string): Promise<SessionBundle | undefined> {\n const sql = await loadSql();\n const session = await sql.getRow(db, sql.storeDefinition('sessions'), resultId) as Session | undefined;\n if (!session) return undefined;\n const events = await sql.listRows(db, sql.storeDefinition('events'), { only: resultId }, undefined, 'by-result-grain') as EventRecord[];\n return { session, events };\n}\n\n/** Fetch one effort registry row by slug. */\nexport async function getEffortBySlug(db: Database, slug: string): Promise<Record<string, unknown> | undefined> {\n const sql = await loadSql();\n const efforts = (await allRows(sql, db, 'efforts')) as Array<{ slug: string } & Record<string, unknown>>;\n return efforts.find((e) => e.slug === slug);\n}\n\n/** Fetch tag rows of one type (e.g. 'equipment'). */\nexport async function listTagsByType(db: Database, type: string): Promise<Array<{ id: string; label: string; type?: string }>> {\n const sql = await loadSql();\n const tags = (await allRows(sql, db, 'tags')) as Array<{ id: string; label: string; type?: string }>;\n return tags.filter((t) => t.type === type);\n}\n","import type { BlockEffort, BlockIndexRow, NoteBlock } from '@bitcobblers/wod-wiki-core';\nimport { KNOWN_SECTION_WIDGETS } from '@bitcobblers/wod-wiki-core';\n\nexport const SEED_SCHEMA = 8;\nexport const SEED_REGISTERED_WIDGETS = KNOWN_SECTION_WIDGETS;\n\n/** Source and all current derived rows commit as one chunk. */\nexport interface SeedRow {\n path: string;\n content: string;\n blocks: Record<string, NoteBlock>;\n blockIndex: BlockIndexRow[];\n blockEfforts: BlockEffort[];\n}\n\nexport type ChunkKind = 'notes';\nexport interface ManifestChunk {\n id: string;\n path: string;\n sha256: string;\n bytes: number;\n count: number;\n kind?: ChunkKind;\n}\nexport interface SeedManifest {\n schema: number;\n version: number;\n versionLabel?: string;\n commit?: string;\n dirty?: boolean;\n builtAt: string;\n chunks: ManifestChunk[];\n}\nexport interface SeedMetaRecord {\n key: string;\n schema: number;\n seedVersion: number;\n builtAt: string;\n importedAt: number;\n chunks: Record<string, { sha256: string; noteIds?: string[] }>;\n claim?: { owner: string; at: number } | null;\n}\nexport const SEED_BROADCAST_CHANNEL = 'wodwiki.seed';\nexport const EFFORTS_CHUNK_ID = 'efforts';\nexport const CANVAS_CHUNK_ID = 'canvas';\nexport const DASHBOARDS_CHUNK_ID = 'dashboards';\nexport const TEMPLATE_CHUNK_ID = 'template';\nexport function seedMetaKey(sourceId: string): string { return `seed:${sourceId}`; }\nexport function emptySeedMeta(key: string): SeedMetaRecord {\n return { key, schema: SEED_SCHEMA, seedVersion: 0, builtAt: '', importedAt: 0, chunks: {}, claim: null };\n}\nexport function catalogForChunkId(chunkId: string): string | undefined {\n const value = /^(?:collection|feed)\\.(.+)$/.exec(chunkId)?.[1];\n return value && value !== '_root' ? value : undefined;\n}\nexport function canvasRouteSlug(content: string): string | null {\n const fm = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(content);\n if (fm?.[1] && !/^template:\\s*canvas\\s*$/m.test(fm[1])) return null;\n return fm?.[1]?.match(/^route:\\s*(\\S+)\\s*$/m)?.[1]?.replace(/^\\//, '') || null;\n}\nexport function seedNoteSourceId(path: string, content: string, chunkId: string): string | undefined {\n const parts = path.split('/');\n const stem = (parts.at(-1) ?? '').replace(/\\.md$/i, '');\n const under = parts.slice(2).map((p) => p.replace(/\\.md$/i, '')).join('/');\n if (chunkId === CANVAS_CHUNK_ID) return `guides:${canvasRouteSlug(content) ?? under}`;\n if (chunkId === DASHBOARDS_CHUNK_ID) return 'dashboards';\n if (chunkId === EFFORTS_CHUNK_ID) return 'efforts';\n if (chunkId === TEMPLATE_CHUNK_ID) return 'playground';\n if (chunkId.startsWith('collection.')) {\n const catalog = catalogForChunkId(chunkId);\n return !catalog ? 'collection:_root' : stem.toLowerCase() === 'readme' ? `collection:${catalog}` : `collection:${catalog}/${stem}`;\n }\n if (chunkId.startsWith('feed.')) return `feed:feeds/${under}`;\n return undefined;\n}\n","/**\n * extractEffortSlugs — port of wod-wiki's\n * apps/playground/src/services/storage/StorageService.ts (the pure function\n * only). Derives canonical effort slugs referenced by script statements for\n * the block-efforts containment index.\n */\nimport type { ICodeStatement } from '@bitcobblers/wod-wiki-core';\n\nexport function extractEffortSlugs(statements: ICodeStatement[]): string[] {\n const slugs = new Set<string>();\n for (const statement of statements) {\n if (statement.exerciseId) {\n slugs.add(statement.exerciseId);\n } else {\n const effortMetric = statement.metrics?.getMetric?.('effort');\n const effort = effortMetric && typeof effortMetric.value === 'string' ? effortMetric.value : undefined;\n if (effort) {\n const slug = effort.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');\n if (slug) slugs.add(slug);\n }\n }\n }\n return Array.from(slugs);\n}\n","/**\n * fileToDisplayName — port of wod-wiki's\n * apps/playground/src/repositories/groupings.ts (display-name derivation\n * only). Block-index rows carry the same note titles the app renders, so\n * titles must derive identically on both sides.\n */\n\n/** Lowercased mid-title words — \"and\", \"of\", \"70.3\"-style fragments read wrong capped. */\nconst FILE_TITLE_STOP_WORDS: Record<string, true> = {\n and: true, or: true, of: true, for: true, to: true, in: true, on: true,\n at: true, by: true, with: true, the: true, a: true, an: true,\n};\n\n/**\n * Parse a filename into a display name.\n * \"simple-and-sinister.md\" -> \"Simple and Sinister\"\n */\nexport function fileToDisplayName(filename: string): string {\n const base = filename.replace(/\\.md$/, '');\n if (base.toUpperCase() === 'README') return 'Overview';\n // Strip leading \"day-01-\" prefixes if present, then humanise\n const cleaned = base.replace(/^day-\\d+-/, '');\n const tokens = cleaned.split(/[-_]/);\n const titled: string[] = [];\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i]!;\n const next = tokens[i + 1];\n const after = tokens[i + 2];\n const prev = tokens[i - 1];\n // Race distances keep their dot: a lone 1-2-digit pair (\"70-3\" -> \"70.3\").\n // Longer numeric runs are dates (2009-12-01) or rep ladders (5-3-1) —\n // only an isolated pair between words is a distance.\n if (\n /^\\d{1,2}$/.test(token) && /^\\d{1,2}$/.test(next ?? '')\n && !/^\\d+$/.test(prev ?? '') && !/^\\d+$/.test(after ?? '')\n ) {\n titled.push(`${token}.${next}`);\n i++;\n continue;\n }\n if (titled.length > 0 && FILE_TITLE_STOP_WORDS[token.toLowerCase()]) {\n titled.push(token.toLowerCase());\n continue;\n }\n titled.push(token.charAt(0).toUpperCase() + token.slice(1));\n }\n return titled.join(' ');\n}\n","/**\n * Frontmatter parser — port of wod-wiki's apps/playground/src/lib/frontmatter.ts\n * (parseFrontmatter/getScalar/getList only; the editor-only helpers\n * (LinkWidget, YouTube, serialize) stay in the app).\n *\n * ponytail: semantics must match the app's parser exactly — the seed\n * compiler and the app runtime derive frontmatter from the same corpus.\n * Upgrade path: publish the parser in @bitcobblers/wod-wiki-core and import\n * from both sides.\n */\n\nexport interface ParsedFrontmatter {\n meta: Record<string, string | number | string[]>\n body: string\n}\n\n/** Leading `---` … `---` block; body is everything after the closing delimiter. */\nconst FRONTMATTER_RE = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---\\r?\\n?/;\n\n/** Strip matched wrapping quotes: `\"x\"` / `'x'` → `x`; mismatched quotes are kept.\n * Double-quoted values also collapse the serializer's escapes (`\\\\\"`, `\\\\\\\\`). */\nfunction unquote(value: string): string {\n return value.replace(/^(['\"])(.*)\\1$/, (_match, quote: string, inner: string) =>\n quote === '\"' ? inner.replace(/\\\\([\"\\\\])/g, '$1') : inner,\n );\n}\n\n/**\n * Parse the leading YAML frontmatter block of a markdown string.\n *\n * Semantics (mirrors the app):\n * - Scalar `key: value` (key `/^[A-Za-z][\\w.-]*$/`, dots allow flat nested\n * keys like `book.title`): wrapping quotes stripped; bare numeric strings\n * become `number`, quoted scalars always stay strings.\n * - `key:` with empty value followed by indented `- item` lines → `string[]`.\n * - `key:` with empty value and no list items → `''`.\n * - Inline `key: [a, b]` stays a plain scalar string.\n */\nexport function parseFrontmatter(raw: string): ParsedFrontmatter {\n const match = raw.match(FRONTMATTER_RE);\n if (!match) return { meta: {}, body: raw };\n return { meta: parseMetaLines(match[1].split(/\\r?\\n/)), body: raw.slice(match[0].length) };\n}\n\nfunction parseMetaLines(lines: string[]): ParsedFrontmatter['meta'] {\n const meta: ParsedFrontmatter['meta'] = {};\n\n for (let i = 0; i < lines.length; i++) {\n const keyMatch = lines[i].match(/^([A-Za-z][\\w.-]*)\\s*:(.*)$/);\n if (!keyMatch) continue; // indented/nested/list lines are not top-level keys\n\n const key = keyMatch[1];\n const rawVal = keyMatch[2].trim();\n\n if (rawVal === '') {\n const items: string[] = [];\n while (i + 1 < lines.length) {\n const itemMatch = lines[i + 1].match(/^\\s+-\\s+(.+)$/);\n if (!itemMatch) break;\n items.push(itemMatch[1].trim());\n i++;\n }\n meta[key] = items.length > 0 ? items : '';\n } else {\n const wasQuoted = /^(['\"])(.*)\\1$/.test(rawVal);\n const value = unquote(rawVal);\n const num = Number(value);\n meta[key] = !wasQuoted && value !== '' && !isNaN(num) ? num : value;\n }\n }\n\n return meta;\n}\n\n/** Scalar value at `key`, or `undefined` when absent or a list. */\nexport function getScalar(\n meta: ParsedFrontmatter['meta'],\n key: string,\n): string | number | undefined {\n const value = meta[key];\n return typeof value === 'string' || typeof value === 'number' ? value : undefined;\n}\n\n/** List value at `key`, or `[]` when absent or a scalar. */\nexport function getList(meta: ParsedFrontmatter['meta'], key: string): string[] {\n const value = meta[key];\n return Array.isArray(value) ? value : [];\n}\n","/**\n * Effort-file parsing — port of wod-wiki's\n * apps/playground/src/repositories/effort-markdown.ts (parse-frontmatter\n * direction only; effortToDocument/documentToEffort stay in the app).\n *\n * The compiler needs `parseEffortFile` to build the effort alias map used by\n * block-efforts row derivation. Semantics MUST match the app's runtime effort\n * materialization — alias/slug drift would desync the block plane from the\n * note plane.\n *\n * ponytail: duplicated rather than package-shared to keep this repo\n * standalone; upgrade path is the same published effort-format module\n * imported by both sides.\n */\nimport {\n isEffortDiscipline,\n type IEffort,\n type EffortRegistrySource,\n type IntensityTier,\n} from '@bitcobblers/wod-wiki-lang';\nimport { parseFrontmatter, getScalar, getList } from './frontmatter';\n\n/** Validate a parsed discipline against the canonical vocabulary. */\nfunction parseDiscipline(val: string | undefined): IEffort['baseAttributes']['discipline'] {\n if (!val) return undefined;\n const normalized = unquoteYaml(val.trim()).toLowerCase();\n if (isEffortDiscipline(normalized)) return normalized as IEffort['baseAttributes']['discipline'];\n console.warn(`[effort-file] unknown discipline '${val}' — treating as unset`);\n return undefined;\n}\n\nfunction unquoteYaml(val: string): string {\n if (val.startsWith('\"') && val.endsWith('\"')) {\n return val.slice(1, -1).replace(/\\\\([\"\\\\])/g, '$1');\n }\n if (val.startsWith(\"'\") && val.endsWith(\"'\")) {\n return val.slice(1, -1).replace(/\\\\'/g, \"'\");\n }\n return val;\n}\n\n/** Coerce a scalar from a nested block: booleans/numbers are coerced; everything else stays a string. */\nfunction coerceNestedScalar(raw: string): unknown {\n if (raw === 'true') return true;\n if (raw === 'false') return false;\n if (raw !== '' && !Number.isNaN(Number(raw))) return Number(raw);\n return raw;\n}\n\n/**\n * Read a nested (`key:` followed by indented entries) section from frontmatter\n * lines. Two levels are supported (`derivation.coefficients.*`).\n */\nfunction readNestedSection(lines: string[], key: string): Record<string, unknown> | undefined {\n const start = lines.findIndex(l => new RegExp(`^${key}:\\\\s*$`).test(l));\n if (start === -1) return undefined;\n\n const result: Record<string, unknown> = {};\n let subKey: string | null = null;\n\n for (let i = start + 1; i < lines.length; i++) {\n const line = lines[i];\n if (/^\\S/.test(line)) break; // next top-level key ends the block\n\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n\n const indent = line.length - line.trimStart().length;\n const m = trimmed.match(/^([\\w.-]+):\\s*(.*)$/);\n if (!m) continue;\n const [, k, rawVal] = m;\n\n if (indent === 2) {\n if (rawVal === '') {\n subKey = k;\n result[k] = {};\n } else {\n subKey = null;\n result[k] = coerceNestedScalar(rawVal);\n }\n } else if (indent >= 4 && subKey !== null) {\n (result[subKey] as Record<string, unknown>)[k] = coerceNestedScalar(rawVal);\n }\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\n/** Parse a single bundled effort markdown file into an IEffort (null when malformed). */\nexport function parseEffortFile(raw: string): IEffort | null {\n const blockMatch = raw.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---/);\n if (!blockMatch) return null;\n\n const { meta, body } = parseFrontmatter(raw);\n const innerLines = blockMatch[1].split(/\\r?\\n/);\n\n const id = getScalar(meta, 'id');\n const slug = getScalar(meta, 'slug');\n const label = getScalar(meta, 'label');\n const aliases = getList(meta, 'aliases');\n\n const baseAttrs = readNestedSection(innerLines, 'baseAttributes');\n const hints = readNestedSection(innerLines, 'hints');\n const derivation = readNestedSection(innerLines, 'derivation');\n\n const metRaw = baseAttrs?.met;\n const met = typeof metRaw === 'number' ? metRaw : Number(metRaw);\n if (!id || !slug || !label || metRaw === undefined || Number.isNaN(met)) return null;\n\n const discipline = parseDiscipline(\n typeof baseAttrs?.discipline === 'string' ? baseAttrs.discipline : undefined,\n );\n const intensityTier = baseAttrs?.intensityTier;\n const trimmedBody = body.trim();\n\n return {\n id: String(id),\n slug: String(slug),\n label: String(label),\n aliases,\n baseAttributes: {\n met,\n ...(discipline ? { discipline } : {}),\n ...(intensityTier ? { intensityTier: intensityTier as IntensityTier } : {}),\n },\n registrySource: 'bundled' as EffortRegistrySource,\n ...(trimmedBody ? { body: trimmedBody } : {}),\n ...(hints ? { hints } : {}),\n ...(derivation ? { derivation: derivation as IEffort['derivation'] } : {}),\n };\n}\n","/**\n * Git-derived versioning — the seed artifact's version IS this repo's git\n * history. Every merged MR advances `version` (commit count), and\n * `versionLabel`/`commit` make an artifact traceable to its exact source\n * tree, so the app (and humans diffing manifests) can answer \"what changed\n * and what needs syncing\" from the manifest alone.\n */\nimport { execSync } from 'node:child_process';\n\nexport interface GitVersion {\n /** Monotonic commit count — the import-order version stamped on the manifest. */\n version: number;\n /** `git describe --tags --long --always --dirty`, e.g. `v1.2.0-4-gdeadbee`. */\n versionLabel: string;\n /** Full HEAD sha. */\n commit: string;\n /** True when built with uncommitted working-tree changes. */\n dirty: boolean;\n}\n\n/** Unversioned fallback for source trees without git history (e.g. exported tarballs). */\nexport const UNKNOWN_GIT_VERSION: GitVersion = {\n version: 0,\n versionLabel: 'unknown',\n commit: '',\n dirty: false,\n};\n\nexport function resolveGitVersion(repoRoot: string): GitVersion {\n try {\n const run = (args: string): string =>\n execSync(`git ${args}`, { cwd: repoRoot, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();\n const count = Number(run('rev-list --count HEAD'));\n return {\n version: Number.isFinite(count) && count > 0 ? count : 0,\n versionLabel: run('describe --tags --long --always --dirty'),\n commit: run('rev-parse HEAD'),\n dirty: run('status --porcelain') !== '',\n };\n } catch {\n return UNKNOWN_GIT_VERSION;\n }\n}\n","/**\n * Build report — a static HTML benchmark page for each seed build\n * (`dist/report.html`). Per-chunk sizes, row counts, pass timings, and the\n * git version stamp, so CI and contributors see build health at a glance.\n * Deliberately dependency-free (one string template + a file write).\n */\nimport { writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { SeedManifest } from './contract';\n\nexport interface BuildReportData {\n manifest: SeedManifest;\n /** Wall-clock ms for the full build. */\n totalMs: number;\n /** Per-pass timings (ms): corpus scan, block-index derivation, effort-row derivation, chunk writes. */\n passMs: { scan: number; blockIndex: number; parseGate: number; blockEfforts: number; write: number };\n /** Number of corpus markdown files. */\n fileCount: number;\n outDir: string;\n}\n\nfunction escapeHtml(s: string): string {\n return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\n}\n\nfunction rowHtml(c: SeedManifest['chunks'][number]): string {\n const kind = c.kind ?? 'notes';\n return `<tr><td>${escapeHtml(c.id)}</td><td>${kind}</td><td>${c.count}</td><td>${(c.bytes / 1024).toFixed(1)} KB</td><td><code>${c.sha256.slice(0, 8)}</code></td></tr>`;\n}\n\nexport function writeBuildReport(outDir: string, data: BuildReportData): string {\n const { manifest, totalMs, passMs, fileCount } = data;\n const totalBytes = manifest.chunks.reduce((s, c) => s + c.bytes, 0);\n const dirtyBadge = manifest.dirty\n ? ' <strong style=\"color:#b45309\">(dirty working tree — not reproducible from <code>' + escapeHtml(manifest.commit ?? '') + '</code>)</strong>'\n : '';\n const html = `<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\" />\n<title>Seed build report</title>\n<style>\n body { font-family: system-ui, sans-serif; max-width: 960px; margin: 2rem auto; padding: 0 1rem; color: #1f2937; }\n h1 { font-size: 1.4rem; } h2 { font-size: 1.1rem; margin-top: 2rem; }\n table { border-collapse: collapse; width: 100%; font-size: 0.9rem; }\n th, td { text-align: left; padding: 0.3rem 0.6rem; border-bottom: 1px solid #e5e7eb; }\n code { font-size: 0.85em; }\n dl { display: grid; grid-template-columns: max-content 1fr; gap: 0.2rem 1rem; font-size: 0.95rem; }\n dt { font-weight: 600; }\n</style>\n</head>\n<body>\n<h1>Seed build report</h1>\n<h2>Version</h2>\n<dl>\n <dt>version</dt><dd>${manifest.version} <code>${escapeHtml(manifest.versionLabel ?? '')}</code>${dirtyBadge}</dd>\n <dt>commit</dt><dd><code>${escapeHtml(manifest.commit ?? 'unknown')}</code></dd>\n <dt>built at</dt><dd>${escapeHtml(manifest.builtAt)}</dd>\n <dt>schema</dt><dd>v${manifest.schema}</dd>\n</dl>\n<h2>Benchmarks</h2>\n<dl>\n <dt>total</dt><dd>${totalMs} ms</dd>\n <dt>corpus scan + partition</dt><dd>${passMs.scan} ms (${fileCount} files)</dd>\n <dt>block-index derivation</dt><dd>${passMs.blockIndex} ms</dd>\n <dt>block syntax gate</dt><dd>${passMs.parseGate} ms</dd>\n <dt>block-efforts derivation</dt><dd>${passMs.blockEfforts} ms</dd>\n <dt>chunk writes</dt><dd>${passMs.write} ms</dd>\n</dl>\n<h2>Chunks (${manifest.chunks.length}, ${(totalBytes / 1024).toFixed(0)} KB total)</h2>\n<table>\n<thead><tr><th>id</th><th>kind</th><th>rows</th><th>size</th><th>sha256</th></tr></thead>\n<tbody>\n${manifest.chunks.map(rowHtml).join('\\n')}\n</tbody>\n</table>\n</body>\n</html>\n`;\n const file = join(outDir, 'report.html');\n writeFileSync(file, html, 'utf8');\n return file;\n}\n","/** Compiles exact source, occurrence maps and sparse projections into atomic notes chunks. */\nimport { parseScript, whiteboardParser } from '@bitcobblers/wod-wiki-lang';\nimport { blockContentId, parseDocumentSections, reconcileNoteBlocks } from '@bitcobblers/wod-wiki-core';\nimport type { BlockEffort, BlockIndexRow } from '@bitcobblers/wod-wiki-storage';\nimport {\n buildDashboardDocument,\n isDashboardWidgetType,\n parseDashboardNote,\n parseQuery,\n resolveWidgetType,\n} from '@bitcobblers/wod-wiki-wql';\nimport {\n DASHBOARDS_CHUNK_ID,\n SEED_SCHEMA,\n SEED_REGISTERED_WIDGETS,\n TEMPLATE_CHUNK_ID,\n canvasRouteSlug,\n seedNoteSourceId,\n type ManifestChunk,\n type SeedManifest,\n type SeedRow,\n} from './contract';\nimport { extractEffortSlugs } from './effort-slugs';\nimport { fileToDisplayName } from './filename';\nimport { parseEffortFile } from './effort-file';\nimport { resolveGitVersion } from './git-version';\nimport { writeBuildReport } from './report';\nimport { parseFrontmatter } from './frontmatter';\nimport { createHash } from 'node:crypto';\nimport { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'node:fs';\nimport { execSync } from 'node:child_process';\nimport { join, relative } from 'node:path';\n\n// BlockEffort/BlockIndexRow row types come from @bitcobblers/wod-wiki-storage\n// (type-only import — chunk rows are plain JSON applied structurally by the\n// app, mirroring cli/seed.ts).\n\n/** Scan `dir` recursively for `*.md` files; returns POSIX paths relative to `dir`, sorted. */\nfunction listMarkdownFiles(dir: string, prefix = ''): string[] {\n if (!existsSync(dir)) return [];\n const out: string[] = [];\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n const rel = prefix ? `${prefix}/${entry.name}` : entry.name;\n if (entry.isDirectory()) out.push(...listMarkdownFiles(join(dir, entry.name), rel));\n else if (entry.isFile() && entry.name.endsWith('.md')) out.push(rel);\n }\n return out.sort();\n}\n\n// ── Types ─────────────────────────────────────────────────────────────────\n\nexport interface ChunkGroup {\n id: string;\n files: string[];\n}\n\nexport interface GenerateSeedOptions {\n /** The corpus directory (`markdown/`). Defaults to `<corpusRoot>/markdown`. */\n markdownDir?: string;\n /** Optional playground template file — the host passes its own; standalone builds omit the `template` chunk. */\n templateFile?: string;\n /**\n * Row path recorded for the template chunk (the runtime derives the\n * template note's id from it, so it must stay stable across builds). The\n * host pins its historical in-repo path; defaults to the path relative to\n * `corpusRoot`.\n */\n templateRowPath?: string;\n /** Output directory. Defaults to `<corpusRoot>/dist`. */\n outDir?: string;\n /**\n * Explicit manifest version (tests). Defaults to the corpus repo's git\n * commit count — see git-version.ts.\n */\n version?: number;\n /** Repo root the corpus paths resolve against and versioning derives from. Defaults to cwd. */\n corpusRoot?: string;\n /** Automatically scaffold markdown files for newly discovered efforts. */\n scaffoldDiscoveredEfforts?: boolean;\n}\n\nexport interface GenerateSeedResult {\n manifest: SeedManifest;\n outDir: string;\n totalFiles: number;\n reportPath: string;\n /** ms timings per pass (mirrored into report.html). */\n passMs: { scan: number; blockIndex: number; parseGate: number; blockEfforts: number; write: number };\n}\n\n// ── Corpus partition ──────────────────────────────────────────────────────\n\n/**\n * Map one `markdown/…` path to its chunk id. Returns null for files outside\n * the known corpora — callers MUST treat that as a parity failure so new\n * content directories cannot bypass the seed.\n */\nexport function chunkIdFor(relPath: string): string | null {\n const parts = relPath.split('/');\n if (parts[0] !== 'markdown' || parts.length < 2) return null;\n const corpus = parts[1];\n // markdown/<corpus>/<rest…>; a file directly under markdown/ has no corpus.\n if (parts.length === 2) return null;\n const slug = parts[2]?.replace(/\\.md$/, '');\n switch (corpus) {\n case 'canvas':\n case 'dashboards':\n case 'efforts':\n return corpus;\n case 'collections':\n return parts.length === 3 ? `collection._root` : `collection.${slug}`;\n case 'feeds':\n return parts.length === 3 ? `feed._root` : `feed.${slug}`;\n default:\n return null;\n }\n}\n\n/** Scan the markdown corpus; returns repo-relative POSIX paths of all .md files. */\nexport function collectCorpusMarkdown(markdownDir: string): string[] {\n return listMarkdownFiles(markdownDir).map((p) => `markdown/${p}`);\n}\n\n/** Group markdown corpus paths into chunk groups; throws on paths outside the known corpora. */\nexport function partitionIntoChunks(paths: string[]): ChunkGroup[] {\n const byId = new Map<string, string[]>();\n for (const p of paths) {\n const id = chunkIdFor(p);\n if (id === null) {\n throw new Error(\n `[generate-seed] Parity failure: '${p}' is not part of any known corpus ` +\n `(canvas | dashboards | efforts | collections | feeds). ` +\n `Extend chunkIdFor() if this is a new corpus.`,\n );\n }\n const list = byId.get(id);\n if (list) list.push(p);\n else byId.set(id, [p]);\n }\n return [...byId.entries()]\n .sort(([a], [b]) => (a < b ? -1 : 1))\n .map(([id, files]) => ({ id, files }));\n}\n\n// ── Dashboard gate (#906) ─────────────────────────────────────────────────\n\n/**\n * Validate one dashboard note in the locked #899 format: dashboard\n * frontmatter, a title, known widget types, WQL bodies that parse (and are\n * aggregate queries, not find queries), and every `$token` reference\n * declared. Returns the problems found (empty = valid).\n */\nexport function validateDashboardNote(raw: string): string[] {\n const problems: string[] = [];\n const { meta } = parseFrontmatter(raw);\n const { sections } = parseDashboardNote(raw);\n const doc = buildDashboardDocument(sections, meta);\n if (!doc.isDashboard) return ['file is not a dashboard note (missing dashboard frontmatter)'];\n if (doc.title === undefined) problems.push('dashboard has no title');\n if (doc.widgets.length < 3) problems.push(`dashboard has only ${doc.widgets.length} widgets (the locked format has ≥ 3)`);\n const declared = new Set(doc.tokens.map((t) => t.name));\n for (const widget of doc.widgets) {\n const where = `widget '${widget.title ?? widget.body.slice(0, 40)}'`;\n if (widget.title === undefined) problems.push(`${where}: missing title`);\n if (!isDashboardWidgetType(resolveWidgetType(widget.type))) {\n problems.push(`${where}: unknown widget type '${widget.type}'`);\n }\n const parsed = parseQuery(widget.body);\n if (parsed.error !== undefined) problems.push(`${where}: WQL parse error: ${parsed.error}`);\n for (const ref of [\n ...widget.body.matchAll(/\\$([A-Za-z][\\w-]*)/g),\n ...Object.values(widget.attributes).flatMap((v) => [...String(v).matchAll(/\\$([A-Za-z][\\w-]*)/g)]),\n ]) {\n if (!declared.has(ref[1])) problems.push(`${where}: undeclared token $${ref[1]}`);\n }\n }\n return problems;\n}\n\n/** Validate every dashboard file in a chunk group; throws on the first invalid file. */\nfunction gateDashboards(groups: ChunkGroup[], corpusRoot: string): void {\n for (const group of groups) {\n if (group.id !== DASHBOARDS_CHUNK_ID) continue;\n for (const p of group.files) {\n const problems = validateDashboardNote(readFileSync(join(corpusRoot, p), 'utf8'));\n if (problems.length > 0) {\n throw new Error(`[generate-seed] Dashboard validation failed for '${p}':\\n - ${problems.join('\\n - ')}`);\n }\n }\n }\n}\n\n// ── Block index derivation ────────────────────────────────────────────────\n\n\n/** Created-at from the corpus repo's git history (collections/guides), 0 fallback when unknown. */\nfunction getFileCreatedAt(file: string, repoRoot: string): number {\n try {\n const out = execSync(`git log -1 --format=%ct -- '${file}'`, { cwd: repoRoot, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();\n const ts = Number(out) * 1000;\n return Number.isFinite(ts) && ts > 0 ? ts : 0;\n } catch {\n return 0;\n }\n}\n\n/** Created-at timestamp for a feed entry's date key (`yyyy-mm-dd` from the path). */\nexport function feedDateToCreatedAt(dateKey: string): number {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(dateKey)) return 0;\n const ts = Date.parse(`${dateKey}T00:00:00Z`);\n return Number.isNaN(ts) ? 0 : ts;\n}\n\n// canvasRouteSlug lives in contract.ts — one derivation shared by the\n// block plane (here) and the app's importer (note plane).\n\n\nexport function compileSeedRow(path: string, content: string, metadata: { routeId?: string; noteTitle?: string; sourceId?: string; createdAt?: number } = {}): SeedRow {\n let ordinal = 0;\n const blocks = reconcileNoteBlocks(content, { sourceRevision: 1, registeredWidgets: SEED_REGISTERED_WIDGETS, createId: () => `seed:${path}:${ordinal++}` });\n const noteId = metadata.routeId ?? path;\n const sections = parseDocumentSections(content);\n const blockIndex: BlockIndexRow[] = Object.values(blocks).map((block, position) => {\n const section = sections.find((section) => section.from === block.from && section.to === block.to);\n return { id: `${noteId}:${block.id}`, noteId, blockId: block.id, blockVersion: 1, sourceRevision: 1, from: block.from, to: block.to, position, dataType: block.kind, ...(block.kind === 'wod' ? { blockContentId: blockContentId(section?.scriptBlock?.content ?? content.slice(block.from, block.to)) } : {}), rawContent: content.slice(block.from, block.to), noteTitle: metadata.noteTitle ?? fileToDisplayName(path.split('/').at(-1) ?? path), createdAt: metadata.createdAt ?? 0, isStatic: true, sourceId: metadata.sourceId, sourcePath: path, routeId: metadata.routeId };\n });\n return { path, content, blocks, blockIndex, blockEfforts: [] };\n}\n\nexport function buildBlockIndexRows(markdownDir: string, corpusRoot: string): BlockIndexRow[] {\n const rows: BlockIndexRow[] = [];\n for (const path of collectCorpusMarkdown(markdownDir)) {\n const chunkId = chunkIdFor(path);\n if (!chunkId) continue;\n const content = readFileSync(join(corpusRoot, path), 'utf8');\n const parts = path.split('/');\n const stem = (parts.at(-1) ?? '').replace(/\\.md$/, '');\n const catalog = parts[2];\n const routeId = chunkId === 'canvas' ? canvasRouteSlug(content) ?? undefined : chunkId.startsWith('collection.') ? (stem.toLowerCase() === 'readme' ? catalog : `${catalog}/${stem}`) : chunkId.startsWith('feed.') ? parts.slice(1).join('/').replace(/\\.md$/, '') : undefined;\n const sourceId = seedNoteSourceId(path, content, chunkId);\n const createdAt = chunkId.startsWith('feed.') ? feedDateToCreatedAt(parts.at(-2) ?? '') : getFileCreatedAt(path, corpusRoot);\n rows.push(...compileSeedRow(path, content, { routeId, sourceId, createdAt }).blockIndex);\n }\n return rows;\n}\n\n/**\n * Syntax gate — every `wod` block's script must parse cleanly.\n *\n * Plain fences get a strict scan of the Lezer tree for error nodes\n * (`WhiteboardScript.errors` only carries mapper exceptions; the parser\n * recovers silently, so the tree is scanned directly) with `path:line`\n * diagnostics. Dialect-fenced blocks (`log:climbing`, …) are owned by the\n * dialect stack — their `key: value` lines are recovered by dialect\n * handlers, not the base grammar — so those gate on the exception channel\n * of a dialect-aware parse instead, matching how the app consumes them.\n */\nexport function validateWodBlockSyntax(blocks: BlockIndexRow[]): string[] {\n const problems: string[] = [];\n for (const block of blocks) {\n if (block.dataType !== 'wod' || !block.rawContent?.trim()) continue;\n const section = parseDocumentSections(block.rawContent, { registeredWidgets: SEED_REGISTERED_WIDGETS })\n .find((s) => s.scriptBlock);\n const source = section?.scriptBlock?.content ?? block.rawContent;\n if (!source.trim()) continue;\n\n const where = block.sourcePath ?? block.noteId;\n if (section?.sport) {\n const parsed = parseScript(source, { sport: section.sport });\n for (const error of parsed.errors ?? []) {\n problems.push(`${where}: ${error.message}`);\n }\n continue;\n }\n\n const doc = source.endsWith('\\n') ? source : source + '\\n';\n const tree = whiteboardParser.parse(doc);\n tree.iterate({\n enter: (node) => {\n if (!node.type.isError) return;\n const line = doc.slice(0, node.from).split('\\n').length;\n const snippet = source.slice(node.from, Math.min(node.to, node.from + 60)).split('\\n')[0];\n problems.push(`${where}:${line} \\`${snippet}\\``);\n },\n });\n }\n return problems;\n}\n\n/**\n * Uncataloged effort discovered during workout block analysis.\n */\nexport interface DiscoveredEffort {\n slug: string;\n label: string;\n rawLabels: string[];\n}\n\n/** Static lookup — syntax/structure keywords and known non-effort labels that must never scaffold. */\nconst NON_EFFORT_SLUGS: Record<string, true> = {\n 'amrap': true, 'emom': true, 'tabata': true, 'for-time': true, 'rounds': true, 'sets': true,\n 'repetitions': true, 'count-down': true, 'total-reps': true,\n 'warmup': true, 'cooldown': true, 'cool-down': true, 'transition': true, 'rest': true, 'break': true, 'work': true,\n 'i-suck-at-this': true, 'isuckatthis': true, 'movement': true, 'movement-you': true, 'selected-exercise': true,\n 'training-setup': true, 'grade-system': true, 'hangs': true, 'warm-light-wind': true, 'basin': true, 'rock-canyon': true,\n 'b-onsight': true, 'a-redpoint': true, 'd-redpoint': true, 'v0-flash': true, 'v2-flash': true, 'v7-redpoint': true,\n 'avgrpe-mean': true, 'calculate': true, 'totalload-sum': true, 'query': true, 'by': true,\n '': true, '-': true, '...': true, 'x': true, 's': true, 'bw': true,\n};\n\nfunction formatDiscoveredLabel(raw: string): string {\n const clean = raw.replace(/[-_]+/g, ' ').trim();\n return clean\n .split(/\\s+/)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join(' ');\n}\n\nexport function loadExistingEffortMap(markdownDir: string): {\n slugs: Set<string>;\n aliasToCanonical: Map<string, string>;\n} {\n const slugs = new Set<string>();\n const aliasToCanonical = new Map<string, string>();\n const effortsDir = join(markdownDir, 'efforts');\n for (const file of listMarkdownFiles(effortsDir)) {\n const raw = readFileSync(join(effortsDir, file), 'utf8');\n const parsed = parseEffortFile(raw);\n if (!parsed) continue;\n\n slugs.add(parsed.slug);\n aliasToCanonical.set(parsed.slug, parsed.slug);\n aliasToCanonical.set(parsed.label.toLowerCase(), parsed.slug);\n aliasToCanonical.set(parsed.slug.replace(/-/g, ' '), parsed.slug);\n\n for (const alias of parsed.aliases) {\n aliasToCanonical.set(alias.toLowerCase(), parsed.slug);\n aliasToCanonical.set(alias.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/(^-|-$)/g, ''), parsed.slug);\n }\n }\n\n return { slugs, aliasToCanonical };\n}\n\nexport function discoverUncatalogedEfforts(markdownDir: string, corpusRoot: string): DiscoveredEffort[] {\n const { slugs, aliasToCanonical } = loadExistingEffortMap(markdownDir);\n const blocks = buildBlockIndexRows(markdownDir, corpusRoot);\n const discovered = new Map<string, { label: string; rawLabels: Set<string> }>();\n\n for (const block of blocks) {\n if (block.dataType !== 'wod' || !block.rawContent) continue;\n const section = parseDocumentSections(block.rawContent, { registeredWidgets: SEED_REGISTERED_WIDGETS }).find((section) => section.scriptBlock);\n const script = parseScript(section?.scriptBlock?.content ?? block.rawContent);\n for (const statement of script.statements) {\n const effortMetric = statement.metrics?.getMetric?.('effort');\n const effortLabel = (effortMetric && typeof effortMetric.value === 'string' ? effortMetric.value : undefined) ?? statement.exerciseId;\n if (!effortLabel) continue;\n\n const slugified = effortLabel.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/(^-|-$)/g, '');\n if (!slugified || NON_EFFORT_SLUGS[slugified]) continue;\n\n const canonical = aliasToCanonical.get(slugified) ?? aliasToCanonical.get(effortLabel.toLowerCase());\n if (canonical && slugs.has(canonical)) continue;\n\n const existing = discovered.get(slugified);\n if (existing) {\n existing.rawLabels.add(effortLabel);\n } else {\n discovered.set(slugified, {\n label: formatDiscoveredLabel(effortLabel),\n rawLabels: new Set([effortLabel]),\n });\n }\n }\n }\n\n return Array.from(discovered.entries()).map(([slug, data]) => ({\n slug,\n label: data.label,\n rawLabels: Array.from(data.rawLabels),\n }));\n}\n\nexport function scaffoldDiscoveredEfforts(\n discovered: DiscoveredEffort[],\n markdownDir: string,\n): string[] {\n const targetDir = join(markdownDir, 'efforts', 'discovered');\n if (!existsSync(targetDir)) {\n mkdirSync(targetDir, { recursive: true });\n }\n\n const createdPaths: string[] = [];\n for (const effort of discovered) {\n const filePath = join(targetDir, `${effort.slug}.md`);\n if (existsSync(filePath)) continue;\n\n const aliases = effort.rawLabels\n .filter((l) => l.toLowerCase() !== effort.label.toLowerCase())\n .map((l) => ` - \"${l.replace(/\"/g, '\\\\\"')}\"`);\n\n const content = [\n '---',\n `id: effort-bundled-${effort.slug}`,\n `slug: ${effort.slug}`,\n `label: \"${effort.label.replace(/\"/g, '\\\\\"')}\"`,\n aliases.length > 0 ? `aliases:\\n${aliases.join('\\n')}` : 'aliases: []',\n 'baseAttributes:',\n ' met: 5.0',\n ' discipline: general',\n ' intensityTier: moderate',\n 'registrySource: bundled',\n '---',\n '',\n ].join('\\n');\n\n writeFileSync(filePath, content, 'utf8');\n createdPaths.push(filePath);\n }\n\n return createdPaths;\n}\n\n/**\n * Derive BlockEffort[] containment rows from the block-index row set.\n * Requires a second pass over the source markdown to parse the script AST,\n * which is safe because the corpus is static and the pass is compile-time.\n */\nexport function buildBlockEffortRows(markdownDir: string, corpusRoot: string, blocks: BlockIndexRow[] = buildBlockIndexRows(markdownDir, corpusRoot)): BlockEffort[] {\n const efforts: BlockEffort[] = [];\n const { aliasToCanonical } = loadExistingEffortMap(markdownDir);\n for (const block of blocks) {\n if (block.dataType !== 'wod' || !block.rawContent) continue;\n const section = parseDocumentSections(block.rawContent, { registeredWidgets: SEED_REGISTERED_WIDGETS }).find((section) => section.scriptBlock);\n const script = parseScript(section?.scriptBlock?.content ?? block.rawContent);\n const effortSlugs = extractEffortSlugs(script.statements);\n const linked = new Set<string>();\n for (const rawSlug of effortSlugs) {\n const norm = rawSlug.toLowerCase().trim();\n const canonicalSlug =\n aliasToCanonical.get(norm) ??\n aliasToCanonical.get(norm.replace(/[^a-z0-9]+/g, '-').replace(/(^-|-$)/g, '')) ??\n norm.replace(/[^a-z0-9]+/g, '-').replace(/(^-|-$)/g, '');\n if (!canonicalSlug || NON_EFFORT_SLUGS[canonicalSlug] || NON_EFFORT_SLUGS[norm]) {\n continue;\n }\n if (linked.has(canonicalSlug)) continue;\n linked.add(canonicalSlug);\n efforts.push({\n id: `${block.id}:${canonicalSlug}`,\n noteId: block.noteId,\n blockId: block.blockId,\n blockContentId: block.blockContentId,\n effortSlug: canonicalSlug,\n isStatic: block.isStatic,\n sourcePath: block.sourcePath,\n createdAt: block.createdAt,\n });\n }\n }\n return efforts;\n}\n\n\n// ── Generation ────────────────────────────────────────────────────────────\n\nfunction sha256Hex(data: string | Buffer): string {\n return createHash('sha256').update(data).digest('hex');\n}\n\nexport function generateSeed(options: GenerateSeedOptions = {}): GenerateSeedResult {\n const t0 = Date.now();\n const passMs = { scan: 0, blockIndex: 0, parseGate: 0, blockEfforts: 0, write: 0 };\n const corpusRoot = options.corpusRoot ?? process.cwd();\n const markdownDir = options.markdownDir ?? join(corpusRoot, 'markdown');\n const outDir = options.outDir ?? join(corpusRoot, 'dist');\n const gitVersion = options.version !== undefined\n ? { ...resolveGitVersion(corpusRoot), version: options.version }\n : resolveGitVersion(corpusRoot);\n if (options.scaffoldDiscoveredEfforts) {\n const discovered = discoverUncatalogedEfforts(markdownDir, corpusRoot);\n if (discovered.length > 0) {\n scaffoldDiscoveredEfforts(discovered, markdownDir);\n }\n }\n\n const tScan = Date.now();\n const paths = collectCorpusMarkdown(markdownDir);\n const groups = partitionIntoChunks(paths);\n gateDashboards(groups, corpusRoot);\n if (options.templateFile && existsSync(options.templateFile)) {\n const templateRowPath = options.templateRowPath\n ?? relative(corpusRoot, options.templateFile).split('\\\\').join('/');\n groups.push({ id: TEMPLATE_CHUNK_ID, files: [templateRowPath] });\n }\n passMs.scan = Date.now() - tScan;\n\n const tBlockIndex = Date.now();\n const blockRows = buildBlockIndexRows(markdownDir, corpusRoot);\n passMs.blockIndex = Date.now() - tBlockIndex;\n const tParseGate = Date.now();\n const syntaxProblems = validateWodBlockSyntax(blockRows);\n passMs.parseGate = Date.now() - tParseGate;\n if (syntaxProblems.length > 0) {\n const shown = syntaxProblems.slice(0, 20).map((p) => ` ${p}`).join('\\n');\n const more = syntaxProblems.length > 20 ? `\\n … and ${syntaxProblems.length - 20} more` : '';\n throw new Error(`[wod build] block syntax gate failed — ${syntaxProblems.length} block(s) do not parse:\\n${shown}${more}`);\n }\n\n const chunksDir = join(outDir, 'chunks');\n rmSync(outDir, { recursive: true, force: true });\n mkdirSync(chunksDir, { recursive: true });\n\n const manifestChunks: ManifestChunk[] = [];\n const tBlockEfforts = Date.now();\n const effortRows = buildBlockEffortRows(markdownDir, corpusRoot, blockRows);\n passMs.blockEfforts = Date.now() - tBlockEfforts;\n const blocksByPath = new Map<string, BlockIndexRow[]>();\n const effortsByPath = new Map<string, BlockEffort[]>();\n for (const row of blockRows) {\n const rows = blocksByPath.get(row.sourcePath!) ?? [];\n rows.push(row); blocksByPath.set(row.sourcePath!, rows);\n }\n for (const row of effortRows) {\n const rows = effortsByPath.get(row.sourcePath!) ?? [];\n rows.push(row); effortsByPath.set(row.sourcePath!, rows);\n }\n let totalFiles = 0;\n\n const tWrite = Date.now();\n for (const { id, files } of groups) {\n // The template chunk's row path is the host-pinned historical identity,\n // not a path inside this repo — read it from the template file itself.\n const templateSource = id === TEMPLATE_CHUNK_ID ? options.templateFile : undefined;\n const rows: SeedRow[] = files.map((p) => {\n const raw = readFileSync(templateSource ?? join(corpusRoot, p), 'utf8');\n const content = id === TEMPLATE_CHUNK_ID ? raw.replace(/\\$CURSOR/g, '') : raw;\n const compiled = compileSeedRow(p, content);\n compiled.blockIndex = blocksByPath.get(p) ?? compiled.blockIndex;\n compiled.blockEfforts = effortsByPath.get(p) ?? [];\n return compiled;\n });\n const bytes = Buffer.from(JSON.stringify(rows), 'utf8');\n const sha = sha256Hex(bytes);\n const file = `chunks/${id}.${sha.slice(0, 8)}.json`;\n writeFileSync(join(outDir, file), bytes);\n manifestChunks.push({ id, path: file, sha256: sha, bytes: bytes.length, count: rows.length });\n totalFiles += rows.length;\n }\n\n passMs.write = Date.now() - tWrite;\n\n const manifest: SeedManifest = {\n schema: SEED_SCHEMA,\n version: gitVersion.version,\n versionLabel: gitVersion.versionLabel,\n commit: gitVersion.commit,\n dirty: gitVersion.dirty,\n builtAt: new Date().toISOString(),\n chunks: manifestChunks,\n };\n writeFileSync(join(outDir, 'manifest.json'), JSON.stringify(manifest, null, 2) + '\\n');\n\n const reportPath = writeBuildReport(outDir, {\n manifest,\n totalMs: Date.now() - t0,\n passMs,\n fileCount: paths.length,\n outDir,\n });\n\n return { manifest, outDir, totalFiles, reportPath, passMs };\n}\n","/**\n * errors.ts — the single HTTP error type every layer throws; app.ts maps it\n * to the wire's { error, code? } JSON with the matching status.\n */\nexport class HttpError extends Error {\n constructor(readonly status: number, message: string, readonly code?: string) {\n super(message);\n this.name = 'HttpError';\n }\n}\n","/**\n * app.ts — one native fetch handler for the whole surface:\n * GET /api/health\n * GET /api/v1/:store/get?key= GET /api/v1/:store/all?range=&count=\n * GET /api/v1/:store/index/:idx?range=&count=\n * GET /api/v1/:store/count?range=&index=\n * PUT /api/v1/:store {value} DELETE /api/v1/:store?key=\n * POST /api/v1/:store/clear POST /api/v1/tx {ops}\n * POST /api/v1/wipe POST /api/v1/query\n * everything else: static SPA serving from playgroundDist (asset miss with an\n * extension → 404; extensionless → index.html; traversal/symlink escapes →\n * 403; /api never falls through to the SPA).\n *\n * `db` may be null for the CLI playground mode: static SPA serving only, every\n * /api request answers 404 — the playground never touches a server database.\n */\n\nimport { join, resolve, sep } from 'node:path';\nimport { stat, realpath } from 'node:fs/promises';\nimport { realpathSync } from 'node:fs';\nimport { HttpError } from './errors';\nimport {\n handleDomainQuery,\n refreshDomain,\n wipeDomain,\n MAX_BODY,\n StorageError,\n storeDefinition,\n getRow,\n listRows,\n countRows,\n wipeRows,\n type Database,\n} from '@bitcobblers/wod-wiki-storage/sql';\nimport { keyFromValue, type KeyDTO, type RangeDTO, type TxOp } from '@bitcobblers/wod-wiki-storage';\n\nconst json = (value: unknown, status: number): Response =>\n new Response(JSON.stringify(value), { status, headers: { 'content-type': 'application/json' } });\n\n/** Bun.file without the bun-types ambient global (the engine stays\n * Node-compilable; server code only ever runs under Bun). */\nfunction bunFile(path: string): BodyInit {\n // Well-known runtime global invisible to the compiler (no bun-types here).\n const bun = globalThis as { Bun?: { file(path: string): BodyInit } };\n if (!bun.Bun) throw new Error('the wod-wiki server handler requires the Bun runtime (https://bun.sh)');\n return bun.Bun.file(path);\n}\n\nconst plain = (body: string, status: number): Response =>\n new Response(body, { status, headers: { 'content-type': 'text/plain; charset=utf-8' } });\n\nconst notFound = (): Response => json({ error: 'not found' }, 404);\nconst methodNotAllowed = (): Response => json({ error: 'method not allowed' }, 405);\n\nconst noContent = (): Response => new Response(null, { status: 204 });\n\n/** URLSearchParams already applies the form-urlencoded '+' → space then %XX\n * decoding the wire contract relies on. */\nconst qget = (url: URL, name: string): string | undefined => url.searchParams.get(name) ?? undefined;\n\nfunction jsonParam(url: URL, name: string): unknown {\n const raw = qget(url, name);\n if (raw === undefined) return undefined;\n try {\n return JSON.parse(raw) as unknown;\n } catch {\n throw new HttpError(400, `invalid JSON in ?${name}`);\n }\n}\n\n/** ?range accepts a RangeDTO object or a bare key (scalar/tuple → {only}). */\nfunction rangeParam(url: URL): RangeDTO | undefined {\n const v = jsonParam(url, 'range');\n if (v === undefined) return undefined;\n if (v !== null && typeof v === 'object' && !Array.isArray(v)) return v as RangeDTO;\n return { only: v as KeyDTO };\n}\n\nfunction countParam(url: URL): number | undefined {\n const raw = qget(url, 'count');\n if (raw === undefined) return undefined;\n const n = Number(raw); // Number('') === 0, matching the wire contract\n if (!Number.isFinite(n) || n < 0) throw new HttpError(400, 'invalid ?count');\n return Math.trunc(n);\n}\n\nasync function readJsonBody(req: Request, maxBytes?: number): Promise<unknown> {\n const body = await req.text();\n if (maxBytes !== undefined && body.length > maxBytes) {\n throw new HttpError(413, `domain query body exceeds ${maxBytes} bytes`);\n }\n try {\n return JSON.parse(body) as unknown;\n } catch {\n throw new HttpError(400, 'body must be valid JSON');\n }\n}\n\nfunction txOps(value: unknown): TxOp[] {\n if (!Array.isArray(value)) throw new HttpError(400, 'tx body must be {ops: []}');\n return value.map((op: unknown): TxOp => {\n if (op === null || typeof op !== 'object' || Array.isArray(op) || !('store' in op) || typeof op.store !== 'string' || !('op' in op)) {\n throw new HttpError(400, 'tx op must have a store and operation');\n }\n const def = storeDefinition(op.store);\n const store = def.name;\n switch (op.op) {\n case 'put':\n if (!('value' in op)) throw new HttpError(400, 'put requires value');\n return { op: 'put', store, value: op.value };\n case 'delete':\n if (!('key' in op)) throw new HttpError(400, 'delete requires key');\n return { op: 'delete', store, key: op.key as KeyDTO };\n case 'clear':\n return { op: 'clear', store };\n case 'check': {\n if (!('key' in op) || !('value' in op)) throw new HttpError(400, 'check requires key and value');\n const scalar = (key: unknown): key is string | number => typeof key === 'string' || (typeof key === 'number' && Number.isFinite(key));\n if (!scalar(op.key) && !(Array.isArray(op.key) && op.key.length > 0 && op.key.every(scalar))) {\n throw new HttpError(400, 'check requires a scalar key or non-empty scalar tuple');\n }\n if (op.value !== null && (typeof op.value !== 'object' || Array.isArray(op.value))) {\n throw new HttpError(400, 'check value must be a row or null');\n }\n const parts = Array.isArray(op.key) ? op.key : [op.key];\n if (parts.length !== def.keyPath.length) throw new HttpError(400, 'check key arity must match the store');\n if (op.value !== null) {\n let rowKey: KeyDTO;\n try { rowKey = keyFromValue(def, op.value); }\n catch { throw new HttpError(400, 'check row must have its primary key'); }\n if (JSON.stringify(rowKey) !== JSON.stringify(op.key)) throw new HttpError(400, 'check row primary key must match key');\n }\n return { op: 'check', store, key: op.key, value: op.value };\n }\n default:\n throw new HttpError(400, 'tx op must be put | delete | clear | check');\n }\n });\n}\n\n// ── Static SPA serving ───────────────────────────────────────────────────────\n\nconst MIME: Record<string, string> = {\n html: 'text/html; charset=utf-8',\n js: 'text/javascript; charset=utf-8',\n mjs: 'text/javascript; charset=utf-8',\n css: 'text/css; charset=utf-8',\n json: 'application/json; charset=utf-8',\n map: 'application/json; charset=utf-8',\n svg: 'image/svg+xml',\n png: 'image/png',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n webp: 'image/webp',\n ico: 'image/x-icon',\n woff: 'font/woff',\n woff2: 'font/woff2',\n ttf: 'font/ttf',\n mp3: 'audio/mpeg',\n wav: 'audio/wav',\n webmanifest: 'application/manifest+json',\n xml: 'application/xml',\n txt: 'text/plain; charset=utf-8',\n};\n\nasync function realpathSafe(path: string): Promise<string | undefined> {\n try {\n return await realpath(path);\n } catch {\n return undefined;\n }\n}\n\nasync function serveFile(real: string, rel: string): Promise<Response> {\n // Seed chunks are content-hashed; everything else revalidates.\n const cache = rel.includes('seed/chunks/')\n ? 'public, max-age=31536000, immutable'\n : 'no-cache';\n const ext = rel.slice(rel.lastIndexOf('.') + 1).toLowerCase();\n return new Response(bunFile(real), {\n headers: { 'content-type': MIME[ext] ?? 'application/octet-stream', 'cache-control': cache },\n });\n}\n\nasync function serveSpaShell(distRoot: string): Promise<Response | undefined> {\n const index = await realpathSafe(join(distRoot, 'index.html'));\n // Same symlink confinement as assets: a dist/index.html symlink pointing\n // outside must not become the shell.\n if (index && (index === distRoot || index.startsWith(distRoot + sep))\n && (await stat(index).then((s) => s.isFile(), () => false))) {\n return new Response(bunFile(index), {\n headers: { 'content-type': MIME.html, 'cache-control': 'no-cache' },\n });\n }\n return undefined;\n}\n\nasync function staticResponse(distRoot: string | undefined, method: string, pathname: string): Promise<Response> {\n if (method !== 'GET') return plain('method not allowed', 405);\n if (!distRoot) {\n return plain('wod-wiki-api: playground dist not found. Set PLAYGROUND_DIST or run the playground server build.', 503);\n }\n let rel: string;\n try {\n rel = decodeURIComponent(pathname).replace(/^\\/+/, '');\n } catch {\n return plain('bad request', 400);\n }\n if (rel === '') rel = 'index.html';\n const parts = rel.split('/');\n if (parts.some((p) => p === '..')) return plain('forbidden', 403);\n const base = parts[parts.length - 1] ?? '';\n const hasExtension = base.includes('.');\n\n const abs = resolve(distRoot, ...parts);\n const real = await realpathSafe(abs);\n // Symlink confinement: serve only paths that really live under the dist root.\n if (real && (real === distRoot || real.startsWith(distRoot + sep))) {\n const info = await stat(real).then((s) => s.isFile(), () => false);\n if (info) return serveFile(real, rel);\n }\n // SPA fallback: extensionless paths render the app shell.\n if (!hasExtension) {\n const shell = await serveSpaShell(distRoot);\n if (shell) return shell;\n }\n return plain('not found', 404);\n}\n\n// ── API routing ──────────────────────────────────────────────────────────────\n\nasync function storeRoutes(db: Database, method: string, sub: string, url: URL, req: Request): Promise<Response> {\n let inner = sub.slice('/v1/'.length);\n if (inner.endsWith('/')) inner = inner.slice(0, -1);\n if (inner === '') return notFound();\n const segments = inner.split('/');\n let name: string;\n let action: string | undefined;\n if (segments.length === 1) {\n name = segments[0];\n } else if (segments.length === 2) {\n [name, action] = segments;\n } else if (segments.length === 3 && segments[1] === 'index' && segments[2] !== '') {\n [name, , action] = segments;\n action = `index/${action}`;\n } else {\n return notFound();\n }\n const def = storeDefinition(name); // 404 for unknown stores\n\n const range = rangeParam(url);\n const count = countParam(url);\n\n if (action === 'get' && method === 'GET') {\n const key = jsonParam(url, 'key');\n if (key === undefined) throw new HttpError(400, 'missing ?key');\n const row = await getRow(db, def, key as KeyDTO);\n return row === undefined ? notFound() : json(row, 200);\n }\n if (action === 'all' && method === 'GET') {\n return json(await listRows(db, def, range, count), 200);\n }\n if (action === 'count' && method === 'GET') {\n const indexName = qget(url, 'index');\n const n = indexName\n ? await countRows(db, def, range, indexName)\n : await countRows(db, def, range);\n return json({ count: Number(n) }, 200);\n }\n if (action === 'clear' && method === 'POST') {\n await db.transaction((tx) => refreshDomain(tx, [{ op: 'clear', store: def.name }]));\n return noContent();\n }\n if (action?.startsWith('index/') && method === 'GET') {\n return json(await listRows(db, def, range, count, action.slice('index/'.length)), 200);\n }\n if (action === undefined && method === 'PUT') {\n const parsed = await readJsonBody(req);\n const value = typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed) && 'value' in parsed\n ? parsed.value\n : undefined;\n if (value === undefined) throw new HttpError(400, 'body must be {value: ...}');\n const [key] = await db.transaction((tx) => refreshDomain(tx, [{ op: 'put', store: def.name, value }]));\n return json({ key }, 200);\n }\n if (action === undefined && method === 'DELETE') {\n const keyParam = jsonParam(url, 'key');\n const target = keyParam !== undefined ? keyParam : range;\n if (target === undefined || target === null) throw new HttpError(400, 'DELETE requires ?key or ?range');\n // Wire DELETE accepts a key or a range; the TxOp delete variant types the\n // narrower KeyDTO even though deleteRows honours both.\n await db.transaction((tx) => refreshDomain(tx, [{ op: 'delete', store: def.name, key: target as KeyDTO }]));\n return noContent();\n }\n return methodNotAllowed();\n}\n\nasync function apiRoutes(db: Database, req: Request, method: string, sub: string, url: URL): Promise<Response> {\n if (sub === '/health') {\n return json({ ok: true, driver: db.dialect }, 200);\n }\n if (sub === '/v1/wipe' && method === 'POST') {\n await db.transaction(async (tx) => {\n // System memberships survive; derived projections follow (empty is consistent).\n await wipeRows(tx);\n await wipeDomain(tx);\n });\n return noContent();\n }\n if (sub === '/v1/tx' && method === 'POST') {\n const parsed = await readJsonBody(req);\n const ops = typeof parsed === 'object' && parsed !== null && 'ops' in parsed ? parsed.ops : undefined;\n const parsedOps = txOps(ops);\n const results = await db.transaction((tx) => refreshDomain(tx, parsedOps));\n return json({ results }, 200);\n }\n if (sub === '/v1/query') {\n if (method !== 'POST') return methodNotAllowed();\n const body = await readJsonBody(req, MAX_BODY);\n return json(await handleDomainQuery(db, body), 200);\n }\n if (sub.startsWith('/v1/')) return storeRoutes(db, method, sub, url, req);\n return notFound();\n}\n\n// ── Handler factory ──────────────────────────────────────────────────────────\n\nfunction distRootOf(playgroundDist: string | undefined): string | undefined {\n if (!playgroundDist) return undefined;\n try {\n return realpathSync(playgroundDist);\n } catch {\n return undefined;\n }\n}\n\nexport function createHandler(\n db: Database | null,\n options: { playgroundDist: string },\n): (request: Request) => Promise<Response> {\n const distRoot = distRootOf(options.playgroundDist);\n return async (request: Request): Promise<Response> => {\n try {\n const url = new URL(request.url);\n const method = request.method === 'HEAD' ? 'GET' : request.method; // Bun strips HEAD bodies\n const path = url.pathname;\n const response = path === '/api' || path.startsWith('/api/')\n ? db\n ? await apiRoutes(db, request, method, path.slice('/api'.length) || '/', url)\n : notFound()\n : await staticResponse(distRoot, method, path);\n return response;\n } catch (e) {\n if (e instanceof HttpError || e instanceof StorageError) {\n const status = e.status;\n if (status >= 500) console.error('[wod-wiki-api]', e.message);\n const body: { error: string; code?: string } = { error: status >= 500 ? 'internal error' : e.message };\n if (e.code) body.code = e.code;\n return json(body, status);\n }\n console.error('[wod-wiki-api]', e);\n return json({ error: 'internal error' }, 500);\n }\n };\n}\n","/**\n * server.ts — `wod server` (alias `serve`) / `wod playground` (Bun-only front\n * door).\n *\n * Serves the packaged engine stack: the shared fetch handler shipped in this\n * package (the same code the Docker image serves) plus the frontend build\n * packaged under the engine's dist/web/ — no repository checkout, no runtime\n * build.\n *\n * server probes the configured database first (never creates schema —\n * that's `wod init`), then serves API + SPA.\n * playground serves the browser-storage SPA build and never opens a database\n * (every /api request answers 404).\n *\n * Retains the event loop until SIGINT/SIGTERM; shutdown drains in-flight\n * requests before closing the database.\n */\n\nimport { openCliDb, nodeFs, nodePath } from './db';\nimport type { CliDatabaseConfig } from './config';\nimport type { CliDb } from './db';\nimport { createHandler } from '../server/app';\ntype WriteOut = (text: string) => void;\n\nexport type CliServerMode = 'server' | 'playground';\n\nexport interface CliServerOptions {\n /** Resolved database configuration. REQUIRED for 'server'; ignored — never\n * opened or validated — for 'playground'. */\n database?: CliDatabaseConfig;\n host?: string;\n port?: string;\n /** Explicit dist directory (flag or PLAYGROUND_DIST); must already exist. */\n dist?: string;\n /** Merged CLI environment (process env + .env). */\n env: Record<string, string | undefined>;\n}\n\ninterface BunServerLike { stop(): Promise<void> }\ninterface BunGlobalLike { serve(options: { port: number; hostname: string; fetch: (request: Request) => Promise<Response> }): BunServerLike }\n\nfunction bun(): BunGlobalLike {\n // Bun-specific global, absent from the ambient TS lib shapes on purpose\n // (engine stays Node-compilable); the access chain is proven at runtime.\n const b = (globalThis as { Bun?: BunGlobalLike }).Bun;\n if (!b) {\n throw new Error('wod server/playground requires the Bun runtime (https://bun.sh)');\n }\n return b;\n}\n\n/**\n * This module's directory, robust across shipped layouts: ESM via\n * import.meta.url (works under node and Bun; esbuild shims it in CJS too) and\n * Bun's import.meta.dir. ESM code splitting may relocate this module to a\n * chunk at dist/ root, so never assume dist/cli.\n */\nfunction moduleDir(): string {\n const p = nodePath();\n const meta: { dir?: unknown; url?: unknown } = import.meta; // Bun adds `dir`; the TS lib knows neither.\n if (typeof meta.dir === 'string') return p.resolve(meta.dir);\n if (typeof meta.url === 'string' && meta.url.startsWith('file:')) {\n return p.resolve(p.dirname(decodeURIComponent(new URL('.', meta.url).pathname)));\n }\n throw new Error('wod server/playground: cannot determine the installed engine module directory');\n}\n\n/**\n * The installed engine package root: nearest enclosing package.json belonging\n * to this package, walking up from the executing module (dist/cli, a split\n * chunk at dist/ root, dist/bin, or src/cli in a checkout).\n */\nfunction engineRoot(): string {\n const p = nodePath();\n const fs = nodeFs();\n for (let dir = moduleDir(); ; dir = p.dirname(dir)) {\n try {\n if (JSON.parse(fs.readFileSync(p.resolve(dir, 'package.json'), 'utf8')).name === '@bitcobblers/wod-wiki-tools') return dir;\n } catch { /* no manifest here — keep walking */ }\n const parent = p.dirname(dir);\n if (parent === dir) break;\n }\n throw new Error('wod server/playground: cannot locate the installed @bitcobblers/wod-wiki-tools package');\n}\n\n/**\n * Resolve the frontend dist directory. The packaged default lives inside the\n * installed engine module (dist/web/server or dist/web/playground); an\n * explicit --dist/PLAYGROUND_DIST is cwd-relative and must already contain a\n * built SPA (index.html). Nothing is built at runtime.\n */\nfunction resolveDist(mode: CliServerMode, options: CliServerOptions): string {\n const p = nodePath();\n const explicit = options.dist?.trim() || options.env.PLAYGROUND_DIST?.trim() || undefined;\n if (explicit) {\n const dist = p.resolve(explicit); // cwd-relative override\n if (!nodeFs().existsSync(p.resolve(dist, 'index.html'))) {\n throw new Error(\n `wod ${mode}: no built frontend (index.html) at ${dist} — --dist/PLAYGROUND_DIST must `\n + 'point at an already-built directory (the CLI never builds frontends at runtime)',\n );\n }\n return dist;\n }\n const dist = p.resolve(engineRoot(), 'dist', 'web', mode === 'playground' ? 'playground' : 'server');\n if (!nodeFs().existsSync(p.resolve(dist, 'index.html'))) {\n throw new Error(\n `wod ${mode}: packaged frontend missing — expected ${dist}/index.html. `\n + 'Reinstall @bitcobblers/wod-wiki-tools (bun add @bitcobblers/wod-wiki-tools), '\n + 'or rebuild the release assets from a checkout (bun run build:cli) and reinstall the package.',\n );\n }\n return dist;\n}\n\n/** Validate bind address first: flag > HOST/PORT env > loopback:3000. */\nfunction resolveBind(mode: CliServerMode, options: CliServerOptions): { host: string; port: number } {\n const host = options.host?.trim() || options.env.HOST?.trim() || '127.0.0.1';\n const rawPort = options.port?.trim() || options.env.PORT?.trim() || '3000';\n const port = Number(rawPort);\n if (!Number.isInteger(port) || port < 1 || port > 65535) {\n throw new Error(`wod ${mode}: invalid port ${JSON.stringify(rawPort)} (need integer 1..65535)`);\n }\n return { host, port };\n}\n\n/**\n * Start the shared server for `wod server` / `wod playground`. Throws on any\n * startup failure; on success it never returns until SIGINT/SIGTERM (drain,\n * close database, exit 0).\n */\nexport async function runCliServer(\n mode: CliServerMode,\n options: CliServerOptions,\n writeOut: WriteOut,\n): Promise<void> {\n const runtime = bun(); // Fail before any side effect when not under Bun.\n const { host, port } = resolveBind(mode, options); // Validate bind before opening anything.\n\n // Server probes the database BEFORE binding a socket: a missing/uninitialized\n // database refuses with `wod init` guidance.\n let db: CliDb | undefined;\n let dbLabel = 'no database';\n if (mode === 'server') {\n const database = options.database; // hoisted so the guard's narrowing sticks\n if (!database) {\n throw new Error('wod server: no database configuration resolved — this is a runner bug (expected resolveDatabaseConfig output)');\n }\n try {\n db = await openCliDb(database, { initialize: false });\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n throw new Error(`wod server: database not ready — run \\`wod init\\` first. ${message}`, { cause: e });\n }\n dbLabel = db.path;\n }\n\n let server: BunServerLike;\n try {\n const dist = resolveDist(mode, options);\n // Bundled server handler\n const handler = createHandler(db?.db ?? null, { playgroundDist: dist });\n // Playground: no database exists to close — createHandler(null) answers\n server = runtime.serve({ port, hostname: host, fetch: handler });\n if (mode === 'server') {\n writeOut(`wod server: http://${host}:${port} — ${dbLabel} · dist ${dist}`);\n } else {\n writeOut(`wod playground: http://${host}:${port} — in-browser storage (no database) · dist ${dist}`);\n }\n } catch (e) {\n if (db) await db.close(); // never leak the probe connection when startup fails\n throw e;\n }\n\n let closing = false;\n const shutdown = async (): Promise<void> => {\n if (closing) process.exit(0); // second signal forces the exit\n closing = true;\n try {\n await server.stop();\n } finally {\n if (db) await db.close();\n process.exit(0);\n }\n };\n process.on('SIGINT', () => { void shutdown(); });\n process.on('SIGTERM', () => { void shutdown(); });\n\n // Park until a signal handler exits the process.\n await new Promise<never>(() => {});\n}\n","/**\n * Dynamic Language Pack Loader\n *\n * Dynamically loads and registers Language Packs passed via `--pack <module-spec>`.\n * Throws PackLoadError on failure, enabling exit code 3 handling.\n */\n\nfunction getPathUtils() {\n if (typeof globalThis.process?.versions?.node === 'undefined' && !('Bun' in globalThis)) {\n throw new Error('Path resolution is only supported in Node / Bun environments');\n }\n return {\n // eslint-disable-next-line no-restricted-syntax -- lazy CJS require keeps node builtins out of browser bundles\n resolve: require('path').resolve,\n // eslint-disable-next-line no-restricted-syntax -- lazy CJS require keeps node builtins out of browser bundles\n pathToFileURL: require('url').pathToFileURL,\n };\n}\nimport { registerLanguagePack, type LanguagePack } from '@bitcobblers/wod-wiki-engine';\n\nexport class PackLoadError extends Error {\n constructor(\n public readonly spec: string,\n public readonly originalError: unknown,\n ) {\n const msg = originalError instanceof Error ? originalError.message : String(originalError);\n super(`Failed to load Language Pack \"${spec}\": ${msg}`);\n this.name = 'PackLoadError';\n }\n}\n\n/**\n * Dynamically imports a Language Pack module and registers it.\n *\n * @param moduleSpec - Relative or absolute path, or package name.\n */\nexport async function loadLanguagePack(moduleSpec: string): Promise<LanguagePack> {\n try {\n let importPath = moduleSpec;\n\n // If it looks like a relative or absolute file path, resolve and convert to file URL\n if (\n moduleSpec.startsWith('.') ||\n moduleSpec.startsWith('/') ||\n moduleSpec.includes('\\\\') ||\n moduleSpec.endsWith('.ts') ||\n moduleSpec.endsWith('.js') ||\n moduleSpec.endsWith('.mjs')\n ) {\n const { resolve, pathToFileURL } = getPathUtils();\n const resolved = resolve(process.cwd(), moduleSpec);\n importPath = pathToFileURL(resolved).href;\n }\n const imported = await import(/* @vite-ignore */ importPath);\n const candidate = imported.default ?? imported.pack ?? imported;\n\n if (!candidate || typeof candidate !== 'object') {\n throw new Error(`Module \"${moduleSpec}\" does not export a valid LanguagePack object`);\n }\n\n const pack = candidate as LanguagePack;\n registerLanguagePack(pack);\n return pack;\n } catch (error) {\n if (error instanceof PackLoadError) throw error;\n throw new PackLoadError(moduleSpec, error);\n }\n}\n","/**\n * Headless Parse Command Runner\n *\n * Parses Whiteboard Script source text and emits a versioned IR parse-tree envelope.\n */\n\nimport { createParser, type IScript } from '@bitcobblers/wod-wiki-lang';\nimport { createIRFile, buildStatementTree, type WodWikiIRFile, type StatementNode } from '@bitcobblers/wod-wiki-engine';\n\nexport class ParseSyntaxError extends Error {\n constructor(\n public readonly errors: Array<{ message: string; line?: number }>,\n message: string = 'Parse error in Whiteboard Script',\n ) {\n const details = errors.map((e) => e.message).join('; ');\n super(`${message}: ${details}`);\n this.name = 'ParseSyntaxError';\n }\n}\n\nexport interface ParseOptions {\n sport?: string;\n sourceLabel?: string;\n}\n\n/**\n * Parses Whiteboard Script source directly into a StatementNode IR envelope.\n */\nexport function runParse(\n source: string,\n options: ParseOptions = {},\n): WodWikiIRFile<StatementNode> {\n const parser = createParser();\n const script: IScript = parser.read(source, options.sport);\n\n if (script.errors && script.errors.length > 0) {\n throw new ParseSyntaxError(script.errors);\n }\n\n const tree = buildStatementTree(script);\n return createIRFile('parse-tree', tree, { source: options.sourceLabel ?? 'cli:wod parse' });\n}\n","/**\n * Headless Execution Command Runner\n *\n * Executes Whiteboard Script through JIT compiler and runtime state machine,\n * emitting a versioned execution-log IR envelope.\n */\n\nimport {\n createParser,\n createCompiler,\n RuntimeStack,\n createMockClock,\n EventBus,\n ScriptRuntime,\n StartSessionAction,\n NextEvent,\n createAnalyticsEngineForBlock,\n toStoredOutputStatement,\n type INowProvider,\n frozenNow,\n} from '@bitcobblers/wod-wiki-lang';\nimport type {\n StoredOutputStatement,\n WorkoutResults,\n IOutputStatement,\n} from '@bitcobblers/wod-wiki-core';\nimport { createIRFile, type WodWikiIRFile, type ExecutionLog } from '@bitcobblers/wod-wiki-engine';\nimport { ParseSyntaxError } from './parse';\n\nexport interface RunOptions {\n sport?: string;\n dialect?: 'time' | 'log';\n blockId?: string;\n blockVersion?: number;\n startTime?: number;\n maxIterations?: number;\n now?: INowProvider;\n sourceLabel?: string;\n}\n\nexport function buildWorkoutResults(\n outputs: readonly IOutputStatement[],\n options: {\n readonly startTime?: number;\n readonly elapsedTime: number;\n readonly completed: boolean;\n readonly now: INowProvider;\n },\n): WorkoutResults {\n return {\n startTime: options.startTime ?? options.now.nowMs(),\n endTime: options.now.nowMs(),\n duration: options.elapsedTime,\n completed: options.completed,\n logs: outputs.map(toStoredOutputStatement),\n };\n}\n\n/**\n * Runs a workout script to completion using headless state machine and Node clock.\n */\nexport async function runExecution(\n source: string,\n options: RunOptions = {},\n): Promise<WodWikiIRFile<ExecutionLog>> {\n const parser = createParser();\n const script = parser.read(source, options.sport);\n\n if (script.errors && script.errors.length > 0) {\n throw new ParseSyntaxError(script.errors);\n }\n\n const startTime = options.startTime ?? Date.now();\n const now = options.now ?? frozenNow(new Date(startTime));\n const compiler = createCompiler();\n const clock = createMockClock(new Date(startTime));\n const stack = new RuntimeStack();\n const eventBus = new EventBus();\n\n const runtime = new ScriptRuntime(\n script,\n compiler,\n { stack, clock, eventBus },\n {},\n now,\n );\n\n const { engine, analyticsContext } = createAnalyticsEngineForBlock({\n id: options.blockId ?? 'cli-block',\n content: source,\n statements: script.statements,\n sport: options.sport,\n version: options.blockVersion ?? 1,\n startLine: 0,\n endLine: 0,\n dialect: options.dialect ?? 'time',\n state: 'idle',\n createdAt: Date.now(),\n });\n runtime.analyticsContext = analyticsContext;\n runtime.setAnalyticsEngine(engine);\n\n const outputs: IOutputStatement[] = [];\n runtime.subscribeToOutput((out) => {\n outputs.push(out);\n });\n\n // Start the workout session\n runtime.do(new StartSessionAction());\n\n const maxSteps = options.maxIterations ?? 5000;\n let steps = 0;\n\n while (stack.count > 0 && steps < maxSteps) {\n runtime.handle(new NextEvent(undefined, runtime.nowProvider));\n clock.advance(1000);\n steps++;\n }\n\n const workoutResults = buildWorkoutResults(outputs, {\n startTime,\n elapsedTime: steps * 1000,\n completed: stack.count === 0,\n now,\n });\n\n const logs: StoredOutputStatement[] = outputs.map(toStoredOutputStatement);\n\n return createIRFile(\n 'execution-log',\n {\n results: workoutResults,\n logs,\n statements: logs,\n sourceScript: source,\n },\n { source: options.sourceLabel ?? 'cli:wod run' },\n );\n}\n","/**\n * Headless WQL Query Command Runner\n *\n * Evaluates WQL queries against in-memory stores sourced from --corpus,\n * --stdin-log, or --stdin-facts, and emits a versioned IR envelope.\n */\n\nfunction getFs() {\n if (typeof globalThis.process?.versions?.node === 'undefined' && typeof (globalThis as { Bun?: unknown }).Bun === 'undefined') {\n throw new Error('File system operations are only supported in Node / Bun environments');\n }\n // eslint-disable-next-line no-restricted-syntax -- lazy CJS require keeps node builtins out of browser bundles\n return require('fs');\n}\nimport {\n QueryService,\n parseQuery,\n isFindQuery,\n isPipelineQuery,\n type QueryServiceStores,\n type QueryResult,\n type RowsQueryResult,\n type FindQueryResult,\n type PipelineResult,\n type NoteQueryStore,\n type BlockQueryStore,\n type EffortQueryStore,\n type IEffort as WqlEffort,\n} from '@bitcobblers/wod-wiki-wql';\nimport { inMemoryEventStore, createIRFile, isIRFile, type IrKind, type WodWikiIRFile, type ExecutionLog, type CorpusIRData } from '@bitcobblers/wod-wiki-engine';\nimport { toEventRows, toSummaryEventRows } from '@bitcobblers/wod-wiki-wql';\nimport type { AnalyticsDataPoint, Note, BlockIndexRow, BlockRevision, Session, EventRecord } from '@bitcobblers/wod-wiki-core';\nimport type { WorkoutResults } from '@bitcobblers/wod-wiki-core';\nimport type { IEffort } from '@bitcobblers/wod-wiki-lang';\nimport { bundledEfforts } from '@bitcobblers/wod-wiki-lang';\nimport { validateNoteBlocks, parseDocumentSections, blockContentId } from '@bitcobblers/wod-wiki-core';\nexport class WqlSyntaxError extends Error {\n constructor(\n public readonly query: string,\n public readonly syntaxError: string,\n ) {\n super(`WQL Syntax Error in \"${query}\": ${syntaxError}`);\n this.name = 'WqlSyntaxError';\n }\n}\n\nexport interface QueryCliOptions {\n corpusPath?: string;\n stdinLog?: string;\n stdinFacts?: string;\n preferredUnit?: string;\n sourceLabel?: string;\n /** Pre-built store bundle (e.g. sqlite-backed). When set, the corpus/stdin\n * dataset options are ignored. */\n stores?: QueryServiceStores;\n}\n\ninterface LoadedData {\n eventRecords: EventRecord[];\n facts: AnalyticsDataPoint[];\n results: Session[];\n notes: Note[];\n blocks: BlockIndexRow[];\n revisions: BlockRevision[];\n efforts: IEffort[];\n noteTags: Record<string, string[]>;\n}\n\n\nfunction extractPayload(rawJson: string): unknown {\n try {\n const parsed = JSON.parse(rawJson);\n if (isIRFile(parsed)) {\n return parsed.data;\n }\n return parsed;\n } catch (err) {\n throw new Error(`Failed to parse JSON input: ${err instanceof Error ? err.message : String(err)}`, { cause: err });\n }\n}\n\nfunction buildStoresFromData(data: LoadedData) {\n // Direct events and fact-set summaries share one query stream.\n const events = [\n ...data.eventRecords,\n ...data.facts.map((f, i) => ({\n id: `fact:${f.resultId ?? 'stdin'}:${f.metricKey ?? f.type}:${i}`,\n resultId: f.resultId ?? 'stdin-result-1',\n noteId: f.noteId ?? 'stdin-note-1',\n blockContentId: f.blockContentId,\n pageId: f.pageId,\n origin: f.origin,\n timestamp: f.timestamp,\n grain: f.grain === 'event' ? 'event' : 'summary',\n outputType: 'analytics',\n effortSlug: f.effortSlug,\n metrics: [{\n type: f.metricKey ?? f.type,\n value: f.value,\n ...(f.unit ? { unit: f.unit } : {}),\n origin: 'engine',\n }],\n blockId: f.blockId,\n blockVersion: f.blockVersion,\n } as EventRecord)),\n ];\n\n const eventStore = inMemoryEventStore(events);\n\n const noteStore: NoteQueryStore = {\n getAllNotes: async () => [...data.notes],\n getNotesByIds: async (ids) => {\n const selected = new Set(ids);\n return data.notes.filter((note) => selected.has(note.id));\n },\n getNoteIdsForTag: async (tag: string) => {\n const matching = new Set<string>();\n for (const [noteId, tags] of Object.entries(data.noteTags)) {\n if (tags.includes(tag)) matching.add(noteId);\n }\n return matching;\n },\n getNoteTagLabels: async (noteId: string) => [...(data.noteTags[noteId] ?? [])],\n };\n\n const blockStore: BlockQueryStore = {\n getAllBlocks: async () => [...data.blocks],\n };\n\n const effortStore: EffortQueryStore = {\n getAllEfforts: async () => [...data.efforts] as unknown as WqlEffort[],\n };\n\n return { eventStore, noteStore, blockStore, effortStore };\n}\n\nexport function loadQueryData(options: QueryCliOptions): LoadedData {\n const data: LoadedData = {\n eventRecords: [],\n facts: [],\n results: [],\n notes: [],\n blocks: [],\n revisions: [],\n efforts: [...bundledEfforts],\n noteTags: {},\n };\n\n if (options.corpusPath) {\n const fs = getFs();\n if (!fs.existsSync(options.corpusPath)) {\n throw new Error(`Corpus file not found at path: ${options.corpusPath}`);\n }\n const raw = fs.readFileSync(options.corpusPath, 'utf-8');\n const payload = extractPayload(raw);\n\n if (Array.isArray(payload)) {\n data.facts = payload as AnalyticsDataPoint[];\n } else if (payload && typeof payload === 'object') {\n const obj = payload as Record<string, unknown>;\n if ('segments' in obj) throw new Error('Incompatible corpus segments; whole Notes and block revisions are required');\n if (obj.kind === 'event-journal' || Array.isArray(obj.records)) {\n if (Array.isArray(obj.blockRevisions)) data.revisions = obj.blockRevisions as BlockRevision[];\n if (Array.isArray(obj.sessions)) data.results = obj.sessions as Session[];\n if (Array.isArray(obj.records)) {\n data.eventRecords = obj.records as EventRecord[];\n }\n if (Array.isArray(obj.notes)) {\n data.notes = obj.notes as Note[];\n for (const n of obj.notes as Array<{ id?: string; tags?: string[] }>) {\n if (n && typeof n === 'object' && n.id && Array.isArray(n.tags)) {\n data.noteTags[n.id] = n.tags;\n }\n }\n }\n } else if (obj.facts || obj.results || obj.notes || obj.blocks || obj.efforts || obj.tags || obj.logs) {\n const corpus = payload as CorpusIRData;\n if (corpus.facts) data.facts = corpus.facts;\n if (Array.isArray(corpus.results)) data.results = corpus.results;\n if (corpus.notes) data.notes = corpus.notes;\n if (corpus.blocks) data.blocks = corpus.blocks;\n if (corpus.efforts) data.efforts = corpus.efforts;\n if (corpus.revisions) data.revisions = corpus.revisions;\n if (corpus.tags) data.noteTags = corpus.tags;\n\n if (corpus.logs) {\n const identity = {\n noteId: 'corpus-note-1', resultId: 'corpus-result-1', origin: 'journal' as const,\n workoutTimestamp: corpus.logs[0]?.timeSpan?.started ?? Date.now(),\n };\n data.eventRecords = [...toEventRows(corpus.logs, identity), ...toSummaryEventRows(corpus.logs, identity)];\n }\n } else {\n throw new Error(`Unrecognized corpus payload shape in \"${options.corpusPath}\" (expected event-journal, fact-set, or CorpusIRData)`);\n }\n }\n } else if (options.stdinLog) {\n const payload = extractPayload(options.stdinLog) as ExecutionLog | WorkoutResults;\n let executionLog: ExecutionLog;\n const rawLogs = payload.logs ?? ('statements' in payload ? payload.statements : undefined) ?? [];\n if ('results' in payload) {\n executionLog = { results: payload.results, logs: rawLogs, statements: rawLogs };\n } else {\n executionLog = { results: payload, logs: rawLogs, statements: rawLogs };\n }\n\n const identity = {\n noteId: 'stdin-note-1', resultId: 'stdin-result-1',\n origin: 'journal' as const, workoutTimestamp: executionLog.results.startTime,\n };\n data.eventRecords = [\n ...toEventRows(executionLog.logs, identity),\n ...toSummaryEventRows(executionLog.logs, identity),\n ];\n } else if (options.stdinFacts) {\n const payload = extractPayload(options.stdinFacts);\n if (Array.isArray(payload)) {\n data.facts = payload as AnalyticsDataPoint[];\n } else if (payload && typeof payload === 'object' && 'facts' in (payload as Record<string, unknown>)) {\n data.facts = (payload as { facts: AnalyticsDataPoint[] }).facts;\n }\n } else {\n throw new Error('No input dataset provided. Specify --corpus <path>, --stdin-log, or --stdin-facts.');\n }\n for (const note of data.notes) {\n if (typeof note.rawContent !== 'string' || !Number.isSafeInteger(note.sourceRevision) || note.sourceRevision < 1) {\n throw new Error('Incompatible corpus Note; exact rawContent and sourceRevision are required');\n }\n validateNoteBlocks(note.rawContent, note.blocks, note.sourceRevision);\n if (!data.blocks.some((row) => row.noteId === note.id)) {\n for (const [position, block] of Object.values(note.blocks).sort((a, b) => a.from - b.from).entries()) {\n const rawContent = note.rawContent.slice(block.from, block.to);\n const body = parseDocumentSections(rawContent)[0]?.displayContent ?? rawContent;\n data.blocks.push({\n id: `${note.id}:${block.id}`, noteId: note.id, blockId: block.id, blockVersion: block.version,\n sourceRevision: note.sourceRevision, from: block.from, to: block.to, position,\n dataType: block.kind, rawContent, noteTitle: note.title, createdAt: note.createdAt,\n ...(block.kind === 'wod' ? { blockContentId: blockContentId(body) } : {}),\n });\n }\n }\n }\n for (const session of data.results) {\n if ('segmentId' in session || 'segmentVersion' in session || 'data' in session || 'version' in session || 'rawContent' in session || !session.blockId || !Number.isSafeInteger(session.blockVersion) || session.blockVersion < 1) {\n throw new Error('Incompatible corpus Session; exact blockId/blockVersion pin required');\n }\n if (!data.revisions.some((row) => row.noteId === session.noteId && row.blockId === session.blockId && row.version === session.blockVersion && row.kind === 'wod')) {\n throw new Error('Corpus Session immutable revision is unavailable');\n }\n }\n for (const row of [...data.eventRecords, ...data.facts, ...data.blocks]) {\n if ('segmentId' in row || 'segmentVersion' in row) throw new Error('Incompatible corpus segment pin');\n }\n const revisions = new Map(data.revisions.map((row) => [JSON.stringify([row.noteId, row.blockId, row.version]), row]));\n for (const row of data.eventRecords) {\n if (row.blockId !== undefined || row.blockVersion !== undefined) {\n if (!row.blockId || !Number.isSafeInteger(row.blockVersion) || !revisions.has(JSON.stringify([row.noteId, row.blockId, row.blockVersion]))) {\n throw new Error('Corpus Event immutable revision is unavailable');\n }\n }\n }\n for (const row of data.blocks) {\n const note = data.notes.find((candidate) => candidate.id === row.noteId);\n const block = note?.blocks[row.blockId];\n if (!note || !block || row.blockVersion !== block.version || row.sourceRevision !== note.sourceRevision || row.from !== block.from || row.to !== block.to || row.dataType !== block.kind) {\n throw new Error('Corpus block projection does not match current Note source');\n }\n row.rawContent = note.rawContent.slice(block.from, block.to);\n }\n\n return data;\n}\n\n/**\n * Runs a WQL query against the provided in-memory dataset and returns a versioned IR envelope.\n */\nexport async function runQueryCli(\n wqlString: string,\n options: QueryCliOptions = {},\n): Promise<WodWikiIRFile<QueryResult | RowsQueryResult | FindQueryResult | PipelineResult>> {\n const parsed = parseQuery(wqlString);\n if (parsed.error) {\n throw new WqlSyntaxError(wqlString, parsed.error);\n }\n\n const stores = options.stores ?? buildStoresFromData(loadQueryData(options));\n // Bundle form — carries the optional blockEfforts/tags seams when provided.\n const service = new QueryService(stores);\n\n if (isPipelineQuery(parsed)) {\n const result = await service.runPipeline(wqlString, {\n preferredUnit: options.preferredUnit,\n });\n return createIRFile('pipeline-result', result, { source: options.sourceLabel ?? 'cli:wod query' });\n }\n\n if (isFindQuery(parsed)) {\n const result = await service.runFind(parsed);\n const kind: IrKind = parsed.target === 'session' ? 'rows-result' : 'find-result';\n return createIRFile(kind, result, { source: options.sourceLabel ?? 'cli:wod query' });\n }\n\n const result = await service.runQuery(wqlString, {\n preferredUnit: options.preferredUnit,\n });\n return createIRFile('query-result', result, { source: options.sourceLabel ?? 'cli:wod query' });\n}\n","/**\n * Unified `wod` CLI Runner\n *\n * Implements CLI command routing, argument parsing, pipe handling,\n * and exit code conventions per wayfinder #962 and issue #967.\n *\n * Exit Codes:\n * 0 - OK / Success (including empty query results)\n * 1 - Runtime error (file missing, bad arguments, execution error)\n * 2 - Parse / Syntax error (invalid Whiteboard Script or malformed WQL)\n * 3 - Pack load error (failed to import or register --pack)\n */\n\nfunction getFs() {\n if (typeof globalThis.process?.versions?.node === 'undefined' && typeof (globalThis as { Bun?: unknown }).Bun === 'undefined') {\n throw new Error('File system operations are only supported in Node / Bun environments');\n }\n // eslint-disable-next-line no-restricted-syntax -- lazy CJS require keeps node builtins out of browser bundles\n return require('fs');\n}\nimport { loadLanguagePack, PackLoadError } from './loader';\nimport { runParse, ParseSyntaxError } from './parse';\nimport { runExecution } from './run';\nimport { runQueryCli, WqlSyntaxError } from './query';\nimport {\n openCliDb,\n nodeFs,\n nodePath,\n sqliteEventStore,\n sqliteNoteStore,\n sqliteBlockStore,\n sqliteEffortStore,\n sqliteIndexStore,\n getNoteBundle,\n getSessionBundle,\n getEffortBySlug,\n listTagsByType,\n} from './db';\nimport { loadCliEnvironment, resolveDatabaseConfig, type CliDatabaseConfig } from './config';\n// Type-only: erased at build time, keeps the Bun-only server module out of the\n// browser/Node import graph (runCliServer itself is lazily imported).\nimport type { CliServerOptions } from './server';\nimport { persistNote, startRun, persistRun, persistSessionBundle, persistEffort, persistTypedTags } from './persist';\nimport { defaultSeedDirs, importSeedDir } from './seed';\nimport {\n composeNoteMarkdown,\n csvToEquipmentLabels,\n csvToSessionRows,\n effortToMarkdown,\n equipmentToCsv,\n extractNoteIdentity,\n extractTypedTags,\n markdownToEffort,\n sessionToCsv,\n} from '@bitcobblers/wod-wiki-engine';\nimport {\n formatParseOutput,\n formatExecutionOutput,\n formatQueryOutput,\n type OutputFormat,\n} from './formatters';\n\nimport { parseDocumentSections } from '@bitcobblers/wod-wiki-core';\nimport type { ExecutionLog, WodWikiIRFile } from '@bitcobblers/wod-wiki-engine';\nimport { VERSION } from '../version';\n\n/** Bare CLI scripts become authored Markdown at the persistence boundary. */\nexport function cliNoteSource(source: string, label: string, sport?: string): string {\n if (/\\.(?:md|markdown)$/i.test(label) || parseDocumentSections(source).some((section) => section.scriptBlock)) return source;\n let length = 3;\n for (const match of source.matchAll(/`+/g)) length = Math.max(length, match[0].length + 1);\n const fence = '`'.repeat(length);\n return `${fence}time${sport ? `:${sport}` : ''}\\n${source}\\n${fence}\\n`;\n}\n\nexport interface CliParsedArgs {\n subcommand?: 'parse' | 'run' | 'query' | 'download' | 'import' | 'build' | 'seed' | 'reset' | 'init' | 'server' | 'serve' | 'playground' | 'help' | 'version';\n target?: string;\n /** Second positional: the id (download) or file (import) after the kind. */\n target2?: string;\n corpus?: string;\n stdinLog?: boolean;\n stdinFacts?: boolean;\n format: OutputFormat;\n output?: string;\n packs: string[];\n sport?: string;\n unit?: string;\n help?: boolean;\n version?: boolean;\n /** SQLite database path (--db). Defaults to WOD_WIKI_DB or ./wodwiki.db. */\n db?: string;\n /** Backend driver override (--db-driver): sqlite | postgres | turso. */\n dbDriver?: string;\n /** PostgreSQL connection URL (--database-url) or component flags below. */\n databaseUrl?: string;\n postgresHost?: string;\n postgresPort?: string;\n postgresUser?: string;\n postgresPassword?: string;\n postgresDatabase?: string;\n postgresSsl?: string;\n /** Turso/libSQL target (--turso-url) plus its auth token. */\n tursoUrl?: string;\n tursoAuthToken?: string;\n /** Explicit environment file (--env-file); a missing file is an error. */\n envFile?: string;\n /** Hosting bind address/port and prebuilt frontend directory (server/playground). */\n host?: string;\n port?: string;\n dist?: string;\n /** IR debug output: undefined = off, '' = default file name, otherwise the file name. */\n debug?: string;\n /** Extra seed source directories for `wod seed` (repeatable). */\n sources: string[];\n /** `wod build`: scaffold markdown stubs for newly discovered efforts. */\n scaffold?: boolean;\n /** `wod build`: extra template markdown file compiled as the `template` chunk. */\n template?: string;\n /** `wod build`: content repo root (alias for the positional directory). */\n dir?: string;\n}\n\n/**\n * Property flags that take a value in both `--flag value` and `--flag=value`\n * forms. Missing, empty, or flag-like (`--…`) values are parse errors.\n */\n/** The CliParsedArgs properties settable through VALUE_FLAGS — all `string | undefined`. */\ntype CliValueFlagArgs = Pick<\n CliParsedArgs,\n | 'db'\n | 'dbDriver'\n | 'databaseUrl'\n | 'postgresHost'\n | 'postgresPort'\n | 'postgresUser'\n | 'postgresPassword'\n | 'postgresDatabase'\n | 'postgresSsl'\n | 'tursoUrl'\n | 'tursoAuthToken'\n | 'envFile'\n | 'host'\n | 'port'\n | 'dist'\n>;\n\nconst VALUE_FLAGS: ReadonlyArray<readonly [flag: string, key: keyof CliValueFlagArgs]> = [\n ['--db', 'db'],\n ['--db-driver', 'dbDriver'],\n ['--database-url', 'databaseUrl'],\n ['--postgres-host', 'postgresHost'],\n ['--postgres-port', 'postgresPort'],\n ['--postgres-user', 'postgresUser'],\n ['--postgres-password', 'postgresPassword'],\n ['--postgres-database', 'postgresDatabase'],\n ['--postgres-ssl', 'postgresSsl'],\n ['--turso-url', 'tursoUrl'],\n ['--turso-auth-token', 'tursoAuthToken'],\n ['--env-file', 'envFile'],\n ['--host', 'host'],\n ['--port', 'port'],\n ['--dist', 'dist'],\n];\n\nfunction readValueFlag(args: string[], i: number, flag: string): { value: string; next: number } {\n const inline = args[i].startsWith(`${flag}=`);\n if (inline) {\n const value = args[i].slice(flag.length + 1);\n if (!value) throw new Error(`Missing value for ${flag}`);\n return { value, next: i + 1 };\n }\n const value = args[i + 1];\n if (value === undefined || value === '' || value.startsWith('--')) throw new Error(`Missing value for ${flag}`);\n return { value, next: i + 2 };\n}\n\nexport function parseCliArgs(args: string[]): CliParsedArgs {\n const result: CliParsedArgs = {\n format: 'json',\n packs: [],\n sources: [],\n };\n const valueArgs: CliValueFlagArgs = result;\n\n let i = 0;\n while (i < args.length) {\n const arg = args[i];\n if (arg === '--at' || arg.startsWith('--at=')) throw new Error('Unknown option --at; whole Note exports have no as-of version');\n\n const valueFlag = VALUE_FLAGS.find(([flag]) => arg === flag || arg.startsWith(`${flag}=`));\n if (valueFlag) {\n const [flag, key] = valueFlag;\n const { value, next } = readValueFlag(args, i, flag);\n valueArgs[key] = value;\n i = next;\n continue;\n }\n\n if (arg === '--help' || arg === '-h') {\n result.help = true;\n i++;\n } else if (arg === '--version' || arg === '-v') {\n result.version = true;\n i++;\n } else if (arg === '--corpus' || arg === '-c') {\n result.corpus = args[++i];\n i++;\n } else if (arg === '--stdin-log') {\n result.stdinLog = true;\n i++;\n } else if (arg === '--stdin-facts') {\n result.stdinFacts = true;\n i++;\n } else if (arg === '--format') {\n const fmt = args[++i] as OutputFormat;\n if (fmt === 'json' || fmt === 'table' || fmt === 'csv') {\n result.format = fmt;\n }\n i++;\n } else if (arg.startsWith('--format=')) {\n const fmt = arg.slice('--format='.length) as OutputFormat;\n if (fmt === 'json' || fmt === 'table' || fmt === 'csv') {\n result.format = fmt;\n }\n i++;\n } else if (arg === '-o' || arg === '--output') {\n result.output = args[++i];\n i++;\n } else if (arg.startsWith('--output=')) {\n result.output = arg.slice('--output='.length);\n i++;\n } else if (arg === '--pack') {\n const packSpec = args[++i];\n if (packSpec) result.packs.push(packSpec);\n i++;\n } else if (arg.startsWith('--pack=')) {\n result.packs.push(arg.slice('--pack='.length));\n i++;\n } else if (arg === '--sport') {\n result.sport = args[++i];\n i++;\n } else if (arg === '--unit') {\n result.unit = args[++i];\n i++;\n } else if (arg === '--debug') {\n // Bare flag never consumes the next arg — use --debug=<name> for a custom file.\n result.debug = '';\n i++;\n } else if (arg.startsWith('--debug=')) {\n result.debug = arg.slice('--debug='.length);\n i++;\n } else if (arg === '--source') {\n const source = args[++i];\n if (source) result.sources.push(source);\n i++;\n } else if (arg.startsWith('--source=')) {\n result.sources.push(arg.slice('--source='.length));\n i++;\n } else if (arg === '--scaffold') {\n result.scaffold = true;\n i++;\n } else if (arg === '--template') {\n result.template = args[++i];\n i++;\n } else if (arg.startsWith('--template=')) {\n result.template = arg.slice('--template='.length);\n i++;\n } else if (arg === '--out') {\n result.output = args[++i];\n i++;\n } else if (arg.startsWith('--out=')) {\n result.output = arg.slice('--out='.length);\n i++;\n } else if (arg === '--dir') {\n result.dir = args[++i];\n i++;\n } else if (arg.startsWith('--dir=')) {\n result.dir = arg.slice('--dir='.length);\n i++;\n } else if (!result.subcommand) {\n if (arg === 'parse' || arg === 'run' || arg === 'query' || arg === 'download' || arg === 'import' || arg === 'build' || arg === 'seed' || arg === 'reset' || arg === 'init' || arg === 'server' || arg === 'serve' || arg === 'playground' || arg === 'help' || arg === 'version') {\n result.subcommand = arg;\n } else {\n result.target = arg;\n }\n i++;\n } else if (!result.target) {\n result.target = arg;\n i++;\n } else if (!result.target2) {\n result.target2 = arg;\n i++;\n } else {\n i++;\n }\n }\n\n for (const [flag, value] of [['--port', result.port], ['--postgres-port', result.postgresPort]] as const) {\n if (value !== undefined && (!/^\\d+$/.test(value) || Number(value) < 1 || Number(value) > 65535)) {\n throw new Error(`Invalid value for ${flag}: \"${value}\" is not a TCP port (1-65535)`);\n }\n }\n\n return result;\n}\n\n/**\n * Recover the Bun `Bun.stdin.text()` reader when running under Bun. The Bun\n * global is not part of the ambient lib shape; `in`/`typeof` narrowing proves\n * the access chain at runtime before the single unchecked cast.\n */\nfunction readBunStdinText(): (() => Promise<string>) | undefined {\n const g: unknown = globalThis;\n if (g && typeof g === 'object' && 'Bun' in g) {\n const bun = g.Bun;\n if (bun && typeof bun === 'object' && 'stdin' in bun) {\n const stdin = bun.stdin;\n if (stdin && typeof stdin === 'object' && 'text' in stdin) {\n const text = stdin.text;\n if (typeof text === 'function') return text as () => Promise<string>;\n }\n }\n }\n return undefined;\n}\n\nexport async function readStdin(): Promise<string> {\n const bunText = readBunStdinText();\n if (bunText) return bunText();\n return new Promise<string>((resolve, reject) => {\n const chunks: Buffer[] = [];\n process.stdin.on('data', (chunk) => {\n chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);\n });\n process.stdin.on('end', () => {\n resolve(Buffer.concat(chunks).toString('utf-8'));\n });\n process.stdin.on('error', (err) => {\n reject(err);\n });\n });\n}\n\nfunction getUsageText(): string {\n return `\nwod CLI — Headless Whiteboard Language & WQL Engine runner (v${VERSION})\n\nUSAGE:\n wod parse <file | -> [options]\n wod run <file | -> [options]\n wod query '<wql-string>' [options]\n wod download <note|session|effort|equipment> <id> [options]\n wod import <note|session|effort|equipment> <file> [options]\n wod build [dir] [options]\n wod seed [options]\n wod reset [options]\n wod init Initialize the configured database (idempotent)\n wod server [options]\n Serve the app (HTTP API + packaged frontend; alias: serve)\n wod playground [options]\n Serve the local playground (browser IndexedDB build)\n\nSUBCOMMANDS:\n parse <file | -> Parse Whiteboard Script, create a note in the database\n (whole source + saved revisions + sparse block index), optionally emit parse-tree IR.\n Markdown carrying a 'wod-note-id' frontmatter stamp\n (see download) imports back into that same note.\n run <file | -> Execute the script state machine, record a session +\n event/summary rows in the database, optionally emit\n execution-log IR\n query '<wql>' Evaluate WQL against the database (or an explicit\n dataset) and emit QueryResult / RowsQueryResult IR\n download note <id> Export the note's authored markdown to <id>.md.\n The frontmatter identity stamp allows re-import.\n Frontmatter tags (general + typed equipment/quality/…)\n are materialized into the tag graph on parse/import.\n download session <id>\n Write the session's generated metrics (event + summary\n rows, one CSV row per metric) to <id>.csv. Import back\n with 'wod import session'.\n download effort <slug>\n Write the effort registry row as corpus-style markdown\n (frontmatter id/slug/label/aliases/baseAttributes + body)\n to <slug>.md. Import back with 'wod import effort'.\n download equipment\n Write every equipment tag as a one-column CSV to\n equipment.csv. Import back with 'wod import equipment'.\n import note <file> Re-import exported note markdown (same as parse with\n the stamped identity).\n import session <file>\n Import a session + its events from a downloaded CSV.\n The exact saved block revision must already exist.\n import effort <file>\n Upsert an effort registry row from corpus-style markdown.\n import equipment <file>\n Create/upgrade equipment tags (CSV, one label per row).\n build [dir] Compile a seed corpus: validate every .md under\n <dir>/markdown (parity gate + dashboard format gate) and\n write manifest.json + content-hashed chunks/ +\n report.html to <dir>/dist with source/maps/projections bundled\n (override with -o/--output). Version stamps derive from\n <dir>'s git history (full checkout required).\n\nBUILD OPTIONS (for 'build'):\n --scaffold Also scaffold markdown/efforts/discovered/*.md stubs for\n workout effort labels missing from the registry.\n --template <file> Compile an extra markdown file as the 'template' chunk\n (the host's playground intake template).\n\nINPUT SOURCING (for 'query'; without these, the database is queried):\n -c, --corpus <path> Load historical corpus dataset from a versioned JSON file\n --stdin-log Read kind: 'execution-log' JSON payload from stdin\n --stdin-facts Read raw kind: 'fact-set' JSON payload from stdin\n\nDATABASE (init / parse / run / query / download / import / seed / reset / server):\n Pick one backend; explicit flags win over the process environment, the\n process environment wins over .env files. Run 'wod init' once first: it\n creates the SQLite file + schema, creates the PostgreSQL database when\n your role is authorized to (otherwise use an existing/provisioned one),\n or installs the schema in your provisioned Turso database — idempotently,\n preserving existing notes. 'wod server' refuses an uninitialized database.\n --db <path> Local SQLite database file (default: $WOD_WIKI_DB\n or ./wodwiki.db). Passing --db always selects SQLite,\n even when the environment names a remote backend.\n Created on demand by parse/run/seed.\n --db-driver <name> Backend driver: sqlite (default), postgres, or\n turso ($DB_DRIVER)\n --database-url <url> Database connection URL ($DATABASE_URL); accepts\n PostgreSQL, local SQLite, and remote libSQL URLs.\n --postgres-host <host> PostgreSQL host ($POSTGRES_HOST)\n --postgres-port <port> PostgreSQL port ($POSTGRES_PORT)\n --postgres-user <user> PostgreSQL user ($POSTGRES_USER)\n --postgres-password <pw> PostgreSQL password ($POSTGRES_PASSWORD)\n --postgres-database <db> PostgreSQL database name ($POSTGRES_DATABASE)\n --postgres-ssl <mode> PostgreSQL SSL mode, e.g. disable/prefer/require\n ($POSTGRES_SSL)\n --turso-url <url> Turso/libSQL database URL (libsql://…). The\n hosted database must already exist (provisioned on\n Turso); only its schema is installed.\n --turso-auth-token <token> Turso authentication token (never printed)\n --env-file <path> Load variables from this file; a missing file is\n an error. Without it: ./.env when present, otherwise\n the workspace-root .env. Credentials are never logged.\n\nHOSTING (for 'server' / 'playground'; requires the Bun runtime):\n server HTTP API over the configured database plus the frontend\n packaged inside the engine module. Requires an\n initialized database. ('serve' is an accepted alias.)\n playground Serves the playground app backed by browser IndexedDB;\n the configured database is not touched.\n --host <host> Bind address (default 127.0.0.1, $HOST)\n --port <port> TCP port (default 3000, $PORT)\n --dist <dir> Serve this prebuilt frontend directory instead of the\n packaged one ($PLAYGROUND_DIST); must already contain\n index.html.\n\nSEED SOURCING (for 'seed'):\n --source <dir> Extra compiled seed directory (manifest.json + chunks);\n repeatable. Defaults to the bundled core + community\n artifacts under apps/playground/public/seed.\n\nOPTIONS:\n --format <fmt> Output format: json (default), table, csv\n -o, --output <path> Write the IR payload (or download) to a path instead of\n the default; '-' writes to stdout\n --debug[=name] Also write the IR payload to <name> (default\n wod-<subcommand>-debug.json); without it, parse/run\n print a one-line summary of what was persisted\n --pack <module> Dynamically load and register a Language Pack (repeatable)\n --sport <sport> Target sport fence dialect (e.g. climbing, crossfit)\n --unit <unit> Preferred display unit for queries (e.g. lb, kg)\n -h, --help Show help message\n -v, --version Show version number\n\nENVIRONMENT (flags > process env > .env):\n WOD_WIKI_DB, SQLITE_PATH SQLite file path\n DB_DRIVER sqlite | postgres | turso\n DATABASE_URL PostgreSQL connection URL\n POSTGRES_HOST, POSTGRES_PORT, POSTGRES_USER,\n POSTGRES_PASSWORD, POSTGRES_DATABASE, POSTGRES_SSL\n TURSO_DATABASE_URL, TURSO_AUTH_TOKEN, LIBSQL_AUTH_TOKEN\n HOST, PORT, PLAYGROUND_DIST server / playground defaults\n\nEXIT CODES:\n 0 - OK / Success\n 1 - General / Runtime error\n 2 - Parse / Syntax error\n 3 - Language Pack load error\n`;\n}\n\nfunction printUsage(writer?: (text: string) => void): void {\n const text = getUsageText();\n if (writer) {\n writer(text);\n } else {\n // CLI stdout output channel (not a debugging statement).\n process.stdout.write(text.endsWith('\\n') ? text : text + '\\n');\n }\n}\n\n/**\n * Main CLI entry point. Returns numeric exit code.\n */\nexport async function cliMain(\n argv: string[] = process.argv.slice(2),\n io: {\n stdout?: (text: string) => void;\n stderr?: (text: string) => void;\n readStdinFn?: () => Promise<string>;\n } = {},\n): Promise<number> {\n const writeOut = io.stdout ?? ((t: string) => process.stdout.write(t + '\\n'));\n const writeErr = io.stderr ?? ((t: string) => process.stderr.write(t + '\\n'));\n const getStdin = io.readStdinFn ?? readStdin;\n\n // Lazy environment/config: .env parsing and backend resolution run only for\n // database-backed commands and hosting — never for --corpus/--stdin dataset\n // queries, build, or playground, so a malformed remote config cannot break them.\n // loadCliEnvironment returns file values only; process env must overlay them\n // (bun --no-env-file keeps .env loading solely in this loader).\n let envLoaded: Record<string, string | undefined> | undefined;\n const cliEnv = () => (envLoaded ??= { ...loadCliEnvironment(parsed.envFile), ...process.env });\n let dbResolved: CliDatabaseConfig | undefined;\n const cliDb = () => (dbResolved ??= resolveDatabaseConfig(parsed, cliEnv()));\n\n let parsed: CliParsedArgs;\n try {\n parsed = parseCliArgs(argv);\n } catch (error) {\n writeErr(error instanceof Error ? error.message : String(error));\n return 1;\n }\n\n if (parsed.version || parsed.subcommand === 'version') {\n writeOut(`wod v${VERSION}`);\n return 0;\n }\n\n if (parsed.help || parsed.subcommand === 'help') {\n printUsage(writeOut);\n return 0;\n }\n\n if (!parsed.subcommand) {\n printUsage(writeErr);\n return 1;\n }\n // 1. Load any requested Language Packs (Exit code 3 on failure)\n for (const packSpec of parsed.packs) {\n try {\n await loadLanguagePack(packSpec);\n } catch (err) {\n if (err instanceof PackLoadError) {\n writeErr(err.message);\n } else {\n writeErr(`[wod] Language pack load error: ${err instanceof Error ? err.message : String(err)}`);\n }\n return 3;\n }\n }\n\n // Output destination helper\n const deliverOutput = (formattedText: string) => {\n if (parsed.output && parsed.output !== '-') {\n getFs().writeFileSync(parsed.output, formattedText, 'utf-8');\n } else {\n writeOut(formattedText);\n }\n };\n\n // --debug[=name]: undefined = off, '' = default file name, else custom name.\n const debugTarget = (subcommand: string): string | undefined =>\n parsed.debug === undefined ? undefined : parsed.debug || `wod-${subcommand}-debug.json`;\n\n const writeDebugFile = (subcommand: string, ir: unknown) => {\n const target = debugTarget(subcommand);\n if (target !== undefined) {\n getFs().writeFileSync(target, JSON.stringify(ir, null, 2) + '\\n', 'utf-8');\n }\n };\n\n // 2. Dispatch subcommands\n try {\n if (parsed.subcommand === 'parse') {\n if (!parsed.target) {\n writeErr('[wod parse] Error: Missing input file or \"-\" for stdin');\n return 1;\n }\n\n let source: string;\n if (parsed.target === '-') {\n source = await getStdin();\n } else {\n const fs = getFs();\n if (!fs.existsSync(parsed.target)) {\n writeErr(`[wod parse] File not found: ${parsed.target}`);\n return 1;\n }\n source = fs.readFileSync(parsed.target, 'utf-8');\n }\n\n const noteSource = cliNoteSource(source, parsed.target, parsed.sport);\n const ir = runParse(source, { sport: parsed.sport, sourceLabel: `cli:wod parse ${parsed.target}` });\n const identity = extractNoteIdentity(source);\n const tags = extractTypedTags(source);\n const db = await openCliDb(cliDb());\n try {\n const persisted = await persistNote(db, {\n source: noteSource,\n sourceLabel: parsed.target,\n noteId: identity?.noteId,\n title: identity?.title,\n tags,\n });\n writeOut(\n `[wod parse] note ${persisted.noteId}${persisted.created ? '' : ' (updated)'}` +\n ` — ${persisted.blocks} blocks, ${persisted.efforts} efforts` +\n `${persisted.tags > 0 ? `, ${persisted.tags} tags` : ''} → ${db.path}`,\n );\n } finally {\n await db.close();\n }\n if (parsed.output) {\n const pretty = Boolean(process.stdout.isTTY);\n deliverOutput(formatParseOutput(ir, parsed.format, pretty));\n }\n writeDebugFile('parse', ir);\n return 0;\n }\n\n if (parsed.subcommand === 'run') {\n if (!parsed.target) {\n writeErr('[wod run] Error: Missing input file or \"-\" for stdin');\n return 1;\n }\n\n let source: string;\n if (parsed.target === '-') {\n source = await getStdin();\n } else {\n const fs = getFs();\n if (!fs.existsSync(parsed.target)) {\n writeErr(`[wod run] File not found: ${parsed.target}`);\n return 1;\n }\n source = fs.readFileSync(parsed.target, 'utf-8');\n }\n\n const identity = extractNoteIdentity(source);\n const db = await openCliDb(cliDb());\n let ir: WodWikiIRFile<ExecutionLog>;\n try {\n const started = await startRun(db, {\n source: cliNoteSource(source, parsed.target, parsed.sport),\n sourceLabel: parsed.target,\n noteId: identity?.noteId,\n title: identity?.title,\n tags: extractTypedTags(source),\n });\n const section = parseDocumentSections(started.revision.rawContent).find((row) => row.scriptBlock);\n if (!section?.scriptBlock) throw new Error('[wod run] Captured workout source cannot be parsed');\n const bare = !/\\.(?:md|markdown)$/i.test(parsed.target) && !parseDocumentSections(source).some((row) => row.scriptBlock);\n const frozenBody = bare ? section.scriptBlock.content.slice(0, -1) : section.scriptBlock.content;\n ir = await runExecution(frozenBody, {\n sport: started.revision.sport,\n dialect: started.revision.dialect,\n blockId: started.session.blockId,\n blockVersion: started.session.blockVersion,\n startTime: started.session.startTime,\n sourceLabel: `cli:wod run ${parsed.target}`,\n });\n const persisted = await persistRun(db, started, ir.data);\n writeOut(\n `[wod run] session ${persisted.resultId} — ${persisted.events} events, ` +\n `${persisted.summaries} summaries on note ${persisted.noteId} → ${db.path}`,\n );\n } finally {\n await db.close();\n }\n if (parsed.output) {\n const pretty = Boolean(process.stdout.isTTY);\n deliverOutput(formatExecutionOutput(ir, parsed.format, pretty));\n }\n writeDebugFile('run', ir);\n return 0;\n }\n\n if (parsed.subcommand === 'query') {\n if (!parsed.target) {\n writeErr('[wod query] Error: Missing WQL query argument');\n return 1;\n }\n\n const useDb = !parsed.corpus && !parsed.stdinLog && !parsed.stdinFacts;\n let stdinLogContent: string | undefined;\n let stdinFactsContent: string | undefined;\n\n if (parsed.stdinLog) {\n stdinLogContent = await getStdin();\n } else if (parsed.stdinFacts) {\n stdinFactsContent = await getStdin();\n }\n\n let ir;\n if (useDb) {\n const config = cliDb();\n if (config.kind === 'sqlite' && !nodeFs().existsSync(config.path)) {\n writeErr(\n `[wod query] No input dataset and no database at ${config.path}. ` +\n 'Specify --corpus <file>, --stdin-log, --stdin-facts, or run `wod seed` first.',\n );\n return 1;\n }\n const db = await openCliDb(config, config.kind === 'sqlite' ? undefined : { initialize: false });\n try {\n ir = await runQueryCli(parsed.target, {\n preferredUnit: parsed.unit,\n sourceLabel: `cli:wod query \"${parsed.target}\"`,\n stores: {\n eventStore: sqliteEventStore(db.db),\n noteStore: sqliteNoteStore(db.db),\n blockStore: sqliteBlockStore(db.db),\n effortStore: sqliteEffortStore(db.db),\n blockEffortsStore: sqliteIndexStore(db.db, 'block_efforts'),\n tagsStore: sqliteIndexStore(db.db, 'tags'),\n noteTagsStore: sqliteIndexStore(db.db, 'note_tags'),\n },\n });\n } finally {\n await db.close();\n }\n } else {\n if (!parsed.corpus && !stdinLogContent && !stdinFactsContent) {\n writeErr('[wod query] Error: Query requires input data. Specify --corpus <file>, --stdin-log, or --stdin-facts.');\n return 1;\n }\n ir = await runQueryCli(parsed.target, {\n corpusPath: parsed.corpus,\n stdinLog: stdinLogContent,\n stdinFacts: stdinFactsContent,\n preferredUnit: parsed.unit,\n sourceLabel: `cli:wod query \"${parsed.target}\"`,\n });\n }\n\n const pretty = !parsed.output && Boolean(process.stdout.isTTY);\n const formatted = formatQueryOutput(ir, parsed.format, pretty);\n deliverOutput(formatted);\n writeDebugFile('query', ir);\n return 0;\n }\n\n if (parsed.subcommand === 'download') {\n const kind = parsed.target;\n const id = parsed.target2;\n const DOWNLOAD_KINDS = ['note', 'session', 'effort', 'equipment'];\n if ((!id && kind !== 'equipment') || !DOWNLOAD_KINDS.includes(kind ?? '')) {\n writeErr('[wod download] Usage: wod download <note|session|effort|equipment> <id> [-o <path>]');\n return 1;\n }\n const targetId = id as string;\n const db = await openCliDb(cliDb());\n try {\n if (kind === 'note') {\n const bundle = await getNoteBundle(db.db, targetId);\n if (!bundle.note) {\n writeErr(`[wod download] Note not found in ${db.path}: ${id}`);\n return 1;\n }\n const markdown = composeNoteMarkdown(bundle.note);\n const target = parsed.output && parsed.output !== '-' ? parsed.output : `${id}.md`;\n if (parsed.output === '-') {\n writeOut(markdown);\n } else {\n nodeFs().writeFileSync(target, markdown, 'utf-8');\n }\n if (parsed.output !== '-') writeOut(`[wod download] note ${id} → ${target}`);\n } else if (kind === 'session') {\n const bundle = await getSessionBundle(db.db, targetId);\n if (!bundle) {\n writeErr(`[wod download] Session not found in ${db.path}: ${id}`);\n return 1;\n }\n const csv = sessionToCsv(bundle.session, bundle.events);\n const target = parsed.output && parsed.output !== '-' ? parsed.output : `${id}.csv`;\n if (parsed.output === '-') {\n writeOut(csv);\n } else {\n nodeFs().writeFileSync(target, csv, 'utf-8');\n }\n if (parsed.output !== '-') writeOut(`[wod download] session ${id} → ${target} (${bundle.events.length} events)`);\n } else if (kind === 'effort') {\n const effort = await getEffortBySlug(db.db, targetId);\n if (!effort) {\n writeErr(`[wod download] Effort not found in ${db.path}: ${id}`);\n return 1;\n }\n const markdown = effortToMarkdown(effort as Parameters<typeof effortToMarkdown>[0]);\n const target = parsed.output && parsed.output !== '-' ? parsed.output : `${id}.md`;\n if (parsed.output === '-') {\n writeOut(markdown);\n } else {\n nodeFs().writeFileSync(target, markdown, 'utf-8');\n }\n writeOut(`[wod download] effort ${id} → ${target}`);\n } else {\n // equipment — id is unused; export the whole catalog.\n const labels = (await listTagsByType(db.db, 'equipment')).map((t) => t.label).sort();\n const csv = equipmentToCsv(labels);\n const target = parsed.output && parsed.output !== '-' ? parsed.output : 'equipment.csv';\n if (parsed.output === '-') {\n writeOut(csv);\n } else {\n nodeFs().writeFileSync(target, csv, 'utf-8');\n }\n writeOut(`[wod download] equipment → ${target} (${labels.length} labels)`);\n }\n } finally {\n await db.close();\n }\n return 0;\n }\n\n if (parsed.subcommand === 'import') {\n const kind = parsed.target;\n const file = parsed.target2;\n const IMPORT_KINDS = ['note', 'session', 'effort', 'equipment'];\n if (!file || !IMPORT_KINDS.includes(kind ?? '')) {\n writeErr('[wod import] Usage: wod import <note|session|effort|equipment> <file>');\n return 1;\n }\n const fs = nodeFs();\n if (!fs.existsSync(file)) {\n writeErr(`[wod import] File not found: ${file}`);\n return 1;\n }\n if (kind === 'note') {\n const source = fs.readFileSync(file, 'utf-8');\n const identity = extractNoteIdentity(source);\n const tags = extractTypedTags(source);\n const db = await openCliDb(cliDb());\n try {\n const persisted = await persistNote(db, {\n source,\n sourceLabel: file,\n noteId: identity?.noteId,\n title: identity?.title,\n tags,\n });\n writeOut(\n `[wod import] note ${persisted.noteId}${persisted.created ? '' : ' (updated)'}` +\n ` — ${persisted.blocks} blocks${persisted.tags > 0 ? `, ${persisted.tags} tags` : ''} → ${db.path}`,\n );\n } finally {\n await db.close();\n }\n return 0;\n }\n if (kind === 'effort') {\n const effort = markdownToEffort(fs.readFileSync(file, 'utf-8'));\n if (!effort) {\n writeErr(`[wod import] Unparseable effort file (need frontmatter id/slug/label + numeric baseAttributes.met): ${file}`);\n return 1;\n }\n const db = await openCliDb(cliDb());\n try {\n await persistEffort(db, { ...effort, registrySource: 'user' });\n writeOut(`[wod import] effort ${effort.slug} — ${effort.label} → ${db.path}`);\n } finally {\n await db.close();\n }\n return 0;\n }\n if (kind === 'equipment') {\n const labels = csvToEquipmentLabels(fs.readFileSync(file, 'utf-8'));\n if (labels.length === 0) {\n writeErr(`[wod import] No equipment labels found in ${file}`);\n return 1;\n }\n const db = await openCliDb(cliDb());\n try {\n const added = await persistTypedTags(db, labels, 'equipment');\n writeOut(`[wod import] equipment — ${labels.length} labels (${added} new) → ${db.path}`);\n } finally {\n await db.close();\n }\n return 0;\n }\n const { session, events } = csvToSessionRows(fs.readFileSync(file, 'utf-8'));\n const db = await openCliDb(cliDb());\n try {\n const result = await persistSessionBundle(db, session, events);\n writeOut(\n `[wod import] session ${session.id} — ${result.events} events → ${db.path}`,\n );\n } finally {\n await db.close();\n }\n return 0;\n }\n\n if (parsed.subcommand === 'build') {\n const cwd = process.cwd();\n const root = nodePath().resolve(cwd, parsed.dir ?? parsed.target ?? '.');\n if (!nodeFs().existsSync(nodePath().resolve(root, 'markdown'))) {\n writeErr(`[wod build] No markdown/ corpus under ${root} — run from the content repo root (or pass its directory).`);\n return 1;\n }\n // Browser-boundary: dynamic import keeps node:crypto and child_process out of the browser graph.\n const { generateSeed } = await import('../seedbuild/compiler');\n try {\n const result = generateSeed({\n corpusRoot: root,\n ...(parsed.output ? { outDir: nodePath().resolve(cwd, parsed.output) } : {}),\n ...(parsed.template ? { templateFile: nodePath().resolve(cwd, parsed.template) } : {}),\n scaffoldDiscoveredEfforts: parsed.scaffold === true,\n });\n const kb = (n: number): string => `${(n / 1024).toFixed(0)} KB`;\n const totalBytes = result.manifest.chunks.reduce((s, c) => s + c.bytes, 0);\n writeOut(`[wod build] schema v${result.manifest.schema} version ${result.manifest.version} (${result.manifest.versionLabel}) → ${result.outDir}`);\n for (const c of result.manifest.chunks) {\n writeOut(` ${c.id.padEnd(48)} ${String(c.count).padStart(4)} files ${kb(c.bytes).padStart(8)}`);\n }\n writeOut(`[wod build] ${result.manifest.chunks.length} chunks, ${result.totalFiles} files, ${kb(totalBytes)} total — scan ${result.passMs.scan}ms, block-index ${result.passMs.blockIndex}ms, block-efforts ${result.passMs.blockEfforts}ms, write ${result.passMs.write}ms`);\n return 0;\n } catch (error) {\n writeErr(`[wod build] ${(error as Error).message}`);\n return 1;\n }\n }\n\n if (parsed.subcommand === 'seed') {\n const dirs = parsed.sources.length > 0\n ? parsed.sources.map((s) => nodePath().resolve(process.cwd(), s))\n : defaultSeedDirs(process.cwd());\n if (dirs.length === 0) {\n writeErr(\n '[wod seed] No seed sources found. Run `bun scripts/sync-seed.ts` to build the bundled ' +\n 'artifacts, or pass --source <dir> pointing at a compiled seed directory (manifest.json + chunks).',\n );\n return 1;\n }\n const db = await openCliDb(cliDb());\n try {\n for (const dir of dirs) {\n const summary = await importSeedDir(db, dir, '');\n writeOut(\n `[wod seed] ${summary.sourceId}: v${summary.version} — ${summary.notes} notes, ` +\n `${summary.efforts} efforts, ${summary.blocks} blocks, ${summary.blockEfforts} block-efforts ` +\n `(${summary.deleted} deleted, ${summary.skippedUserOwned} user-owned skipped) → ${db.path}`,\n );\n }\n } finally {\n await db.close();\n }\n return 0;\n }\n\n if (parsed.subcommand === 'reset') {\n const config = cliDb();\n if (config.kind !== 'sqlite') {\n // Never unlink a remote backend; the message names only the driver\n // kind so URLs/tokens can never leak through reset output.\n writeErr(\n `[wod reset] refusing to reset the configured ${config.kind} database — ` +\n 'reset only removes a local SQLite file. Clear remote databases through their provider.',\n );\n return 1;\n }\n const target = config.path;\n if (nodeFs().existsSync(target)) {\n nodeFs().unlinkSync(target);\n writeOut(`[wod reset] removed ${target}`);\n } else {\n writeOut(`[wod reset] nothing to reset — ${target} does not exist`);\n }\n return 0;\n }\n\n if (parsed.subcommand === 'init') {\n // Idempotent: opens and initializes the chosen backend. SQLite gets the\n // file + schema; PostgreSQL may create the target database when the\n // role authorizes it; Turso gets schema installed in the provisioned DB.\n const db = await openCliDb(cliDb(), { create: true });\n try {\n writeOut(`[wod init] database ready at ${db.path}`);\n } finally {\n await db.close();\n }\n return 0;\n }\n\n if (parsed.subcommand === 'server' || parsed.subcommand === 'serve' || parsed.subcommand === 'playground') {\n // Hosting needs Bun (Bun.serve; lazy Bun.SQL for PostgreSQL) — fail fast under Node.\n if (!('Bun' in globalThis)) {\n writeErr(\n `[wod ${parsed.subcommand}] Error: hosting requires the Bun runtime (https://bun.sh). ` +\n `Install Bun to host: https://bun.sh`,\n );\n return 1;\n }\n // 'server' is canonical; 'serve' is an accepted alias for the same branch.\n const mode = parsed.subcommand === 'playground' ? 'playground' as const : 'server' as const;\n // Lazy import: Bun-only server module must stay out of Node/browser graphs.\n const { runCliServer } = await import('./server');\n const options: CliServerOptions = { env: cliEnv() };\n if (mode === 'server') options.database = cliDb();\n if (parsed.host !== undefined) options.host = parsed.host;\n if (parsed.port !== undefined) options.port = parsed.port;\n if (parsed.dist !== undefined) options.dist = parsed.dist;\n await runCliServer(mode, options, writeOut);\n return 0;\n }\n\n writeErr(`[wod] Unknown subcommand \"${parsed.subcommand}\"`);\n return 1;\n } catch (error) {\n if (error instanceof ParseSyntaxError || error instanceof WqlSyntaxError) {\n writeErr(error.message);\n return 2;\n }\n if (error instanceof PackLoadError) {\n writeErr(error.message);\n return 3;\n }\n writeErr(`[wod] Error: ${error instanceof Error ? error.message : String(error)}`);\n return 1;\n }\n}\n","/**\n * Database configuration for the `wod` CLI (and the dev server): explicit\n * per-property flags → process env → .env file (native node:util.parseEnv,\n * non-mutating).\n *\n * Precedence: flags beat env beats .env. `--db` selects local SQLite even\n * when env configures a remote backend; explicit `--db-driver` /\n * `--postgres-*` / `--turso-*` flags select that backend. Conflicting\n * explicit selectors and ambiguous env backends are rejected. Labels and\n * error messages never contain credentials.\n */\n\n/** Optional per-property flag bag — every property unset unless given. */\nexport interface CliDatabaseOptions {\n /** --db: explicit SQLite file. Selects sqlite even when env has a remote backend. */\n db?: string;\n /** --db-driver: sqlite | postgres | turso. */\n dbDriver?: string;\n /** --database-url: driver-scoped URL (mirrors DATABASE_URL). */\n databaseUrl?: string;\n postgresHost?: string;\n postgresPort?: string;\n postgresUser?: string;\n postgresPassword?: string;\n postgresDatabase?: string;\n /** --postgres-ssl <mode>: true/false or disable | prefer | require | verify-ca | verify-full. */\n postgresSsl?: string | boolean;\n tursoUrl?: string;\n tursoAuthToken?: string;\n /** --env-file: explicit file is mandatory — a missing file is an error. */\n envFile?: string;\n}\n\n/** Discriminated backend selection. `label` is credential-free and safe to\n * print on every variant. sqlite is pure-local (absolute `path`); every\n * remote libsql target normalizes to turso. */\nexport type PostgresSslMode = 'disable' | 'prefer' | 'require' | 'verify-ca' | 'verify-full';\n\nexport type CliDatabaseConfig =\n | { kind: 'sqlite'; label: string; path: string }\n | {\n kind: 'postgres';\n label: string;\n url: string;\n host: string;\n port: number;\n database: string;\n user?: string;\n password?: string;\n ssl: PostgresSslMode;\n }\n | { kind: 'turso'; label: string; url: string; authToken?: string };\n\ntype BackendKind = 'sqlite' | 'postgres' | 'turso';\n\ntype CjsRequire = (id: string) => unknown;\n\n/** Minimal node builtin surfaces (kept out of browser bundles, same pattern as ./db). */\nexport interface ConfigPathShim { resolve(...parts: string[]): string; join(...parts: string[]): string; dirname(p: string): string }\nexport interface ConfigFsShim { existsSync(p: string): boolean; readFileSync(p: string, encoding: string): string }\ninterface UtilShim { parseEnv(content: string): Record<string, string> }\n\n/** Lazy CJS require — keeps node builtins out of browser bundles. */\nfunction nodeRequire(): CjsRequire {\n const g = globalThis as { process?: { versions?: Record<string, string> }; Bun?: unknown; require?: CjsRequire };\n if (typeof g.process?.versions?.node === 'undefined' && typeof g.Bun === 'undefined') {\n throw new Error('database configuration is only supported in Node / Bun environments');\n }\n const req = g.require ?? (typeof require === 'function' ? require : undefined);\n if (!req) throw new Error('database configuration requires a CJS require shim (missing tsup banner?)');\n return req;\n}\nexport const nodePath = (): ConfigPathShim => nodeRequire()('node:path') as ConfigPathShim;\nconst nodeFs = (): ConfigFsShim => nodeRequire()('node:fs') as ConfigFsShim;\n\n/** native node:util.parseEnv — dotenv parsing without a dependency. */\nfunction parseEnvFile(content: string): Record<string, string> {\n return (nodeRequire()('node:util') as UtilShim).parseEnv(content);\n}\n\n/**\n * Load a NON-MUTATING env object from the dotenv tier ONLY: an explicit\n * --env-file is mandatory when given (missing file → error); otherwise\n * `.env` in the working directory, falling back to the nearest ancestor\n * (workspace root) `.env`. Callers merge over process.env themselves\n * ({ ...loadCliEnvironment(file), ...process.env }); process.env is never\n * written.\n */\nexport function loadCliEnvironment(envFile?: string): Record<string, string | undefined> {\n const fs = nodeFs();\n const path = nodePath();\n let file: string | undefined;\n if (envFile !== undefined) {\n file = path.resolve(process.cwd(), envFile);\n if (!fs.existsSync(file)) throw new Error(`[wod] --env-file: file not found: ${envFile}`);\n } else {\n let dir = process.cwd();\n for (;;) {\n const candidate = path.join(dir, '.env');\n if (fs.existsSync(candidate)) {\n file = candidate;\n break;\n }\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n }\n return file !== undefined ? parseEnvFile(fs.readFileSync(file, 'utf-8')) : {};\n}\n\nconst SQLITE_URL_SCHEMES = /^(libsql|https?|wss?|file):\\/\\//;\nconst PG_URL_SCHEMES = /^postgres(ql)?:\\/\\//;\nconst TURSO_URL_SCHEMES = /^(libsql|https?|wss?):\\/\\//;\nconst PG_FLAG_KEYS = [\n 'postgresHost',\n 'postgresPort',\n 'postgresUser',\n 'postgresPassword',\n 'postgresDatabase',\n 'postgresSsl',\n] as const;\n\nconst PG_ENV_KEYS = [\n 'POSTGRES_HOST',\n 'POSTGRES_PORT',\n 'POSTGRES_USER',\n 'POSTGRES_PASSWORD',\n 'POSTGRES_DATABASE',\n 'POSTGRES_SSL',\n] as const;\n\n/** Type guard — keeps backend strings narrowable without casts. */\nconst isBackend = (v: string): v is BackendKind => v === 'sqlite' || v === 'postgres' || v === 'turso';\n\n/** Present-but-empty env values (compose passthroughs) read as unset —\n * lockstep across every env read. */\nfunction setEnv(v: string | undefined): string | undefined {\n return v !== undefined && v.trim() !== '' ? v : undefined;\n}\n\n/** CLI error contract: every configuration failure is prefixed `[wod] `. */\nfunction fail(message: string): never {\n throw new Error(`[wod] ${message}`);\n}\n\nfunction parsePort(v: string, source: string): number {\n if (!/^\\d+$/.test(v)) fail(`${source} must be an integer 1..65535, got ${JSON.stringify(v)}`);\n const port = Number(v);\n if (port < 1 || port > 65535) fail(`${source} must be an integer 1..65535, got ${v}`);\n return port;\n}\n\nfunction sslMode(v: string | boolean | undefined, source: string): PostgresSslMode {\n if (v === undefined || v === '') return 'prefer';\n if (typeof v === 'boolean') return v ? 'require' : 'disable';\n const s = v.trim().toLowerCase();\n if (['true', '1', 'yes', 'require'].includes(s)) return 'require';\n if (['false', '0', 'no', 'disable', 'disabled'].includes(s)) return 'disable';\n if (s === 'prefer' || s === 'verify-ca' || s === 'verify-full') return s;\n fail(`${source} must be disable|prefer|require|verify-ca|verify-full, got ${JSON.stringify(v)}`);\n}\n\n/** Credential-free display form (userinfo + query stripped); an unparsable\n * input is never echoed back. */\nfunction safeUrlLabel(raw: string): string {\n try {\n const u = new URL(raw);\n return `${u.protocol}//${u.host}${u.pathname}`;\n } catch {\n return '<unparsable-url>';\n }\n}\n\n/** URL form — the API's existing semantics; the label strips credentials. */\nfunction postgresFromUrl(url: string, source: string): CliDatabaseConfig {\n if (!PG_URL_SCHEMES.test(url)) {\n fail(`${source} must start with postgres:// or postgresql://`);\n }\n let u: URL;\n try {\n u = new URL(url);\n } catch {\n fail(`${source} is not a parseable URL`); // never echo the input (credentials)\n }\n const database = decodeURIComponent(u.pathname.replace(/^\\/+|\\/+$/g, ''));\n if (database === '') fail(`${source} has no database name`);\n return {\n kind: 'postgres',\n label: safeUrlLabel(url),\n url,\n host: u.hostname,\n port: u.port !== '' ? parsePort(u.port, `${source} port`) : 5432,\n database,\n user: u.username !== '' ? decodeURIComponent(u.username) : undefined,\n password: u.password !== '' ? decodeURIComponent(u.password) : undefined,\n ssl: sslMode(u.searchParams.get('sslmode') ?? u.searchParams.get('ssl') ?? undefined, `${source} ssl parameter`),\n };\n}\n\nfunction resolvePostgres(\n options: CliDatabaseOptions,\n e: Record<string, string | undefined>,\n databaseUrl: string | undefined,\n): CliDatabaseConfig {\n const flagProps = PG_FLAG_KEYS.some((k) => options[k] !== undefined);\n const envProps = PG_ENV_KEYS.some((k) => setEnv(e[k]) !== undefined);\n // Per-property form: explicit flags, or POSTGRES_* env when no URL competes\n // (env DATABASE_URL keeps its existing precedence over env props).\n if (flagProps || (envProps && databaseUrl === undefined)) {\n const host = options.postgresHost ?? setEnv(e.POSTGRES_HOST) ?? '127.0.0.1';\n const port = parsePort(options.postgresPort ?? setEnv(e.POSTGRES_PORT) ?? '5432', '--postgres-port/POSTGRES_PORT');\n const database = options.postgresDatabase ?? setEnv(e.POSTGRES_DATABASE);\n if (database === undefined) {\n fail('--postgres-database (or POSTGRES_DATABASE) is required for per-property PostgreSQL configuration');\n }\n const user = options.postgresUser ?? setEnv(e.POSTGRES_USER);\n const password = options.postgresPassword ?? setEnv(e.POSTGRES_PASSWORD);\n const ssl = sslMode(options.postgresSsl ?? setEnv(e.POSTGRES_SSL), '--postgres-ssl/POSTGRES_SSL');\n try {\n // URL setters percent-encode userinfo specials and keep the colon placement.\n const u = new URL(`postgresql://${host}`);\n u.port = String(port);\n u.pathname = `/${database}`;\n if (user !== undefined) u.username = user;\n if (password !== undefined) u.password = password;\n u.searchParams.set('sslmode', ssl);\n return {\n kind: 'postgres',\n label: `postgresql://${u.host}${u.pathname}`,\n url: u.toString(),\n host,\n port,\n database,\n user,\n password,\n ssl,\n };\n } catch {\n fail('invalid PostgreSQL host/database in per-property configuration');\n }\n }\n if (databaseUrl !== undefined) return postgresFromUrl(databaseUrl, 'DB_DRIVER=postgres DATABASE_URL');\n fail('DB_DRIVER=postgres requires DATABASE_URL starting with postgres:// or postgresql:// — or per-property --postgres-host/--postgres-database flags');\n}\n\nfunction resolveTurso(\n options: CliDatabaseOptions,\n e: Record<string, string | undefined>,\n databaseUrl: string | undefined,\n): CliDatabaseConfig {\n const url = options.tursoUrl ?? setEnv(e.TURSO_DATABASE_URL) ?? databaseUrl;\n if (url === undefined) {\n fail('DB_DRIVER=turso requires --turso-url / TURSO_DATABASE_URL or DATABASE_URL (libsql:// or https://)');\n }\n if (PG_URL_SCHEMES.test(url)) fail('DB_DRIVER=turso cannot use a postgres:// URL');\n if (!TURSO_URL_SCHEMES.test(url)) fail('DB_DRIVER=turso requires a libsql://, https://, http:// or wss:// URL');\n return {\n kind: 'turso',\n label: safeUrlLabel(url),\n url,\n authToken: options.tursoAuthToken ?? setEnv(e.TURSO_AUTH_TOKEN) ?? setEnv(e.LIBSQL_AUTH_TOKEN),\n };\n}\n\nfunction resolveSqlite(\n options: CliDatabaseOptions,\n e: Record<string, string | undefined>,\n databaseUrl: string | undefined,\n): CliDatabaseConfig {\n // Explicit --db wins even when env configures a remote backend.\n if (options.db !== undefined) {\n const path = nodePath().resolve(process.cwd(), options.db);\n return { kind: 'sqlite', label: path, path };\n }\n if (databaseUrl !== undefined) {\n if (PG_URL_SCHEMES.test(databaseUrl)) fail('DB_DRIVER=sqlite cannot use a postgres:// DATABASE_URL');\n if (databaseUrl.startsWith('file:')) {\n const path = nodePath().resolve(process.cwd(), decodeURIComponent(databaseUrl.slice('file:'.length).split('?')[0]));\n return { kind: 'sqlite', label: path, path };\n }\n if (!SQLITE_URL_SCHEMES.test(databaseUrl)) {\n fail('DB_DRIVER=sqlite requires a libsql://, https://, http://, wss:// or file:// DATABASE_URL');\n }\n // A remote libsql URL is the turso protocol — normalize the backend kind.\n return { kind: 'turso', label: safeUrlLabel(databaseUrl), url: databaseUrl, authToken: setEnv(e.LIBSQL_AUTH_TOKEN) };\n }\n // WOD_WIKI_DB keeps its historical precedence over SQLITE_PATH.\n const path = nodePath().resolve(process.cwd(), setEnv(e.WOD_WIKI_DB) ?? setEnv(e.SQLITE_PATH) ?? './wodwiki.db');\n return { kind: 'sqlite', label: path, path };\n}\n\n/** Env-tier backend inference with ambiguity rejection — reached only when\n * no explicit flag selects a backend and DB_DRIVER is unset. */\nfunction envBackend(e: Record<string, string | undefined>): BackendKind {\n const kinds = new Set<BackendKind>();\n if (setEnv(e.WOD_WIKI_DB) !== undefined || setEnv(e.SQLITE_PATH) !== undefined) kinds.add('sqlite');\n const dbUrl = setEnv(e.DATABASE_URL);\n if (PG_ENV_KEYS.some((k) => setEnv(e[k]) !== undefined) || (dbUrl !== undefined && PG_URL_SCHEMES.test(dbUrl))) {\n kinds.add('postgres');\n } else if (dbUrl !== undefined && SQLITE_URL_SCHEMES.test(dbUrl)) {\n kinds.add('sqlite');\n }\n if (setEnv(e.TURSO_DATABASE_URL) !== undefined) kinds.add('turso');\n if (kinds.size > 1) {\n fail(`ambiguous database configuration: ${[...kinds].join(' + ')} env vars are both set — set DB_DRIVER (or pass explicit flags) to choose`);\n }\n return kinds.values().next().value ?? 'sqlite';\n}\n\n/**\n * Resolve the effective database configuration: flags > env > .env. Pass\n * `env` to supply an already-merged tier (nothing is re-read); without it\n * the .env tier (loadCliEnvironment) sits under the true process tier.\n * Kind-pinning flags (--db, --db-driver, --turso-url/--turso-auth-token,\n * --postgres-*) override even a malformed env driver; conflicting pins and\n * ambiguous env backends are rejected. Never echoes credentials.\n */\nexport function resolveDatabaseConfig(\n options: CliDatabaseOptions = {},\n env?: Record<string, string | undefined>,\n): CliDatabaseConfig {\n const e = env ?? { ...loadCliEnvironment(options.envFile), ...process.env };\n\n const driverFlag = options.dbDriver;\n if (driverFlag !== undefined && !isBackend(driverFlag)) {\n fail(`--db-driver must be sqlite|postgres|turso, got ${JSON.stringify(driverFlag)}`);\n }\n\n // Kind-pinning explicit flags; conflicting pins are rejected outright.\n const pinned: Array<[string, BackendKind]> = [];\n if (options.db !== undefined) pinned.push(['--db', 'sqlite']);\n if (driverFlag !== undefined) pinned.push([`--db-driver ${driverFlag}`, driverFlag]);\n if (options.tursoUrl !== undefined) pinned.push(['--turso-url', 'turso']);\n if (options.tursoAuthToken !== undefined) pinned.push(['--turso-auth-token', 'turso']);\n if (PG_FLAG_KEYS.some((k) => options[k] !== undefined)) pinned.push(['--postgres-*', 'postgres']);\n const kinds = new Set(pinned.map(([, kind]) => kind));\n if (kinds.size > 1) {\n fail(`conflicting database selectors: ${pinned.map(([flag, kind]) => `${flag} (${kind})`).join(', ')}`);\n }\n // --database-url is the URL for whichever backend is selected — it never\n // pins a kind, but never combines with a competing URL/local selector.\n if (options.databaseUrl !== undefined) {\n if (options.db !== undefined) fail('conflicting database selectors: --db and --database-url are both set');\n if (options.tursoUrl !== undefined) fail('conflicting database selectors: --turso-url and --database-url are both set');\n if (PG_FLAG_KEYS.some((k) => options[k] !== undefined)) {\n fail('conflicting database selectors: --database-url and --postgres-* flags are both set');\n }\n }\n\n let backend: BackendKind;\n if (pinned.length > 0) {\n backend = pinned[0][1]; // flags override even a malformed env driver\n } else {\n const envDriver = setEnv(e.DB_DRIVER);\n if (envDriver !== undefined) {\n if (!isBackend(envDriver)) {\n fail(`Unsupported DB_DRIVER: ${envDriver} (expected sqlite|turso|postgres)`);\n }\n backend = envDriver;\n } else {\n backend = envBackend(e);\n }\n }\n const databaseUrl = options.databaseUrl ?? setEnv(e.DATABASE_URL);\n switch (backend) {\n case 'postgres':\n return resolvePostgres(options, e, databaseUrl);\n case 'turso':\n return resolveTurso(options, e, databaseUrl);\n case 'sqlite':\n return resolveSqlite(options, e, databaseUrl);\n }\n}\n","import type {\n BlockEffort,\n BlockIndexRow,\n BlockRevision,\n IStorageTransaction,\n Note,\n NoteBlock,\n NoteTag,\n Session,\n Tag,\n} from '@bitcobblers/wod-wiki-storage';\nimport { rowsEqual as sameRow } from '@bitcobblers/wod-wiki-storage';\nimport type { ExecutionLog } from '@bitcobblers/wod-wiki-engine';\nimport type { EventRecord, ICodeStatement } from '@bitcobblers/wod-wiki-core';\nimport {\n blockContentId,\n KNOWN_SECTION_WIDGETS,\n parseDocumentSections,\n reconcileNoteBlocks,\n validateNoteBlocks,\n} from '@bitcobblers/wod-wiki-core';\nimport { parseScript } from '@bitcobblers/wod-wiki-lang';\nimport { toEventRows, toSummaryEventRows } from '@bitcobblers/wod-wiki-wql';\nimport { loadSql, randomId, stableNoteId, uuid5, CLI_UUID_NAMESPACE, type CliDb } from './db';\n\nconst registeredWidgets = KNOWN_SECTION_WIDGETS;\nconst saveStores = ['notes', 'block_revisions', 'block_index', 'block_efforts', 'tags', 'note_tags', 'sessions'] as const;\n\nexport function extractEffortSlugs(statements: readonly ICodeStatement[]): string[] {\n const slugs = new Set<string>();\n for (const statement of statements) {\n if (statement.exerciseId) {\n slugs.add(statement.exerciseId);\n } else {\n const effortMetric = statement.metrics?.getMetric?.('effort');\n const effort = effortMetric && 'effort' in effortMetric ? effortMetric.effort : undefined;\n if (typeof effort === 'string') {\n const slug = effort.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');\n if (slug) slugs.add(slug);\n }\n }\n }\n return [...slugs];\n}\n\nexport interface PersistNoteOptions {\n source: string;\n sourceLabel: string;\n noteId?: string;\n title?: string;\n tags?: Array<{ label: string; type?: string }>;\n /** Exact current-source lineage, supplied only by a caller that owns the edits. */\n blocks?: Record<string, NoteBlock>;\n expectedSourceRevision?: number;\n now?: number;\n}\n\nexport interface PersistNoteResult {\n noteId: string;\n note: Note;\n blocks: number;\n efforts: number;\n tags: number;\n created: boolean;\n}\n\nfunction titleFromLabel(sourceLabel: string): string {\n if (!sourceLabel || sourceLabel === '-') return 'stdin';\n const stem = sourceLabel.split('/').pop() ?? sourceLabel;\n return stem.replace(/\\.[^.]+$/, '') || sourceLabel;\n}\n\n\nasync function saveSource(\n db: CliDb,\n options: PersistNoteOptions,\n startTime?: number,\n): Promise<PersistNoteResult & { session?: Session; revision?: BlockRevision }> {\n const noteId = options.noteId ?? stableNoteId(options.sourceLabel, options.source);\n const observed = await db.storage.readonly('notes').get(noteId);\n const expected = options.expectedSourceRevision ?? observed?.sourceRevision ?? 0;\n const now = options.now ?? Date.now();\n return db.storage.transaction([...saveStores], 'readwrite', async (tx) => {\n const existing = await tx.readonly('notes').get(noteId);\n if ((existing?.sourceRevision ?? 0) !== expected) {\n throw new Error(`Stale Note source revision for ${noteId}; expected ${expected}`);\n }\n let sourceRevision = existing?.rawContent === options.source\n ? existing.sourceRevision\n : (existing?.sourceRevision ?? 0) + 1;\n const blocks = reconcileNoteBlocks(options.source, {\n sourceRevision,\n blocks: options.blocks ?? (existing?.rawContent === options.source ? existing.blocks : undefined),\n registeredWidgets,\n createId: randomId,\n });\n validateNoteBlocks(options.source, blocks, sourceRevision, { registeredWidgets });\n const history = await tx.readonly('block_revisions').getAllFromIndex('by-note', noteId);\n const latest = new Map<string, BlockRevision>();\n for (const row of history) {\n if ((latest.get(row.blockId)?.version ?? 0) < row.version) latest.set(row.blockId, row);\n }\n const revisions: BlockRevision[] = [];\n for (const block of Object.values(blocks)) {\n const saved = latest.get(block.id);\n const rawContent = options.source.slice(block.from, block.to);\n const unchanged = saved && saved.rawContent === rawContent && saved.kind === block.kind &&\n saved.dialect === block.dialect && saved.sport === block.sport;\n block.version = unchanged ? saved.version : (saved?.version ?? 0) + 1;\n if (!unchanged) revisions.push({\n noteId, blockId: block.id, version: block.version, kind: block.kind,\n rawContent, savedAt: now,\n ...(block.dialect ? { dialect: block.dialect } : {}),\n ...(block.sport ? { sport: block.sport } : {}),\n });\n }\n if (existing?.rawContent === options.source && !sameRow(existing.blocks, blocks)) {\n sourceRevision++;\n for (const block of Object.values(blocks)) block.sourceRevision = sourceRevision;\n }\n const note: Note = {\n ...existing,\n id: noteId,\n title: options.title ?? existing?.title ?? titleFromLabel(options.sourceLabel),\n type: existing?.type ?? 'note',\n date: existing?.date ?? now,\n createdAt: existing?.createdAt ?? now,\n rawContent: options.source,\n sourceRevision,\n blocks,\n };\n const priorRows = await tx.readonly('block_index').getAllFromIndex('by-note', noteId);\n const priorEfforts = await tx.readonly('block_efforts').getAllFromIndex('by-note', noteId);\n const priorById = new Map(priorRows.map((row) => [row.id, row]));\n const nextRows: BlockIndexRow[] = [];\n const nextEfforts: BlockEffort[] = [];\n for (const [position, block] of Object.values(blocks).sort((a, b) => a.from - b.from).entries()) {\n const id = `${noteId}:${block.id}`;\n const prior = priorById.get(id);\n const rawContent = options.source.slice(block.from, block.to);\n const body = parseDocumentSections(rawContent, { registeredWidgets })[0]?.displayContent ?? rawContent;\n const fingerprint = block.kind === 'wod' ? blockContentId(body) : undefined;\n nextRows.push({\n ...prior,\n id, noteId, blockId: block.id, blockVersion: block.version,\n dataType: block.kind, sourceRevision, from: block.from, to: block.to, position,\n rawContent, noteTitle: note.title, createdAt: prior?.createdAt ?? now,\n blockContentId: fingerprint,\n ...(note.sourceId ? { sourceId: note.sourceId } : {}),\n });\n if (block.kind === 'wod') {\n for (const effortSlug of extractEffortSlugs(parseScript(body, { sport: block.sport, dialect: block.dialect }).statements)) {\n const effortId = `${noteId}:${block.id}:${effortSlug}`;\n const previous = priorEfforts.find((row) => row.id === effortId);\n nextEfforts.push({\n ...previous, id: effortId, noteId, blockId: block.id,\n blockContentId: fingerprint, effortSlug, createdAt: previous?.createdAt ?? now,\n });\n }\n }\n }\n if (!sameRow(existing, note)) await tx.readwrite('notes').put(note);\n if (revisions.length) await tx.readwrite('block_revisions').putMany(revisions);\n await diffProjection(tx, 'block_index', priorRows, nextRows);\n await diffProjection(tx, 'block_efforts', priorEfforts, nextEfforts);\n const tags = await saveTags(tx, noteId, options.tags, now);\n let session: Session | undefined;\n let revision: BlockRevision | undefined;\n if (startTime !== undefined) {\n const block = Object.values(blocks).filter((row) => row.kind === 'wod').sort((a, b) => a.from - b.from)[0];\n if (!block) throw new Error('[wod run] Note has no actionable workout block');\n revision = revisions.find((row) => row.blockId === block.id) ?? latest.get(block.id);\n if (!revision) throw new Error('[wod run] Saved workout revision is unavailable');\n session = {\n id: randomId(), noteId, blockId: block.id, blockVersion: block.version,\n blockContentId: blockContentId(parseDocumentSections(revision.rawContent)[0]?.displayContent ?? revision.rawContent),\n origin: 'journal', status: 'in-progress',\n startTime, endTime: startTime, duration: 0, completed: false, createdAt: startTime,\n };\n await tx.readwrite('sessions').put(session);\n }\n return { noteId, note, blocks: nextRows.length, efforts: nextEfforts.length, tags, created: !existing, session, revision };\n });\n}\n\nasync function diffProjection(\n tx: IStorageTransaction,\n store: 'block_index' | 'block_efforts',\n previous: Array<BlockIndexRow | BlockEffort>,\n next: Array<BlockIndexRow | BlockEffort>,\n): Promise<void> {\n const nextIds = new Set(next.map((row) => row.id));\n for (const row of previous) if (!nextIds.has(row.id)) await tx.readwrite(store).delete(row.id);\n const old = new Map(previous.map((row) => [row.id, row]));\n for (const row of next) {\n if (!sameRow(old.get(row.id), row)) {\n if (store === 'block_index' && 'blockVersion' in row) await tx.readwrite('block_index').put(row);\n if (store === 'block_efforts' && 'effortSlug' in row) await tx.readwrite('block_efforts').put(row);\n }\n }\n}\n\nasync function saveTags(tx: IStorageTransaction, noteId: string, items: PersistNoteOptions['tags'], now: number): Promise<number> {\n const previous = await tx.readonly('note_tags').getAllFromIndex('by-note', noteId);\n if (!items) return previous.length;\n const next = new Map<string, NoteTag>();\n for (const item of items) {\n const label = item.label.trim();\n if (!label) continue;\n const found = (await tx.readonly('tags').getAllFromIndex('by-label', label))[0];\n const tag: Tag = found\n ? { ...found, ...(!found.type && item.type ? { type: item.type } : {}) }\n : { id: uuid5(CLI_UUID_NAMESPACE, `tag:${label}`), label, type: item.type, createdAt: now };\n if (!sameRow(found, tag)) await tx.readwrite('tags').put(tag);\n const id = previous.find((link) => link.tagId === tag.id)?.id ?? uuid5(CLI_UUID_NAMESPACE, `note-tag:${noteId}:${tag.id}`);\n next.set(id, { ...previous.find((link) => link.id === id), id, noteId, tagId: tag.id });\n }\n for (const link of previous) if (!next.has(link.id)) await tx.readwrite('note_tags').delete(link.id);\n const old = new Map(previous.map((row) => [row.id, row]));\n for (const link of next.values()) if (!sameRow(old.get(link.id), link)) await tx.readwrite('note_tags').put(link);\n return next.size;\n}\n\nexport function persistNote(db: CliDb, options: PersistNoteOptions): Promise<PersistNoteResult> {\n return saveSource(db, options);\n}\n\nexport interface StartedRun {\n session: Session;\n revision: BlockRevision;\n noteCreated: boolean;\n}\n\nexport async function startRun(db: CliDb, options: PersistNoteOptions, startTime = Date.now()): Promise<StartedRun> {\n const saved = await saveSource(db, options, startTime);\n if (!saved.session || !saved.revision) throw new Error('[wod run] Atomic run capture failed');\n return { session: saved.session, revision: saved.revision, noteCreated: saved.created };\n}\n\nexport interface PersistRunResult {\n noteId: string;\n resultId: string;\n session: Session;\n events: number;\n summaries: number;\n noteCreated: boolean;\n}\n\nexport async function persistRun(db: CliDb, started: StartedRun, executionLog: ExecutionLog): Promise<PersistRunResult> {\n const results = executionLog.results;\n const session: Session = {\n ...started.session,\n status: results.completed ? 'completed' : 'in-progress',\n endTime: results.endTime, duration: results.duration ?? 0, completed: results.completed,\n };\n const identity = {\n noteId: session.noteId, resultId: session.id, blockId: session.blockId, blockVersion: session.blockVersion,\n blockContentId: session.blockContentId, origin: session.origin, pageId: session.pageId,\n workoutTimestamp: session.createdAt,\n };\n const events = toEventRows(executionLog.logs, identity);\n const summaries = toSummaryEventRows(executionLog.logs, identity);\n await db.storage.transaction(['sessions', 'events', 'block_revisions'], 'readwrite', async (tx) => {\n const saved = await tx.readonly('sessions').get(session.id);\n if (!saved || saved.noteId !== session.noteId || saved.blockId !== session.blockId || saved.blockVersion !== session.blockVersion) {\n throw new Error('[wod run] Captured Session source pin changed');\n }\n const revision = await tx.readonly('block_revisions').get([session.noteId, session.blockId, session.blockVersion]);\n if (!revision || !sameRow(revision, started.revision)) throw new Error('[wod run] Captured revision is unavailable');\n await tx.readwrite('sessions').put(session);\n await tx.readwrite('events').putMany([...events, ...summaries]);\n });\n return { noteId: session.noteId, resultId: session.id, session, events: events.length, summaries: summaries.length, noteCreated: started.noteCreated };\n}\n\n/** Import only when the exact immutable revision is already available. */\nexport async function persistSessionBundle(db: CliDb, session: Session, events: readonly EventRecord[]): Promise<{ events: number }> {\n if ('segmentId' in session || 'segmentVersion' in session || 'version' in session || 'rawContent' in session || 'data' in session || !session.noteId || !session.blockId || !Number.isSafeInteger(session.blockVersion) || session.blockVersion < 1) {\n throw new Error('[wod import] Session requires an exact block revision pin');\n }\n await db.storage.transaction(['sessions', 'events', 'block_revisions'], 'readwrite', async (tx) => {\n const revision = await tx.readonly('block_revisions').get([session.noteId, session.blockId, session.blockVersion]);\n if (!revision || revision.kind !== 'wod') throw new Error('[wod import] Exact immutable workout revision is unavailable');\n for (const event of events) {\n if (event.resultId !== session.id || event.noteId !== session.noteId || event.blockId !== session.blockId || event.blockVersion !== session.blockVersion) {\n throw new Error('[wod import] Event source pin differs from Session source pin');\n }\n }\n const existing = await tx.readonly('sessions').get(session.id);\n if (existing && !sameRow(existing, session)) throw new Error('[wod import] Session identity conflicts with existing row');\n if (!existing) await tx.readwrite('sessions').put(session);\n for (const event of events) {\n const old = await tx.readonly('events').get(event.id);\n if (old && !sameRow(old, event)) throw new Error('[wod import] Event identity conflicts with existing row');\n if (!old) await tx.readwrite('events').put(event);\n }\n });\n return { events: events.length };\n}\n\nexport async function persistEffort(db: CliDb, effort: Record<string, unknown>): Promise<void> {\n const sql = await loadSql();\n await db.db.transaction(async (tx) => {\n await sql.putRow(tx, sql.storeDefinition('efforts'), effort);\n });\n}\n\nexport async function persistTypedTags(db: CliDb, labels: readonly string[], type: string): Promise<number> {\n return db.storage.transaction(['tags'], 'readwrite', async (tx) => {\n let added = 0;\n for (const raw of labels) {\n const label = raw.trim();\n if (!label) continue;\n const tag = (await tx.readonly('tags').getAllFromIndex('by-label', label))[0];\n if (!tag) {\n await tx.readwrite('tags').put({ id: uuid5(CLI_UUID_NAMESPACE, `tag:${label}`), label, type, createdAt: Date.now() });\n added++;\n } else if (!tag.type) {\n await tx.readwrite('tags').put({ ...tag, type });\n }\n }\n return added;\n });\n}\n","import { nodeFs, nodePath, type CliDb } from './db';\nimport {\n applySeedChunk,\n seedNoteId,\n type SeedChunkResult,\n assertSeedManifest,\n assertSeedRows,\n CANVAS_CHUNK_ID,\n SEED_SCHEMA,\n emptySeedMeta,\n seedMetaKey,\n type SeedMetaRecord,\n} from '@bitcobblers/wod-wiki-engine';\n\nexport { seedNoteId };\nexport interface SeedSourceSummary {\n sourceId: string;\n version: number;\n notes: number;\n efforts: number;\n blocks: number;\n blockEfforts: number;\n deleted: number;\n skippedUserOwned: number;\n}\nexport async function importSeedDir(db: CliDb, dir: string, sourceId: string): Promise<SeedSourceSummary> {\n const fs = nodeFs(), path = nodePath();\n const source = sourceId || path.basename(dir);\n const manifest = assertSeedManifest(JSON.parse(fs.readFileSync(path.resolve(dir, 'manifest.json'), 'utf-8')));\n const key = seedMetaKey(source);\n let expected = await db.storage.readonly('meta').get(key) as SeedMetaRecord | undefined;\n if (expected && expected.schema !== SEED_SCHEMA) throw new Error('Incompatible seed checkpoint; recreate storage');\n let meta = expected ?? emptySeedMeta(key);\n if (manifest.version < meta.seedVersion) throw new Error('Seed manifest is older than stored checkpoint');\n const summary: SeedSourceSummary = { sourceId: source, version: manifest.version, notes: 0, efforts: 0, blocks: 0, blockEfforts: 0, deleted: 0, skippedUserOwned: 0 };\n const metadataChanged = manifest.version !== meta.seedVersion || manifest.builtAt !== meta.builtAt;\n const plan = manifest.chunks.filter((c) => metadataChanged || meta.chunks[c.id]?.sha256 !== c.sha256);\n plan.sort((a, b) => Number(b.id === CANVAS_CHUNK_ID) - Number(a.id === CANVAS_CHUNK_ID));\n const accumulate = (result: SeedChunkResult) => {\n summary.notes += result.totalNotes; summary.efforts += result.totalEfforts; summary.blocks += result.totalBlocks; summary.deleted += result.deleted; summary.skippedUserOwned += result.skippedUserOwned;\n };\n for (const chunk of plan) {\n const rows = assertSeedRows(JSON.parse(fs.readFileSync(path.resolve(dir, chunk.path), 'utf-8')));\n if (rows.length !== chunk.count) throw new Error('Seed chunk count mismatch');\n const next = { ...meta, chunks: { ...meta.chunks, [chunk.id]: { sha256: chunk.sha256, noteIds: await Promise.all(rows.map((r) => seedNoteId(r.path))) } }, importedAt: Date.now() };\n accumulate(await applySeedChunk(db.storage, { chunkId: chunk.id, rows, manifest, expectedMeta: expected, meta: next }));\n summary.blockEfforts += rows.reduce((count, row) => count + row.blockEfforts.length, 0);\n meta = next; expected = next;\n }\n for (const chunkId of Object.keys(meta.chunks)) {\n if (manifest.chunks.some((c) => c.id === chunkId)) continue;\n const chunks = { ...meta.chunks };\n delete chunks[chunkId];\n const next = { ...meta, chunks, importedAt: Date.now() };\n accumulate(await applySeedChunk(db.storage, { chunkId, rows: [], manifest, expectedMeta: expected, meta: next }));\n meta = next; expected = next;\n }\n if (plan.length || metadataChanged || Object.keys(meta.chunks).length !== Object.keys(expected?.chunks ?? {}).length) {\n const next = { ...meta, schema: SEED_SCHEMA, seedVersion: manifest.version, builtAt: manifest.builtAt, importedAt: Date.now() };\n await applySeedChunk(db.storage, { chunkId: null, rows: [], manifest, expectedMeta: expected, meta: next });\n }\n return summary;\n}\nexport function defaultSeedDirs(cwd: string): string[] {\n const base = nodePath().resolve(cwd, 'apps', 'playground', 'public', 'seed');\n return ['core', 'community'].map((id) => nodePath().resolve(base, id)).filter((dir) => nodeFs().existsSync(nodePath().resolve(dir, 'manifest.json')));\n}\n","/**\n * CLI Output Formatters (JSON, ASCII Table, CSV)\n *\n * Implements presentation formatting for parse-tree, execution-log,\n * and WQL query results across json, table, and csv formats.\n */\n\nimport type { WodWikiIRFile, StatementNode, ExecutionLog } from '@bitcobblers/wod-wiki-engine';\nimport type { QueryResult, RowsQueryResult, FindQueryResult, PipelineResult } from '@bitcobblers/wod-wiki-wql';\n\nexport type OutputFormat = 'json' | 'table' | 'csv';\n\nfunction escapeCsvField(field: unknown): string {\n if (field === undefined || field === null) return '';\n const str = String(field);\n if (str.includes(',') || str.includes('\"') || str.includes('\\n') || str.includes('\\r')) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n return str;\n}\n\nfunction formatDate(ts: number): string {\n if (!ts) return '-';\n try {\n return new Date(ts).toISOString();\n } catch {\n return String(ts);\n }\n}\n\nfunction formatMetricValue(m: { image?: string; value?: unknown }): string {\n if (m.image) return m.image;\n if (m.value === undefined || m.value === null) return '';\n if (typeof m.value === 'object') return JSON.stringify(m.value);\n return String(m.value);\n}\n\nfunction formatMetric(m: { type?: string; image?: string; value?: unknown }): string {\n const t = m.type || 'metric';\n return `${t}:${formatMetricValue(m)}`;\n}\n\n/**\n * Format StatementNode parse tree\n */\nexport function formatParseOutput(\n ir: WodWikiIRFile<StatementNode>,\n format: OutputFormat,\n pretty: boolean = true,\n): string {\n if (format === 'json') {\n return JSON.stringify(ir, null, pretty ? 2 : undefined);\n }\n\n // Flatten nodes for table/csv representation\n const flatNodes: StatementNode[] = [];\n const walk = (node: StatementNode) => {\n flatNodes.push(node);\n for (const child of node.children ?? []) {\n walk(child);\n }\n };\n walk(ir.data);\n\n if (format === 'csv') {\n const header = 'id,type,from,to,raw,metrics,hints';\n const rows = flatNodes.map((n) =>\n [\n n.id,\n n.type,\n n.from,\n n.to,\n escapeCsvField(n.raw),\n escapeCsvField(n.metrics.map(formatMetric).join('; ')),\n escapeCsvField(n.hints?.join('; ') ?? ''),\n ].join(','),\n );\n return [header, ...rows].join('\\n');\n }\n\n // format === 'table'\n const lines: string[] = [];\n lines.push(`Parse Tree (${flatNodes.length} statements):`);\n lines.push('─'.repeat(80));\n lines.push(\n ['ID'.padEnd(6), 'Type'.padEnd(12), 'Span'.padEnd(12), 'Hints'.padEnd(20), 'Raw Text'].join(' | '),\n );\n lines.push('─'.repeat(80));\n\n for (const n of flatNodes) {\n const span = `${n.from}-${n.to}`;\n const hints = (n.hints ?? []).join(', ');\n lines.push(\n [\n String(n.id).padEnd(6),\n n.type.padEnd(12),\n span.padEnd(12),\n (hints.length > 18 ? hints.slice(0, 15) + '...' : hints).padEnd(20),\n n.raw.replace(/\\n/g, '\\\\n'),\n ].join(' | '),\n );\n }\n return lines.join('\\n');\n}\n\n/**\n * Format ExecutionLog runtime output\n */\nexport function formatExecutionOutput(\n ir: WodWikiIRFile<ExecutionLog>,\n format: OutputFormat,\n pretty: boolean = true,\n): string {\n if (format === 'json') {\n return JSON.stringify(ir, null, pretty ? 2 : undefined);\n }\n\n const { results, logs } = ir.data;\n const statements = logs;\n\n if (format === 'csv') {\n const header = 'id,outputType,started,ended,sourceBlockKey,stackLevel,completionReason,metrics,hints';\n const rows = statements.map((s) =>\n [\n s.id,\n s.outputType,\n s.timeSpan?.started ?? s.timestamp ?? 0,\n s.timeSpan?.ended ?? '',\n escapeCsvField(s.sourceBlockKey),\n s.stackLevel,\n escapeCsvField(s.completionReason ?? ''),\n escapeCsvField(s.metrics.map(formatMetric).join('; ')),\n escapeCsvField(s.hints?.join('; ') ?? ''),\n ].join(','),\n );\n return [header, ...rows].join('\\n');\n }\n\n // format === 'table'\n const lines: string[] = [];\n lines.push(`Workout Execution Results:`);\n lines.push(` Duration: ${results.duration}ms`);\n lines.push(` Completed: ${results.completed ? 'yes' : 'no'}`);\n lines.push(` Start: ${formatDate(results.startTime)}`);\n lines.push(` End: ${formatDate(results.endTime)}`);\n lines.push(` Logs: ${statements.length} statements emitted`);\n lines.push('─'.repeat(80));\n lines.push(\n ['ID'.padEnd(8), 'Type'.padEnd(12), 'Block'.padEnd(18), 'Reason'.padEnd(15), 'Metrics'].join(' | '),\n );\n lines.push('─'.repeat(80));\n\n for (const s of statements) {\n const metricsStr = s.metrics.map(formatMetric).join(', ');\n lines.push(\n [\n String(s.id).padEnd(8),\n (s.outputType ?? 'segment').padEnd(12),\n (s.sourceBlockKey ?? '-').padEnd(18),\n (s.completionReason ?? '-').padEnd(15),\n metricsStr,\n ].join(' | '),\n );\n }\n return lines.join('\\n');\n}\n\n/**\n * Format QueryResult / RowsQueryResult / FindQueryResult / PipelineResult\n */\nexport function formatQueryOutput(\n ir: WodWikiIRFile<QueryResult | RowsQueryResult | FindQueryResult | PipelineResult>,\n format: OutputFormat,\n pretty: boolean = true,\n): string {\n if (format === 'json') {\n return JSON.stringify(ir, null, pretty ? 2 : undefined);\n }\n\n const kind = ir.kind;\n\n if (kind === 'rows-result') {\n const data = ir.data as RowsQueryResult;\n if (format === 'csv') {\n const header = 'resultId,timestamp,outputType,eventId,metrics';\n const rows: string[] = [];\n for (const run of data.runs) {\n for (const event of run.events) {\n rows.push(\n [\n run.resultId,\n run.timestamp,\n event.outputType,\n event.id,\n escapeCsvField(event.metrics.map(formatMetric).join('; ')),\n ].join(','),\n );\n }\n }\n return [header, ...rows].join('\\n');\n }\n\n // table\n const lines: string[] = [];\n lines.push(`Rows Query Result (${data.runs.length} runs):`);\n if (data.error) lines.push(`Error: ${data.error}`);\n lines.push('─'.repeat(80));\n lines.push(\n ['Result ID'.padEnd(20), 'Date'.padEnd(24), 'Events'].join(' | '),\n );\n lines.push('─'.repeat(80));\n for (const run of data.runs) {\n lines.push(\n [\n run.resultId.padEnd(20),\n formatDate(run.timestamp).padEnd(24),\n String(run.events.length),\n ].join(' | '),\n );\n }\n return lines.join('\\n');\n }\n\n if (kind === 'find-result') {\n const data = ir.data as FindQueryResult;\n if (format === 'csv') {\n const header = 'target,id,title_or_label,sourceId';\n const rows: string[] = [];\n for (const n of data.notes) {\n rows.push(['note', n.id, escapeCsvField(n.title), escapeCsvField(n.sourceId ?? '')].join(','));\n }\n for (const b of data.blocks) {\n rows.push(['block', b.id, escapeCsvField(b.noteTitle), escapeCsvField(b.sourceId ?? '')].join(','));\n }\n for (const e of data.efforts ?? []) {\n rows.push(['effort', e.id, escapeCsvField(e.label), escapeCsvField(e.slug)].join(','));\n }\n return [header, ...rows].join('\\n');\n }\n\n // table\n const lines: string[] = [];\n const matchedCount = data.stages?.matched ?? 0;\n const selectedCount = data.stages?.selected ?? 0;\n lines.push(`Find Result (matched: ${matchedCount} / selected: ${selectedCount}):`);\n lines.push('─'.repeat(80));\n lines.push(['Type'.padEnd(8), 'ID'.padEnd(24), 'Title / Label'.padEnd(30), 'Source ID'].join(' | '));\n lines.push('─'.repeat(80));\n for (const n of data.notes) {\n lines.push(['note'.padEnd(8), n.id.padEnd(24), n.title.padEnd(30), n.sourceId ?? '-'].join(' | '));\n }\n for (const b of data.blocks) {\n lines.push(['block'.padEnd(8), b.id.padEnd(24), b.noteTitle.padEnd(30), b.sourceId ?? '-'].join(' | '));\n }\n for (const e of data.efforts ?? []) {\n lines.push(['effort'.padEnd(8), e.id.padEnd(24), e.label.padEnd(30), e.slug].join(' | '));\n }\n return lines.join('\\n');\n }\n\n if (kind === 'pipeline-result') {\n const data = ir.data as PipelineResult;\n const sink = data.chart ? `:${data.chart.head}` : 'data';\n if (format === 'csv') {\n const header = 'series,timestamp,date,value,unit';\n const rows: string[] = [];\n for (const s of data.series ?? []) {\n for (const pt of s.points) {\n rows.push(\n [\n escapeCsvField(s.label || s.key),\n pt.ts,\n formatDate(pt.ts),\n pt.value,\n escapeCsvField(s.unit ?? data.unit ?? ''),\n ].join(','),\n );\n }\n }\n return [header, ...rows].join('\\n');\n }\n const lines: string[] = [];\n if (data.error) lines.push(`Pipeline Error: ${data.error}`);\n lines.push(`Pipeline Result (→ ${sink}):`);\n lines.push('─'.repeat(80));\n if (data.table) {\n lines.push(`Table: ${data.table.rows.length} of ${data.table.totalCount} rows`);\n }\n for (const s of data.series ?? []) {\n lines.push(`${s.label || s.key}: ${s.points.length} points${s.unit ? ` (${s.unit})` : ''}`);\n }\n if (data.notes?.length) lines.push(`notes: ${data.notes.length}`);\n if (data.blocks?.length) lines.push(`blocks: ${data.blocks.length}`);\n if (data.efforts?.length) lines.push(`efforts: ${data.efforts.length}`);\n if (data.runs?.length) lines.push(`runs: ${data.runs.length}`);\n return lines.join('\\n');\n }\n\n // kind === 'query-result'\n const data = ir.data as QueryResult;\n if (data.scalar !== undefined && data.series.length === 0) {\n if (format === 'csv') {\n return `metric,scalar,unit\\n${escapeCsvField(data.parsed.metric)},${data.scalar},${escapeCsvField(data.unit ?? '')}`;\n }\n return `Scalar Result: ${data.scalar}${data.unit ? ' ' + data.unit : ''}`;\n }\n\n if (format === 'csv') {\n const header = 'series,timestamp,date,value,unit';\n const rows: string[] = [];\n for (const s of data.series) {\n for (const pt of s.points) {\n rows.push(\n [\n escapeCsvField(s.label || s.key),\n pt.ts,\n formatDate(pt.ts),\n pt.value,\n escapeCsvField(s.unit ?? data.unit ?? ''),\n ].join(','),\n );\n }\n }\n return [header, ...rows].join('\\n');\n }\n\n // table\n const lines: string[] = [];\n const matchedCount = (data.stages as { matched?: number; selected?: number } | undefined)?.matched ?? (data.stages as { selected?: number } | undefined)?.selected ?? data.matched?.length ?? 0;\n lines.push(`Query Result (${data.series.length} series, ${matchedCount} matched facts):`);\n lines.push(\n ['Series / Group'.padEnd(20), 'Timestamp'.padEnd(16), 'Date'.padEnd(24), 'Value'.padEnd(12), 'Unit'].join(' | '),\n );\n lines.push('─'.repeat(80));\n\n for (const s of data.series) {\n for (const pt of s.points) {\n lines.push(\n [\n (s.label || s.key).padEnd(20),\n String(pt.ts).padEnd(16),\n formatDate(pt.ts).padEnd(24),\n String(pt.value).padEnd(12),\n s.unit ?? data.unit ?? '-',\n ].join(' | '),\n );\n }\n }\n return lines.join('\\n');\n}\n","/**\n * Auto-generated build version metadata.\n * Do not edit directly; updated by scripts/stamp-version.ts\n */\nexport const VERSION = '0.36.2134';\nexport const GIT_SHA = 'eb473ba';\nexport const BUILD_TIME = '2026-10-15T01:19:39.574Z';\nexport const SEMVER = {\n version: '0.36.2134',\n gitSha: 'eb473ba',\n buildTime: '2026-10-15T01:19:39.574Z',\n} as const;\n","#!/usr/bin/env node\n/**\n * wod CLI Entry Point\n *\n * Dispatches to cliMain(process.argv.slice(2)).\n * Runs under Node or Bun: SQLite/Postgres/Turso commands (init, parse, run,\n * query, import, export, build, seed) run on both runtimes; server/playground\n * hosting commands require Bun.\n */\nimport { spawnSync } from 'node:child_process';\nimport { fileURLToPath } from 'node:url';\n\nconst isBun = typeof (globalThis as { Bun?: unknown }).Bun !== 'undefined';\nif (!isBun) {\n // If invoked via Node but Bun is installed, re-exec with Bun so server/playground work out of the box.\n const check = spawnSync('bun', ['--version'], { stdio: 'ignore' });\n if (check.status === 0) {\n const res = spawnSync('bun', ['--no-env-file', fileURLToPath(import.meta.url), ...process.argv.slice(2)], {\n stdio: 'inherit',\n });\n process.exit(res.status ?? 0);\n }\n}\n\nimport { cliMain } from '../cli/runner';\n\nvoid (async () => {\n const exitCode = await cliMain(process.argv.slice(2));\n process.exitCode = exitCode;\n})();\n"]}
1
+ {"version":3,"sources":["../../src/cli/db.ts","../../src/seedbuild/contract.ts","../../src/seedbuild/effort-slugs.ts","../../src/seedbuild/filename.ts","../../src/seedbuild/frontmatter.ts","../../src/seedbuild/effort-file.ts","../../src/seedbuild/git-version.ts","../../src/seedbuild/report.ts","../../src/seedbuild/compiler.ts","../../src/server/errors.ts","../../src/server/app.ts","../../src/cli/server.ts","../../src/cli/loader.ts","../../src/cli/parse.ts","../../src/cli/run.ts","../../src/cli/query.ts","../../src/cli/runner.ts","../../src/cli/config.ts","../../src/cli/persist.ts","../../src/cli/seed.ts","../../src/cli/publish.ts","../../src/cli/formatters.ts","../../src/version.ts","../../src/bin/wod.ts"],"names":["blockContentId","bundledEfforts","CANVAS_CHUNK_ID","SEED_SCHEMA","KNOWN_SECTION_WIDGETS","extractEffortSlugs","isEffortDiscipline","execSync","join","writeFileSync","existsSync","readdirSync","parseDashboardNote","buildDashboardDocument","isDashboardWidgetType","resolveWidgetType","parseQuery","readFileSync","reconcileNoteBlocks","parseDocumentSections","section","path","parseScript","whiteboardParser","mkdirSync","createHash","relative","rmSync","Readable","createReadStream","storeDefinition","keyFromValue","realpath","sep","stat","resolve","getRow","listRows","countRows","refreshDomain","wipeRows","wipeDomain","MAX_BODY","handleDomainQuery","realpathSync","StorageError","http","dist","registerLanguagePack","createParser","buildStatementTree","createIRFile","toStoredOutputStatement","frozenNow","createCompiler","createMockClock","RuntimeStack","EventBus","ScriptRuntime","createAnalyticsEngineForBlock","StartSessionAction","NextEvent","isIRFile","inMemoryEventStore","toEventRows","toSummaryEventRows","validateNoteBlocks","QueryService","isPipelineQuery","result","isFindQuery","nodeRequire","nodePath","nodeFs","sameRow","readFrontmatterMeta","assertSeedManifest","seedMetaKey","emptySeedMeta","assertSeedRows","seedNoteId","applySeedChunk","catalogOfItem","json","data","lines","matchedCount","getFs","value","extractNoteIdentity","extractTypedTags","composeNoteMarkdown","sessionToCsv","effortToMarkdown","equipmentToCsv","db","markdownToEffort","csvToEquipmentLabels","csvToSessionRows","generateSeed","runCliServer"],"mappings":"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","file":"wod.cjs","sourcesContent":["/**\n * Local SQLite seam for the `wod` CLI.\n *\n * Opens a libsql `file:` database, initializes the shared storage schema\n * (KV store tables + domain projections), and adapts the rows into the WQL\n * store interfaces — the same shape the playground builds over IndexedDB.\n *\n * Everything heavy is loaded lazily (`@libsql/client`,\n * `@bitcobblers/wod-wiki-storage/sql`, node `fs`/`crypto`) so browser\n * bundles that import the engine index never pull native drivers; the\n * dynamic specifiers stay external in the CLI bundle.\n */\n\nimport type { EventRecord } from '@bitcobblers/wod-wiki-core';\nimport type { IStorage, KeyDTO, Note, Session } from '@bitcobblers/wod-wiki-storage';\nimport type { RangeDTO, StoreDef } from '@bitcobblers/wod-wiki-storage';\nimport type {\n Database,\n LibsqlClient,\n SqlConnection,\n} from '@bitcobblers/wod-wiki-storage/sql';\nimport type { CliDatabaseConfig } from './config';\nimport type {\n BlockQueryStore,\n EventStore,\n EffortQueryStore,\n NoteQueryStore,\n WqlDomainReadResult,\n} from '@bitcobblers/wod-wiki-wql';\nimport { bundledEfforts } from '@bitcobblers/wod-wiki-lang';\n\n/** Structural CJS require — avoids the deprecated NodeJS namespace type. */\ntype CjsRequire = (id: string) => unknown;\n\n/** Minimal node builtin surfaces the CLI uses (kept out of browser bundles). */\nexport interface PathShim { resolve(...parts: string[]): string; join(...parts: string[]): string; dirname(p: string): string; basename(p: string): string }\nexport interface FsShim {\n mkdirSync(p: string, opts: { recursive: boolean }): void;\n existsSync(p: string): boolean;\n unlinkSync(p: string): void;\n readFileSync(p: string, encoding: string): string;\n writeFileSync(p: string, data: string, encoding: string): void;\n}\nexport interface HashShim { update(data: string): HashShim; digest(): Uint8Array }\nexport interface CryptoShim {\n createHash(algorithm: string): HashShim;\n randomUUID(): string;\n}\nexport const nodePath = (): PathShim => nodeRequire()('node:path') as PathShim;\nexport const nodeFs = (): FsShim => nodeRequire()('node:fs') as FsShim;\nexport const nodeCrypto = (): CryptoShim => nodeRequire()('node:crypto') as CryptoShim;\n\n/** Lazy CJS require — keeps node builtins out of browser bundles. */\nfunction nodeRequire(): CjsRequire {\n const g = globalThis as { process?: { versions?: Record<string, string> }; Bun?: unknown; require?: CjsRequire };\n if (typeof g.process?.versions?.node === 'undefined' && typeof g.Bun === 'undefined') {\n throw new Error('SQLite operations are only supported in Node / Bun environments');\n }\n const req = g.require ?? (typeof require === 'function' ? require : undefined);\n if (!req) throw new Error('SQLite operations require a CJS require shim (missing tsup banner?)');\n return req;\n}\n\n/** The storage/sql surface the CLI uses — structural mirror so the lazy import types check. */\nexport interface SqlApi {\n libsqlDatabase(client: LibsqlClient): Database;\n SqlStorage: new (db: Database) => IStorage;\n initializeStore(db: Database): Promise<void>;\n initializeDomain(db: Database): Promise<void>;\n verifyReadiness(db: Database): Promise<void>;\n storeDefinition(name: string): StoreDef;\n listRows(conn: SqlConnection, def: StoreDef, range?: RangeDTO, count?: number, indexName?: string): Promise<unknown[]>;\n getRow(conn: SqlConnection, def: StoreDef, key: KeyDTO): Promise<unknown | undefined>;\n getRows(conn: SqlConnection, def: StoreDef, keys: KeyDTO[]): Promise<(unknown | undefined)[]>;\n putRow(conn: SqlConnection, def: StoreDef, value: unknown): Promise<unknown>;\n deleteRows(conn: SqlConnection, def: StoreDef, keyOrRange: unknown): Promise<void>;\n refreshDomain(conn: SqlConnection, ops: unknown[]): Promise<unknown>;\n handleDomainQuery(db: Database, body: unknown): Promise<unknown>;\n}\n\nlet sqlModulePromise: Promise<SqlApi> | undefined;\n\n/** Lazily import the storage SQL subpath (kept external in the CLI bundle). */\nexport function loadSql(): Promise<SqlApi> {\n sqlModulePromise ??= import(/* @vite-ignore */ '@bitcobblers/wod-wiki-storage/sql') as Promise<SqlApi>;\n return sqlModulePromise;\n}\n\nexport interface CliDb {\n db: Database;\n storage: IStorage;\n /** Absolute path of the underlying .sqlite file — or the sanitized display\n * label (URL without credentials) for remote backends. */\n path: string;\n close(): Promise<void>;\n}\n\n/**\n * Resolve the effective database path: explicit flag wins, then\n * WOD_WIKI_DB, then ./wodwiki.db in the current working directory.\n */\nexport function resolveDbPath(dbPath?: string): string {\n const chosen = dbPath ?? process.env.WOD_WIKI_DB ?? './wodwiki.db';\n return nodePath().resolve(process.cwd(), chosen);\n}\n\n/**\n * Open the CLI database: a legacy local sqlite path (internal callers,\n * created/initialized as before) or a resolved backend config from ./config.\n *\n * opts.initialize (default true): run the schema + projection\n * initialization. false → verify the schema/projection guards only: a\n * missing local sqlite file is NOT created and yields an actionable\n * `wod init` error; remote targets are only probed, never created.\n *\n * opts.create (explicit init requests only, postgres): when the configured\n * PostgreSQL database is missing, openDatabase creates it through the admin\n * \"postgres\" database before initializing. Turso has no management API —\n * its hosted target must already exist.\n */\nexport async function openCliDb(\n target?: string | CliDatabaseConfig,\n opts?: { initialize?: boolean; create?: boolean },\n): Promise<CliDb> {\n if (target === undefined || typeof target === 'string') {\n return openSqliteDb(resolveDbPath(target), opts);\n }\n switch (target.kind) {\n case 'sqlite':\n return openSqliteDb(target.path, opts);\n case 'turso':\n return openRemoteDb(\n { DB_DRIVER: 'turso', DATABASE_URL: target.url, LIBSQL_AUTH_TOKEN: target.authToken },\n target.label,\n opts,\n );\n case 'postgres':\n return openRemoteDb({ DB_DRIVER: 'postgres', DATABASE_URL: target.url }, target.label, opts);\n }\n}\n\nasync function openSqliteDb(resolved: string, opts?: { initialize?: boolean; create?: boolean }): Promise<CliDb> {\n const [{ createClient }, sql] = await Promise.all([\n import(/* @vite-ignore */ '@libsql/client') as Promise<{ createClient: (config: { url: string }) => LibsqlClient }>,\n loadSql(),\n ]);\n const initialize = opts?.initialize ?? true;\n if (!initialize && !nodeFs().existsSync(resolved)) {\n throw new Error(`[wod] no database at ${resolved} — run \\`wod init\\` to create and initialize it`);\n }\n if (initialize) nodeFs().mkdirSync(nodePath().dirname(resolved), { recursive: true });\n const db = sql.libsqlDatabase(createClient({ url: `file:${resolved}` }));\n try {\n if (initialize) {\n await sql.initializeStore(db);\n await sql.initializeDomain(db);\n } else {\n // Guards only — no schema creation on an existing file either.\n await sql.verifyReadiness(db).catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`${message} — run \\`wod init\\` to initialize it`, { cause: error });\n });\n }\n return { db, storage: new sql.SqlStorage(db), path: resolved, close: () => db.close() };\n } catch (error) {\n await db.close();\n throw error;\n }\n}\n\n/** Open a postgres/turso/remote-sqlite backend through the extracted server\n * adapter (dynamic on purpose: node-only subpath kept out of browser\n * bundles and external in the CLI bundle). Never falls back locally. */\nasync function openRemoteDb(\n env: Record<string, string | undefined>,\n label: string,\n opts?: { initialize?: boolean; create?: boolean },\n): Promise<CliDb> {\n const [{ openDatabase }, sql] = await Promise.all([\n import(/* @vite-ignore */ '@bitcobblers/wod-wiki-storage/sql/node') as Promise<{\n openDatabase: (env?: Record<string, string | undefined>, opts?: { create?: boolean }) => Promise<Database>;\n }>,\n loadSql(),\n ]);\n let db: Database | undefined;\n try {\n db = await openDatabase(env, { create: opts?.create });\n if (opts?.initialize === false) {\n await sql.verifyReadiness(db);\n } else {\n await sql.initializeStore(db);\n await sql.initializeDomain(db);\n }\n } catch (error) {\n await db?.close().catch(() => {});\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(\n `[wod] ${label}: ${message}${opts?.initialize === false ? ' — run `wod init` to initialize it' : ''}`,\n { cause: error },\n );\n }\n return { db, storage: new sql.SqlStorage(db), path: label, close: () => db.close() };\n}\n\n// ---------------------------------------------------------------------------\n// Identity helpers\n// ---------------------------------------------------------------------------\n\n/** RFC-4122 byte munging + formatting over a 16-byte digest slice. */\nexport function formatV5Digest(digest: Uint8Array): string {\n const bytes = digest.slice(0, 16);\n bytes[6] = (bytes[6] & 0x0f) | 0x50; // version 5\n bytes[8] = (bytes[8] & 0x3f) | 0x80; // RFC-4122 variant\n const hex = [...bytes].map((b) => b.toString(16).padStart(2, '0'));\n return `${hex.slice(0, 4).join('')}-${hex.slice(4, 6).join('')}-${hex.slice(6, 8).join('')}-${hex.slice(8, 10).join('')}-${hex.slice(10, 16).join('')}`;\n}\n\n/** RFC-4122 v5 (SHA-1) name-based UUID — deterministic seed/note identity. */\nexport function uuid5(namespace: string, name: string): string {\n return formatV5Digest(nodeCrypto().createHash('sha1').update(namespace).update(name).digest());\n}\n\n/** Local namespace for wod-CLI derived identities (not shared with seed ids). */\nexport const CLI_UUID_NAMESPACE = 'c0ffee00-8b1a-4e2c-9d3f-5a6b7c8d9e0f';\n\n/**\n * Stable note identity for a parsed/run source: the same file always maps\n * to the same note, so re-parsing updates instead of duplicating. Stdin\n * sources content-address (no stable path exists).\n */\nexport function stableNoteId(sourceLabel: string, content: string): string {\n if (sourceLabel && sourceLabel !== '-') {\n return uuid5(CLI_UUID_NAMESPACE, `wod-cli:${nodePath().resolve(process.cwd(), sourceLabel)}`);\n }\n return uuid5(CLI_UUID_NAMESPACE, `wod-cli:stdin:${content.length}:${content.slice(0, 256)}`);\n}\n\nexport function randomId(): string {\n return nodeCrypto().randomUUID();\n}\n\n// ---------------------------------------------------------------------------\n// WQL store adapters over the sqlite rows\n// ---------------------------------------------------------------------------\n\nasync function allRows(sql: SqlApi, db: Database, store: string): Promise<unknown[]> {\n return sql.listRows(db, sql.storeDefinition(store));\n}\n\nasync function rowsByIndex(sql: SqlApi, db: Database, store: string, index: string, only: string): Promise<unknown[]> {\n return sql.listRows(db, sql.storeDefinition(store), { only }, undefined, index);\n}\n\n/** EventStore over the `events` table — whole-table reads, keyed writes. */\nexport function sqliteEventStore(db: Database): EventStore {\n const all = async (): Promise<EventRecord[]> => (await allRows(await loadSql(), db, 'events')) as EventRecord[];\n return {\n getEventsByTimeRange: async (start, end) => (await all()).filter((r) => r.timestamp >= start && r.timestamp <= end),\n getEventsByResult: async (resultId) => (await all()).filter((r) => r.resultId === resultId),\n getEventsForNote: async (noteId) => (await all()).filter((r) => r.noteId === noteId),\n getEventsByContent: async (blockContentId) => (await all()).filter((r) => r.blockContentId === blockContentId),\n scanAll: all,\n appendEvents: async (appended) => {\n const sql = await loadSql();\n await db.transaction(async (tx) => {\n const eventsDef = sql.storeDefinition('events');\n for (const row of appended) await sql.putRow(tx, eventsDef, row);\n });\n },\n finalizeSummaries: async (resultId, finals) => {\n const sql = await loadSql();\n await db.transaction(async (tx) => {\n const eventsDef = sql.storeDefinition('events');\n const existing = ((await sql.listRows(tx, eventsDef)) as EventRecord[]).filter(\n (r) => r.resultId === resultId && r.grain === 'summary' && r.origin !== 'user',\n );\n for (const row of existing) await sql.deleteRows(tx, eventsDef, row.id);\n for (const row of finals) await sql.putRow(tx, eventsDef, row);\n });\n },\n deleteEvents: async (ids) => {\n const sql = await loadSql();\n await db.transaction(async (tx) => {\n const eventsDef = sql.storeDefinition('events');\n for (const id of ids) await sql.deleteRows(tx, eventsDef, id);\n });\n },\n };\n}\n\ninterface StoredTag { id: string; label: string; type?: string }\ninterface StoredNoteTag { id: string; noteId: string; tagId: string }\n\n/** NoteQueryStore over the notes/tags/note_tags rows + domain projection reads. */\nexport function sqliteNoteStore(db: Database): NoteQueryStore {\n return {\n getAllNotes: async () => (await allRows(await loadSql(), db, 'notes')) as never,\n getNotesByIds: async (noteIds) => {\n const sql = await loadSql();\n const rows = await sql.getRows(db, sql.storeDefinition('notes'), [...noteIds]) as Array<Note | undefined>;\n return rows.filter((row): row is Note => row !== undefined);\n },\n getNoteIdsForTag: async (label) => {\n const sql = await loadSql();\n const tags = ((await allRows(sql, db, 'tags')) as StoredTag[]).filter((t) => t.label === label);\n const ids: Record<string, true> = {};\n for (const tag of tags) {\n for (const row of await rowsByIndex(sql, db, 'note_tags', 'by-tag', tag.id)) {\n ids[(row as StoredNoteTag).noteId] = true;\n }\n }\n return new Set(Object.keys(ids));\n },\n getNoteTagLabels: async (noteId) => {\n const sql = await loadSql();\n const tagRows = (await allRows(sql, db, 'tags')) as StoredTag[];\n const labelById: Record<string, string> = {};\n for (const t of tagRows) labelById[t.id] = t.label;\n const links = (await rowsByIndex(sql, db, 'note_tags', 'by-note', noteId)) as StoredNoteTag[];\n return links.map((l) => labelById[l.tagId]).filter((l): l is string => typeof l === 'string');\n },\n queryDomain: async (request) => {\n // WQL's domain wire is a structural mirror of the storage DomainQuery.\n const result = await (await loadSql()).handleDomainQuery(db, request as never);\n return result as WqlDomainReadResult;\n },\n };\n}\n\n/** BlockQueryStore over the block_index rows + domain projection reads. */\nexport function sqliteBlockStore(db: Database): BlockQueryStore {\n return {\n getAllBlocks: async () => (await allRows(await loadSql(), db, 'block_index')) as never,\n queryDomain: async (request) => {\n const result = await (await loadSql()).handleDomainQuery(db, { ...request, plan: 'blocks' } as never);\n return result as WqlDomainReadResult;\n },\n };\n}\n\ninterface Slugged { slug: string }\n\n/**\n * EffortQueryStore: rows the seed wrote into the `efforts` registry win by\n * slug; the lang-bundled registry fills the rest (same fallback the\n * playground's RegistryEffortStore performs).\n */\nexport function sqliteEffortStore(db: Database): EffortQueryStore {\n return {\n getAllEfforts: async () => {\n const stored = (await allRows(await loadSql(), db, 'efforts')) as Slugged[];\n const bySlug: Record<string, unknown> = {};\n for (const effort of stored) bySlug[effort.slug] = effort;\n for (const effort of bundledEfforts as unknown as Slugged[]) {\n bySlug[effort.slug] ??= effort;\n }\n return Object.values(bySlug) as never;\n },\n };\n}\n\n/** Generic by-index reader over a store table — the QueryService seam shape. */\nexport interface IndexStore { getAllFromIndex(index: string, key: string): Promise<unknown[]> }\n\n/** Indexed reads over `block_efforts` / `tags` / `note_tags` rows. */\nexport function sqliteIndexStore(db: Database, store: 'block_efforts' | 'tags' | 'note_tags'): IndexStore {\n return {\n getAllFromIndex: async (index, key) => rowsByIndex(await loadSql(), db, store, index, key),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Download bundles (exchange feedstock)\n// ---------------------------------------------------------------------------\n\nexport interface NoteBundle {\n note: Note | undefined;\n}\n\nexport interface SessionBundle {\n session: Session;\n events: EventRecord[];\n}\n\n/** Fetch the whole authored Note. */\nexport async function getNoteBundle(db: Database, noteId: string): Promise<NoteBundle> {\n const sql = await loadSql();\n const note = await sql.getRow(db, sql.storeDefinition('notes'), noteId) as Note | undefined;\n return { note };\n}\n\n/** Fetch a session + its event/summary rows. */\nexport async function getSessionBundle(db: Database, resultId: string): Promise<SessionBundle | undefined> {\n const sql = await loadSql();\n const session = await sql.getRow(db, sql.storeDefinition('sessions'), resultId) as Session | undefined;\n if (!session) return undefined;\n const events = await sql.listRows(db, sql.storeDefinition('events'), { only: resultId }, undefined, 'by-result-grain') as EventRecord[];\n return { session, events };\n}\n\n/** Fetch one effort registry row by slug. */\nexport async function getEffortBySlug(db: Database, slug: string): Promise<Record<string, unknown> | undefined> {\n const sql = await loadSql();\n const efforts = (await allRows(sql, db, 'efforts')) as Array<{ slug: string } & Record<string, unknown>>;\n return efforts.find((e) => e.slug === slug);\n}\n\n/** Fetch tag rows of one type (e.g. 'equipment'). */\nexport async function listTagsByType(db: Database, type: string): Promise<Array<{ id: string; label: string; type?: string }>> {\n const sql = await loadSql();\n const tags = (await allRows(sql, db, 'tags')) as Array<{ id: string; label: string; type?: string }>;\n return tags.filter((t) => t.type === type);\n}\n","import type { BlockEffort, BlockIndexRow, NoteBlock } from '@bitcobblers/wod-wiki-core';\nimport { KNOWN_SECTION_WIDGETS } from '@bitcobblers/wod-wiki-core';\n\nexport const SEED_SCHEMA = 8;\nexport const SEED_REGISTERED_WIDGETS = KNOWN_SECTION_WIDGETS;\n\n/** Source and all current derived rows commit as one chunk. */\nexport interface SeedRow {\n path: string;\n content: string;\n blocks: Record<string, NoteBlock>;\n blockIndex: BlockIndexRow[];\n blockEfforts: BlockEffort[];\n}\n\nexport type ChunkKind = 'notes';\nexport interface ManifestChunk {\n id: string;\n path: string;\n sha256: string;\n bytes: number;\n count: number;\n kind?: ChunkKind;\n}\nexport interface SeedManifest {\n schema: number;\n version: number;\n versionLabel?: string;\n commit?: string;\n dirty?: boolean;\n builtAt: string;\n chunks: ManifestChunk[];\n}\nexport interface SeedMetaRecord {\n key: string;\n schema: number;\n seedVersion: number;\n builtAt: string;\n importedAt: number;\n chunks: Record<string, { sha256: string; noteIds?: string[] }>;\n claim?: { owner: string; at: number } | null;\n}\nexport const SEED_BROADCAST_CHANNEL = 'wodwiki.seed';\nexport const EFFORTS_CHUNK_ID = 'efforts';\nexport const CANVAS_CHUNK_ID = 'canvas';\nexport const DASHBOARDS_CHUNK_ID = 'dashboards';\nexport const TEMPLATE_CHUNK_ID = 'template';\nexport function seedMetaKey(sourceId: string): string { return `seed:${sourceId}`; }\nexport function emptySeedMeta(key: string): SeedMetaRecord {\n return { key, schema: SEED_SCHEMA, seedVersion: 0, builtAt: '', importedAt: 0, chunks: {}, claim: null };\n}\nexport function catalogForChunkId(chunkId: string): string | undefined {\n const value = /^(?:collection|feed)\\.(.+)$/.exec(chunkId)?.[1];\n return value && value !== '_root' ? value : undefined;\n}\nexport function canvasRouteSlug(content: string): string | null {\n const fm = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(content);\n if (fm?.[1] && !/^template:\\s*canvas\\s*$/m.test(fm[1])) return null;\n return fm?.[1]?.match(/^route:\\s*(\\S+)\\s*$/m)?.[1]?.replace(/^\\//, '') || null;\n}\nexport function seedNoteSourceId(path: string, content: string, chunkId: string): string | undefined {\n const parts = path.split('/');\n const stem = (parts.at(-1) ?? '').replace(/\\.md$/i, '');\n const under = parts.slice(2).map((p) => p.replace(/\\.md$/i, '')).join('/');\n if (chunkId === CANVAS_CHUNK_ID) return `guides:${canvasRouteSlug(content) ?? under}`;\n if (chunkId === DASHBOARDS_CHUNK_ID) return 'dashboards';\n if (chunkId === EFFORTS_CHUNK_ID) return 'efforts';\n if (chunkId === TEMPLATE_CHUNK_ID) return 'playground';\n if (chunkId.startsWith('collection.')) {\n const catalog = catalogForChunkId(chunkId);\n return !catalog ? 'collection:_root' : stem.toLowerCase() === 'readme' ? `collection:${catalog}` : `collection:${catalog}/${stem}`;\n }\n if (chunkId.startsWith('feed.')) return `feed:feeds/${under}`;\n return undefined;\n}\n","/**\n * extractEffortSlugs — port of wod-wiki's\n * apps/playground/src/services/storage/StorageService.ts (the pure function\n * only). Derives canonical effort slugs referenced by script statements for\n * the block-efforts containment index.\n */\nimport type { ICodeStatement } from '@bitcobblers/wod-wiki-core';\n\nexport function extractEffortSlugs(statements: ICodeStatement[]): string[] {\n const slugs = new Set<string>();\n for (const statement of statements) {\n if (statement.exerciseId) {\n slugs.add(statement.exerciseId);\n } else {\n const effortMetric = statement.metrics?.getMetric?.('effort');\n const effort = effortMetric && typeof effortMetric.value === 'string' ? effortMetric.value : undefined;\n if (effort) {\n const slug = effort.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');\n if (slug) slugs.add(slug);\n }\n }\n }\n return Array.from(slugs);\n}\n","/**\n * fileToDisplayName — port of wod-wiki's\n * apps/playground/src/repositories/groupings.ts (display-name derivation\n * only). Block-index rows carry the same note titles the app renders, so\n * titles must derive identically on both sides.\n */\n\n/** Lowercased mid-title words — \"and\", \"of\", \"70.3\"-style fragments read wrong capped. */\nconst FILE_TITLE_STOP_WORDS: Record<string, true> = {\n and: true, or: true, of: true, for: true, to: true, in: true, on: true,\n at: true, by: true, with: true, the: true, a: true, an: true,\n};\n\n/**\n * Parse a filename into a display name.\n * \"simple-and-sinister.md\" -> \"Simple and Sinister\"\n */\nexport function fileToDisplayName(filename: string): string {\n const base = filename.replace(/\\.md$/, '');\n if (base.toUpperCase() === 'README') return 'Overview';\n // Strip leading \"day-01-\" prefixes if present, then humanise\n const cleaned = base.replace(/^day-\\d+-/, '');\n const tokens = cleaned.split(/[-_]/);\n const titled: string[] = [];\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i]!;\n const next = tokens[i + 1];\n const after = tokens[i + 2];\n const prev = tokens[i - 1];\n // Race distances keep their dot: a lone 1-2-digit pair (\"70-3\" -> \"70.3\").\n // Longer numeric runs are dates (2009-12-01) or rep ladders (5-3-1) —\n // only an isolated pair between words is a distance.\n if (\n /^\\d{1,2}$/.test(token) && /^\\d{1,2}$/.test(next ?? '')\n && !/^\\d+$/.test(prev ?? '') && !/^\\d+$/.test(after ?? '')\n ) {\n titled.push(`${token}.${next}`);\n i++;\n continue;\n }\n if (titled.length > 0 && FILE_TITLE_STOP_WORDS[token.toLowerCase()]) {\n titled.push(token.toLowerCase());\n continue;\n }\n titled.push(token.charAt(0).toUpperCase() + token.slice(1));\n }\n return titled.join(' ');\n}\n","/**\n * Frontmatter parser — port of wod-wiki's apps/playground/src/lib/frontmatter.ts\n * (parseFrontmatter/getScalar/getList only; the editor-only helpers\n * (LinkWidget, YouTube, serialize) stay in the app).\n *\n * ponytail: semantics must match the app's parser exactly — the seed\n * compiler and the app runtime derive frontmatter from the same corpus.\n * Upgrade path: publish the parser in @bitcobblers/wod-wiki-core and import\n * from both sides.\n */\n\nexport interface ParsedFrontmatter {\n meta: Record<string, string | number | string[]>\n body: string\n}\n\n/** Leading `---` … `---` block; body is everything after the closing delimiter. */\nconst FRONTMATTER_RE = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---\\r?\\n?/;\n\n/** Strip matched wrapping quotes: `\"x\"` / `'x'` → `x`; mismatched quotes are kept.\n * Double-quoted values also collapse the serializer's escapes (`\\\\\"`, `\\\\\\\\`). */\nfunction unquote(value: string): string {\n return value.replace(/^(['\"])(.*)\\1$/, (_match, quote: string, inner: string) =>\n quote === '\"' ? inner.replace(/\\\\([\"\\\\])/g, '$1') : inner,\n );\n}\n\n/**\n * Parse the leading YAML frontmatter block of a markdown string.\n *\n * Semantics (mirrors the app):\n * - Scalar `key: value` (key `/^[A-Za-z][\\w.-]*$/`, dots allow flat nested\n * keys like `book.title`): wrapping quotes stripped; bare numeric strings\n * become `number`, quoted scalars always stay strings.\n * - `key:` with empty value followed by indented `- item` lines → `string[]`.\n * - `key:` with empty value and no list items → `''`.\n * - Inline `key: [a, b]` stays a plain scalar string.\n */\nexport function parseFrontmatter(raw: string): ParsedFrontmatter {\n const match = raw.match(FRONTMATTER_RE);\n if (!match) return { meta: {}, body: raw };\n return { meta: parseMetaLines(match[1].split(/\\r?\\n/)), body: raw.slice(match[0].length) };\n}\n\nfunction parseMetaLines(lines: string[]): ParsedFrontmatter['meta'] {\n const meta: ParsedFrontmatter['meta'] = {};\n\n for (let i = 0; i < lines.length; i++) {\n const keyMatch = lines[i].match(/^([A-Za-z][\\w.-]*)\\s*:(.*)$/);\n if (!keyMatch) continue; // indented/nested/list lines are not top-level keys\n\n const key = keyMatch[1];\n const rawVal = keyMatch[2].trim();\n\n if (rawVal === '') {\n const items: string[] = [];\n while (i + 1 < lines.length) {\n const itemMatch = lines[i + 1].match(/^\\s+-\\s+(.+)$/);\n if (!itemMatch) break;\n items.push(itemMatch[1].trim());\n i++;\n }\n meta[key] = items.length > 0 ? items : '';\n } else {\n const wasQuoted = /^(['\"])(.*)\\1$/.test(rawVal);\n const value = unquote(rawVal);\n const num = Number(value);\n meta[key] = !wasQuoted && value !== '' && !isNaN(num) ? num : value;\n }\n }\n\n return meta;\n}\n\n/** Scalar value at `key`, or `undefined` when absent or a list. */\nexport function getScalar(\n meta: ParsedFrontmatter['meta'],\n key: string,\n): string | number | undefined {\n const value = meta[key];\n return typeof value === 'string' || typeof value === 'number' ? value : undefined;\n}\n\n/** List value at `key`, or `[]` when absent or a scalar. */\nexport function getList(meta: ParsedFrontmatter['meta'], key: string): string[] {\n const value = meta[key];\n return Array.isArray(value) ? value : [];\n}\n","/**\n * Effort-file parsing — port of wod-wiki's\n * apps/playground/src/repositories/effort-markdown.ts (parse-frontmatter\n * direction only; effortToDocument/documentToEffort stay in the app).\n *\n * The compiler needs `parseEffortFile` to build the effort alias map used by\n * block-efforts row derivation. Semantics MUST match the app's runtime effort\n * materialization — alias/slug drift would desync the block plane from the\n * note plane.\n *\n * ponytail: duplicated rather than package-shared to keep this repo\n * standalone; upgrade path is the same published effort-format module\n * imported by both sides.\n */\nimport {\n isEffortDiscipline,\n type IEffort,\n type EffortRegistrySource,\n type IntensityTier,\n} from '@bitcobblers/wod-wiki-lang';\nimport { parseFrontmatter, getScalar, getList } from './frontmatter';\n\n/** Validate a parsed discipline against the canonical vocabulary. */\nfunction parseDiscipline(val: string | undefined): IEffort['baseAttributes']['discipline'] {\n if (!val) return undefined;\n const normalized = unquoteYaml(val.trim()).toLowerCase();\n if (isEffortDiscipline(normalized)) return normalized as IEffort['baseAttributes']['discipline'];\n console.warn(`[effort-file] unknown discipline '${val}' — treating as unset`);\n return undefined;\n}\n\nfunction unquoteYaml(val: string): string {\n if (val.startsWith('\"') && val.endsWith('\"')) {\n return val.slice(1, -1).replace(/\\\\([\"\\\\])/g, '$1');\n }\n if (val.startsWith(\"'\") && val.endsWith(\"'\")) {\n return val.slice(1, -1).replace(/\\\\'/g, \"'\");\n }\n return val;\n}\n\n/** Coerce a scalar from a nested block: booleans/numbers are coerced; everything else stays a string. */\nfunction coerceNestedScalar(raw: string): unknown {\n if (raw === 'true') return true;\n if (raw === 'false') return false;\n if (raw !== '' && !Number.isNaN(Number(raw))) return Number(raw);\n return raw;\n}\n\n/**\n * Read a nested (`key:` followed by indented entries) section from frontmatter\n * lines. Two levels are supported (`derivation.coefficients.*`).\n */\nfunction readNestedSection(lines: string[], key: string): Record<string, unknown> | undefined {\n const start = lines.findIndex(l => new RegExp(`^${key}:\\\\s*$`).test(l));\n if (start === -1) return undefined;\n\n const result: Record<string, unknown> = {};\n let subKey: string | null = null;\n\n for (let i = start + 1; i < lines.length; i++) {\n const line = lines[i];\n if (/^\\S/.test(line)) break; // next top-level key ends the block\n\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n\n const indent = line.length - line.trimStart().length;\n const m = trimmed.match(/^([\\w.-]+):\\s*(.*)$/);\n if (!m) continue;\n const [, k, rawVal] = m;\n\n if (indent === 2) {\n if (rawVal === '') {\n subKey = k;\n result[k] = {};\n } else {\n subKey = null;\n result[k] = coerceNestedScalar(rawVal);\n }\n } else if (indent >= 4 && subKey !== null) {\n (result[subKey] as Record<string, unknown>)[k] = coerceNestedScalar(rawVal);\n }\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\n/** Parse a single bundled effort markdown file into an IEffort (null when malformed). */\nexport function parseEffortFile(raw: string): IEffort | null {\n const blockMatch = raw.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---/);\n if (!blockMatch) return null;\n\n const { meta, body } = parseFrontmatter(raw);\n const innerLines = blockMatch[1].split(/\\r?\\n/);\n\n const id = getScalar(meta, 'id');\n const slug = getScalar(meta, 'slug');\n const label = getScalar(meta, 'label');\n const aliases = getList(meta, 'aliases');\n\n const baseAttrs = readNestedSection(innerLines, 'baseAttributes');\n const hints = readNestedSection(innerLines, 'hints');\n const derivation = readNestedSection(innerLines, 'derivation');\n\n const metRaw = baseAttrs?.met;\n const met = typeof metRaw === 'number' ? metRaw : Number(metRaw);\n if (!id || !slug || !label || metRaw === undefined || Number.isNaN(met)) return null;\n\n const discipline = parseDiscipline(\n typeof baseAttrs?.discipline === 'string' ? baseAttrs.discipline : undefined,\n );\n const intensityTier = baseAttrs?.intensityTier;\n const trimmedBody = body.trim();\n\n return {\n id: String(id),\n slug: String(slug),\n label: String(label),\n aliases,\n baseAttributes: {\n met,\n ...(discipline ? { discipline } : {}),\n ...(intensityTier ? { intensityTier: intensityTier as IntensityTier } : {}),\n },\n registrySource: 'bundled' as EffortRegistrySource,\n ...(trimmedBody ? { body: trimmedBody } : {}),\n ...(hints ? { hints } : {}),\n ...(derivation ? { derivation: derivation as IEffort['derivation'] } : {}),\n };\n}\n","/**\n * Git-derived versioning — the seed artifact's version IS this repo's git\n * history. Every merged MR advances `version` (commit count), and\n * `versionLabel`/`commit` make an artifact traceable to its exact source\n * tree, so the app (and humans diffing manifests) can answer \"what changed\n * and what needs syncing\" from the manifest alone.\n */\nimport { execSync } from 'node:child_process';\n\nexport interface GitVersion {\n /** Monotonic commit count — the import-order version stamped on the manifest. */\n version: number;\n /** `git describe --tags --long --always --dirty`, e.g. `v1.2.0-4-gdeadbee`. */\n versionLabel: string;\n /** Full HEAD sha. */\n commit: string;\n /** True when built with uncommitted working-tree changes. */\n dirty: boolean;\n}\n\n/** Unversioned fallback for source trees without git history (e.g. exported tarballs). */\nexport const UNKNOWN_GIT_VERSION: GitVersion = {\n version: 0,\n versionLabel: 'unknown',\n commit: '',\n dirty: false,\n};\n\nexport function resolveGitVersion(repoRoot: string): GitVersion {\n try {\n const run = (args: string): string =>\n execSync(`git ${args}`, { cwd: repoRoot, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();\n const count = Number(run('rev-list --count HEAD'));\n return {\n version: Number.isFinite(count) && count > 0 ? count : 0,\n versionLabel: run('describe --tags --long --always --dirty'),\n commit: run('rev-parse HEAD'),\n dirty: run('status --porcelain') !== '',\n };\n } catch {\n return UNKNOWN_GIT_VERSION;\n }\n}\n","/**\n * Build report — a static HTML benchmark page for each seed build\n * (`dist/report.html`). Per-chunk sizes, row counts, pass timings, and the\n * git version stamp, so CI and contributors see build health at a glance.\n * Deliberately dependency-free (one string template + a file write).\n */\nimport { writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { SeedManifest } from './contract';\n\nexport interface BuildReportData {\n manifest: SeedManifest;\n /** Wall-clock ms for the full build. */\n totalMs: number;\n /** Per-pass timings (ms): corpus scan, block-index derivation, effort-row derivation, chunk writes. */\n passMs: { scan: number; blockIndex: number; parseGate: number; blockEfforts: number; write: number };\n /** Number of corpus markdown files. */\n fileCount: number;\n outDir: string;\n}\n\nfunction escapeHtml(s: string): string {\n return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\n}\n\nfunction rowHtml(c: SeedManifest['chunks'][number]): string {\n const kind = c.kind ?? 'notes';\n return `<tr><td>${escapeHtml(c.id)}</td><td>${kind}</td><td>${c.count}</td><td>${(c.bytes / 1024).toFixed(1)} KB</td><td><code>${c.sha256.slice(0, 8)}</code></td></tr>`;\n}\n\nexport function writeBuildReport(outDir: string, data: BuildReportData): string {\n const { manifest, totalMs, passMs, fileCount } = data;\n const totalBytes = manifest.chunks.reduce((s, c) => s + c.bytes, 0);\n const dirtyBadge = manifest.dirty\n ? ' <strong style=\"color:#b45309\">(dirty working tree — not reproducible from <code>' + escapeHtml(manifest.commit ?? '') + '</code>)</strong>'\n : '';\n const html = `<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\" />\n<title>Seed build report</title>\n<style>\n body { font-family: system-ui, sans-serif; max-width: 960px; margin: 2rem auto; padding: 0 1rem; color: #1f2937; }\n h1 { font-size: 1.4rem; } h2 { font-size: 1.1rem; margin-top: 2rem; }\n table { border-collapse: collapse; width: 100%; font-size: 0.9rem; }\n th, td { text-align: left; padding: 0.3rem 0.6rem; border-bottom: 1px solid #e5e7eb; }\n code { font-size: 0.85em; }\n dl { display: grid; grid-template-columns: max-content 1fr; gap: 0.2rem 1rem; font-size: 0.95rem; }\n dt { font-weight: 600; }\n</style>\n</head>\n<body>\n<h1>Seed build report</h1>\n<h2>Version</h2>\n<dl>\n <dt>version</dt><dd>${manifest.version} <code>${escapeHtml(manifest.versionLabel ?? '')}</code>${dirtyBadge}</dd>\n <dt>commit</dt><dd><code>${escapeHtml(manifest.commit ?? 'unknown')}</code></dd>\n <dt>built at</dt><dd>${escapeHtml(manifest.builtAt)}</dd>\n <dt>schema</dt><dd>v${manifest.schema}</dd>\n</dl>\n<h2>Benchmarks</h2>\n<dl>\n <dt>total</dt><dd>${totalMs} ms</dd>\n <dt>corpus scan + partition</dt><dd>${passMs.scan} ms (${fileCount} files)</dd>\n <dt>block-index derivation</dt><dd>${passMs.blockIndex} ms</dd>\n <dt>block syntax gate</dt><dd>${passMs.parseGate} ms</dd>\n <dt>block-efforts derivation</dt><dd>${passMs.blockEfforts} ms</dd>\n <dt>chunk writes</dt><dd>${passMs.write} ms</dd>\n</dl>\n<h2>Chunks (${manifest.chunks.length}, ${(totalBytes / 1024).toFixed(0)} KB total)</h2>\n<table>\n<thead><tr><th>id</th><th>kind</th><th>rows</th><th>size</th><th>sha256</th></tr></thead>\n<tbody>\n${manifest.chunks.map(rowHtml).join('\\n')}\n</tbody>\n</table>\n</body>\n</html>\n`;\n const file = join(outDir, 'report.html');\n writeFileSync(file, html, 'utf8');\n return file;\n}\n","/** Compiles exact source, occurrence maps and sparse projections into atomic notes chunks. */\nimport { parseScript, whiteboardParser } from '@bitcobblers/wod-wiki-lang';\nimport { blockContentId, parseDocumentSections, reconcileNoteBlocks } from '@bitcobblers/wod-wiki-core';\nimport type { BlockEffort, BlockIndexRow } from '@bitcobblers/wod-wiki-storage';\nimport {\n buildDashboardDocument,\n isDashboardWidgetType,\n parseDashboardNote,\n parseQuery,\n resolveWidgetType,\n} from '@bitcobblers/wod-wiki-wql';\nimport {\n DASHBOARDS_CHUNK_ID,\n SEED_SCHEMA,\n SEED_REGISTERED_WIDGETS,\n TEMPLATE_CHUNK_ID,\n canvasRouteSlug,\n seedNoteSourceId,\n type ManifestChunk,\n type SeedManifest,\n type SeedRow,\n} from './contract';\nimport { extractEffortSlugs } from './effort-slugs';\nimport { fileToDisplayName } from './filename';\nimport { parseEffortFile } from './effort-file';\nimport { resolveGitVersion } from './git-version';\nimport { writeBuildReport } from './report';\nimport { parseFrontmatter } from './frontmatter';\nimport { createHash } from 'node:crypto';\nimport { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'node:fs';\nimport { execSync } from 'node:child_process';\nimport { join, relative } from 'node:path';\n\n// BlockEffort/BlockIndexRow row types come from @bitcobblers/wod-wiki-storage\n// (type-only import — chunk rows are plain JSON applied structurally by the\n// app, mirroring cli/seed.ts).\n\n/** Scan `dir` recursively for `*.md` files; returns POSIX paths relative to `dir`, sorted. */\nfunction listMarkdownFiles(dir: string, prefix = ''): string[] {\n if (!existsSync(dir)) return [];\n const out: string[] = [];\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n const rel = prefix ? `${prefix}/${entry.name}` : entry.name;\n if (entry.isDirectory()) out.push(...listMarkdownFiles(join(dir, entry.name), rel));\n else if (entry.isFile() && entry.name.endsWith('.md')) out.push(rel);\n }\n return out.sort();\n}\n\n// ── Types ─────────────────────────────────────────────────────────────────\n\nexport interface ChunkGroup {\n id: string;\n files: string[];\n}\n\nexport interface GenerateSeedOptions {\n /** The corpus directory (`markdown/`). Defaults to `<corpusRoot>/markdown`. */\n markdownDir?: string;\n /** Optional playground template file — the host passes its own; standalone builds omit the `template` chunk. */\n templateFile?: string;\n /**\n * Row path recorded for the template chunk (the runtime derives the\n * template note's id from it, so it must stay stable across builds). The\n * host pins its historical in-repo path; defaults to the path relative to\n * `corpusRoot`.\n */\n templateRowPath?: string;\n /** Output directory. Defaults to `<corpusRoot>/dist`. */\n outDir?: string;\n /**\n * Explicit manifest version (tests). Defaults to the corpus repo's git\n * commit count — see git-version.ts.\n */\n version?: number;\n /** Repo root the corpus paths resolve against and versioning derives from. Defaults to cwd. */\n corpusRoot?: string;\n /** Automatically scaffold markdown files for newly discovered efforts. */\n scaffoldDiscoveredEfforts?: boolean;\n}\n\nexport interface GenerateSeedResult {\n manifest: SeedManifest;\n outDir: string;\n totalFiles: number;\n reportPath: string;\n /** ms timings per pass (mirrored into report.html). */\n passMs: { scan: number; blockIndex: number; parseGate: number; blockEfforts: number; write: number };\n}\n\n// ── Corpus partition ──────────────────────────────────────────────────────\n\n/**\n * Map one `markdown/…` path to its chunk id. Returns null for files outside\n * the known corpora — callers MUST treat that as a parity failure so new\n * content directories cannot bypass the seed.\n */\nexport function chunkIdFor(relPath: string): string | null {\n const parts = relPath.split('/');\n if (parts[0] !== 'markdown' || parts.length < 2) return null;\n const corpus = parts[1];\n // markdown/<corpus>/<rest…>; a file directly under markdown/ has no corpus.\n if (parts.length === 2) return null;\n const slug = parts[2]?.replace(/\\.md$/, '');\n switch (corpus) {\n case 'canvas':\n case 'dashboards':\n case 'efforts':\n return corpus;\n case 'collections':\n return parts.length === 3 ? `collection._root` : `collection.${slug}`;\n case 'feeds':\n return parts.length === 3 ? `feed._root` : `feed.${slug}`;\n default:\n return null;\n }\n}\n\n/** Scan the markdown corpus; returns repo-relative POSIX paths of all .md files. */\nexport function collectCorpusMarkdown(markdownDir: string): string[] {\n return listMarkdownFiles(markdownDir).map((p) => `markdown/${p}`);\n}\n\n/** Group markdown corpus paths into chunk groups; throws on paths outside the known corpora. */\nexport function partitionIntoChunks(paths: string[]): ChunkGroup[] {\n const byId = new Map<string, string[]>();\n for (const p of paths) {\n const id = chunkIdFor(p);\n if (id === null) {\n throw new Error(\n `[generate-seed] Parity failure: '${p}' is not part of any known corpus ` +\n `(canvas | dashboards | efforts | collections | feeds). ` +\n `Extend chunkIdFor() if this is a new corpus.`,\n );\n }\n const list = byId.get(id);\n if (list) list.push(p);\n else byId.set(id, [p]);\n }\n return [...byId.entries()]\n .sort(([a], [b]) => (a < b ? -1 : 1))\n .map(([id, files]) => ({ id, files }));\n}\n\n// ── Dashboard gate (#906) ─────────────────────────────────────────────────\n\n/**\n * Validate one dashboard note in the locked #899 format: dashboard\n * frontmatter, a title, known widget types, WQL bodies that parse (and are\n * aggregate queries, not find queries), and every `$token` reference\n * declared. Returns the problems found (empty = valid).\n */\nexport function validateDashboardNote(raw: string): string[] {\n const problems: string[] = [];\n const { meta } = parseFrontmatter(raw);\n const { sections } = parseDashboardNote(raw);\n const doc = buildDashboardDocument(sections, meta);\n if (!doc.isDashboard) return ['file is not a dashboard note (missing dashboard frontmatter)'];\n if (doc.title === undefined) problems.push('dashboard has no title');\n if (doc.widgets.length < 3) problems.push(`dashboard has only ${doc.widgets.length} widgets (the locked format has ≥ 3)`);\n const declared = new Set(doc.tokens.map((t) => t.name));\n for (const widget of doc.widgets) {\n const where = `widget '${widget.title ?? widget.body.slice(0, 40)}'`;\n if (widget.title === undefined) problems.push(`${where}: missing title`);\n if (!isDashboardWidgetType(resolveWidgetType(widget.type))) {\n problems.push(`${where}: unknown widget type '${widget.type}'`);\n }\n const parsed = parseQuery(widget.body);\n if (parsed.error !== undefined) problems.push(`${where}: WQL parse error: ${parsed.error}`);\n for (const ref of [\n ...widget.body.matchAll(/\\$([A-Za-z][\\w-]*)/g),\n ...Object.values(widget.attributes).flatMap((v) => [...String(v).matchAll(/\\$([A-Za-z][\\w-]*)/g)]),\n ]) {\n if (!declared.has(ref[1])) problems.push(`${where}: undeclared token $${ref[1]}`);\n }\n }\n return problems;\n}\n\n/** Validate every dashboard file in a chunk group; throws on the first invalid file. */\nfunction gateDashboards(groups: ChunkGroup[], corpusRoot: string): void {\n for (const group of groups) {\n if (group.id !== DASHBOARDS_CHUNK_ID) continue;\n for (const p of group.files) {\n const problems = validateDashboardNote(readFileSync(join(corpusRoot, p), 'utf8'));\n if (problems.length > 0) {\n throw new Error(`[generate-seed] Dashboard validation failed for '${p}':\\n - ${problems.join('\\n - ')}`);\n }\n }\n }\n}\n\n// ── Block index derivation ────────────────────────────────────────────────\n\n\n/** Created-at from the corpus repo's git history (collections/guides), 0 fallback when unknown. */\nfunction getFileCreatedAt(file: string, repoRoot: string): number {\n try {\n const out = execSync(`git log -1 --format=%ct -- '${file}'`, { cwd: repoRoot, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();\n const ts = Number(out) * 1000;\n return Number.isFinite(ts) && ts > 0 ? ts : 0;\n } catch {\n return 0;\n }\n}\n\n/** Created-at timestamp for a feed entry's date key (`yyyy-mm-dd` from the path). */\nexport function feedDateToCreatedAt(dateKey: string): number {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(dateKey)) return 0;\n const ts = Date.parse(`${dateKey}T00:00:00Z`);\n return Number.isNaN(ts) ? 0 : ts;\n}\n\n// canvasRouteSlug lives in contract.ts — one derivation shared by the\n// block plane (here) and the app's importer (note plane).\n\n\nexport function compileSeedRow(path: string, content: string, metadata: { routeId?: string; noteTitle?: string; sourceId?: string; createdAt?: number } = {}): SeedRow {\n let ordinal = 0;\n const blocks = reconcileNoteBlocks(content, { sourceRevision: 1, registeredWidgets: SEED_REGISTERED_WIDGETS, createId: () => `seed:${path}:${ordinal++}` });\n const noteId = metadata.routeId ?? path;\n const sections = parseDocumentSections(content);\n const blockIndex: BlockIndexRow[] = Object.values(blocks).map((block, position) => {\n const section = sections.find((section) => section.from === block.from && section.to === block.to);\n return { id: `${noteId}:${block.id}`, noteId, blockId: block.id, blockVersion: 1, sourceRevision: 1, from: block.from, to: block.to, position, dataType: block.kind, ...(block.kind === 'wod' ? { blockContentId: blockContentId(section?.scriptBlock?.content ?? content.slice(block.from, block.to)) } : {}), rawContent: content.slice(block.from, block.to), noteTitle: metadata.noteTitle ?? fileToDisplayName(path.split('/').at(-1) ?? path), createdAt: metadata.createdAt ?? 0, isStatic: true, sourceId: metadata.sourceId, sourcePath: path, routeId: metadata.routeId };\n });\n return { path, content, blocks, blockIndex, blockEfforts: [] };\n}\n\nexport function buildBlockIndexRows(markdownDir: string, corpusRoot: string): BlockIndexRow[] {\n const rows: BlockIndexRow[] = [];\n for (const path of collectCorpusMarkdown(markdownDir)) {\n const chunkId = chunkIdFor(path);\n if (!chunkId) continue;\n const content = readFileSync(join(corpusRoot, path), 'utf8');\n const parts = path.split('/');\n const stem = (parts.at(-1) ?? '').replace(/\\.md$/, '');\n const catalog = parts[2];\n const routeId = chunkId === 'canvas' ? canvasRouteSlug(content) ?? undefined : chunkId.startsWith('collection.') ? (stem.toLowerCase() === 'readme' ? catalog : `${catalog}/${stem}`) : chunkId.startsWith('feed.') ? parts.slice(1).join('/').replace(/\\.md$/, '') : undefined;\n const sourceId = seedNoteSourceId(path, content, chunkId);\n const createdAt = chunkId.startsWith('feed.') ? feedDateToCreatedAt(parts.at(-2) ?? '') : getFileCreatedAt(path, corpusRoot);\n rows.push(...compileSeedRow(path, content, { routeId, sourceId, createdAt }).blockIndex);\n }\n return rows;\n}\n\n/**\n * Syntax gate — every `wod` block's script must parse cleanly.\n *\n * Plain fences get a strict scan of the Lezer tree for error nodes\n * (`WhiteboardScript.errors` only carries mapper exceptions; the parser\n * recovers silently, so the tree is scanned directly) with `path:line`\n * diagnostics. Dialect-fenced blocks (`log:climbing`, …) are owned by the\n * dialect stack — their `key: value` lines are recovered by dialect\n * handlers, not the base grammar — so those gate on the exception channel\n * of a dialect-aware parse instead, matching how the app consumes them.\n */\nexport function validateWodBlockSyntax(blocks: BlockIndexRow[]): string[] {\n const problems: string[] = [];\n for (const block of blocks) {\n if (block.dataType !== 'wod' || !block.rawContent?.trim()) continue;\n const section = parseDocumentSections(block.rawContent, { registeredWidgets: SEED_REGISTERED_WIDGETS })\n .find((s) => s.scriptBlock);\n const source = section?.scriptBlock?.content ?? block.rawContent;\n if (!source.trim()) continue;\n\n const where = block.sourcePath ?? block.noteId;\n if (section?.sport) {\n const parsed = parseScript(source, { sport: section.sport });\n for (const error of parsed.errors ?? []) {\n problems.push(`${where}: ${error.message}`);\n }\n continue;\n }\n\n const doc = source.endsWith('\\n') ? source : source + '\\n';\n const tree = whiteboardParser.parse(doc);\n tree.iterate({\n enter: (node) => {\n if (!node.type.isError) return;\n const line = doc.slice(0, node.from).split('\\n').length;\n const snippet = source.slice(node.from, Math.min(node.to, node.from + 60)).split('\\n')[0];\n problems.push(`${where}:${line} \\`${snippet}\\``);\n },\n });\n }\n return problems;\n}\n\n/**\n * Uncataloged effort discovered during workout block analysis.\n */\nexport interface DiscoveredEffort {\n slug: string;\n label: string;\n rawLabels: string[];\n}\n\n/** Static lookup — syntax/structure keywords and known non-effort labels that must never scaffold. */\nconst NON_EFFORT_SLUGS: Record<string, true> = {\n 'amrap': true, 'emom': true, 'tabata': true, 'for-time': true, 'rounds': true, 'sets': true,\n 'repetitions': true, 'count-down': true, 'total-reps': true,\n 'warmup': true, 'cooldown': true, 'cool-down': true, 'transition': true, 'rest': true, 'break': true, 'work': true,\n 'i-suck-at-this': true, 'isuckatthis': true, 'movement': true, 'movement-you': true, 'selected-exercise': true,\n 'training-setup': true, 'grade-system': true, 'hangs': true, 'warm-light-wind': true, 'basin': true, 'rock-canyon': true,\n 'b-onsight': true, 'a-redpoint': true, 'd-redpoint': true, 'v0-flash': true, 'v2-flash': true, 'v7-redpoint': true,\n 'avgrpe-mean': true, 'calculate': true, 'totalload-sum': true, 'query': true, 'by': true,\n '': true, '-': true, '...': true, 'x': true, 's': true, 'bw': true,\n};\n\nfunction formatDiscoveredLabel(raw: string): string {\n const clean = raw.replace(/[-_]+/g, ' ').trim();\n return clean\n .split(/\\s+/)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join(' ');\n}\n\nexport function loadExistingEffortMap(markdownDir: string): {\n slugs: Set<string>;\n aliasToCanonical: Map<string, string>;\n} {\n const slugs = new Set<string>();\n const aliasToCanonical = new Map<string, string>();\n const effortsDir = join(markdownDir, 'efforts');\n for (const file of listMarkdownFiles(effortsDir)) {\n const raw = readFileSync(join(effortsDir, file), 'utf8');\n const parsed = parseEffortFile(raw);\n if (!parsed) continue;\n\n slugs.add(parsed.slug);\n aliasToCanonical.set(parsed.slug, parsed.slug);\n aliasToCanonical.set(parsed.label.toLowerCase(), parsed.slug);\n aliasToCanonical.set(parsed.slug.replace(/-/g, ' '), parsed.slug);\n\n for (const alias of parsed.aliases) {\n aliasToCanonical.set(alias.toLowerCase(), parsed.slug);\n aliasToCanonical.set(alias.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/(^-|-$)/g, ''), parsed.slug);\n }\n }\n\n return { slugs, aliasToCanonical };\n}\n\nexport function discoverUncatalogedEfforts(markdownDir: string, corpusRoot: string): DiscoveredEffort[] {\n const { slugs, aliasToCanonical } = loadExistingEffortMap(markdownDir);\n const blocks = buildBlockIndexRows(markdownDir, corpusRoot);\n const discovered = new Map<string, { label: string; rawLabels: Set<string> }>();\n\n for (const block of blocks) {\n if (block.dataType !== 'wod' || !block.rawContent) continue;\n const section = parseDocumentSections(block.rawContent, { registeredWidgets: SEED_REGISTERED_WIDGETS }).find((section) => section.scriptBlock);\n const script = parseScript(section?.scriptBlock?.content ?? block.rawContent);\n for (const statement of script.statements) {\n const effortMetric = statement.metrics?.getMetric?.('effort');\n const effortLabel = (effortMetric && typeof effortMetric.value === 'string' ? effortMetric.value : undefined) ?? statement.exerciseId;\n if (!effortLabel) continue;\n\n const slugified = effortLabel.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/(^-|-$)/g, '');\n if (!slugified || NON_EFFORT_SLUGS[slugified]) continue;\n\n const canonical = aliasToCanonical.get(slugified) ?? aliasToCanonical.get(effortLabel.toLowerCase());\n if (canonical && slugs.has(canonical)) continue;\n\n const existing = discovered.get(slugified);\n if (existing) {\n existing.rawLabels.add(effortLabel);\n } else {\n discovered.set(slugified, {\n label: formatDiscoveredLabel(effortLabel),\n rawLabels: new Set([effortLabel]),\n });\n }\n }\n }\n\n return Array.from(discovered.entries()).map(([slug, data]) => ({\n slug,\n label: data.label,\n rawLabels: Array.from(data.rawLabels),\n }));\n}\n\nexport function scaffoldDiscoveredEfforts(\n discovered: DiscoveredEffort[],\n markdownDir: string,\n): string[] {\n const targetDir = join(markdownDir, 'efforts', 'discovered');\n if (!existsSync(targetDir)) {\n mkdirSync(targetDir, { recursive: true });\n }\n\n const createdPaths: string[] = [];\n for (const effort of discovered) {\n const filePath = join(targetDir, `${effort.slug}.md`);\n if (existsSync(filePath)) continue;\n\n const aliases = effort.rawLabels\n .filter((l) => l.toLowerCase() !== effort.label.toLowerCase())\n .map((l) => ` - \"${l.replace(/\"/g, '\\\\\"')}\"`);\n\n const content = [\n '---',\n `id: effort-bundled-${effort.slug}`,\n `slug: ${effort.slug}`,\n `label: \"${effort.label.replace(/\"/g, '\\\\\"')}\"`,\n aliases.length > 0 ? `aliases:\\n${aliases.join('\\n')}` : 'aliases: []',\n 'baseAttributes:',\n ' met: 5.0',\n ' discipline: general',\n ' intensityTier: moderate',\n 'registrySource: bundled',\n '---',\n '',\n ].join('\\n');\n\n writeFileSync(filePath, content, 'utf8');\n createdPaths.push(filePath);\n }\n\n return createdPaths;\n}\n\n/**\n * Derive BlockEffort[] containment rows from the block-index row set.\n * Requires a second pass over the source markdown to parse the script AST,\n * which is safe because the corpus is static and the pass is compile-time.\n */\nexport function buildBlockEffortRows(markdownDir: string, corpusRoot: string, blocks: BlockIndexRow[] = buildBlockIndexRows(markdownDir, corpusRoot)): BlockEffort[] {\n const efforts: BlockEffort[] = [];\n const { aliasToCanonical } = loadExistingEffortMap(markdownDir);\n for (const block of blocks) {\n if (block.dataType !== 'wod' || !block.rawContent) continue;\n const section = parseDocumentSections(block.rawContent, { registeredWidgets: SEED_REGISTERED_WIDGETS }).find((section) => section.scriptBlock);\n const script = parseScript(section?.scriptBlock?.content ?? block.rawContent);\n const effortSlugs = extractEffortSlugs(script.statements);\n const linked = new Set<string>();\n for (const rawSlug of effortSlugs) {\n const norm = rawSlug.toLowerCase().trim();\n const canonicalSlug =\n aliasToCanonical.get(norm) ??\n aliasToCanonical.get(norm.replace(/[^a-z0-9]+/g, '-').replace(/(^-|-$)/g, '')) ??\n norm.replace(/[^a-z0-9]+/g, '-').replace(/(^-|-$)/g, '');\n if (!canonicalSlug || NON_EFFORT_SLUGS[canonicalSlug] || NON_EFFORT_SLUGS[norm]) {\n continue;\n }\n if (linked.has(canonicalSlug)) continue;\n linked.add(canonicalSlug);\n efforts.push({\n id: `${block.id}:${canonicalSlug}`,\n noteId: block.noteId,\n blockId: block.blockId,\n blockContentId: block.blockContentId,\n effortSlug: canonicalSlug,\n isStatic: block.isStatic,\n sourcePath: block.sourcePath,\n createdAt: block.createdAt,\n });\n }\n }\n return efforts;\n}\n\n\n// ── Generation ────────────────────────────────────────────────────────────\n\nfunction sha256Hex(data: string | Buffer): string {\n return createHash('sha256').update(data).digest('hex');\n}\n\nexport function generateSeed(options: GenerateSeedOptions = {}): GenerateSeedResult {\n const t0 = Date.now();\n const passMs = { scan: 0, blockIndex: 0, parseGate: 0, blockEfforts: 0, write: 0 };\n const corpusRoot = options.corpusRoot ?? process.cwd();\n const markdownDir = options.markdownDir ?? join(corpusRoot, 'markdown');\n const outDir = options.outDir ?? join(corpusRoot, 'dist');\n const gitVersion = options.version !== undefined\n ? { ...resolveGitVersion(corpusRoot), version: options.version }\n : resolveGitVersion(corpusRoot);\n if (options.scaffoldDiscoveredEfforts) {\n const discovered = discoverUncatalogedEfforts(markdownDir, corpusRoot);\n if (discovered.length > 0) {\n scaffoldDiscoveredEfforts(discovered, markdownDir);\n }\n }\n\n const tScan = Date.now();\n const paths = collectCorpusMarkdown(markdownDir);\n const groups = partitionIntoChunks(paths);\n gateDashboards(groups, corpusRoot);\n if (options.templateFile && existsSync(options.templateFile)) {\n const templateRowPath = options.templateRowPath\n ?? relative(corpusRoot, options.templateFile).split('\\\\').join('/');\n groups.push({ id: TEMPLATE_CHUNK_ID, files: [templateRowPath] });\n }\n passMs.scan = Date.now() - tScan;\n\n const tBlockIndex = Date.now();\n const blockRows = buildBlockIndexRows(markdownDir, corpusRoot);\n passMs.blockIndex = Date.now() - tBlockIndex;\n const tParseGate = Date.now();\n const syntaxProblems = validateWodBlockSyntax(blockRows);\n passMs.parseGate = Date.now() - tParseGate;\n if (syntaxProblems.length > 0) {\n const shown = syntaxProblems.slice(0, 20).map((p) => ` ${p}`).join('\\n');\n const more = syntaxProblems.length > 20 ? `\\n … and ${syntaxProblems.length - 20} more` : '';\n throw new Error(`[wod build] block syntax gate failed — ${syntaxProblems.length} block(s) do not parse:\\n${shown}${more}`);\n }\n\n const chunksDir = join(outDir, 'chunks');\n rmSync(outDir, { recursive: true, force: true });\n mkdirSync(chunksDir, { recursive: true });\n\n const manifestChunks: ManifestChunk[] = [];\n const tBlockEfforts = Date.now();\n const effortRows = buildBlockEffortRows(markdownDir, corpusRoot, blockRows);\n passMs.blockEfforts = Date.now() - tBlockEfforts;\n const blocksByPath = new Map<string, BlockIndexRow[]>();\n const effortsByPath = new Map<string, BlockEffort[]>();\n for (const row of blockRows) {\n const rows = blocksByPath.get(row.sourcePath!) ?? [];\n rows.push(row); blocksByPath.set(row.sourcePath!, rows);\n }\n for (const row of effortRows) {\n const rows = effortsByPath.get(row.sourcePath!) ?? [];\n rows.push(row); effortsByPath.set(row.sourcePath!, rows);\n }\n let totalFiles = 0;\n\n const tWrite = Date.now();\n for (const { id, files } of groups) {\n // The template chunk's row path is the host-pinned historical identity,\n // not a path inside this repo — read it from the template file itself.\n const templateSource = id === TEMPLATE_CHUNK_ID ? options.templateFile : undefined;\n const rows: SeedRow[] = files.map((p) => {\n const raw = readFileSync(templateSource ?? join(corpusRoot, p), 'utf8');\n const content = id === TEMPLATE_CHUNK_ID ? raw.replace(/\\$CURSOR/g, '') : raw;\n const compiled = compileSeedRow(p, content);\n compiled.blockIndex = blocksByPath.get(p) ?? compiled.blockIndex;\n compiled.blockEfforts = effortsByPath.get(p) ?? [];\n return compiled;\n });\n const bytes = Buffer.from(JSON.stringify(rows), 'utf8');\n const sha = sha256Hex(bytes);\n const file = `chunks/${id}.${sha.slice(0, 8)}.json`;\n writeFileSync(join(outDir, file), bytes);\n manifestChunks.push({ id, path: file, sha256: sha, bytes: bytes.length, count: rows.length });\n totalFiles += rows.length;\n }\n\n passMs.write = Date.now() - tWrite;\n\n const manifest: SeedManifest = {\n schema: SEED_SCHEMA,\n version: gitVersion.version,\n versionLabel: gitVersion.versionLabel,\n commit: gitVersion.commit,\n dirty: gitVersion.dirty,\n builtAt: new Date().toISOString(),\n chunks: manifestChunks,\n };\n writeFileSync(join(outDir, 'manifest.json'), JSON.stringify(manifest, null, 2) + '\\n');\n\n const reportPath = writeBuildReport(outDir, {\n manifest,\n totalMs: Date.now() - t0,\n passMs,\n fileCount: paths.length,\n outDir,\n });\n\n return { manifest, outDir, totalFiles, reportPath, passMs };\n}\n","/**\n * errors.ts — the single HTTP error type every layer throws; app.ts maps it\n * to the wire's { error, code? } JSON with the matching status.\n */\nexport class HttpError extends Error {\n constructor(readonly status: number, message: string, readonly code?: string) {\n super(message);\n this.name = 'HttpError';\n }\n}\n","/**\n * app.ts — one native fetch handler for the whole surface:\n * GET /api/health\n * GET /api/v1/:store/get?key= GET /api/v1/:store/all?range=&count=\n * GET /api/v1/:store/index/:idx?range=&count=\n * GET /api/v1/:store/count?range=&index=\n * PUT /api/v1/:store {value} DELETE /api/v1/:store?key=\n * POST /api/v1/:store/clear POST /api/v1/tx {ops}\n * POST /api/v1/wipe POST /api/v1/query\n * everything else: static SPA serving from playgroundDist (asset miss with an\n * extension → 404; extensionless → index.html; traversal/symlink escapes →\n * 403; /api never falls through to the SPA).\n *\n * `db` may be null for the CLI playground mode: static SPA serving only, every\n * /api request answers 404 — the playground never touches a server database.\n */\n\nimport { join, resolve, sep } from 'node:path';\nimport { stat, realpath } from 'node:fs/promises';\nimport { realpathSync, createReadStream } from 'node:fs';\nimport { Readable } from 'node:stream';\nimport { HttpError } from './errors';\nimport {\n handleDomainQuery,\n refreshDomain,\n wipeDomain,\n MAX_BODY,\n StorageError,\n storeDefinition,\n getRow,\n listRows,\n countRows,\n wipeRows,\n type Database,\n} from '@bitcobblers/wod-wiki-storage/sql';\nimport { keyFromValue, type KeyDTO, type RangeDTO, type TxOp } from '@bitcobblers/wod-wiki-storage';\n\nconst json = (value: unknown, status: number): Response =>\n new Response(JSON.stringify(value), { status, headers: { 'content-type': 'application/json' } });\n\nfunction streamFile(path: string): BodyInit {\n const bun = (globalThis as { Bun?: { file(p: string): BodyInit } }).Bun;\n if (bun?.file) return bun.file(path);\n // ponytail: node:fs Readable.toWeb streams files in pure Node.js (v18+) without dependencies\n return Readable.toWeb(createReadStream(path)) as unknown as BodyInit;\n}\n\nconst plain = (body: string, status: number): Response =>\n new Response(body, { status, headers: { 'content-type': 'text/plain; charset=utf-8' } });\n\nconst notFound = (): Response => json({ error: 'not found' }, 404);\nconst methodNotAllowed = (): Response => json({ error: 'method not allowed' }, 405);\n\nconst noContent = (): Response => new Response(null, { status: 204 });\n\n/** URLSearchParams already applies the form-urlencoded '+' → space then %XX\n * decoding the wire contract relies on. */\nconst qget = (url: URL, name: string): string | undefined => url.searchParams.get(name) ?? undefined;\n\nfunction jsonParam(url: URL, name: string): unknown {\n const raw = qget(url, name);\n if (raw === undefined) return undefined;\n try {\n return JSON.parse(raw) as unknown;\n } catch {\n throw new HttpError(400, `invalid JSON in ?${name}`);\n }\n}\n\n/** ?range accepts a RangeDTO object or a bare key (scalar/tuple → {only}). */\nfunction rangeParam(url: URL): RangeDTO | undefined {\n const v = jsonParam(url, 'range');\n if (v === undefined) return undefined;\n if (v !== null && typeof v === 'object' && !Array.isArray(v)) return v as RangeDTO;\n return { only: v as KeyDTO };\n}\n\nfunction countParam(url: URL): number | undefined {\n const raw = qget(url, 'count');\n if (raw === undefined) return undefined;\n const n = Number(raw); // Number('') === 0, matching the wire contract\n if (!Number.isFinite(n) || n < 0) throw new HttpError(400, 'invalid ?count');\n return Math.trunc(n);\n}\n\nasync function readJsonBody(req: Request, maxBytes?: number): Promise<unknown> {\n const body = await req.text();\n if (maxBytes !== undefined && body.length > maxBytes) {\n throw new HttpError(413, `domain query body exceeds ${maxBytes} bytes`);\n }\n try {\n return JSON.parse(body) as unknown;\n } catch {\n throw new HttpError(400, 'body must be valid JSON');\n }\n}\n\nfunction txOps(value: unknown): TxOp[] {\n if (!Array.isArray(value)) throw new HttpError(400, 'tx body must be {ops: []}');\n return value.map((op: unknown): TxOp => {\n if (op === null || typeof op !== 'object' || Array.isArray(op) || !('store' in op) || typeof op.store !== 'string' || !('op' in op)) {\n throw new HttpError(400, 'tx op must have a store and operation');\n }\n const def = storeDefinition(op.store);\n const store = def.name;\n switch (op.op) {\n case 'put':\n if (!('value' in op)) throw new HttpError(400, 'put requires value');\n return { op: 'put', store, value: op.value };\n case 'delete':\n if (!('key' in op)) throw new HttpError(400, 'delete requires key');\n return { op: 'delete', store, key: op.key as KeyDTO };\n case 'clear':\n return { op: 'clear', store };\n case 'check': {\n if (!('key' in op) || !('value' in op)) throw new HttpError(400, 'check requires key and value');\n const scalar = (key: unknown): key is string | number => typeof key === 'string' || (typeof key === 'number' && Number.isFinite(key));\n if (!scalar(op.key) && !(Array.isArray(op.key) && op.key.length > 0 && op.key.every(scalar))) {\n throw new HttpError(400, 'check requires a scalar key or non-empty scalar tuple');\n }\n if (op.value !== null && (typeof op.value !== 'object' || Array.isArray(op.value))) {\n throw new HttpError(400, 'check value must be a row or null');\n }\n const parts = Array.isArray(op.key) ? op.key : [op.key];\n if (parts.length !== def.keyPath.length) throw new HttpError(400, 'check key arity must match the store');\n if (op.value !== null) {\n let rowKey: KeyDTO;\n try { rowKey = keyFromValue(def, op.value); }\n catch { throw new HttpError(400, 'check row must have its primary key'); }\n if (JSON.stringify(rowKey) !== JSON.stringify(op.key)) throw new HttpError(400, 'check row primary key must match key');\n }\n return { op: 'check', store, key: op.key, value: op.value };\n }\n default:\n throw new HttpError(400, 'tx op must be put | delete | clear | check');\n }\n });\n}\n\n// ── Static SPA serving ───────────────────────────────────────────────────────\n\nconst MIME: Record<string, string> = {\n html: 'text/html; charset=utf-8',\n js: 'text/javascript; charset=utf-8',\n mjs: 'text/javascript; charset=utf-8',\n css: 'text/css; charset=utf-8',\n json: 'application/json; charset=utf-8',\n map: 'application/json; charset=utf-8',\n svg: 'image/svg+xml',\n png: 'image/png',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n webp: 'image/webp',\n ico: 'image/x-icon',\n woff: 'font/woff',\n woff2: 'font/woff2',\n ttf: 'font/ttf',\n mp3: 'audio/mpeg',\n wav: 'audio/wav',\n webmanifest: 'application/manifest+json',\n xml: 'application/xml',\n txt: 'text/plain; charset=utf-8',\n};\n\nasync function realpathSafe(path: string): Promise<string | undefined> {\n try {\n return await realpath(path);\n } catch {\n return undefined;\n }\n}\n\nasync function serveFile(real: string, rel: string): Promise<Response> {\n // Seed chunks are content-hashed; everything else revalidates.\n const cache = rel.includes('seed/chunks/')\n ? 'public, max-age=31536000, immutable'\n : 'no-cache';\n const ext = rel.slice(rel.lastIndexOf('.') + 1).toLowerCase();\n return new Response(streamFile(real), {\n headers: { 'content-type': MIME[ext] ?? 'application/octet-stream', 'cache-control': cache },\n });\n}\n\nasync function serveSpaShell(distRoot: string): Promise<Response | undefined> {\n const index = await realpathSafe(join(distRoot, 'index.html'));\n // Same symlink confinement as assets: a dist/index.html symlink pointing\n // outside must not become the shell.\n if (index && (index === distRoot || index.startsWith(distRoot + sep))\n && (await stat(index).then((s) => s.isFile(), () => false))) {\n return new Response(streamFile(index), {\n headers: { 'content-type': MIME.html, 'cache-control': 'no-cache' },\n });\n }\n return undefined;\n}\n\nasync function staticResponse(distRoot: string | undefined, method: string, pathname: string): Promise<Response> {\n if (method !== 'GET') return plain('method not allowed', 405);\n if (!distRoot) {\n return plain('wod-wiki-api: playground dist not found. Set PLAYGROUND_DIST or run the playground server build.', 503);\n }\n let rel: string;\n try {\n rel = decodeURIComponent(pathname).replace(/^\\/+/, '');\n } catch {\n return plain('bad request', 400);\n }\n if (rel === '') rel = 'index.html';\n const parts = rel.split('/');\n if (parts.some((p) => p === '..')) return plain('forbidden', 403);\n const base = parts[parts.length - 1] ?? '';\n const hasExtension = base.includes('.');\n\n const abs = resolve(distRoot, ...parts);\n const real = await realpathSafe(abs);\n // Symlink confinement: serve only paths that really live under the dist root.\n if (real && (real === distRoot || real.startsWith(distRoot + sep))) {\n const info = await stat(real).then((s) => s.isFile(), () => false);\n if (info) return serveFile(real, rel);\n }\n // SPA fallback: extensionless paths render the app shell.\n if (!hasExtension) {\n const shell = await serveSpaShell(distRoot);\n if (shell) return shell;\n }\n return plain('not found', 404);\n}\n\n// ── API routing ──────────────────────────────────────────────────────────────\n\nasync function storeRoutes(db: Database, method: string, sub: string, url: URL, req: Request): Promise<Response> {\n let inner = sub.slice('/v1/'.length);\n if (inner.endsWith('/')) inner = inner.slice(0, -1);\n if (inner === '') return notFound();\n const segments = inner.split('/');\n let name: string;\n let action: string | undefined;\n if (segments.length === 1) {\n name = segments[0];\n } else if (segments.length === 2) {\n [name, action] = segments;\n } else if (segments.length === 3 && segments[1] === 'index' && segments[2] !== '') {\n [name, , action] = segments;\n action = `index/${action}`;\n } else {\n return notFound();\n }\n const def = storeDefinition(name); // 404 for unknown stores\n\n const range = rangeParam(url);\n const count = countParam(url);\n\n if (action === 'get' && method === 'GET') {\n const key = jsonParam(url, 'key');\n if (key === undefined) throw new HttpError(400, 'missing ?key');\n const row = await getRow(db, def, key as KeyDTO);\n return row === undefined ? notFound() : json(row, 200);\n }\n if (action === 'all' && method === 'GET') {\n return json(await listRows(db, def, range, count), 200);\n }\n if (action === 'count' && method === 'GET') {\n const indexName = qget(url, 'index');\n const n = indexName\n ? await countRows(db, def, range, indexName)\n : await countRows(db, def, range);\n return json({ count: Number(n) }, 200);\n }\n if (action === 'clear' && method === 'POST') {\n await db.transaction((tx) => refreshDomain(tx, [{ op: 'clear', store: def.name }]));\n return noContent();\n }\n if (action?.startsWith('index/') && method === 'GET') {\n return json(await listRows(db, def, range, count, action.slice('index/'.length)), 200);\n }\n if (action === undefined && method === 'PUT') {\n const parsed = await readJsonBody(req);\n const value = typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed) && 'value' in parsed\n ? parsed.value\n : undefined;\n if (value === undefined) throw new HttpError(400, 'body must be {value: ...}');\n const [key] = await db.transaction((tx) => refreshDomain(tx, [{ op: 'put', store: def.name, value }]));\n return json({ key }, 200);\n }\n if (action === undefined && method === 'DELETE') {\n const keyParam = jsonParam(url, 'key');\n const target = keyParam !== undefined ? keyParam : range;\n if (target === undefined || target === null) throw new HttpError(400, 'DELETE requires ?key or ?range');\n // Wire DELETE accepts a key or a range; the TxOp delete variant types the\n // narrower KeyDTO even though deleteRows honours both.\n await db.transaction((tx) => refreshDomain(tx, [{ op: 'delete', store: def.name, key: target as KeyDTO }]));\n return noContent();\n }\n return methodNotAllowed();\n}\n\nasync function apiRoutes(db: Database, req: Request, method: string, sub: string, url: URL): Promise<Response> {\n if (sub === '/health') {\n return json({ ok: true, driver: db.dialect }, 200);\n }\n if (sub === '/v1/wipe' && method === 'POST') {\n await db.transaction(async (tx) => {\n // System memberships survive; derived projections follow (empty is consistent).\n await wipeRows(tx);\n await wipeDomain(tx);\n });\n return noContent();\n }\n if (sub === '/v1/tx' && method === 'POST') {\n const parsed = await readJsonBody(req);\n const ops = typeof parsed === 'object' && parsed !== null && 'ops' in parsed ? parsed.ops : undefined;\n const parsedOps = txOps(ops);\n const results = await db.transaction((tx) => refreshDomain(tx, parsedOps));\n return json({ results }, 200);\n }\n if (sub === '/v1/query') {\n if (method !== 'POST') return methodNotAllowed();\n const body = await readJsonBody(req, MAX_BODY);\n return json(await handleDomainQuery(db, body), 200);\n }\n if (sub.startsWith('/v1/')) return storeRoutes(db, method, sub, url, req);\n return notFound();\n}\n\n// ── Handler factory ──────────────────────────────────────────────────────────\n\nfunction distRootOf(playgroundDist: string | undefined): string | undefined {\n if (!playgroundDist) return undefined;\n try {\n return realpathSync(playgroundDist);\n } catch {\n return undefined;\n }\n}\n\nexport function createHandler(\n db: Database | null,\n options: { playgroundDist: string },\n): (request: Request) => Promise<Response> {\n const distRoot = distRootOf(options.playgroundDist);\n return async (request: Request): Promise<Response> => {\n try {\n const url = new URL(request.url);\n const method = request.method === 'HEAD' ? 'GET' : request.method; // Bun strips HEAD bodies\n const path = url.pathname;\n const response = path === '/api' || path.startsWith('/api/')\n ? db\n ? await apiRoutes(db, request, method, path.slice('/api'.length) || '/', url)\n : notFound()\n : await staticResponse(distRoot, method, path);\n return response;\n } catch (e) {\n if (e instanceof HttpError || e instanceof StorageError) {\n const status = e.status;\n if (status >= 500) console.error('[wod-wiki-api]', e.message);\n const body: { error: string; code?: string } = { error: status >= 500 ? 'internal error' : e.message };\n if (e.code) body.code = e.code;\n return json(body, status);\n }\n console.error('[wod-wiki-api]', e);\n return json({ error: 'internal error' }, 500);\n }\n };\n}\n","/**\n * server.ts — `wod server` (alias `serve`) / `wod playground` (Bun-only front\n * door).\n *\n * Serves the packaged engine stack: the shared fetch handler shipped in this\n * package (the same code the Docker image serves) plus the frontend build\n * packaged under the engine's dist/web/ — no repository checkout, no runtime\n * build.\n *\n * server probes the configured database first (never creates schema —\n * that's `wod init`), then serves API + SPA.\n * playground serves the browser-storage SPA build and never opens a database\n * (every /api request answers 404).\n *\n * Retains the event loop until SIGINT/SIGTERM; shutdown drains in-flight\n * requests before closing the database.\n */\n\nimport http from 'node:http';\nimport { Readable } from 'node:stream';\nimport { openCliDb, nodeFs, nodePath } from './db';\nimport type { CliDatabaseConfig } from './config';\nimport type { CliDb } from './db';\nimport { createHandler } from '../server/app';\ntype WriteOut = (text: string) => void;\n\nexport type CliServerMode = 'server' | 'playground';\n\nexport interface CliServerOptions {\n /** Resolved database configuration. REQUIRED for 'server'; ignored — never\n * opened or validated — for 'playground'. */\n database?: CliDatabaseConfig;\n host?: string;\n port?: string;\n /** Explicit dist directory (flag or PLAYGROUND_DIST); must already exist. */\n dist?: string;\n /** Merged CLI environment (process env + .env). */\n env: Record<string, string | undefined>;\n}\n\ninterface HttpServerLike {\n stop(): Promise<void>;\n}\n\nfunction withResolvers<T>() {\n let resolve!: (value: T | PromiseLike<T>) => void;\n let reject!: (reason?: unknown) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nfunction startHttpServer(\n handler: (request: Request) => Promise<Response>,\n host: string,\n port: number,\n): Promise<HttpServerLike> {\n const b = (globalThis as { Bun?: { serve(opts: { port: number; hostname: string; fetch: (req: Request) => Promise<Response> }): { stop(): Promise<void> } } }).Bun;\n if (b?.serve) {\n const s = b.serve({ port, hostname: host, fetch: handler });\n return Promise.resolve({ stop: () => s.stop() });\n }\n\n // ponytail: node:http adapter streams Web Request/Response in pure Node (v18+) without express/fastify dependencies\n const { promise, resolve, reject } = withResolvers<HttpServerLike>();\n const server = http.createServer(async (req, res) => {\n try {\n const url = new URL(req.url || '/', `http://${req.headers.host || `${host}:${port}`}`);\n const hasBody = req.method !== 'GET' && req.method !== 'HEAD';\n const webReq = new Request(url, {\n method: req.method,\n headers: req.headers as Record<string, string>,\n body: hasBody ? (Readable.toWeb(req) as unknown as BodyInit) : null,\n ...(hasBody ? { duplex: 'half' } : {}),\n } as RequestInit);\n const webRes = await handler(webReq);\n res.writeHead(webRes.status, Object.fromEntries(webRes.headers.entries()));\n if (webRes.body) {\n Readable.fromWeb(webRes.body as any).pipe(res);\n } else {\n res.end();\n }\n } catch {\n res.statusCode = 500;\n res.end('internal server error');\n }\n });\n\n server.once('error', reject);\n server.listen(port, host, () => {\n resolve({\n stop: () => {\n const close = withResolvers<void>();\n server.close(() => close.resolve());\n return close.promise;\n },\n });\n });\n return promise;\n}\n\n/**\n * This module's directory, robust across shipped layouts: ESM via\n * import.meta.url (works under node and Bun; esbuild shims it in CJS too) and\n * Bun's import.meta.dir. ESM code splitting may relocate this module to a\n * chunk at dist/ root, so never assume dist/cli.\n */\nfunction moduleDir(): string {\n const p = nodePath();\n const meta: { dir?: unknown; url?: unknown } = import.meta; // Bun adds `dir`; the TS lib knows neither.\n if (typeof meta.dir === 'string') return p.resolve(meta.dir);\n if (typeof meta.url === 'string' && meta.url.startsWith('file:')) {\n return p.resolve(p.dirname(decodeURIComponent(new URL('.', meta.url).pathname)));\n }\n throw new Error('wod server/playground: cannot determine the installed engine module directory');\n}\n\n/**\n * The installed engine package root: nearest enclosing package.json belonging\n * to this package, walking up from the executing module (dist/cli, a split\n * chunk at dist/ root, dist/bin, or src/cli in a checkout).\n */\nfunction engineRoot(): string {\n const p = nodePath();\n const fs = nodeFs();\n for (let dir = moduleDir(); ; dir = p.dirname(dir)) {\n try {\n if (JSON.parse(fs.readFileSync(p.resolve(dir, 'package.json'), 'utf8')).name === '@bitcobblers/wod-wiki-tools') return dir;\n } catch { /* no manifest here — keep walking */ }\n const parent = p.dirname(dir);\n if (parent === dir) break;\n }\n throw new Error('wod server/playground: cannot locate the installed @bitcobblers/wod-wiki-tools package');\n}\n\n/**\n * Resolve the frontend dist directory. The packaged default lives inside the\n * installed engine module (dist/web/server or dist/web/playground); an\n * explicit --dist/PLAYGROUND_DIST is cwd-relative and must already contain a\n * built SPA (index.html). Nothing is built at runtime.\n */\nfunction resolveDist(mode: CliServerMode, options: CliServerOptions): string {\n const p = nodePath();\n const explicit = options.dist?.trim() || options.env.PLAYGROUND_DIST?.trim() || undefined;\n if (explicit) {\n const dist = p.resolve(explicit); // cwd-relative override\n if (!nodeFs().existsSync(p.resolve(dist, 'index.html'))) {\n throw new Error(\n `wod ${mode}: no built frontend (index.html) at ${dist} — --dist/PLAYGROUND_DIST must `\n + 'point at an already-built directory (the CLI never builds frontends at runtime)',\n );\n }\n return dist;\n }\n const dist = p.resolve(engineRoot(), 'dist', 'web', mode === 'playground' ? 'playground' : 'server');\n if (!nodeFs().existsSync(p.resolve(dist, 'index.html'))) {\n throw new Error(\n `wod ${mode}: packaged frontend missing — expected ${dist}/index.html. `\n + 'Reinstall @bitcobblers/wod-wiki-tools (bun add @bitcobblers/wod-wiki-tools), '\n + 'or rebuild the release assets from a checkout (bun run build:cli) and reinstall the package.',\n );\n }\n return dist;\n}\n\n/** Validate bind address first: flag > HOST/PORT env > loopback:3000. */\nfunction resolveBind(mode: CliServerMode, options: CliServerOptions): { host: string; port: number } {\n const host = options.host?.trim() || options.env.HOST?.trim() || '127.0.0.1';\n const rawPort = options.port?.trim() || options.env.PORT?.trim() || '3000';\n const port = Number(rawPort);\n if (!Number.isInteger(port) || port < 1 || port > 65535) {\n throw new Error(`wod ${mode}: invalid port ${JSON.stringify(rawPort)} (need integer 1..65535)`);\n }\n return { host, port };\n}\n\n/**\n * Start the shared server for `wod server` / `wod playground`. Throws on any\n * startup failure; on success it never returns until SIGINT/SIGTERM (drain,\n * close database, exit 0).\n */\nexport async function runCliServer(\n mode: CliServerMode,\n options: CliServerOptions,\n writeOut: WriteOut,\n): Promise<void> {\n const { host, port } = resolveBind(mode, options); // Validate bind before opening anything.\n\n // Server probes the database BEFORE binding a socket: a missing/uninitialized\n // database refuses with `wod init` guidance.\n let db: CliDb | undefined;\n let dbLabel = 'no database';\n if (mode === 'server') {\n const database = options.database; // hoisted so the guard's narrowing sticks\n if (!database) {\n throw new Error('wod server: no database configuration resolved — this is a runner bug (expected resolveDatabaseConfig output)');\n }\n try {\n db = await openCliDb(database, { initialize: false });\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n throw new Error(`wod server: database not ready — run \\`wod init\\` first. ${message}`, { cause: e });\n }\n dbLabel = db.path;\n }\n\n let server: HttpServerLike;\n try {\n const dist = resolveDist(mode, options);\n // Bundled server handler\n const handler = createHandler(db?.db ?? null, { playgroundDist: dist });\n // Playground: no database exists to close — createHandler(null) answers\n server = await startHttpServer(handler, host, port);\n if (mode === 'server') {\n writeOut(`wod server: http://${host}:${port} — ${dbLabel} · dist ${dist}`);\n } else {\n writeOut(`wod playground: http://${host}:${port} — in-browser storage (no database) · dist ${dist}`);\n }\n } catch (e) {\n if (db) await db.close(); // never leak the probe connection when startup fails\n throw e;\n }\n\n let closing = false;\n const shutdown = async (): Promise<void> => {\n if (closing) process.exit(0); // second signal forces the exit\n closing = true;\n try {\n await server.stop();\n } finally {\n if (db) await db.close();\n process.exit(0);\n }\n };\n process.on('SIGINT', () => { void shutdown(); });\n process.on('SIGTERM', () => { void shutdown(); });\n\n // Park until a signal handler exits the process.\n await new Promise<never>(() => {});\n}\n","/**\n * Dynamic Language Pack Loader\n *\n * Dynamically loads and registers Language Packs passed via `--pack <module-spec>`.\n * Throws PackLoadError on failure, enabling exit code 3 handling.\n */\n\nfunction getPathUtils() {\n if (typeof globalThis.process?.versions?.node === 'undefined' && !('Bun' in globalThis)) {\n throw new Error('Path resolution is only supported in Node / Bun environments');\n }\n return {\n // eslint-disable-next-line no-restricted-syntax -- lazy CJS require keeps node builtins out of browser bundles\n resolve: require('path').resolve,\n // eslint-disable-next-line no-restricted-syntax -- lazy CJS require keeps node builtins out of browser bundles\n pathToFileURL: require('url').pathToFileURL,\n };\n}\nimport { registerLanguagePack, type LanguagePack } from '@bitcobblers/wod-wiki-engine';\n\nexport class PackLoadError extends Error {\n constructor(\n public readonly spec: string,\n public readonly originalError: unknown,\n ) {\n const msg = originalError instanceof Error ? originalError.message : String(originalError);\n super(`Failed to load Language Pack \"${spec}\": ${msg}`);\n this.name = 'PackLoadError';\n }\n}\n\n/**\n * Dynamically imports a Language Pack module and registers it.\n *\n * @param moduleSpec - Relative or absolute path, or package name.\n */\nexport async function loadLanguagePack(moduleSpec: string): Promise<LanguagePack> {\n try {\n let importPath = moduleSpec;\n\n // If it looks like a relative or absolute file path, resolve and convert to file URL\n if (\n moduleSpec.startsWith('.') ||\n moduleSpec.startsWith('/') ||\n moduleSpec.includes('\\\\') ||\n moduleSpec.endsWith('.ts') ||\n moduleSpec.endsWith('.js') ||\n moduleSpec.endsWith('.mjs')\n ) {\n const { resolve, pathToFileURL } = getPathUtils();\n const resolved = resolve(process.cwd(), moduleSpec);\n importPath = pathToFileURL(resolved).href;\n }\n const imported = await import(/* @vite-ignore */ importPath);\n const candidate = imported.default ?? imported.pack ?? imported;\n\n if (!candidate || typeof candidate !== 'object') {\n throw new Error(`Module \"${moduleSpec}\" does not export a valid LanguagePack object`);\n }\n\n const pack = candidate as LanguagePack;\n registerLanguagePack(pack);\n return pack;\n } catch (error) {\n if (error instanceof PackLoadError) throw error;\n throw new PackLoadError(moduleSpec, error);\n }\n}\n","/**\n * Headless Parse Command Runner\n *\n * Parses Whiteboard Script source text and emits a versioned IR parse-tree envelope.\n */\n\nimport { createParser, type IScript } from '@bitcobblers/wod-wiki-lang';\nimport { createIRFile, buildStatementTree, type WodWikiIRFile, type StatementNode } from '@bitcobblers/wod-wiki-engine';\n\nexport class ParseSyntaxError extends Error {\n constructor(\n public readonly errors: Array<{ message: string; line?: number }>,\n message: string = 'Parse error in Whiteboard Script',\n ) {\n const details = errors.map((e) => e.message).join('; ');\n super(`${message}: ${details}`);\n this.name = 'ParseSyntaxError';\n }\n}\n\nexport interface ParseOptions {\n sport?: string;\n sourceLabel?: string;\n}\n\n/**\n * Parses Whiteboard Script source directly into a StatementNode IR envelope.\n */\nexport function runParse(\n source: string,\n options: ParseOptions = {},\n): WodWikiIRFile<StatementNode> {\n const parser = createParser();\n const script: IScript = parser.read(source, options.sport);\n\n if (script.errors && script.errors.length > 0) {\n throw new ParseSyntaxError(script.errors);\n }\n\n const tree = buildStatementTree(script);\n return createIRFile('parse-tree', tree, { source: options.sourceLabel ?? 'cli:wod parse' });\n}\n","/**\n * Headless Execution Command Runner\n *\n * Executes Whiteboard Script through JIT compiler and runtime state machine,\n * emitting a versioned execution-log IR envelope.\n */\n\nimport {\n createParser,\n createCompiler,\n RuntimeStack,\n createMockClock,\n EventBus,\n ScriptRuntime,\n StartSessionAction,\n NextEvent,\n createAnalyticsEngineForBlock,\n toStoredOutputStatement,\n type INowProvider,\n frozenNow,\n} from '@bitcobblers/wod-wiki-lang';\nimport type {\n StoredOutputStatement,\n WorkoutResults,\n IOutputStatement,\n} from '@bitcobblers/wod-wiki-core';\nimport { createIRFile, type WodWikiIRFile, type ExecutionLog } from '@bitcobblers/wod-wiki-engine';\nimport { ParseSyntaxError } from './parse';\n\nexport interface RunOptions {\n sport?: string;\n dialect?: 'time' | 'log';\n blockId?: string;\n blockVersion?: number;\n startTime?: number;\n maxIterations?: number;\n now?: INowProvider;\n sourceLabel?: string;\n}\n\nexport function buildWorkoutResults(\n outputs: readonly IOutputStatement[],\n options: {\n readonly startTime?: number;\n readonly elapsedTime: number;\n readonly completed: boolean;\n readonly now: INowProvider;\n },\n): WorkoutResults {\n return {\n startTime: options.startTime ?? options.now.nowMs(),\n endTime: options.now.nowMs(),\n duration: options.elapsedTime,\n completed: options.completed,\n logs: outputs.map(toStoredOutputStatement),\n };\n}\n\n/**\n * Runs a workout script to completion using headless state machine and Node clock.\n */\nexport async function runExecution(\n source: string,\n options: RunOptions = {},\n): Promise<WodWikiIRFile<ExecutionLog>> {\n const parser = createParser();\n const script = parser.read(source, options.sport);\n\n if (script.errors && script.errors.length > 0) {\n throw new ParseSyntaxError(script.errors);\n }\n\n const startTime = options.startTime ?? Date.now();\n const now = options.now ?? frozenNow(new Date(startTime));\n const compiler = createCompiler();\n const clock = createMockClock(new Date(startTime));\n const stack = new RuntimeStack();\n const eventBus = new EventBus();\n\n const runtime = new ScriptRuntime(\n script,\n compiler,\n { stack, clock, eventBus },\n {},\n now,\n );\n\n const { engine, analyticsContext } = createAnalyticsEngineForBlock({\n id: options.blockId ?? 'cli-block',\n content: source,\n statements: script.statements,\n sport: options.sport,\n version: options.blockVersion ?? 1,\n startLine: 0,\n endLine: 0,\n dialect: options.dialect ?? 'time',\n state: 'idle',\n createdAt: Date.now(),\n });\n runtime.analyticsContext = analyticsContext;\n runtime.setAnalyticsEngine(engine);\n\n const outputs: IOutputStatement[] = [];\n runtime.subscribeToOutput((out) => {\n outputs.push(out);\n });\n\n // Start the workout session\n runtime.do(new StartSessionAction());\n\n const maxSteps = options.maxIterations ?? 5000;\n let steps = 0;\n\n while (stack.count > 0 && steps < maxSteps) {\n runtime.handle(new NextEvent(undefined, runtime.nowProvider));\n clock.advance(1000);\n steps++;\n }\n\n const workoutResults = buildWorkoutResults(outputs, {\n startTime,\n elapsedTime: steps * 1000,\n completed: stack.count === 0,\n now,\n });\n\n const logs: StoredOutputStatement[] = outputs.map(toStoredOutputStatement);\n\n return createIRFile(\n 'execution-log',\n {\n results: workoutResults,\n logs,\n statements: logs,\n sourceScript: source,\n },\n { source: options.sourceLabel ?? 'cli:wod run' },\n );\n}\n","/**\n * Headless WQL Query Command Runner\n *\n * Evaluates WQL queries against in-memory stores sourced from --corpus,\n * --stdin-log, or --stdin-facts, and emits a versioned IR envelope.\n */\n\nfunction getFs() {\n if (typeof globalThis.process?.versions?.node === 'undefined' && typeof (globalThis as { Bun?: unknown }).Bun === 'undefined') {\n throw new Error('File system operations are only supported in Node / Bun environments');\n }\n // eslint-disable-next-line no-restricted-syntax -- lazy CJS require keeps node builtins out of browser bundles\n return require('fs');\n}\nimport {\n QueryService,\n parseQuery,\n isFindQuery,\n isPipelineQuery,\n type QueryServiceStores,\n type QueryResult,\n type RowsQueryResult,\n type FindQueryResult,\n type PipelineResult,\n type NoteQueryStore,\n type BlockQueryStore,\n type EffortQueryStore,\n type IEffort as WqlEffort,\n} from '@bitcobblers/wod-wiki-wql';\nimport { inMemoryEventStore, createIRFile, isIRFile, type IrKind, type WodWikiIRFile, type ExecutionLog, type CorpusIRData } from '@bitcobblers/wod-wiki-engine';\nimport { toEventRows, toSummaryEventRows } from '@bitcobblers/wod-wiki-wql';\nimport type { AnalyticsDataPoint, Note, BlockIndexRow, BlockRevision, Session, EventRecord } from '@bitcobblers/wod-wiki-core';\nimport type { WorkoutResults } from '@bitcobblers/wod-wiki-core';\nimport type { IEffort } from '@bitcobblers/wod-wiki-lang';\nimport { bundledEfforts } from '@bitcobblers/wod-wiki-lang';\nimport { validateNoteBlocks, parseDocumentSections, blockContentId } from '@bitcobblers/wod-wiki-core';\nexport class WqlSyntaxError extends Error {\n constructor(\n public readonly query: string,\n public readonly syntaxError: string,\n ) {\n super(`WQL Syntax Error in \"${query}\": ${syntaxError}`);\n this.name = 'WqlSyntaxError';\n }\n}\n\nexport interface QueryCliOptions {\n corpusPath?: string;\n stdinLog?: string;\n stdinFacts?: string;\n preferredUnit?: string;\n sourceLabel?: string;\n /** Pre-built store bundle (e.g. sqlite-backed). When set, the corpus/stdin\n * dataset options are ignored. */\n stores?: QueryServiceStores;\n}\n\ninterface LoadedData {\n eventRecords: EventRecord[];\n facts: AnalyticsDataPoint[];\n results: Session[];\n notes: Note[];\n blocks: BlockIndexRow[];\n revisions: BlockRevision[];\n efforts: IEffort[];\n noteTags: Record<string, string[]>;\n}\n\n\nfunction extractPayload(rawJson: string): unknown {\n try {\n const parsed = JSON.parse(rawJson);\n if (isIRFile(parsed)) {\n return parsed.data;\n }\n return parsed;\n } catch (err) {\n throw new Error(`Failed to parse JSON input: ${err instanceof Error ? err.message : String(err)}`, { cause: err });\n }\n}\n\nfunction buildStoresFromData(data: LoadedData) {\n // Direct events and fact-set summaries share one query stream.\n const events = [\n ...data.eventRecords,\n ...data.facts.map((f, i) => ({\n id: `fact:${f.resultId ?? 'stdin'}:${f.metricKey ?? f.type}:${i}`,\n resultId: f.resultId ?? 'stdin-result-1',\n noteId: f.noteId ?? 'stdin-note-1',\n blockContentId: f.blockContentId,\n pageId: f.pageId,\n origin: f.origin,\n timestamp: f.timestamp,\n grain: f.grain === 'event' ? 'event' : 'summary',\n outputType: 'analytics',\n effortSlug: f.effortSlug,\n metrics: [{\n type: f.metricKey ?? f.type,\n value: f.value,\n ...(f.unit ? { unit: f.unit } : {}),\n origin: 'engine',\n }],\n blockId: f.blockId,\n blockVersion: f.blockVersion,\n } as EventRecord)),\n ];\n\n const eventStore = inMemoryEventStore(events);\n\n const noteStore: NoteQueryStore = {\n getAllNotes: async () => [...data.notes],\n getNotesByIds: async (ids) => {\n const selected = new Set(ids);\n return data.notes.filter((note) => selected.has(note.id));\n },\n getNoteIdsForTag: async (tag: string) => {\n const matching = new Set<string>();\n for (const [noteId, tags] of Object.entries(data.noteTags)) {\n if (tags.includes(tag)) matching.add(noteId);\n }\n return matching;\n },\n getNoteTagLabels: async (noteId: string) => [...(data.noteTags[noteId] ?? [])],\n };\n\n const blockStore: BlockQueryStore = {\n getAllBlocks: async () => [...data.blocks],\n };\n\n const effortStore: EffortQueryStore = {\n getAllEfforts: async () => [...data.efforts] as unknown as WqlEffort[],\n };\n\n return { eventStore, noteStore, blockStore, effortStore };\n}\n\nexport function loadQueryData(options: QueryCliOptions): LoadedData {\n const data: LoadedData = {\n eventRecords: [],\n facts: [],\n results: [],\n notes: [],\n blocks: [],\n revisions: [],\n efforts: [...bundledEfforts],\n noteTags: {},\n };\n\n if (options.corpusPath) {\n const fs = getFs();\n if (!fs.existsSync(options.corpusPath)) {\n throw new Error(`Corpus file not found at path: ${options.corpusPath}`);\n }\n const raw = fs.readFileSync(options.corpusPath, 'utf-8');\n const payload = extractPayload(raw);\n\n if (Array.isArray(payload)) {\n data.facts = payload as AnalyticsDataPoint[];\n } else if (payload && typeof payload === 'object') {\n const obj = payload as Record<string, unknown>;\n if ('segments' in obj) throw new Error('Incompatible corpus segments; whole Notes and block revisions are required');\n if (obj.kind === 'event-journal' || Array.isArray(obj.records)) {\n if (Array.isArray(obj.blockRevisions)) data.revisions = obj.blockRevisions as BlockRevision[];\n if (Array.isArray(obj.sessions)) data.results = obj.sessions as Session[];\n if (Array.isArray(obj.records)) {\n data.eventRecords = obj.records as EventRecord[];\n }\n if (Array.isArray(obj.notes)) {\n data.notes = obj.notes as Note[];\n for (const n of obj.notes as Array<{ id?: string; tags?: string[] }>) {\n if (n && typeof n === 'object' && n.id && Array.isArray(n.tags)) {\n data.noteTags[n.id] = n.tags;\n }\n }\n }\n } else if (obj.facts || obj.results || obj.notes || obj.blocks || obj.efforts || obj.tags || obj.logs) {\n const corpus = payload as CorpusIRData;\n if (corpus.facts) data.facts = corpus.facts;\n if (Array.isArray(corpus.results)) data.results = corpus.results;\n if (corpus.notes) data.notes = corpus.notes;\n if (corpus.blocks) data.blocks = corpus.blocks;\n if (corpus.efforts) data.efforts = corpus.efforts;\n if (corpus.revisions) data.revisions = corpus.revisions;\n if (corpus.tags) data.noteTags = corpus.tags;\n\n if (corpus.logs) {\n const identity = {\n noteId: 'corpus-note-1', resultId: 'corpus-result-1', origin: 'journal' as const,\n workoutTimestamp: corpus.logs[0]?.timeSpan?.started ?? Date.now(),\n };\n data.eventRecords = [...toEventRows(corpus.logs, identity), ...toSummaryEventRows(corpus.logs, identity)];\n }\n } else {\n throw new Error(`Unrecognized corpus payload shape in \"${options.corpusPath}\" (expected event-journal, fact-set, or CorpusIRData)`);\n }\n }\n } else if (options.stdinLog) {\n const payload = extractPayload(options.stdinLog) as ExecutionLog | WorkoutResults;\n let executionLog: ExecutionLog;\n const rawLogs = payload.logs ?? ('statements' in payload ? payload.statements : undefined) ?? [];\n if ('results' in payload) {\n executionLog = { results: payload.results, logs: rawLogs, statements: rawLogs };\n } else {\n executionLog = { results: payload, logs: rawLogs, statements: rawLogs };\n }\n\n const identity = {\n noteId: 'stdin-note-1', resultId: 'stdin-result-1',\n origin: 'journal' as const, workoutTimestamp: executionLog.results.startTime,\n };\n data.eventRecords = [\n ...toEventRows(executionLog.logs, identity),\n ...toSummaryEventRows(executionLog.logs, identity),\n ];\n } else if (options.stdinFacts) {\n const payload = extractPayload(options.stdinFacts);\n if (Array.isArray(payload)) {\n data.facts = payload as AnalyticsDataPoint[];\n } else if (payload && typeof payload === 'object' && 'facts' in (payload as Record<string, unknown>)) {\n data.facts = (payload as { facts: AnalyticsDataPoint[] }).facts;\n }\n } else {\n throw new Error('No input dataset provided. Specify --corpus <path>, --stdin-log, or --stdin-facts.');\n }\n for (const note of data.notes) {\n if (typeof note.rawContent !== 'string' || !Number.isSafeInteger(note.sourceRevision) || note.sourceRevision < 1) {\n throw new Error('Incompatible corpus Note; exact rawContent and sourceRevision are required');\n }\n validateNoteBlocks(note.rawContent, note.blocks, note.sourceRevision);\n if (!data.blocks.some((row) => row.noteId === note.id)) {\n for (const [position, block] of Object.values(note.blocks).sort((a, b) => a.from - b.from).entries()) {\n const rawContent = note.rawContent.slice(block.from, block.to);\n const body = parseDocumentSections(rawContent)[0]?.displayContent ?? rawContent;\n data.blocks.push({\n id: `${note.id}:${block.id}`, noteId: note.id, blockId: block.id, blockVersion: block.version,\n sourceRevision: note.sourceRevision, from: block.from, to: block.to, position,\n dataType: block.kind, rawContent, noteTitle: note.title, createdAt: note.createdAt,\n ...(block.kind === 'wod' ? { blockContentId: blockContentId(body) } : {}),\n });\n }\n }\n }\n for (const session of data.results) {\n if ('segmentId' in session || 'segmentVersion' in session || 'data' in session || 'version' in session || 'rawContent' in session || !session.blockId || !Number.isSafeInteger(session.blockVersion) || session.blockVersion < 1) {\n throw new Error('Incompatible corpus Session; exact blockId/blockVersion pin required');\n }\n if (!data.revisions.some((row) => row.noteId === session.noteId && row.blockId === session.blockId && row.version === session.blockVersion && row.kind === 'wod')) {\n throw new Error('Corpus Session immutable revision is unavailable');\n }\n }\n for (const row of [...data.eventRecords, ...data.facts, ...data.blocks]) {\n if ('segmentId' in row || 'segmentVersion' in row) throw new Error('Incompatible corpus segment pin');\n }\n const revisions = new Map(data.revisions.map((row) => [JSON.stringify([row.noteId, row.blockId, row.version]), row]));\n for (const row of data.eventRecords) {\n if (row.blockId !== undefined || row.blockVersion !== undefined) {\n if (!row.blockId || !Number.isSafeInteger(row.blockVersion) || !revisions.has(JSON.stringify([row.noteId, row.blockId, row.blockVersion]))) {\n throw new Error('Corpus Event immutable revision is unavailable');\n }\n }\n }\n for (const row of data.blocks) {\n const note = data.notes.find((candidate) => candidate.id === row.noteId);\n const block = note?.blocks[row.blockId];\n if (!note || !block || row.blockVersion !== block.version || row.sourceRevision !== note.sourceRevision || row.from !== block.from || row.to !== block.to || row.dataType !== block.kind) {\n throw new Error('Corpus block projection does not match current Note source');\n }\n row.rawContent = note.rawContent.slice(block.from, block.to);\n }\n\n return data;\n}\n\n/**\n * Runs a WQL query against the provided in-memory dataset and returns a versioned IR envelope.\n */\nexport async function runQueryCli(\n wqlString: string,\n options: QueryCliOptions = {},\n): Promise<WodWikiIRFile<QueryResult | RowsQueryResult | FindQueryResult | PipelineResult>> {\n const parsed = parseQuery(wqlString);\n if (parsed.error) {\n throw new WqlSyntaxError(wqlString, parsed.error);\n }\n\n const stores = options.stores ?? buildStoresFromData(loadQueryData(options));\n // Bundle form — carries the optional blockEfforts/tags seams when provided.\n const service = new QueryService(stores);\n\n if (isPipelineQuery(parsed)) {\n const result = await service.runPipeline(wqlString, {\n preferredUnit: options.preferredUnit,\n });\n return createIRFile('pipeline-result', result, { source: options.sourceLabel ?? 'cli:wod query' });\n }\n\n if (isFindQuery(parsed)) {\n const result = await service.runFind(parsed);\n const kind: IrKind = parsed.target === 'session' ? 'rows-result' : 'find-result';\n return createIRFile(kind, result, { source: options.sourceLabel ?? 'cli:wod query' });\n }\n\n const result = await service.runQuery(wqlString, {\n preferredUnit: options.preferredUnit,\n });\n return createIRFile('query-result', result, { source: options.sourceLabel ?? 'cli:wod query' });\n}\n","/**\n * Unified `wod` CLI Runner\n *\n * Implements CLI command routing, argument parsing, pipe handling,\n * and exit code conventions per wayfinder #962 and issue #967.\n *\n * Exit Codes:\n * 0 - OK / Success (including empty query results)\n * 1 - Runtime error (file missing, bad arguments, execution error)\n * 2 - Parse / Syntax error (invalid Whiteboard Script or malformed WQL)\n * 3 - Pack load error (failed to import or register --pack)\n */\n\nfunction getFs() {\n if (typeof globalThis.process?.versions?.node === 'undefined' && typeof (globalThis as { Bun?: unknown }).Bun === 'undefined') {\n throw new Error('File system operations are only supported in Node / Bun environments');\n }\n // eslint-disable-next-line no-restricted-syntax -- lazy CJS require keeps node builtins out of browser bundles\n return require('fs');\n}\nimport { loadLanguagePack, PackLoadError } from './loader';\nimport { runParse, ParseSyntaxError } from './parse';\nimport { runExecution } from './run';\nimport { runQueryCli, WqlSyntaxError } from './query';\nimport {\n openCliDb,\n nodeFs,\n nodePath,\n sqliteEventStore,\n sqliteNoteStore,\n sqliteBlockStore,\n sqliteEffortStore,\n sqliteIndexStore,\n getNoteBundle,\n getSessionBundle,\n getEffortBySlug,\n listTagsByType,\n} from './db';\nimport { loadCliEnvironment, resolveDatabaseConfig, type CliDatabaseConfig } from './config';\n// Type-only: erased at build time, keeps the Bun-only server module out of the\n// browser/Node import graph (runCliServer itself is lazily imported).\nimport type { CliServerOptions } from './server';\nimport { persistNote, startRun, persistRun, persistSessionBundle, persistEffort, persistTypedTags } from './persist';\nimport { defaultSeedDirs, importSeedDir } from './seed';\nimport { publishCatalogSeed } from './publish';\nimport {\n composeNoteMarkdown,\n csvToEquipmentLabels,\n csvToSessionRows,\n effortToMarkdown,\n equipmentToCsv,\n extractNoteIdentity,\n extractTypedTags,\n markdownToEffort,\n sessionToCsv,\n} from '@bitcobblers/wod-wiki-engine';\nimport {\n formatParseOutput,\n formatExecutionOutput,\n formatQueryOutput,\n type OutputFormat,\n} from './formatters';\n\nimport { parseDocumentSections } from '@bitcobblers/wod-wiki-core';\nimport type { ExecutionLog, WodWikiIRFile } from '@bitcobblers/wod-wiki-engine';\nimport { VERSION } from '../version';\n\n/** Bare CLI scripts become authored Markdown at the persistence boundary. */\nexport function cliNoteSource(source: string, label: string, sport?: string): string {\n if (/\\.(?:md|markdown)$/i.test(label) || parseDocumentSections(source).some((section) => section.scriptBlock)) return source;\n let length = 3;\n for (const match of source.matchAll(/`+/g)) length = Math.max(length, match[0].length + 1);\n const fence = '`'.repeat(length);\n return `${fence}time${sport ? `:${sport}` : ''}\\n${source}\\n${fence}\\n`;\n}\n\nexport interface CliParsedArgs {\n subcommand?: 'parse' | 'run' | 'query' | 'download' | 'export' | 'import' | 'publish' | 'build' | 'seed' | 'reset' | 'init' | 'server' | 'serve' | 'playground' | 'help' | 'version';\n target?: string;\n /** Second positional: the id (download) or file (import) after the kind. */\n target2?: string;\n corpus?: string;\n stdinLog?: boolean;\n stdinFacts?: boolean;\n format: OutputFormat;\n output?: string;\n packs: string[];\n sport?: string;\n unit?: string;\n help?: boolean;\n version?: boolean;\n /** Explicit version number for published seed manifests (--seed-version). */\n seedVersion?: number;\n /** SQLite database path (--db). Defaults to WOD_WIKI_DB or ./wodwiki.db. */\n db?: string;\n /** Backend driver override (--db-driver): sqlite | postgres | turso. */\n dbDriver?: string;\n /** PostgreSQL connection URL (--database-url) or component flags below. */\n databaseUrl?: string;\n postgresHost?: string;\n postgresPort?: string;\n postgresUser?: string;\n postgresPassword?: string;\n postgresDatabase?: string;\n postgresSsl?: string;\n /** Turso/libSQL target (--turso-url) plus its auth token. */\n tursoUrl?: string;\n tursoAuthToken?: string;\n /** Explicit environment file (--env-file); a missing file is an error. */\n envFile?: string;\n /** Hosting bind address/port and prebuilt frontend directory (server/playground). */\n host?: string;\n port?: string;\n dist?: string;\n /** IR debug output: undefined = off, '' = default file name, otherwise the file name. */\n debug?: string;\n /** Extra seed source directories for `wod seed` (repeatable). */\n sources: string[];\n /** `wod build`: scaffold markdown stubs for newly discovered efforts. */\n scaffold?: boolean;\n /** `wod build`: extra template markdown file compiled as the `template` chunk. */\n template?: string;\n /** `wod build`: content repo root (alias for the positional directory). */\n dir?: string;\n}\n\n/**\n * Property flags that take a value in both `--flag value` and `--flag=value`\n * forms. Missing, empty, or flag-like (`--…`) values are parse errors.\n */\n/** The CliParsedArgs properties settable through VALUE_FLAGS — all `string | undefined`. */\ntype CliValueFlagArgs = Pick<\n CliParsedArgs,\n | 'db'\n | 'dbDriver'\n | 'databaseUrl'\n | 'postgresHost'\n | 'postgresPort'\n | 'postgresUser'\n | 'postgresPassword'\n | 'postgresDatabase'\n | 'postgresSsl'\n | 'tursoUrl'\n | 'tursoAuthToken'\n | 'envFile'\n | 'host'\n | 'port'\n | 'dist'\n>;\n\nconst VALUE_FLAGS: ReadonlyArray<readonly [flag: string, key: keyof CliValueFlagArgs]> = [\n ['--db', 'db'],\n ['--db-driver', 'dbDriver'],\n ['--database-url', 'databaseUrl'],\n ['--postgres-host', 'postgresHost'],\n ['--postgres-port', 'postgresPort'],\n ['--postgres-user', 'postgresUser'],\n ['--postgres-password', 'postgresPassword'],\n ['--postgres-database', 'postgresDatabase'],\n ['--postgres-ssl', 'postgresSsl'],\n ['--turso-url', 'tursoUrl'],\n ['--turso-auth-token', 'tursoAuthToken'],\n ['--env-file', 'envFile'],\n ['--host', 'host'],\n ['--port', 'port'],\n ['--dist', 'dist'],\n];\n\nfunction readValueFlag(args: string[], i: number, flag: string): { value: string; next: number } {\n const inline = args[i].startsWith(`${flag}=`);\n if (inline) {\n const value = args[i].slice(flag.length + 1);\n if (!value) throw new Error(`Missing value for ${flag}`);\n return { value, next: i + 1 };\n }\n const value = args[i + 1];\n if (value === undefined || value === '' || value.startsWith('--')) throw new Error(`Missing value for ${flag}`);\n return { value, next: i + 2 };\n}\n\nexport function parseCliArgs(args: string[]): CliParsedArgs {\n const result: CliParsedArgs = {\n format: 'json',\n packs: [],\n sources: [],\n };\n const valueArgs: CliValueFlagArgs = result;\n\n let i = 0;\n while (i < args.length) {\n const arg = args[i];\n if (arg === '--at' || arg.startsWith('--at=')) throw new Error('Unknown option --at; whole Note exports have no as-of version');\n\n const valueFlag = VALUE_FLAGS.find(([flag]) => arg === flag || arg.startsWith(`${flag}=`));\n if (valueFlag) {\n const [flag, key] = valueFlag;\n const { value, next } = readValueFlag(args, i, flag);\n valueArgs[key] = value;\n i = next;\n continue;\n }\n\n if (arg === '--help' || arg === '-h') {\n result.help = true;\n i++;\n } else if (arg === '--version' || arg === '-v') {\n result.version = true;\n i++;\n } else if (arg === '--corpus' || arg === '-c') {\n result.corpus = args[++i];\n i++;\n } else if (arg === '--stdin-log') {\n result.stdinLog = true;\n i++;\n } else if (arg === '--stdin-facts') {\n result.stdinFacts = true;\n i++;\n } else if (arg === '--format') {\n const fmt = args[++i] as OutputFormat;\n if (fmt === 'json' || fmt === 'table' || fmt === 'csv') {\n result.format = fmt;\n }\n i++;\n } else if (arg.startsWith('--format=')) {\n const fmt = arg.slice('--format='.length) as OutputFormat;\n if (fmt === 'json' || fmt === 'table' || fmt === 'csv') {\n result.format = fmt;\n }\n i++;\n } else if (arg === '-o' || arg === '--output') {\n result.output = args[++i];\n i++;\n } else if (arg.startsWith('--output=')) {\n result.output = arg.slice('--output='.length);\n i++;\n } else if (arg === '--pack') {\n const packSpec = args[++i];\n if (packSpec) result.packs.push(packSpec);\n i++;\n } else if (arg.startsWith('--pack=')) {\n result.packs.push(arg.slice('--pack='.length));\n i++;\n } else if (arg === '--sport') {\n result.sport = args[++i];\n i++;\n } else if (arg === '--unit') {\n result.unit = args[++i];\n i++;\n } else if (arg === '--debug') {\n // Bare flag never consumes the next arg — use --debug=<name> for a custom file.\n result.debug = '';\n i++;\n } else if (arg.startsWith('--debug=')) {\n result.debug = arg.slice('--debug='.length);\n i++;\n } else if (arg === '--source') {\n const source = args[++i];\n if (source) result.sources.push(source);\n i++;\n } else if (arg.startsWith('--source=')) {\n result.sources.push(arg.slice('--source='.length));\n i++;\n } else if (arg === '--scaffold') {\n result.scaffold = true;\n i++;\n } else if (arg === '--template') {\n result.template = args[++i];\n i++;\n } else if (arg.startsWith('--template=')) {\n result.template = arg.slice('--template='.length);\n i++;\n } else if (arg === '--out') {\n result.output = args[++i];\n i++;\n } else if (arg.startsWith('--out=')) {\n result.output = arg.slice('--out='.length);\n i++;\n } else if (arg === '--dir') {\n result.dir = args[++i];\n i++;\n } else if (arg.startsWith('--dir=')) {\n result.dir = arg.slice('--dir='.length);\n } else if (arg === '--seed-version') {\n const v = Number(args[++i]);\n if (Number.isSafeInteger(v) && v >= 0) result.seedVersion = v;\n i++;\n } else if (arg.startsWith('--seed-version=')) {\n const v = Number(arg.slice('--seed-version='.length));\n if (Number.isSafeInteger(v) && v >= 0) result.seedVersion = v;\n i++;\n } else if (!result.subcommand) {\n if (arg === 'parse' || arg === 'run' || arg === 'query' || arg === 'download' || arg === 'export' || arg === 'import' || arg === 'publish' || arg === 'build' || arg === 'seed' || arg === 'reset' || arg === 'init' || arg === 'server' || arg === 'serve' || arg === 'playground' || arg === 'help' || arg === 'version') {\n result.subcommand = arg;\n } else {\n result.target = arg;\n }\n i++;\n } else if (!result.target) {\n result.target = arg;\n i++;\n } else if (!result.target2) {\n result.target2 = arg;\n i++;\n } else {\n i++;\n }\n }\n\n for (const [flag, value] of [['--port', result.port], ['--postgres-port', result.postgresPort]] as const) {\n if (value !== undefined && (!/^\\d+$/.test(value) || Number(value) < 1 || Number(value) > 65535)) {\n throw new Error(`Invalid value for ${flag}: \"${value}\" is not a TCP port (1-65535)`);\n }\n }\n\n return result;\n}\n\n/**\n * Recover the Bun `Bun.stdin.text()` reader when running under Bun. The Bun\n * global is not part of the ambient lib shape; `in`/`typeof` narrowing proves\n * the access chain at runtime before the single unchecked cast.\n */\nfunction readBunStdinText(): (() => Promise<string>) | undefined {\n const g: unknown = globalThis;\n if (g && typeof g === 'object' && 'Bun' in g) {\n const bun = g.Bun;\n if (bun && typeof bun === 'object' && 'stdin' in bun) {\n const stdin = bun.stdin;\n if (stdin && typeof stdin === 'object' && 'text' in stdin) {\n const text = stdin.text;\n if (typeof text === 'function') return text as () => Promise<string>;\n }\n }\n }\n return undefined;\n}\n\nexport async function readStdin(): Promise<string> {\n const bunText = readBunStdinText();\n if (bunText) return bunText();\n return new Promise<string>((resolve, reject) => {\n const chunks: Buffer[] = [];\n process.stdin.on('data', (chunk) => {\n chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);\n });\n process.stdin.on('end', () => {\n resolve(Buffer.concat(chunks).toString('utf-8'));\n });\n process.stdin.on('error', (err) => {\n reject(err);\n });\n });\n}\n\nfunction getUsageText(): string {\n return `\nwod CLI — Headless Whiteboard Language & WQL Engine runner (v${VERSION})\n\nUSAGE:\n wod parse <file | -> [options]\n wod run <file | -> [options]\n wod query '<wql-string>' [options]\n wod export <note|playground|session|effort|equipment> <id> [options]\n wod download <note|playground|session|effort|equipment> <id> [options]\n wod import <note|playground|session|effort|equipment> <file> [options]\n wod publish [catalog] [options]\n wod build [dir] [options]\n wod seed [options]\n wod reset [options]\n wod init Initialize the configured database (idempotent)\n wod server [options]\n Serve the app (HTTP API + packaged frontend; alias: serve)\n wod playground [options]\n Serve the local playground (browser IndexedDB build)\n\nSUBCOMMANDS:\n parse <file | -> Parse Whiteboard Script, create a note in the database\n (whole source + saved revisions + sparse block index), optionally emit parse-tree IR.\n Markdown carrying a 'wod-note-id' frontmatter stamp\n (see download) imports back into that same note.\n run <file | -> Execute the script state machine, record a session +\n event/summary rows in the database, optionally emit\n execution-log IR\n query '<wql>' Evaluate WQL against the database (or an explicit\n dataset) and emit QueryResult / RowsQueryResult IR\n export note <id> Export the note's authored markdown to <id>.md.\n (alias: export playground, download note).\n The frontmatter identity stamp allows re-import.\n Frontmatter tags (general + typed equipment/quality/…)\n are materialized into the tag graph on parse/import.\n export session <id>\n Write the session's generated metrics (event + summary\n rows, one CSV row per metric) to <id>.csv. Import back\n with 'wod import session'. (alias: download session).\n export effort <slug>\n Write the effort registry row as corpus-style markdown\n to <slug>.md. Import back with 'wod import effort'.\n export equipment Write every equipment tag as a one-column CSV to\n equipment.csv. Import back with 'wod import equipment'.\n download … Accepted alias for 'wod export'.\n import note <file> Re-import exported note markdown (alias: import playground;\n same as parse with the stamped identity).\n import session <file>\n Import a session + its events from a downloaded CSV.\n The exact saved block revision must already exist.\n import effort <file>\n Upsert an effort registry row from corpus-style markdown.\n import equipment <file>\n Create/upgrade equipment tags (CSV, one label per row).\n publish [catalog] Publish catalog notes from the database into a configured\n seed directory (manifest.json, chunks/, report.html)\n compatible with 'wod seed --source <dir>'. Override target\n with -o/--out/--output (defaults to ./dist/seed/<catalog>).\n build [dir] Compile a seed corpus: validate every .md under\n <dir>/markdown (parity gate + dashboard format gate) and\n write manifest.json + content-hashed chunks/ +\n report.html to <dir>/dist with source/maps/projections bundled\n (override with -o/--output). Version stamps derive from\n <dir>'s git history (full checkout required).\n\nBUILD OPTIONS (for 'build'):\n --scaffold Also scaffold markdown/efforts/discovered/*.md stubs for\n workout effort labels missing from the registry.\n --template <file> Compile an extra markdown file as the 'template' chunk\n (the host's playground intake template).\n\nINPUT SOURCING (for 'query'; without these, the database is queried):\n -c, --corpus <path> Load historical corpus dataset from a versioned JSON file\n --stdin-log Read kind: 'execution-log' JSON payload from stdin\n --stdin-facts Read raw kind: 'fact-set' JSON payload from stdin\n\nDATABASE (init / parse / run / query / download / import / seed / reset / server):\n Pick one backend; explicit flags win over the process environment, the\n process environment wins over .env files. Run 'wod init' once first: it\n creates the SQLite file + schema, creates the PostgreSQL database when\n your role is authorized to (otherwise use an existing/provisioned one),\n or installs the schema in your provisioned Turso database — idempotently,\n preserving existing notes. 'wod server' refuses an uninitialized database.\n --db <path> Local SQLite database file (default: $WOD_WIKI_DB\n or ./wodwiki.db). Passing --db always selects SQLite,\n even when the environment names a remote backend.\n Created on demand by parse/run/seed.\n --db-driver <name> Backend driver: sqlite (default), postgres, or\n turso ($DB_DRIVER)\n --database-url <url> Database connection URL ($DATABASE_URL); accepts\n PostgreSQL, local SQLite, and remote libSQL URLs.\n --postgres-host <host> PostgreSQL host ($POSTGRES_HOST)\n --postgres-port <port> PostgreSQL port ($POSTGRES_PORT)\n --postgres-user <user> PostgreSQL user ($POSTGRES_USER)\n --postgres-password <pw> PostgreSQL password ($POSTGRES_PASSWORD)\n --postgres-database <db> PostgreSQL database name ($POSTGRES_DATABASE)\n --postgres-ssl <mode> PostgreSQL SSL mode, e.g. disable/prefer/require\n ($POSTGRES_SSL)\n --turso-url <url> Turso/libSQL database URL (libsql://…). The\n hosted database must already exist (provisioned on\n Turso); only its schema is installed.\n --turso-auth-token <token> Turso authentication token (never printed)\n --env-file <path> Load variables from this file; a missing file is\n an error. Without it: ./.env when present, otherwise\n the workspace-root .env. Credentials are never logged.\n\nHOSTING (for 'server' / 'playground'; supported on Node and Bun):\n server HTTP API over the configured database plus the frontend\n packaged inside the tools module. Requires an\n initialized database. ('serve' is an accepted alias.)\n playground Serves the playground app backed by browser IndexedDB;\n the configured database is not touched.\n --host <host> Bind address (default 127.0.0.1, $HOST)\n --port <port> TCP port (default 3000, $PORT)\n --dist <dir> Serve this prebuilt frontend directory instead of the\n packaged one ($PLAYGROUND_DIST); must already contain\n index.html.\n\nSEED SOURCING (for 'seed'):\n --source <dir> Extra compiled seed directory (manifest.json + chunks);\n repeatable. Defaults to the bundled core + community\n artifacts under apps/playground/public/seed.\n\nOPTIONS:\n --format <fmt> Output format: json (default), table, csv\n -o, --output <path> Write the IR payload (or download) to a path instead of\n the default; '-' writes to stdout\n --debug[=name] Also write the IR payload to <name> (default\n wod-<subcommand>-debug.json); without it, parse/run\n print a one-line summary of what was persisted\n --pack <module> Dynamically load and register a Language Pack (repeatable)\n --sport <sport> Target sport fence dialect (e.g. climbing, crossfit)\n --unit <unit> Preferred display unit for queries (e.g. lb, kg)\n -h, --help Show help message\n -v, --version Show version number\n\nENVIRONMENT (flags > process env > .env):\n WOD_WIKI_DB, SQLITE_PATH SQLite file path\n DB_DRIVER sqlite | postgres | turso\n DATABASE_URL PostgreSQL connection URL\n POSTGRES_HOST, POSTGRES_PORT, POSTGRES_USER,\n POSTGRES_PASSWORD, POSTGRES_DATABASE, POSTGRES_SSL\n TURSO_DATABASE_URL, TURSO_AUTH_TOKEN, LIBSQL_AUTH_TOKEN\n HOST, PORT, PLAYGROUND_DIST server / playground defaults\n\nEXIT CODES:\n 0 - OK / Success\n 1 - General / Runtime error\n 2 - Parse / Syntax error\n 3 - Language Pack load error\n`;\n}\n\nfunction printUsage(writer?: (text: string) => void): void {\n const text = getUsageText();\n if (writer) {\n writer(text);\n } else {\n // CLI stdout output channel (not a debugging statement).\n process.stdout.write(text.endsWith('\\n') ? text : text + '\\n');\n }\n}\n\n/**\n * Main CLI entry point. Returns numeric exit code.\n */\nexport async function cliMain(\n argv: string[] = process.argv.slice(2),\n io: {\n stdout?: (text: string) => void;\n stderr?: (text: string) => void;\n readStdinFn?: () => Promise<string>;\n } = {},\n): Promise<number> {\n const writeOut = io.stdout ?? ((t: string) => process.stdout.write(t + '\\n'));\n const writeErr = io.stderr ?? ((t: string) => process.stderr.write(t + '\\n'));\n const getStdin = io.readStdinFn ?? readStdin;\n\n // Lazy environment/config: .env parsing and backend resolution run only for\n // database-backed commands and hosting — never for --corpus/--stdin dataset\n // queries, build, or playground, so a malformed remote config cannot break them.\n // loadCliEnvironment returns file values only; process env must overlay them\n // (bun --no-env-file keeps .env loading solely in this loader).\n let envLoaded: Record<string, string | undefined> | undefined;\n const cliEnv = () => (envLoaded ??= { ...loadCliEnvironment(parsed.envFile), ...process.env });\n let dbResolved: CliDatabaseConfig | undefined;\n const cliDb = () => (dbResolved ??= resolveDatabaseConfig(parsed, cliEnv()));\n\n let parsed: CliParsedArgs;\n try {\n parsed = parseCliArgs(argv);\n } catch (error) {\n writeErr(error instanceof Error ? error.message : String(error));\n return 1;\n }\n\n if (parsed.version || parsed.subcommand === 'version') {\n writeOut(`wod v${VERSION}`);\n return 0;\n }\n\n if (parsed.help || parsed.subcommand === 'help') {\n printUsage(writeOut);\n return 0;\n }\n\n if (!parsed.subcommand) {\n printUsage(writeErr);\n return 1;\n }\n // 1. Load any requested Language Packs (Exit code 3 on failure)\n for (const packSpec of parsed.packs) {\n try {\n await loadLanguagePack(packSpec);\n } catch (err) {\n if (err instanceof PackLoadError) {\n writeErr(err.message);\n } else {\n writeErr(`[wod] Language pack load error: ${err instanceof Error ? err.message : String(err)}`);\n }\n return 3;\n }\n }\n\n // Output destination helper\n const deliverOutput = (formattedText: string) => {\n if (parsed.output && parsed.output !== '-') {\n getFs().writeFileSync(parsed.output, formattedText, 'utf-8');\n } else {\n writeOut(formattedText);\n }\n };\n\n // --debug[=name]: undefined = off, '' = default file name, else custom name.\n const debugTarget = (subcommand: string): string | undefined =>\n parsed.debug === undefined ? undefined : parsed.debug || `wod-${subcommand}-debug.json`;\n\n const writeDebugFile = (subcommand: string, ir: unknown) => {\n const target = debugTarget(subcommand);\n if (target !== undefined) {\n getFs().writeFileSync(target, JSON.stringify(ir, null, 2) + '\\n', 'utf-8');\n }\n };\n\n // 2. Dispatch subcommands\n try {\n if (parsed.subcommand === 'parse') {\n if (!parsed.target) {\n writeErr('[wod parse] Error: Missing input file or \"-\" for stdin');\n return 1;\n }\n\n let source: string;\n if (parsed.target === '-') {\n source = await getStdin();\n } else {\n const fs = getFs();\n if (!fs.existsSync(parsed.target)) {\n writeErr(`[wod parse] File not found: ${parsed.target}`);\n return 1;\n }\n source = fs.readFileSync(parsed.target, 'utf-8');\n }\n\n const noteSource = cliNoteSource(source, parsed.target, parsed.sport);\n const ir = runParse(source, { sport: parsed.sport, sourceLabel: `cli:wod parse ${parsed.target}` });\n const identity = extractNoteIdentity(source);\n const tags = extractTypedTags(source);\n const db = await openCliDb(cliDb());\n try {\n const persisted = await persistNote(db, {\n source: noteSource,\n sourceLabel: parsed.target,\n noteId: identity?.noteId,\n title: identity?.title,\n tags,\n });\n writeOut(\n `[wod parse] note ${persisted.noteId}${persisted.created ? '' : ' (updated)'}` +\n ` — ${persisted.blocks} blocks, ${persisted.efforts} efforts` +\n `${persisted.tags > 0 ? `, ${persisted.tags} tags` : ''} → ${db.path}`,\n );\n } finally {\n await db.close();\n }\n if (parsed.output) {\n const pretty = Boolean(process.stdout.isTTY);\n deliverOutput(formatParseOutput(ir, parsed.format, pretty));\n }\n writeDebugFile('parse', ir);\n return 0;\n }\n\n if (parsed.subcommand === 'run') {\n if (!parsed.target) {\n writeErr('[wod run] Error: Missing input file or \"-\" for stdin');\n return 1;\n }\n\n let source: string;\n if (parsed.target === '-') {\n source = await getStdin();\n } else {\n const fs = getFs();\n if (!fs.existsSync(parsed.target)) {\n writeErr(`[wod run] File not found: ${parsed.target}`);\n return 1;\n }\n source = fs.readFileSync(parsed.target, 'utf-8');\n }\n\n const identity = extractNoteIdentity(source);\n const db = await openCliDb(cliDb());\n let ir: WodWikiIRFile<ExecutionLog>;\n try {\n const started = await startRun(db, {\n source: cliNoteSource(source, parsed.target, parsed.sport),\n sourceLabel: parsed.target,\n noteId: identity?.noteId,\n title: identity?.title,\n tags: extractTypedTags(source),\n });\n const section = parseDocumentSections(started.revision.rawContent).find((row) => row.scriptBlock);\n if (!section?.scriptBlock) throw new Error('[wod run] Captured workout source cannot be parsed');\n const bare = !/\\.(?:md|markdown)$/i.test(parsed.target) && !parseDocumentSections(source).some((row) => row.scriptBlock);\n const frozenBody = bare ? section.scriptBlock.content.slice(0, -1) : section.scriptBlock.content;\n ir = await runExecution(frozenBody, {\n sport: started.revision.sport,\n dialect: started.revision.dialect,\n blockId: started.session.blockId,\n blockVersion: started.session.blockVersion,\n startTime: started.session.startTime,\n sourceLabel: `cli:wod run ${parsed.target}`,\n });\n const persisted = await persistRun(db, started, ir.data);\n writeOut(\n `[wod run] session ${persisted.resultId} — ${persisted.events} events, ` +\n `${persisted.summaries} summaries on note ${persisted.noteId} → ${db.path}`,\n );\n } finally {\n await db.close();\n }\n if (parsed.output) {\n const pretty = Boolean(process.stdout.isTTY);\n deliverOutput(formatExecutionOutput(ir, parsed.format, pretty));\n }\n writeDebugFile('run', ir);\n return 0;\n }\n\n if (parsed.subcommand === 'query') {\n if (!parsed.target) {\n writeErr('[wod query] Error: Missing WQL query argument');\n return 1;\n }\n\n const useDb = !parsed.corpus && !parsed.stdinLog && !parsed.stdinFacts;\n let stdinLogContent: string | undefined;\n let stdinFactsContent: string | undefined;\n\n if (parsed.stdinLog) {\n stdinLogContent = await getStdin();\n } else if (parsed.stdinFacts) {\n stdinFactsContent = await getStdin();\n }\n\n let ir;\n if (useDb) {\n const config = cliDb();\n if (config.kind === 'sqlite' && !nodeFs().existsSync(config.path)) {\n writeErr(\n `[wod query] No input dataset and no database at ${config.path}. ` +\n 'Specify --corpus <file>, --stdin-log, --stdin-facts, or run `wod seed` first.',\n );\n return 1;\n }\n const db = await openCliDb(config, config.kind === 'sqlite' ? undefined : { initialize: false });\n try {\n ir = await runQueryCli(parsed.target, {\n preferredUnit: parsed.unit,\n sourceLabel: `cli:wod query \"${parsed.target}\"`,\n stores: {\n eventStore: sqliteEventStore(db.db),\n noteStore: sqliteNoteStore(db.db),\n blockStore: sqliteBlockStore(db.db),\n effortStore: sqliteEffortStore(db.db),\n blockEffortsStore: sqliteIndexStore(db.db, 'block_efforts'),\n tagsStore: sqliteIndexStore(db.db, 'tags'),\n noteTagsStore: sqliteIndexStore(db.db, 'note_tags'),\n },\n });\n } finally {\n await db.close();\n }\n } else {\n if (!parsed.corpus && !stdinLogContent && !stdinFactsContent) {\n writeErr('[wod query] Error: Query requires input data. Specify --corpus <file>, --stdin-log, or --stdin-facts.');\n return 1;\n }\n ir = await runQueryCli(parsed.target, {\n corpusPath: parsed.corpus,\n stdinLog: stdinLogContent,\n stdinFacts: stdinFactsContent,\n preferredUnit: parsed.unit,\n sourceLabel: `cli:wod query \"${parsed.target}\"`,\n });\n }\n\n const pretty = !parsed.output && Boolean(process.stdout.isTTY);\n const formatted = formatQueryOutput(ir, parsed.format, pretty);\n deliverOutput(formatted);\n writeDebugFile('query', ir);\n return 0;\n }\n\n if (parsed.subcommand === 'download' || parsed.subcommand === 'export') {\n const verb = parsed.subcommand;\n const kind = parsed.target;\n const id = parsed.target2;\n const DOWNLOAD_KINDS = ['note', 'playground', 'session', 'effort', 'equipment'];\n if ((!id && kind !== 'equipment') || !DOWNLOAD_KINDS.includes(kind ?? '')) {\n writeErr(`[wod ${verb}] Usage: wod ${verb} <note|playground|session|effort|equipment> <id> [-o <path>]`);\n return 1;\n }\n const targetId = id as string;\n const db = await openCliDb(cliDb());\n try {\n if (kind === 'note' || kind === 'playground') {\n const bundle = await getNoteBundle(db.db, targetId);\n if (!bundle.note) {\n writeErr(`[wod ${verb}] Note not found in ${db.path}: ${id}`);\n return 1;\n }\n const markdown = composeNoteMarkdown(bundle.note);\n const target = parsed.output && parsed.output !== '-' ? parsed.output : `${id}.md`;\n if (parsed.output === '-') {\n writeOut(markdown);\n } else {\n nodeFs().writeFileSync(target, markdown, 'utf-8');\n }\n if (parsed.output !== '-') writeOut(`[wod ${verb}] ${kind} ${id} → ${target}`);\n } else if (kind === 'session') {\n const bundle = await getSessionBundle(db.db, targetId);\n if (!bundle) {\n writeErr(`[wod ${verb}] Session not found in ${db.path}: ${id}`);\n return 1;\n }\n const csv = sessionToCsv(bundle.session, bundle.events);\n const target = parsed.output && parsed.output !== '-' ? parsed.output : `${id}.csv`;\n if (parsed.output === '-') {\n writeOut(csv);\n } else {\n nodeFs().writeFileSync(target, csv, 'utf-8');\n }\n if (parsed.output !== '-') writeOut(`[wod ${verb}] session ${id} → ${target} (${bundle.events.length} events)`);\n } else if (kind === 'effort') {\n const effort = await getEffortBySlug(db.db, targetId);\n if (!effort) {\n writeErr(`[wod ${verb}] Effort not found in ${db.path}: ${id}`);\n return 1;\n }\n const markdown = effortToMarkdown(effort as Parameters<typeof effortToMarkdown>[0]);\n const target = parsed.output && parsed.output !== '-' ? parsed.output : `${id}.md`;\n if (parsed.output === '-') {\n writeOut(markdown);\n } else {\n nodeFs().writeFileSync(target, markdown, 'utf-8');\n }\n writeOut(`[wod ${verb}] effort ${id} → ${target}`);\n } else {\n // equipment — id is unused; export the whole catalog.\n const labels = (await listTagsByType(db.db, 'equipment')).map((t) => t.label).sort();\n const csv = equipmentToCsv(labels);\n const target = parsed.output && parsed.output !== '-' ? parsed.output : 'equipment.csv';\n if (parsed.output === '-') {\n writeOut(csv);\n } else {\n nodeFs().writeFileSync(target, csv, 'utf-8');\n }\n writeOut(`[wod ${verb}] equipment → ${target} (${labels.length} labels)`);\n }\n } finally {\n await db.close();\n }\n return 0;\n }\n\n if (parsed.subcommand === 'import') {\n const kind = parsed.target;\n const file = parsed.target2;\n const IMPORT_KINDS = ['note', 'playground', 'session', 'effort', 'equipment'];\n if (!file || !IMPORT_KINDS.includes(kind ?? '')) {\n writeErr('[wod import] Usage: wod import <note|playground|session|effort|equipment> <file>');\n return 1;\n }\n const fs = nodeFs();\n if (!fs.existsSync(file)) {\n writeErr(`[wod import] File not found: ${file}`);\n return 1;\n }\n if (kind === 'note' || kind === 'playground') {\n const source = fs.readFileSync(file, 'utf-8');\n const identity = extractNoteIdentity(source);\n const tags = extractTypedTags(source);\n const db = await openCliDb(cliDb());\n try {\n const persisted = await persistNote(db, {\n source,\n sourceLabel: file,\n noteId: identity?.noteId,\n title: identity?.title,\n tags,\n });\n writeOut(\n `[wod import] ${kind} ${persisted.noteId}${persisted.created ? '' : ' (updated)'}` +\n ` — ${persisted.blocks} blocks${persisted.tags > 0 ? `, ${persisted.tags} tags` : ''} → ${db.path}`,\n );\n } finally {\n await db.close();\n }\n return 0;\n }\n if (kind === 'effort') {\n const effort = markdownToEffort(fs.readFileSync(file, 'utf-8'));\n if (!effort) {\n writeErr(`[wod import] Unparseable effort file (need frontmatter id/slug/label + numeric baseAttributes.met): ${file}`);\n return 1;\n }\n const db = await openCliDb(cliDb());\n try {\n await persistEffort(db, { ...effort, registrySource: 'user' });\n writeOut(`[wod import] effort ${effort.slug} — ${effort.label} → ${db.path}`);\n } finally {\n await db.close();\n }\n return 0;\n }\n if (kind === 'equipment') {\n const labels = csvToEquipmentLabels(fs.readFileSync(file, 'utf-8'));\n if (labels.length === 0) {\n writeErr(`[wod import] No equipment labels found in ${file}`);\n return 1;\n }\n const db = await openCliDb(cliDb());\n try {\n const added = await persistTypedTags(db, labels, 'equipment');\n writeOut(`[wod import] equipment — ${labels.length} labels (${added} new) → ${db.path}`);\n } finally {\n await db.close();\n }\n return 0;\n }\n const { session, events } = csvToSessionRows(fs.readFileSync(file, 'utf-8'));\n const db = await openCliDb(cliDb());\n try {\n const result = await persistSessionBundle(db, session, events);\n writeOut(\n `[wod import] session ${session.id} — ${result.events} events → ${db.path}`,\n );\n } finally {\n await db.close();\n }\n return 0;\n }\n\n if (parsed.subcommand === 'publish') {\n const isDir = (s?: string) => Boolean(s && (s.startsWith('.') || s.startsWith('/') || s.includes('/') || s.includes('\\\\')));\n const catalog = isDir(parsed.target) ? undefined : parsed.target;\n const targetDir = isDir(parsed.target) ? parsed.target : parsed.target2;\n const outDir = parsed.output ?? targetDir ?? (catalog ? `./dist/seed/${catalog}` : './dist/seed');\n\n const db = await openCliDb(cliDb());\n try {\n const result = await publishCatalogSeed(db, {\n catalog,\n outDir,\n version: parsed.seedVersion,\n });\n writeOut(\n `[wod publish] published ${result.catalogs.join(', ')} (${result.totalNotes} notes) ` +\n `→ ${result.outDir} (manifest schema v${result.manifest.schema}, version ${result.manifest.version})`,\n );\n } finally {\n await db.close();\n }\n return 0;\n }\n\n if (parsed.subcommand === 'build') {\n const cwd = process.cwd();\n const root = nodePath().resolve(cwd, parsed.dir ?? parsed.target ?? '.');\n if (!nodeFs().existsSync(nodePath().resolve(root, 'markdown'))) {\n writeErr(`[wod build] No markdown/ corpus under ${root} — run from the content repo root (or pass its directory).`);\n return 1;\n }\n // Browser-boundary: dynamic import keeps node:crypto and child_process out of the browser graph.\n const { generateSeed } = await import('../seedbuild/compiler');\n try {\n const result = generateSeed({\n corpusRoot: root,\n ...(parsed.output ? { outDir: nodePath().resolve(cwd, parsed.output) } : {}),\n ...(parsed.template ? { templateFile: nodePath().resolve(cwd, parsed.template) } : {}),\n scaffoldDiscoveredEfforts: parsed.scaffold === true,\n });\n const kb = (n: number): string => `${(n / 1024).toFixed(0)} KB`;\n const totalBytes = result.manifest.chunks.reduce((s, c) => s + c.bytes, 0);\n writeOut(`[wod build] schema v${result.manifest.schema} version ${result.manifest.version} (${result.manifest.versionLabel}) → ${result.outDir}`);\n for (const c of result.manifest.chunks) {\n writeOut(` ${c.id.padEnd(48)} ${String(c.count).padStart(4)} files ${kb(c.bytes).padStart(8)}`);\n }\n writeOut(`[wod build] ${result.manifest.chunks.length} chunks, ${result.totalFiles} files, ${kb(totalBytes)} total — scan ${result.passMs.scan}ms, block-index ${result.passMs.blockIndex}ms, block-efforts ${result.passMs.blockEfforts}ms, write ${result.passMs.write}ms`);\n return 0;\n } catch (error) {\n writeErr(`[wod build] ${(error as Error).message}`);\n return 1;\n }\n }\n\n if (parsed.subcommand === 'seed') {\n const dirs = parsed.sources.length > 0\n ? parsed.sources.map((s) => nodePath().resolve(process.cwd(), s))\n : defaultSeedDirs(process.cwd());\n if (dirs.length === 0) {\n writeErr(\n '[wod seed] No seed sources found. Run `bun scripts/sync-seed.ts` to build the bundled ' +\n 'artifacts, or pass --source <dir> pointing at a compiled seed directory (manifest.json + chunks).',\n );\n return 1;\n }\n const db = await openCliDb(cliDb());\n try {\n for (const dir of dirs) {\n const summary = await importSeedDir(db, dir, '');\n writeOut(\n `[wod seed] ${summary.sourceId}: v${summary.version} — ${summary.notes} notes, ` +\n `${summary.efforts} efforts, ${summary.blocks} blocks, ${summary.blockEfforts} block-efforts ` +\n `(${summary.deleted} deleted, ${summary.skippedUserOwned} user-owned skipped) → ${db.path}`,\n );\n }\n } finally {\n await db.close();\n }\n return 0;\n }\n\n if (parsed.subcommand === 'reset') {\n const config = cliDb();\n if (config.kind !== 'sqlite') {\n // Never unlink a remote backend; the message names only the driver\n // kind so URLs/tokens can never leak through reset output.\n writeErr(\n `[wod reset] refusing to reset the configured ${config.kind} database — ` +\n 'reset only removes a local SQLite file. Clear remote databases through their provider.',\n );\n return 1;\n }\n const target = config.path;\n if (nodeFs().existsSync(target)) {\n nodeFs().unlinkSync(target);\n writeOut(`[wod reset] removed ${target}`);\n } else {\n writeOut(`[wod reset] nothing to reset — ${target} does not exist`);\n }\n return 0;\n }\n\n if (parsed.subcommand === 'init') {\n // Idempotent: opens and initializes the chosen backend. SQLite gets the\n // file + schema; PostgreSQL may create the target database when the\n // role authorizes it; Turso gets schema installed in the provisioned DB.\n const db = await openCliDb(cliDb(), { create: true });\n try {\n writeOut(`[wod init] database ready at ${db.path}`);\n } finally {\n await db.close();\n }\n return 0;\n }\n\n if (parsed.subcommand === 'server' || parsed.subcommand === 'serve' || parsed.subcommand === 'playground') {\n // 'server' is canonical; 'serve' is an accepted alias for the same branch.\n const mode = parsed.subcommand === 'playground' ? 'playground' as const : 'server' as const;\n // Lazy import: Bun-only server module must stay out of Node/browser graphs.\n const { runCliServer } = await import('./server');\n const options: CliServerOptions = { env: cliEnv() };\n if (mode === 'server') options.database = cliDb();\n if (parsed.host !== undefined) options.host = parsed.host;\n if (parsed.port !== undefined) options.port = parsed.port;\n if (parsed.dist !== undefined) options.dist = parsed.dist;\n await runCliServer(mode, options, writeOut);\n return 0;\n }\n\n writeErr(`[wod] Unknown subcommand \"${parsed.subcommand}\"`);\n return 1;\n } catch (error) {\n if (error instanceof ParseSyntaxError || error instanceof WqlSyntaxError) {\n writeErr(error.message);\n return 2;\n }\n if (error instanceof PackLoadError) {\n writeErr(error.message);\n return 3;\n }\n writeErr(`[wod] Error: ${error instanceof Error ? error.message : String(error)}`);\n return 1;\n }\n}\n","/**\n * Database configuration for the `wod` CLI (and the dev server): explicit\n * per-property flags → process env → .env file (native node:util.parseEnv,\n * non-mutating).\n *\n * Precedence: flags beat env beats .env. `--db` selects local SQLite even\n * when env configures a remote backend; explicit `--db-driver` /\n * `--postgres-*` / `--turso-*` flags select that backend. Conflicting\n * explicit selectors and ambiguous env backends are rejected. Labels and\n * error messages never contain credentials.\n */\n\n/** Optional per-property flag bag — every property unset unless given. */\nexport interface CliDatabaseOptions {\n /** --db: explicit SQLite file. Selects sqlite even when env has a remote backend. */\n db?: string;\n /** --db-driver: sqlite | postgres | turso. */\n dbDriver?: string;\n /** --database-url: driver-scoped URL (mirrors DATABASE_URL). */\n databaseUrl?: string;\n postgresHost?: string;\n postgresPort?: string;\n postgresUser?: string;\n postgresPassword?: string;\n postgresDatabase?: string;\n /** --postgres-ssl <mode>: true/false or disable | prefer | require | verify-ca | verify-full. */\n postgresSsl?: string | boolean;\n tursoUrl?: string;\n tursoAuthToken?: string;\n /** --env-file: explicit file is mandatory — a missing file is an error. */\n envFile?: string;\n}\n\n/** Discriminated backend selection. `label` is credential-free and safe to\n * print on every variant. sqlite is pure-local (absolute `path`); every\n * remote libsql target normalizes to turso. */\nexport type PostgresSslMode = 'disable' | 'prefer' | 'require' | 'verify-ca' | 'verify-full';\n\nexport type CliDatabaseConfig =\n | { kind: 'sqlite'; label: string; path: string }\n | {\n kind: 'postgres';\n label: string;\n url: string;\n host: string;\n port: number;\n database: string;\n user?: string;\n password?: string;\n ssl: PostgresSslMode;\n }\n | { kind: 'turso'; label: string; url: string; authToken?: string };\n\ntype BackendKind = 'sqlite' | 'postgres' | 'turso';\n\ntype CjsRequire = (id: string) => unknown;\n\n/** Minimal node builtin surfaces (kept out of browser bundles, same pattern as ./db). */\nexport interface ConfigPathShim { resolve(...parts: string[]): string; join(...parts: string[]): string; dirname(p: string): string }\nexport interface ConfigFsShim { existsSync(p: string): boolean; readFileSync(p: string, encoding: string): string }\ninterface UtilShim { parseEnv(content: string): Record<string, string> }\n\n/** Lazy CJS require — keeps node builtins out of browser bundles. */\nfunction nodeRequire(): CjsRequire {\n const g = globalThis as { process?: { versions?: Record<string, string> }; Bun?: unknown; require?: CjsRequire };\n if (typeof g.process?.versions?.node === 'undefined' && typeof g.Bun === 'undefined') {\n throw new Error('database configuration is only supported in Node / Bun environments');\n }\n const req = g.require ?? (typeof require === 'function' ? require : undefined);\n if (!req) throw new Error('database configuration requires a CJS require shim (missing tsup banner?)');\n return req;\n}\nexport const nodePath = (): ConfigPathShim => nodeRequire()('node:path') as ConfigPathShim;\nconst nodeFs = (): ConfigFsShim => nodeRequire()('node:fs') as ConfigFsShim;\n\n/** native node:util.parseEnv — dotenv parsing without a dependency. */\nfunction parseEnvFile(content: string): Record<string, string> {\n return (nodeRequire()('node:util') as UtilShim).parseEnv(content);\n}\n\n/**\n * Load a NON-MUTATING env object from the dotenv tier ONLY: an explicit\n * --env-file is mandatory when given (missing file → error); otherwise\n * `.env` in the working directory, falling back to the nearest ancestor\n * (workspace root) `.env`. Callers merge over process.env themselves\n * ({ ...loadCliEnvironment(file), ...process.env }); process.env is never\n * written.\n */\nexport function loadCliEnvironment(envFile?: string): Record<string, string | undefined> {\n const fs = nodeFs();\n const path = nodePath();\n let file: string | undefined;\n if (envFile !== undefined) {\n file = path.resolve(process.cwd(), envFile);\n if (!fs.existsSync(file)) throw new Error(`[wod] --env-file: file not found: ${envFile}`);\n } else {\n let dir = process.cwd();\n for (;;) {\n const candidate = path.join(dir, '.env');\n if (fs.existsSync(candidate)) {\n file = candidate;\n break;\n }\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n }\n return file !== undefined ? parseEnvFile(fs.readFileSync(file, 'utf-8')) : {};\n}\n\nconst SQLITE_URL_SCHEMES = /^(libsql|https?|wss?|file):\\/\\//;\nconst PG_URL_SCHEMES = /^postgres(ql)?:\\/\\//;\nconst TURSO_URL_SCHEMES = /^(libsql|https?|wss?):\\/\\//;\nconst PG_FLAG_KEYS = [\n 'postgresHost',\n 'postgresPort',\n 'postgresUser',\n 'postgresPassword',\n 'postgresDatabase',\n 'postgresSsl',\n] as const;\n\nconst PG_ENV_KEYS = [\n 'POSTGRES_HOST',\n 'POSTGRES_PORT',\n 'POSTGRES_USER',\n 'POSTGRES_PASSWORD',\n 'POSTGRES_DATABASE',\n 'POSTGRES_SSL',\n] as const;\n\n/** Type guard — keeps backend strings narrowable without casts. */\nconst isBackend = (v: string): v is BackendKind => v === 'sqlite' || v === 'postgres' || v === 'turso';\n\n/** Present-but-empty env values (compose passthroughs) read as unset —\n * lockstep across every env read. */\nfunction setEnv(v: string | undefined): string | undefined {\n return v !== undefined && v.trim() !== '' ? v : undefined;\n}\n\n/** CLI error contract: every configuration failure is prefixed `[wod] `. */\nfunction fail(message: string): never {\n throw new Error(`[wod] ${message}`);\n}\n\nfunction parsePort(v: string, source: string): number {\n if (!/^\\d+$/.test(v)) fail(`${source} must be an integer 1..65535, got ${JSON.stringify(v)}`);\n const port = Number(v);\n if (port < 1 || port > 65535) fail(`${source} must be an integer 1..65535, got ${v}`);\n return port;\n}\n\nfunction sslMode(v: string | boolean | undefined, source: string): PostgresSslMode {\n if (v === undefined || v === '') return 'prefer';\n if (typeof v === 'boolean') return v ? 'require' : 'disable';\n const s = v.trim().toLowerCase();\n if (['true', '1', 'yes', 'require'].includes(s)) return 'require';\n if (['false', '0', 'no', 'disable', 'disabled'].includes(s)) return 'disable';\n if (s === 'prefer' || s === 'verify-ca' || s === 'verify-full') return s;\n fail(`${source} must be disable|prefer|require|verify-ca|verify-full, got ${JSON.stringify(v)}`);\n}\n\n/** Credential-free display form (userinfo + query stripped); an unparsable\n * input is never echoed back. */\nfunction safeUrlLabel(raw: string): string {\n try {\n const u = new URL(raw);\n return `${u.protocol}//${u.host}${u.pathname}`;\n } catch {\n return '<unparsable-url>';\n }\n}\n\n/** URL form — the API's existing semantics; the label strips credentials. */\nfunction postgresFromUrl(url: string, source: string): CliDatabaseConfig {\n if (!PG_URL_SCHEMES.test(url)) {\n fail(`${source} must start with postgres:// or postgresql://`);\n }\n let u: URL;\n try {\n u = new URL(url);\n } catch {\n fail(`${source} is not a parseable URL`); // never echo the input (credentials)\n }\n const database = decodeURIComponent(u.pathname.replace(/^\\/+|\\/+$/g, ''));\n if (database === '') fail(`${source} has no database name`);\n return {\n kind: 'postgres',\n label: safeUrlLabel(url),\n url,\n host: u.hostname,\n port: u.port !== '' ? parsePort(u.port, `${source} port`) : 5432,\n database,\n user: u.username !== '' ? decodeURIComponent(u.username) : undefined,\n password: u.password !== '' ? decodeURIComponent(u.password) : undefined,\n ssl: sslMode(u.searchParams.get('sslmode') ?? u.searchParams.get('ssl') ?? undefined, `${source} ssl parameter`),\n };\n}\n\nfunction resolvePostgres(\n options: CliDatabaseOptions,\n e: Record<string, string | undefined>,\n databaseUrl: string | undefined,\n): CliDatabaseConfig {\n const flagProps = PG_FLAG_KEYS.some((k) => options[k] !== undefined);\n const envProps = PG_ENV_KEYS.some((k) => setEnv(e[k]) !== undefined);\n // Per-property form: explicit flags, or POSTGRES_* env when no URL competes\n // (env DATABASE_URL keeps its existing precedence over env props).\n if (flagProps || (envProps && databaseUrl === undefined)) {\n const host = options.postgresHost ?? setEnv(e.POSTGRES_HOST) ?? '127.0.0.1';\n const port = parsePort(options.postgresPort ?? setEnv(e.POSTGRES_PORT) ?? '5432', '--postgres-port/POSTGRES_PORT');\n const database = options.postgresDatabase ?? setEnv(e.POSTGRES_DATABASE);\n if (database === undefined) {\n fail('--postgres-database (or POSTGRES_DATABASE) is required for per-property PostgreSQL configuration');\n }\n const user = options.postgresUser ?? setEnv(e.POSTGRES_USER);\n const password = options.postgresPassword ?? setEnv(e.POSTGRES_PASSWORD);\n const ssl = sslMode(options.postgresSsl ?? setEnv(e.POSTGRES_SSL), '--postgres-ssl/POSTGRES_SSL');\n try {\n // URL setters percent-encode userinfo specials and keep the colon placement.\n const u = new URL(`postgresql://${host}`);\n u.port = String(port);\n u.pathname = `/${database}`;\n if (user !== undefined) u.username = user;\n if (password !== undefined) u.password = password;\n u.searchParams.set('sslmode', ssl);\n return {\n kind: 'postgres',\n label: `postgresql://${u.host}${u.pathname}`,\n url: u.toString(),\n host,\n port,\n database,\n user,\n password,\n ssl,\n };\n } catch {\n fail('invalid PostgreSQL host/database in per-property configuration');\n }\n }\n if (databaseUrl !== undefined) return postgresFromUrl(databaseUrl, 'DB_DRIVER=postgres DATABASE_URL');\n fail('DB_DRIVER=postgres requires DATABASE_URL starting with postgres:// or postgresql:// — or per-property --postgres-host/--postgres-database flags');\n}\n\nfunction resolveTurso(\n options: CliDatabaseOptions,\n e: Record<string, string | undefined>,\n databaseUrl: string | undefined,\n): CliDatabaseConfig {\n const url = options.tursoUrl ?? setEnv(e.TURSO_DATABASE_URL) ?? databaseUrl;\n if (url === undefined) {\n fail('DB_DRIVER=turso requires --turso-url / TURSO_DATABASE_URL or DATABASE_URL (libsql:// or https://)');\n }\n if (PG_URL_SCHEMES.test(url)) fail('DB_DRIVER=turso cannot use a postgres:// URL');\n if (!TURSO_URL_SCHEMES.test(url)) fail('DB_DRIVER=turso requires a libsql://, https://, http:// or wss:// URL');\n return {\n kind: 'turso',\n label: safeUrlLabel(url),\n url,\n authToken: options.tursoAuthToken ?? setEnv(e.TURSO_AUTH_TOKEN) ?? setEnv(e.LIBSQL_AUTH_TOKEN),\n };\n}\n\nfunction resolveSqlite(\n options: CliDatabaseOptions,\n e: Record<string, string | undefined>,\n databaseUrl: string | undefined,\n): CliDatabaseConfig {\n // Explicit --db wins even when env configures a remote backend.\n if (options.db !== undefined) {\n const path = nodePath().resolve(process.cwd(), options.db);\n return { kind: 'sqlite', label: path, path };\n }\n if (databaseUrl !== undefined) {\n if (PG_URL_SCHEMES.test(databaseUrl)) fail('DB_DRIVER=sqlite cannot use a postgres:// DATABASE_URL');\n if (databaseUrl.startsWith('file:')) {\n const path = nodePath().resolve(process.cwd(), decodeURIComponent(databaseUrl.slice('file:'.length).split('?')[0]));\n return { kind: 'sqlite', label: path, path };\n }\n if (!SQLITE_URL_SCHEMES.test(databaseUrl)) {\n fail('DB_DRIVER=sqlite requires a libsql://, https://, http://, wss:// or file:// DATABASE_URL');\n }\n // A remote libsql URL is the turso protocol — normalize the backend kind.\n return { kind: 'turso', label: safeUrlLabel(databaseUrl), url: databaseUrl, authToken: setEnv(e.LIBSQL_AUTH_TOKEN) };\n }\n // WOD_WIKI_DB keeps its historical precedence over SQLITE_PATH.\n const path = nodePath().resolve(process.cwd(), setEnv(e.WOD_WIKI_DB) ?? setEnv(e.SQLITE_PATH) ?? './wodwiki.db');\n return { kind: 'sqlite', label: path, path };\n}\n\n/** Env-tier backend inference with ambiguity rejection — reached only when\n * no explicit flag selects a backend and DB_DRIVER is unset. */\nfunction envBackend(e: Record<string, string | undefined>): BackendKind {\n const kinds = new Set<BackendKind>();\n if (setEnv(e.WOD_WIKI_DB) !== undefined || setEnv(e.SQLITE_PATH) !== undefined) kinds.add('sqlite');\n const dbUrl = setEnv(e.DATABASE_URL);\n if (PG_ENV_KEYS.some((k) => setEnv(e[k]) !== undefined) || (dbUrl !== undefined && PG_URL_SCHEMES.test(dbUrl))) {\n kinds.add('postgres');\n } else if (dbUrl !== undefined && SQLITE_URL_SCHEMES.test(dbUrl)) {\n kinds.add('sqlite');\n }\n if (setEnv(e.TURSO_DATABASE_URL) !== undefined) kinds.add('turso');\n if (kinds.size > 1) {\n fail(`ambiguous database configuration: ${[...kinds].join(' + ')} env vars are both set — set DB_DRIVER (or pass explicit flags) to choose`);\n }\n return kinds.values().next().value ?? 'sqlite';\n}\n\n/**\n * Resolve the effective database configuration: flags > env > .env. Pass\n * `env` to supply an already-merged tier (nothing is re-read); without it\n * the .env tier (loadCliEnvironment) sits under the true process tier.\n * Kind-pinning flags (--db, --db-driver, --turso-url/--turso-auth-token,\n * --postgres-*) override even a malformed env driver; conflicting pins and\n * ambiguous env backends are rejected. Never echoes credentials.\n */\nexport function resolveDatabaseConfig(\n options: CliDatabaseOptions = {},\n env?: Record<string, string | undefined>,\n): CliDatabaseConfig {\n const e = env ?? { ...loadCliEnvironment(options.envFile), ...process.env };\n\n const driverFlag = options.dbDriver;\n if (driverFlag !== undefined && !isBackend(driverFlag)) {\n fail(`--db-driver must be sqlite|postgres|turso, got ${JSON.stringify(driverFlag)}`);\n }\n\n // Kind-pinning explicit flags; conflicting pins are rejected outright.\n const pinned: Array<[string, BackendKind]> = [];\n if (options.db !== undefined) pinned.push(['--db', 'sqlite']);\n if (driverFlag !== undefined) pinned.push([`--db-driver ${driverFlag}`, driverFlag]);\n if (options.tursoUrl !== undefined) pinned.push(['--turso-url', 'turso']);\n if (options.tursoAuthToken !== undefined) pinned.push(['--turso-auth-token', 'turso']);\n if (PG_FLAG_KEYS.some((k) => options[k] !== undefined)) pinned.push(['--postgres-*', 'postgres']);\n const kinds = new Set(pinned.map(([, kind]) => kind));\n if (kinds.size > 1) {\n fail(`conflicting database selectors: ${pinned.map(([flag, kind]) => `${flag} (${kind})`).join(', ')}`);\n }\n // --database-url is the URL for whichever backend is selected — it never\n // pins a kind, but never combines with a competing URL/local selector.\n if (options.databaseUrl !== undefined) {\n if (options.db !== undefined) fail('conflicting database selectors: --db and --database-url are both set');\n if (options.tursoUrl !== undefined) fail('conflicting database selectors: --turso-url and --database-url are both set');\n if (PG_FLAG_KEYS.some((k) => options[k] !== undefined)) {\n fail('conflicting database selectors: --database-url and --postgres-* flags are both set');\n }\n }\n\n let backend: BackendKind;\n if (pinned.length > 0) {\n backend = pinned[0][1]; // flags override even a malformed env driver\n } else {\n const envDriver = setEnv(e.DB_DRIVER);\n if (envDriver !== undefined) {\n if (!isBackend(envDriver)) {\n fail(`Unsupported DB_DRIVER: ${envDriver} (expected sqlite|turso|postgres)`);\n }\n backend = envDriver;\n } else {\n backend = envBackend(e);\n }\n }\n const databaseUrl = options.databaseUrl ?? setEnv(e.DATABASE_URL);\n switch (backend) {\n case 'postgres':\n return resolvePostgres(options, e, databaseUrl);\n case 'turso':\n return resolveTurso(options, e, databaseUrl);\n case 'sqlite':\n return resolveSqlite(options, e, databaseUrl);\n }\n}\n","import type {\n BlockEffort,\n BlockIndexRow,\n BlockRevision,\n IStorageTransaction,\n Note,\n NoteBlock,\n NoteTag,\n Session,\n Tag,\n} from '@bitcobblers/wod-wiki-storage';\nimport { rowsEqual as sameRow } from '@bitcobblers/wod-wiki-storage';\nimport type { ExecutionLog } from '@bitcobblers/wod-wiki-engine';\nimport { readFrontmatterMeta } from '@bitcobblers/wod-wiki-engine';\nimport type { EventRecord, ICodeStatement } from '@bitcobblers/wod-wiki-core';\nimport {\n blockContentId,\n KNOWN_SECTION_WIDGETS,\n parseDocumentSections,\n reconcileNoteBlocks,\n validateNoteBlocks,\n} from '@bitcobblers/wod-wiki-core';\nimport { parseScript } from '@bitcobblers/wod-wiki-lang';\nimport { toEventRows, toSummaryEventRows } from '@bitcobblers/wod-wiki-wql';\nimport { loadSql, randomId, stableNoteId, uuid5, CLI_UUID_NAMESPACE, type CliDb } from './db';\n\nconst registeredWidgets = KNOWN_SECTION_WIDGETS;\nconst saveStores = ['notes', 'block_revisions', 'block_index', 'block_efforts', 'tags', 'note_tags', 'sessions'] as const;\n\nexport function extractEffortSlugs(statements: readonly ICodeStatement[]): string[] {\n const slugs = new Set<string>();\n for (const statement of statements) {\n if (statement.exerciseId) {\n slugs.add(statement.exerciseId);\n } else {\n const effortMetric = statement.metrics?.getMetric?.('effort');\n const effort = effortMetric && 'effort' in effortMetric ? effortMetric.effort : undefined;\n if (typeof effort === 'string') {\n const slug = effort.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');\n if (slug) slugs.add(slug);\n }\n }\n }\n return [...slugs];\n}\n\nexport interface PersistNoteOptions {\n source: string;\n sourceLabel: string;\n noteId?: string;\n title?: string;\n tags?: Array<{ label: string; type?: string }>;\n /** Exact current-source lineage, supplied only by a caller that owns the edits. */\n blocks?: Record<string, NoteBlock>;\n expectedSourceRevision?: number;\n now?: number;\n}\n\nexport interface PersistNoteResult {\n noteId: string;\n note: Note;\n blocks: number;\n efforts: number;\n tags: number;\n created: boolean;\n}\n\nfunction titleFromLabel(sourceLabel: string): string {\n if (!sourceLabel || sourceLabel === '-') return 'stdin';\n const stem = sourceLabel.split('/').pop() ?? sourceLabel;\n return stem.replace(/\\.[^.]+$/, '') || sourceLabel;\n}\n\n\nasync function saveSource(\n db: CliDb,\n options: PersistNoteOptions,\n startTime?: number,\n): Promise<PersistNoteResult & { session?: Session; revision?: BlockRevision }> {\n const noteId = options.noteId ?? stableNoteId(options.sourceLabel, options.source);\n const observed = await db.storage.readonly('notes').get(noteId);\n const expected = options.expectedSourceRevision ?? observed?.sourceRevision ?? 0;\n const now = options.now ?? Date.now();\n return db.storage.transaction([...saveStores], 'readwrite', async (tx) => {\n const existing = await tx.readonly('notes').get(noteId);\n if ((existing?.sourceRevision ?? 0) !== expected) {\n throw new Error(`Stale Note source revision for ${noteId}; expected ${expected}`);\n }\n let sourceRevision = existing?.rawContent === options.source\n ? existing.sourceRevision\n : (existing?.sourceRevision ?? 0) + 1;\n const history = await tx.readonly('block_revisions').getAllFromIndex('by-note', noteId);\n const latest = new Map<string, BlockRevision>();\n for (const row of history) {\n if ((latest.get(row.blockId)?.version ?? 0) < row.version) latest.set(row.blockId, row);\n }\n // ponytail: deterministic block UUIDs by noteId + ordinal; add explicit block IDs in markdown frontmatter when user-authored block identity is supported.\n let ordinal = 0;\n const blocks = reconcileNoteBlocks(options.source, {\n sourceRevision,\n blocks: options.blocks ?? (existing?.rawContent === options.source ? existing.blocks : undefined),\n registeredWidgets,\n createId: () => {\n while (true) {\n const candidate = uuid5(CLI_UUID_NAMESPACE, `${noteId}:block:${ordinal++}`);\n if (!latest.has(candidate)) return candidate;\n }\n },\n });\n validateNoteBlocks(options.source, blocks, sourceRevision, { registeredWidgets });\n const revisions: BlockRevision[] = [];\n for (const block of Object.values(blocks)) {\n const saved = latest.get(block.id);\n const rawContent = options.source.slice(block.from, block.to);\n const unchanged = saved && saved.rawContent === rawContent && saved.kind === block.kind &&\n saved.dialect === block.dialect && saved.sport === block.sport;\n block.version = unchanged ? saved.version : (saved?.version ?? 0) + 1;\n if (!unchanged) revisions.push({\n noteId, blockId: block.id, version: block.version, kind: block.kind,\n rawContent, savedAt: now,\n ...(block.dialect ? { dialect: block.dialect } : {}),\n ...(block.sport ? { sport: block.sport } : {}),\n });\n }\n if (existing?.rawContent === options.source && !sameRow(existing.blocks, blocks)) {\n sourceRevision++;\n for (const block of Object.values(blocks)) block.sourceRevision = sourceRevision;\n }\n const fm = readFrontmatterMeta(options.source);\n const catalog =\n (typeof fm['catalog'] === 'string' && fm['catalog'].trim()) ||\n (typeof fm['collection'] === 'string' && fm['collection'].trim()) ||\n existing?.catalog;\n const note: Note = {\n ...existing,\n id: noteId,\n title: options.title ?? existing?.title ?? titleFromLabel(options.sourceLabel),\n type: existing?.type ?? 'note',\n date: existing?.date ?? now,\n createdAt: existing?.createdAt ?? now,\n rawContent: options.source,\n sourceRevision,\n blocks,\n ...(catalog ? { catalog } : {}),\n };\n const priorRows = await tx.readonly('block_index').getAllFromIndex('by-note', noteId);\n const priorEfforts = await tx.readonly('block_efforts').getAllFromIndex('by-note', noteId);\n const priorById = new Map(priorRows.map((row) => [row.id, row]));\n const nextRows: BlockIndexRow[] = [];\n const nextEfforts: BlockEffort[] = [];\n for (const [position, block] of Object.values(blocks).sort((a, b) => a.from - b.from).entries()) {\n const id = `${noteId}:${block.id}`;\n const prior = priorById.get(id);\n const rawContent = options.source.slice(block.from, block.to);\n const body = parseDocumentSections(rawContent, { registeredWidgets })[0]?.displayContent ?? rawContent;\n const fingerprint = block.kind === 'wod' ? blockContentId(body) : undefined;\n nextRows.push({\n ...prior,\n id, noteId, blockId: block.id, blockVersion: block.version,\n dataType: block.kind, sourceRevision, from: block.from, to: block.to, position,\n rawContent, noteTitle: note.title, createdAt: prior?.createdAt ?? now,\n blockContentId: fingerprint,\n ...(catalog ? { catalog } : {}),\n ...(note.sourceId ? { sourceId: note.sourceId } : {}),\n });\n if (block.kind === 'wod') {\n for (const effortSlug of extractEffortSlugs(parseScript(body, { sport: block.sport, dialect: block.dialect }).statements)) {\n const effortId = `${noteId}:${block.id}:${effortSlug}`;\n const previous = priorEfforts.find((row) => row.id === effortId);\n nextEfforts.push({\n ...previous, id: effortId, noteId, blockId: block.id,\n blockContentId: fingerprint, effortSlug, createdAt: previous?.createdAt ?? now,\n });\n }\n }\n }\n if (!sameRow(existing, note)) await tx.readwrite('notes').put(note);\n if (revisions.length) await tx.readwrite('block_revisions').putMany(revisions);\n await diffProjection(tx, 'block_index', priorRows, nextRows);\n await diffProjection(tx, 'block_efforts', priorEfforts, nextEfforts);\n const tags = await saveTags(tx, noteId, options.tags, now);\n let session: Session | undefined;\n let revision: BlockRevision | undefined;\n if (startTime !== undefined) {\n const block = Object.values(blocks).filter((row) => row.kind === 'wod').sort((a, b) => a.from - b.from)[0];\n if (!block) throw new Error('[wod run] Note has no actionable workout block');\n revision = revisions.find((row) => row.blockId === block.id) ?? latest.get(block.id);\n if (!revision) throw new Error('[wod run] Saved workout revision is unavailable');\n session = {\n id: randomId(), noteId, blockId: block.id, blockVersion: block.version,\n blockContentId: blockContentId(parseDocumentSections(revision.rawContent)[0]?.displayContent ?? revision.rawContent),\n origin: 'journal', status: 'in-progress',\n startTime, endTime: startTime, duration: 0, completed: false, createdAt: startTime,\n };\n await tx.readwrite('sessions').put(session);\n }\n return { noteId, note, blocks: nextRows.length, efforts: nextEfforts.length, tags, created: !existing, session, revision };\n });\n}\n\nasync function diffProjection(\n tx: IStorageTransaction,\n store: 'block_index' | 'block_efforts',\n previous: Array<BlockIndexRow | BlockEffort>,\n next: Array<BlockIndexRow | BlockEffort>,\n): Promise<void> {\n const nextIds = new Set(next.map((row) => row.id));\n for (const row of previous) if (!nextIds.has(row.id)) await tx.readwrite(store).delete(row.id);\n const old = new Map(previous.map((row) => [row.id, row]));\n for (const row of next) {\n if (!sameRow(old.get(row.id), row)) {\n if (store === 'block_index' && 'blockVersion' in row) await tx.readwrite('block_index').put(row);\n if (store === 'block_efforts' && 'effortSlug' in row) await tx.readwrite('block_efforts').put(row);\n }\n }\n}\n\nasync function saveTags(tx: IStorageTransaction, noteId: string, items: PersistNoteOptions['tags'], now: number): Promise<number> {\n const previous = await tx.readonly('note_tags').getAllFromIndex('by-note', noteId);\n if (!items) return previous.length;\n const next = new Map<string, NoteTag>();\n for (const item of items) {\n const label = item.label.trim();\n if (!label) continue;\n const found = (await tx.readonly('tags').getAllFromIndex('by-label', label))[0];\n const tag: Tag = found\n ? { ...found, ...(!found.type && item.type ? { type: item.type } : {}) }\n : { id: uuid5(CLI_UUID_NAMESPACE, `tag:${label}`), label, type: item.type, createdAt: now };\n if (!sameRow(found, tag)) await tx.readwrite('tags').put(tag);\n const id = previous.find((link) => link.tagId === tag.id)?.id ?? uuid5(CLI_UUID_NAMESPACE, `note-tag:${noteId}:${tag.id}`);\n next.set(id, { ...previous.find((link) => link.id === id), id, noteId, tagId: tag.id });\n }\n for (const link of previous) if (!next.has(link.id)) await tx.readwrite('note_tags').delete(link.id);\n const old = new Map(previous.map((row) => [row.id, row]));\n for (const link of next.values()) if (!sameRow(old.get(link.id), link)) await tx.readwrite('note_tags').put(link);\n return next.size;\n}\n\nexport function persistNote(db: CliDb, options: PersistNoteOptions): Promise<PersistNoteResult> {\n return saveSource(db, options);\n}\n\nexport interface StartedRun {\n session: Session;\n revision: BlockRevision;\n noteCreated: boolean;\n}\n\nexport async function startRun(db: CliDb, options: PersistNoteOptions, startTime = Date.now()): Promise<StartedRun> {\n const saved = await saveSource(db, options, startTime);\n if (!saved.session || !saved.revision) throw new Error('[wod run] Atomic run capture failed');\n return { session: saved.session, revision: saved.revision, noteCreated: saved.created };\n}\n\nexport interface PersistRunResult {\n noteId: string;\n resultId: string;\n session: Session;\n events: number;\n summaries: number;\n noteCreated: boolean;\n}\n\nexport async function persistRun(db: CliDb, started: StartedRun, executionLog: ExecutionLog): Promise<PersistRunResult> {\n const results = executionLog.results;\n const session: Session = {\n ...started.session,\n status: results.completed ? 'completed' : 'in-progress',\n endTime: results.endTime, duration: results.duration ?? 0, completed: results.completed,\n };\n const identity = {\n noteId: session.noteId, resultId: session.id, blockId: session.blockId, blockVersion: session.blockVersion,\n blockContentId: session.blockContentId, origin: session.origin, pageId: session.pageId,\n workoutTimestamp: session.createdAt,\n };\n const events = toEventRows(executionLog.logs, identity);\n const summaries = toSummaryEventRows(executionLog.logs, identity);\n await db.storage.transaction(['sessions', 'events', 'block_revisions'], 'readwrite', async (tx) => {\n const saved = await tx.readonly('sessions').get(session.id);\n if (!saved || saved.noteId !== session.noteId || saved.blockId !== session.blockId || saved.blockVersion !== session.blockVersion) {\n throw new Error('[wod run] Captured Session source pin changed');\n }\n const revision = await tx.readonly('block_revisions').get([session.noteId, session.blockId, session.blockVersion]);\n if (!revision || !sameRow(revision, started.revision)) throw new Error('[wod run] Captured revision is unavailable');\n await tx.readwrite('sessions').put(session);\n await tx.readwrite('events').putMany([...events, ...summaries]);\n });\n return { noteId: session.noteId, resultId: session.id, session, events: events.length, summaries: summaries.length, noteCreated: started.noteCreated };\n}\n\n/** Import only when the exact immutable revision is already available. */\nexport async function persistSessionBundle(db: CliDb, session: Session, events: readonly EventRecord[]): Promise<{ events: number }> {\n if ('segmentId' in session || 'segmentVersion' in session || 'version' in session || 'rawContent' in session || 'data' in session || !session.noteId || !session.blockId || !Number.isSafeInteger(session.blockVersion) || session.blockVersion < 1) {\n throw new Error('[wod import] Session requires an exact block revision pin');\n }\n await db.storage.transaction(['sessions', 'events', 'block_revisions'], 'readwrite', async (tx) => {\n const revision = await tx.readonly('block_revisions').get([session.noteId, session.blockId, session.blockVersion]);\n if (!revision || revision.kind !== 'wod') throw new Error('[wod import] Exact immutable workout revision is unavailable');\n for (const event of events) {\n if (event.resultId !== session.id || event.noteId !== session.noteId || event.blockId !== session.blockId || event.blockVersion !== session.blockVersion) {\n throw new Error('[wod import] Event source pin differs from Session source pin');\n }\n }\n const existing = await tx.readonly('sessions').get(session.id);\n if (existing && !sameRow(existing, session)) throw new Error('[wod import] Session identity conflicts with existing row');\n if (!existing) await tx.readwrite('sessions').put(session);\n for (const event of events) {\n const old = await tx.readonly('events').get(event.id);\n if (old && !sameRow(old, event)) throw new Error('[wod import] Event identity conflicts with existing row');\n if (!old) await tx.readwrite('events').put(event);\n }\n });\n return { events: events.length };\n}\n\nexport async function persistEffort(db: CliDb, effort: Record<string, unknown>): Promise<void> {\n const sql = await loadSql();\n await db.db.transaction(async (tx) => {\n await sql.putRow(tx, sql.storeDefinition('efforts'), effort);\n });\n}\n\nexport async function persistTypedTags(db: CliDb, labels: readonly string[], type: string): Promise<number> {\n return db.storage.transaction(['tags'], 'readwrite', async (tx) => {\n let added = 0;\n for (const raw of labels) {\n const label = raw.trim();\n if (!label) continue;\n const tag = (await tx.readonly('tags').getAllFromIndex('by-label', label))[0];\n if (!tag) {\n await tx.readwrite('tags').put({ id: uuid5(CLI_UUID_NAMESPACE, `tag:${label}`), label, type, createdAt: Date.now() });\n added++;\n } else if (!tag.type) {\n await tx.readwrite('tags').put({ ...tag, type });\n }\n }\n return added;\n });\n}\n","import { nodeFs, nodePath, type CliDb } from './db';\nimport {\n applySeedChunk,\n seedNoteId,\n type SeedChunkResult,\n assertSeedManifest,\n assertSeedRows,\n CANVAS_CHUNK_ID,\n SEED_SCHEMA,\n emptySeedMeta,\n seedMetaKey,\n type SeedMetaRecord,\n} from '@bitcobblers/wod-wiki-engine';\n\nexport { seedNoteId };\nexport interface SeedSourceSummary {\n sourceId: string;\n version: number;\n notes: number;\n efforts: number;\n blocks: number;\n blockEfforts: number;\n deleted: number;\n skippedUserOwned: number;\n}\nexport async function importSeedDir(db: CliDb, dir: string, sourceId: string): Promise<SeedSourceSummary> {\n const fs = nodeFs(), path = nodePath();\n const source = sourceId || path.basename(dir);\n const manifest = assertSeedManifest(JSON.parse(fs.readFileSync(path.resolve(dir, 'manifest.json'), 'utf-8')));\n const key = seedMetaKey(source);\n let expected = await db.storage.readonly('meta').get(key) as SeedMetaRecord | undefined;\n if (expected && expected.schema !== SEED_SCHEMA) throw new Error('Incompatible seed checkpoint; recreate storage');\n let meta = expected ?? emptySeedMeta(key);\n if (manifest.version < meta.seedVersion) throw new Error('Seed manifest is older than stored checkpoint');\n const summary: SeedSourceSummary = { sourceId: source, version: manifest.version, notes: 0, efforts: 0, blocks: 0, blockEfforts: 0, deleted: 0, skippedUserOwned: 0 };\n const metadataChanged = manifest.version !== meta.seedVersion || manifest.builtAt !== meta.builtAt;\n const plan = manifest.chunks.filter((c) => metadataChanged || meta.chunks[c.id]?.sha256 !== c.sha256);\n plan.sort((a, b) => Number(b.id === CANVAS_CHUNK_ID) - Number(a.id === CANVAS_CHUNK_ID));\n const accumulate = (result: SeedChunkResult) => {\n summary.notes += result.totalNotes; summary.efforts += result.totalEfforts; summary.blocks += result.totalBlocks; summary.deleted += result.deleted; summary.skippedUserOwned += result.skippedUserOwned;\n };\n for (const chunk of plan) {\n const rows = assertSeedRows(JSON.parse(fs.readFileSync(path.resolve(dir, chunk.path), 'utf-8')));\n if (rows.length !== chunk.count) throw new Error('Seed chunk count mismatch');\n const next = { ...meta, chunks: { ...meta.chunks, [chunk.id]: { sha256: chunk.sha256, noteIds: await Promise.all(rows.map((r) => seedNoteId(r.path))) } }, importedAt: Date.now() };\n accumulate(await applySeedChunk(db.storage, { chunkId: chunk.id, rows, manifest, expectedMeta: expected, meta: next }));\n summary.blockEfforts += rows.reduce((count, row) => count + row.blockEfforts.length, 0);\n meta = next; expected = next;\n }\n for (const chunkId of Object.keys(meta.chunks)) {\n if (manifest.chunks.some((c) => c.id === chunkId)) continue;\n const chunks = { ...meta.chunks };\n delete chunks[chunkId];\n const next = { ...meta, chunks, importedAt: Date.now() };\n accumulate(await applySeedChunk(db.storage, { chunkId, rows: [], manifest, expectedMeta: expected, meta: next }));\n meta = next; expected = next;\n }\n if (plan.length || metadataChanged || Object.keys(meta.chunks).length !== Object.keys(expected?.chunks ?? {}).length) {\n const next = { ...meta, schema: SEED_SCHEMA, seedVersion: manifest.version, builtAt: manifest.builtAt, importedAt: Date.now() };\n await applySeedChunk(db.storage, { chunkId: null, rows: [], manifest, expectedMeta: expected, meta: next });\n }\n return summary;\n}\nexport function defaultSeedDirs(cwd: string): string[] {\n const base = nodePath().resolve(cwd, 'apps', 'playground', 'public', 'seed');\n return ['core', 'community'].map((id) => nodePath().resolve(base, id)).filter((dir) => nodeFs().existsSync(nodePath().resolve(dir, 'manifest.json')));\n}\n","import { nodeCrypto, nodeFs, nodePath, type CliDb } from './db';\nimport type { BlockEffort, BlockIndexRow, Note } from '@bitcobblers/wod-wiki-storage';\nimport { catalogOfItem } from '@bitcobblers/wod-wiki-wql';\nimport { readFrontmatterMeta } from '@bitcobblers/wod-wiki-engine';\nimport { SEED_SCHEMA, type ManifestChunk, type SeedManifest, type SeedRow } from '../seedbuild/contract';\nimport { compileSeedRow } from '../seedbuild/compiler';\nimport { writeBuildReport } from '../seedbuild/report';\n\nexport interface PublishCatalogOptions {\n catalog?: string;\n outDir: string;\n version?: number;\n}\n\nexport interface PublishCatalogResult {\n manifest: SeedManifest;\n outDir: string;\n catalogs: string[];\n totalNotes: number;\n}\n\n/**\n * Publishes catalog data from the database into a configured seed directory:\n * manifest.json, chunk files (SeedRow[] format), and report.html.\n * Compatible with `wod seed --source <outDir>` and playground custom sources.\n */\nexport async function publishCatalogSeed(\n db: CliDb,\n options: PublishCatalogOptions,\n): Promise<PublishCatalogResult> {\n const t0 = Date.now();\n const fs = nodeFs();\n const path = nodePath();\n\n const allNotes = await db.storage.readonly('notes').getAll();\n if (allNotes.length === 0) {\n throw new Error(`[wod publish] No notes found in database ${db.path}`);\n }\n\n // Group notes by catalog\n const notesByCatalog = new Map<string, Note[]>();\n for (const note of allNotes) {\n const fm = readFrontmatterMeta(note.rawContent);\n const cat =\n (typeof fm['catalog'] === 'string' && fm['catalog'].trim()) ||\n (typeof fm['collection'] === 'string' && fm['collection'].trim()) ||\n note.catalog ||\n catalogOfItem(note);\n const key = cat || '__uncataloged__';\n const list = notesByCatalog.get(key) ?? [];\n list.push(note);\n notesByCatalog.set(key, list);\n }\n\n const targetCatalogs = new Map<string, Note[]>();\n if (options.catalog) {\n const matching = notesByCatalog.get(options.catalog);\n if (matching) {\n targetCatalogs.set(options.catalog, matching);\n } else if (notesByCatalog.has('__uncataloged__') && notesByCatalog.size === 1) {\n targetCatalogs.set(options.catalog, notesByCatalog.get('__uncataloged__')!);\n } else {\n const available = [...notesByCatalog.keys()].filter((k) => k !== '__uncataloged__');\n throw new Error(\n `[wod publish] Catalog \"${options.catalog}\" not found in ${db.path}.` +\n (available.length > 0 ? ` Available catalogs: ${available.join(', ')}` : ''),\n );\n }\n } else {\n for (const [cat, notes] of notesByCatalog.entries()) {\n targetCatalogs.set(cat === '__uncataloged__' ? 'default' : cat, notes);\n }\n }\n\n const allIndexRows = await db.storage.readonly('block_index').getAll();\n const allEffortRows = await db.storage.readonly('block_efforts').getAll();\n\n const indexByNote = new Map<string, BlockIndexRow[]>();\n for (const row of allIndexRows) {\n const list = indexByNote.get(row.noteId) ?? [];\n list.push(row);\n indexByNote.set(row.noteId, list);\n }\n\n const effortsByNote = new Map<string, BlockEffort[]>();\n for (const row of allEffortRows) {\n const list = effortsByNote.get(row.noteId) ?? [];\n list.push(row);\n effortsByNote.set(row.noteId, list);\n }\n\n const outDir = path.resolve(process.cwd(), options.outDir);\n const chunksDir = path.join(outDir, 'chunks');\n fs.mkdirSync(chunksDir, { recursive: true });\n\n const manifestChunks: ManifestChunk[] = [];\n let totalNotes = 0;\n const publishedCatalogs: string[] = [];\n\n for (const [catalogName, notes] of targetCatalogs.entries()) {\n publishedCatalogs.push(catalogName);\n const chunkRows: SeedRow[] = [];\n\n for (const note of notes) {\n const stem =\n (note.title || note.id)\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '') || 'note';\n const notePath = note.sourcePath ?? `markdown/collections/${catalogName}/${stem}.md`;\n const noteBlockIndex = indexByNote.get(note.id) ?? [];\n const noteBlockEfforts = effortsByNote.get(note.id) ?? [];\n\n const blockIndex: BlockIndexRow[] =\n noteBlockIndex.length > 0\n ? noteBlockIndex.map((b) => ({\n ...b,\n isStatic: true,\n sourceId: b.sourceId ?? `collection:${catalogName}/${stem}`,\n sourcePath: b.sourcePath ?? notePath,\n catalog: catalogName,\n }))\n : compileSeedRow(notePath, note.rawContent, {\n routeId: `${catalogName}/${stem}`,\n sourceId: `collection:${catalogName}/${stem}`,\n createdAt: note.createdAt,\n noteTitle: note.title,\n }).blockIndex;\n\n const blockEfforts: BlockEffort[] = noteBlockEfforts.map((e) => ({\n ...e,\n isStatic: true,\n sourcePath: e.sourcePath ?? notePath,\n }));\n\n chunkRows.push({\n path: notePath,\n content: note.rawContent,\n blocks: note.blocks,\n blockIndex,\n blockEfforts,\n });\n }\n const chunkId = `collection.${catalogName}`;\n const json = JSON.stringify(chunkRows);\n const digest = nodeCrypto().createHash('sha256').update(json).digest();\n const sha = [...digest].map((b) => b.toString(16).padStart(2, '0')).join('');\n const chunkFile = `chunks/${chunkId}.${sha.slice(0, 8)}.json`;\n fs.writeFileSync(path.join(outDir, chunkFile), json, 'utf-8');\n\n manifestChunks.push({\n id: chunkId,\n path: chunkFile,\n sha256: sha,\n bytes: Buffer.byteLength(json, 'utf8'),\n count: chunkRows.length,\n kind: 'notes',\n });\n totalNotes += chunkRows.length;\n }\n\n const manifest: SeedManifest = {\n schema: SEED_SCHEMA,\n version: options.version ?? 1,\n versionLabel: `v${options.version ?? 1}`,\n builtAt: new Date().toISOString(),\n chunks: manifestChunks,\n };\n fs.writeFileSync(path.join(outDir, 'manifest.json'), JSON.stringify(manifest, null, 2) + '\\n', 'utf-8');\n\n writeBuildReport(outDir, {\n manifest,\n totalMs: Date.now() - t0,\n passMs: { scan: 0, blockIndex: 0, parseGate: 0, blockEfforts: 0, write: Date.now() - t0 },\n fileCount: totalNotes,\n outDir,\n });\n\n return {\n manifest,\n outDir,\n catalogs: publishedCatalogs,\n totalNotes,\n };\n}\n","/**\n * CLI Output Formatters (JSON, ASCII Table, CSV)\n *\n * Implements presentation formatting for parse-tree, execution-log,\n * and WQL query results across json, table, and csv formats.\n */\n\nimport type { WodWikiIRFile, StatementNode, ExecutionLog } from '@bitcobblers/wod-wiki-engine';\nimport type { QueryResult, RowsQueryResult, FindQueryResult, PipelineResult } from '@bitcobblers/wod-wiki-wql';\n\nexport type OutputFormat = 'json' | 'table' | 'csv';\n\nfunction escapeCsvField(field: unknown): string {\n if (field === undefined || field === null) return '';\n const str = String(field);\n if (str.includes(',') || str.includes('\"') || str.includes('\\n') || str.includes('\\r')) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n return str;\n}\n\nfunction formatDate(ts: number): string {\n if (!ts) return '-';\n try {\n return new Date(ts).toISOString();\n } catch {\n return String(ts);\n }\n}\n\nfunction formatMetricValue(m: { image?: string; value?: unknown }): string {\n if (m.image) return m.image;\n if (m.value === undefined || m.value === null) return '';\n if (typeof m.value === 'object') return JSON.stringify(m.value);\n return String(m.value);\n}\n\nfunction formatMetric(m: { type?: string; image?: string; value?: unknown }): string {\n const t = m.type || 'metric';\n return `${t}:${formatMetricValue(m)}`;\n}\n\n/**\n * Format StatementNode parse tree\n */\nexport function formatParseOutput(\n ir: WodWikiIRFile<StatementNode>,\n format: OutputFormat,\n pretty: boolean = true,\n): string {\n if (format === 'json') {\n return JSON.stringify(ir, null, pretty ? 2 : undefined);\n }\n\n // Flatten nodes for table/csv representation\n const flatNodes: StatementNode[] = [];\n const walk = (node: StatementNode) => {\n flatNodes.push(node);\n for (const child of node.children ?? []) {\n walk(child);\n }\n };\n walk(ir.data);\n\n if (format === 'csv') {\n const header = 'id,type,from,to,raw,metrics,hints';\n const rows = flatNodes.map((n) =>\n [\n n.id,\n n.type,\n n.from,\n n.to,\n escapeCsvField(n.raw),\n escapeCsvField(n.metrics.map(formatMetric).join('; ')),\n escapeCsvField(n.hints?.join('; ') ?? ''),\n ].join(','),\n );\n return [header, ...rows].join('\\n');\n }\n\n // format === 'table'\n const lines: string[] = [];\n lines.push(`Parse Tree (${flatNodes.length} statements):`);\n lines.push('─'.repeat(80));\n lines.push(\n ['ID'.padEnd(6), 'Type'.padEnd(12), 'Span'.padEnd(12), 'Hints'.padEnd(20), 'Raw Text'].join(' | '),\n );\n lines.push('─'.repeat(80));\n\n for (const n of flatNodes) {\n const span = `${n.from}-${n.to}`;\n const hints = (n.hints ?? []).join(', ');\n lines.push(\n [\n String(n.id).padEnd(6),\n n.type.padEnd(12),\n span.padEnd(12),\n (hints.length > 18 ? hints.slice(0, 15) + '...' : hints).padEnd(20),\n n.raw.replace(/\\n/g, '\\\\n'),\n ].join(' | '),\n );\n }\n return lines.join('\\n');\n}\n\n/**\n * Format ExecutionLog runtime output\n */\nexport function formatExecutionOutput(\n ir: WodWikiIRFile<ExecutionLog>,\n format: OutputFormat,\n pretty: boolean = true,\n): string {\n if (format === 'json') {\n return JSON.stringify(ir, null, pretty ? 2 : undefined);\n }\n\n const { results, logs } = ir.data;\n const statements = logs;\n\n if (format === 'csv') {\n const header = 'id,outputType,started,ended,sourceBlockKey,stackLevel,completionReason,metrics,hints';\n const rows = statements.map((s) =>\n [\n s.id,\n s.outputType,\n s.timeSpan?.started ?? s.timestamp ?? 0,\n s.timeSpan?.ended ?? '',\n escapeCsvField(s.sourceBlockKey),\n s.stackLevel,\n escapeCsvField(s.completionReason ?? ''),\n escapeCsvField(s.metrics.map(formatMetric).join('; ')),\n escapeCsvField(s.hints?.join('; ') ?? ''),\n ].join(','),\n );\n return [header, ...rows].join('\\n');\n }\n\n // format === 'table'\n const lines: string[] = [];\n lines.push(`Workout Execution Results:`);\n lines.push(` Duration: ${results.duration}ms`);\n lines.push(` Completed: ${results.completed ? 'yes' : 'no'}`);\n lines.push(` Start: ${formatDate(results.startTime)}`);\n lines.push(` End: ${formatDate(results.endTime)}`);\n lines.push(` Logs: ${statements.length} statements emitted`);\n lines.push('─'.repeat(80));\n lines.push(\n ['ID'.padEnd(8), 'Type'.padEnd(12), 'Block'.padEnd(18), 'Reason'.padEnd(15), 'Metrics'].join(' | '),\n );\n lines.push('─'.repeat(80));\n\n for (const s of statements) {\n const metricsStr = s.metrics.map(formatMetric).join(', ');\n lines.push(\n [\n String(s.id).padEnd(8),\n (s.outputType ?? 'segment').padEnd(12),\n (s.sourceBlockKey ?? '-').padEnd(18),\n (s.completionReason ?? '-').padEnd(15),\n metricsStr,\n ].join(' | '),\n );\n }\n return lines.join('\\n');\n}\n\n/**\n * Format QueryResult / RowsQueryResult / FindQueryResult / PipelineResult\n */\nexport function formatQueryOutput(\n ir: WodWikiIRFile<QueryResult | RowsQueryResult | FindQueryResult | PipelineResult>,\n format: OutputFormat,\n pretty: boolean = true,\n): string {\n if (format === 'json') {\n return JSON.stringify(ir, null, pretty ? 2 : undefined);\n }\n\n const kind = ir.kind;\n\n if (kind === 'rows-result') {\n const data = ir.data as RowsQueryResult;\n if (format === 'csv') {\n const header = 'resultId,timestamp,outputType,eventId,metrics';\n const rows: string[] = [];\n for (const run of data.runs) {\n for (const event of run.events) {\n rows.push(\n [\n run.resultId,\n run.timestamp,\n event.outputType,\n event.id,\n escapeCsvField(event.metrics.map(formatMetric).join('; ')),\n ].join(','),\n );\n }\n }\n return [header, ...rows].join('\\n');\n }\n\n // table\n const lines: string[] = [];\n lines.push(`Rows Query Result (${data.runs.length} runs):`);\n if (data.error) lines.push(`Error: ${data.error}`);\n lines.push('─'.repeat(80));\n lines.push(\n ['Result ID'.padEnd(20), 'Date'.padEnd(24), 'Events'].join(' | '),\n );\n lines.push('─'.repeat(80));\n for (const run of data.runs) {\n lines.push(\n [\n run.resultId.padEnd(20),\n formatDate(run.timestamp).padEnd(24),\n String(run.events.length),\n ].join(' | '),\n );\n }\n return lines.join('\\n');\n }\n\n if (kind === 'find-result') {\n const data = ir.data as FindQueryResult;\n if (format === 'csv') {\n const header = 'target,id,title_or_label,sourceId';\n const rows: string[] = [];\n for (const n of data.notes) {\n rows.push(['note', n.id, escapeCsvField(n.title), escapeCsvField(n.sourceId ?? '')].join(','));\n }\n for (const b of data.blocks) {\n rows.push(['block', b.id, escapeCsvField(b.noteTitle), escapeCsvField(b.sourceId ?? '')].join(','));\n }\n for (const e of data.efforts ?? []) {\n rows.push(['effort', e.id, escapeCsvField(e.label), escapeCsvField(e.slug)].join(','));\n }\n return [header, ...rows].join('\\n');\n }\n\n // table\n const lines: string[] = [];\n const matchedCount = data.stages?.matched ?? 0;\n const selectedCount = data.stages?.selected ?? 0;\n lines.push(`Find Result (matched: ${matchedCount} / selected: ${selectedCount}):`);\n lines.push('─'.repeat(80));\n lines.push(['Type'.padEnd(8), 'ID'.padEnd(24), 'Title / Label'.padEnd(30), 'Source ID'].join(' | '));\n lines.push('─'.repeat(80));\n for (const n of data.notes) {\n lines.push(['note'.padEnd(8), n.id.padEnd(24), n.title.padEnd(30), n.sourceId ?? '-'].join(' | '));\n }\n for (const b of data.blocks) {\n lines.push(['block'.padEnd(8), b.id.padEnd(24), b.noteTitle.padEnd(30), b.sourceId ?? '-'].join(' | '));\n }\n for (const e of data.efforts ?? []) {\n lines.push(['effort'.padEnd(8), e.id.padEnd(24), e.label.padEnd(30), e.slug].join(' | '));\n }\n return lines.join('\\n');\n }\n\n if (kind === 'pipeline-result') {\n const data = ir.data as PipelineResult;\n const sink = data.chart ? `:${data.chart.head}` : 'data';\n if (format === 'csv') {\n const header = 'series,timestamp,date,value,unit';\n const rows: string[] = [];\n for (const s of data.series ?? []) {\n for (const pt of s.points) {\n rows.push(\n [\n escapeCsvField(s.label || s.key),\n pt.ts,\n formatDate(pt.ts),\n pt.value,\n escapeCsvField(s.unit ?? data.unit ?? ''),\n ].join(','),\n );\n }\n }\n return [header, ...rows].join('\\n');\n }\n const lines: string[] = [];\n if (data.error) lines.push(`Pipeline Error: ${data.error}`);\n lines.push(`Pipeline Result (→ ${sink}):`);\n lines.push('─'.repeat(80));\n if (data.table) {\n lines.push(`Table: ${data.table.rows.length} of ${data.table.totalCount} rows`);\n }\n for (const s of data.series ?? []) {\n lines.push(`${s.label || s.key}: ${s.points.length} points${s.unit ? ` (${s.unit})` : ''}`);\n }\n if (data.notes?.length) lines.push(`notes: ${data.notes.length}`);\n if (data.blocks?.length) lines.push(`blocks: ${data.blocks.length}`);\n if (data.efforts?.length) lines.push(`efforts: ${data.efforts.length}`);\n if (data.runs?.length) lines.push(`runs: ${data.runs.length}`);\n return lines.join('\\n');\n }\n\n // kind === 'query-result'\n const data = ir.data as QueryResult;\n if (data.scalar !== undefined && data.series.length === 0) {\n if (format === 'csv') {\n return `metric,scalar,unit\\n${escapeCsvField(data.parsed.metric)},${data.scalar},${escapeCsvField(data.unit ?? '')}`;\n }\n return `Scalar Result: ${data.scalar}${data.unit ? ' ' + data.unit : ''}`;\n }\n\n if (format === 'csv') {\n const header = 'series,timestamp,date,value,unit';\n const rows: string[] = [];\n for (const s of data.series) {\n for (const pt of s.points) {\n rows.push(\n [\n escapeCsvField(s.label || s.key),\n pt.ts,\n formatDate(pt.ts),\n pt.value,\n escapeCsvField(s.unit ?? data.unit ?? ''),\n ].join(','),\n );\n }\n }\n return [header, ...rows].join('\\n');\n }\n\n // table\n const lines: string[] = [];\n const matchedCount = (data.stages as { matched?: number; selected?: number } | undefined)?.matched ?? (data.stages as { selected?: number } | undefined)?.selected ?? data.matched?.length ?? 0;\n lines.push(`Query Result (${data.series.length} series, ${matchedCount} matched facts):`);\n lines.push(\n ['Series / Group'.padEnd(20), 'Timestamp'.padEnd(16), 'Date'.padEnd(24), 'Value'.padEnd(12), 'Unit'].join(' | '),\n );\n lines.push('─'.repeat(80));\n\n for (const s of data.series) {\n for (const pt of s.points) {\n lines.push(\n [\n (s.label || s.key).padEnd(20),\n String(pt.ts).padEnd(16),\n formatDate(pt.ts).padEnd(24),\n String(pt.value).padEnd(12),\n s.unit ?? data.unit ?? '-',\n ].join(' | '),\n );\n }\n }\n return lines.join('\\n');\n}\n","/**\n * Auto-generated build version metadata.\n * Do not edit directly; updated by scripts/stamp-version.ts\n */\nexport const VERSION = '0.36.2135';\nexport const GIT_SHA = '6ca4956';\nexport const BUILD_TIME = '2026-10-16T00:56:41.034Z';\nexport const SEMVER = {\n version: '0.36.2135',\n gitSha: '6ca4956',\n buildTime: '2026-10-16T00:56:41.034Z',\n} as const;\n","#!/usr/bin/env node\n/**\n * wod CLI Entry Point\n *\n * Dispatches to cliMain(process.argv.slice(2)).\n * Runs under Node (v18+) or Bun across all subcommands, including server and playground.\n */\nimport { cliMain } from '../cli/runner';\n\nvoid (async () => {\n const exitCode = await cliMain(process.argv.slice(2));\n process.exitCode = exitCode;\n})();\n"]}