@bitcobblers/wod-wiki-engine 0.35.2116 → 0.35.2117
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.
- package/dist/bin/wod.cjs +912 -937
- package/dist/bin/wod.cjs.map +1 -1
- package/dist/bin/wod.mjs +2 -2
- package/dist/{chunk-B2OYLNEZ.mjs → chunk-AKNXDA75.mjs} +735 -679
- package/dist/chunk-AKNXDA75.mjs.map +1 -0
- package/dist/chunk-Y6WO6MXS.mjs +187 -0
- package/dist/chunk-Y6WO6MXS.mjs.map +1 -0
- package/dist/{compiler-KTBR6OEL.mjs → compiler-MQRZVZQW.mjs} +64 -326
- package/dist/compiler-MQRZVZQW.mjs.map +1 -0
- package/dist/index.cjs +924 -936
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +93 -23
- package/dist/index.d.ts +93 -23
- package/dist/index.mjs +8 -8
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -5
- package/dist/chunk-6L5ZDZJ7.mjs +0 -15
- package/dist/chunk-6L5ZDZJ7.mjs.map +0 -1
- package/dist/chunk-B2OYLNEZ.mjs.map +0 -1
- package/dist/compiler-KTBR6OEL.mjs.map +0 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/seedbuild/contract.ts","../src/cli/seedbuild/effort-slugs.ts","../src/cli/seedbuild/filename.ts","../src/cli/seedbuild/frontmatter.ts","../src/cli/seedbuild/effort-file.ts","../src/cli/seedbuild/git-version.ts","../src/cli/seedbuild/report.ts","../src/cli/seedbuild/compiler.ts","../src/pack.ts","../src/store.ts","../src/ir.ts","../src/cli/parse.ts","../src/cli/run.ts","../src/cli/query.ts","../src/cli/loader.ts","../src/cli/db.ts","../src/cli/persist.ts","../src/exchange.ts","../src/cli/seed.ts","../src/cli/formatters.ts","../src/cli/runner.ts","../src/version.ts"],"names":["canvasRouteSlug","SEED_SCHEMA","TEMPLATE_CHUNK_ID","DASHBOARDS_CHUNK_ID","extractEffortSlugs","num","isEffortDiscipline","execSync","join","writeFileSync","existsSync","readdirSync","parseDashboardNote","buildDashboardDocument","isDashboardWidgetType","resolveWidgetType","parseQuery","readFileSync","toSegmentDataType","parseDocumentSections","parseScript","mkdirSync","createHash","relative","rmSync","dialectRegistry","realtimeProcessorRegistry","summaryProcessorRegistry","MetricType","getHints","createParser","toStoredOutputStatement","frozenNow","createCompiler","createMockClock","RuntimeStack","EventBus","ScriptRuntime","createAnalyticsEngineForBlock","StartSessionAction","NextEvent","toEventRows","toSummaryEventRows","bundledEfforts","QueryService","isPipelineQuery","result","isFindQuery","lines","WQL_TYPED_TAG_KEYS","scalarOf","rows","escapeCsvField","data","matchedCount","getFs","db","generateSeed","VERSION"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Seed contract — producer side.\n *\n * Mirrors the runtime consumer copy in the wod-wiki app\n * (apps/playground/src/types/seed.ts). The two MUST stay shape-compatible:\n * the app validates the manifest with `assertManifest` (required fields\n * only, extra fields tolerated) and applies chunk rows structurally.\n *\n * ponytail: the contract is duplicated rather than shared via a published\n * package to keep this repo standalone for content contributors; upgrade\n * path is moving these types into @bitcobblers/wod-wiki-core and importing\n * from both sides.\n */\n\n/** One row of a seed chunk — a source file's identity + raw text. */\nexport interface SeedRow {\n /** Repo-relative POSIX path of the source markdown (`markdown/…`). */\n path: string;\n /** Raw file text. */\n content: string;\n}\n\n/** Chunk payload kinds. `'block-index'` chunks carry precomputed BlockIndexRow[]; `'block-efforts'` chunks carry precomputed BlockEffort[]. */\nexport type ChunkKind = 'notes' | 'block-index' | 'block-efforts';\n\n/** One chunk entry in the seed manifest. */\nexport interface ManifestChunk {\n id: string;\n /** Path under the seed dir, e.g. `chunks/efforts.ab12cd34.json`. */\n path: string;\n /**\n * Full hex sha256 of the chunk bytes — the change-detection token for\n * checkpointed re-import.\n */\n sha256: string;\n bytes: number;\n /** Row count. */\n count: number;\n /** Row payload kind — defaults to `'notes'` (raw markdown rows). */\n kind?: ChunkKind;\n}\n\n/** `seed/manifest.json` — the only file a boot version check must fetch. */\nexport interface SeedManifest {\n /** Seed format version — bump on incompatible row-shape changes. */\n schema: number;\n /**\n * Monotonic import-order version: commit count of this repo\n * (`git rev-list --count HEAD`). Advances with every merged MR, so the\n * app can order checkpoints; per-chunk sha256 is the real change token.\n */\n version: number;\n /** Human-readable git version, e.g. `v1.2.0-4-gdeadbee` (git describe --long --always --dirty). */\n versionLabel?: string;\n /** Full HEAD commit sha this artifact was built from. */\n commit?: string;\n /** True when the working tree had uncommitted changes at build time. */\n dirty?: boolean;\n builtAt: string;\n chunks: ManifestChunk[];\n}\n\n/** v7 — notes carry their real corpus `sourceId` and dashboards chunk rows type 'dashboard'. Keep in sync with the app's copy. */\nexport const SEED_SCHEMA = 7;\n/** Playground template chunk — the new-playground template is playground intake, not journal content. */\nexport const TEMPLATE_CHUNK_ID = 'template';\n/** The prebuilt dashboard notes corpus — one notes chunk, gated by validateDashboardNote. */\nexport const DASHBOARDS_CHUNK_ID = 'dashboards';\n/** Prefix of the split block-index chunks (`block-index.<n>`). */\nexport const BLOCK_INDEX_CHUNK_PREFIX = 'block-index.';\n/** Prefix of the split block-efforts chunks (`block-efforts.<n>`). */\nexport const BLOCK_EFFORTS_CHUNK_PREFIX = 'block-efforts.';\n\n/** Frontmatter `route:` of a canvas page, minus the leading slash; null when\n * absent, degenerate ('/'), or the file is not a canvas page (`template:\n * canvas` required — section fragments and snippets carry `title:`/`section:`\n * frontmatter instead and must never become Library entries). Mirrors the\n * runtime's route resolution, so a guide's block-index noteId doubles as\n * its deep-link path. */\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 const route = fm?.[1]?.match(/^route:\\s*(\\S+)\\s*$/m)?.[1];\n if (!route) return null;\n return route.replace(/^\\//, '') || null;\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; 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, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"');\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-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","/**\n * Seed compiler — compiles a `markdown/` corpus into versioned seed\n * artifacts (manifest.json + content-hashed chunks + report.html).\n *\n * Ported from the wod-wiki-community content repo (its src/compiler.ts);\n * that repo's CI now builds through this module via `wod build`, and the\n * wod-wiki host (scripts/sync-seed.ts) imports generateSeed from the\n * engine package instead of a sibling checkout.\n *\n * <root>/dist/ (or --out <dir>)\n * ├── manifest.json ← schema + git version + chunk index (small, no-cache)\n * ├── report.html ← build benchmarks (sizes, timings, version stamp)\n * ├── block-parent-map.json ← legacy static-parent → sourcePath map (API migration)\n * └── chunks/\n * └── <id>.<sha256-8>.json ← immutable, content-hashed row arrays\n *\n * Notes chunks are JSON arrays of `{ path, content }` rows; `path` is the\n * repo-relative POSIX path of the source markdown, `content` the raw file\n * text. Chunk granularity is one corpus part — `canvas`, `dashboards`,\n * `efforts`, `template`, one chunk per collection/feed slug — so a content\n * edit re-fetches only the chunk that changed.\n *\n * `block-index.<n>` chunks (kind `'block-index'`) carry precomputed\n * BlockIndexRow[] rows for the collections/feeds/guides (canvas) corpus, and\n * `block-efforts.<n>` chunks carry precomputed BlockEffort[] containment\n * rows, so the runtime importer can populate its stores directly.\n *\n * The PARITY GATE: every `.md` file under `markdown/` must land in exactly\n * one notes chunk, or the build fails. Unknown top-level corpora are a hard\n * error, so a new directory cannot silently bypass the seed pipeline. The\n * DASHBOARD GATE (#906): every `markdown/dashboards/*.md` must be a\n * well-formed dashboard note in the locked #899 format with parseable WQL\n * bodies, so invalid dashboard content fails the build before the app ever\n * sees it.\n *\n * Determinism: chunk bytes depend only on corpus content (block-index\n * created-at derives from the corpus repo's git history, so it shifts only\n * when history does); the manifest `version` (commit count) is what\n * advances. Re-import compares per-chunk hashes against the stored\n * checkpoint, so a bumped version with identical hashes is a no-op.\n *\n * Versioning: `manifest.version` is the corpus repo's commit count,\n * `versionLabel` is `git describe --long --always --dirty`, `commit` is the\n * HEAD sha — see git-version.ts. CI checkouts must fetch full history.\n */\nimport { parseScript } from '@bitcobblers/wod-wiki-lang';\nimport { parseDocumentSections, type SegmentDataType, type Section } 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 BLOCK_EFFORTS_CHUNK_PREFIX,\n BLOCK_INDEX_CHUNK_PREFIX,\n DASHBOARDS_CHUNK_ID,\n SEED_SCHEMA,\n TEMPLATE_CHUNK_ID,\n canvasRouteSlug,\n type ChunkKind,\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; 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 * precompute the collections/feeds/guides (canvas) corpus into BlockIndexRow[]\n * at build time so the runtime importer can populate the `block_index` store\n * directly. Row identity (`static:<noteId>:<sectionId>:1`) matches what\n * analytics joins expect.\n */\nfunction toSegmentDataType(section: Pick<Section, 'type' | 'level'>): SegmentDataType {\n switch (section.type) {\n case 'time':\n case 'log':\n return 'wod';\n case 'title': {\n const l = section.level ?? 1;\n return `h${Math.min(Math.max(l, 1), 6)}` as SegmentDataType;\n }\n case 'frontmatter': return 'frontmatter';\n case 'markdown':\n case 'widget':\n case 'embed':\n case 'code':\n return 'markdown';\n default:\n return 'markdown';\n }\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/** Rows per block-index chunk (~4k rows keeps fetch + transaction sizes sane). */\nconst BLOCK_INDEX_ROWS_PER_CHUNK = 4000;\n\nexport function buildBlockIndexRows(markdownDir: string, corpusRoot: string): BlockIndexRow[] {\n const index: BlockIndexRow[] = [];\n\n // Collections: collections/{dir}/{file}.md (including collection READMEs as collection pages).\n for (const file of listMarkdownFiles(join(markdownDir, 'collections'))) {\n const rel = `markdown/collections/${file}`;\n const parts = rel.split('/');\n if (parts.length < 4) continue;\n const dirName = parts[parts.length - 2];\n const fileNameExt = parts[parts.length - 1];\n const isReadme = fileNameExt.toLowerCase() === 'readme.md';\n const fileName = fileNameExt.replace(/\\.md$/, '');\n const noteId = isReadme ? dirName : `${dirName}/${fileName}`;\n const content = readFileSync(join(corpusRoot, rel), 'utf8');\n const headingMatch = isReadme ? content.match(/^#\\s+(.+)$/m) : null;\n const noteTitle = headingMatch?.[1]?.trim() || fileToDisplayName(isReadme ? dirName : fileNameExt);\n const createdAt = getFileCreatedAt(rel, corpusRoot);\n\n const sections = parseDocumentSections(content);\n let position = 0;\n for (const section of sections) {\n const blockContentId = section.scriptBlock?.contentId ?? undefined;\n index.push({\n id: `static:${noteId}:${section.id}:1`,\n noteId,\n segmentId: section.id,\n segmentVersion: 1,\n position: position++,\n dataType: toSegmentDataType(section),\n blockContentId,\n rawContent: section.displayContent,\n noteTitle,\n createdAt,\n isStatic: true,\n sourceId: isReadme ? `collection:${dirName}` : `collection:${noteId}`,\n sourcePath: rel,\n });\n }\n }\n\n // Feeds: feeds/{dir}/{date}/{file}.md (READMEs excluded).\n for (const file of listMarkdownFiles(join(markdownDir, 'feeds'))) {\n const rel = `markdown/feeds/${file}`;\n const parts = rel.split('/');\n if (parts.length < 5) continue;\n const dirName = parts[parts.length - 3];\n const dateKey = parts[parts.length - 2];\n const fileNameExt = parts[parts.length - 1];\n if (fileNameExt.toLowerCase() === 'readme.md') continue;\n\n const fileName = fileNameExt.replace(/\\.md$/, '');\n const noteId = `feeds/${dirName}/${dateKey}/${fileName}`;\n const noteTitle = fileToDisplayName(fileNameExt);\n const content = readFileSync(join(corpusRoot, rel), 'utf8');\n\n const sections = parseDocumentSections(content);\n let position = 0;\n for (const section of sections) {\n const blockContentId = section.scriptBlock?.contentId ?? undefined;\n index.push({\n id: `static:${noteId}:${section.id}:1`,\n noteId,\n segmentId: section.id,\n segmentVersion: 1,\n position: position++,\n dataType: toSegmentDataType(section),\n blockContentId,\n rawContent: section.displayContent,\n noteTitle,\n createdAt: feedDateToCreatedAt(dateKey),\n isStatic: true,\n sourceId: `feed:${noteId}`,\n sourcePath: rel,\n });\n }\n }\n\n // Guides: canvas/{dir}/{file}.md — the syntax/guide corpus. Indexed pages\n // are exactly the routable ones (`template: canvas` + a non-degenerate\n // frontmatter `route:`); noteId is that route minus the leading slash, so a\n // Library row deep-links straight to the canvas page. READMEs and routeless\n // fragments fail the same test (home/README's route is '/', with no path\n // identity) — no special-casing needed.\n for (const file of listMarkdownFiles(join(markdownDir, 'canvas'))) {\n const rel = `markdown/canvas/${file}`;\n const content = readFileSync(join(corpusRoot, rel), 'utf8');\n const noteId = canvasRouteSlug(content);\n if (!noteId) continue;\n\n const fileNameExt = file.split('/').pop() ?? file;\n const noteTitle = fileToDisplayName(fileNameExt);\n const createdAt = getFileCreatedAt(rel, corpusRoot);\n const sections = parseDocumentSections(content);\n let position = 0;\n for (const section of sections) {\n const blockContentId = section.scriptBlock?.contentId ?? undefined;\n index.push({\n id: `static:${noteId}:${section.id}:1`,\n noteId,\n segmentId: section.id,\n segmentVersion: 1,\n position: position++,\n dataType: toSegmentDataType(section),\n blockContentId,\n rawContent: section.displayContent,\n noteTitle,\n createdAt,\n isStatic: true,\n sourceId: `guides:${noteId}`,\n sourcePath: rel,\n });\n }\n }\n\n return index;\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 script = parseScript(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): BlockEffort[] {\n const efforts: BlockEffort[] = [];\n const { aliasToCanonical } = loadExistingEffortMap(markdownDir);\n const blocks = buildBlockIndexRows(markdownDir, corpusRoot);\n for (const block of blocks) {\n if (block.dataType !== 'wod' || !block.rawContent) continue;\n const script = parseScript(block.rawContent);\n const effortSlugs = extractEffortSlugs(script.statements);\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 efforts.push({\n id: `${block.id}:${canonicalSlug}`,\n noteId: block.noteId,\n blockId: block.segmentId,\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 * legacy route parent id → canonical corpus source path. The API migration\n * (and the runtime importer's noteId mapping) reconcile legacy static block\n * rows — whose noteId is a path stem — onto imported notes through the full\n * sourcePath; ambiguity here is a generation bug and fails the build.\n */\nexport function buildStaticParentMap(blockRows: BlockIndexRow[]): Record<string, { sourcePath: string; sourceId?: string }> {\n const map: Record<string, { sourcePath: string; sourceId?: string }> = {};\n for (const row of blockRows) {\n if (!row.sourcePath) continue;\n const prev = map[row.noteId];\n if (prev && prev.sourcePath !== row.sourcePath) {\n throw new Error(\n `[generate-seed] ambiguous static parent '${row.noteId}' maps to both '${prev.sourcePath}' and '${row.sourcePath}'`,\n );\n }\n map[row.noteId] = { sourcePath: row.sourcePath, sourceId: row.sourceId };\n }\n return map;\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, 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 chunksDir = join(outDir, 'chunks');\n rmSync(outDir, { recursive: true, force: true });\n mkdirSync(chunksDir, { recursive: true });\n\n const manifestChunks: ManifestChunk[] = [];\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 path: p,\n content: readFileSync(templateSource ?? join(corpusRoot, p), 'utf8'),\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 // ── Block-index chunks: precomputed corpus rows for the `block_index` store ──\n const tBlockIndex = Date.now();\n const blockRows = buildBlockIndexRows(markdownDir, corpusRoot);\n passMs.blockIndex = Date.now() - tBlockIndex;\n // Legacy parent → sourcePath canonical map, for API-side migration of real\n // snapshots whose static rows predate the sourcePath field.\n writeFileSync(\n join(outDir, 'block-parent-map.json'),\n JSON.stringify(buildStaticParentMap(blockRows), null, 2) + '\\n',\n );\n for (let i = 0; blockRows.length > 0 && i * BLOCK_INDEX_ROWS_PER_CHUNK < blockRows.length; i++) {\n const part = blockRows.slice(i * BLOCK_INDEX_ROWS_PER_CHUNK, (i + 1) * BLOCK_INDEX_ROWS_PER_CHUNK);\n if (part.length === 0) break;\n const id = `${BLOCK_INDEX_CHUNK_PREFIX}${i}`;\n const bytes = Buffer.from(JSON.stringify(part), '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: part.length, kind: 'block-index' satisfies ChunkKind });\n }\n\n // ── Block-efforts chunks: precomputed exercise containment rows ──\n const tBlockEfforts = Date.now();\n const effortRows = buildBlockEffortRows(markdownDir, corpusRoot);\n passMs.blockEfforts = Date.now() - tBlockEfforts;\n for (let i = 0; effortRows.length > 0 && i * BLOCK_INDEX_ROWS_PER_CHUNK < effortRows.length; i++) {\n const part = effortRows.slice(i * BLOCK_INDEX_ROWS_PER_CHUNK, (i + 1) * BLOCK_INDEX_ROWS_PER_CHUNK);\n if (part.length === 0) break;\n const id = `${BLOCK_EFFORTS_CHUNK_PREFIX}${i}`;\n const bytes = Buffer.from(JSON.stringify(part), '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: part.length, kind: 'block-efforts' satisfies ChunkKind });\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 * Language Pack API — umbrella sugar over per-package slices\n *\n * Implements docs/adr/language-pack-api.md.\n * Provides defineLanguagePack() factory and registerLanguagePack() fan-out\n * into core tag identity, lang dialect stack, and analytics registries.\n */\n\nimport type { IDialect } from '@bitcobblers/wod-wiki-core';\nimport type { IRealtimeProcessor, ISummaryProcessor } from '@bitcobblers/wod-wiki-lang';\nimport {\n dialectRegistry,\n realtimeProcessorRegistry,\n summaryProcessorRegistry,\n} from '@bitcobblers/wod-wiki-lang';\n\nexport interface LanguagePackIdentity {\n id?: string;\n name: string;\n tags?: readonly string[];\n aliases?: readonly string[];\n runnable?: boolean;\n}\n\nexport interface LanguagePackLangSlice {\n analyzer?: new () => IDialect;\n analytics?: ReadonlyArray<new () => IRealtimeProcessor | ISummaryProcessor>;\n}\n\nexport interface LanguagePackUiSlice {\n widgetBlock?: unknown;\n}\n\nexport interface LanguagePack {\n identity?: LanguagePackIdentity;\n lang?: LanguagePackLangSlice;\n ui?: LanguagePackUiSlice;\n}\n\nconst activePacks = new Map<string, LanguagePack>();\n\nexport function defineLanguagePack(pack: LanguagePack): LanguagePack {\n return pack;\n}\n\nexport function registerLanguagePack(pack: LanguagePack): void {\n const packId = pack.identity?.id ?? pack.identity?.name ?? 'anonymous-pack';\n activePacks.set(packId, pack);\n\n if (pack.lang?.analyzer) {\n const AnalyzerCtor = pack.lang.analyzer;\n const instance = new AnalyzerCtor();\n dialectRegistry.register(instance);\n }\n\n if (pack.lang?.analytics) {\n for (const ProcessorCtor of pack.lang.analytics) {\n const instance = new ProcessorCtor();\n if ('processOutput' in instance) {\n realtimeProcessorRegistry.register(instance as IRealtimeProcessor);\n }\n if ('processSummary' in instance) {\n summaryProcessorRegistry.register(instance as ISummaryProcessor);\n }\n }\n }\n}\n\nexport function unregisterLanguagePack(packOrId: LanguagePack | string): void {\n const packId = typeof packOrId === 'string'\n ? packOrId\n : (packOrId.identity?.id ?? packOrId.identity?.name ?? 'anonymous-pack');\n\n const pack = activePacks.get(packId);\n activePacks.delete(packId);\n\n if (pack?.lang?.analyzer) {\n const instance = new pack.lang.analyzer();\n dialectRegistry.unregister(instance.id);\n } else if (typeof packOrId === 'string') {\n dialectRegistry.unregister(packOrId);\n }\n\n if (pack?.lang?.analytics) {\n for (const ProcessorCtor of pack.lang.analytics) {\n const instance = new ProcessorCtor();\n if ('processOutput' in instance) {\n realtimeProcessorRegistry.unregister((instance as IRealtimeProcessor).id);\n }\n if ('processSummary' in instance) {\n summaryProcessorRegistry.unregister((instance as ISummaryProcessor).id);\n }\n }\n }\n}\n\nexport function listLanguagePacks(): LanguagePack[] {\n return Array.from(activePacks.values());\n}\n\nexport function getRegisteredLanguagePacks(): LanguagePack[] {\n return Array.from(activePacks.values());\n}\n","/**\n * In-memory UnifiedEventStore — the state-free store seam for QueryService,\n * the CLI query runner, and the Storybook workbench.\n *\n * One adapter over an in-memory row list:\n * - inMemoryEventStore: the UnifiedEventStore contract (ticket 003)\n */\nimport type { EventRecord } from '@bitcobblers/wod-wiki-core';\nimport type { EventStore } from '@bitcobblers/wod-wiki-wql';\n\nexport function inMemoryEventStore(events: readonly EventRecord[]): EventStore {\n const rows = [...events];\n return {\n getEventsByTimeRange: async (start: number, end: number) =>\n rows.filter((r) => r.timestamp >= start && r.timestamp <= end),\n getEventsByResult: async (resultId: string) =>\n rows.filter((r) => r.resultId === resultId),\n getEventsForNote: async (noteId: string) =>\n rows.filter((r) => r.noteId === noteId),\n getEventsByContent: async (blockContentId: string) =>\n rows.filter((r) => r.blockContentId === blockContentId),\n scanAll: async () => rows,\n appendEvents: async (appended) => { rows.push(...appended); },\n finalizeSummaries: async (resultId, finals) => {\n // Ticket 005: only engine-authored summaries are finalize-owned;\n // user-authored summaries (origin 'user', e.g. wellness) are\n // reconcile-owned and must survive a result finalize.\n for (let i = rows.length - 1; i >= 0; i--) {\n const row = rows[i];\n if (row.resultId === resultId && row.grain === 'summary' && row.origin !== 'user') rows.splice(i, 1);\n }\n rows.push(...finals);\n },\n deleteEvents: async (ids) => {\n const doomed = new Set(ids);\n for (let i = rows.length - 1; i >= 0; i--) {\n if (doomed.has(rows[i].id)) rows.splice(i, 1);\n }\n },\n };\n}\n","/**\n * Pure JSON Intermediate Representation (IR) Schemas & Envelope\n *\n * Implements wayfinder #955 and research asset `docs/research/json-ir-schemas-2026-08-17.md`.\n * Freezes the existing result vocabulary (QueryResult, RowsQueryResult, FindQueryResult,\n * StoredOutputStatement, AnalyticsDataPoint, WorkoutResult, StatementNode) in a\n * versioned envelope safe for JSON round-trips.\n */\n\nimport type {\n ICodeStatement,\n AnalyticsDataPoint,\n Note,\n NoteSegment,\n BlockIndexRow,\n Session,\n StoredOutputStatement,\n WorkoutResults,\n} from '@bitcobblers/wod-wiki-core';\nimport { MetricType } from '@bitcobblers/wod-wiki-core';\nimport type { IScript, IEffort } from '@bitcobblers/wod-wiki-lang';\nimport { getHints } from '@bitcobblers/wod-wiki-lang';\n\nexport type IrKind =\n | 'fact-set'\n | 'result-set'\n | 'note-set'\n | 'corpus'\n | 'query-result'\n | 'find-result'\n | 'rows-result'\n | 'pipeline-result'\n | 'parse-tree'\n | 'execution-log';\n\n/**\n * Universal JSON envelope for all headless IR fixtures and output artifacts.\n */\nexport interface WodWikiIRFile<T> {\n $schema: 'https://wod-wiki.dev/ir/v1.json';\n kind: IrKind;\n generatedAt: number;\n source: string;\n data: T;\n}\n\nexport function createIRFile<T>(\n kind: IrKind,\n data: T,\n optionsOrSource?: string | { source?: string; generatedAt?: number },\n generatedAt?: number,\n): WodWikiIRFile<T> {\n let source = 'wod:headless';\n let genAt = Date.now();\n if (typeof optionsOrSource === 'string') {\n source = optionsOrSource;\n if (generatedAt !== undefined) genAt = generatedAt;\n } else if (optionsOrSource && typeof optionsOrSource === 'object') {\n if (optionsOrSource.source) source = optionsOrSource.source;\n if (optionsOrSource.generatedAt !== undefined) genAt = optionsOrSource.generatedAt;\n }\n return {\n $schema: 'https://wod-wiki.dev/ir/v1.json',\n kind,\n generatedAt: genAt,\n source,\n data,\n };\n}\n\nexport function isIRFile<T = unknown>(obj: unknown): obj is WodWikiIRFile<T> {\n if (!obj || typeof obj !== 'object') return false;\n const cand = obj as Partial<WodWikiIRFile<T>>;\n return (\n cand.$schema === 'https://wod-wiki.dev/ir/v1.json' &&\n typeof cand.kind === 'string' &&\n typeof cand.generatedAt === 'number' &&\n typeof cand.source === 'string' &&\n 'data' in cand\n );\n}\n\n// ── Parse Tree IR Models (#955) ─────────────────────────────────────────────\n\nexport interface MetricNode {\n type: string;\n image?: string;\n value?: unknown;\n origin?: string;\n}\n\nexport interface StatementNode {\n id: number;\n type: 'statement' | 'duration' | 'rounds' | 'rest' | 'segment' | 'root';\n raw: string;\n from: number;\n to: number;\n metrics: MetricNode[];\n hints?: string[];\n children?: StatementNode[];\n}\n\nexport function statementToNode(stmt: ICodeStatement, idMap: Map<number, ICodeStatement>): StatementNode {\n const meta = stmt.meta;\n const metrics: MetricNode[] = stmt.metrics.toArray().map((m) => ({\n type: m.type as string,\n ...(m.image !== undefined ? { image: m.image } : {}),\n ...(m.value !== undefined ? { value: m.value } : {}),\n ...(m.origin !== undefined ? { origin: m.origin } : {}),\n }));\n\n const raw = meta?.raw ?? '';\n const from = meta?.startOffset ?? 0;\n const to = meta?.endOffset ?? (from + raw.length);\n\n const durationFrag = stmt.metrics.find((m) => m.type === MetricType.Duration || m.type === 'duration');\n const roundsFrag = stmt.metrics.find((m) => m.type === MetricType.Rounds || m.type === 'rounds');\n const type: StatementNode['type'] = durationFrag ? 'duration' : roundsFrag ? 'rounds' : 'statement';\n\n const hints = getHints(stmt);\n\n const childIds = (stmt.children ?? []).flat();\n const children: StatementNode[] = childIds\n .map((cid) => idMap.get(cid))\n .filter((c): c is ICodeStatement => c !== undefined)\n .map((c) => statementToNode(c, idMap));\n\n return {\n id: stmt.id,\n type,\n raw,\n from,\n to,\n metrics,\n ...(hints.length > 0 ? { hints } : {}),\n ...(children.length > 0 ? { children } : {}),\n };\n}\n\n/** Builds a StatementNode tree from a parsed WhiteboardScript. */\nexport function buildStatementTree(script: IScript): StatementNode {\n const idMap = new Map(script.statements.map((s) => [s.id, s]));\n const topLevel = script.statements.filter((s) => s.parent === undefined || !idMap.has(s.parent));\n\n if (topLevel.length === 1 && topLevel[0].children.length > 0) {\n return statementToNode(topLevel[0], idMap);\n }\n\n return {\n id: 0,\n type: 'root',\n raw: script.source,\n from: 0,\n to: script.source.length,\n metrics: [],\n children: topLevel.map((s) => statementToNode(s, idMap)),\n };\n}\n\n// ── Execution Log IR Models (#955) ──────────────────────────────────────────\n\nexport interface ExecutionLog {\n results: WorkoutResults;\n logs: StoredOutputStatement[];\n statements?: StoredOutputStatement[];\n blockKey?: string;\n sourceScript?: string;\n}\n\n// ── Corpus IR Models (#955) ─────────────────────────────────────────────────\n\nexport interface CorpusIRData {\n notes?: Note[];\n segments?: NoteSegment[];\n blocks?: BlockIndexRow[];\n results?: Session[];\n facts?: AnalyticsDataPoint[];\n efforts?: IEffort[];\n logs?: StoredOutputStatement[];\n tags?: Record<string, string[]>;\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 '../ir';\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 '../ir';\nimport { ParseSyntaxError } from './parse';\n\nexport interface RunOptions {\n sport?: string;\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: 'cli-block',\n content: source,\n statements: script.statements,\n sport: options.sport,\n version: 1,\n startLine: 0,\n endLine: 0,\n 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 },\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 } from '../store';\nimport { toEventRows, toSummaryEventRows } from '@bitcobblers/wod-wiki-wql';\nimport type { AnalyticsDataPoint, Note, BlockIndexRow, Session, EventRecord, StoredOutputStatement } 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 { createIRFile, isIRFile, type IrKind, type WodWikiIRFile, type ExecutionLog, type CorpusIRData } from '../ir';\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 efforts: IEffort[];\n noteTags: Record<string, string[]>;\n}\n\n/** Pre-V21 corpus rows carried the statement stream inline under `data`. */\nfunction legacyLogsOf(result: Session): StoredOutputStatement[] {\n const legacy = result as Session & { data?: { logs?: StoredOutputStatement[] } };\n return legacy.data?.logs ?? [];\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 // One event stream: direct event records, legacy fact fixtures wrapped\n // as summary rows, plus results-derived event + summary rows.\n const identity = (r: (typeof data.results)[number]) => ({\n noteId: r.noteId,\n resultId: r.id,\n segmentId: r.segmentId,\n segmentVersion: r.segmentVersion,\n blockContentId: r.blockContentId,\n origin: r.origin,\n pageId: r.pageId,\n workoutTimestamp: r.createdAt,\n });\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 segmentId: f.segmentId,\n segmentVersion: f.segmentVersion,\n } as EventRecord)),\n ...data.results.flatMap((r) => {\n const logs = legacyLogsOf(r);\n return [...toEventRows(logs, identity(r)), ...toSummaryEventRows(logs, identity(r))];\n }),\n ];\n\n const eventStore = inMemoryEventStore(events);\n\n const noteStore: NoteQueryStore = {\n getAllNotes: async () => [...data.notes],\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 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 (obj.kind === 'event-journal' || Array.isArray(obj.records)) {\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 (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.tags) data.noteTags = corpus.tags;\n\n // If logs are provided without separate results, synthesize results\n if (corpus.logs && (!corpus.results || corpus.results.length === 0)) {\n const syntheticResult: Session = {\n id: 'corpus-result-1',\n noteId: 'corpus-note-1',\n blockContentId: 'corpus-block-1',\n origin: 'journal',\n createdAt: corpus.logs[0]?.timeSpan?.started ?? Date.now(),\n startTime: corpus.logs[0]?.timeSpan?.started ?? Date.now(),\n endTime: corpus.logs[corpus.logs.length - 1]?.timeSpan?.ended ?? Date.now(),\n duration: 0,\n completed: true,\n };\n data.results = [syntheticResult];\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 resultId = 'stdin-result-1';\n const workoutResult: Session = {\n id: resultId,\n noteId: 'stdin-note-1',\n blockContentId: 'stdin-block-1',\n origin: 'journal',\n createdAt: executionLog.results.startTime,\n startTime: executionLog.results.startTime,\n endTime: executionLog.results.endTime,\n duration: executionLog.results.duration ?? 0,\n completed: executionLog.results.completed,\n };\n data.results = [workoutResult];\n data.eventRecords = toEventRows(executionLog.logs, {\n noteId: workoutResult.noteId,\n resultId: workoutResult.id,\n segmentId: workoutResult.segmentId,\n segmentVersion: workoutResult.segmentVersion,\n blockContentId: workoutResult.blockContentId,\n origin: workoutResult.origin,\n pageId: workoutResult.pageId,\n workoutTimestamp: workoutResult.createdAt,\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\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 * 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 '../pack';\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 * 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 { Note, NoteSegment, 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 {\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; 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 initializeStore(db: Database): Promise<void>;\n initializeDomain(db: Database): Promise<void>;\n storeDefinition(name: string): StoreDef;\n listRows(conn: SqlConnection, def: StoreDef, range?: RangeDTO, count?: number, indexName?: string): Promise<unknown[]>;\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 /** Absolute path of the underlying .sqlite file. */\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/** Open (creating if necessary) a local sqlite database with the wodwiki schema. */\nexport async function openCliDb(dbPath?: string): 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 resolved = resolveDbPath(dbPath);\n nodeFs().mkdirSync(nodePath().dirname(resolved), { recursive: true });\n const db = sql.libsqlDatabase(createClient({ url: `file:${resolved}` }));\n await sql.initializeStore(db);\n await sql.initializeDomain(db);\n return { db, path: resolved, 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 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 segments: NoteSegment[];\n}\n\nexport interface SessionBundle {\n session: Session;\n events: EventRecord[];\n}\n\n/** Fetch a note + all its segment rows (every version). */\nexport async function getNoteBundle(db: Database, noteId: string): Promise<NoteBundle> {\n const sql = await loadSql();\n const notes = (await allRows(sql, db, 'notes')) as Array<{ id: string } & Record<string, unknown>>;\n const note = notes.find((n) => n.id === noteId) as Note | undefined;\n const segments = (await rowsByIndex(sql, db, 'segments', 'by-note', noteId)) as NoteSegment[];\n return { note, segments };\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 sessions = (await allRows(sql, db, 'sessions')) as Array<{ id: string } & Record<string, unknown>>;\n const session = sessions.find((s) => s.id === resultId) as Session | undefined;\n if (!session) return undefined;\n const events = ((await allRows(sql, db, 'events')) as EventRecord[]).filter((e) => e.resultId === resultId);\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","/**\n * Playground-parity persistence for `wod parse` / `wod run`.\n *\n * Replicates what the playground writes when a note is saved and when a\n * workout is recorded (IndexedDBContentProvider.saveEntry +\n * IndexedDBNotePersistence.mutateNote), against the shared sqlite storage:\n *\n * - parse → one `notes` row + one `segments` row per document section +\n * rebuilt `block_index` / `block_efforts` rows (+ domain projections)\n * - run → one `sessions` row + `grain:'event'` rows (1:1 per output\n * statement) + `grain:'summary'` rows (toEventRows/toSummaryEventRows)\n *\n * Re-parsing a source versions its segments (old rows become isHistory)\n * instead of duplicating the note — segment ids are positional, so sessions\n * keep pointing at the latest version.\n */\n\nimport type {\n BlockEffort,\n BlockIndexRow,\n Note,\n NoteSegment,\n NoteTag,\n Session,\n StoreName,\n Tag,\n TxOp,\n} from '@bitcobblers/wod-wiki-storage';\nimport type { ExecutionLog } from '../ir';\nimport type { EventRecord, StoredOutputStatement, WorkoutResults } from '@bitcobblers/wod-wiki-core';\nimport type { Section, ICodeStatement } from '@bitcobblers/wod-wiki-core';\nimport { parseDocumentSections } 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, type SqlApi } from './db';\n\ntype SegmentDataType = NoteSegment['dataType'];\n\n/** Mirror of the playground's toSegmentDataType (IndexedDBContentProvider). */\nfunction toSegmentDataType(section: Pick<Section, 'type' | 'level'>): SegmentDataType {\n switch (section.type) {\n case 'time':\n case 'log':\n return 'wod';\n case 'title': {\n const level = Math.min(6, Math.max(1, section.level ?? 1));\n return `h${level}` as SegmentDataType;\n }\n case 'frontmatter':\n return 'frontmatter';\n case 'markdown':\n default:\n return 'markdown';\n }\n}\n\n/** Mirror of sectionSourceFragments — exact document slice per section. */\nfunction sectionSourceFragments(content: string, sections: readonly Section[]): string[] {\n const starts = [0];\n for (let i = 0; i < content.length; i++) {\n if (content[i] === '\\n') starts.push(i + 1);\n }\n return sections.map((section, index) => content.slice(\n starts[section.startLine],\n index + 1 < sections.length ? starts[sections[index + 1].startLine] : content.length,\n ));\n}\n\n/** Read ScriptBlock.contentId with runtime narrowing (segment.data is loosely typed). */\nfunction scriptBlockContentId(data: unknown): string | undefined {\n if (data && typeof data === 'object' && 'contentId' in data && typeof data.contentId === 'string') {\n return data.contentId;\n }\n return undefined;\n}\n\n/** Mirror of StorageService.extractEffortSlugs. */\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\nasync function rowsByNote(sql: SqlApi, db: CliDb['db'], store: StoreName, noteId: string): Promise<unknown[]> {\n return sql.listRows(db, sql.storeDefinition(store), { only: noteId }, undefined, 'by-note');\n}\n\nexport interface PersistNoteOptions {\n source: string;\n /** File path or '-' (stdin) — drives the stable note identity. */\n sourceLabel: string;\n /** Explicit note id — exported markdown carries a `wod-note-id` stamp\n * (exchange.ts) which overrides the path-derived id when present, making\n * download → edit → parse a round-trip into the same note. */\n noteId?: string;\n title?: string;\n /** Frontmatter tags (general + typed, e.g. equipment) to materialize:\n * the note owns its tag set, so existing note_tags links are replaced. */\n tags?: Array<{ label: string; type?: string }>;\n now?: number;\n}\n\nexport interface PersistNoteResult {\n noteId: string;\n note: Note;\n segments: number;\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/** Upsert the note for a parsed source with fresh segments + block index. */\nexport async function persistNote(db: CliDb, options: PersistNoteOptions): Promise<PersistNoteResult> {\n const sql = await loadSql();\n const now = options.now ?? Date.now();\n const noteId = options.noteId ?? stableNoteId(options.sourceLabel, options.source);\n const title = options.title ?? titleFromLabel(options.sourceLabel);\n\n const sections = parseDocumentSections(options.source);\n const fragments = sectionSourceFragments(options.source, sections);\n const existingNote = (await noteById(sql, db.db, noteId)) as Note | undefined;\n const priorSegments = (await rowsByNote(sql, db.db, 'segments', noteId)) as NoteSegment[];\n\n // Version bump: existing segment ids get max(version)+1, new ids get 1;\n // every prior non-history row is marked history inside the same tx.\n const versionBySegmentId: Record<string, number> = {};\n for (const segment of priorSegments) {\n versionBySegmentId[segment.id] = Math.max(versionBySegmentId[segment.id] ?? 0, segment.version);\n }\n\n const createdAt = existingNote?.createdAt ?? now;\n const note: Note = {\n id: noteId,\n title,\n type: existingNote?.type ?? 'note',\n date: existingNote?.date ?? now,\n createdAt,\n };\n\n const ops: TxOp[] = [];\n const segments: NoteSegment[] = sections.map((section, position) => {\n const id = `${noteId}:${section.id}`;\n const version = (versionBySegmentId[id] ?? 0) + 1;\n return {\n id,\n version,\n noteId,\n position,\n dataType: toSegmentDataType(section),\n data: section.scriptBlock || null,\n rawContent: section.displayContent,\n sourceContent: fragments[position],\n createdAt: version === 1 ? createdAt : now,\n updatedAt: now,\n isHistory: false,\n };\n });\n for (const segment of priorSegments) {\n if (segment.isHistory !== true) {\n ops.push({ op: 'put', store: 'segments', value: { ...segment, isHistory: true, updatedAt: now } });\n }\n }\n ops.push({ op: 'put', store: 'notes', value: note });\n for (const segment of segments) ops.push({ op: 'put', store: 'segments', value: segment });\n\n // Block index rebuild: replace every derived row for this note.\n const priorBlocks = (await rowsByNote(sql, db.db, 'block_index', noteId)) as BlockIndexRow[];\n const priorBlockEfforts = (await rowsByNote(sql, db.db, 'block_efforts', noteId)) as BlockEffort[];\n for (const row of priorBlocks) ops.push({ op: 'delete', store: 'block_index', key: row.id });\n for (const row of priorBlockEfforts) ops.push({ op: 'delete', store: 'block_efforts', key: row.id });\n\n let blockCount = 0;\n let effortCount = 0;\n for (const segment of segments) {\n const blockContentId = segment.dataType === 'wod' ? scriptBlockContentId(segment.data) : undefined;\n ops.push({\n op: 'put',\n store: 'block_index',\n value: {\n id: `${noteId}:${segment.id}:${segment.version}`,\n noteId,\n segmentId: segment.id,\n segmentVersion: segment.version,\n position: segment.position,\n dataType: segment.dataType,\n blockContentId,\n rawContent: segment.rawContent,\n noteTitle: title,\n createdAt: segment.createdAt,\n } satisfies BlockIndexRow,\n });\n blockCount += 1;\n\n if (segment.dataType === 'wod' && segment.rawContent) {\n const script = parseScript(segment.rawContent);\n for (const effortSlug of extractEffortSlugs(script.statements)) {\n ops.push({\n op: 'put',\n store: 'block_efforts',\n value: {\n id: `${noteId}:${segment.id}:${effortSlug}`,\n noteId,\n blockId: segment.id,\n blockContentId,\n effortSlug,\n createdAt: segment.createdAt,\n } satisfies BlockEffort,\n });\n effortCount += 1;\n }\n }\n }\n\n // Tag graph: the note's frontmatter owns its tag set — replace existing\n // links. Tags are shared: get-or-create by label, upgrading an untyped\n // tag row when a typed use arrives (SeedImportStorage parity).\n let tagCount = 0;\n if (options.tags) {\n const priorLinks = (await rowsByNote(sql, db.db, 'note_tags', noteId)) as NoteTag[];\n for (const link of priorLinks) ops.push({ op: 'delete', store: 'note_tags', key: link.id });\n const tagByLabel = new Map(\n ((await sql.listRows(db.db, sql.storeDefinition('tags'))) as Tag[]).map((t) => [t.label, t]),\n );\n for (const item of options.tags) {\n const label = item.label.trim();\n if (!label) continue;\n let tag = tagByLabel.get(label);\n if (!tag) {\n tag = { id: randomId(), label, type: item.type, createdAt: now };\n tagByLabel.set(label, tag);\n ops.push({ op: 'put', store: 'tags', value: tag });\n } else if (item.type && !tag.type) {\n tag = { ...tag, type: item.type };\n tagByLabel.set(label, tag);\n ops.push({ op: 'put', store: 'tags', value: tag });\n }\n tagCount += 1;\n ops.push({\n op: 'put',\n store: 'note_tags',\n // Deterministic junction id (unique [noteId, tagId] index).\n value: { id: uuid5(CLI_UUID_NAMESPACE, `note-tag:${noteId}:${tag.id}`), noteId, tagId: tag.id } satisfies NoteTag,\n });\n }\n }\n\n await db.db.transaction(async (tx) => {\n await sql.refreshDomain(tx, ops);\n });\n\n return {\n noteId,\n note,\n segments: segments.length,\n blocks: blockCount,\n efforts: effortCount,\n tags: tagCount,\n created: !existingNote,\n };\n}\n\nasync function noteById(sql: SqlApi, db: CliDb['db'], noteId: string): Promise<unknown> {\n const rows = await sql.listRows(db, sql.storeDefinition('notes'));\n return (rows as Array<{ id: string }>).find((row) => row.id === noteId);\n}\n\nexport interface PersistRunOptions {\n source: string;\n sourceLabel: string;\n title?: string;\n executionLog: ExecutionLog;\n now?: number;\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\n/**\n * Record an execution against the note for its source: session row +\n * event/summary rows, the same grain model the playground writes.\n */\nexport async function persistRun(db: CliDb, options: PersistRunOptions): Promise<PersistRunResult> {\n const sql = await loadSql();\n const results: WorkoutResults = options.executionLog.results;\n const logs: StoredOutputStatement[] = options.executionLog.logs ?? [];\n\n // Ensure the note exists (playground saves pending content before recording).\n const noteState = await persistNote(db, {\n source: options.source,\n sourceLabel: options.sourceLabel,\n title: options.title,\n now: options.now,\n });\n\n // The run block is the first wod segment of the note (document order).\n const segments = ((await rowsByNote(sql, db.db, 'segments', noteState.noteId)) as NoteSegment[])\n .filter((s) => s.isHistory !== true && s.dataType === 'wod')\n .sort((a, b) => (a.position ?? 0) - (b.position ?? 0));\n const runSegment = segments[0];\n const blockContentId = runSegment ? scriptBlockContentId(runSegment.data) : undefined;\n\n const resultId = randomId();\n const session: Session = {\n id: resultId,\n segmentId: runSegment?.id,\n segmentVersion: runSegment?.version,\n noteId: noteState.noteId,\n blockId: runSegment?.id,\n blockContentId,\n origin: 'journal',\n status: results.completed === false ? 'in-progress' : 'completed',\n startTime: results.startTime,\n endTime: results.endTime,\n duration: results.duration ?? 0,\n completed: results.completed,\n createdAt: results.endTime || Date.now(),\n };\n\n const identity = {\n noteId: noteState.noteId,\n resultId,\n segmentId: session.segmentId,\n segmentVersion: session.segmentVersion,\n blockContentId,\n origin: session.origin,\n pageId: session.pageId,\n workoutTimestamp: session.createdAt,\n };\n const eventRows = toEventRows(logs, identity);\n const summaryRows = toSummaryEventRows(logs, identity);\n\n await db.db.transaction(async (tx) => {\n await sql.putRow(tx, sql.storeDefinition('sessions'), session);\n const eventsDef = sql.storeDefinition('events');\n for (const row of [...eventRows, ...summaryRows]) await sql.putRow(tx, eventsDef, row);\n });\n\n return {\n noteId: noteState.noteId,\n resultId,\n session,\n events: eventRows.length,\n summaries: summaryRows.length,\n noteCreated: noteState.created,\n };\n}\n\n/**\n * Upsert an exported session + its events verbatim (id-keyed, so re-imports\n * are idempotent). Used by `wod import session` for round-tripping a\n * downloaded CSV into the same — or a clean — database. Rows referencing a\n * note the target database does not have get a stub note so the session\n * stays visible and queryable.\n */\nexport async function persistSessionBundle(\n db: CliDb,\n session: Session,\n events: readonly EventRecord[],\n): Promise<{ events: number; noteCreated: boolean }> {\n const sql = await loadSql();\n const existing = await noteById(sql, db.db, session.noteId);\n let noteCreated = false;\n if (!existing) {\n noteCreated = true;\n const now = session.createdAt || Date.now();\n await db.db.transaction(async (tx) => {\n await sql.putRow(tx, sql.storeDefinition('notes'), {\n id: session.noteId,\n title: `imported-${session.noteId.slice(0, 8)}`,\n createdAt: now,\n type: 'note',\n });\n });\n }\n await db.db.transaction(async (tx) => {\n await sql.putRow(tx, sql.storeDefinition('sessions'), session);\n const eventsDef = sql.storeDefinition('events');\n for (const row of events) await sql.putRow(tx, eventsDef, row);\n });\n return { events: events.length, noteCreated };\n}\n\n/** Upsert one effort registry row (keyed by slug). */\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\n/**\n * Ensure tags of one type exist for every label (equipment catalogs).\n * Untyped existing tags are upgraded; labels typed as another type are\n * left alone (a tag row carries exactly one type). Returns labels added.\n */\nexport async function persistTypedTags(db: CliDb, labels: readonly string[], type: string): Promise<number> {\n const sql = await loadSql();\n const now = Date.now();\n const tagByLabel = new Map(\n ((await sql.listRows(db.db, sql.storeDefinition('tags'))) as Tag[]).map((t) => [t.label, t]),\n );\n const ops: TxOp[] = [];\n let added = 0;\n for (const raw of labels) {\n const label = raw.trim();\n if (!label) continue;\n const tag = tagByLabel.get(label);\n if (!tag) {\n ops.push({ op: 'put', store: 'tags', value: { id: randomId(), label, type, createdAt: now } satisfies Tag });\n added += 1;\n } else if (!tag.type) {\n ops.push({ op: 'put', store: 'tags', value: { ...tag, type } satisfies Tag });\n }\n }\n if (ops.length > 0) {\n await db.db.transaction(async (tx) => {\n await sql.refreshDomain(tx, ops);\n });\n }\n return added;\n}\n","/**\n * Import / Export exchange formats for notes and sessions.\n *\n * Pure row→string / string→row transforms with NO storage or fs coupling,\n * so the playground website can offer the same downloads/uploads against\n * IndexedDB rows while the CLI uses them over sqlite. Round-trip is a\n * design requirement: every export carries the identity needed to import\n * back into the same database (upsert) or into a clean one (recreate).\n *\n * - Notes → markdown composed from segment rows (as-of a chosen version),\n * with a `wod-note-id` frontmatter key stamped for identity. `wod parse`\n * adopts that identity, so edit-and-re-parse updates the same note.\n * - Sessions → one CSV row per metric (event + summary grains), session\n * fields repeated per row plus one session-only anchor row, so a clean\n * import recreates the session and its events verbatim.\n */\n\nimport { WQL_TYPED_TAG_KEYS } from '@bitcobblers/wod-wiki-wql';\nimport type { EventRecord } from '@bitcobblers/wod-wiki-core';\nimport type { Note, NoteSegment, Session } from '@bitcobblers/wod-wiki-storage';\n\n// ---------------------------------------------------------------------------\n// Note markdown composition\n// ---------------------------------------------------------------------------\n\n/** Identity stamped into exported note markdown so imports can find their note. */\nexport const NOTE_ID_FRONTMATTER_KEY = 'wod-note-id';\n\nexport interface NoteIdentity { noteId: string; title?: string }\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n/** Read the stamped note identity from the leading frontmatter block, if any. */\nexport function extractNoteIdentity(markdown: string): NoteIdentity | undefined {\n const block = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(markdown);\n if (!block) return undefined;\n let noteId: string | undefined;\n let title: string | undefined;\n for (const line of block[1].split(/\\r?\\n/)) {\n const kv = line.match(/^([^:]+):\\s*(.*)$/);\n if (!kv) continue;\n const key = kv[1].trim();\n const value = kv[2].trim();\n if (key === NOTE_ID_FRONTMATTER_KEY && UUID_RE.test(value)) noteId = value;\n if (key === 'title' && value) title = value;\n }\n return noteId ? { noteId, title } : undefined;\n}\n\n/** True when a scalar is safe to emit bare in a `key: value` frontmatter line. */\nconst FRONTMATTER_SAFE = /^[^:#\\[\\]{}'\"*&,!?|>%@`\\s][^:#\\[\\]{}\"']*$/;\n\n/**\n * Ensure the leading frontmatter carries `title` + `wod-note-id`. Existing\n * keys are replaced in place; a missing block is prepended. Scalars needing\n * YAML quoting are skipped (the note row title is authoritative in storage).\n */\nexport function injectIdentityFrontmatter(markdown: string, identity: NoteIdentity): string {\n const stamp = (lines: string[]): string[] => {\n const replaceOrInsert = (key: string, value: string | undefined): void => {\n if (value === undefined || !FRONTMATTER_SAFE.test(value)) return;\n const idx = lines.findIndex((l) => l.startsWith(`${key}:`));\n if (idx >= 0) lines[idx] = `${key}: ${value}`;\n else lines.push(`${key}: ${value}`);\n };\n replaceOrInsert('title', identity.title);\n replaceOrInsert(NOTE_ID_FRONTMATTER_KEY, identity.noteId);\n return lines;\n };\n\n const block = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(markdown);\n if (block) {\n const lines = stamp(block[1].split(/\\r?\\n/));\n return `---\\n${lines.join('\\n')}\\n---${markdown.slice(block[0].length)}`;\n }\n const lines = stamp([]);\n return `---\\n${lines.join('\\n')}\\n---\\n\\n${markdown}`;\n}\n\n/** Re-add source delimiters for segments without an exact source slice. */\nfunction segmentToFragment(segment: NoteSegment): string {\n if (segment.sourceContent !== undefined) return segment.sourceContent;\n if (segment.dataType === 'wod') {\n const block = segment.data as { dialect?: string; sport?: string } | null;\n const dialect = block?.dialect ?? 'time';\n const fenceTag = block?.sport ? `${dialect}:${block.sport}` : dialect;\n return `\\`\\`\\`${fenceTag}\\n${segment.rawContent}\\n\\`\\`\\``;\n }\n if (segment.dataType === 'frontmatter') {\n return `---\\n${segment.rawContent}\\n---`;\n }\n return segment.rawContent;\n}\n\n/**\n * Compose a note's markdown as-of `version` (default: latest). Per segment\n * id the row with the highest version ≤ the target wins — versions beyond\n * the target never appear, segments that never reached it contribute their\n * latest. The result is stamped with the note identity for re-import.\n */\nexport function composeNoteMarkdown(\n note: Note,\n segments: readonly NoteSegment[],\n version?: number,\n): string {\n // Latest composition mirrors the live note: superseded versions never\n // appear, which also drops re-keyed positional chains (edits shift line\n // numbers, so a changed block surfaces under a new id and its old id is\n // history). As-of composition keeps every row ≤ the cap per segment id.\n const pool = version === undefined\n ? segments.filter((s) => s.isHistory !== true)\n : segments;\n const cap = version ?? Number.MAX_SAFE_INTEGER;\n const bySegmentId: Record<string, NoteSegment> = {};\n for (const segment of pool) {\n if (segment.version > cap) continue;\n const current = bySegmentId[segment.id];\n if (!current || segment.version > current.version) bySegmentId[segment.id] = segment;\n }\n const picked = Object.values(bySegmentId).sort((a, b) => (a.position ?? 0) - (b.position ?? 0));\n const markdown = picked.map(segmentToFragment).join('');\n return injectIdentityFrontmatter(markdown, { noteId: note.id, title: note.title });\n}\n\n// ---------------------------------------------------------------------------\n// Frontmatter tags (general + typed: equipment, quality, …)\n// ---------------------------------------------------------------------------\n\nexport interface TypedTagItem { label: string; type?: string }\n\nconst FRONTMATTER_BLOCK_RE = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/;\n\n/**\n * Minimal frontmatter reader (the corpus subset): `key: scalar`, `key:` +\n * `- item` lists, and inline `[a, b]` lists. Keys are lowercased. Returns {}\n * when no leading block exists.\n */\nexport function readFrontmatterMeta(markdown: string): Record<string, string | string[]> {\n const match = FRONTMATTER_BLOCK_RE.exec(markdown);\n if (!match) return {};\n const meta: Record<string, string | string[]> = {};\n const lines = match[1].split(/\\r?\\n/);\n let currentListKey: string | undefined;\n for (const rawLine of lines) {\n const line = rawLine.trimEnd();\n const item = line.match(/^\\s+-\\s+(.*)$/);\n if (item && currentListKey) {\n (meta[currentListKey] as string[]).push(item[1].trim());\n continue;\n }\n const kv = line.match(/^([^:]+):\\s*(.*)$/);\n if (!kv) continue;\n const key = kv[1].trim().toLowerCase();\n const value = kv[2].trim();\n if (value === '') {\n meta[key] = [];\n currentListKey = key;\n } else if (value.startsWith('[') && value.endsWith(']')) {\n meta[key] = value\n .slice(1, -1)\n .split(',')\n .map((v) => v.trim().replace(/^['\"]|['\"]$/g, ''))\n .filter((v) => v.length > 0);\n currentListKey = undefined;\n } else {\n meta[key] = value;\n currentListKey = undefined;\n }\n }\n return meta;\n}\n\nconst asList = (value: string | string[] | undefined): string[] =>\n Array.isArray(value)\n ? value\n : typeof value === 'string'\n ? value.split(',').map((v) => v.trim()).filter((v) => v.length > 0)\n : [];\n\n/**\n * Extract a note's frontmatter tags: the general `tags:` list plus typed\n * keys (equipment, quality, domain, format, intent by default — the WQL\n * typed-tag vocabulary). Mirrors the playground's\n * `extractTypedFrontmatterTags` (frontmatter.ts) so CLI and app imports\n * classify identically.\n */\nexport function extractTypedTags(\n markdown: string,\n typedKeys: readonly string[] = WQL_TYPED_TAG_KEYS,\n): TypedTagItem[] {\n const meta = readFrontmatterMeta(markdown);\n const results: TypedTagItem[] = asList(meta['tags']).map((label) => ({ label }));\n const metaKeys = Object.keys(meta);\n for (const typeName of typedKeys) {\n if (typeName === 'tags') continue;\n const matchedKey = metaKeys.find((k) => k === typeName.toLowerCase());\n if (!matchedKey) continue;\n for (const label of asList(meta[matchedKey])) {\n results.push({ label, type: typeName });\n }\n }\n return results.filter((t) => t.label.length > 0);\n}\n\n// ---------------------------------------------------------------------------\n// Effort registry (markdown round-trip — the corpus effort file format)\n// ---------------------------------------------------------------------------\n\nexport interface EffortFileFields {\n id: string;\n slug: string;\n label: string;\n aliases: string[];\n baseAttributes: Record<string, unknown>;\n body?: string;\n}\n\n/**\n * Parse a corpus-style effort markdown file: frontmatter `id`/`slug`/`label`\n * (required), `aliases` list, one-level scalar `baseAttributes` with a\n * numeric `met`, plus an optional markdown body. Parity with the seed\n * importer's effort materialization.\n */\nexport function markdownToEffort(raw: string): EffortFileFields | null {\n const match = FRONTMATTER_BLOCK_RE.exec(raw);\n if (!match) return null;\n const meta = readFrontmatterMeta(raw);\n const body = raw.slice(match[0].length).trim();\n const id = scalarOf(meta['id']);\n const slug = scalarOf(meta['slug']);\n const label = scalarOf(meta['label']);\n if (!id || !slug || !label) return null;\n const baseAttributes: Record<string, unknown> = {};\n // One nested level, scalar values (met/discipline/intensityTier/…).\n const blockRe = /^\\s{2,}([^:]+):\\s*(.+)$/;\n let inAttrs = false;\n for (const line of match[1].split(/\\r?\\n/)) {\n if (/^baseAttributes:/.test(line)) {\n inAttrs = true;\n continue;\n }\n if (inAttrs) {\n const attr = blockRe.exec(line);\n if (attr && /^ {2,}/.test(line)) {\n const v = attr[2].trim();\n baseAttributes[attr[1].trim()] = /^\\d+(\\.\\d+)?$/.test(v) ? Number(v) : v;\n } else if (/^\\S/.test(line)) {\n inAttrs = false;\n }\n }\n }\n if (typeof baseAttributes['met'] !== 'number') return null;\n return {\n id,\n slug,\n label,\n aliases: asList(meta['aliases']),\n baseAttributes,\n ...(body ? { body } : {}),\n };\n}\n\n/** Compose an effort registry row back into corpus-style markdown. */\nexport function effortToMarkdown(effort: {\n id: string;\n slug: string;\n label: string;\n aliases?: string[];\n baseAttributes: Record<string, unknown>;\n body?: string;\n}): string {\n const lines = ['---', `id: ${effort.id}`, `slug: ${effort.slug}`, `label: ${effort.label}`];\n if (effort.aliases && effort.aliases.length > 0) {\n lines.push('aliases:');\n for (const alias of effort.aliases) lines.push(` - ${alias}`);\n }\n const attrs = Object.entries(effort.baseAttributes).filter(([, v]) => typeof v === 'number' || typeof v === 'string');\n if (attrs.length > 0) {\n lines.push('baseAttributes:');\n for (const [k, v] of attrs) lines.push(` ${k}: ${String(v)}`);\n }\n lines.push('---', '');\n return `${lines.join('\\n')}\\n${(effort.body ?? '').trim()}`.trimEnd() + '\\n';\n}\n\nfunction scalarOf(value: string | string[] | undefined): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Equipment catalog (typed tags, CSV round-trip)\n// ---------------------------------------------------------------------------\n\n/** One-label-per-row CSV (header `label`) for equipment catalogs. */\nexport function equipmentToCsv(labels: readonly string[]): string {\n return ['label', ...labels].map((l) => escapeCsvField(l)).join('\\n') + '\\n';\n}\n\nexport function csvToEquipmentLabels(csv: string): string[] {\n const lines = splitCsvRecords(csv);\n if (lines.length === 0) return [];\n const header = parseCsvLine(lines[0]);\n const labelIdx = header[0] === 'label' ? 0 : -1;\n const start = labelIdx >= 0 ? 1 : 0; // tolerate headerless files\n const labels: string[] = [];\n for (const line of lines.slice(start)) {\n const cells = parseCsvLine(line);\n const label = (labelIdx >= 0 ? cells[0] : cells.join(',')).trim();\n if (label) labels.push(label);\n }\n return [...new Set(labels)];\n}\n\n// ---------------------------------------------------------------------------\n// Session CSV\n// ---------------------------------------------------------------------------\n\ntype Metric = {\n type?: string;\n value?: unknown;\n unit?: string;\n image?: string;\n origin?: string;\n metadata?: unknown;\n name?: string;\n};\n\nconst SESSION_HEADER = [\n 'sessionId', 'noteId', 'segmentId', 'segmentVersion', 'blockId', 'blockContentId',\n 'origin', 'status', 'startTime', 'endTime', 'duration', 'completed', 'sessionCreatedAt',\n] as const;\n\nconst EVENT_HEADER = [\n 'eventId', 'grain', 'outputType', 'timestamp', 'pageId', 'effortSlug',\n 'eventSegmentId', 'eventSegmentVersion', 'eventBlockContentId', 'eventOrigin',\n 'timeSpan', 'sourceBlockKey', 'sourceStatementId', 'line', 'text', 'dialect',\n 'stackLevel', 'completionReason', 'representationKind',\n 'metricType', 'metricValue', 'metricUnit', 'metricImage', 'metricOrigin',\n 'metricMetadata', 'metricTemporal',\n // Verbatim JSON backstops: make the machine round-trip lossless across\n // schema fields that have no dedicated spreadsheet column. Explicit cells\n // above still win on import, so hand-edited values are honored.\n 'metricJson', 'eventExtraJson',\n] as const;\n\nexport const SESSION_CSV_HEADER = [...SESSION_HEADER, ...EVENT_HEADER];\n\nfunction escapeCsvField(field: unknown): string {\n if (field === undefined || field === null) return '';\n const str = typeof field === 'object' ? JSON.stringify(field) : 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\nconst metricValueToCell = (value: unknown): string => {\n if (value === undefined || value === null) return '';\n if (typeof value === 'object') return JSON.stringify(value);\n return String(value);\n};\n\nconst metricValueFromCell = (cell: string): unknown => {\n if (cell === '') return undefined;\n if (/^-?\\d+(\\.\\d+)?$/.test(cell)) return Number(cell);\n if (cell === 'true' || cell === 'false') return cell === 'true';\n if (cell.startsWith('{') || cell.startsWith('[')) {\n try {\n return JSON.parse(cell);\n } catch {\n return cell;\n }\n }\n return cell;\n};\n\nfunction sessionCells(session: Session): string[] {\n return [\n session.id, session.noteId, session.segmentId, session.segmentVersion,\n session.blockId, session.blockContentId, session.origin, session.status,\n session.startTime, session.endTime, session.duration, session.completed,\n session.createdAt,\n ].map(escapeCsvField);\n}\n\nfunction metricCells(event: EventRecord, metric: Metric, index: number): string[] {\n return [\n event.id, event.grain, event.outputType, event.timestamp, event.pageId, event.effortSlug,\n event.segmentId, event.segmentVersion, event.blockContentId, event.origin,\n event.timeSpan, event.sourceBlockKey, event.sourceStatementId, event.line, event.text, event.dialect,\n event.stackLevel, event.completionReason, event.representationKind,\n metric.type, metricValueToCell(metric.value), metric.unit, metric.image, metric.origin,\n metric.metadata === undefined ? '' : JSON.stringify(metric.metadata),\n event.metricTemporal?.[index] === undefined ? '' : JSON.stringify(event.metricTemporal[index]),\n JSON.stringify(metric),\n ].map(escapeCsvField);\n}\n\n/** Event fields with no dedicated column, serialized verbatim (minus the\n * metrics array, which gets its own columns). metricTemporal is kept: the\n * importer discards it and rebuilds from the per-row column, so an empty\n * array still round-trips where no rows carry temporals. Returns the\n * CSV-escaped cell. */\nfunction eventExtraCells(event: EventRecord): string {\n const { metrics: _metrics, ...rest } = event;\n return escapeCsvField(JSON.stringify(rest));\n}\n\n/**\n * Serialize a session + its events to CSV — one row per metric, preceded by\n * one session anchor row (empty event columns). Import with\n * {@link csvToSessionRows}.\n */\nexport function sessionToCsv(session: Session, events: readonly EventRecord[]): string {\n const lines = [SESSION_CSV_HEADER.join(',')];\n lines.push([...sessionCells(session), ...EVENT_HEADER.map(() => '')].join(','));\n const ordered = [...events].sort((a, b) => a.id.localeCompare(b.id));\n for (const event of ordered) {\n const extra = eventExtraCells(event);\n const metrics = event.metrics ?? [];\n if (metrics.length === 0) {\n lines.push([...sessionCells(session), ...metricCells(event, { type: '' }, 0), extra].join(','));\n continue;\n }\n for (let i = 0; i < metrics.length; i++) {\n lines.push([...sessionCells(session), ...metricCells(event, metrics[i], i), extra].join(','));\n }\n }\n return lines.join('\\n') + '\\n';\n}\n\n/** Parse one CSV line, honoring double-quoted fields (RFC 4180 subset). */\nexport function parseCsvLine(line: string): string[] {\n const cells: string[] = [];\n let current = '';\n let quoted = false;\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if (quoted) {\n if (ch === '\"') {\n if (line[i + 1] === '\"') {\n current += '\"';\n i += 1;\n } else {\n quoted = false;\n }\n } else {\n current += ch;\n }\n } else if (ch === '\"' && current === '') {\n quoted = true;\n } else if (ch === ',') {\n cells.push(current);\n current = '';\n } else {\n current += ch;\n }\n }\n cells.push(current);\n return cells;\n}\n\n/** Split CSV into records on newlines that are NOT inside quoted fields. */\nexport function splitCsvRecords(csv: string): string[] {\n const records: string[] = [];\n let current = '';\n let quoted = false;\n for (let i = 0; i < csv.length; i++) {\n const ch = csv[i];\n if (ch === '\"') {\n if (quoted && csv[i + 1] === '\"') {\n current += '\"\"';\n i += 1;\n continue;\n }\n quoted = !quoted;\n current += ch;\n } else if (!quoted && (ch === '\\n' || ch === '\\r')) {\n if (ch === '\\r' && csv[i + 1] === '\\n') i += 1;\n if (current.length > 0) records.push(current);\n current = '';\n } else {\n current += ch;\n }\n }\n if (current.length > 0) records.push(current);\n return records;\n}\n\nexport interface SessionImportRows {\n session: Session;\n events: EventRecord[];\n}\n\nconst num = (cell: string): number | undefined => (cell === '' ? undefined : Number(cell));\nconst nonempty = (cell: string): string | undefined => (cell === '' ? undefined : cell);\n\nfunction jsonCell<T>(cell: string): T | undefined {\n if (!cell) return undefined;\n try {\n return JSON.parse(cell) as T;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Parse {@link sessionToCsv} output back into a session + event rows.\n * The session anchor row may be absent (pure event export) as long as\n * session columns are present on the event rows.\n */\nexport function csvToSessionRows(csv: string): SessionImportRows {\n const lines = splitCsvRecords(csv);\n if (lines.length < 2) throw new Error('[wod import] Session CSV has no data rows');\n const header = parseCsvLine(lines[0]);\n const col = (name: string): number => {\n const idx = header.indexOf(name);\n if (idx < 0) throw new Error(`[wod import] Session CSV missing column \"${name}\"`);\n return idx;\n };\n const at = (cells: string[], name: string): string => cells[col(name)] ?? '';\n\n const eventRows = new Map<string, EventRecord>();\n let session: Session | undefined;\n\n const ensureSession = (cells: string[]): Session => {\n if (session) return session;\n session = {\n id: at(cells, 'sessionId'),\n noteId: at(cells, 'noteId'),\n segmentId: at(cells, 'segmentId') || undefined,\n segmentVersion: num(at(cells, 'segmentVersion')),\n blockId: at(cells, 'blockId') || undefined,\n blockContentId: at(cells, 'blockContentId') || undefined,\n origin: (at(cells, 'origin') || undefined) as Session['origin'],\n status: (at(cells, 'status') || undefined) as Session['status'],\n startTime: Number(at(cells, 'startTime') || 0),\n endTime: Number(at(cells, 'endTime') || 0),\n duration: Number(at(cells, 'duration') || 0),\n completed: at(cells, 'completed') === 'true',\n createdAt: Number(at(cells, 'sessionCreatedAt') || 0),\n };\n return session;\n };\n\n for (const line of lines.slice(1)) {\n const cells = parseCsvLine(line);\n if (cells.length === 1 && cells[0] === '') continue;\n const currentSession = ensureSession(cells);\n const eventId = at(cells, 'eventId');\n if (!eventId) continue; // session anchor row\n\n let event = eventRows.get(eventId);\n if (!event) {\n // eventExtraJson is the verbatim backstop; explicit spreadsheet cells\n // override it so hand-edited values are honored on import.\n const extra = jsonCell<Record<string, unknown>>(at(cells, 'eventExtraJson')) ?? {};\n event = {\n ...extra,\n id: eventId,\n resultId: currentSession.id,\n noteId: nonempty(at(cells, 'noteId')) ?? (extra.noteId as string | undefined) ?? currentSession.noteId,\n blockContentId: nonempty(at(cells, 'eventBlockContentId')) ?? (extra.blockContentId as string | undefined),\n pageId: nonempty(at(cells, 'pageId')) ?? (extra.pageId as string | undefined),\n origin: (nonempty(at(cells, 'eventOrigin')) ?? extra.origin) as EventRecord['origin'],\n timestamp: Number(at(cells, 'timestamp') || extra.timestamp || 0),\n grain: (nonempty(at(cells, 'grain')) ?? extra.grain ?? 'event') as EventRecord['grain'],\n effortSlug: nonempty(at(cells, 'effortSlug')) ?? (extra.effortSlug as string | undefined),\n outputType: nonempty(at(cells, 'outputType')) ?? (extra.outputType as string | undefined) ?? 'event',\n segmentId: nonempty(at(cells, 'eventSegmentId')) ?? (extra.segmentId as string | undefined),\n segmentVersion: num(at(cells, 'eventSegmentVersion')) ?? (extra.segmentVersion as number | undefined),\n timeSpan: jsonCell(at(cells, 'timeSpan')) ?? (extra.timeSpan as EventRecord['timeSpan']),\n sourceBlockKey: nonempty(at(cells, 'sourceBlockKey')) ?? (extra.sourceBlockKey as string | undefined),\n sourceStatementId: num(at(cells, 'sourceStatementId')) ?? (extra.sourceStatementId as number | undefined),\n line: num(at(cells, 'line')) ?? (extra.line as number | undefined),\n text: nonempty(at(cells, 'text')) ?? (extra.text as string | undefined),\n dialect: nonempty(at(cells, 'dialect')) ?? (extra.dialect as string | undefined),\n stackLevel: num(at(cells, 'stackLevel')) ?? (extra.stackLevel as number | undefined),\n completionReason: nonempty(at(cells, 'completionReason')) ?? (extra.completionReason as string | undefined),\n representationKind: (nonempty(at(cells, 'representationKind')) ??\n extra.representationKind) as EventRecord['representationKind'],\n metrics: [],\n // Rebuilt per-row from the metricTemporal column below — never\n // inherited from the backstop, or rows would double-collect.\n metricTemporal: undefined,\n };\n eventRows.set(eventId, event);\n }\n\n const metricType = at(cells, 'metricType');\n if (!metricType) continue; // metrics:[] event row\n // metricJson is the verbatim backstop; explicit cells override it.\n const baseMetric = jsonCell<Metric>(at(cells, 'metricJson')) ?? {};\n const metric: Metric = {\n ...baseMetric,\n type: metricType,\n ...(at(cells, 'metricValue') !== '' ? { value: metricValueFromCell(at(cells, 'metricValue')) } : {}),\n ...(nonempty(at(cells, 'metricUnit')) ? { unit: at(cells, 'metricUnit') } : {}),\n ...(nonempty(at(cells, 'metricImage')) ? { image: at(cells, 'metricImage') } : {}),\n ...(nonempty(at(cells, 'metricOrigin')) ? { origin: at(cells, 'metricOrigin') } : {}),\n ...(at(cells, 'metricMetadata') !== ''\n ? { metadata: jsonCell(at(cells, 'metricMetadata')) }\n : {}),\n };\n (event.metrics as Metric[]).push(metric);\n const temporal = jsonCell<unknown>(at(cells, 'metricTemporal'));\n if (temporal !== undefined) {\n (event.metricTemporal ??= []).push(temporal as NonNullable<EventRecord['metricTemporal']>[number]);\n }\n }\n\n if (!session) throw new Error('[wod import] Session CSV did not contain session columns');\n return { session, events: [...eventRows.values()] };\n}\n","/**\n * `wod seed` — import compiled seed artifacts (manifest.json + content-\n * hashed chunks) into the local sqlite database.\n *\n * Replicates the playground SeedImporter's mapping (SeedRow → note +\n * immutable segment + tags/pages + effort registry rows; static block rows\n * re-keyed onto imported note UUIDs through their sourcePath) so a CLI-seeded\n * db classifies identically to an app-seeded one. The per-source checkpoint\n * in the `meta` store makes re-seeds idempotent and lets shrunken corpora\n * sweep their vanished rows (seed-owned only — user edits stand).\n */\n\nimport type {\n BlockEffort,\n BlockIndexRow,\n Note,\n NoteSegment,\n Page,\n PageNote,\n Tag,\n NoteTag,\n TxOp,\n} from '@bitcobblers/wod-wiki-storage';\nimport { loadSql, nodeCrypto, nodeFs, nodePath, randomId, uuid5, formatV5Digest, CLI_UUID_NAMESPACE, type CliDb, type SqlApi } from './db';\n\n/** Fixed namespace — must match SeedImporter.SEED_NAMESPACE byte-for-byte. */\nconst SEED_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341';\nconst SEED_SCHEMA = 7;\nconst CANVAS_CHUNK_ID = 'canvas';\nconst DASHBOARDS_CHUNK_ID = 'dashboards';\nconst EFFORTS_CHUNK_ID = 'efforts';\nconst TEMPLATE_CHUNK_ID = 'template';\n\n// ---------------------------------------------------------------------------\n// Manifest / row contract (mirrors ../wod-wiki-seed/src/contract.ts)\n// ---------------------------------------------------------------------------\n\ninterface ManifestChunkRef {\n id: string;\n path: string;\n sha256: string;\n bytes?: number;\n count?: number;\n kind?: 'notes' | 'block-index' | 'block-efforts';\n}\n\ninterface SeedManifest {\n schema?: number;\n version: number;\n builtAt: string;\n chunks: ManifestChunkRef[];\n}\n\ninterface SeedRow { path: string; content: string }\n\ninterface SeedMetaChunkRef { sha256: string; noteIds?: string[]; blockIds?: string[] }\n\ninterface SeedMetaRecord {\n key: string;\n schema: number;\n seedVersion: number;\n builtAt: string;\n importedAt: number;\n chunks: Record<string, SeedMetaChunkRef>;\n claim: null;\n}\n\n// ---------------------------------------------------------------------------\n// Frontmatter — shared helpers live in ../exchange (CLI ⇄ website parity);\n// this module keeps only the seed-classification logic.\n// ---------------------------------------------------------------------------\n\nimport { extractTypedTags, markdownToEffort, readFrontmatterMeta, type TypedTagItem } from '../exchange';\n\nconst scalarOf = (value: string | string[] | undefined): string | undefined =>\n typeof value === 'string' ? value : undefined;\n\n// ---------------------------------------------------------------------------\n// Seed identity + classification (mirrors apps/playground/src/types/seed.ts)\n// ---------------------------------------------------------------------------\n\n/** Playground-exact seedNoteId: SHA-1 over `${SEED_NAMESPACE}:${path}`, v5-munged. */\nexport function seedNoteId(path: string): string {\n return formatV5Digest(nodeCrypto().createHash('sha1').update(`${SEED_NAMESPACE}:${path}`).digest());\n}\n\nfunction titleFromPath(path: string): string {\n const stem = path.split('/').pop() ?? path;\n return stem\n .replace(/\\.md$/, '')\n .replace(/[-_]+/g, ' ')\n .replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n\nfunction catalogForChunkId(chunkId: string): string | undefined {\n const match = /^(?:collection|feed)\\.(.+)$/.exec(chunkId);\n const value = match?.[1];\n return value && value !== '_root' ? value : undefined;\n}\n\nfunction 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 const route = fm?.[1]?.match(/^route:\\s*(\\S+)\\s*$/m)?.[1];\n if (!route) return null;\n return route.replace(/^\\//, '') || null;\n}\n\nfunction seedNoteSourceId(path: string, content: string, chunkId: string): string | undefined {\n const parts = path.split('/');\n const stem = (parts[parts.length - 1] ?? '').replace(/\\.md$/i, '');\n const under = parts.slice(2).map((p) => p.replace(/\\.md$/i, '')).join('/');\n if (chunkId === CANVAS_CHUNK_ID) {\n const route = canvasRouteSlug(content);\n return route ? `guides:${route}` : `guides:${under}`;\n }\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 if (!catalog) return 'collection:_root';\n return stem.toLowerCase() === 'readme' ? `collection:${catalog}` : `collection:${catalog}/${stem}`;\n }\n if (chunkId.startsWith('feed.')) return `feed:feeds/${under}`;\n return undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Import\n// ---------------------------------------------------------------------------\n\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}\n\ninterface BuiltNoteRecord {\n note: Note;\n segment: NoteSegment;\n tags: TypedTagItem[];\n page?: Page;\n pageNote?: PageNote;\n rawContent: string;\n sourcePath: string;\n}\n\nfunction buildNoteRecord(row: SeedRow, chunkId: string, seedVersion: number): BuiltNoteRecord {\n const id = seedNoteId(row.path);\n const createdAt = seedVersion; // deterministic, mirrors SeedImporter\n const meta = readFrontmatterMeta(row.content);\n // General `tags:` plus typed keys (equipment, quality, …) — SeedImporter parity.\n const tags = extractTypedTags(row.content);\n\n let date: number | undefined;\n let page: Page | undefined;\n let pageNote: PageNote | undefined;\n const rawDate = scalarOf(meta['date']);\n if (rawDate && /^\\d{4}-\\d{2}-\\d{2}$/.test(rawDate)) {\n date = new Date(`${rawDate}T12:00:00Z`).getTime();\n }\n const slug = scalarOf(meta['slug']);\n if (slug) {\n const pageId = seedNoteId(`page:${slug}`);\n page = { id: pageId, slug, title: titleFromPath(row.path), createdAt };\n pageNote = { id: seedNoteId(`pagenote:${slug}:${row.path}`), pageId, noteId: id, createdAt };\n }\n\n const sourceId = seedNoteSourceId(row.path, row.content, chunkId);\n if (!sourceId) {\n throw new Error(`[wod seed] chunk \"${chunkId}\" row \"${row.path}\" has no source family — refusing to import it as journal`);\n }\n const metaTitle = scalarOf(meta['title']);\n return {\n note: {\n id,\n title: (metaTitle?.trim() || titleFromPath(row.path)),\n date,\n createdAt,\n type: chunkId === DASHBOARDS_CHUNK_ID ? 'dashboard' : 'note',\n sourceId,\n catalog: catalogForChunkId(chunkId),\n seedOrigin: 'seed',\n seedVersion,\n seedChunkId: chunkId,\n sourcePath: row.path,\n },\n segment: {\n id: `seed:${id}`,\n version: 1,\n noteId: id,\n position: 0,\n dataType: 'markdown',\n data: null,\n rawContent: row.content,\n createdAt,\n },\n tags,\n page,\n pageNote,\n rawContent: row.content,\n sourcePath: row.path,\n };\n}\n\n/** Effort materialization lives in ../exchange (markdownToEffort) so the\n * website and CLI parse effort files identically. */\n\nasync function metaRecord(sql: SqlApi, db: CliDb['db'], sourceId: string): Promise<SeedMetaRecord> {\n const rows = (await sql.listRows(db, sql.storeDefinition('meta'))) as Array<{ key: string } & Record<string, unknown>>;\n const existing = rows.find((r) => r.key === `seed:${sourceId}`);\n return (existing as SeedMetaRecord | undefined) ?? {\n key: `seed:${sourceId}`,\n schema: SEED_SCHEMA,\n seedVersion: 0,\n builtAt: '',\n importedAt: 0,\n chunks: {},\n claim: null,\n };\n}\n\nasync function applyOps(db: CliDb, ops: TxOp[]): Promise<void> {\n if (ops.length === 0) return;\n const sql = await loadSql();\n await db.db.transaction(async (tx) => {\n await sql.refreshDomain(tx, ops);\n });\n}\n\n/** Import one compiled seed directory (manifest.json + chunks/). */\nexport async function importSeedDir(db: CliDb, dir: string, sourceId: string): Promise<SeedSourceSummary> {\n const sql = await loadSql();\n const fs = nodeFs();\n const source = sourceId || nodePath().basename(dir);\n const manifest = JSON.parse(fs.readFileSync(nodePath().resolve(dir, 'manifest.json'), 'utf-8')) as SeedManifest;\n const prior = await metaRecord(sql, db.db, source);\n const notesById = new Map(\n ((await sql.listRows(db.db, sql.storeDefinition('notes'))) as Array<{ id: string } & Record<string, unknown>>)\n .map((row) => [row.id, row as unknown as Note]),\n );\n const tagRowByLabel = new Map(\n ((await sql.listRows(db.db, sql.storeDefinition('tags'))) as Tag[]).map((t) => [t.label, t]),\n );\n\n const summary: SeedSourceSummary = {\n sourceId: source,\n version: manifest.version,\n notes: 0,\n efforts: 0,\n blocks: 0,\n blockEfforts: 0,\n deleted: 0,\n skippedUserOwned: 0,\n };\n const nextMeta: SeedMetaRecord = {\n ...prior,\n schema: SEED_SCHEMA,\n seedVersion: manifest.version,\n builtAt: manifest.builtAt,\n importedAt: Date.now(),\n chunks: {},\n };\n\n // Notes chunks first: static block rows re-key through the sourcePath map.\n const ordered = [\n ...manifest.chunks.filter((c) => (c.kind ?? 'notes') === 'notes'),\n ...manifest.chunks.filter((c) => c.kind === 'block-index'),\n ...manifest.chunks.filter((c) => c.kind === 'block-efforts'),\n ];\n const bySourcePath = new Map<string, string>();\n const noteIdsByChunk: Record<string, string[]> = {};\n const blockIdsByChunk: Record<string, string[]> = {};\n\n for (const chunk of ordered) {\n const payload = JSON.parse(fs.readFileSync(nodePath().resolve(dir, chunk.path), 'utf-8')) as unknown;\n const ops: TxOp[] = [];\n\n if ((chunk.kind ?? 'notes') === 'notes') {\n const rows = payload as SeedRow[];\n const built = rows.map((row) => buildNoteRecord(row, chunk.id, manifest.version));\n const noteIds: string[] = [];\n for (const record of built) {\n bySourcePath.set(record.sourcePath, record.note.id);\n const existing = notesById.get(record.note.id);\n if (existing && existing.seedOrigin !== 'seed') {\n summary.skippedUserOwned += 1;\n continue;\n }\n noteIds.push(record.note.id);\n ops.push({ op: 'put', store: 'notes', value: record.note });\n ops.push({ op: 'put', store: 'segments', value: record.segment });\n if (record.page) ops.push({ op: 'put', store: 'page', value: record.page });\n if (record.pageNote) ops.push({ op: 'put', store: 'page_notes', value: record.pageNote });\n for (const item of record.tags) {\n const label = item.label;\n let tag = tagRowByLabel.get(label);\n if (!tag) {\n tag = { id: randomId(), label, type: item.type, createdAt: Date.now() };\n tagRowByLabel.set(label, tag);\n ops.push({ op: 'put', store: 'tags', value: tag satisfies Tag });\n } else if (item.type && !tag.type) {\n // Upgrade an untyped tag to its typed use (SeedImportStorage parity).\n tag = { ...tag, type: item.type };\n tagRowByLabel.set(label, tag);\n ops.push({ op: 'put', store: 'tags', value: tag satisfies Tag });\n }\n const tagId = tag.id;\n ops.push({\n op: 'put',\n store: 'note_tags',\n // Deterministic junction id — re-seeds must upsert the same row\n // (note_tags has a unique [noteId, tagId] index).\n value: { id: uuid5(CLI_UUID_NAMESPACE, `note-tag:${record.note.id}:${tagId}`), noteId: record.note.id, tagId } satisfies NoteTag,\n });\n }\n if (chunk.id === EFFORTS_CHUNK_ID) {\n const effort = markdownToEffort(record.rawContent);\n if (effort) {\n ops.push({ op: 'put', store: 'efforts', value: { ...effort, registrySource: 'bundled' } });\n summary.efforts += 1;\n }\n }\n }\n // Vanished rows: prior membership minus current, seed-owned only.\n const priorIds = prior.chunks[chunk.id]?.noteIds ?? [];\n const goneIds = priorIds.filter((id) => !noteIds.includes(id) && notesById.get(id)?.seedOrigin === 'seed');\n for (const id of goneIds) {\n ops.push(...(await noteCascadeOps(sql, db, id)));\n summary.deleted += 1;\n }\n noteIdsByChunk[chunk.id] = rows.map((row) => seedNoteId(row.path));\n nextMeta.chunks[chunk.id] = { sha256: chunk.sha256, noteIds: noteIdsByChunk[chunk.id] };\n summary.notes += noteIds.length;\n await applyOps(db, ops);\n continue;\n }\n\n // Static block rows: re-key noteId through the sourcePath map.\n const rows = (payload as Array<BlockIndexRow & BlockEffort>).filter((row) => row.isStatic === true);\n const rekeyed = rows.map((row) => {\n const noteId = row.sourcePath ? bySourcePath.get(row.sourcePath) : undefined;\n if (!noteId) {\n throw new Error(\n `[wod seed] static row ${row.id}: sourcePath \"${row.sourcePath ?? ''}\" has no imported note — chunk aborted`,\n );\n }\n return chunk.kind === 'block-efforts'\n ? { ...row, noteId }\n : { ...row, noteId, routeId: row.noteId };\n });\n const store = chunk.kind === 'block-index' ? 'block_index' : 'block_efforts';\n for (const row of rekeyed) ops.push({ op: 'put', store, value: row });\n const priorBlockIds = prior.chunks[chunk.id]?.blockIds ?? [];\n const writtenIds = new Set(rekeyed.map((row) => row.id));\n const goneBlocks = priorBlockIds.filter((id) => !writtenIds.has(id));\n for (const id of goneBlocks) ops.push({ op: 'delete', store, key: id });\n summary.deleted += goneBlocks.length;\n blockIdsByChunk[chunk.id] = (payload as Array<{ id: string }>).map((row) => row.id);\n nextMeta.chunks[chunk.id] = { sha256: chunk.sha256, blockIds: blockIdsByChunk[chunk.id] };\n if (chunk.kind === 'block-index') summary.blocks += rekeyed.length;\n else summary.blockEfforts += rekeyed.length;\n await applyOps(db, ops);\n }\n\n // Vanished chunks: membership the manifest no longer declares.\n const manifestIds = new Set(manifest.chunks.map((c) => c.id));\n for (const [chunkId, checkpoint] of Object.entries(prior.chunks)) {\n if (manifestIds.has(chunkId)) continue;\n const sweep: TxOp[] = [];\n for (const id of checkpoint.noteIds ?? []) {\n if (notesById.get(id)?.seedOrigin === 'seed') {\n sweep.push(...(await noteCascadeOps(sql, db, id)));\n summary.deleted += 1;\n }\n }\n for (const id of checkpoint.blockIds ?? []) {\n sweep.push({ op: 'delete', store: 'block_index', key: id });\n summary.deleted += 1;\n }\n await applyOps(db, sweep);\n }\n\n await applyOps(db, [{ op: 'put', store: 'meta', value: nextMeta }]);\n return summary;\n}\n\n/** Delete a seed note plus its segments and derived block rows. */\nasync function noteCascadeOps(sql: SqlApi, db: CliDb, noteId: string): Promise<TxOp[]> {\n const ops: TxOp[] = [{ op: 'delete', store: 'notes', key: noteId }];\n for (const store of ['segments', 'block_index', 'block_efforts', 'note_tags'] as const) {\n // Rows came out of our own store tables; shape is the store contract.\n const rows = (await sql.listRows(db.db, sql.storeDefinition(store), { only: noteId }, undefined, 'by-note')) as Array<{ id: string; version?: number }>;\n for (const row of rows) {\n // segments keyPath is [id, version]; block rows key on id alone.\n ops.push({ op: 'delete', store, key: store === 'segments' ? [row.id, row.version ?? 1] : row.id });\n }\n }\n return ops;\n}\n\n/** Default bundled sources: <cwd>/apps/playground/public/seed/{core,community}. */\nexport function defaultSeedDirs(cwd: string): string[] {\n const base = nodePath().resolve(cwd, 'apps', 'playground', 'public', 'seed');\n return ['core', 'community']\n .map((id) => nodePath().resolve(base, id))\n .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 '../ir';\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 * 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 resolveDbPath,\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 { persistNote, 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 '../exchange';\nimport {\n formatParseOutput,\n formatExecutionOutput,\n formatQueryOutput,\n type OutputFormat,\n} from './formatters';\n\nconst VERSION = '0.6.0';\n\nexport interface CliParsedArgs {\n subcommand?: 'parse' | 'run' | 'query' | 'download' | 'import' | 'build' | 'seed' | 'reset' | '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 /** Compose a note markdown as-of this segment version (`download note`). */\n at?: string;\n /** SQLite database path (--db). Defaults to WOD_WIKI_DB or ./wodwiki.db. */\n db?: 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\nexport function parseCliArgs(args: string[]): CliParsedArgs {\n const result: CliParsedArgs = {\n format: 'json',\n packs: [],\n sources: [],\n };\n\n let i = 0;\n while (i < args.length) {\n const arg = args[i];\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 === '--db') {\n result.db = args[++i];\n i++;\n } else if (arg.startsWith('--db=')) {\n result.db = arg.slice('--db='.length);\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 === '--at') {\n result.at = args[++i];\n i++;\n } else if (arg.startsWith('--at=')) {\n result.at = arg.slice('--at='.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 === '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 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\nSUBCOMMANDS:\n parse <file | -> Parse Whiteboard Script, create a note in the database\n (segments + 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> Compose the note's markdown from its segment rows and\n write it to <id>.md. Use --at <version> to compose\n as-of a segment version (default: latest). The stamp\n in the frontmatter makes 'wod parse' re-import it.\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 Recreate a session + its events from a downloaded CSV\n into the same or a clean database (id-keyed upsert).\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 block-parent-map.json + report.html to <dir>/dist\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 (parse / run / query / download / import / seed / reset):\n --db <path> SQLite database file (default: $WOD_WIKI_DB or\n ./wodwiki.db). Created on demand by parse/run/seed.\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 --at <version> With 'download note': compose the markdown as-of the\n given segment version (default: latest)\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\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 const parsed = parseCliArgs(argv);\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) {\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 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(parsed.db);\n try {\n const persisted = await persistNote(db, {\n source,\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.segments} segments, ${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 ir = await runExecution(source, { sport: parsed.sport, sourceLabel: `cli:wod run ${parsed.target}` });\n const db = await openCliDb(parsed.db);\n try {\n const persisted = await persistRun(db, {\n source,\n sourceLabel: parsed.target,\n executionLog: ir.data,\n });\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 dbPath = resolveDbPath(parsed.db);\n if (!nodeFs().existsSync(dbPath)) {\n writeErr(\n `[wod query] No input dataset and no database at ${dbPath}. ` +\n 'Specify --corpus <file>, --stdin-log, --stdin-facts, or run `wod seed` first.',\n );\n return 1;\n }\n const db = await openCliDb(parsed.db);\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> [--at <version>] [-o <path>]');\n return 1;\n }\n const targetId = id as string;\n const db = await openCliDb(parsed.db);\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 at = parsed.at === undefined ? undefined : Number(parsed.at);\n if (parsed.at !== undefined && (!Number.isInteger(at) || (at as number) < 1)) {\n writeErr(`[wod download] Invalid --at version: ${parsed.at}`);\n return 1;\n }\n const markdown = composeNoteMarkdown(bundle.note, bundle.segments, at);\n const target =\n parsed.output && parsed.output !== '-' ? parsed.output : `${id}${at ? `.v${at}` : ''}.md`;\n if (parsed.output === '-') {\n writeOut(markdown);\n } else {\n nodeFs().writeFileSync(target, markdown, 'utf-8');\n }\n writeOut(\n `[wod download] note ${id}${at ? ` v${at}` : ''} → ${target}` +\n ` (${bundle.segments.length} segment rows)`,\n );\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 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(parsed.db);\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.segments} segments${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(parsed.db);\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(parsed.db);\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(parsed.db);\n try {\n const result = await persistSessionBundle(db, session, events);\n writeOut(\n `[wod import] session ${session.id} — ${result.events} events` +\n `${result.noteCreated ? ' (stub note created)' : ''} → ${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)} ${c.kind === 'block-index' ? 'rows ' : '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(parsed.db);\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 target = resolveDbPath(parsed.db);\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 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 * Auto-generated build version metadata.\n * Do not edit directly; updated by scripts/stamp-version.ts\n */\nexport const VERSION = '0.35.2116';\nexport const GIT_SHA = 'a4d411f';\nexport const BUILD_TIME = '2026-10-12T00:14:24.795Z';\nexport const SEMVER = {\n version: '0.35.2116',\n gitSha: 'a4d411f',\n buildTime: '2026-10-12T00:14:24.795Z',\n} as const;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/seedbuild/frontmatter.ts","../src/cli/seedbuild/effort-file.ts","../src/cli/seedbuild/contract.ts","../src/cli/seedbuild/effort-slugs.ts","../src/cli/seedbuild/filename.ts","../src/cli/seedbuild/git-version.ts","../src/cli/seedbuild/report.ts","../src/cli/seedbuild/compiler.ts","../src/pack.ts","../src/store.ts","../src/ir.ts","../src/cli/parse.ts","../src/cli/run.ts","../src/cli/query.ts","../src/cli/loader.ts","../src/cli/db.ts","../src/cli/persist.ts","../src/exchange.ts","../src/cli/seedbuild/runtime.ts","../src/cli/seedbuild/validation.ts","../src/cli/seed.ts","../src/cli/formatters.ts","../src/cli/runner.ts","../src/version.ts","../src/index.ts"],"names":["num","isEffortDiscipline","SEED_SCHEMA","CANVAS_CHUNK_ID","DASHBOARDS_CHUNK_ID","EFFORTS_CHUNK_ID","TEMPLATE_CHUNK_ID","SEED_REGISTERED_WIDGETS","SEED_BROADCAST_CHANNEL","KNOWN_SECTION_WIDGETS","extractEffortSlugs","execSync","join","writeFileSync","existsSync","readdirSync","parseDashboardNote","buildDashboardDocument","isDashboardWidgetType","resolveWidgetType","parseQuery","readFileSync","reconcileNoteBlocks","parseDocumentSections","section","blockContentId","path","parseScript","mkdirSync","createHash","relative","rmSync","dialectRegistry","realtimeProcessorRegistry","summaryProcessorRegistry","MetricType","getHints","createParser","toStoredOutputStatement","frozenNow","createCompiler","createMockClock","RuntimeStack","EventBus","ScriptRuntime","createAnalyticsEngineForBlock","StartSessionAction","NextEvent","bundledEfforts","toEventRows","toSummaryEventRows","validateNoteBlocks","QueryService","isPipelineQuery","result","isFindQuery","sameRow","lines","WQL_TYPED_TAG_KEYS","mapNoteBlockChanges","escapeCsvField","data","matchedCount","getFs","db","generateSeed","VERSION"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\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","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 * 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; 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, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"');\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-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 } 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; 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 * 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, 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 chunksDir = join(outDir, 'chunks');\n rmSync(outDir, { recursive: true, force: true });\n mkdirSync(chunksDir, { recursive: true });\n\n const manifestChunks: ManifestChunk[] = [];\n const tBlockIndex = Date.now();\n const blockRows = buildBlockIndexRows(markdownDir, corpusRoot);\n passMs.blockIndex = Date.now() - tBlockIndex;\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 content = readFileSync(templateSource ?? join(corpusRoot, p), 'utf8');\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 * Language Pack API — umbrella sugar over per-package slices\n *\n * Implements docs/adr/language-pack-api.md.\n * Provides defineLanguagePack() factory and registerLanguagePack() fan-out\n * into core tag identity, lang dialect stack, and analytics registries.\n */\n\nimport type { IDialect } from '@bitcobblers/wod-wiki-core';\nimport type { IRealtimeProcessor, ISummaryProcessor } from '@bitcobblers/wod-wiki-lang';\nimport {\n dialectRegistry,\n realtimeProcessorRegistry,\n summaryProcessorRegistry,\n} from '@bitcobblers/wod-wiki-lang';\n\nexport interface LanguagePackIdentity {\n id?: string;\n name: string;\n tags?: readonly string[];\n aliases?: readonly string[];\n runnable?: boolean;\n}\n\nexport interface LanguagePackLangSlice {\n analyzer?: new () => IDialect;\n analytics?: ReadonlyArray<new () => IRealtimeProcessor | ISummaryProcessor>;\n}\n\nexport interface LanguagePackUiSlice {\n widgetBlock?: unknown;\n}\n\nexport interface LanguagePack {\n identity?: LanguagePackIdentity;\n lang?: LanguagePackLangSlice;\n ui?: LanguagePackUiSlice;\n}\n\nconst activePacks = new Map<string, LanguagePack>();\n\nexport function defineLanguagePack(pack: LanguagePack): LanguagePack {\n return pack;\n}\n\nexport function registerLanguagePack(pack: LanguagePack): void {\n const packId = pack.identity?.id ?? pack.identity?.name ?? 'anonymous-pack';\n activePacks.set(packId, pack);\n\n if (pack.lang?.analyzer) {\n const AnalyzerCtor = pack.lang.analyzer;\n const instance = new AnalyzerCtor();\n dialectRegistry.register(instance);\n }\n\n if (pack.lang?.analytics) {\n for (const ProcessorCtor of pack.lang.analytics) {\n const instance = new ProcessorCtor();\n if ('processOutput' in instance) {\n realtimeProcessorRegistry.register(instance as IRealtimeProcessor);\n }\n if ('processSummary' in instance) {\n summaryProcessorRegistry.register(instance as ISummaryProcessor);\n }\n }\n }\n}\n\nexport function unregisterLanguagePack(packOrId: LanguagePack | string): void {\n const packId = typeof packOrId === 'string'\n ? packOrId\n : (packOrId.identity?.id ?? packOrId.identity?.name ?? 'anonymous-pack');\n\n const pack = activePacks.get(packId);\n activePacks.delete(packId);\n\n if (pack?.lang?.analyzer) {\n const instance = new pack.lang.analyzer();\n dialectRegistry.unregister(instance.id);\n } else if (typeof packOrId === 'string') {\n dialectRegistry.unregister(packOrId);\n }\n\n if (pack?.lang?.analytics) {\n for (const ProcessorCtor of pack.lang.analytics) {\n const instance = new ProcessorCtor();\n if ('processOutput' in instance) {\n realtimeProcessorRegistry.unregister((instance as IRealtimeProcessor).id);\n }\n if ('processSummary' in instance) {\n summaryProcessorRegistry.unregister((instance as ISummaryProcessor).id);\n }\n }\n }\n}\n\nexport function listLanguagePacks(): LanguagePack[] {\n return Array.from(activePacks.values());\n}\n\nexport function getRegisteredLanguagePacks(): LanguagePack[] {\n return Array.from(activePacks.values());\n}\n","/**\n * In-memory UnifiedEventStore — the state-free store seam for QueryService,\n * the CLI query runner, and the Storybook workbench.\n *\n * One adapter over an in-memory row list:\n * - inMemoryEventStore: the UnifiedEventStore contract (ticket 003)\n */\nimport type { EventRecord } from '@bitcobblers/wod-wiki-core';\nimport type { EventStore } from '@bitcobblers/wod-wiki-wql';\n\nexport function inMemoryEventStore(events: readonly EventRecord[]): EventStore {\n const rows = [...events];\n return {\n getEventsByTimeRange: async (start: number, end: number) =>\n rows.filter((r) => r.timestamp >= start && r.timestamp <= end),\n getEventsByResult: async (resultId: string) =>\n rows.filter((r) => r.resultId === resultId),\n getEventsForNote: async (noteId: string) =>\n rows.filter((r) => r.noteId === noteId),\n getEventsByContent: async (blockContentId: string) =>\n rows.filter((r) => r.blockContentId === blockContentId),\n scanAll: async () => rows,\n appendEvents: async (appended) => { rows.push(...appended); },\n finalizeSummaries: async (resultId, finals) => {\n // Ticket 005: only engine-authored summaries are finalize-owned;\n // user-authored summaries (origin 'user', e.g. wellness) are\n // reconcile-owned and must survive a result finalize.\n for (let i = rows.length - 1; i >= 0; i--) {\n const row = rows[i];\n if (row.resultId === resultId && row.grain === 'summary' && row.origin !== 'user') rows.splice(i, 1);\n }\n rows.push(...finals);\n },\n deleteEvents: async (ids) => {\n const doomed = new Set(ids);\n for (let i = rows.length - 1; i >= 0; i--) {\n if (doomed.has(rows[i].id)) rows.splice(i, 1);\n }\n },\n };\n}\n","/**\n * Pure JSON Intermediate Representation (IR) Schemas & Envelope\n *\n * Implements wayfinder #955 and research asset `docs/research/json-ir-schemas-2026-08-17.md`.\n * Freezes the existing result vocabulary (QueryResult, RowsQueryResult, FindQueryResult,\n * StoredOutputStatement, AnalyticsDataPoint, WorkoutResult, StatementNode) in a\n * versioned envelope safe for JSON round-trips.\n */\n\nimport type {\n ICodeStatement,\n AnalyticsDataPoint,\n Note,\n BlockRevision,\n BlockIndexRow,\n Session,\n StoredOutputStatement,\n WorkoutResults,\n} from '@bitcobblers/wod-wiki-core';\nimport { MetricType } from '@bitcobblers/wod-wiki-core';\nimport type { IScript, IEffort } from '@bitcobblers/wod-wiki-lang';\nimport { getHints } from '@bitcobblers/wod-wiki-lang';\n\nexport type IrKind =\n | 'fact-set'\n | 'result-set'\n | 'note-set'\n | 'corpus'\n | 'query-result'\n | 'find-result'\n | 'rows-result'\n | 'pipeline-result'\n | 'parse-tree'\n | 'execution-log';\n\n/**\n * Universal JSON envelope for all headless IR fixtures and output artifacts.\n */\nexport interface WodWikiIRFile<T> {\n $schema: 'https://wod-wiki.dev/ir/v1.json';\n kind: IrKind;\n generatedAt: number;\n source: string;\n data: T;\n}\n\nexport function createIRFile<T>(\n kind: IrKind,\n data: T,\n optionsOrSource?: string | { source?: string; generatedAt?: number },\n generatedAt?: number,\n): WodWikiIRFile<T> {\n let source = 'wod:headless';\n let genAt = Date.now();\n if (typeof optionsOrSource === 'string') {\n source = optionsOrSource;\n if (generatedAt !== undefined) genAt = generatedAt;\n } else if (optionsOrSource && typeof optionsOrSource === 'object') {\n if (optionsOrSource.source) source = optionsOrSource.source;\n if (optionsOrSource.generatedAt !== undefined) genAt = optionsOrSource.generatedAt;\n }\n return {\n $schema: 'https://wod-wiki.dev/ir/v1.json',\n kind,\n generatedAt: genAt,\n source,\n data,\n };\n}\n\nexport function isIRFile<T = unknown>(obj: unknown): obj is WodWikiIRFile<T> {\n if (!obj || typeof obj !== 'object') return false;\n const cand = obj as Partial<WodWikiIRFile<T>>;\n return (\n cand.$schema === 'https://wod-wiki.dev/ir/v1.json' &&\n typeof cand.kind === 'string' &&\n typeof cand.generatedAt === 'number' &&\n typeof cand.source === 'string' &&\n 'data' in cand\n );\n}\n\n// ── Parse Tree IR Models (#955) ─────────────────────────────────────────────\n\nexport interface MetricNode {\n type: string;\n image?: string;\n value?: unknown;\n origin?: string;\n}\n\nexport interface StatementNode {\n id: number;\n type: 'statement' | 'duration' | 'rounds' | 'rest' | 'segment' | 'root';\n raw: string;\n from: number;\n to: number;\n metrics: MetricNode[];\n hints?: string[];\n children?: StatementNode[];\n}\n\nexport function statementToNode(stmt: ICodeStatement, idMap: Map<number, ICodeStatement>): StatementNode {\n const meta = stmt.meta;\n const metrics: MetricNode[] = stmt.metrics.toArray().map((m) => ({\n type: m.type as string,\n ...(m.image !== undefined ? { image: m.image } : {}),\n ...(m.value !== undefined ? { value: m.value } : {}),\n ...(m.origin !== undefined ? { origin: m.origin } : {}),\n }));\n\n const raw = meta?.raw ?? '';\n const from = meta?.startOffset ?? 0;\n const to = meta?.endOffset ?? (from + raw.length);\n\n const durationFrag = stmt.metrics.find((m) => m.type === MetricType.Duration || m.type === 'duration');\n const roundsFrag = stmt.metrics.find((m) => m.type === MetricType.Rounds || m.type === 'rounds');\n const type: StatementNode['type'] = durationFrag ? 'duration' : roundsFrag ? 'rounds' : 'statement';\n\n const hints = getHints(stmt);\n\n const childIds = (stmt.children ?? []).flat();\n const children: StatementNode[] = childIds\n .map((cid) => idMap.get(cid))\n .filter((c): c is ICodeStatement => c !== undefined)\n .map((c) => statementToNode(c, idMap));\n\n return {\n id: stmt.id,\n type,\n raw,\n from,\n to,\n metrics,\n ...(hints.length > 0 ? { hints } : {}),\n ...(children.length > 0 ? { children } : {}),\n };\n}\n\n/** Builds a StatementNode tree from a parsed WhiteboardScript. */\nexport function buildStatementTree(script: IScript): StatementNode {\n const idMap = new Map(script.statements.map((s) => [s.id, s]));\n const topLevel = script.statements.filter((s) => s.parent === undefined || !idMap.has(s.parent));\n\n if (topLevel.length === 1 && topLevel[0].children.length > 0) {\n return statementToNode(topLevel[0], idMap);\n }\n\n return {\n id: 0,\n type: 'root',\n raw: script.source,\n from: 0,\n to: script.source.length,\n metrics: [],\n children: topLevel.map((s) => statementToNode(s, idMap)),\n };\n}\n\n// ── Execution Log IR Models (#955) ──────────────────────────────────────────\n\nexport interface ExecutionLog {\n results: WorkoutResults;\n logs: StoredOutputStatement[];\n statements?: StoredOutputStatement[];\n blockKey?: string;\n sourceScript?: string;\n}\n\n// ── Corpus IR Models (#955) ─────────────────────────────────────────────────\n\nexport interface CorpusIRData {\n notes?: Note[];\n revisions?: BlockRevision[];\n blocks?: BlockIndexRow[];\n results?: Session[];\n facts?: AnalyticsDataPoint[];\n efforts?: IEffort[];\n logs?: StoredOutputStatement[];\n tags?: Record<string, string[]>;\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 '../ir';\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 '../ir';\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 } from '../store';\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';\nimport { createIRFile, isIRFile, type IrKind, type WodWikiIRFile, type ExecutionLog, type CorpusIRData } from '../ir';\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 (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 * 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 '../pack';\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 * 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 {\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; 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 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. */\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/** Open (creating if necessary) a local sqlite database with the wodwiki schema. */\nexport async function openCliDb(dbPath?: string): 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 resolved = resolveDbPath(dbPath);\n nodeFs().mkdirSync(nodePath().dirname(resolved), { recursive: true });\n const db = sql.libsqlDatabase(createClient({ url: `file:${resolved}` }));\n try {\n await sql.initializeStore(db);\n await sql.initializeDomain(db);\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// ---------------------------------------------------------------------------\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 {\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 '../ir';\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","/**\n * Import / Export exchange formats for notes and sessions.\n *\n * Pure row→string / string→row transforms with NO storage or fs coupling,\n * so the playground website can offer the same downloads/uploads against\n * IndexedDB rows while the CLI uses them over sqlite. Round-trip is a\n * design requirement: every export carries the identity needed to import\n * back into the same database (upsert) or into a clean one (recreate).\n *\n * - Notes export their exact authored source with an identity stamp.\n * `wod parse` adopts the stamp when importing the note.\n * - Sessions → one CSV row per metric (event + summary grains), session\n * fields repeated per row plus one session-only anchor row, so a clean\n * import recreates the session and its events verbatim.\n */\n\nimport { WQL_TYPED_TAG_KEYS } from '@bitcobblers/wod-wiki-wql';\nimport type { EventRecord } from '@bitcobblers/wod-wiki-core';\nimport type { Note, Session } from '@bitcobblers/wod-wiki-storage';\n\n// ---------------------------------------------------------------------------\n// Note markdown composition\n// ---------------------------------------------------------------------------\n\n/** Identity stamped into exported note markdown so imports can find their note. */\nexport const NOTE_ID_FRONTMATTER_KEY = 'wod-note-id';\n\nexport interface NoteIdentity { noteId: string; title?: string }\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n/** Read the stamped note identity from the leading frontmatter block, if any. */\nexport function extractNoteIdentity(markdown: string): NoteIdentity | undefined {\n const block = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(markdown);\n if (!block) return undefined;\n let noteId: string | undefined;\n let title: string | undefined;\n for (const line of block[1].split(/\\r?\\n/)) {\n const kv = line.match(/^([^:]+):\\s*(.*)$/);\n if (!kv) continue;\n const key = kv[1].trim();\n const value = kv[2].trim();\n if (key === NOTE_ID_FRONTMATTER_KEY && UUID_RE.test(value)) noteId = value;\n if (key === 'title' && value) title = value;\n }\n return noteId ? { noteId, title } : undefined;\n}\n\n/** True when a scalar is safe to emit bare in a `key: value` frontmatter line. */\nconst FRONTMATTER_SAFE = /^[^:#\\[\\]{}'\"*&,!?|>%@`\\s][^:#\\[\\]{}\"']*$/;\n\n/**\n * Ensure the leading frontmatter carries `title` + `wod-note-id`. Existing\n * keys are replaced in place; a missing block is prepended. Scalars needing\n * YAML quoting are skipped (the note row title is authoritative in storage).\n */\nexport function injectIdentityFrontmatter(markdown: string, identity: NoteIdentity): string {\n const stamp = (lines: string[]): string[] => {\n const replaceOrInsert = (key: string, value: string | undefined): void => {\n if (value === undefined || !FRONTMATTER_SAFE.test(value)) return;\n const idx = lines.findIndex((l) => l.startsWith(`${key}:`));\n if (idx >= 0) lines[idx] = `${key}: ${value}`;\n else lines.push(`${key}: ${value}`);\n };\n replaceOrInsert('title', identity.title);\n replaceOrInsert(NOTE_ID_FRONTMATTER_KEY, identity.noteId);\n return lines;\n };\n\n const block = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(markdown);\n if (block) {\n const newline = markdown.startsWith('---\\r\\n') ? '\\r\\n' : '\\n';\n const lines = stamp(block[1].split(/\\r?\\n/));\n return `---${newline}${lines.join(newline)}${newline}---${markdown.slice(block[0].length)}`;\n }\n const lines = stamp([]);\n return `---\\n${lines.join('\\n')}\\n---\\n\\n${markdown}`;\n}\n\n/** Export the exact authored Note source, with identity for re-import. */\nexport function composeNoteMarkdown(note: Note): string {\n return injectIdentityFrontmatter(note.rawContent, { noteId: note.id, title: note.title });\n}\n\n// ---------------------------------------------------------------------------\n// Frontmatter tags (general + typed: equipment, quality, …)\n// ---------------------------------------------------------------------------\n\nexport interface TypedTagItem { label: string; type?: string }\n\nconst FRONTMATTER_BLOCK_RE = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/;\n\n/**\n * Minimal frontmatter reader (the corpus subset): `key: scalar`, `key:` +\n * `- item` lists, and inline `[a, b]` lists. Keys are lowercased. Returns {}\n * when no leading block exists.\n */\nexport function readFrontmatterMeta(markdown: string): Record<string, string | string[]> {\n const match = FRONTMATTER_BLOCK_RE.exec(markdown);\n if (!match) return {};\n const meta: Record<string, string | string[]> = {};\n const lines = match[1].split(/\\r?\\n/);\n let currentListKey: string | undefined;\n for (const rawLine of lines) {\n const line = rawLine.trimEnd();\n const item = line.match(/^\\s+-\\s+(.*)$/);\n if (item && currentListKey) {\n (meta[currentListKey] as string[]).push(item[1].trim());\n continue;\n }\n const kv = line.match(/^([^:]+):\\s*(.*)$/);\n if (!kv) continue;\n const key = kv[1].trim().toLowerCase();\n const value = kv[2].trim();\n if (value === '') {\n meta[key] = [];\n currentListKey = key;\n } else if (value.startsWith('[') && value.endsWith(']')) {\n meta[key] = value\n .slice(1, -1)\n .split(',')\n .map((v) => v.trim().replace(/^['\"]|['\"]$/g, ''))\n .filter((v) => v.length > 0);\n currentListKey = undefined;\n } else {\n meta[key] = value;\n currentListKey = undefined;\n }\n }\n return meta;\n}\n\nconst asList = (value: string | string[] | undefined): string[] =>\n Array.isArray(value)\n ? value\n : typeof value === 'string'\n ? value.split(',').map((v) => v.trim()).filter((v) => v.length > 0)\n : [];\n\n/**\n * Extract a note's frontmatter tags: the general `tags:` list plus typed\n * keys (equipment, quality, domain, format, intent by default — the WQL\n * typed-tag vocabulary). Mirrors the playground's\n * `extractTypedFrontmatterTags` (frontmatter.ts) so CLI and app imports\n * classify identically.\n */\nexport function extractTypedTags(\n markdown: string,\n typedKeys: readonly string[] = WQL_TYPED_TAG_KEYS,\n): TypedTagItem[] {\n const meta = readFrontmatterMeta(markdown);\n const results: TypedTagItem[] = asList(meta['tags']).map((label) => ({ label }));\n const metaKeys = Object.keys(meta);\n for (const typeName of typedKeys) {\n if (typeName === 'tags') continue;\n const matchedKey = metaKeys.find((k) => k === typeName.toLowerCase());\n if (!matchedKey) continue;\n for (const label of asList(meta[matchedKey])) {\n results.push({ label, type: typeName });\n }\n }\n return results.filter((t) => t.label.length > 0);\n}\n\n// ---------------------------------------------------------------------------\n// Effort registry (markdown round-trip — the corpus effort file format)\n// ---------------------------------------------------------------------------\n\nexport interface EffortFileFields {\n id: string;\n slug: string;\n label: string;\n aliases: string[];\n baseAttributes: Record<string, unknown>;\n body?: string;\n}\n\n/**\n * Parse a corpus-style effort markdown file: frontmatter `id`/`slug`/`label`\n * (required), `aliases` list, one-level scalar `baseAttributes` with a\n * numeric `met`, plus an optional markdown body. Parity with the seed\n * importer's effort materialization.\n */\nexport function markdownToEffort(raw: string): EffortFileFields | null {\n const match = FRONTMATTER_BLOCK_RE.exec(raw);\n if (!match) return null;\n const meta = readFrontmatterMeta(raw);\n const body = raw.slice(match[0].length).trim();\n const id = scalarOf(meta['id']);\n const slug = scalarOf(meta['slug']);\n const label = scalarOf(meta['label']);\n if (!id || !slug || !label) return null;\n const baseAttributes: Record<string, unknown> = {};\n // One nested level, scalar values (met/discipline/intensityTier/…).\n const blockRe = /^\\s{2,}([^:]+):\\s*(.+)$/;\n let inAttrs = false;\n for (const line of match[1].split(/\\r?\\n/)) {\n if (/^baseAttributes:/.test(line)) {\n inAttrs = true;\n continue;\n }\n if (inAttrs) {\n const attr = blockRe.exec(line);\n if (attr && /^ {2,}/.test(line)) {\n const v = attr[2].trim();\n baseAttributes[attr[1].trim()] = /^\\d+(\\.\\d+)?$/.test(v) ? Number(v) : v;\n } else if (/^\\S/.test(line)) {\n inAttrs = false;\n }\n }\n }\n if (typeof baseAttributes['met'] !== 'number') return null;\n return {\n id,\n slug,\n label,\n aliases: asList(meta['aliases']),\n baseAttributes,\n ...(body ? { body } : {}),\n };\n}\n\n/** Compose an effort registry row back into corpus-style markdown. */\nexport function effortToMarkdown(effort: {\n id: string;\n slug: string;\n label: string;\n aliases?: string[];\n baseAttributes: Record<string, unknown>;\n body?: string;\n}): string {\n const lines = ['---', `id: ${effort.id}`, `slug: ${effort.slug}`, `label: ${effort.label}`];\n if (effort.aliases && effort.aliases.length > 0) {\n lines.push('aliases:');\n for (const alias of effort.aliases) lines.push(` - ${alias}`);\n }\n const attrs = Object.entries(effort.baseAttributes).filter(([, v]) => typeof v === 'number' || typeof v === 'string');\n if (attrs.length > 0) {\n lines.push('baseAttributes:');\n for (const [k, v] of attrs) lines.push(` ${k}: ${String(v)}`);\n }\n lines.push('---', '');\n return `${lines.join('\\n')}\\n${(effort.body ?? '').trim()}`.trimEnd() + '\\n';\n}\n\nfunction scalarOf(value: string | string[] | undefined): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Equipment catalog (typed tags, CSV round-trip)\n// ---------------------------------------------------------------------------\n\n/** One-label-per-row CSV (header `label`) for equipment catalogs. */\nexport function equipmentToCsv(labels: readonly string[]): string {\n return ['label', ...labels].map((l) => escapeCsvField(l)).join('\\n') + '\\n';\n}\n\nexport function csvToEquipmentLabels(csv: string): string[] {\n const lines = splitCsvRecords(csv);\n if (lines.length === 0) return [];\n const header = parseCsvLine(lines[0]);\n const labelIdx = header[0] === 'label' ? 0 : -1;\n const start = labelIdx >= 0 ? 1 : 0; // tolerate headerless files\n const labels: string[] = [];\n for (const line of lines.slice(start)) {\n const cells = parseCsvLine(line);\n const label = (labelIdx >= 0 ? cells[0] : cells.join(',')).trim();\n if (label) labels.push(label);\n }\n return [...new Set(labels)];\n}\n\n// ---------------------------------------------------------------------------\n// Session CSV\n// ---------------------------------------------------------------------------\n\ntype Metric = {\n type?: string;\n value?: unknown;\n unit?: string;\n image?: string;\n origin?: string;\n metadata?: unknown;\n name?: string;\n};\n\nconst SESSION_HEADER = [\n 'sessionId', 'noteId', 'blockId', 'blockVersion', 'blockContentId',\n 'origin', 'status', 'startTime', 'endTime', 'duration', 'completed', 'sessionCreatedAt', 'sessionExtraJson',\n] as const;\n\nconst EVENT_HEADER = [\n 'eventId', 'grain', 'outputType', 'timestamp', 'pageId', 'effortSlug',\n 'eventBlockId', 'eventBlockVersion', 'eventBlockContentId', 'eventOrigin',\n 'timeSpan', 'sourceBlockKey', 'sourceStatementId', 'line', 'text', 'dialect',\n 'stackLevel', 'completionReason', 'representationKind',\n 'metricType', 'metricValue', 'metricUnit', 'metricImage', 'metricOrigin',\n 'metricMetadata', 'metricTemporal',\n // Verbatim JSON backstops: make the machine round-trip lossless across\n // schema fields that have no dedicated spreadsheet column. Explicit cells\n // above still win on import, so hand-edited values are honored.\n 'metricJson', 'eventExtraJson',\n] as const;\n\nexport const SESSION_CSV_HEADER = [...SESSION_HEADER, ...EVENT_HEADER];\n\nfunction escapeCsvField(field: unknown): string {\n if (field === undefined || field === null) return '';\n const str = typeof field === 'object' ? JSON.stringify(field) : 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\nconst metricValueToCell = (value: unknown): string => {\n if (value === undefined || value === null) return '';\n if (typeof value === 'object') return JSON.stringify(value);\n return String(value);\n};\n\nconst metricValueFromCell = (cell: string): unknown => {\n if (cell === '') return undefined;\n if (/^-?\\d+(\\.\\d+)?$/.test(cell)) return Number(cell);\n if (cell === 'true' || cell === 'false') return cell === 'true';\n if (cell.startsWith('{') || cell.startsWith('[')) {\n try {\n return JSON.parse(cell);\n } catch {\n return cell;\n }\n }\n return cell;\n};\n\nfunction sessionCells(session: Session): string[] {\n return [\n session.id, session.noteId, session.blockId, session.blockVersion,\n session.blockContentId, session.origin, session.status,\n session.startTime, session.endTime, session.duration, session.completed,\n session.createdAt, JSON.stringify(session),\n ].map(escapeCsvField);\n}\n\nfunction metricCells(event: EventRecord, metric: Metric, index: number): string[] {\n return [\n event.id, event.grain, event.outputType, event.timestamp, event.pageId, event.effortSlug,\n event.blockId, event.blockVersion, event.blockContentId, event.origin,\n event.timeSpan, event.sourceBlockKey, event.sourceStatementId, event.line, event.text, event.dialect,\n event.stackLevel, event.completionReason, event.representationKind,\n metric.type, metricValueToCell(metric.value), metric.unit, metric.image, metric.origin,\n metric.metadata === undefined ? '' : JSON.stringify(metric.metadata),\n event.metricTemporal?.[index] === undefined ? '' : JSON.stringify(event.metricTemporal[index]),\n JSON.stringify(metric),\n ].map(escapeCsvField);\n}\n\n/** Event fields with no dedicated column, serialized verbatim (minus the\n * metrics array, which gets its own columns). metricTemporal is kept: the\n * importer discards it and rebuilds from the per-row column, so an empty\n * array still round-trips where no rows carry temporals. Returns the\n * CSV-escaped cell. */\nfunction eventExtraCells(event: EventRecord): string {\n const { metrics: _metrics, ...rest } = event;\n return escapeCsvField(JSON.stringify(rest));\n}\n\n/**\n * Serialize a session + its events to CSV — one row per metric, preceded by\n * one session anchor row (empty event columns). Import with\n * {@link csvToSessionRows}.\n */\nexport function sessionToCsv(session: Session, events: readonly EventRecord[]): string {\n const lines = [SESSION_CSV_HEADER.join(',')];\n lines.push([...sessionCells(session), ...EVENT_HEADER.map(() => '')].join(','));\n const ordered = [...events].sort((a, b) => a.id.localeCompare(b.id));\n for (const event of ordered) {\n const extra = eventExtraCells(event);\n const metrics = event.metrics ?? [];\n if (metrics.length === 0) {\n lines.push([...sessionCells(session), ...metricCells(event, { type: '' }, 0), extra].join(','));\n continue;\n }\n for (let i = 0; i < metrics.length; i++) {\n lines.push([...sessionCells(session), ...metricCells(event, metrics[i], i), extra].join(','));\n }\n }\n return lines.join('\\n') + '\\n';\n}\n\n/** Parse one CSV line, honoring double-quoted fields (RFC 4180 subset). */\nexport function parseCsvLine(line: string): string[] {\n const cells: string[] = [];\n let current = '';\n let quoted = false;\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if (quoted) {\n if (ch === '\"') {\n if (line[i + 1] === '\"') {\n current += '\"';\n i += 1;\n } else {\n quoted = false;\n }\n } else {\n current += ch;\n }\n } else if (ch === '\"' && current === '') {\n quoted = true;\n } else if (ch === ',') {\n cells.push(current);\n current = '';\n } else {\n current += ch;\n }\n }\n cells.push(current);\n return cells;\n}\n\n/** Split CSV into records on newlines that are NOT inside quoted fields. */\nexport function splitCsvRecords(csv: string): string[] {\n const records: string[] = [];\n let current = '';\n let quoted = false;\n for (let i = 0; i < csv.length; i++) {\n const ch = csv[i];\n if (ch === '\"') {\n if (quoted && csv[i + 1] === '\"') {\n current += '\"\"';\n i += 1;\n continue;\n }\n quoted = !quoted;\n current += ch;\n } else if (!quoted && (ch === '\\n' || ch === '\\r')) {\n if (ch === '\\r' && csv[i + 1] === '\\n') i += 1;\n if (current.length > 0) records.push(current);\n current = '';\n } else {\n current += ch;\n }\n }\n if (current.length > 0) records.push(current);\n return records;\n}\n\nexport interface SessionImportRows {\n session: Session;\n events: EventRecord[];\n}\n\nconst num = (cell: string): number | undefined => (cell === '' ? undefined : Number(cell));\nconst nonempty = (cell: string): string | undefined => (cell === '' ? undefined : cell);\n\nfunction jsonCell<T>(cell: string): T | undefined {\n if (!cell) return undefined;\n try {\n return JSON.parse(cell) as T;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Parse {@link sessionToCsv} output back into a session + event rows.\n * The session anchor row may be absent (pure event export) as long as\n * session columns are present on the event rows.\n */\nexport function csvToSessionRows(csv: string): SessionImportRows {\n const lines = splitCsvRecords(csv);\n if (lines.length < 2) throw new Error('[wod import] Session CSV has no data rows');\n const header = parseCsvLine(lines[0]);\n if (header.some((name) => /segment/i.test(name))) {\n throw new Error('[wod import] Incompatible Session CSV segment pins; blockId/blockVersion are required');\n }\n const col = (name: string): number => {\n const idx = header.indexOf(name);\n if (idx < 0) throw new Error(`[wod import] Session CSV missing column \"${name}\"`);\n return idx;\n };\n const at = (cells: string[], name: string): string => cells[col(name)] ?? '';\n\n const eventRows = new Map<string, EventRecord>();\n let session: Session | undefined;\n\n const ensureSession = (cells: string[]): Session => {\n const id = at(cells, 'sessionId');\n const noteId = at(cells, 'noteId');\n const blockId = at(cells, 'blockId');\n const blockVersion = Number(at(cells, 'blockVersion'));\n if (!id || !noteId || !blockId || !Number.isSafeInteger(blockVersion) || blockVersion < 1) {\n throw new Error('[wod import] Session CSV requires sessionId, noteId, blockId and positive blockVersion');\n }\n if (session) {\n if (session.id !== id || session.noteId !== noteId || session.blockId !== blockId || session.blockVersion !== blockVersion) {\n throw new Error('[wod import] Session CSV contains inconsistent source pins');\n }\n return session;\n }\n const extra = jsonCell<Partial<Session>>(at(cells, 'sessionExtraJson')) ?? {};\n if ('segmentId' in extra || 'segmentVersion' in extra || 'version' in extra || 'rawContent' in extra || 'data' in extra) {\n throw new Error('[wod import] Incompatible Session CSV source snapshot or segment pin');\n }\n session = {\n ...extra,\n id,\n noteId,\n blockId,\n blockVersion,\n blockContentId: at(cells, 'blockContentId') || undefined,\n origin: (at(cells, 'origin') || undefined) as Session['origin'],\n status: (at(cells, 'status') || undefined) as Session['status'],\n startTime: Number(at(cells, 'startTime') || 0),\n endTime: Number(at(cells, 'endTime') || 0),\n duration: Number(at(cells, 'duration') || 0),\n completed: at(cells, 'completed') === 'true',\n createdAt: Number(at(cells, 'sessionCreatedAt') || 0),\n };\n if (![session.startTime, session.endTime, session.duration, session.createdAt].every(Number.isFinite)) {\n throw new Error('[wod import] Session CSV lifecycle values must be finite numbers');\n }\n return session;\n };\n\n for (const line of lines.slice(1)) {\n const cells = parseCsvLine(line);\n if (cells.length === 1 && cells[0] === '') continue;\n const currentSession = ensureSession(cells);\n const eventId = at(cells, 'eventId');\n if (!eventId) continue; // session anchor row\n\n let event = eventRows.get(eventId);\n if (!event) {\n // eventExtraJson is the verbatim backstop; explicit spreadsheet cells\n // override it so hand-edited values are honored on import.\n const extra = jsonCell<Record<string, unknown>>(at(cells, 'eventExtraJson')) ?? {};\n if ('segmentId' in extra || 'segmentVersion' in extra) {\n throw new Error('[wod import] Incompatible Session CSV event segment pins');\n }\n const blockId = nonempty(at(cells, 'eventBlockId'));\n const blockVersion = num(at(cells, 'eventBlockVersion'));\n if (blockId !== currentSession.blockId || blockVersion !== currentSession.blockVersion) {\n throw new Error('[wod import] Event source pin differs from Session source pin');\n }\n event = {\n ...extra,\n id: eventId,\n resultId: currentSession.id,\n noteId: nonempty(at(cells, 'noteId')) ?? (extra.noteId as string | undefined) ?? currentSession.noteId,\n blockContentId: nonempty(at(cells, 'eventBlockContentId')) ?? (extra.blockContentId as string | undefined),\n pageId: nonempty(at(cells, 'pageId')) ?? (extra.pageId as string | undefined),\n origin: (nonempty(at(cells, 'eventOrigin')) ?? extra.origin) as EventRecord['origin'],\n timestamp: Number(at(cells, 'timestamp') || extra.timestamp || 0),\n grain: (nonempty(at(cells, 'grain')) ?? extra.grain ?? 'event') as EventRecord['grain'],\n effortSlug: nonempty(at(cells, 'effortSlug')) ?? (extra.effortSlug as string | undefined),\n outputType: nonempty(at(cells, 'outputType')) ?? (extra.outputType as string | undefined) ?? 'event',\n blockId,\n blockVersion,\n timeSpan: jsonCell(at(cells, 'timeSpan')) ?? (extra.timeSpan as EventRecord['timeSpan']),\n sourceBlockKey: nonempty(at(cells, 'sourceBlockKey')) ?? (extra.sourceBlockKey as string | undefined),\n sourceStatementId: num(at(cells, 'sourceStatementId')) ?? (extra.sourceStatementId as number | undefined),\n line: num(at(cells, 'line')) ?? (extra.line as number | undefined),\n text: nonempty(at(cells, 'text')) ?? (extra.text as string | undefined),\n dialect: nonempty(at(cells, 'dialect')) ?? (extra.dialect as string | undefined),\n stackLevel: num(at(cells, 'stackLevel')) ?? (extra.stackLevel as number | undefined),\n completionReason: nonempty(at(cells, 'completionReason')) ?? (extra.completionReason as string | undefined),\n representationKind: (nonempty(at(cells, 'representationKind')) ??\n extra.representationKind) as EventRecord['representationKind'],\n metrics: [],\n // Rebuild anchors from metric rows while preserving an authored empty array.\n metricTemporal: Array.isArray(extra.metricTemporal) ? [] : undefined,\n };\n eventRows.set(eventId, event);\n }\n\n const metricType = at(cells, 'metricType');\n if (!metricType) continue; // metrics:[] event row\n // metricJson is the verbatim backstop; explicit cells override it.\n const baseMetric = jsonCell<Metric>(at(cells, 'metricJson')) ?? {};\n const metric: Metric = {\n ...baseMetric,\n type: metricType,\n ...(at(cells, 'metricValue') !== '' ? { value: metricValueFromCell(at(cells, 'metricValue')) } : {}),\n ...(nonempty(at(cells, 'metricUnit')) ? { unit: at(cells, 'metricUnit') } : {}),\n ...(nonempty(at(cells, 'metricImage')) ? { image: at(cells, 'metricImage') } : {}),\n ...(nonempty(at(cells, 'metricOrigin')) ? { origin: at(cells, 'metricOrigin') } : {}),\n ...(at(cells, 'metricMetadata') !== ''\n ? { metadata: jsonCell(at(cells, 'metricMetadata')) }\n : {}),\n };\n (event.metrics as Metric[]).push(metric);\n const temporal = jsonCell<unknown>(at(cells, 'metricTemporal'));\n if (temporal !== undefined) {\n (event.metricTemporal ??= []).push(temporal as NonNullable<EventRecord['metricTemporal']>[number]);\n }\n }\n\n if (!session) throw new Error('[wod import] Session CSV did not contain session columns');\n return { session, events: [...eventRows.values()] };\n}\n","import { mapNoteBlockChanges, reconcileNoteBlocks, validateNoteBlocks, type BlockRevision, type Note, type NoteBlock, type NoteTag, type Page, type PageNote, type Tag } from '@bitcobblers/wod-wiki-core';\nimport type { IStorage, IReadWriteStore } from '@bitcobblers/wod-wiki-storage';\nimport { extractTypedTags, readFrontmatterMeta } from '../../exchange';\nimport { parseEffortFile } from './effort-file';\nimport { DASHBOARDS_CHUNK_ID, EFFORTS_CHUNK_ID, SEED_REGISTERED_WIDGETS, SEED_SCHEMA, catalogForChunkId, seedNoteSourceId, type SeedManifest, type SeedMetaRecord, type SeedRow } from './contract';\nimport { assertSeedManifest, assertSeedRows } from './validation';\n\nconst SEED_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341';\nexport async function seedNoteId(path: string): Promise<string> {\n const digest = await crypto.subtle.digest('SHA-1', new TextEncoder().encode(`${SEED_NAMESPACE}:${path}`));\n const bytes = new Uint8Array(digest.slice(0, 16));\n bytes[6] = (bytes[6] & 0x0f) | 0x50;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\nfunction equal(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true;\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') return false;\n const ak = Object.keys(a).filter((key) => Reflect.get(a, key) !== undefined), bk = Object.keys(b).filter((key) => Reflect.get(b, key) !== undefined);\n return ak.length === bk.length && ak.every((key) => key in b && equal(Reflect.get(a, key), Reflect.get(b, key)));\n}\nfunction titleFromPath(path: string): string {\n return (path.split('/').at(-1) ?? path).replace(/\\.md$/, '').replace(/[-_]+/g, ' ').replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\nfunction refreshedBlocks(existing: Note, rawContent: string, sourceRevision: number): Record<string, NoteBlock> {\n const old = existing.rawContent;\n let from = 0, endOld = old.length, endNew = rawContent.length;\n while (from < endOld && from < endNew && old[from] === rawContent[from]) from++;\n while (endOld > from && endNew > from && old[endOld - 1] === rawContent[endNew - 1]) { endOld--; endNew--; }\n const intersect = Object.values(existing.blocks).filter((b) => from < b.to && endOld > b.from);\n // A source-only refresh proves lineage only outside blocks or within one occurrence.\n const trusted = intersect.length <= 1 ? existing.blocks : Object.fromEntries(Object.entries(existing.blocks).filter(([, b]) => !intersect.includes(b)));\n const mapped = mapNoteBlockChanges(trusted, [{ from, to: endOld, insert: rawContent.slice(from, endNew) }]);\n let ordinal = 0;\n return reconcileNoteBlocks(rawContent, { sourceRevision, blocks: mapped, registeredWidgets: SEED_REGISTERED_WIDGETS, createId: () => `seed:${existing.id}:r${sourceRevision}:${ordinal++}` });\n}\n\nexport interface SeedChunkWrite {\n chunkId: string | null;\n rows: SeedRow[];\n manifest: SeedManifest;\n expectedMeta: SeedMetaRecord | undefined;\n meta: SeedMetaRecord;\n}\nexport interface SeedChunkResult {\n totalNotes: number;\n totalEfforts: number;\n totalBlocks: number;\n skippedUserOwned: number;\n deleted: number;\n}\n\nasync function putChanged<T>(store: IReadWriteStore<T>, values: T[], keys: IDBValidKey[]): Promise<void> {\n if (!values.length) return;\n const prior = await store.getMany(keys);\n const changed = values.filter((value, i) => !equal(value, prior[i]));\n if (changed.length) await store.putMany(changed);\n}\n\nexport async function applySeedChunk(storage: IStorage, write: SeedChunkWrite): Promise<SeedChunkResult> {\n assertSeedManifest(write.manifest);\n assertSeedRows(write.rows);\n const result: SeedChunkResult = { totalNotes: 0, totalEfforts: 0, totalBlocks: 0, skippedUserOwned: 0, deleted: 0 };\n const ids = await Promise.all(write.rows.map((row) => seedNoteId(row.path)));\n const pagesBySlug = new Map<string, string>();\n const linkIds = new Map<string, string>();\n const tagIds = new Map<string, string>();\n for (const [i, row] of write.rows.entries()) {\n const slug = readFrontmatterMeta(row.content)['slug'];\n if (typeof slug === 'string' && slug.trim()) {\n pagesBySlug.set(slug, await seedNoteId(`page:${slug}`));\n linkIds.set(ids[i], await seedNoteId(`pagenote:${slug}:${row.path}`));\n }\n for (const { label } of extractTypedTags(row.content)) {\n if (!tagIds.has(label)) tagIds.set(label, await seedNoteId(`tag:${label}`));\n }\n }\n return storage.transaction(['notes', 'block_revisions', 'block_index', 'block_efforts', 'page', 'page_notes', 'tags', 'note_tags', 'efforts', 'meta'], 'readwrite', async (tx) => {\n const metaStore = tx.readwrite('meta');\n const actualMeta = await metaStore.get(write.meta.key);\n if (!equal(actualMeta, write.expectedMeta)) throw new Error('Seed checkpoint changed during import');\n if (write.meta.schema !== SEED_SCHEMA || write.manifest.schema !== SEED_SCHEMA) throw new Error('Incompatible seed schema; recreate artifacts');\n const noteStore = tx.readwrite('notes');\n const priorIds = write.chunkId ? write.expectedMeta?.chunks[write.chunkId]?.noteIds ?? [] : [];\n const declared = new Set(ids);\n const goneIds = priorIds.filter((id) => !declared.has(id));\n const allIds = [...new Set([...ids, ...goneIds])];\n const stored = await noteStore.getMany(allIds);\n const existingById = new Map(allIds.map((id, i) => [id, stored[i]]));\n const ownedIds = allIds.filter((id) => { const note = existingById.get(id); return !note || note.seedOrigin === 'seed' && (declared.has(id) || note.seedChunkId === write.chunkId); });\n const owned = new Set(ownedIds);\n const revisionStore = tx.readwrite('block_revisions');\n const historyIds = ids.filter((id, i) => owned.has(id) && existingById.get(id)?.rawContent !== write.rows[i].content);\n const histories = await revisionStore.getAllFromIndexMany('by-note', historyIds);\n const history = new Map(historyIds.map((id, i) => [id, histories[i]]));\n const indexStore = tx.readwrite('block_index'), effortLinks = tx.readwrite('block_efforts');\n const tagLinks = tx.readwrite('note_tags'), pageLinks = tx.readwrite('page_notes');\n const currentIndexes = await indexStore.getAllFromIndexMany('by-note', ownedIds);\n const currentEfforts = await effortLinks.getAllFromIndexMany('by-note', ownedIds);\n const currentTags = await tagLinks.getAllFromIndexMany('by-note', ownedIds);\n const currentPages = await pageLinks.getAllFromIndexMany('by-note', ownedIds);\n const slot = new Map(ownedIds.map((id, i) => [id, i]));\n const tagsStore = tx.readwrite('tags');\n const labels = [...tagIds.keys()];\n const matches = await tagsStore.getAllFromIndexMany('by-label', labels);\n const tagsByLabel = new Map(labels.map((label, i) => [label, matches[i][0]]));\n const changedTags: Tag[] = [], changedNotes: Note[] = [], revisions: BlockRevision[] = [], pages: Page[] = [], pageNotes: PageNote[] = [], noteTags: NoteTag[] = [];\n const blocks: SeedRow['blockIndex'] = [], blockEfforts: SeedRow['blockEfforts'] = [];\n for (const [i, row] of write.rows.entries()) {\n const id = ids[i], existing = existingById.get(id);\n if (!owned.has(id)) { result.skippedUserOwned++; continue; }\n validateNoteBlocks(row.content, row.blocks, 1, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n const sourceRevision = existing ? existing.sourceRevision + (existing.rawContent === row.content ? 0 : 1) : 1;\n let ordinal = 0;\n const retainedHistory = history.get(id) ?? [];\n const map = !existing\n ? retainedHistory.length ? reconcileNoteBlocks(row.content, { sourceRevision, registeredWidgets: SEED_REGISTERED_WIDGETS, createId: () => `seed:${id}:new${retainedHistory.length}:${ordinal++}` }) : structuredClone(row.blocks)\n : existing.rawContent === row.content ? structuredClone(existing.blocks) : refreshedBlocks(existing, row.content, sourceRevision);\n for (const block of Object.values(map)) {\n const saved = (history.get(id) ?? []).filter((r) => r.blockId === block.id).sort((a, b) => b.version - a.version)[0];\n const source = row.content.slice(block.from, block.to);\n if (existing?.rawContent === row.content) continue;\n const same = saved && saved.kind === block.kind && saved.rawContent === source && saved.dialect === block.dialect && saved.sport === block.sport;\n block.version = !existing ? 1 : same ? saved.version : (saved?.version ?? 0) + 1;\n if (!existing || !same) revisions.push({ noteId: id, blockId: block.id, version: block.version, kind: block.kind, rawContent: source, savedAt: write.meta.importedAt, ...(block.dialect ? { dialect: block.dialect } : {}), ...(block.sport ? { sport: block.sport } : {}) });\n }\n validateNoteBlocks(row.content, map, sourceRevision, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n const fm = readFrontmatterMeta(row.content);\n const title = typeof fm['title'] === 'string' && fm['title'].trim() ? fm['title'].trim() : titleFromPath(row.path);\n const sourceId = write.chunkId ? seedNoteSourceId(row.path, row.content, write.chunkId) : undefined;\n if (!sourceId) throw new Error(`Unknown seed source family ${write.chunkId}`);\n const date = typeof fm['date'] === 'string' && /^\\d{4}-\\d{2}-\\d{2}$/.test(fm['date']) ? Date.parse(`${fm['date']}T12:00:00Z`) : undefined;\n const note: Note = { ...existing, id, title, rawContent: row.content, sourceRevision, blocks: map, createdAt: write.manifest.version, ...(date === undefined ? {} : { date }), type: write.chunkId === DASHBOARDS_CHUNK_ID ? 'dashboard' : 'note', sourceId, catalog: catalogForChunkId(write.chunkId ?? ''), seedOrigin: 'seed', seedVersion: write.manifest.version, seedChunkId: write.chunkId ?? undefined, sourcePath: row.path };\n if (date === undefined) delete note.date;\n if (!equal(note, existing)) changedNotes.push(note);\n const byRange = new Map(Object.values(map).map((b) => [`${b.from}:${b.to}`, b]));\n const compiledById = new Map(row.blockIndex.map((b) => [b.blockId, b]));\n const remap = new Map<string, string>();\n for (const compiled of row.blockIndex) {\n const block = byRange.get(`${compiled.from}:${compiled.to}`);\n if (!block || block.kind !== compiled.dataType) throw new Error('Orphan seed projection');\n remap.set(compiled.blockId, block.id);\n const projection = { ...compiled, id: `${id}:${block.id}`, noteId: id, blockId: block.id, blockVersion: block.version, sourceRevision, noteTitle: title, sourceId, sourcePath: row.path, rawContent: row.content.slice(block.from, block.to) };\n const prior = currentIndexes[slot.get(id)!].find((b) => b.id === projection.id);\n if (!prior || prior.isStatic === true) blocks.push(projection);\n }\n for (const compiled of row.blockEfforts) {\n const blockId = remap.get(compiled.blockId);\n if (!blockId || compiledById.get(compiled.blockId)?.dataType !== 'wod') throw new Error('Orphan seed effort link');\n const link = { ...compiled, id: `${id}:${blockId}:${compiled.effortSlug}`, noteId: id, blockId, sourcePath: row.path };\n const prior = currentEfforts[slot.get(id)!].find((b) => b.id === link.id);\n if (!prior || prior.isStatic === true) blockEfforts.push(prior ? { ...link, createdAt: prior.createdAt } : link);\n }\n const n = slot.get(id)!;\n const wantedTags = new Set<string>();\n for (const item of extractTypedTags(row.content)) {\n let tag = tagsByLabel.get(item.label);\n if (!tag) { tag = { id: tagIds.get(item.label)!, label: item.label, type: item.type, createdAt: write.meta.importedAt }; changedTags.push(tag); tagsByLabel.set(item.label, tag); }\n else if (item.type && !tag.type) { tag = { ...tag, type: item.type }; changedTags.push(tag); tagsByLabel.set(item.label, tag); }\n if (wantedTags.has(tag.id)) continue;\n wantedTags.add(tag.id);\n const link = currentTags[n].find((l) => l.tagId === tag.id);\n if (!link) noteTags.push({ id: `${id}:${tag.id}`, noteId: id, tagId: tag.id });\n }\n for (const link of currentTags[n]) if (!wantedTags.has(link.tagId)) await tagLinks.delete(link.id);\n const slug = fm['slug'];\n if (typeof slug === 'string' && pagesBySlug.has(slug)) {\n const pageId = pagesBySlug.get(slug)!;\n pages.push({ id: pageId, slug, title: titleFromPath(row.path), createdAt: write.manifest.version });\n pageNotes.push({ id: linkIds.get(id)!, pageId, noteId: id, createdAt: write.manifest.version });\n }\n result.totalNotes++;\n result.totalBlocks += Object.keys(map).length;\n }\n const wantedBlocks = new Set(blocks.map((b) => b.id)), wantedEfforts = new Set(blockEfforts.map((b) => b.id));\n for (const rows of currentIndexes) for (const row of rows) if (row.isStatic === true && !wantedBlocks.has(row.id)) await indexStore.delete(row.id);\n for (const rows of currentEfforts) for (const row of rows) if (row.isStatic === true && !wantedEfforts.has(row.id)) await effortLinks.delete(row.id);\n for (const id of goneIds) {\n if (!owned.has(id) || !existingById.get(id)) continue;\n const n = slot.get(id)!;\n await noteStore.delete(id);\n for (const link of currentTags[n]) await tagLinks.delete(link.id);\n for (const link of currentPages[n]) await pageLinks.delete(link.id);\n result.deleted++;\n }\n const effortStore = tx.readwrite('efforts');\n if (write.chunkId === EFFORTS_CHUNK_ID) {\n const efforts = write.rows.filter((_row, i) => owned.has(ids[i])).map((r) => parseEffortFile(r.content)).filter((e) => e !== null).map((e) => ({ ...e, registrySource: 'bundled' as const }));\n const prior = await effortStore.getMany(efforts.map((e) => e.slug));\n const changed = efforts.filter((e, i) => (!prior[i] || prior[i]?.registrySource === 'bundled') && !equal(e, prior[i]));\n if (changed.length) await effortStore.putMany(changed);\n result.totalEfforts = changed.length;\n const wantedSlugs = new Set(efforts.map((effort) => effort.slug));\n const removed = allIds.map((id) => { const note = existingById.get(id); return owned.has(id) && note ? parseEffortFile(note.rawContent)?.slug : undefined; }).filter((slug): slug is string => !!slug && !wantedSlugs.has(slug));\n const old = await effortStore.getMany(removed);\n for (const [i, effort] of old.entries()) if (effort?.registrySource === 'bundled') await effortStore.delete(removed[i]);\n }\n if (changedNotes.length) await noteStore.putMany(changedNotes);\n if (revisions.length) await revisionStore.putMany(revisions);\n await putChanged(indexStore, blocks, blocks.map((b) => b.id));\n await putChanged(effortLinks, blockEfforts, blockEfforts.map((b) => b.id));\n if (changedTags.length) await tagsStore.putMany([...new Map(changedTags.map((t) => [t.id, t])).values()]);\n if (noteTags.length) await tagLinks.putMany(noteTags);\n await putChanged(tx.readwrite('page'), pages, pages.map((p) => p.id));\n await putChanged(pageLinks, pageNotes, pageNotes.map((p) => p.id));\n await metaStore.put(write.meta);\n return result;\n });\n}\n\n","import { blockContentId, parseDocumentSections, validateNoteBlocks } from '@bitcobblers/wod-wiki-core';\nimport { SEED_REGISTERED_WIDGETS, SEED_SCHEMA, type SeedManifest, type SeedRow } from './contract';\n\nfunction object(value: unknown): value is Record<string, unknown> { return typeof value === 'object' && value !== null && !Array.isArray(value); }\nfunction positive(value: unknown): value is number { return typeof value === 'number' && Number.isSafeInteger(value) && value > 0; }\nfunction nonnegative(value: unknown): value is number { return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0; }\nexport function assertSeedManifest(value: unknown): SeedManifest {\n if (!object(value) || value.schema !== SEED_SCHEMA) throw new Error('Incompatible seed schema; rebuild seed artifacts');\n if (!nonnegative(value.version) || typeof value.builtAt !== 'string' || !Number.isFinite(Date.parse(value.builtAt)) || !Array.isArray(value.chunks)) throw new Error('seed manifest failed shape validation');\n for (const key of ['versionLabel', 'commit']) if (value[key] !== undefined && typeof value[key] !== 'string') throw new Error('invalid seed manifest metadata');\n if (value.dirty !== undefined && typeof value.dirty !== 'boolean') throw new Error('invalid seed manifest metadata');\n const ids = new Set<string>(), paths = new Set<string>();\n for (const chunk of value.chunks) {\n if (!object(chunk) || typeof chunk.id !== 'string' || !chunk.id || typeof chunk.path !== 'string' || !/^chunks\\/[a-zA-Z0-9._-]+\\.json$/.test(chunk.path) || typeof chunk.sha256 !== 'string' || !/^[0-9a-f]{64}$/.test(chunk.sha256) || !nonnegative(chunk.bytes) || !nonnegative(chunk.count) || (chunk.kind !== undefined && chunk.kind !== 'notes') || ids.has(chunk.id) || paths.has(chunk.path)) throw new Error('seed manifest failed shape validation');\n ids.add(chunk.id); paths.add(chunk.path);\n }\n return value as unknown as SeedManifest;\n}\nexport function assertSeedRows(value: unknown): SeedRow[] {\n if (!Array.isArray(value)) throw new Error('seed chunk is not an array');\n const paths = new Set<string>();\n for (const row of value) {\n if (!object(row) || typeof row.path !== 'string' || !row.path || row.path.startsWith('/') || row.path.split('/').includes('..') || paths.has(row.path) || typeof row.content !== 'string' || !object(row.blocks) || !Array.isArray(row.blockIndex) || !Array.isArray(row.blockEfforts)) throw new Error('seed chunk row failed shape validation');\n paths.add(row.path);\n for (const [id, block] of Object.entries(row.blocks)) {\n if (!object(block) || block.id !== id || !id || block.version !== 1 || block.sourceRevision !== 1 || !nonnegative(block.from) || !positive(block.to) || block.from >= block.to || block.to > row.content.length || !['wod', 'query', 'widget', 'embed'].includes(String(block.kind)) || (block.kind === 'wod' ? !['time', 'log'].includes(String(block.dialect)) : block.dialect !== undefined) || (block.sport !== undefined && typeof block.sport !== 'string')) throw new Error('invalid seed block range or revision');\n }\n validateNoteBlocks(row.content, row.blocks as SeedRow['blocks'], 1, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n const indexed = new Set<string>();\n const sections = parseDocumentSections(row.content, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n for (const projection of row.blockIndex) {\n if (!object(projection) || typeof projection.blockId !== 'string') throw new Error('invalid seed projection');\n const block = row.blocks[projection.blockId];\n if (!object(block) || indexed.has(projection.blockId) || typeof projection.id !== 'string' || typeof projection.noteId !== 'string' || projection.id !== `${projection.noteId}:${projection.blockId}` || projection.blockVersion !== 1 || projection.sourceRevision !== 1 || projection.from !== block.from || projection.to !== block.to || projection.dataType !== block.kind || projection.rawContent !== row.content.slice(Number(block.from), Number(block.to)) || typeof projection.noteTitle !== 'string' || typeof projection.createdAt !== 'number' || !Number.isFinite(projection.createdAt) || projection.sourcePath !== row.path || projection.isStatic !== true) throw new Error('orphan or incompatible seed projection');\n if ('segmentId' in projection || 'segmentVersion' in projection) throw new Error('incompatible seed projection');\n for (const key of ['sourceId', 'routeId', 'blockContentId']) if (projection[key] !== undefined && typeof projection[key] !== 'string') throw new Error('invalid seed projection metadata');\n if (projection.position !== undefined && !nonnegative(projection.position)) throw new Error('invalid seed projection position');\n if (block.kind === 'wod') {\n const section = sections.find((s) => s.from === block.from && s.to === block.to);\n if (projection.blockContentId !== blockContentId(section?.scriptBlock?.content ?? row.content.slice(Number(block.from), Number(block.to)))) throw new Error('invalid seed workout fingerprint');\n } else if (projection.blockContentId !== undefined) throw new Error('non-workout seed fingerprint');\n indexed.add(projection.blockId);\n }\n if (indexed.size !== Object.keys(row.blocks).length) throw new Error('missing actionable seed projection');\n const links = new Set<string>();\n for (const link of row.blockEfforts) {\n if (!object(link) || typeof link.blockId !== 'string' || typeof link.noteId !== 'string' || typeof link.effortSlug !== 'string' || !link.effortSlug) throw new Error('invalid seed effort identity');\n const block = row.blocks[link.blockId];\n if (link.id !== `${link.noteId}:${link.blockId}:${link.effortSlug}` || links.has(String(link.id)) || !object(block) || block.kind !== 'wod' || !indexed.has(link.blockId) || link.sourcePath !== row.path || link.isStatic !== true || typeof link.createdAt !== 'number') throw new Error('orphan or incompatible seed effort link');\n const projection = row.blockIndex.find((p: unknown) => object(p) && p.blockId === link.blockId);\n if (!object(projection) || link.noteId !== projection.noteId || link.blockContentId !== projection.blockContentId || !Number.isFinite(link.createdAt)) throw new Error('invalid seed effort metadata');\n links.add(String(link.id));\n }\n }\n return value as SeedRow[];\n}","import { nodeFs, nodePath, type CliDb } from './db';\nimport { applySeedChunk, seedNoteId, type SeedChunkResult } from './seedbuild/runtime';\nimport { assertSeedManifest, assertSeedRows } from './seedbuild/validation';\nimport { CANVAS_CHUNK_ID, SEED_SCHEMA, emptySeedMeta, seedMetaKey, type SeedMetaRecord } from './seedbuild/contract';\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 '../ir';\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 * 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 resolveDbPath,\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 { 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 '../exchange';\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 '../ir';\nconst VERSION = '0.6.0';\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' | '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 /** 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\nexport function parseCliArgs(args: string[]): CliParsedArgs {\n const result: CliParsedArgs = {\n format: 'json',\n packs: [],\n sources: [],\n };\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 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 === '--db') {\n result.db = args[++i];\n i++;\n } else if (arg.startsWith('--db=')) {\n result.db = arg.slice('--db='.length);\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 === '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 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\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 (parse / run / query / download / import / seed / reset):\n --db <path> SQLite database file (default: $WOD_WIKI_DB or\n ./wodwiki.db). Created on demand by parse/run/seed.\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\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 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(parsed.db);\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(parsed.db);\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 dbPath = resolveDbPath(parsed.db);\n if (!nodeFs().existsSync(dbPath)) {\n writeErr(\n `[wod query] No input dataset and no database at ${dbPath}. ` +\n 'Specify --corpus <file>, --stdin-log, --stdin-facts, or run `wod seed` first.',\n );\n return 1;\n }\n const db = await openCliDb(parsed.db);\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(parsed.db);\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(parsed.db);\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(parsed.db);\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(parsed.db);\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(parsed.db);\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(parsed.db);\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 target = resolveDbPath(parsed.db);\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 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 * Auto-generated build version metadata.\n * Do not edit directly; updated by scripts/stamp-version.ts\n */\nexport const VERSION = '0.35.2117';\nexport const GIT_SHA = '03d1dfc';\nexport const BUILD_TIME = '2026-10-12T20:08:12.374Z';\nexport const SEMVER = {\n version: '0.35.2117',\n gitSha: '03d1dfc',\n buildTime: '2026-10-12T20:08:12.374Z',\n} as const;\n","/**\n * @bitcobblers/wod-wiki-engine\n *\n * Umbrella facade for the Whiteboard Language & WQL engine.\n * Re-exports the complete contract across core, lang, lang/react, and wql packages,\n * plus the Language Pack API and headless IR / store / CLI tooling.\n */\n\n// 1. Core Data Models & Persistence Shapes (#964)\nexport * from '@bitcobblers/wod-wiki-core';\n\n// 2. Language Parser, Compiler, Dialects & Runtime (#965)\nexport {\n // Parser\n parseScript,\n WhiteboardScript,\n extractStatements,\n strategyRegistry,\n CONSUMED_HINTS,\n createParser,\n MdTimerRuntime,\n type IScript,\n whiteboardParser,\n whiteboardScriptLanguage,\n whiteboardScript,\n // Parser fixture DSL & comparator (golden-test harness)\n canonicalizeType,\n parseMetricLine,\n diffStatement,\n compareStatement,\n renderMetric,\n FixtureSyntaxError,\n type LiteralKind,\n type MetricLine,\n type MatchMode,\n type StatementMetricDiff,\n // Compiler\n JitCompiler,\n RuntimeFactory,\n createCompiler,\n PRODUCTION_STRATEGIES,\n findUnresolvedChoices,\n isChoiceResolved,\n writeChoiceSelection,\n collapseUnresolvedChoices,\n type IRuntimeBlockStrategy,\n type RuntimeBlockOptions,\n // Dialect stack & Registries\n DialectStack,\n createDialectStack,\n dialectStack,\n dialectRegistry,\n realtimeProcessorRegistry,\n summaryProcessorRegistry,\n Registry,\n type IRealtimeProcessor,\n type ISummaryProcessor,\n // 7 Dialects\n UnitsDialect,\n CrossFitDialect,\n WodDialect,\n CardioDialect,\n YogaDialect,\n HabitsDialect,\n ClimbDialect,\n ClimbMetricType,\n // Metrics presentation & helpers\n metricPresentation,\n createMetricPresentationPolicy,\n isTimeLikeMetric,\n computeLabel,\n computeColumnLabel,\n buildTooltip,\n type MetricPresentationSurface,\n type MetricRenderKind,\n type MetricTone,\n type MetricPresentationToken,\n type IMetricPresentationPolicy,\n // Runtime\n ScriptRuntime,\n RuntimeStack,\n RuntimeClock,\n SnapshotClock,\n createMockClock,\n EventBus,\n OutputEmitter,\n RuntimeMemory,\n RuntimeObservers,\n RuntimeLogger,\n RuntimeAdapter,\n TimeSpan,\n SubscriptionManager,\n LocalRuntimeSubscription,\n isCastSubscription,\n VISIBILITY_LABELS,\n VISIBILITY_ICONS,\n type MetricVisibility,\n type IRuntimeSubscription,\n type ICastSubscription,\n type IEventHandler,\n type IEvent,\n type StackSnapshot,\n type IScriptRuntime,\n type MemoryEntry,\n type RuntimeBlock,\n type RuntimeController,\n type BlockContext,\n ExecutionContext,\n type BehaviorContext,\n type INowProvider,\n wallClockNow,\n frozenNow,\n // Events\n NextEvent,\n // Actions\n StartSessionAction,\n RegisterEventHandlerAction,\n UnregisterEventHandlerAction,\n type StartSessionOptions,\n // Analytics & Calc\n AnalyticsEngine,\n AnalyticsTransformer,\n StandardAnalyticsProfile,\n createAnalyticsEngineForBlock,\n type TwoPassEffortResolutionProcess,\n type AnalyticsContext,\n getAnalyticsFromLogs,\n getHints,\n hintsToContainer,\n extractMetrics,\n parseCalculateBlock,\n evaluateCalculateDefinitions,\n type CalculateBlockProcessor,\n createCalcEngine,\n CalcEngine,\n LookupRegistry,\n CalculationRegistry,\n parseExpression,\n parseCalcLine,\n evaluate,\n DIM_ZERO,\n DIM_TIME,\n DIM_MASS,\n DIM_LENGTH,\n BUILTIN_CALCS,\n STORE_CALCS,\n type ILookupTable,\n type CalcScope,\n type CalcOrigin,\n type CalcDefinition,\n type IAnalyticsEngine,\n type IAnalyticsProfile,\n type IAnalyticsProcessorDescriptor,\n type SegmentWithMetadata,\n type AnalyticsResult,\n // Calc Authoring & Lineform (#824)\n compileLineForm,\n outputNodeId,\n outputNodeIds,\n compoundName,\n ABSENT,\n truthy,\n CONTEXT_ATOMS,\n STREAM_ATOMS,\n AGGREGATE_BUILTINS,\n UNITS,\n AUTHORITATIVE_CASTS,\n // Conversions\n toStoredOutputStatement,\n // Pure Effort Registry\n EffortResolver,\n InMemoryEffortRegistry,\n bundledEfforts,\n BUNDLED_EFFORT_COUNT,\n findBestFuzzyMatch,\n normalizeForFuzzy,\n isWithinThreshold,\n levenshteinDistance,\n DEFAULT_RESOLVER_OPTIONS,\n DEFAULT_UNRESOLVED_EFFORT_MET,\n EFFORT_REGISTRY_ORIGINS,\n INTENSITY_TIERS,\n type IEffortResolver,\n type EffortResolverOptions,\n type EffortResolutionOptions,\n type ResolvedEffort,\n type ResolvedEffortData,\n type IEffortRegistry,\n type EffortRegistrySource,\n type IntensityTier,\n type EffortBaseAttributes,\n type EffortDerivation,\n} from '@bitcobblers/wod-wiki-lang';\n\n// 3. React Runtime & Hooks (#965)\nexport {\n useScriptRuntime,\n useTimerElapsed,\n useTimerDisplay,\n useRoundDisplay,\n useOutputStatements,\n useLiveAnalytics,\n useBlockMemory,\n useRuntimeExecution,\n type UseRuntimeExecutionReturn,\n useMemorySubscription,\n useNextPreview,\n useStackSnapshot,\n useSnapshotBlocks,\n useStackTimers,\n usePrimaryTimer,\n useSecondaryTimers,\n useActiveControls,\n useStackFragmentSources,\n useStackDisplayRows,\n ScriptRuntimeProvider,\n type ScriptRuntimeProviderProps,\n BlockTimerDisplay,\n type BlockTimerDisplayProps,\n} from '@bitcobblers/wod-wiki-lang/react';\n\n// 4. WQL Grammar, QueryService & Dashboard Model (#966)\nexport {\n // QueryService\n QueryService,\n type EventStore,\n type NoteQueryStore,\n type BlockQueryStore,\n type EffortQueryStore,\n type QueryServiceStores,\n type QueryOptions,\n type FindOptions,\n type QueryResult,\n type FindQueryResult,\n type RowsQueryResult,\n type RowsRun,\n // Parser & AST\n parseQuery,\n isFindQuery,\n isAggregateQuery,\n isPipelineQuery,\n wqlParser,\n wqlTerms,\n wqlLanguage,\n wql,\n normalizeWql,\n serialize,\n parseWqlSuffixes,\n splitAtWhere,\n type ParsedAggregateQuery,\n type ParsedFindQuery,\n type ParsedRowsQuery,\n type ParsedPipelineQuery,\n type PipelineSource,\n type PipelineSink,\n type WqlChartHead,\n type AnyParsedQuery,\n type Series,\n type SeriesPoint,\n type Aggregator,\n type ComparisonOp,\n type QueryWindow,\n type MetricPredicate,\n type TagValue,\n type TagFilter,\n type FindPredicate,\n // Vocabulary constants\n WQL_AGGREGATORS,\n WQL_COMPARISON_OPS,\n WQL_DISPLAY_UNITS,\n WQL_INTENSITY_TIERS,\n WQL_METRIC_FAMILIES,\n WQL_METRIC_AGGREGATES,\n WQL_ROLLUP_PERIODS,\n WQL_SOURCES,\n WQL_TAG_KEYS,\n WQL_VIRTUAL_DIMS,\n WQL_CALC_TARGETS,\n WQL_CONTENT_FILTER_KEYS,\n WQL_FIND_TARGETS,\n WQL_SOURCE_VALUES,\n WQL_SOURCE_HEADS,\n WQL_FUNCTION_HEADS,\n WQL_CHART_HEADS,\n WQL_STANDARD_DATASETS,\n WQL_RESULT_PLANES,\n WQL_GRAINS,\n WQL_KEYWORDS,\n PLANNED_WIDGET_TYPES,\n DASHBOARD_WIDGET_TYPES,\n DASHBOARD_GRID_MAX_COLS,\n DEFAULT_DASHBOARD_TITLE,\n // Dashboard Model\n buildDashboardDocument,\n buildDashboardScaffold,\n extractDashboardTokens,\n defaultTokenValues,\n substituteTokens,\n unknownTokensMessage,\n isDashboardWidgetType,\n resolveWidgetType,\n unknownWidgetTypeMessage,\n dashboardSlug,\n parseQueryWidgetSuffix,\n isDashboardMeta,\n type DashboardDocument,\n type DashboardWidget,\n type DashboardToken,\n type DashboardMeta,\n type QueryWidgetSuffix,\n} from '@bitcobblers/wod-wiki-wql';\n\n// 5. Language Pack API (#967)\nexport {\n defineLanguagePack,\n registerLanguagePack,\n unregisterLanguagePack,\n listLanguagePacks,\n getRegisteredLanguagePacks,\n type LanguagePack,\n type LanguagePackIdentity,\n type LanguagePackLangSlice,\n type LanguagePackUiSlice,\n} from './pack';\n\n// 6. In-Memory Store Seam (#967, #969)\nexport { inMemoryEventStore } from './store';\n\n// 7. Universal JSON Intermediate Representation (#955, #967)\nexport {\n createIRFile,\n isIRFile,\n statementToNode,\n buildStatementTree,\n type IrKind,\n type WodWikiIRFile,\n type MetricNode,\n type StatementNode,\n type ExecutionLog,\n type CorpusIRData,\n} from './ir';\n\n// 8. CLI Runners & Formatters (#967)\nexport {\n runParse,\n ParseSyntaxError,\n type ParseOptions,\n} from './cli/parse';\nexport {\n runExecution,\n buildWorkoutResults,\n type RunOptions,\n} from './cli/run';\nexport {\n runQueryCli,\n WqlSyntaxError,\n loadQueryData,\n type QueryCliOptions,\n} from './cli/query';\nexport {\n loadLanguagePack,\n PackLoadError,\n} from './cli/loader';\nexport {\n cliMain,\n parseCliArgs,\n readStdin,\n type CliParsedArgs,\n} from './cli/runner';\nexport {\n formatParseOutput,\n formatExecutionOutput,\n formatQueryOutput,\n type OutputFormat,\n} from './cli/formatters';\n// NOTE: the seed compiler (cli/seedbuild, behind `wod build`) is NOT exported\n// here — it statically imports node builtins (fs/crypto/child_process), and\n// this index is bundled for the browser (playground, storybook). Repo-internal\n// consumers (scripts/sync-seed.ts) import it from source directly.\n// Import/Export exchange — pure row⇄string transforms shared by the CLI and\n// the website (download/upload against IndexedDB rows uses the same code).\nexport {\n composeNoteMarkdown,\n csvToSessionRows,\n extractNoteIdentity,\n injectIdentityFrontmatter,\n sessionToCsv,\n parseCsvLine,\n splitCsvRecords,\n SESSION_CSV_HEADER,\n NOTE_ID_FRONTMATTER_KEY,\n type NoteIdentity,\n type SessionImportRows,\n} from './exchange';\nexport {\n readFrontmatterMeta,\n extractTypedTags,\n markdownToEffort,\n effortToMarkdown,\n equipmentToCsv,\n csvToEquipmentLabels,\n type TypedTagItem,\n type EffortFileFields,\n} from './exchange';\n\n// 9. Engine Version Info\nexport { VERSION, GIT_SHA, BUILD_TIME, SEMVER } from './version';\n\n// ── Runtime integration surface (app-cutover parity, #970) ──────────────────\n// The playground app (wod-wiki) drives the runtime directly: it pushes stack\n// actions, subscribes to stack/output events, reads block memory, and builds\n// timer blocks with the public behaviors. Re-exported from @bitcobblers/wod-wiki-lang.\nexport {\n // Stack actions\n StartWorkoutAction,\n ErrorAction,\n PushBlockAction,\n PopBlockAction,\n // Compiler internals the app harnesses drive\n BlockBuilder,\n ChoiceGroupMetric,\n // Public behaviors\n CountdownTimerBehavior,\n CountupTimerBehavior,\n ButtonBehavior,\n ChildSelectionBehavior,\n ExitBehavior,\n LabelingBehavior,\n ReportOutputBehavior,\n SoundCueBehavior,\n // Compiler strategies (app-side harnesses + debug tooling)\n SessionRootStrategy,\n AmrapLogicStrategy,\n IntervalLogicStrategy,\n EffortFallbackStrategy,\n GenericGroupStrategy,\n GenericLoopStrategy,\n GenericTimerStrategy,\n ChildrenStrategy,\n ReportOutputStrategy,\n SoundStrategy,\n RoundsMetric,\n // Runtime options\n DEFAULT_RUNTIME_OPTIONS,\n // Memory\n MemoryLocation,\n MemoryTypeEnum,\n TypedMemoryReference,\n getMetricVisibility,\n // Time\n getRuntimeNowMs,\n // Hints\n hasHint,\n hintMetric,\n // Time helpers\n calculateElapsed,\n // Effort analytics\n EFFORT_DATA_METRIC_TYPE,\n // Hint vocabulary\n CONSUMED_HINT_KEYS,\n} from '@bitcobblers/wod-wiki-lang';\n\nexport type {\n RuntimeError,\n IEffort,\n AnalyticsProfileContext,\n} from '@bitcobblers/wod-wiki-lang';\n\n\nexport type {\n // Runtime contracts\n IRuntimeMemory,\n IRuntimeEventProvider,\n IAnchorValue,\n IBehaviorContext,\n BehaviorEventListener,\n BehaviorEventType,\n SubscribeOptions,\n IRuntimeActionable,\n InterceptMode,\n TestableBlockConfig,\n StackEvent,\n StackListener,\n StackObserver,\n Unsubscribe,\n RuntimeStackOptions,\n BlockLifecycleOptions,\n CompletionDecision,\n IRuntimeBlock,\n IRuntimeStack,\n IRuntimeClock,\n IEventBus,\n EventCallback,\n EventHandlerOptions,\n IRuntimeAction,\n IRuntimeBehavior,\n IMemoryLocation,\n IMemoryReference,\n IJitCompiler,\n IBlockContext,\n IRuntimeFactory,\n ScriptRuntimeDependencies,\n OutputListener,\n // Memory state shapes\n MemoryTag,\n TimerState,\n RoundState,\n ExecutionStatus,\n MockClock,\n // Analytics / calc authoring shapes\n ProjectionResult,\n CalculationDefinition,\n DimVector,\n ExprNode,\n Val,\n LineFormScope,\n} from '@bitcobblers/wod-wiki-lang';\nexport * from './cli/seedbuild/contract';\nexport * from './cli/seedbuild/runtime';\nexport * from './cli/seedbuild/validation';\n"]}
|