@bitcobblers/wod-wiki-tools 0.53.2204 → 0.54.2205
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/agentCommands-AMMASJPH.mjs +586 -0
- package/dist/agentCommands-AMMASJPH.mjs.map +1 -0
- package/dist/bin/wod.cjs +1071 -29
- package/dist/bin/wod.cjs.map +1 -1
- package/dist/bin/wod.mjs +2 -2
- package/dist/{chunk-LNBKPHEP.mjs → chunk-AS6OJRNH.mjs} +9 -4
- package/dist/chunk-AS6OJRNH.mjs.map +1 -0
- package/dist/{chunk-SLCRIGUR.mjs → chunk-KXNK4PIB.mjs} +168 -28
- package/dist/chunk-KXNK4PIB.mjs.map +1 -0
- package/dist/{chunk-5NNSHRMZ.mjs → chunk-T7VB7PPO.mjs} +3 -3
- package/dist/chunk-T7VB7PPO.mjs.map +1 -0
- package/dist/{chunk-2EWCEE6N.mjs → chunk-WLCUM7KO.mjs} +106 -6
- package/dist/chunk-WLCUM7KO.mjs.map +1 -0
- package/dist/chunk-ZZVL6UGV.mjs +144 -0
- package/dist/chunk-ZZVL6UGV.mjs.map +1 -0
- package/dist/index.cjs +1075 -29
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +68 -3
- package/dist/index.d.ts +68 -3
- package/dist/index.mjs +5 -4
- package/dist/mcp-D6QARYOG.mjs +73 -0
- package/dist/mcp-D6QARYOG.mjs.map +1 -0
- package/dist/{scaffoldFeed-TCRNXYQU.mjs → scaffoldFeed-D55NINVJ.mjs} +3 -3
- package/dist/{scaffoldFeed-TCRNXYQU.mjs.map → scaffoldFeed-D55NINVJ.mjs.map} +1 -1
- package/dist/server/app.cjs +239 -2
- package/dist/server/app.cjs.map +1 -1
- package/dist/server/app.d.cts +2 -0
- package/dist/server/app.d.ts +2 -0
- package/dist/server/app.mjs +3 -1
- package/dist/server-2GTVPJDA.mjs +13 -0
- package/dist/{server-SHNWCIIM.mjs.map → server-2GTVPJDA.mjs.map} +1 -1
- package/dist/skills/README.md +3 -0
- package/dist/skills/wod-agent-parity/SKILL.md +41 -0
- package/dist/skills/wod-cli/SKILL.md +127 -0
- package/dist/skills/wod-wql/SKILL.md +63 -0
- package/dist/web/playground/ai-skills/agent-parity.md +41 -0
- package/dist/web/playground/ai-skills/cli.md +127 -0
- package/dist/web/playground/ai-skills/wql.md +63 -0
- package/dist/web/playground/assets/main-BH_SMMzT.css +2 -0
- package/dist/web/playground/assets/main-vYMBKnsB.js +1152 -0
- package/dist/web/playground/assets/{statementBuilderFlow-CQWO7k9W.js → statementBuilderFlow-D8GG8Y7r.js} +2 -2
- package/dist/web/playground/assets/vendor-BUlwHBNF.js +255 -0
- package/dist/web/playground/assets/{vendor-codemirror-B4BeZarI.js → vendor-codemirror-Bh6hyz5v.js} +11 -11
- package/dist/web/playground/index.html +4 -4
- package/dist/web/playground/llms-full.txt +1444 -0
- package/dist/web/playground/llms.txt +67 -0
- package/dist/web/{server/seed/core/chunks/canvas.deac64e3.json → playground/seed/core/chunks/canvas.b0bc465b.json} +1 -1
- package/dist/web/playground/seed/core/chunks/{dashboards.08301ab4.json → dashboards.af9a29e4.json} +1 -1
- package/dist/web/playground/seed/core/chunks/{efforts.47f650fe.json → efforts.902271f9.json} +1 -1
- package/dist/web/playground/seed/core/chunks/{equipment.79146d31.json → equipment.dbdc1af3.json} +1 -1
- package/dist/web/playground/seed/core/indexes/notebooks/canvas.json +180 -180
- package/dist/web/playground/seed/core/indexes/notebooks/dashboards.json +16 -16
- package/dist/web/playground/seed/core/indexes/notebooks/efforts.json +326 -326
- package/dist/web/playground/seed/core/indexes/notebooks/equipment.json +50 -50
- package/dist/web/playground/seed/core/manifest.json +27 -27
- package/dist/web/playground/seed/core/markdown/canvas/ai-first/README.json +1 -1
- package/dist/web/playground/seed/core/markdown/canvas/guide/README.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/guide/clock.json +1 -1
- package/dist/web/playground/seed/core/markdown/canvas/guide/dashboards.json +1 -1
- package/dist/web/playground/seed/core/markdown/canvas/guide/metrics-summaries.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/guide/metrics.json +12 -12
- package/dist/web/playground/seed/core/markdown/canvas/guide/protocols.json +20 -20
- package/dist/web/playground/seed/core/markdown/canvas/guide/sessions.json +33 -33
- package/dist/web/playground/seed/core/markdown/canvas/guide/start.json +11 -11
- package/dist/web/playground/seed/core/markdown/canvas/guide/structure.json +25 -25
- package/dist/web/playground/seed/core/markdown/canvas/guide/wql.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/home/sample-script.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/home/welcome-1.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/syntax/actions-comments.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/alternating-emom.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/basic-emom.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/calculated-metrics.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/classic-amrap.json +6 -6
- package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-barbell-cycling.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-full-session.json +10 -10
- package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-nested-protocols.json +7 -7
- package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-partner-workout.json +7 -7
- package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-swimming.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/core-rules.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-and-calculated-metrics.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-intervals.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-1.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-2.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-3.json +3 -3
- package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-4.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-5.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-climb-bouldering.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-climb-hangboard.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-climb-sport.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-log.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-plan.json +8 -8
- package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-wod.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/distance-intervals.json +3 -3
- package/dist/web/playground/seed/core/markdown/canvas/syntax/document-1.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/document-2.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/document-3.json +10 -10
- package/dist/web/playground/seed/core/markdown/canvas/syntax/document-4.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/effort-notes.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/frontmatter-summaries.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-1.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-2.json +6 -6
- package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-3.json +3 -3
- package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-4.json +3 -3
- package/dist/web/playground/seed/core/markdown/canvas/syntax/longer-duration.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/longer-intervals.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/measurements.json +7 -7
- package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-1.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-2.json +7 -7
- package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-3.json +8 -8
- package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-4.json +6 -6
- package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-5.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/mixed-sections.json +10 -10
- package/dist/web/playground/seed/core/markdown/canvas/syntax/mixed-timers.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/multiple-amrap-windows.json +7 -7
- package/dist/web/playground/seed/core/markdown/canvas/syntax/multiple-sets.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/named-groups.json +6 -6
- package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-1.json +6 -6
- package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-2.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-3.json +6 -6
- package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-4.json +3 -3
- package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-5.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/single-movement.json +3 -3
- package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-1.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-2.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-3.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-4.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/time-cap.json +6 -6
- package/dist/web/playground/seed/core/markdown/canvas/syntax/timer-modifiers.json +6 -6
- package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-1.json +6 -6
- package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-2.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-3.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-4.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-5.json +5 -5
- package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-rest.json +4 -4
- package/dist/web/playground/seed/core/markdown/canvas/wql-presets/aggregate-by-effort.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/wql-presets/aggregate-by-week.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/wql-presets/content-fran.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/wql-presets/filter-combos.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/wql-presets/pipes-limit.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/wql-presets/session-rpe.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/wql-presets/source-journal.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/wql-presets/tis-trend.json +2 -2
- package/dist/web/playground/seed/core/markdown/canvas/wql-presets/where-join.json +2 -2
- package/dist/web/playground/seed/core/markdown/dashboards/benchmark-pr-board.json +6 -6
- package/dist/web/playground/seed/core/markdown/dashboards/finger-strength-v8.json +5 -5
- package/dist/web/playground/seed/core/markdown/dashboards/polarized-base-marathon.json +9 -9
- package/dist/web/playground/seed/core/markdown/dashboards/recovery-readiness.json +7 -7
- package/dist/web/playground/seed/core/markdown/dashboards/road-to-560-total.json +9 -9
- package/dist/web/playground/seed/core/markdown/dashboards/training-block-review.json +11 -11
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/air-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/box-jump.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/broad-jump.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/burpee-box-jump-over.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/burpee-over-dumbbell.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/burpee.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/dumbbell-squat-clean.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/ghd-sit-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/ground-kong.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/jumping-jack.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/kong-walk.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/lunge.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/overhead-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/parkour-roll.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/parkour-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/pistol-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/plank.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/precision-burpee.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/precision-jump.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/quadrupedal-movement.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/russian-twist.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/sit-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/squat-clean.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/squat-hold.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/squat-snatch.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/tuck-jump.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/wall-ball.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/bodyweight/wall-burpee.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/cycling/assault-bike.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/cycling/cycling-moderate.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/cycling/cycling-vigorous.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/assisted-pull-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/burpee-pull-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/chest-to-bar-pull-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/dip.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/double-under.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/handstand-hold.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/handstand-push-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/handstand-walk.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/jump-rope.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/jumping-pull-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/jumping-push-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/l-sit-pull-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/muscle-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/pull-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/push-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/reverse-wall-dip.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/rope-climb.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/gymnastics/toes-to-bar.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-arm-bar.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-around-the-world.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-bent-over-row.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-jerk.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-press.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-clean.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-deadlift.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-floor-press.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-front-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-goblet-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-gorilla-row.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-halo.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-jerk.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-overhead-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-press.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-snatch.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-swing.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-windmill.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/kettlebell/turkish-get-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/recovery/rest.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/recovery/stretching.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/rowing/rowing-sprint.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/rowing/rowing.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/rowing/ski-erg.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/running/backward-running.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/running/running-6-mph.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/running/running-8-mph.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/running/running-sprint.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/snatch.json +2 -2
- package/dist/web/playground/seed/core/markdown/efforts/strength/back-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/bench-press.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/box-step-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/carioca.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/clean-and-jerk.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/cluster.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/dead-hang.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/deadlift.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/devils-press.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-box-step-up.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-clean.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-fly.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-row.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-snatch.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-thruster.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/elbows-to-knees.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/farmer-carry.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/frog-stand.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/front-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/good-morning.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/hanging-leg-raise.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/hollow-rock.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/knees-to-elbows.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/l-sit.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/man-maker.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/medicine-ball-clean.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/overhead-press.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/parkour-vault.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/pig-flip.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/power-clean.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/power-snatch.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/push-jerk.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/push-press.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/romanian-deadlift.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/single-leg-deadlift.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/skull-crusher.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/slam-ball.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/sled-pull.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/sled-push.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/sumo-deadlift.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/thruster.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/triceps-extension.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/v-sit-hold.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/wall-walk.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/strength/yoga-sun-salutation.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-assisted-sprint.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-backstroke.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-breaststroke-kick.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-breaststroke.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-butterfly.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-catch-up-drill.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-choice-stroke.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-dive-start.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-dolphin-kick.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-drafting.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-fingertip-drag.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-freestyle.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-individual-medley.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-kick.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-pull.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-resisted-sprint.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-rotation-drill.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-sighting.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-single-arm-drill.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-stroke-transition.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-two-kick-one-pull.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-vigorous.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-arm-cast.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-circles.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-mill.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-reverse-mill.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-shield-cast.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-10-to-2-swing.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-360-swing.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-barbarian-squat.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-flow.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-gravedigger.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-touchdown.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-carry.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-extension.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/unconventional/sandbag-over-shoulder.json +1 -1
- package/dist/web/playground/seed/core/markdown/efforts/walking/walking-3-mph.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/air-bike.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/barbell.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/bench.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/bike-erg.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/climbing-rope.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/clubs.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/dumbbell.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/ghd.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/gymnastic-rings.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/jump-rope.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/kettlebell.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/macebell.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/medicine-ball.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/parallettes.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/plyo-box.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/pull-up-bar.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/rower.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/sandbag.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/ski-erg.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/slam-ball.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/sled.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/sledgehammer.json +1 -1
- package/dist/web/playground/seed/core/markdown/equipment/weight-vest.json +1 -1
- package/dist/web/playground/seed/core/report.html +13 -13
- package/dist/web/server/ai-skills/agent-parity.md +41 -0
- package/dist/web/server/ai-skills/cli.md +127 -0
- package/dist/web/server/ai-skills/wql.md +63 -0
- package/dist/web/server/assets/main-BH_SMMzT.css +2 -0
- package/dist/web/server/assets/main-D0W-D5YL.js +1152 -0
- package/dist/web/server/assets/{statementBuilderFlow-C7x-7JGx.js → statementBuilderFlow-CtmmV_Yv.js} +2 -2
- package/dist/web/server/assets/vendor-BUlwHBNF.js +255 -0
- package/dist/web/server/assets/{vendor-codemirror-B4BeZarI.js → vendor-codemirror-Bh6hyz5v.js} +11 -11
- package/dist/web/server/index.html +4 -4
- package/dist/web/server/llms-full.txt +1444 -0
- package/dist/web/server/llms.txt +67 -0
- package/dist/web/{playground/seed/core/chunks/canvas.deac64e3.json → server/seed/core/chunks/canvas.b0bc465b.json} +1 -1
- package/dist/web/server/seed/core/chunks/{dashboards.08301ab4.json → dashboards.af9a29e4.json} +1 -1
- package/dist/web/server/seed/core/chunks/{efforts.47f650fe.json → efforts.902271f9.json} +1 -1
- package/dist/web/server/seed/core/chunks/{equipment.79146d31.json → equipment.dbdc1af3.json} +1 -1
- package/dist/web/server/seed/core/indexes/notebooks/canvas.json +180 -180
- package/dist/web/server/seed/core/indexes/notebooks/dashboards.json +16 -16
- package/dist/web/server/seed/core/indexes/notebooks/efforts.json +326 -326
- package/dist/web/server/seed/core/indexes/notebooks/equipment.json +50 -50
- package/dist/web/server/seed/core/manifest.json +27 -27
- package/dist/web/server/seed/core/markdown/canvas/ai-first/README.json +1 -1
- package/dist/web/server/seed/core/markdown/canvas/guide/README.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/guide/clock.json +1 -1
- package/dist/web/server/seed/core/markdown/canvas/guide/dashboards.json +1 -1
- package/dist/web/server/seed/core/markdown/canvas/guide/metrics-summaries.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/guide/metrics.json +12 -12
- package/dist/web/server/seed/core/markdown/canvas/guide/protocols.json +20 -20
- package/dist/web/server/seed/core/markdown/canvas/guide/sessions.json +33 -33
- package/dist/web/server/seed/core/markdown/canvas/guide/start.json +11 -11
- package/dist/web/server/seed/core/markdown/canvas/guide/structure.json +25 -25
- package/dist/web/server/seed/core/markdown/canvas/guide/wql.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/home/sample-script.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/home/welcome-1.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/syntax/actions-comments.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/alternating-emom.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/basic-emom.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/calculated-metrics.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/classic-amrap.json +6 -6
- package/dist/web/server/seed/core/markdown/canvas/syntax/complex-barbell-cycling.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/complex-full-session.json +10 -10
- package/dist/web/server/seed/core/markdown/canvas/syntax/complex-nested-protocols.json +7 -7
- package/dist/web/server/seed/core/markdown/canvas/syntax/complex-partner-workout.json +7 -7
- package/dist/web/server/seed/core/markdown/canvas/syntax/complex-swimming.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/core-rules.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/custom-and-calculated-metrics.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/custom-intervals.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-1.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-2.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-3.json +3 -3
- package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-4.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-5.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-climb-bouldering.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-climb-hangboard.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-climb-sport.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-log.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-plan.json +8 -8
- package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-wod.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/distance-intervals.json +3 -3
- package/dist/web/server/seed/core/markdown/canvas/syntax/document-1.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/document-2.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/document-3.json +10 -10
- package/dist/web/server/seed/core/markdown/canvas/syntax/document-4.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/effort-notes.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/frontmatter-summaries.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/groups-1.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/groups-2.json +6 -6
- package/dist/web/server/seed/core/markdown/canvas/syntax/groups-3.json +3 -3
- package/dist/web/server/seed/core/markdown/canvas/syntax/groups-4.json +3 -3
- package/dist/web/server/seed/core/markdown/canvas/syntax/longer-duration.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/longer-intervals.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/measurements.json +7 -7
- package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-1.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-2.json +7 -7
- package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-3.json +8 -8
- package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-4.json +6 -6
- package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-5.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/mixed-sections.json +10 -10
- package/dist/web/server/seed/core/markdown/canvas/syntax/mixed-timers.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/multiple-amrap-windows.json +7 -7
- package/dist/web/server/seed/core/markdown/canvas/syntax/multiple-sets.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/named-groups.json +6 -6
- package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-1.json +6 -6
- package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-2.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-3.json +6 -6
- package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-4.json +3 -3
- package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-5.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/single-movement.json +3 -3
- package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-1.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-2.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-3.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-4.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/time-cap.json +6 -6
- package/dist/web/server/seed/core/markdown/canvas/syntax/timer-modifiers.json +6 -6
- package/dist/web/server/seed/core/markdown/canvas/syntax/timers-1.json +6 -6
- package/dist/web/server/seed/core/markdown/canvas/syntax/timers-2.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/timers-3.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/timers-4.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/syntax/timers-5.json +5 -5
- package/dist/web/server/seed/core/markdown/canvas/syntax/timers-rest.json +4 -4
- package/dist/web/server/seed/core/markdown/canvas/wql-presets/aggregate-by-effort.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/wql-presets/aggregate-by-week.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/wql-presets/content-fran.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/wql-presets/filter-combos.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/wql-presets/pipes-limit.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/wql-presets/session-rpe.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/wql-presets/source-journal.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/wql-presets/tis-trend.json +2 -2
- package/dist/web/server/seed/core/markdown/canvas/wql-presets/where-join.json +2 -2
- package/dist/web/server/seed/core/markdown/dashboards/benchmark-pr-board.json +6 -6
- package/dist/web/server/seed/core/markdown/dashboards/finger-strength-v8.json +5 -5
- package/dist/web/server/seed/core/markdown/dashboards/polarized-base-marathon.json +9 -9
- package/dist/web/server/seed/core/markdown/dashboards/recovery-readiness.json +7 -7
- package/dist/web/server/seed/core/markdown/dashboards/road-to-560-total.json +9 -9
- package/dist/web/server/seed/core/markdown/dashboards/training-block-review.json +11 -11
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/air-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/box-jump.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/broad-jump.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/burpee-box-jump-over.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/burpee-over-dumbbell.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/burpee.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/dumbbell-squat-clean.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/ghd-sit-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/ground-kong.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/jumping-jack.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/kong-walk.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/lunge.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/overhead-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/parkour-roll.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/parkour-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/pistol-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/plank.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/precision-burpee.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/precision-jump.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/quadrupedal-movement.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/russian-twist.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/sit-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/squat-clean.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/squat-hold.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/squat-snatch.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/tuck-jump.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/wall-ball.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/bodyweight/wall-burpee.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/cycling/assault-bike.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/cycling/cycling-moderate.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/cycling/cycling-vigorous.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/assisted-pull-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/burpee-pull-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/chest-to-bar-pull-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/dip.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/double-under.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/handstand-hold.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/handstand-push-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/handstand-walk.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/jump-rope.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/jumping-pull-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/jumping-push-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/l-sit-pull-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/muscle-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/pull-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/push-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/reverse-wall-dip.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/rope-climb.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/gymnastics/toes-to-bar.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-arm-bar.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-around-the-world.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-bent-over-row.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-jerk.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-press.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-clean.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-deadlift.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-floor-press.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-front-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-goblet-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-gorilla-row.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-halo.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-jerk.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-overhead-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-press.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-snatch.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-swing.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-windmill.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/kettlebell/turkish-get-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/recovery/rest.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/recovery/stretching.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/rowing/rowing-sprint.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/rowing/rowing.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/rowing/ski-erg.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/running/backward-running.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/running/running-6-mph.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/running/running-8-mph.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/running/running-sprint.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/snatch.json +2 -2
- package/dist/web/server/seed/core/markdown/efforts/strength/back-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/bench-press.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/box-step-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/carioca.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/clean-and-jerk.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/cluster.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/dead-hang.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/deadlift.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/devils-press.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-box-step-up.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-clean.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-fly.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-row.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-snatch.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-thruster.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/elbows-to-knees.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/farmer-carry.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/frog-stand.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/front-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/good-morning.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/hanging-leg-raise.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/hollow-rock.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/knees-to-elbows.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/l-sit.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/man-maker.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/medicine-ball-clean.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/overhead-press.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/parkour-vault.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/pig-flip.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/power-clean.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/power-snatch.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/push-jerk.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/push-press.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/romanian-deadlift.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/single-leg-deadlift.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/skull-crusher.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/slam-ball.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/sled-pull.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/sled-push.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/sumo-deadlift.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/thruster.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/triceps-extension.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/v-sit-hold.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/wall-walk.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/strength/yoga-sun-salutation.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-assisted-sprint.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-backstroke.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-breaststroke-kick.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-breaststroke.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-butterfly.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-catch-up-drill.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-choice-stroke.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-dive-start.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-dolphin-kick.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-drafting.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-fingertip-drag.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-freestyle.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-individual-medley.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-kick.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-pull.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-resisted-sprint.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-rotation-drill.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-sighting.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-single-arm-drill.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-stroke-transition.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-two-kick-one-pull.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-vigorous.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/swimming/swimming.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-arm-cast.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-circles.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-mill.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-reverse-mill.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-shield-cast.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-10-to-2-swing.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-360-swing.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-barbarian-squat.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-flow.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-gravedigger.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-touchdown.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-carry.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-extension.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/unconventional/sandbag-over-shoulder.json +1 -1
- package/dist/web/server/seed/core/markdown/efforts/walking/walking-3-mph.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/air-bike.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/barbell.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/bench.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/bike-erg.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/climbing-rope.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/clubs.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/dumbbell.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/ghd.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/gymnastic-rings.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/jump-rope.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/kettlebell.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/macebell.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/medicine-ball.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/parallettes.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/plyo-box.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/pull-up-bar.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/rower.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/sandbag.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/ski-erg.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/slam-ball.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/sled.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/sledgehammer.json +1 -1
- package/dist/web/server/seed/core/markdown/equipment/weight-vest.json +1 -1
- package/dist/web/server/seed/core/report.html +13 -13
- package/package.json +10 -8
- package/dist/chunk-2EWCEE6N.mjs.map +0 -1
- package/dist/chunk-5NNSHRMZ.mjs.map +0 -1
- package/dist/chunk-LNBKPHEP.mjs.map +0 -1
- package/dist/chunk-SLCRIGUR.mjs.map +0 -1
- package/dist/server-SHNWCIIM.mjs +0 -11
- package/dist/web/playground/assets/main-DGz9PHS_.css +0 -2
- package/dist/web/playground/assets/main-DfHqNhwO.js +0 -1149
- package/dist/web/playground/assets/vendor-Dz-Azkoq.js +0 -198
- package/dist/web/server/assets/main-DGz9PHS_.css +0 -2
- package/dist/web/server/assets/main-VXFEU44Q.js +0 -1149
- package/dist/web/server/assets/vendor-Dz-Azkoq.js +0 -198
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/parse.ts","../src/cli/run.ts","../src/cli/query.ts","../src/cli/loader.ts","../src/cli/config.ts","../src/cli/formatters.ts","../src/cli/dbAdmin.ts","../src/cli/persist.ts","../src/cli/seed.ts","../src/cli/publish.ts","../src/cli/runner.ts"],"names":["createParser","createIRFile","result","nodePath","nodeFs","path","data","lines","matchedCount","envPath","validateNoteBlocks","sameRow","bundledEfforts","parseDocumentSections","blockContentId","toEventRows","toSummaryEventRows","getFs","value","extractNoteIdentity","extractTypedTags","db"],"mappings":"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","file":"chunk-SLCRIGUR.mjs","sourcesContent":["/**\n * Headless Parse Command Runner\n *\n * Parses Whiteboard Script source text and emits a versioned IR parse-tree envelope.\n */\n\nimport { createParser, type IScript } from '@bitcobblers/wod-wiki-lang';\nimport { createIRFile, buildStatementTree, type WodWikiIRFile, type StatementNode } from '@bitcobblers/wod-wiki-engine';\n\nexport class ParseSyntaxError extends Error {\n constructor(\n public readonly errors: Array<{ message: string; line?: number }>,\n message: string = 'Parse error in Whiteboard Script',\n ) {\n const details = errors.map((e) => e.message).join('; ');\n super(`${message}: ${details}`);\n this.name = 'ParseSyntaxError';\n }\n}\n\nexport interface ParseOptions {\n sport?: string;\n sourceLabel?: string;\n}\n\n/**\n * Parses Whiteboard Script source directly into a StatementNode IR envelope.\n */\nexport function runParse(\n source: string,\n options: ParseOptions = {},\n): WodWikiIRFile<StatementNode> {\n const parser = createParser();\n const script: IScript = parser.read(source, options.sport);\n\n if (script.errors && script.errors.length > 0) {\n throw new ParseSyntaxError(script.errors);\n }\n\n const tree = buildStatementTree(script);\n return createIRFile('parse-tree', tree, { source: options.sourceLabel ?? 'cli:wod parse' });\n}\n","/**\n * Headless Execution Command Runner\n *\n * Executes Whiteboard Script through JIT compiler and runtime state machine,\n * emitting a versioned execution-log IR envelope.\n */\n\nimport {\n createParser,\n createCompiler,\n RuntimeStack,\n createMockClock,\n EventBus,\n ScriptRuntime,\n StartSessionAction,\n NextEvent,\n createAnalyticsEngineForBlock,\n toStoredOutputStatement,\n type INowProvider,\n frozenNow,\n} from '@bitcobblers/wod-wiki-lang';\nimport type {\n StoredOutputStatement,\n WorkoutResults,\n IOutputStatement,\n} from '@bitcobblers/wod-wiki-core';\nimport { createIRFile, type WodWikiIRFile, type ExecutionLog } from '@bitcobblers/wod-wiki-engine';\nimport { ParseSyntaxError } from './parse';\n\nexport interface RunOptions {\n sport?: string;\n dialect?: 'time' | 'log';\n blockId?: string;\n blockVersion?: number;\n startTime?: number;\n maxIterations?: number;\n now?: INowProvider;\n sourceLabel?: string;\n}\n\nexport function buildWorkoutResults(\n outputs: readonly IOutputStatement[],\n options: {\n readonly startTime?: number;\n readonly elapsedTime: number;\n readonly completed: boolean;\n readonly now: INowProvider;\n },\n): WorkoutResults {\n return {\n startTime: options.startTime ?? options.now.nowMs(),\n endTime: options.now.nowMs(),\n duration: options.elapsedTime,\n completed: options.completed,\n logs: outputs.map(toStoredOutputStatement),\n };\n}\n\n/**\n * Runs a workout script to completion using headless state machine and Node clock.\n */\nexport async function runExecution(\n source: string,\n options: RunOptions = {},\n): Promise<WodWikiIRFile<ExecutionLog>> {\n const parser = createParser();\n const script = parser.read(source, options.sport);\n\n if (script.errors && script.errors.length > 0) {\n throw new ParseSyntaxError(script.errors);\n }\n\n const startTime = options.startTime ?? Date.now();\n const now = options.now ?? frozenNow(new Date(startTime));\n const compiler = createCompiler();\n const clock = createMockClock(new Date(startTime));\n const stack = new RuntimeStack();\n const eventBus = new EventBus();\n\n const runtime = new ScriptRuntime(\n script,\n compiler,\n { stack, clock, eventBus },\n {},\n now,\n );\n\n const { engine, analyticsContext } = createAnalyticsEngineForBlock({\n id: options.blockId ?? 'cli-block',\n content: source,\n statements: script.statements,\n sport: options.sport,\n version: options.blockVersion ?? 1,\n startLine: 0,\n endLine: 0,\n dialect: options.dialect ?? 'time',\n state: 'idle',\n createdAt: Date.now(),\n });\n runtime.analyticsContext = analyticsContext;\n runtime.setAnalyticsEngine(engine);\n\n const outputs: IOutputStatement[] = [];\n runtime.subscribeToOutput((out) => {\n outputs.push(out);\n });\n\n // Start the workout session\n runtime.do(new StartSessionAction());\n\n const maxSteps = options.maxIterations ?? 5000;\n let steps = 0;\n\n while (stack.count > 0 && steps < maxSteps) {\n runtime.handle(new NextEvent(undefined, runtime.nowProvider));\n clock.advance(1000);\n steps++;\n }\n\n const workoutResults = buildWorkoutResults(outputs, {\n startTime,\n elapsedTime: steps * 1000,\n completed: stack.count === 0,\n now,\n });\n\n const logs: StoredOutputStatement[] = outputs.map(toStoredOutputStatement);\n\n return createIRFile(\n 'execution-log',\n {\n results: workoutResults,\n logs,\n statements: logs,\n sourceScript: source,\n },\n { source: options.sourceLabel ?? 'cli:wod run' },\n );\n}\n","/**\n * Headless WQL Query Command Runner\n *\n * Evaluates WQL queries against in-memory stores sourced from --corpus,\n * --stdin-log, or --stdin-facts, and emits a versioned IR envelope.\n */\n\nfunction getFs() {\n if (typeof globalThis.process?.versions?.node === 'undefined' && typeof (globalThis as { Bun?: unknown }).Bun === 'undefined') {\n throw new Error('File system operations are only supported in Node / Bun environments');\n }\n // eslint-disable-next-line no-restricted-syntax -- lazy CJS require keeps node builtins out of browser bundles\n return require('fs');\n}\nimport {\n QueryService,\n parseQuery,\n isFindQuery,\n isPipelineQuery,\n type QueryServiceStores,\n type QueryResult,\n type RowsQueryResult,\n type FindQueryResult,\n type PipelineResult,\n type NoteQueryStore,\n type BlockQueryStore,\n type EffortQueryStore,\n type IEffort as WqlEffort,\n} from '@bitcobblers/wod-wiki-wql';\nimport { inMemoryEventStore, createIRFile, isIRFile, type IrKind, type WodWikiIRFile, type ExecutionLog, type CorpusIRData } from '@bitcobblers/wod-wiki-engine';\nimport { toEventRows, toSummaryEventRows } from '@bitcobblers/wod-wiki-wql';\nimport type { AnalyticsDataPoint, Note, BlockIndexRow, BlockRevision, Session, EventRecord } from '@bitcobblers/wod-wiki-core';\nimport type { WorkoutResults } from '@bitcobblers/wod-wiki-core';\nimport type { IEffort } from '@bitcobblers/wod-wiki-lang';\nimport { bundledEfforts } from '@bitcobblers/wod-wiki-lang';\nimport { validateNoteBlocks, parseDocumentSections, blockContentId } from '@bitcobblers/wod-wiki-core';\nexport class WqlSyntaxError extends Error {\n constructor(\n public readonly query: string,\n public readonly syntaxError: string,\n ) {\n super(`WQL Syntax Error in \"${query}\": ${syntaxError}`);\n this.name = 'WqlSyntaxError';\n }\n}\n\nexport interface QueryCliOptions {\n corpusPath?: string;\n stdinLog?: string;\n stdinFacts?: string;\n preferredUnit?: string;\n sourceLabel?: string;\n /** Pre-built store bundle (e.g. sqlite-backed). When set, the corpus/stdin\n * dataset options are ignored. */\n stores?: QueryServiceStores;\n}\n\ninterface LoadedData {\n eventRecords: EventRecord[];\n facts: AnalyticsDataPoint[];\n results: Session[];\n notes: Note[];\n blocks: BlockIndexRow[];\n revisions: BlockRevision[];\n efforts: IEffort[];\n noteTags: Record<string, string[]>;\n}\n\n\nfunction extractPayload(rawJson: string): unknown {\n try {\n const parsed = JSON.parse(rawJson);\n if (isIRFile(parsed)) {\n return parsed.data;\n }\n return parsed;\n } catch (err) {\n throw new Error(`Failed to parse JSON input: ${err instanceof Error ? err.message : String(err)}`, { cause: err });\n }\n}\n\nfunction buildStoresFromData(data: LoadedData) {\n // Direct events and fact-set summaries share one query stream.\n const events = [\n ...data.eventRecords,\n ...data.facts.map((f, i) => ({\n id: `fact:${f.resultId ?? 'stdin'}:${f.metricKey ?? f.type}:${i}`,\n resultId: f.resultId ?? 'stdin-result-1',\n noteId: f.noteId ?? 'stdin-note-1',\n blockContentId: f.blockContentId,\n pageId: f.pageId,\n origin: f.origin,\n timestamp: f.timestamp,\n grain: f.grain === 'event' ? 'event' : 'summary',\n outputType: 'analytics',\n effortSlug: f.effortSlug,\n metrics: [{\n type: f.metricKey ?? f.type,\n value: f.value,\n ...(f.unit ? { unit: f.unit } : {}),\n origin: 'engine',\n }],\n blockId: f.blockId,\n blockVersion: f.blockVersion,\n } as EventRecord)),\n ];\n\n const eventStore = inMemoryEventStore(events);\n\n const noteStore: NoteQueryStore = {\n getAllNotes: async () => [...data.notes],\n getNotesByIds: async (ids) => {\n const selected = new Set(ids);\n return data.notes.filter((note) => selected.has(note.id));\n },\n getNoteIdsForTag: async (tag: string) => {\n const matching = new Set<string>();\n for (const [noteId, tags] of Object.entries(data.noteTags)) {\n if (tags.includes(tag)) matching.add(noteId);\n }\n return matching;\n },\n getNoteTagLabels: async (noteId: string) => [...(data.noteTags[noteId] ?? [])],\n };\n\n const blockStore: BlockQueryStore = {\n getAllBlocks: async () => [...data.blocks],\n };\n\n const effortStore: EffortQueryStore = {\n getAllEfforts: async () => [...data.efforts] as unknown as WqlEffort[],\n };\n\n return { eventStore, noteStore, blockStore, effortStore };\n}\n\nexport function loadQueryData(options: QueryCliOptions): LoadedData {\n const data: LoadedData = {\n eventRecords: [],\n facts: [],\n results: [],\n notes: [],\n blocks: [],\n revisions: [],\n efforts: [...bundledEfforts],\n noteTags: {},\n };\n\n if (options.corpusPath) {\n const fs = getFs();\n if (!fs.existsSync(options.corpusPath)) {\n throw new Error(`Corpus file not found at path: ${options.corpusPath}`);\n }\n const raw = fs.readFileSync(options.corpusPath, 'utf-8');\n const payload = extractPayload(raw);\n\n if (Array.isArray(payload)) {\n data.facts = payload as AnalyticsDataPoint[];\n } else if (payload && typeof payload === 'object') {\n const obj = payload as Record<string, unknown>;\n if ('segments' in obj) throw new Error('Incompatible corpus segments; whole Notes and block revisions are required');\n if (obj.kind === 'event-journal' || Array.isArray(obj.records)) {\n if (Array.isArray(obj.blockRevisions)) data.revisions = obj.blockRevisions as BlockRevision[];\n if (Array.isArray(obj.sessions)) data.results = obj.sessions as Session[];\n if (Array.isArray(obj.records)) {\n data.eventRecords = obj.records as EventRecord[];\n }\n if (Array.isArray(obj.notes)) {\n data.notes = obj.notes as Note[];\n for (const n of obj.notes as Array<{ id?: string; tags?: string[] }>) {\n if (n && typeof n === 'object' && n.id && Array.isArray(n.tags)) {\n data.noteTags[n.id] = n.tags;\n }\n }\n }\n } else if (obj.facts || obj.results || obj.notes || obj.blocks || obj.efforts || obj.tags || obj.logs) {\n const corpus = payload as CorpusIRData;\n if (corpus.facts) data.facts = corpus.facts;\n if (Array.isArray(corpus.results)) data.results = corpus.results;\n if (corpus.notes) data.notes = corpus.notes;\n if (corpus.blocks) data.blocks = corpus.blocks;\n if (corpus.efforts) data.efforts = corpus.efforts;\n if (corpus.revisions) data.revisions = corpus.revisions;\n if (corpus.tags) data.noteTags = corpus.tags;\n\n if (corpus.logs) {\n const identity = {\n noteId: 'corpus-note-1', resultId: 'corpus-result-1', origin: 'journal' as const,\n workoutTimestamp: corpus.logs[0]?.timeSpan?.started ?? Date.now(),\n };\n data.eventRecords = [...toEventRows(corpus.logs, identity), ...toSummaryEventRows(corpus.logs, identity)];\n }\n } else {\n throw new Error(`Unrecognized corpus payload shape in \"${options.corpusPath}\" (expected event-journal, fact-set, or CorpusIRData)`);\n }\n }\n } else if (options.stdinLog) {\n const payload = extractPayload(options.stdinLog) as ExecutionLog | WorkoutResults;\n let executionLog: ExecutionLog;\n const rawLogs = payload.logs ?? ('statements' in payload ? payload.statements : undefined) ?? [];\n if ('results' in payload) {\n executionLog = { results: payload.results, logs: rawLogs, statements: rawLogs };\n } else {\n executionLog = { results: payload, logs: rawLogs, statements: rawLogs };\n }\n\n const identity = {\n noteId: 'stdin-note-1', resultId: 'stdin-result-1',\n origin: 'journal' as const, workoutTimestamp: executionLog.results.startTime,\n };\n data.eventRecords = [\n ...toEventRows(executionLog.logs, identity),\n ...toSummaryEventRows(executionLog.logs, identity),\n ];\n } else if (options.stdinFacts) {\n const payload = extractPayload(options.stdinFacts);\n if (Array.isArray(payload)) {\n data.facts = payload as AnalyticsDataPoint[];\n } else if (payload && typeof payload === 'object' && 'facts' in (payload as Record<string, unknown>)) {\n data.facts = (payload as { facts: AnalyticsDataPoint[] }).facts;\n }\n } else {\n throw new Error('No input dataset provided. Specify --corpus <path>, --stdin-log, or --stdin-facts.');\n }\n for (const note of data.notes) {\n if (typeof note.rawContent !== 'string' || !Number.isSafeInteger(note.sourceRevision) || note.sourceRevision < 1) {\n throw new Error('Incompatible corpus Note; exact rawContent and sourceRevision are required');\n }\n validateNoteBlocks(note.rawContent, note.blocks, note.sourceRevision);\n if (!data.blocks.some((row) => row.noteId === note.id)) {\n for (const [position, block] of Object.values(note.blocks).sort((a, b) => a.from - b.from).entries()) {\n const rawContent = note.rawContent.slice(block.from, block.to);\n const body = parseDocumentSections(rawContent)[0]?.displayContent ?? rawContent;\n data.blocks.push({\n id: `${note.id}:${block.id}`, noteId: note.id, blockId: block.id, blockVersion: block.version,\n sourceRevision: note.sourceRevision, from: block.from, to: block.to, position,\n dataType: block.kind, rawContent, noteTitle: note.title, createdAt: note.createdAt,\n ...(block.kind === 'wod' ? { blockContentId: blockContentId(body) } : {}),\n });\n }\n }\n }\n for (const session of data.results) {\n if ('segmentId' in session || 'segmentVersion' in session || 'data' in session || 'version' in session || 'rawContent' in session || !session.blockId || !Number.isSafeInteger(session.blockVersion) || session.blockVersion < 1) {\n throw new Error('Incompatible corpus Session; exact blockId/blockVersion pin required');\n }\n if (!data.revisions.some((row) => row.noteId === session.noteId && row.blockId === session.blockId && row.version === session.blockVersion && row.kind === 'wod')) {\n throw new Error('Corpus Session immutable revision is unavailable');\n }\n }\n for (const row of [...data.eventRecords, ...data.facts, ...data.blocks]) {\n if ('segmentId' in row || 'segmentVersion' in row) throw new Error('Incompatible corpus segment pin');\n }\n const revisions = new Map(data.revisions.map((row) => [JSON.stringify([row.noteId, row.blockId, row.version]), row]));\n for (const row of data.eventRecords) {\n if (row.blockId !== undefined || row.blockVersion !== undefined) {\n if (!row.blockId || !Number.isSafeInteger(row.blockVersion) || !revisions.has(JSON.stringify([row.noteId, row.blockId, row.blockVersion]))) {\n throw new Error('Corpus Event immutable revision is unavailable');\n }\n }\n }\n for (const row of data.blocks) {\n const note = data.notes.find((candidate) => candidate.id === row.noteId);\n const block = note?.blocks[row.blockId];\n if (!note || !block || row.blockVersion !== block.version || row.sourceRevision !== note.sourceRevision || row.from !== block.from || row.to !== block.to || row.dataType !== block.kind) {\n throw new Error('Corpus block projection does not match current Note source');\n }\n row.rawContent = note.rawContent.slice(block.from, block.to);\n }\n\n return data;\n}\n\n/**\n * Runs a WQL query against the provided in-memory dataset and returns a versioned IR envelope.\n */\nexport async function runQueryCli(\n wqlString: string,\n options: QueryCliOptions = {},\n): Promise<WodWikiIRFile<QueryResult | RowsQueryResult | FindQueryResult | PipelineResult>> {\n const parsed = parseQuery(wqlString);\n if (parsed.error) {\n throw new WqlSyntaxError(wqlString, parsed.error);\n }\n\n const stores = options.stores ?? buildStoresFromData(loadQueryData(options));\n // Bundle form — carries the optional blockEfforts/tags seams when provided.\n const service = new QueryService(stores);\n\n if (isPipelineQuery(parsed)) {\n const result = await service.runPipeline(wqlString, {\n preferredUnit: options.preferredUnit,\n });\n return createIRFile('pipeline-result', result, { source: options.sourceLabel ?? 'cli:wod query' });\n }\n\n if (isFindQuery(parsed)) {\n const result = await service.runFind(parsed);\n const kind: IrKind = parsed.target === 'session' ? 'rows-result' : 'find-result';\n return createIRFile(kind, result, { source: options.sourceLabel ?? 'cli:wod query' });\n }\n\n const result = await service.runQuery(wqlString, {\n preferredUnit: options.preferredUnit,\n });\n return createIRFile('query-result', result, { source: options.sourceLabel ?? 'cli:wod query' });\n}\n","/**\n * Dynamic Language Pack Loader\n *\n * Dynamically loads and registers Language Packs passed via `--pack <module-spec>`.\n * Throws PackLoadError on failure, enabling exit code 3 handling.\n */\n\nfunction getPathUtils() {\n if (typeof globalThis.process?.versions?.node === 'undefined' && !('Bun' in globalThis)) {\n throw new Error('Path resolution is only supported in Node / Bun environments');\n }\n return {\n // eslint-disable-next-line no-restricted-syntax -- lazy CJS require keeps node builtins out of browser bundles\n resolve: require('path').resolve,\n // eslint-disable-next-line no-restricted-syntax -- lazy CJS require keeps node builtins out of browser bundles\n pathToFileURL: require('url').pathToFileURL,\n };\n}\nimport { registerLanguagePack, type LanguagePack } from '@bitcobblers/wod-wiki-engine';\n\nexport class PackLoadError extends Error {\n constructor(\n public readonly spec: string,\n public readonly originalError: unknown,\n ) {\n const msg = originalError instanceof Error ? originalError.message : String(originalError);\n super(`Failed to load Language Pack \"${spec}\": ${msg}`);\n this.name = 'PackLoadError';\n }\n}\n\n/**\n * Dynamically imports a Language Pack module and registers it.\n *\n * @param moduleSpec - Relative or absolute path, or package name.\n */\nexport async function loadLanguagePack(moduleSpec: string): Promise<LanguagePack> {\n try {\n let importPath = moduleSpec;\n\n // If it looks like a relative or absolute file path, resolve and convert to file URL\n if (\n moduleSpec.startsWith('.') ||\n moduleSpec.startsWith('/') ||\n moduleSpec.includes('\\\\') ||\n moduleSpec.endsWith('.ts') ||\n moduleSpec.endsWith('.js') ||\n moduleSpec.endsWith('.mjs')\n ) {\n const { resolve, pathToFileURL } = getPathUtils();\n const resolved = resolve(process.cwd(), moduleSpec);\n importPath = pathToFileURL(resolved).href;\n }\n const imported = await import(/* @vite-ignore */ importPath);\n const candidate = imported.default ?? imported.pack ?? imported;\n\n if (!candidate || typeof candidate !== 'object') {\n throw new Error(`Module \"${moduleSpec}\" does not export a valid LanguagePack object`);\n }\n\n const pack = candidate as LanguagePack;\n registerLanguagePack(pack);\n return pack;\n } catch (error) {\n if (error instanceof PackLoadError) throw error;\n throw new PackLoadError(moduleSpec, error);\n }\n}\n","/**\n * Database configuration for the `wod` CLI (and the dev server): explicit\n * per-property flags → process env → .env file (native node:util.parseEnv,\n * non-mutating).\n *\n * Precedence: flags beat env beats .env. `--db` selects local SQLite even\n * when env configures a remote backend; explicit `--db-driver` /\n * `--postgres-*` / `--turso-*` flags select that backend. Conflicting\n * explicit selectors and ambiguous env backends are rejected. Labels and\n * error messages never contain credentials.\n */\n\n/** Optional per-property flag bag — every property unset unless given. */\nexport interface CliDatabaseOptions {\n /** --db: explicit SQLite file. Selects sqlite even when env has a remote backend. */\n db?: string;\n /** --db-driver: sqlite | postgres | turso. */\n dbDriver?: string;\n /** --database-url: driver-scoped URL (mirrors DATABASE_URL). */\n databaseUrl?: string;\n postgresHost?: string;\n postgresPort?: string;\n postgresUser?: string;\n postgresPassword?: string;\n postgresDatabase?: string;\n /** --postgres-ssl <mode>: true/false or disable | prefer | require | verify-ca | verify-full. */\n postgresSsl?: string | boolean;\n tursoUrl?: string;\n tursoAuthToken?: string;\n /** --env-file: explicit file is mandatory — a missing file is an error. */\n envFile?: string;\n}\n\n/** Discriminated backend selection. `label` is credential-free and safe to\n * print on every variant. sqlite is pure-local (absolute `path`); every\n * remote libsql target normalizes to turso. */\nexport type PostgresSslMode = 'disable' | 'prefer' | 'require' | 'verify-ca' | 'verify-full';\n\nexport type CliDatabaseConfig =\n | { kind: 'sqlite'; label: string; path: string }\n | {\n kind: 'postgres';\n label: string;\n url: string;\n host: string;\n port: number;\n database: string;\n user?: string;\n password?: string;\n ssl: PostgresSslMode;\n }\n | { kind: 'turso'; label: string; url: string; authToken?: string };\n\ntype BackendKind = 'sqlite' | 'postgres' | 'turso';\n\ntype CjsRequire = (id: string) => unknown;\n\n/** Minimal node builtin surfaces (kept out of browser bundles, same pattern as ./db). */\nexport interface ConfigPathShim { resolve(...parts: string[]): string; join(...parts: string[]): string; dirname(p: string): string }\nexport interface ConfigFsShim { existsSync(p: string): boolean; readFileSync(p: string, encoding: string): string }\ninterface UtilShim { parseEnv(content: string): Record<string, string> }\n\n/** Lazy CJS require — keeps node builtins out of browser bundles. */\nfunction nodeRequire(): CjsRequire {\n const g = globalThis as { process?: { versions?: Record<string, string> }; Bun?: unknown; require?: CjsRequire };\n if (typeof g.process?.versions?.node === 'undefined' && typeof g.Bun === 'undefined') {\n throw new Error('database configuration is only supported in Node / Bun environments');\n }\n const req = g.require ?? (typeof require === 'function' ? require : undefined);\n if (!req) throw new Error('database configuration requires a CJS require shim (missing tsup banner?)');\n return req;\n}\nexport const nodePath = (): ConfigPathShim => nodeRequire()('node:path') as ConfigPathShim;\nconst nodeFs = (): ConfigFsShim => nodeRequire()('node:fs') as ConfigFsShim;\n\n/** native node:util.parseEnv — dotenv parsing without a dependency. */\nfunction parseEnvFile(content: string): Record<string, string> {\n return (nodeRequire()('node:util') as UtilShim).parseEnv(content);\n}\n\n/**\n * Load a NON-MUTATING env object from the dotenv tier ONLY: an explicit\n * --env-file is mandatory when given (missing file → error); otherwise\n * `.env` in the working directory, falling back to the nearest ancestor\n * (workspace root) `.env`. Callers merge over process.env themselves\n * ({ ...loadCliEnvironment(file), ...process.env }); process.env is never\n * written.\n */\nexport function loadCliEnvironment(envFile?: string): Record<string, string | undefined> {\n const fs = nodeFs();\n const path = nodePath();\n let file: string | undefined;\n if (envFile !== undefined) {\n file = path.resolve(process.cwd(), envFile);\n if (!fs.existsSync(file)) throw new Error(`[wod] --env-file: file not found: ${envFile}`);\n } else {\n let dir = process.cwd();\n for (;;) {\n const candidate = path.join(dir, '.env');\n if (fs.existsSync(candidate)) {\n file = candidate;\n break;\n }\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n }\n return file !== undefined ? parseEnvFile(fs.readFileSync(file, 'utf-8')) : {};\n}\n\nconst SQLITE_URL_SCHEMES = /^(libsql|https?|wss?|file):\\/\\//;\nconst PG_URL_SCHEMES = /^postgres(ql)?:\\/\\//;\nconst TURSO_URL_SCHEMES = /^(libsql|https?|wss?):\\/\\//;\nconst PG_FLAG_KEYS = [\n 'postgresHost',\n 'postgresPort',\n 'postgresUser',\n 'postgresPassword',\n 'postgresDatabase',\n 'postgresSsl',\n] as const;\n\nconst PG_ENV_KEYS = [\n 'POSTGRES_HOST',\n 'POSTGRES_PORT',\n 'POSTGRES_USER',\n 'POSTGRES_PASSWORD',\n 'POSTGRES_DATABASE',\n 'POSTGRES_SSL',\n] as const;\n\n/** Type guard — keeps backend strings narrowable without casts. */\nconst isBackend = (v: string): v is BackendKind => v === 'sqlite' || v === 'postgres' || v === 'turso';\n\n/** Present-but-empty env values (compose passthroughs) read as unset —\n * lockstep across every env read. */\nfunction setEnv(v: string | undefined): string | undefined {\n return v !== undefined && v.trim() !== '' ? v : undefined;\n}\n\n/** CLI error contract: every configuration failure is prefixed `[wod] `. */\nfunction fail(message: string): never {\n throw new Error(`[wod] ${message}`);\n}\n\nfunction parsePort(v: string, source: string): number {\n if (!/^\\d+$/.test(v)) fail(`${source} must be an integer 1..65535, got ${JSON.stringify(v)}`);\n const port = Number(v);\n if (port < 1 || port > 65535) fail(`${source} must be an integer 1..65535, got ${v}`);\n return port;\n}\n\nfunction sslMode(v: string | boolean | undefined, source: string): PostgresSslMode {\n if (v === undefined || v === '') return 'prefer';\n if (typeof v === 'boolean') return v ? 'require' : 'disable';\n const s = v.trim().toLowerCase();\n if (['true', '1', 'yes', 'require'].includes(s)) return 'require';\n if (['false', '0', 'no', 'disable', 'disabled'].includes(s)) return 'disable';\n if (s === 'prefer' || s === 'verify-ca' || s === 'verify-full') return s;\n fail(`${source} must be disable|prefer|require|verify-ca|verify-full, got ${JSON.stringify(v)}`);\n}\n\n/** Credential-free display form (userinfo + query stripped); an unparsable\n * input is never echoed back. */\nfunction safeUrlLabel(raw: string): string {\n try {\n const u = new URL(raw);\n return `${u.protocol}//${u.host}${u.pathname}`;\n } catch {\n return '<unparsable-url>';\n }\n}\n\n/** URL form — the API's existing semantics; the label strips credentials. */\nfunction postgresFromUrl(url: string, source: string): CliDatabaseConfig {\n if (!PG_URL_SCHEMES.test(url)) {\n fail(`${source} must start with postgres:// or postgresql://`);\n }\n let u: URL;\n try {\n u = new URL(url);\n } catch {\n fail(`${source} is not a parseable URL`); // never echo the input (credentials)\n }\n const database = decodeURIComponent(u.pathname.replace(/^\\/+|\\/+$/g, ''));\n if (database === '') fail(`${source} has no database name`);\n return {\n kind: 'postgres',\n label: safeUrlLabel(url),\n url,\n host: u.hostname,\n port: u.port !== '' ? parsePort(u.port, `${source} port`) : 5432,\n database,\n user: u.username !== '' ? decodeURIComponent(u.username) : undefined,\n password: u.password !== '' ? decodeURIComponent(u.password) : undefined,\n ssl: sslMode(u.searchParams.get('sslmode') ?? u.searchParams.get('ssl') ?? undefined, `${source} ssl parameter`),\n };\n}\n\nfunction resolvePostgres(\n options: CliDatabaseOptions,\n e: Record<string, string | undefined>,\n databaseUrl: string | undefined,\n): CliDatabaseConfig {\n const flagProps = PG_FLAG_KEYS.some((k) => options[k] !== undefined);\n const envProps = PG_ENV_KEYS.some((k) => setEnv(e[k]) !== undefined);\n // Per-property form: explicit flags, or POSTGRES_* env when no URL competes\n // (env DATABASE_URL keeps its existing precedence over env props).\n if (flagProps || (envProps && databaseUrl === undefined)) {\n const host = options.postgresHost ?? setEnv(e.POSTGRES_HOST) ?? '127.0.0.1';\n const port = parsePort(options.postgresPort ?? setEnv(e.POSTGRES_PORT) ?? '5432', '--postgres-port/POSTGRES_PORT');\n const database = options.postgresDatabase ?? setEnv(e.POSTGRES_DATABASE);\n if (database === undefined) {\n fail('--postgres-database (or POSTGRES_DATABASE) is required for per-property PostgreSQL configuration');\n }\n const user = options.postgresUser ?? setEnv(e.POSTGRES_USER);\n const password = options.postgresPassword ?? setEnv(e.POSTGRES_PASSWORD);\n const ssl = sslMode(options.postgresSsl ?? setEnv(e.POSTGRES_SSL), '--postgres-ssl/POSTGRES_SSL');\n try {\n // URL setters percent-encode userinfo specials and keep the colon placement.\n const u = new URL(`postgresql://${host}`);\n u.port = String(port);\n u.pathname = `/${database}`;\n if (user !== undefined) u.username = user;\n if (password !== undefined) u.password = password;\n u.searchParams.set('sslmode', ssl);\n return {\n kind: 'postgres',\n label: `postgresql://${u.host}${u.pathname}`,\n url: u.toString(),\n host,\n port,\n database,\n user,\n password,\n ssl,\n };\n } catch {\n fail('invalid PostgreSQL host/database in per-property configuration');\n }\n }\n if (databaseUrl !== undefined) return postgresFromUrl(databaseUrl, 'DB_DRIVER=postgres DATABASE_URL');\n fail('DB_DRIVER=postgres requires DATABASE_URL starting with postgres:// or postgresql:// — or per-property --postgres-host/--postgres-database flags');\n}\n\nfunction resolveTurso(\n options: CliDatabaseOptions,\n e: Record<string, string | undefined>,\n databaseUrl: string | undefined,\n): CliDatabaseConfig {\n const url = options.tursoUrl ?? setEnv(e.TURSO_DATABASE_URL) ?? databaseUrl;\n if (url === undefined) {\n fail('DB_DRIVER=turso requires --turso-url / TURSO_DATABASE_URL or DATABASE_URL (libsql:// or https://)');\n }\n if (PG_URL_SCHEMES.test(url)) fail('DB_DRIVER=turso cannot use a postgres:// URL');\n if (!TURSO_URL_SCHEMES.test(url)) fail('DB_DRIVER=turso requires a libsql://, https://, http:// or wss:// URL');\n return {\n kind: 'turso',\n label: safeUrlLabel(url),\n url,\n authToken: options.tursoAuthToken ?? setEnv(e.TURSO_AUTH_TOKEN) ?? setEnv(e.LIBSQL_AUTH_TOKEN),\n };\n}\n\nfunction resolveSqlite(\n options: CliDatabaseOptions,\n e: Record<string, string | undefined>,\n databaseUrl: string | undefined,\n): CliDatabaseConfig {\n // Explicit --db wins even when env configures a remote backend.\n if (options.db !== undefined) {\n const path = nodePath().resolve(process.cwd(), options.db);\n return { kind: 'sqlite', label: path, path };\n }\n if (databaseUrl !== undefined) {\n if (PG_URL_SCHEMES.test(databaseUrl)) fail('DB_DRIVER=sqlite cannot use a postgres:// DATABASE_URL');\n if (databaseUrl.startsWith('file:')) {\n const path = nodePath().resolve(process.cwd(), decodeURIComponent(databaseUrl.slice('file:'.length).split('?')[0]));\n return { kind: 'sqlite', label: path, path };\n }\n if (!SQLITE_URL_SCHEMES.test(databaseUrl)) {\n fail('DB_DRIVER=sqlite requires a libsql://, https://, http://, wss:// or file:// DATABASE_URL');\n }\n // A remote libsql URL is the turso protocol — normalize the backend kind.\n return { kind: 'turso', label: safeUrlLabel(databaseUrl), url: databaseUrl, authToken: setEnv(e.LIBSQL_AUTH_TOKEN) };\n }\n // WOD_WIKI_DB keeps its historical precedence over SQLITE_PATH.\n const path = nodePath().resolve(process.cwd(), setEnv(e.WOD_WIKI_DB) ?? setEnv(e.SQLITE_PATH) ?? './wodwiki.db');\n return { kind: 'sqlite', label: path, path };\n}\n\n/** Env-tier backend inference with ambiguity rejection — reached only when\n * no explicit flag selects a backend and DB_DRIVER is unset. */\nfunction envBackend(e: Record<string, string | undefined>): BackendKind {\n const kinds = new Set<BackendKind>();\n if (setEnv(e.WOD_WIKI_DB) !== undefined || setEnv(e.SQLITE_PATH) !== undefined) kinds.add('sqlite');\n const dbUrl = setEnv(e.DATABASE_URL);\n if (PG_ENV_KEYS.some((k) => setEnv(e[k]) !== undefined) || (dbUrl !== undefined && PG_URL_SCHEMES.test(dbUrl))) {\n kinds.add('postgres');\n } else if (dbUrl !== undefined && SQLITE_URL_SCHEMES.test(dbUrl)) {\n kinds.add('sqlite');\n }\n if (setEnv(e.TURSO_DATABASE_URL) !== undefined) kinds.add('turso');\n if (kinds.size > 1) {\n fail(`ambiguous database configuration: ${[...kinds].join(' + ')} env vars are both set — set DB_DRIVER (or pass explicit flags) to choose`);\n }\n return kinds.values().next().value ?? 'sqlite';\n}\n\n/**\n * Resolve the effective database configuration: flags > env > .env. Pass\n * `env` to supply an already-merged tier (nothing is re-read); without it\n * the .env tier (loadCliEnvironment) sits under the true process tier.\n * Kind-pinning flags (--db, --db-driver, --turso-url/--turso-auth-token,\n * --postgres-*) override even a malformed env driver; conflicting pins and\n * ambiguous env backends are rejected. Never echoes credentials.\n */\nexport function resolveDatabaseConfig(\n options: CliDatabaseOptions = {},\n env?: Record<string, string | undefined>,\n): CliDatabaseConfig {\n const e = env ?? { ...loadCliEnvironment(options.envFile), ...process.env };\n\n const driverFlag = options.dbDriver;\n if (driverFlag !== undefined && !isBackend(driverFlag)) {\n fail(`--db-driver must be sqlite|postgres|turso, got ${JSON.stringify(driverFlag)}`);\n }\n\n // Kind-pinning explicit flags; conflicting pins are rejected outright.\n const pinned: Array<[string, BackendKind]> = [];\n if (options.db !== undefined) pinned.push(['--db', 'sqlite']);\n if (driverFlag !== undefined) pinned.push([`--db-driver ${driverFlag}`, driverFlag]);\n if (options.tursoUrl !== undefined) pinned.push(['--turso-url', 'turso']);\n if (options.tursoAuthToken !== undefined) pinned.push(['--turso-auth-token', 'turso']);\n if (PG_FLAG_KEYS.some((k) => options[k] !== undefined)) pinned.push(['--postgres-*', 'postgres']);\n const kinds = new Set(pinned.map(([, kind]) => kind));\n if (kinds.size > 1) {\n fail(`conflicting database selectors: ${pinned.map(([flag, kind]) => `${flag} (${kind})`).join(', ')}`);\n }\n // --database-url is the URL for whichever backend is selected — it never\n // pins a kind, but never combines with a competing URL/local selector.\n if (options.databaseUrl !== undefined) {\n if (options.db !== undefined) fail('conflicting database selectors: --db and --database-url are both set');\n if (options.tursoUrl !== undefined) fail('conflicting database selectors: --turso-url and --database-url are both set');\n if (PG_FLAG_KEYS.some((k) => options[k] !== undefined)) {\n fail('conflicting database selectors: --database-url and --postgres-* flags are both set');\n }\n }\n\n let backend: BackendKind;\n if (pinned.length > 0) {\n backend = pinned[0][1]; // flags override even a malformed env driver\n } else {\n const envDriver = setEnv(e.DB_DRIVER);\n if (envDriver !== undefined) {\n if (!isBackend(envDriver)) {\n fail(`Unsupported DB_DRIVER: ${envDriver} (expected sqlite|turso|postgres)`);\n }\n backend = envDriver;\n } else {\n backend = envBackend(e);\n }\n }\n const databaseUrl = options.databaseUrl ?? setEnv(e.DATABASE_URL);\n switch (backend) {\n case 'postgres':\n return resolvePostgres(options, e, databaseUrl);\n case 'turso':\n return resolveTurso(options, e, databaseUrl);\n case 'sqlite':\n return resolveSqlite(options, e, databaseUrl);\n }\n}\n","/**\n * CLI Output Formatters (JSON, ASCII Table, CSV)\n *\n * Implements presentation formatting for parse-tree, execution-log,\n * and WQL query results across json, table, and csv formats.\n */\n\nimport type { WodWikiIRFile, StatementNode, ExecutionLog } from '@bitcobblers/wod-wiki-engine';\nimport type { QueryResult, RowsQueryResult, FindQueryResult, PipelineResult } from '@bitcobblers/wod-wiki-wql';\n\nexport type OutputFormat = 'json' | 'table' | 'csv' | 'jsonl';\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 * `wod db <action>` — native Turso lifecycle commands for the Storage UI:\n *\n * wod db create [--name <db>] --group <g> -o <pairing-file>\n * Provision a fresh empty target (canonical name `wod-wiki-v<DB_VERSION>`)\n * and pair it for the browser's first bootstrap.\n * wod db backup <source> [--name <copy>] --writers-retired -o <file>\n * wod db restore <source> [--name <copy>] --writers-retired -o <file>\n * Native whole-database copy through the Control API seed\n * (`seed.type = database`), proven row- and binary-identical before a\n * client token is minted. Only a copy already at the current schema is\n * paired; older-schema archives are reported as retained, unpairable\n * copies. Restore refuses a target named like the source.\n * wod db migrate <source> [--name <target>] --writers-retired -o <file>\n * Logical conversion of a legacy/current older-schema source into a\n * fresh target via the shared IndexedDB adapter (fake-indexeddb is\n * loaded only in this trusted CLI runtime). The target is constructed\n * at the non-legitimate marker schema 0 and stays unpairable until the\n * full replay/pin/binary validation passes and the finalize CAS\n * publishes the live schema. The source is never mutated (read-only\n * token) and is retained on every outcome.\n * wod db delete <name> --yes <name>\n * Deletes the database — `--yes` must repeat the exact name.\n * wod db pair <name> [--allow-empty] -o <file> [--write-env]\n * Mint a database-scoped token and write the pairing file for the\n * browser Data settings. Refuses unknown/legacy/newer and the schema-0\n * constructing marker; `--allow-empty` pairs a fresh bootstrap target.\n *\n * Safety contract: management credentials come from the environment only\n * (TURSO_API_TOKEN, TURSO_ORGANIZATION — never flags, never printed);\n * pairing credentials are written only to the explicitly requested file\n * (created 0600, exclusive); `--write-env` is opt-in, atomic (temp+rename)\n * and refuses to replace existing database settings. A failed verification\n * or config write never deletes the created database and never touches the\n * source — the user decides.\n */\n\nimport { DB_VERSION } from '@bitcobblers/wod-wiki-storage';\nimport type { Database, LibsqlClient } from '@bitcobblers/wod-wiki-storage/sql';\nimport type {\n DatabaseFingerprint,\n StoredSyncOp,\n SyncEntry,\n SyncMutation,\n SyncTargetKind,\n} from '@bitcobblers/wod-wiki-storage/sql';\nimport { nodeFs, nodeCrypto } from './db';\n\n// ---------------------------------------------------------------------------\n// Lazy seams (browser-free: everything node-specific is imported on demand)\n// ---------------------------------------------------------------------------\n\n/** Structural mirror of the storage/sql members the lifecycle uses. */\nexport interface SqlLifecycleApi {\n libsqlDatabase(client: LibsqlClient): Database;\n probeSyncTarget(db: Database): Promise<SyncTargetKind>;\n initSyncTarget(db: Database, schemaVersion: number): Promise<void>;\n applySyncBatch(db: Database, entries: SyncEntry[], opts?: { expectSchema?: number }): Promise<number>;\n fetchSyncOps(db: Database, afterRev: number, limit: number): Promise<StoredSyncOp[]>;\n databaseFingerprint(db: Database): Promise<DatabaseFingerprint>;\n assertDatabaseCopyMatches(source: Database, copy: Database, before: DatabaseFingerprint): Promise<DatabaseFingerprint>;\n finalizeMigrationTarget(db: Database, toSchema: number, expectRev: number): Promise<void>;\n assertPolicySnapshot(ops: readonly SyncMutation[]): void;\n assertLogPinClosure(ops: readonly StoredSyncOp[]): void;\n}\n\nlet lifecycleSql: Promise<SqlLifecycleApi> | undefined;\n\nfunction loadSqlLifecycle(): Promise<SqlLifecycleApi> {\n lifecycleSql ??= import(/* @vite-ignore */ '@bitcobblers/wod-wiki-storage/sql') as Promise<SqlLifecycleApi>;\n return lifecycleSql;\n}\n\n/** The fs surface the secret-file writers need (the real fs module provides\n * all of it; declared standalone so no method signature conflicts). */\ninterface WriteFsShim {\n existsSync(path: string): boolean;\n unlinkSync(path: string): void;\n readFileSync(path: string, encoding: string): string;\n openSync(path: string, flags: string, mode?: number): number;\n writeSync(fd: number, data: string): number;\n closeSync(fd: number): void;\n renameSync(from: string, to: string): void;\n}\n\nfunction fullFs(): WriteFsShim {\n return nodeFs() as unknown as WriteFsShim;\n}\n\ninterface UtilShim { parseEnv(content: string): Record<string, string> }\n\nfunction parseEnvContent(content: string): Record<string, string> {\n const g = globalThis as { process?: { versions?: Record<string, string> }; Bun?: unknown; require?: (id: string) => unknown };\n const req = g.require ?? (typeof require === 'function' ? require : undefined);\n if (!req) throw new Error('[wod db] .env handling requires a CJS require shim (missing tsup banner?)');\n return (req('node:util') as UtilShim).parseEnv(content);\n}\n\n// ---------------------------------------------------------------------------\n// Control API client (spec: turso.tech/openapi.json)\n// ---------------------------------------------------------------------------\n\nexport interface TursoManagementDeps {\n fetchFn?: typeof fetch;\n apiBase?: string;\n}\n\nexport interface DatabaseInfo {\n name: string;\n dbId?: string;\n hostname: string;\n group?: string;\n}\n\n/** Mask every secret occurrence in a message before it reaches output. */\nfunction maskSecrets(message: string, ...secrets: string[]): string {\n let masked = message;\n for (const secret of secrets) {\n if (secret) masked = masked.split(secret).join('••••••');\n }\n return masked;\n}\n\nexport class TursoManagement {\n private constructor(\n readonly organization: string,\n private readonly token: string,\n private readonly deps: TursoManagementDeps,\n ) {}\n\n /** Env-only credentials — never flags, never .env-file-only names. */\n static fromEnv(env: Record<string, string | undefined>, deps: TursoManagementDeps = {}): TursoManagement {\n const read = (key: string): string | undefined => {\n const value = env[key];\n return value !== undefined && value.trim() !== '' ? value.trim() : undefined;\n };\n const token = read('TURSO_API_TOKEN');\n const organization = read('TURSO_ORGANIZATION');\n if (!token || !organization) {\n throw new Error(\n '[wod db] management credentials required: set TURSO_API_TOKEN and TURSO_ORGANIZATION in the environment ' +\n '(or .env). Management tokens are never accepted as flags and never printed.',\n );\n }\n return new TursoManagement(organization, token, deps);\n }\n\n private async request(op: string, method: string, path: string, body?: unknown): Promise<unknown> {\n const base = this.deps.apiBase ?? 'https://api.turso.tech';\n let response: Response;\n try {\n response = await (this.deps.fetchFn ?? fetch)(`${base}${path}`, {\n method,\n headers: { authorization: `Bearer ${this.token}`, ...(body !== undefined ? { 'content-type': 'application/json' } : {}) },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n signal: AbortSignal.timeout(20_000),\n });\n } catch (error) {\n throw new Error(`[wod db] ${op}: ${maskSecrets(error instanceof Error ? error.message : String(error), this.token)}`, { cause: error });\n }\n if (!response.ok) {\n let detail = '';\n try {\n const parsed: unknown = await response.json();\n if (typeof parsed === 'object' && parsed !== null && 'error' in parsed && typeof parsed.error === 'string') {\n detail = parsed.error;\n }\n } catch {\n // non-JSON error body — status text below is enough\n }\n throw new Error(\n `[wod db] ${op}: Turso API ${response.status} ${maskSecrets(detail || response.statusText, this.token)}`,\n );\n }\n if (response.status === 204) return undefined;\n const text = await response.text();\n if (text.trim() === '') return undefined;\n try {\n return JSON.parse(text) as unknown;\n } catch {\n throw new Error(`[wod db] ${op}: Turso API returned a non-JSON body with status ${response.status}`);\n }\n }\n\n async getDatabase(name: string): Promise<DatabaseInfo | undefined> {\n try {\n const payload: unknown = await this.request(\n `get database ${name}`, 'GET',\n `/v1/organizations/${encodeURIComponent(this.organization)}/databases/${encodeURIComponent(name)}`,\n );\n if (typeof payload !== 'object' || payload === null || !('database' in payload)) {\n throw new Error(`[wod db] get database ${name}: Turso API payload has no database field`);\n }\n return toDatabaseInfo(payload.database);\n } catch (error) {\n if (error instanceof Error && error.message.includes('Turso API 404')) return undefined;\n throw error;\n }\n }\n\n async createDatabase(input: { name: string; group: string; seed?: { type: 'database'; name: string } }): Promise<DatabaseInfo> {\n const payload: unknown = await this.request(\n `create database ${input.name}`, 'POST',\n `/v1/organizations/${encodeURIComponent(this.organization)}/databases`,\n input,\n );\n if (typeof payload !== 'object' || payload === null || !('database' in payload)) {\n throw new Error(`[wod db] create database ${input.name}: Turso API payload has no database field`);\n }\n return toDatabaseInfo(payload.database);\n }\n\n /** Mint a database-scoped token (spec: authorization full-access|read-only). */\n async createToken(name: string, authorization: 'full-access' | 'read-only', expiration: string): Promise<string> {\n const payload: unknown = await this.request(\n `mint token for ${name}`, 'POST',\n `/v1/organizations/${encodeURIComponent(this.organization)}/databases/${encodeURIComponent(name)}` +\n `/auth/tokens?authorization=${authorization}&expiration=${encodeURIComponent(expiration)}`,\n );\n if (typeof payload !== 'object' || payload === null || !('jwt' in payload) || typeof payload.jwt !== 'string' || payload.jwt === '') {\n throw new Error(`[wod db] mint token for ${name}: Turso API returned no token`);\n }\n return payload.jwt;\n }\n\n async deleteDatabase(name: string): Promise<void> {\n await this.request(\n `delete database ${name}`, 'DELETE',\n `/v1/organizations/${encodeURIComponent(this.organization)}/databases/${encodeURIComponent(name)}`,\n );\n }\n}\n\n/** Narrow the Control API Database payload (external boundary — fail closed\n * on anything unexpected instead of trusting a cast). */\nfunction toDatabaseInfo(value: unknown): DatabaseInfo {\n if (typeof value !== 'object' || value === null || !('Name' in value) || !('Hostname' in value)) {\n throw new Error('[wod db] Turso API database payload is missing Name/Hostname');\n }\n const name = value.Name;\n const hostname = value.Hostname;\n if (typeof name !== 'string' || name === '' || typeof hostname !== 'string' || hostname === '') {\n throw new Error('[wod db] Turso API database payload is missing Name/Hostname');\n }\n return {\n name,\n hostname,\n dbId: 'DbId' in value && typeof value.DbId === 'string' ? value.DbId : undefined,\n group: 'group' in value && typeof value.group === 'string' ? value.group : undefined,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Pairing file + opt-in .env output\n// ---------------------------------------------------------------------------\n\nexport interface PairingFile {\n wodWikiPairing: 1;\n kind: 'turso';\n url: string;\n authToken: string;\n /** Org-unique database name — the UI's display label. */\n database: string;\n /** Informational snapshot of the target's sync schema at pairing time. */\n schemaVersion: number;\n createdAt: string;\n}\n\n/** Atomic 0600 secret write: unique exclusive-create temp (never follows a\n * pre-planted symlink, never inherits a planted broad mode) + rename, with\n * temp cleanup on error. */\nfunction writeSecretFile(fs: WriteFsShim, path: string, content: string): void {\n const tmp = `${path}.${nodeCrypto().randomUUID()}.tmp`;\n const fd = fs.openSync(tmp, 'wx', 0o600);\n try {\n fs.writeSync(fd, content);\n fs.closeSync(fd);\n fs.renameSync(tmp, path);\n } catch (error) {\n try {\n fs.closeSync(fd);\n } catch {\n // already closed by the failing step\n }\n try {\n fs.unlinkSync(tmp);\n } catch {\n // nothing to clean up\n }\n throw error;\n }\n}\n// eslint-disable-next-line no-control-regex\nconst CONTROL_CHARS = /[\\u0000-\\u001f\\u007f\\u0080-\\u009f]/;\n\n/** External-data gate: API-supplied URL/token/name must be free of control\n * characters before they reach a file, a message or the environment. */\nfunction assertSafePairingFields(pairing: Pick<PairingFile, 'url' | 'authToken' | 'database'>): void {\n for (const [what, value] of [['target URL', pairing.url], ['auth token', pairing.authToken], ['database name', pairing.database]] as const) {\n if (CONTROL_CHARS.test(value)) {\n throw new Error(`[wod db] refusing: ${what} contains control characters (hostile API response)`);\n }\n }\n let parsed: URL;\n try {\n parsed = new URL(pairing.url);\n } catch {\n throw new Error('[wod db] refusing: target URL is not parseable');\n }\n if (parsed.protocol !== 'libsql:' || parsed.hostname === '' || parsed.search !== '' || parsed.hash !== '') {\n throw new Error('[wod db] refusing: target URL must be a plain libsql://<hostname>');\n }\n}\n\n/** Exclusive pairing file (0600) — an existing file is never silently\n * replaced; --force replaces through a unique 0600 temp + rename so the new\n * credential never sits in a file with the old (possibly wider) permissions. */\nexport function writePairingFile(path: string, pairing: PairingFile, opts: { force?: boolean } = {}): void {\n const fs = fullFs();\n if (fs.existsSync(path) && !opts.force) {\n throw new Error(`[wod db] refusing to overwrite existing pairing file ${path} (it contains a credential) — pass --force to replace it`);\n }\n assertSafePairingFields(pairing);\n writeSecretFile(fs, path, JSON.stringify(pairing, null, 2) + '\\n');\n}\n\nconst ENV_GUARD_KEYS = [\n 'DB_DRIVER',\n 'DATABASE_URL',\n 'TURSO_DATABASE_URL',\n 'TURSO_AUTH_TOKEN',\n 'LIBSQL_AUTH_TOKEN',\n 'WOD_WIKI_DB',\n 'SQLITE_PATH',\n 'POSTGRES_HOST',\n 'POSTGRES_PORT',\n 'POSTGRES_USER',\n 'POSTGRES_PASSWORD',\n 'POSTGRES_DATABASE',\n 'POSTGRES_SSL',\n] as const;\n\n/** Opt-in atomic .env merge: appends the turso target block, preserves every\n * unrelated line, and REFUSES when any database setting already exists. The\n * URL/token are validated as external data before touching the file. */\nexport function appendTursoEnv(envPath: string, target: { url: string; authToken: string }, now: Date): void {\n assertSafePairingFields({ url: target.url, authToken: target.authToken, database: 'wod-wiki' });\n const fs = fullFs();\n const existing = fs.existsSync(envPath) ? fs.readFileSync(envPath, 'utf8') : '';\n const parsed = existing ? parseEnvContent(existing) : {};\n const present = ENV_GUARD_KEYS.filter((key) => typeof parsed[key] === 'string' && parsed[key].trim() !== '');\n if (present.length > 0) {\n throw new Error(\n `[wod db] refusing to modify ${envPath}: conflicting database selectors already set (${present.join(', ')}) — resolve them manually first; an appended Turso target would be ambiguous`,\n );\n }\n const block =\n `\\n# wod db pair — added ${now.toISOString()}\\n` +\n `DB_DRIVER=turso\\nTURSO_DATABASE_URL=${target.url}\\nTURSO_AUTH_TOKEN=${target.authToken}\\n`;\n writeSecretFile(fs, envPath, existing + block);\n}\n\n// ---------------------------------------------------------------------------\n// Shared helpers\n// ---------------------------------------------------------------------------\n\nexport interface DbAdminDeps {\n fetchFn?: typeof fetch;\n now?: () => Date;\n /** Test seam: map a provisioned hostname to a client URL. */\n databaseUrl?: (hostname: string) => string;\n /** Test seam: runs after the Control API created a copy, before verification. */\n midCopyHook?: (copyName: string) => Promise<void>;\n}\n\nexport interface DbAdminIo {\n stdout: (text: string) => void;\n stderr: (text: string) => void;\n}\n\nexport interface DbCommandArgs {\n action?: string;\n /** First positional: source database name (backup/restore/migrate/delete/pair). */\n name?: string;\n /** --name: explicit target database name. */\n dbName?: string;\n group?: string;\n /** --yes <name>: exact deletion confirmation. */\n yes?: string;\n output?: string;\n writeEnv?: boolean;\n writersRetired?: boolean;\n allowEmpty?: boolean;\n force?: boolean;\n /** --env-file the CLI loaded (the .env --write-env appends to). */\n envFile?: string;\n env: Record<string, string | undefined>;\n}\n\nconst DB_NAME_PATTERN = /^[a-z0-9][a-z0-9-]{0,63}$/;\n\nfunction assertDbName(name: string, what: string): void {\n if (!DB_NAME_PATTERN.test(name)) {\n throw new Error(`[wod db] ${what} must match [a-z0-9][a-z0-9-]{0,63}, got \"${name}\"`);\n }\n}\n\nfunction requireOutput(action: string, output?: string): string {\n if (!output || output === '-') {\n throw new Error(`[wod db ${action}] a pairing file path is required (-o <file>) — credentials are never printed`);\n }\n return output;\n}\n\nfunction requireSource(name: string | undefined, action: string): string {\n if (!name) {\n throw new Error(`[wod db ${action}] missing source database name — usage: wod db ${action} <source> [options]`);\n }\n return name;\n}\n\nfunction requireGroup(action: string, group?: string): string {\n if (!group || group.trim() === '') {\n throw new Error(`[wod db ${action}] missing --group <name> — the Turso group must already exist`);\n }\n return group.trim();\n}\n\n/** Copy/migrate targets land in the source's group; when the API response\n * omits it, an explicit --group is required — never assumed. */\nfunction requireSourceGroup(action: string, info: DatabaseInfo, args: DbCommandArgs): string {\n if (info.group) return info.group;\n if (args.group && args.group.trim() !== '') return args.group.trim();\n throw new Error(`[wod db ${action}] the Turso API did not report a group for \"${info.name}\" — pass --group <name> explicitly`);\n}\n\nfunction requireWritersRetired(action: string, source: string, ack: boolean | undefined): void {\n if (!ack) {\n throw new Error(\n `[wod db ${action}] refusing to read a live source: retire its writers first (stop sync on every device), ` +\n `then pass --writers-retired to acknowledge \"${source}\" is frozen for the duration of the copy`,\n );\n }\n}\n\n// Lazy on purpose: '@libsql/client' (node driver) and 'fake-indexeddb' /\n// '@bitcobblers/wod-wiki-storage/idb' must stay external in the CLI bundle\n// and out of browser graphs — the same seam as ./db's loadSql().\nasync function openLibsql(url: string, authToken: string | undefined, deps: DbAdminDeps): Promise<Database> {\n const [{ createClient }, sql] = await Promise.all([\n import(/* @vite-ignore */ '@libsql/client') as Promise<{ createClient: (config: { url: string; authToken?: string }) => LibsqlClient }>,\n loadSqlLifecycle(),\n ]);\n const connectionUrl = deps.databaseUrl?.(new URL(url).hostname) ?? url;\n return sql.libsqlDatabase(createClient({ url: connectionUrl, authToken }));\n}\n\nasync function closeQuietly(db: Database): Promise<void> {\n await db.close().catch(() => undefined);\n}\n\n/** libsql URL for a provisioned hostname (provisioning answer is authoritative). */\nfunction targetUrl(hostname: string): string {\n return `libsql://${hostname}`;\n}\n\n// ---------------------------------------------------------------------------\n// Verification: replay equality\n// ---------------------------------------------------------------------------\n\n/** Structural equality incl. per-byte binary rows — the codec decodes BLOBs\n * to ArrayBuffer, so raw object comparison would see \"no keys\" on both sides\n * and wrongly pass. */\nfunction snapshotValueEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a === 'number' && typeof b === 'number') return a === b || (Number.isNaN(a) && Number.isNaN(b));\n if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') return false;\n const aBytes = a instanceof ArrayBuffer ? new Uint8Array(a)\n : ArrayBuffer.isView(a) ? new Uint8Array(a.buffer, a.byteOffset, a.byteLength) : undefined;\n const bBytes = b instanceof ArrayBuffer ? new Uint8Array(b)\n : ArrayBuffer.isView(b) ? new Uint8Array(b.buffer, b.byteOffset, b.byteLength) : undefined;\n if (aBytes !== undefined || bBytes !== undefined) {\n return aBytes !== undefined && bBytes !== undefined\n && aBytes.length === bBytes.length && aBytes.every((byte, i) => byte === bBytes[i]);\n }\n const aKeys = Object.keys(a as object);\n const bKeys = Object.keys(b as object);\n if (aKeys.length !== bKeys.length) return false;\n const aRecord = a as Record<string, unknown>;\n const bRecord = b as Record<string, unknown>;\n return aKeys.every((key) => key in bRecord && snapshotValueEqual(aRecord[key], bRecord[key]));\n}\n\n/** Full-restoration proof: the freshly written target must replay EXACTLY\n * the written snapshot — same groups, revisions, timestamps and payloads. */\nasync function assertReplayMatches(sql: SqlLifecycleApi, target: Database, entries: SyncEntry[]): Promise<void> {\n const ops: StoredSyncOp[] = [];\n for (;;) {\n const window = await sql.fetchSyncOps(target, ops.length === 0 ? 0 : ops[ops.length - 1].rev, 10_000);\n if (window.length === 0) break;\n ops.push(...window);\n }\n const expected = entries.flatMap((entry, entryIndex) =>\n entry.ops.map((mutation, idx) => ({ opId: `${entry.id}:${idx}`, rev: entryIndex + 1, idx, at: entry.at, mutation })));\n if (ops.length !== expected.length) {\n throw new Error(`[wod db migrate] replay verification failed: target has ${ops.length} ops, snapshot has ${expected.length}`);\n }\n for (let i = 0; i < expected.length; i++) {\n const got = ops[i];\n const want = expected[i];\n if (got.opId !== want.opId || got.rev !== want.rev || got.idx !== want.idx || got.at !== want.at\n || !snapshotValueEqual(got.mutation, want.mutation)) {\n throw new Error(`[wod db migrate] replay verification failed at op ${i} (${want.opId}) — target diverges from the validated snapshot`);\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Logical migration (fresh target, source retained)\n// ---------------------------------------------------------------------------\n\nconst OPS_PER_GROUP = 200;\n\nfunction classifySource(probe: SyncTargetKind, source: string): { fromVersion: number; legacy: boolean } {\n if (probe === 'empty') throw new Error(`[wod db migrate] ${source} is empty — nothing to migrate`);\n if (probe.kind === 'unknown') throw new Error(`[wod db migrate] ${source} holds foreign data — refusing to touch it`);\n if (probe.kind === 'current') {\n if (probe.schemaVersion === 0) throw new Error(`[wod db migrate] ${source} is an incomplete migration target (constructing marker) — it was never validated`);\n if (probe.schemaVersion > DB_VERSION) throw new Error(`[wod db migrate] ${source} is schema v${probe.schemaVersion}, newer than this CLI (v${DB_VERSION}) — refusing`);\n if (probe.schemaVersion === DB_VERSION) throw new Error(`[wod db migrate] ${source} is already at schema v${DB_VERSION} — nothing to migrate`);\n return { fromVersion: probe.schemaVersion, legacy: false };\n }\n if (probe.schemaVersion > DB_VERSION) {\n throw new Error(`[wod db migrate] ${source} legacy schema v${probe.schemaVersion} is newer than this CLI (v${DB_VERSION}) — refusing`);\n }\n return { fromVersion: probe.schemaVersion, legacy: true };\n}\n\n/** Shared adapter conversion — fake-indexeddb is loaded ONLY here, in the\n * trusted CLI runtime, before convertSyncSource touches globalThis.indexedDB.\n * The root module is typed ('auto' is not); its exports are mirrored onto\n * globalThis exactly as fake-indexeddb/auto would. */\nasync function convertSource(source: Database, fromVersion: number, legacy: boolean): Promise<SyncMutation[]> {\n const fake = await import(/* @vite-ignore */ 'fake-indexeddb');\n const globals = globalThis as unknown as Record<string, unknown>;\n for (const [key, value] of Object.entries(fake)) {\n if (key !== 'default') globals[key] = value;\n }\n globals.indexedDB = new fake.IDBFactory();\n const idb = await import(/* @vite-ignore */ '@bitcobblers/wod-wiki-storage/idb') as {\n convertSyncSource(db: Database, fromVersion: number, legacy: boolean): Promise<SyncMutation[]>;\n };\n return idb.convertSyncSource(source, fromVersion, legacy);\n}\n\nfunction snapshotEntries(mutations: SyncMutation[], snapshotId: string, at: number): SyncEntry[] {\n const entries: SyncEntry[] = [];\n for (let start = 0; start < mutations.length; start += OPS_PER_GROUP) {\n entries.push({ id: `${snapshotId}-${entries.length}`, at, ops: mutations.slice(start, start + OPS_PER_GROUP) });\n }\n return entries;\n}\n\n// ---------------------------------------------------------------------------\n// Command implementations\n// ---------------------------------------------------------------------------\n\nasync function runCreate(mgmt: TursoManagement, args: DbCommandArgs, deps: DbAdminDeps, io: DbAdminIo, now: Date): Promise<void> {\n const output = requireOutput('create', args.output);\n const group = requireGroup('create', args.group);\n const dbName = args.dbName ?? `wod-wiki-v${DB_VERSION}`;\n assertDbName(dbName, 'database name');\n if (await mgmt.getDatabase(dbName)) {\n throw new Error(`[wod db create] database \"${dbName}\" already exists — pair it with \\`wod db pair ${dbName}\\` or choose --name`);\n }\n const created = await mgmt.createDatabase({ name: dbName, group });\n const url = targetUrl(created.hostname);\n const token = await mgmt.createToken(dbName, 'full-access', 'never');\n const db = await openLibsql(url, token, deps);\n let probe: SyncTargetKind;\n try {\n probe = await (await loadSqlLifecycle()).probeSyncTarget(db);\n } finally {\n await closeQuietly(db);\n }\n if (probe !== 'empty') {\n throw new Error(`[wod db create] freshly provisioned \"${dbName}\" probed as ${JSON.stringify(probe)}, expected empty — refusing to pair`);\n }\n const pairing = {\n wodWikiPairing: 1 as const, kind: 'turso' as const, url, authToken: token,\n database: dbName, schemaVersion: DB_VERSION, createdAt: now.toISOString(),\n };\n try {\n writePairingFile(output, pairing, { force: args.force });\n if (args.writeEnv) appendTursoEnv(envPath(args), { url, authToken: token }, now);\n } catch (error) {\n io.stderr(\n `[wod db create] pairing/config write failed (${error instanceof Error ? error.message : String(error)}) — ` +\n `the database \"${dbName}\" was created and was NOT deleted; recover with \\`wod db pair ${dbName} --allow-empty -o <file>\\`. No settings were changed.`,\n );\n throw error;\n }\n io.stdout(`[wod db create] provisioned ${dbName} (${created.hostname}, group ${group}) — empty target ready for the browser's first bootstrap`);\n io.stdout(`[wod db create] pairing file: ${output}${args.writeEnv ? `; wrote ${envPath(args)}` : ''}`);\n}\n\nfunction envPath(args: DbCommandArgs): string {\n return args.envFile ?? '.env';\n}\n\ninterface CopyOutcome {\n info: DatabaseInfo;\n fingerprint: DatabaseFingerprint;\n}\n\nasync function copyNative(\n kind: 'backup' | 'restore',\n mgmt: TursoManagement,\n args: DbCommandArgs,\n deps: DbAdminDeps,\n io: DbAdminIo,\n now: Date,\n): Promise<CopyOutcome> {\n const source = requireSource(args.name, kind);\n requireWritersRetired(kind, source, args.writersRetired);\n requireOutput(kind, args.output);\n const info = await mgmt.getDatabase(source);\n if (!info) throw new Error(`[wod db ${kind}] database not found: ${source}`);\n const copyName = args.dbName ?? `${sanitizeDbName(source)}-${kind}-${stamp(now)}`;\n assertDbName(copyName, 'copy name');\n if (copyName === source) {\n throw new Error(`[wod db ${kind}] the copy must be a NEW database — \"${copyName}\" is the source itself`);\n }\n if (await mgmt.getDatabase(copyName)) {\n throw new Error(`[wod db ${kind}] target \"${copyName}\" already exists — choose --name`);\n }\n\n const sql = await loadSqlLifecycle();\n const group = requireSourceGroup(kind, info, args);\n // Read-only, short-lived source credential: the copy path cannot mutate\n // the source even if the rest of the flow went wrong. The connection stays\n // open until after verification — the CAS re-reads it.\n const sourceToken = await mgmt.createToken(source, 'read-only', '1h');\n const sourceDb = await openLibsql(targetUrl(info.hostname), sourceToken, deps);\n try {\n const before = await sql.databaseFingerprint(sourceDb);\n\n const copy = await mgmt.createDatabase({\n name: copyName, group, seed: { type: 'database', name: source },\n });\n if (deps.midCopyHook) await deps.midCopyHook(copyName);\n\n const copyToken = await mgmt.createToken(copyName, 'read-only', '1h');\n const copyDb = await openLibsql(targetUrl(copy.hostname), copyToken, deps);\n let after: DatabaseFingerprint;\n try {\n after = await sql.assertDatabaseCopyMatches(sourceDb, copyDb, before);\n } finally {\n await closeQuietly(copyDb);\n }\n return finishCopy(kind, mgmt, args, io, now, copy, after);\n } finally {\n await closeQuietly(sourceDb);\n }\n}\n\n/** Backups stay read-only; only current-schema restore copies are writable. */\nasync function finishCopy(\n kind: 'backup' | 'restore',\n mgmt: TursoManagement,\n args: DbCommandArgs,\n io: DbAdminIo,\n now: Date,\n copy: DatabaseInfo,\n after: DatabaseFingerprint,\n): Promise<CopyOutcome> {\n io.stdout(\n `[wod db ${kind}] native copy \"${copy.name}\" verified: ${after.tables} tables, ${after.rows} rows, ` +\n `digest ${after.digest.slice(0, 8)} — source retained unchanged`,\n );\n if (kind === 'backup' || after.sync === undefined || after.sync.schema !== DB_VERSION) {\n const schemaLabel = after.sync === undefined ? '(legacy, no sync state)' : `v${after.sync.schema}`;\n io.stdout(\n `[wod db ${kind}] copy is schema ${schemaLabel} — retained as a read-only archive, NOT pairable for sync. ` +\n `Use \\`wod db restore ${copy.name}\\` for a writable current-schema copy or \\`wod db migrate ${copy.name}\\` to convert an older schema.`,\n );\n if (args.output && args.output !== '-') {\n const roToken = await mgmt.createToken(copy.name, 'read-only', 'never');\n writePairingFile(args.output, {\n wodWikiPairing: 1, kind: 'turso', url: targetUrl(copy.hostname), authToken: roToken,\n database: copy.name, schemaVersion: after.sync === undefined ? 0 : after.sync.schema,\n createdAt: now.toISOString(),\n }, { force: args.force });\n io.stdout(`[wod db ${kind}] read-only archive pairing file: ${args.output}`);\n }\n return { info: copy, fingerprint: after };\n }\n try {\n await pairTarget(mgmt, args, io, now, copy.name, copy.hostname, after.sync.schema);\n } catch (error) {\n io.stderr(\n `[wod db ${kind}] pairing/config write failed (${error instanceof Error ? error.message : String(error)}) — ` +\n `the verified copy \"${copy.name}\" was NOT deleted; recover with \\`wod db pair ${copy.name} -o <file>\\`. No settings were changed.`,\n );\n throw error;\n }\n return { info: copy, fingerprint: after };\n}\n\nasync function runMigrate(\n mgmt: TursoManagement,\n args: DbCommandArgs,\n deps: DbAdminDeps,\n io: DbAdminIo,\n now: Date,\n): Promise<void> {\n const source = requireSource(args.name, 'migrate');\n requireWritersRetired('migrate', source, args.writersRetired);\n const output = requireOutput('migrate', args.output);\n const info = await mgmt.getDatabase(source);\n if (!info) throw new Error(`[wod db migrate] database not found: ${source}`);\n\n const sql = await loadSqlLifecycle();\n const sourceToken = await mgmt.createToken(source, 'read-only', '1h');\n const sourceDb = await openLibsql(targetUrl(info.hostname), sourceToken, deps);\n let before: DatabaseFingerprint;\n let entries: SyncEntry[];\n try {\n before = await sql.databaseFingerprint(sourceDb);\n const classified = classifySource(await sql.probeSyncTarget(sourceDb), source);\n const mutations = await convertSource(sourceDb, classified.fromVersion, classified.legacy);\n if (mutations.length === 0) {\n throw new Error('[wod db migrate] conversion produced no rows — refusing to create an empty target');\n }\n entries = snapshotEntries(mutations, `m${classified.fromVersion}-${before.digest.slice(0, 8)}`, now.getTime());\n // Shared policy gate: puts-only + pin closure (packages/storage sql/backup).\n sql.assertPolicySnapshot(entries.flatMap((entry) => entry.ops));\n } finally {\n await closeQuietly(sourceDb);\n }\n\n const targetName = args.dbName ?? `${sanitizeDbName(source)}-v${DB_VERSION}`;\n assertDbName(targetName, 'target name');\n if (targetName === source) {\n throw new Error('[wod db migrate] the target must be a NEW database — retention keeps the source at its own name');\n }\n if (await mgmt.getDatabase(targetName)) {\n throw new Error(`[wod db migrate] target \"${targetName}\" already exists — choose --name (a fresh, exclusively reserved target is required)`);\n }\n\n const created = await mgmt.createDatabase({ name: targetName, group: requireSourceGroup('migrate', info, args) });\n let token: string;\n let committed: number;\n try {\n token = await mgmt.createToken(targetName, 'full-access', 'never');\n const target = await openLibsql(targetUrl(created.hostname), token, deps);\n try {\n // Empty-target reservation: only 'empty' may be claimed, and the\n // constructing marker (schema 0) keeps it unpairable until finalize.\n const probe = await sql.probeSyncTarget(target);\n if (probe !== 'empty') throw new Error(`[wod db migrate] target \"${targetName}\" is not empty (${JSON.stringify(probe)}) — refusing`);\n await sql.initSyncTarget(target, 0);\n committed = await sql.applySyncBatch(target, entries, { expectSchema: 0 });\n await assertReplayMatches(sql, target, entries);\n // Source CAS: everything above read one frozen snapshot.\n const sourceDbRecheck = await openLibsql(targetUrl(info.hostname), sourceToken, deps);\n try {\n await sql.assertDatabaseCopyMatches(sourceDbRecheck, sourceDbRecheck, before);\n } finally {\n await closeQuietly(sourceDbRecheck);\n }\n await sql.finalizeMigrationTarget(target, DB_VERSION, committed);\n } finally {\n await closeQuietly(target);\n }\n } catch (error) {\n // Only failures BEFORE finalize leave the target at the schema-0 marker.\n io.stderr(\n `[wod db migrate] target \"${targetName}\" was left INCOMPLETE and is not pairable (constructing marker). ` +\n `Inspect or remove it: \\`wod db delete ${targetName} --yes ${targetName}\\`. The source \"${source}\" was not modified.`,\n );\n throw error;\n }\n // Finalized: the target is complete at the current schema. A config write\n // failure must NOT delete it or switch any settings — recovery is explicit.\n try {\n writePairingFile(output, {\n wodWikiPairing: 1, kind: 'turso', url: targetUrl(created.hostname), authToken: token,\n database: targetName, schemaVersion: DB_VERSION, createdAt: now.toISOString(),\n }, { force: args.force });\n if (args.writeEnv) appendTursoEnv(envPath(args), { url: targetUrl(created.hostname), authToken: token }, now);\n } catch (error) {\n io.stderr(\n `[wod db migrate] pairing/config write failed (${error instanceof Error ? error.message : String(error)}) — ` +\n `the target \"${targetName}\" is complete at v${DB_VERSION} and was NOT deleted; recover with \\`wod db pair ${targetName} -o <file>\\`. No settings were changed.`,\n );\n throw error;\n }\n io.stdout(\n `[wod db migrate] ${source} (schema ${before.sync ? `v${before.sync.schema}` : 'legacy'}) → ${targetName} at v${DB_VERSION}: ` +\n `${entries.length} groups / ${committed} committed, replay + pins + source CAS verified — source retained`,\n );\n io.stdout(`[wod db migrate] pairing file: ${output}${args.writeEnv ? `; wrote ${envPath(args)}` : ''}`);\n}\n\nasync function runDelete(args: DbCommandArgs, io: DbAdminIo, deps: DbAdminDeps): Promise<void> {\n const name = requireSource(args.name, 'delete');\n if (!args.yes) {\n throw new Error(`[wod db delete] deletion requires exact confirmation: wod db delete ${name} --yes ${name}`);\n }\n if (args.yes !== name) {\n throw new Error(`[wod db delete] confirmation mismatch: --yes \"${args.yes}\" does not exactly match \"${name}\" — nothing was deleted`);\n }\n await TursoManagement.fromEnv(args.env, { fetchFn: deps.fetchFn }).deleteDatabase(name);\n io.stdout(`[wod db delete] deleted ${name}`);\n}\n\nasync function pairTarget(\n mgmt: TursoManagement,\n args: DbCommandArgs,\n io: DbAdminIo,\n now: Date,\n dbName: string,\n hostname: string,\n schemaVersion: number,\n): Promise<void> {\n const output = requireOutput('pair', args.output);\n const token = await mgmt.createToken(dbName, 'full-access', 'never');\n const url = targetUrl(hostname);\n writePairingFile(output, {\n wodWikiPairing: 1, kind: 'turso', url, authToken: token,\n database: dbName, schemaVersion, createdAt: now.toISOString(),\n }, { force: args.force });\n if (args.writeEnv) appendTursoEnv(envPath(args), { url, authToken: token }, now);\n io.stdout(`[wod db pair] ${dbName} (${hostname}) at schema v${schemaVersion} — pairing file: ${output}${args.writeEnv ? `; wrote ${envPath(args)}` : ''}`);\n}\n\nasync function runPair(mgmt: TursoManagement, args: DbCommandArgs, deps: DbAdminDeps, io: DbAdminIo, now: Date): Promise<void> {\n const name = requireSource(args.name, 'pair');\n const info = await mgmt.getDatabase(name);\n if (!info) throw new Error(`[wod db pair] database not found: ${name}`);\n const sql = await loadSqlLifecycle();\n // Probe with a short-lived read-only token BEFORE minting the client token.\n const probeToken = await mgmt.createToken(name, 'read-only', '1h');\n const db = await openLibsql(targetUrl(info.hostname), probeToken, deps);\n let probe: SyncTargetKind;\n try {\n await db.query('SELECT 1');\n probe = await sql.probeSyncTarget(db);\n // Full-replay policy validation for current targets: every op row is\n // re-validated at the boundary and the pin closure must hold before a\n // browser credential is issued.\n if (probe !== 'empty' && probe.kind === 'current') {\n const ops: StoredSyncOp[] = [];\n let cursor = 0;\n for (;;) {\n const window = await sql.fetchSyncOps(db, cursor, 10_000);\n if (window.length === 0) break;\n ops.push(...window);\n cursor = window[window.length - 1].rev;\n }\n // Live-state pin closure — the log may legitimately hold delete/clear\n // tombstones; only live sessions/notes need live immutable revisions.\n sql.assertLogPinClosure(ops);\n }\n } finally {\n await closeQuietly(db);\n }\n if (probe === 'empty') {\n if (!args.allowEmpty) {\n throw new Error(`[wod db pair] ${name} is empty — it is only pairable for a deliberate first bootstrap (--allow-empty), after \\`wod db create\\`, or once a browser initialized it`);\n }\n await pairTarget(mgmt, args, io, now, name, info.hostname, DB_VERSION);\n return;\n }\n if (probe.kind === 'unknown') {\n throw new Error(`[wod db pair] ${name} holds foreign data — refusing to pair`);\n }\n if (probe.kind === 'legacy') {\n throw new Error(`[wod db pair] ${name} is a legacy direct-Turso database (v${probe.schemaVersion}) — run \\`wod db migrate ${name}\\` first`);\n }\n if (probe.schemaVersion === 0) {\n throw new Error(`[wod db pair] ${name} is an incomplete migration target (constructing marker) — it was never validated and stays unpairable`);\n }\n if (probe.schemaVersion !== DB_VERSION) {\n throw new Error(`[wod db pair] ${name} is schema v${probe.schemaVersion}, this CLI manages v${DB_VERSION} — run \\`wod db migrate ${name}\\` first`);\n }\n await pairTarget(mgmt, args, io, now, name, info.hostname, probe.schemaVersion);\n}\n\nfunction sanitizeDbName(raw: string): string {\n const cleaned = raw.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n return cleaned === '' ? 'wod-wiki' : cleaned.slice(0, 64).replace(/-+$/, '');\n}\n\nfunction stamp(now: Date): string {\n return now.toISOString().replace(/[-:]/g, '').replace(/\\.\\d+Z$/, 'Z').toLowerCase();\n}\n\n// ---------------------------------------------------------------------------\n// Dispatch\n// ---------------------------------------------------------------------------\n\n/** `wod db <action>` entry — called from the runner with resolved args.\n * Usage errors surface before credentials are required; `delete` validates\n * its exact-name confirmation before reading the management env. */\nexport async function runDbCommand(args: DbCommandArgs, io: DbAdminIo, deps: DbAdminDeps = {}): Promise<void> {\n const now = (deps.now ?? (() => new Date()))();\n const mgmt = (): TursoManagement => TursoManagement.fromEnv(args.env, { fetchFn: deps.fetchFn });\n switch (args.action) {\n case 'create':\n return runCreate(mgmt(), args, deps, io, now);\n case 'backup':\n case 'restore':\n await copyNative(args.action, mgmt(), args, deps, io, now);\n return;\n case 'migrate':\n return runMigrate(mgmt(), args, deps, io, now);\n case 'delete':\n return runDelete(args, io, deps);\n case 'pair':\n return runPair(mgmt(), args, deps, io, now);\n default:\n throw new Error(\n `[wod db] unknown action \"${args.action ?? ''}\" — usage: wod db <create|backup|restore|migrate|delete|pair> [name] [options]`,\n );\n }\n}\n","import type {\n BlockEffort,\n BlockEquipment,\n BlockIndexRow,\n BlockRevision,\n IStorageTransaction,\n Note,\n NoteBlock,\n NoteTag,\n Session,\n Tag,\n} from '@bitcobblers/wod-wiki-storage';\nimport { rowsEqual as sameRow } from '@bitcobblers/wod-wiki-storage';\nimport type { ExecutionLog } from '@bitcobblers/wod-wiki-engine';\nimport { extractNoteIdentity, extractTypedTags } from '@bitcobblers/wod-wiki-engine';\nimport { MetricType, type EventRecord } 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, extractStatementRefs, createReferenceIndex, bundledEfforts, parseEffortFile, parseEquipmentFile, type IEffort, type IEquipment } from '@bitcobblers/wod-wiki-lang';\nimport { toEventRows, toSummaryEventRows } from '@bitcobblers/wod-wiki-wql';\nimport { 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', 'block_equipment', 'efforts', 'equipment', 'tags', 'note_tags', 'sessions'] as const;\n\nexport interface PersistNoteOptions {\n source: string;\n sourceLabel: string;\n noteId?: string;\n title?: string;\n tags?: Array<{ label: string; type?: string }>;\n /** Exact current-source lineage, supplied only by a caller that owns the edits. */\n blocks?: Record<string, NoteBlock>;\n expectedSourceRevision?: number;\n now?: number;\n}\n\nexport interface PersistNoteResult {\n noteId: string;\n note: Note;\n blocks: number;\n efforts: number;\n tags: number;\n created: boolean;\n}\n\nfunction titleFromLabel(sourceLabel: string): string {\n if (!sourceLabel || sourceLabel === '-') return 'stdin';\n const stem = sourceLabel.split('/').pop() ?? sourceLabel;\n return stem.replace(/\\.[^.]+$/, '') || sourceLabel;\n}\n\n\nasync function saveSource(\n db: CliDb,\n options: PersistNoteOptions,\n startTime?: number,\n): Promise<PersistNoteResult & { session?: Session; revision?: BlockRevision }> {\n const noteId = options.noteId ?? stableNoteId(options.sourceLabel, options.source);\n const observed = await db.storage.readonly('notes').get(noteId);\n const expected = options.expectedSourceRevision ?? observed?.sourceRevision ?? 0;\n const now = options.now ?? Date.now();\n return db.storage.transaction([...saveStores], 'readwrite', async (tx) => {\n const existing = await tx.readonly('notes').get(noteId);\n if ((existing?.sourceRevision ?? 0) !== expected) {\n throw new Error(`Stale Note source revision for ${noteId}; expected ${expected}`);\n }\n let sourceRevision = existing?.rawContent === options.source\n ? existing.sourceRevision\n : (existing?.sourceRevision ?? 0) + 1;\n const history = await tx.readonly('block_revisions').getAllFromIndex('by-note', noteId);\n const latest = new Map<string, BlockRevision>();\n for (const row of history) {\n if ((latest.get(row.blockId)?.version ?? 0) < row.version) latest.set(row.blockId, row);\n }\n // ponytail: deterministic block UUIDs by noteId + ordinal; add explicit block IDs in markdown frontmatter when user-authored block identity is supported.\n let ordinal = 0;\n const blocks = reconcileNoteBlocks(options.source, {\n sourceRevision,\n blocks: options.blocks ?? (existing?.rawContent === options.source ? existing.blocks : undefined),\n registeredWidgets,\n createId: () => {\n while (true) {\n const candidate = uuid5(CLI_UUID_NAMESPACE, `${noteId}:block:${ordinal++}`);\n if (!latest.has(candidate)) return candidate;\n }\n },\n });\n validateNoteBlocks(options.source, blocks, sourceRevision, { registeredWidgets });\n const revisions: BlockRevision[] = [];\n for (const block of Object.values(blocks)) {\n const saved = latest.get(block.id);\n const rawContent = options.source.slice(block.from, block.to);\n const unchanged = saved && saved.rawContent === rawContent && saved.kind === block.kind &&\n saved.dialect === block.dialect && saved.sport === block.sport;\n block.version = unchanged ? saved.version : (saved?.version ?? 0) + 1;\n if (!unchanged) revisions.push({\n noteId, blockId: block.id, version: block.version, kind: block.kind,\n rawContent, savedAt: now,\n ...(block.dialect ? { dialect: block.dialect } : {}),\n ...(block.sport ? { sport: block.sport } : {}),\n });\n }\n if (existing?.rawContent === options.source && !sameRow(existing.blocks, blocks)) {\n sourceRevision++;\n for (const block of Object.values(blocks)) block.sourceRevision = sourceRevision;\n }\n const 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 priorEquipment = await tx.readonly('block_equipment').getAllFromIndex('by-note', noteId);\n // One shared resolver pass per save: canonical refs from the stored\n // definition catalog, exactly like the app rebuild and the seed build.\n const storedEfforts = (await tx.readonly('efforts').getAll()) as IEffort[];\n const effortsBySlug = new Map<string, IEffort>();\n for (const effort of bundledEfforts) effortsBySlug.set(effort.slug, effort);\n for (const effort of storedEfforts) effortsBySlug.set(effort.slug, effort);\n const referenceIndex = createReferenceIndex({\n efforts: [...effortsBySlug.values()],\n equipment: (await tx.readonly('equipment').getAll()) as IEquipment[],\n });\n const priorById = new Map(priorRows.map((row) => [row.id, row]));\n const nextRows: BlockIndexRow[] = [];\n const nextEfforts: BlockEffort[] = [];\n const nextEquipment: BlockEquipment[] = [];\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 const statements = parseScript(body, { sport: block.sport, dialect: block.dialect, references: referenceIndex }).statements;\n const refs = extractStatementRefs(statements);\n const effortSlugs = new Set(refs.efforts);\n if (effortSlugs.size === 0) {\n for (const s of statements) {\n const m = s.metrics?.getMetric?.(MetricType.Effort);\n const val = typeof m?.value === 'string' ? m.value : (m && 'effort' in m ? String((m as { effort?: unknown }).effort) : '');\n const slug = val.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');\n if (slug && !['rest', 'amrap', 'emom', 'tabata', 'for-time'].includes(slug)) {\n effortSlugs.add(slug);\n }\n }\n }\n for (const effortSlug of effortSlugs) {\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 for (const equipmentSlug of refs.equipment) {\n const equipmentId = `${noteId}:${block.id}:${equipmentSlug}`;\n const previous = priorEquipment.find((row) => row.id === equipmentId);\n nextEquipment.push({\n ...previous, id: equipmentId, noteId, blockId: block.id,\n blockContentId: fingerprint, equipmentSlug, 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 await diffProjection(tx, 'block_equipment', priorEquipment, nextEquipment);\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' | 'block_equipment',\n previous: Array<BlockIndexRow | BlockEffort | BlockEquipment>,\n next: Array<BlockIndexRow | BlockEffort | BlockEquipment>,\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 if (store === 'block_equipment' && 'equipmentSlug' in row) await tx.readwrite('block_equipment').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\n/** Definition import result — the note identity the document landed on. */\nexport interface PersistDefinitionResult {\n slug: string;\n noteId: string;\n /** True when no note existed at the resolved identity before this import. */\n createdNote: boolean;\n}\n\n/**\n * Import an effort/equipment definition document (canonical markdown):\n * the NOTE is the storage form, the registry row its projection. ONE\n * storage transaction commits both, so a definition is never half-imported\n * (note without projection or the reverse). Identity: a stamped\n * `wod-note-id` wins, then the prior projection's owning note, then the\n * deterministic `effort/<slug>` / `equipment/<slug>` home — so\n * `wod export` → `wod import` round-trips to the same note.\n */\nexport async function persistDefinitionNote(db: CliDb, kind: 'effort' | 'equipment', source: string): Promise<PersistDefinitionResult> {\n const parsed = kind === 'effort' ? parseEffortFile(source) : parseEquipmentFile(source);\n if (!parsed) {\n throw new Error(kind === 'effort'\n ? '[wod import] Unparseable effort file (need frontmatter id/slug/label + numeric baseAttributes.met)'\n : '[wod import] Unparseable equipment file (need frontmatter type: equipment + id/slug/label)');\n }\n const family = kind === 'effort' ? 'efforts' : 'equipment';\n const prior = (await db.storage.readonly(family).get(parsed.slug)) as\n | { ownerNoteId?: string; registrySource?: 'bundled' | 'user'; createdAt?: string }\n | undefined;\n const stamped = extractNoteIdentity(source)?.noteId;\n const noteId = stamped ?? prior?.ownerNoteId ?? `${kind}/${parsed.slug}`;\n const now = Date.now();\n return db.storage.transaction(['notes', family, 'tags', 'note_tags'], 'readwrite', async (tx) => {\n const previous = (await tx.readonly('notes').get(noteId)) as Note | undefined;\n const sourceRevision = (previous?.sourceRevision ?? 0) + (previous?.rawContent === source ? 0 : 1);\n const blocks = reconcileNoteBlocks(source, { sourceRevision, registeredWidgets, blocks: previous?.blocks });\n validateNoteBlocks(source, blocks, sourceRevision, { registeredWidgets });\n const note: Note = {\n ...previous,\n id: noteId,\n title: parsed.label,\n type: previous?.type ?? 'note',\n createdAt: previous?.createdAt ?? now,\n rawContent: source,\n sourceRevision,\n blocks,\n sourceId: family,\n sourcePath: noteId,\n };\n await tx.readwrite('notes').put(note);\n // ponytail: definitions carry no fenced blocks, so no block_revisions /\n // block_index rows are written here; add when definition docs grow\n // script blocks.\n const isoNow = new Date(now).toISOString();\n await tx.readwrite(family).put({\n ...parsed,\n registrySource: prior?.registrySource ?? 'user',\n ownerNoteId: noteId,\n sourceId: family,\n sourcePath: noteId,\n createdAt: prior?.createdAt ?? isoNow,\n updatedAt: isoNow,\n });\n // Materialize the definition's tag frontmatter through the same path as\n // note import, so typed tags are searchable/autocomplete-resolvable via\n // the tag graph — not just stored verbatim in the note.\n await saveTags(tx, noteId, extractTypedTags(source), now);\n return { slug: parsed.slug, noteId, createdNote: !previous };\n });\n}\n\nexport async function persistTypedTags(db: CliDb, labels: readonly string[], type: string): Promise<number> {\n return db.storage.transaction(['tags'], 'readwrite', async (tx) => {\n let added = 0;\n for (const raw of labels) {\n const label = raw.trim();\n if (!label) continue;\n const tag = (await tx.readonly('tags').getAllFromIndex('by-label', label))[0];\n if (!tag) {\n await tx.readwrite('tags').put({ id: uuid5(CLI_UUID_NAMESPACE, `tag:${label}`), label, type, createdAt: Date.now() });\n added++;\n } else if (!tag.type) {\n await tx.readwrite('tags').put({ ...tag, type });\n }\n }\n return added;\n });\n}\n","import { nodeFs, nodePath, type CliDb } from './db';\nimport {\n applySeedChunk,\n seedNoteId,\n type SeedChunkResult,\n assertSeedManifest,\n assertSeedRows,\n CANVAS_CHUNK_ID,\n SEED_SCHEMA,\n emptySeedMeta,\n seedMetaKey,\n type SeedMetaRecord,\n} from '@bitcobblers/wod-wiki-engine';\n\nexport { seedNoteId };\nexport interface FeedSourceSummary {\n sourceId: string;\n version: number;\n notes: number;\n efforts: number;\n equipment: 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<FeedSourceSummary> {\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 const stored = await db.storage.readonly('meta').get(key) as SeedMetaRecord | undefined;\n // Schema cutover: a checkpoint from another SEED_SCHEMA owns nothing —\n // reset and re-import (seed rows are reclaimed by exact note id; user\n // rows untouched). Data is retained, never deleted.\n let expected = stored?.schema === SEED_SCHEMA ? stored : undefined;\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: FeedSourceSummary = { sourceId: source, version: manifest.version, notes: 0, efforts: 0, equipment: 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.equipment += result.totalEquipment; summary.blocks += result.totalBlocks; summary.deleted += result.deleted; summary.skippedUserOwned += result.skippedUserOwned;\n };\n for (const chunk of plan) {\n const rows = assertSeedRows(JSON.parse(fs.readFileSync(path.resolve(dir, chunk.path), 'utf-8')));\n if (rows.length !== chunk.count) throw new Error('Seed chunk count mismatch');\n const next = { ...meta, chunks: { ...meta.chunks, [chunk.id]: { sha256: chunk.sha256, noteIds: await Promise.all(rows.map((r) => seedNoteId(r.path))) } }, importedAt: Date.now() };\n accumulate(await applySeedChunk(db.storage, { chunkId: chunk.id, rows, manifest, expectedMeta: expected, meta: next }));\n summary.blockEfforts += rows.reduce((count, row) => count + row.blockEfforts.length, 0);\n meta = next; expected = next;\n }\n for (const chunkId of Object.keys(meta.chunks)) {\n if (manifest.chunks.some((c) => c.id === chunkId)) continue;\n const chunks = { ...meta.chunks };\n delete chunks[chunkId];\n const next = { ...meta, chunks, importedAt: Date.now() };\n accumulate(await applySeedChunk(db.storage, { chunkId, rows: [], manifest, expectedMeta: expected, meta: next }));\n meta = next; expected = next;\n }\n if (plan.length || metadataChanged || Object.keys(meta.chunks).length !== Object.keys(expected?.chunks ?? {}).length) {\n const next = { ...meta, schema: SEED_SCHEMA, seedVersion: manifest.version, builtAt: manifest.builtAt, importedAt: Date.now() };\n await applySeedChunk(db.storage, { chunkId: null, rows: [], manifest, expectedMeta: expected, meta: next });\n }\n return summary;\n}\nexport function defaultSeedDirs(cwd: string): string[] {\n const base = nodePath().resolve(cwd, 'apps', 'playground', 'public', 'seed');\n return ['core', 'community'].map((id) => nodePath().resolve(base, id)).filter((dir) => nodeFs().existsSync(nodePath().resolve(dir, 'manifest.json')));\n}\n","import {\n publishFeedFromStorage,\n type SeedManifest,\n} from '@bitcobblers/wod-wiki-engine';\nimport { nodePath, type CliDb } from './db';\nimport { NodeFsFeedTree } from './nodeFeedTree';\nimport { writeBuildReport } from '../seedbuild/report';\n\nexport interface PublishNotebookOptions {\n notebook?: string;\n outDir: string;\n version?: number;\n name?: string;\n description?: string;\n repositoryUrl?: string;\n}\n\nexport interface PublishNotebookResult {\n manifest: SeedManifest;\n outDir: string;\n notebooks: string[];\n totalNotes: number;\n totalPublicSessions: number;\n}\n\n/**\n * Publishes notebook data from the CLI database into a complete seed feed directory:\n * manifest.json, per-notebook indexes, content-hashed chunk files, compiled records,\n * authored .md + companion .jsonl (for public sessions), index.html landing page,\n * and report.html.\n */\nexport async function publishNotebookSeed(\n db: CliDb,\n options: PublishNotebookOptions,\n): Promise<PublishNotebookResult> {\n const t0 = Date.now();\n const allNotes = await db.storage.readonly('notes').getAll();\n if (allNotes.length === 0) {\n throw new Error(`[wod publish] No notes found in database ${db.path}`);\n }\n\n const outDir = nodePath().resolve(process.cwd(), options.outDir);\n const tree = new NodeFsFeedTree(outDir);\n\n const report = await publishFeedFromStorage(db.storage, tree, {\n layout: 'feed',\n notebookSlug: options.notebook,\n version: options.version,\n name: options.name,\n description: options.description,\n repositoryUrl: options.repositoryUrl,\n includePrivateWhenFiltered: true,\n });\n\n const elapsed = Math.max(1, Date.now() - t0);\n writeBuildReport(outDir, {\n manifest: report.manifest,\n totalMs: elapsed,\n passMs: { scan: 0, blockIndex: 0, parseGate: 0, blockEfforts: 0, write: elapsed },\n fileCount: report.totalNotes,\n outDir,\n });\n\n return {\n manifest: report.manifest,\n outDir,\n notebooks: report.notebooks,\n totalNotes: report.totalNotes,\n totalPublicSessions: report.totalPublicSessions,\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 nodeFs,\n nodePath,\n sqliteEventStore,\n sqliteNoteStore,\n sqliteBlockStore,\n sqliteEffortStore,\n sqliteIndexStore,\n getNoteBundle,\n getSessionBundle,\n getEffortBySlug,\n getEquipmentBySlug,\n listTagsByType,\n} from './db';\nimport { loadCliEnvironment, resolveDatabaseConfig, type CliDatabaseConfig } from './config';\nimport { runDbCommand, type DbAdminDeps } from './dbAdmin';\n// Type-only: erased at build time, keeps the Bun-only server module out of the\n// browser/Node import graph (runCliServer itself is lazily imported).\nimport type { CliServerOptions } from './server';\nimport { persistNote, startRun, persistRun, persistSessionBundle, persistDefinitionNote, persistTypedTags } from './persist';\nimport { defaultSeedDirs, importSeedDir } from './seed';\nimport { publishNotebookSeed } from './publish';\nimport {\n composeNoteMarkdown,\n csvToEquipmentLabels,\n csvToSessionRows,\n effortToMarkdown,\n equipmentToMarkdown,\n equipmentToCsv,\n extractNoteIdentity,\n extractTypedTags,\n ingestPortableFilesIntoStorage,\n serializeNoteBundleToJsonl,\n sessionToCsv,\n} from '@bitcobblers/wod-wiki-engine';\nimport {\n formatParseOutput,\n formatExecutionOutput,\n formatQueryOutput,\n type OutputFormat,\n} from './formatters';\n\nimport { parseDocumentSections } from '@bitcobblers/wod-wiki-core';\nimport type { ExecutionLog, WodWikiIRFile } from '@bitcobblers/wod-wiki-engine';\nimport { VERSION } from '../version';\n\n/** Bare CLI scripts become authored Markdown at the persistence boundary. */\nexport function cliNoteSource(source: string, label: string, sport?: string): string {\n if (/\\.(?:md|markdown)$/i.test(label) || parseDocumentSections(source).some((section) => section.scriptBlock)) return source;\n let length = 3;\n for (const match of source.matchAll(/`+/g)) length = Math.max(length, match[0].length + 1);\n const fence = '`'.repeat(length);\n return `${fence}time${sport ? `:${sport}` : ''}\\n${source}\\n${fence}\\n`;\n}\n\nexport interface CliParsedArgs {\n subcommand?: 'parse' | 'run' | 'query' | 'download' | 'export' | 'import' | 'publish' | 'build' | 'seed' | 'reset' | 'init' | 'db' | 'server' | 'serve' | 'playground' | 'init-feed' | 'skills' | 'help' | 'version';\n target?: string;\n /** Second positional: the id (download) or file (import) after the kind. */\n target2?: string;\n corpus?: string;\n stdinLog?: boolean;\n stdinFacts?: boolean;\n format: OutputFormat;\n output?: string;\n packs: string[];\n sport?: string;\n unit?: string;\n help?: boolean;\n version?: boolean;\n /** Explicit version number for published seed manifests (--seed-version). */\n seedVersion?: number;\n /** SQLite database path (--db). Defaults to WOD_WIKI_DB or ./wodwiki.db. */\n db?: string;\n /** Backend driver override (--db-driver): sqlite | postgres | turso. */\n dbDriver?: string;\n /** `wod db`: action (create|backup|restore|migrate|delete|pair) is the\n * first positional (parsed.target) and the database name the second. */\n group?: string;\n dbName?: string;\n yes?: string;\n writersRetired?: boolean;\n allowEmpty?: boolean;\n writeEnv?: boolean;\n force?: boolean;\n /** PostgreSQL connection URL (--database-url) or component flags below. */\n databaseUrl?: string;\n postgresHost?: string;\n postgresPort?: string;\n postgresUser?: string;\n postgresPassword?: string;\n postgresDatabase?: string;\n postgresSsl?: string;\n /** Turso/libSQL target (--turso-url) plus its auth token. */\n tursoUrl?: string;\n tursoAuthToken?: string;\n /** Explicit environment file (--env-file); a missing file is an error. */\n envFile?: string;\n /** Hosting bind address/port and prebuilt frontend directory (server/playground). */\n host?: string;\n port?: string;\n dist?: string;\n /** IR debug output: undefined = off, '' = default file name, otherwise the file name. */\n debug?: string;\n /** Extra seed source directories for `wod seed` (repeatable). */\n sources: string[];\n /** `wod build`: scaffold markdown stubs for newly discovered efforts. */\n scaffold?: boolean;\n /** `wod build`: content repo root (alias for the positional directory). */\n dir?: string;\n}\n\n/**\n * Property flags that take a value in both `--flag value` and `--flag=value`\n * forms. Missing, empty, or flag-like (`--…`) values are parse errors.\n */\n/** The CliParsedArgs properties settable through VALUE_FLAGS — all `string | undefined`. */\ntype CliValueFlagArgs = Pick<\n CliParsedArgs,\n | 'db'\n | 'dbDriver'\n | 'group'\n | 'dbName'\n | 'yes'\n | 'databaseUrl'\n | 'postgresHost'\n | 'postgresPort'\n | 'postgresUser'\n | 'postgresPassword'\n | 'postgresDatabase'\n | 'postgresSsl'\n | 'tursoUrl'\n | 'tursoAuthToken'\n | 'envFile'\n | 'host'\n | 'port'\n | 'dist'\n>;\n\nconst VALUE_FLAGS: ReadonlyArray<readonly [flag: string, key: keyof CliValueFlagArgs]> = [\n ['--db', 'db'],\n ['--db-driver', 'dbDriver'],\n ['--group', 'group'],\n ['--name', 'dbName'],\n ['--yes', 'yes'],\n ['--database-url', 'databaseUrl'],\n ['--postgres-host', 'postgresHost'],\n ['--postgres-port', 'postgresPort'],\n ['--postgres-user', 'postgresUser'],\n ['--postgres-password', 'postgresPassword'],\n ['--postgres-database', 'postgresDatabase'],\n ['--postgres-ssl', 'postgresSsl'],\n ['--turso-url', 'tursoUrl'],\n ['--turso-auth-token', 'tursoAuthToken'],\n ['--env-file', 'envFile'],\n ['--host', 'host'],\n ['--port', 'port'],\n ['--dist', 'dist'],\n];\n\nfunction readValueFlag(args: string[], i: number, flag: string): { value: string; next: number } {\n const inline = args[i].startsWith(`${flag}=`);\n if (inline) {\n const value = args[i].slice(flag.length + 1);\n if (!value) throw new Error(`Missing value for ${flag}`);\n return { value, next: i + 1 };\n }\n const value = args[i + 1];\n if (value === undefined || value === '' || value.startsWith('--')) throw new Error(`Missing value for ${flag}`);\n return { value, next: i + 2 };\n}\n\nexport function parseCliArgs(args: string[]): CliParsedArgs {\n const result: CliParsedArgs = {\n format: 'json',\n packs: [],\n sources: [],\n };\n const valueArgs: CliValueFlagArgs = result;\n\n let i = 0;\n while (i < args.length) {\n const arg = args[i];\n if (arg === '--at' || arg.startsWith('--at=')) throw new Error('Unknown option --at; whole Note exports have no as-of version');\n\n const valueFlag = VALUE_FLAGS.find(([flag]) => arg === flag || arg.startsWith(`${flag}=`));\n if (valueFlag) {\n const [flag, key] = valueFlag;\n const { value, next } = readValueFlag(args, i, flag);\n valueArgs[key] = value;\n i = next;\n continue;\n }\n\n if (arg === '--help' || arg === '-h') {\n result.help = true;\n i++;\n } else if (arg === '--version' || arg === '-v') {\n result.version = true;\n i++;\n } else if (arg === '--corpus' || arg === '-c') {\n result.corpus = args[++i];\n i++;\n } else if (arg === '--stdin-log') {\n result.stdinLog = true;\n i++;\n } else if (arg === '--stdin-facts') {\n result.stdinFacts = true;\n i++;\n } else if (arg === '--format') {\n const fmt = args[++i] as OutputFormat;\n if (fmt === 'json' || fmt === 'table' || fmt === 'csv' || fmt === 'jsonl') {\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' || fmt === 'jsonl') {\n result.format = fmt;\n }\n i++;\n } else if (arg === '-o' || arg === '--output') {\n result.output = args[++i];\n i++;\n } else if (arg.startsWith('--output=')) {\n result.output = arg.slice('--output='.length);\n i++;\n } else if (arg === '--pack') {\n const packSpec = args[++i];\n if (packSpec) result.packs.push(packSpec);\n i++;\n } else if (arg.startsWith('--pack=')) {\n result.packs.push(arg.slice('--pack='.length));\n i++;\n } else if (arg === '--sport') {\n result.sport = args[++i];\n i++;\n } else if (arg === '--unit') {\n result.unit = args[++i];\n i++;\n } else if (arg === '--debug') {\n // Bare flag never consumes the next arg — use --debug=<name> for a custom file.\n result.debug = '';\n i++;\n } else if (arg.startsWith('--debug=')) {\n result.debug = arg.slice('--debug='.length);\n i++;\n } else if (arg === '--source') {\n const source = args[++i];\n if (source) result.sources.push(source);\n i++;\n } else if (arg.startsWith('--source=')) {\n result.sources.push(arg.slice('--source='.length));\n i++;\n } else if (arg === '--scaffold') {\n result.scaffold = true;\n i++;\n } else if (arg === '--writers-retired') {\n result.writersRetired = true;\n i++;\n } else if (arg === '--allow-empty') {\n result.allowEmpty = true;\n i++;\n } else if (arg === '--write-env') {\n result.writeEnv = true;\n i++;\n } else if (arg === '--force') {\n result.force = true;\n i++;\n } else if (arg === '--out') {\n result.output = args[++i];\n i++;\n } else if (arg.startsWith('--out=')) {\n result.output = arg.slice('--out='.length);\n i++;\n } else if (arg === '--dir') {\n result.dir = args[++i];\n i++;\n } else if (arg.startsWith('--dir=')) {\n result.dir = arg.slice('--dir='.length);\n } else if (arg === '--seed-version') {\n const v = Number(args[++i]);\n if (Number.isSafeInteger(v) && v >= 0) result.seedVersion = v;\n i++;\n } else if (arg.startsWith('--seed-version=')) {\n const v = Number(arg.slice('--seed-version='.length));\n if (Number.isSafeInteger(v) && v >= 0) result.seedVersion = v;\n i++;\n } else if (!result.subcommand) {\n if (arg === 'parse' || arg === 'run' || arg === 'query' || arg === 'download' || arg === 'export' || arg === 'import' || arg === 'publish' || arg === 'build' || arg === 'seed' || arg === 'reset' || arg === 'init' || arg === 'db' || arg === 'server' || arg === 'serve' || arg === 'playground' || arg === 'init-feed' || arg === 'skills' || arg === 'help' || arg === 'version') {\n result.subcommand = arg;\n } else {\n result.target = arg;\n }\n i++;\n } else if (!result.target) {\n result.target = arg;\n i++;\n } else if (!result.target2) {\n result.target2 = arg;\n i++;\n } else {\n i++;\n }\n }\n\n for (const [flag, value] of [['--port', result.port], ['--postgres-port', result.postgresPort]] as const) {\n if (value !== undefined && (!/^\\d+$/.test(value) || Number(value) < 1 || Number(value) > 65535)) {\n throw new Error(`Invalid value for ${flag}: \"${value}\" is not a TCP port (1-65535)`);\n }\n }\n\n return result;\n}\n\n/**\n * Recover the Bun `Bun.stdin.text()` reader when running under Bun. The Bun\n * global is not part of the ambient lib shape; `in`/`typeof` narrowing proves\n * the access chain at runtime before the single unchecked cast.\n */\nfunction readBunStdinText(): (() => Promise<string>) | undefined {\n const g: unknown = globalThis;\n if (g && typeof g === 'object' && 'Bun' in g) {\n const bun = g.Bun;\n if (bun && typeof bun === 'object' && 'stdin' in bun) {\n const stdin = bun.stdin;\n if (stdin && typeof stdin === 'object' && 'text' in stdin) {\n const text = stdin.text;\n if (typeof text === 'function') return text as () => Promise<string>;\n }\n }\n }\n return undefined;\n}\n\nexport async function readStdin(): Promise<string> {\n const bunText = readBunStdinText();\n if (bunText) return bunText();\n return new Promise<string>((resolve, reject) => {\n const chunks: Buffer[] = [];\n process.stdin.on('data', (chunk) => {\n chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);\n });\n process.stdin.on('end', () => {\n resolve(Buffer.concat(chunks).toString('utf-8'));\n });\n process.stdin.on('error', (err) => {\n reject(err);\n });\n });\n}\n\nfunction getUsageText(): string {\n return `\nwod CLI — Headless Whiteboard Language & WQL Engine runner (v${VERSION})\n\nUSAGE:\n wod parse <file | -> [options]\n wod run <file | -> [options]\n wod query '<wql-string>' [options]\n wod export <note|playground|session|effort|equipment> <id> [options]\n wod download <note|playground|session|effort|equipment> <id> [options]\n wod import <note|playground|session|effort|equipment> <file> [options]\n wod publish [feed] [options]\n wod build [dir] [options]\n wod init-feed <name>\n Scaffold a new feed repository (package.json, example\n collection, GitHub Actions Pages workflow). Refuses an\n existing destination.\n wod skills <list | install> [options]\n Agent skills bundled with this CLI — the Whiteboard\n Script extraction rules an agent needs to parse and write\n correct workouts. install copies them to\n <dir>/.agents/skills/ (no network); they are also\n publishable via npx skills add bitcobblers/wod-wiki.\n wod skills install [--dir <path>] [--force]\n wod seed [options]\n wod reset [options]\n wod init Initialize the configured database (idempotent)\n wod db <action> [name] [options]\n Turso database lifecycle (management credentials from\n the environment only: TURSO_API_TOKEN + TURSO_ORGANIZATION;\n never flags, never printed):\n wod db create [--name <db>] --group <g> -o <pairing-file>\n Provision a fresh empty target (default name\n wod-wiki-v<schema>) and write its pairing file.\n wod db backup <source> [--name <copy>] --writers-retired -o <file>\n wod db restore <source> [--name <copy>] --writers-retired -o <file>\n Native whole-database copy (Control API seed); verified\n row- and binary-identical before any token is minted.\n Backups receive read-only archive credentials. Restore\n copies are writable only at the current schema;\n older-schema copies stay read-only until migrated.\n wod db migrate <source> [--name <target>] --writers-retired -o <file>\n Logical conversion to a fresh current-schema target via\n the shared IndexedDB adapter. The target stays\n unpairable (constructing marker) until replay, pin and\n source-immutability checks pass; the source is retained.\n wod db delete <name> --yes <name>\n Delete a database — --yes must repeat the exact name.\n wod db pair <name> [--allow-empty] -o <file> [--write-env]\n Mint a database-scoped token and write the pairing file\n for the browser Data settings (0600, exclusive create;\n --force replaces atomically). Refuses foreign, legacy,\n newer and unvalidated targets. --write-env opt-in\n appends DB_DRIVER/TURSO_* to the .env atomically and\n refuses to replace existing database settings.\n\nDB OPTIONS (for 'wod db'):\n --name <db> Explicit target/copy database name\n --group <g> Turso group for 'create' (must exist); fallback target\n group when the API does not report one\n --writers-retired Acknowledge all writers on the source were stopped\n before backup/restore/migrate read it\n --allow-empty 'pair' a deliberately empty bootstrap target\n --write-env Opt-in .env output (atomic, refuses replacement)\n --force Replace an existing pairing file (stays 0600)\n -o, --output <file> Pairing file path — REQUIRED for credential-issuing\n actions; credentials are never printed to stdout\n\n wod server [options]\n Serve the app (HTTP API + packaged frontend; alias: serve)\n wod playground [options]\n Serve the local playground (browser IndexedDB build)\n\nSUBCOMMANDS:\n parse <file | -> Parse Whiteboard Script, create a note in the database\n (whole source + saved revisions + sparse block index), optionally emit parse-tree IR.\n Markdown carrying a 'wod-note-id' frontmatter stamp\n (see download) imports back into that same note.\n run <file | -> Execute the script state machine, record a session +\n event/summary rows in the database, optionally emit\n execution-log IR\n query '<wql>' Evaluate WQL against the database (or an explicit\n dataset) and emit QueryResult / RowsQueryResult IR\n export note <id> Export the note's authored markdown to <id>.md.\n (alias: export playground, download note).\n The frontmatter identity stamp allows re-import.\n Frontmatter tags (general + typed equipment/quality/…)\n are materialized into the tag graph on parse/import.\n export session <id>\n Write the session's generated metrics (event + summary\n rows, one CSV row per metric) to <id>.csv. Import back\n with 'wod import session'. (alias: download session).\n export effort <slug>\n Write the effort registry row as corpus-style markdown\n to <slug>.md. Import back with 'wod import effort'.\n export equipment Write every equipment tag as a one-column CSV to\n equipment.csv. Import back with 'wod import equipment'.\n download … Accepted alias for 'wod export'.\n import note <file> Re-import exported note markdown (alias: import playground;\n same as parse with the stamped identity).\n import session <file>\n Import a session + its events from a downloaded CSV.\n The exact saved block revision must already exist.\n import effort <file>\n Upsert an effort registry row from corpus-style markdown.\n import equipment <file>\n Create/upgrade equipment tags (CSV, one label per row).\n publish [feed] Publish feed notes from the database into a configured\n seed directory (manifest.json, chunks/, report.html)\n compatible with 'wod seed --source <dir>'. Override target\n with -o/--out/--output (defaults to ./dist/seed/<feed>).\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\nINPUT SOURCING (for 'query'; without these, the database is queried):\n -c, --corpus <path> Load historical corpus dataset from a versioned JSON file\n --stdin-log Read kind: 'execution-log' JSON payload from stdin\n --stdin-facts Read raw kind: 'fact-set' JSON payload from stdin\n\nDATABASE (init / parse / run / query / download / import / seed / reset / server):\n Pick one backend; explicit flags win over the process environment, the\n process environment wins over .env files. Run 'wod init' once first: it\n creates the SQLite file + schema, creates the PostgreSQL database when\n your role is authorized to (otherwise use an existing/provisioned one),\n or installs the schema in your provisioned Turso database — idempotently,\n preserving existing notes. 'wod server' refuses an uninitialized database.\n --db <path> Local SQLite database file (default: $WOD_WIKI_DB\n or ./wodwiki.db). Passing --db always selects SQLite,\n even when the environment names a remote backend.\n Created on demand by parse/run/seed.\n --db-driver <name> Backend driver: sqlite (default), postgres, or\n turso ($DB_DRIVER)\n --database-url <url> Database connection URL ($DATABASE_URL); accepts\n PostgreSQL, local SQLite, and remote libSQL URLs.\n --postgres-host <host> PostgreSQL host ($POSTGRES_HOST)\n --postgres-port <port> PostgreSQL port ($POSTGRES_PORT)\n --postgres-user <user> PostgreSQL user ($POSTGRES_USER)\n --postgres-password <pw> PostgreSQL password ($POSTGRES_PASSWORD)\n --postgres-database <db> PostgreSQL database name ($POSTGRES_DATABASE)\n --postgres-ssl <mode> PostgreSQL SSL mode, e.g. disable/prefer/require\n ($POSTGRES_SSL)\n --turso-url <url> Turso/libSQL database URL (libsql://…). The\n hosted database must already exist (provisioned on\n Turso); only its schema is installed.\n --turso-auth-token <token> Turso authentication token (never printed)\n --env-file <path> Load variables from this file; a missing file is\n an error. Without it: ./.env when present, otherwise\n the workspace-root .env. Credentials are never logged.\n\nHOSTING (for 'server' / 'playground'; supported on Node and Bun):\n server HTTP API over the configured database plus the frontend\n packaged inside the tools module. Requires an\n initialized database. ('serve' is an accepted alias.)\n playground Serves the playground app backed by browser IndexedDB;\n the configured database is not touched.\n --host <host> Bind address (default 127.0.0.1, $HOST)\n --port <port> TCP port (default 3000, $PORT)\n --dist <dir> Serve this prebuilt frontend directory instead of the\n packaged one ($PLAYGROUND_DIST); must already contain\n index.html.\n\nSEED SOURCING (for 'seed'):\n --source <dir> Extra compiled seed directory (manifest.json + chunks);\n repeatable. Defaults to the bundled core + community\n artifacts under apps/playground/public/seed.\n\nOPTIONS:\n --format <fmt> Output format: json (default), table, csv\n -o, --output <path> Write the IR payload (or download) to a path instead of\n the default; '-' writes to stdout\n --debug[=name] Also write the IR payload to <name> (default\n wod-<subcommand>-debug.json); without it, parse/run\n print a one-line summary of what was persisted\n --pack <module> Dynamically load and register a Language Pack (repeatable)\n --sport <sport> Target sport fence dialect (e.g. climbing, crossfit)\n --unit <unit> Preferred display unit for queries (e.g. lb, kg)\n -h, --help Show help message\n -v, --version Show version number\n\nENVIRONMENT (flags > process env > .env):\n WOD_WIKI_DB, SQLITE_PATH SQLite file path\n DB_DRIVER sqlite | postgres | turso\n DATABASE_URL PostgreSQL connection URL\n POSTGRES_HOST, POSTGRES_PORT, POSTGRES_USER,\n POSTGRES_PASSWORD, POSTGRES_DATABASE, POSTGRES_SSL\n TURSO_DATABASE_URL, TURSO_AUTH_TOKEN, LIBSQL_AUTH_TOKEN\n TURSO_API_TOKEN, TURSO_ORGANIZATION wod db management credentials (env only)\n HOST, PORT, PLAYGROUND_DIST server / playground defaults\n\nEXIT CODES:\n 0 - OK / Success\n 1 - General / Runtime error\n 2 - Parse / Syntax error\n 3 - Language Pack load error\n`;\n}\n\nfunction printUsage(writer?: (text: string) => void): void {\n const text = getUsageText();\n if (writer) {\n writer(text);\n } else {\n // CLI stdout output channel (not a debugging statement).\n process.stdout.write(text.endsWith('\\n') ? text : text + '\\n');\n }\n}\n\n/**\n * Main CLI entry point. Returns numeric exit code.\n */\nexport async function cliMain(\n argv: string[] = process.argv.slice(2),\n io: {\n stdout?: (text: string) => void;\n stderr?: (text: string) => void;\n readStdinFn?: () => Promise<string>;\n /** Test seam for `wod db`: injectable fetch/URL mapping for the Turso\n * management client (production resolves the real network). */\n dbDeps?: DbAdminDeps;\n } = {},\n): Promise<number> {\n const writeOut = io.stdout ?? ((t: string) => process.stdout.write(t + '\\n'));\n const writeErr = io.stderr ?? ((t: string) => process.stderr.write(t + '\\n'));\n const getStdin = io.readStdinFn ?? readStdin;\n\n // Lazy environment/config: .env parsing and backend resolution run only for\n // database-backed commands and hosting — never for --corpus/--stdin dataset\n // queries, build, or playground, so a malformed remote config cannot break them.\n // loadCliEnvironment returns file values only; process env must overlay them\n // (bun --no-env-file keeps .env loading solely in this loader).\n let envLoaded: Record<string, string | undefined> | undefined;\n const cliEnv = () => (envLoaded ??= { ...loadCliEnvironment(parsed.envFile), ...process.env });\n let dbResolved: CliDatabaseConfig | undefined;\n const cliDb = () => (dbResolved ??= resolveDatabaseConfig(parsed, cliEnv()));\n\n let parsed: CliParsedArgs;\n try {\n parsed = parseCliArgs(argv);\n } catch (error) {\n writeErr(error instanceof Error ? error.message : String(error));\n return 1;\n }\n\n if (parsed.version || parsed.subcommand === 'version') {\n writeOut(`wod v${VERSION}`);\n return 0;\n }\n\n if (parsed.help || parsed.subcommand === 'help') {\n printUsage(writeOut);\n return 0;\n }\n\n if (!parsed.subcommand) {\n printUsage(writeErr);\n return 1;\n }\n // 1. Load any requested Language Packs (Exit code 3 on failure)\n for (const packSpec of parsed.packs) {\n try {\n await loadLanguagePack(packSpec);\n } catch (err) {\n if (err instanceof PackLoadError) {\n writeErr(err.message);\n } else {\n writeErr(`[wod] Language pack load error: ${err instanceof Error ? err.message : String(err)}`);\n }\n return 3;\n }\n }\n\n // Output destination helper\n const deliverOutput = (formattedText: string) => {\n if (parsed.output && parsed.output !== '-') {\n getFs().writeFileSync(parsed.output, formattedText, 'utf-8');\n } else {\n writeOut(formattedText);\n }\n };\n\n // --debug[=name]: undefined = off, '' = default file name, else custom name.\n const debugTarget = (subcommand: string): string | undefined =>\n parsed.debug === undefined ? undefined : parsed.debug || `wod-${subcommand}-debug.json`;\n\n const writeDebugFile = (subcommand: string, ir: unknown) => {\n const target = debugTarget(subcommand);\n if (target !== undefined) {\n getFs().writeFileSync(target, JSON.stringify(ir, null, 2) + '\\n', 'utf-8');\n }\n };\n\n // 2. Dispatch subcommands\n try {\n if (parsed.subcommand === 'init-feed') {\n if (!parsed.target) {\n writeErr('[wod init-feed] Error: Missing feed name (a single new directory name)');\n return 1;\n }\n // Browser-boundary: dynamic import keeps node:fs usage out of the browser graph.\n const { scaffoldFeed } = await import('./scaffoldFeed');\n try {\n const result = scaffoldFeed(parsed.target);\n writeOut(`[wod init-feed] Created ${result.dir} (${result.files.length} files)`);\n writeOut(`Next: cd ${parsed.target} && bun install && bunx wod build . --output dist`);\n writeOut(`Agents: wod skills install --dir ${parsed.target} (Whiteboard Script extraction rules → .agents/skills/)`);\n return 0;\n } catch (error) {\n writeErr(`[wod init-feed] ${(error as Error).message}`);\n return 1;\n }\n }\n\n if (parsed.subcommand === 'skills') {\n const action = parsed.target ?? 'list';\n // Dynamic import: skills.ts touches node:fs, which must stay out of the\n // browser bundle graph (same reason as ./scaffoldFeed above).\n const { bundledSkillsRoot, installSkills, listBundledSkills } = await import('./skills');\n try {\n if (action === 'list') {\n const root = bundledSkillsRoot();\n if (!root) {\n writeErr('[wod skills] No bundled skills found next to this CLI');\n return 1;\n }\n const skills = listBundledSkills(root);\n for (const skill of skills) writeOut(`${skill.name} — ${skill.description}`);\n writeOut(`[wod skills] ${skills.length} skill(s) from ${root}`);\n return 0;\n }\n if (action === 'install') {\n const result = installSkills({ dir: parsed.dir, force: parsed.force === true });\n for (const name of result.installed) writeOut(`[wod skills] installed ${name} → ${nodePath().join(result.target, name)}`);\n for (const name of result.skipped) writeOut(`[wod skills] ${name} already installed (use --force to replace)`);\n writeOut(`[wod skills] ${result.installed.length} installed, ${result.skipped.length} kept — source ${result.root}`);\n if (result.installed.length === 0 && result.skipped.length === 0) {\n writeErr('[wod skills] No bundled skills found');\n return 1;\n }\n writeOut('[wod skills] Agents read .agents/skills/; use `npx skills add bitcobblers/wod-wiki` for per-agent links.');\n return 0;\n }\n writeErr(`[wod skills] Unknown action '${action}' (expected: list | install)`);\n return 1;\n } catch (error) {\n writeErr(`[wod skills] ${(error as Error).message}`);\n return 1;\n }\n }\n\n if (parsed.subcommand === 'parse') {\n if (!parsed.target) {\n writeErr('[wod parse] Error: Missing input file or \"-\" for stdin');\n return 1;\n }\n\n let source: string;\n if (parsed.target === '-') {\n source = await getStdin();\n } else {\n const fs = getFs();\n if (!fs.existsSync(parsed.target)) {\n writeErr(`[wod parse] File not found: ${parsed.target}`);\n return 1;\n }\n source = fs.readFileSync(parsed.target, 'utf-8');\n }\n\n const noteSource = cliNoteSource(source, parsed.target, parsed.sport);\n const ir = runParse(source, { sport: parsed.sport, sourceLabel: `cli:wod parse ${parsed.target}` });\n const identity = extractNoteIdentity(source);\n const tags = extractTypedTags(source);\n const db = await openCliDb(cliDb());\n try {\n const persisted = await persistNote(db, {\n source: noteSource,\n sourceLabel: parsed.target,\n noteId: identity?.noteId,\n title: identity?.title,\n tags,\n });\n writeOut(\n `[wod parse] note ${persisted.noteId}${persisted.created ? '' : ' (updated)'}` +\n ` — ${persisted.blocks} blocks, ${persisted.efforts} efforts` +\n `${persisted.tags > 0 ? `, ${persisted.tags} tags` : ''} → ${db.path}`,\n );\n } finally {\n await db.close();\n }\n if (parsed.output) {\n const pretty = Boolean(process.stdout.isTTY);\n deliverOutput(formatParseOutput(ir, parsed.format, pretty));\n }\n writeDebugFile('parse', ir);\n return 0;\n }\n\n if (parsed.subcommand === 'run') {\n if (!parsed.target) {\n writeErr('[wod run] Error: Missing input file or \"-\" for stdin');\n return 1;\n }\n\n let source: string;\n if (parsed.target === '-') {\n source = await getStdin();\n } else {\n const fs = getFs();\n if (!fs.existsSync(parsed.target)) {\n writeErr(`[wod run] File not found: ${parsed.target}`);\n return 1;\n }\n source = fs.readFileSync(parsed.target, 'utf-8');\n }\n\n const identity = extractNoteIdentity(source);\n const db = await openCliDb(cliDb());\n let ir: WodWikiIRFile<ExecutionLog>;\n try {\n const started = await startRun(db, {\n source: cliNoteSource(source, parsed.target, parsed.sport),\n sourceLabel: parsed.target,\n noteId: identity?.noteId,\n title: identity?.title,\n tags: extractTypedTags(source),\n });\n const section = parseDocumentSections(started.revision.rawContent).find((row) => row.scriptBlock);\n if (!section?.scriptBlock) throw new Error('[wod run] Captured workout source cannot be parsed');\n const bare = !/\\.(?:md|markdown)$/i.test(parsed.target) && !parseDocumentSections(source).some((row) => row.scriptBlock);\n const frozenBody = bare ? section.scriptBlock.content.slice(0, -1) : section.scriptBlock.content;\n ir = await runExecution(frozenBody, {\n sport: started.revision.sport,\n dialect: started.revision.dialect,\n blockId: started.session.blockId,\n blockVersion: started.session.blockVersion,\n startTime: started.session.startTime,\n sourceLabel: `cli:wod run ${parsed.target}`,\n });\n const persisted = await persistRun(db, started, ir.data);\n writeOut(\n `[wod run] session ${persisted.resultId} — ${persisted.events} events, ` +\n `${persisted.summaries} summaries on note ${persisted.noteId} → ${db.path}`,\n );\n } finally {\n await db.close();\n }\n if (parsed.output) {\n const pretty = Boolean(process.stdout.isTTY);\n deliverOutput(formatExecutionOutput(ir, parsed.format, pretty));\n }\n writeDebugFile('run', ir);\n return 0;\n }\n\n if (parsed.subcommand === 'query') {\n if (!parsed.target) {\n writeErr('[wod query] Error: Missing WQL query argument');\n return 1;\n }\n\n const useDb = !parsed.corpus && !parsed.stdinLog && !parsed.stdinFacts;\n let stdinLogContent: string | undefined;\n let stdinFactsContent: string | undefined;\n\n if (parsed.stdinLog) {\n stdinLogContent = await getStdin();\n } else if (parsed.stdinFacts) {\n stdinFactsContent = await getStdin();\n }\n\n let ir;\n if (useDb) {\n const config = cliDb();\n if (config.kind === 'sqlite' && !nodeFs().existsSync(config.path)) {\n writeErr(\n `[wod query] No input dataset and no database at ${config.path}. ` +\n 'Specify --corpus <file>, --stdin-log, --stdin-facts, or run `wod seed` first.',\n );\n return 1;\n }\n const db = await openCliDb(config, config.kind === 'sqlite' ? undefined : { initialize: false });\n try {\n ir = await runQueryCli(parsed.target, {\n preferredUnit: parsed.unit,\n sourceLabel: `cli:wod query \"${parsed.target}\"`,\n stores: {\n eventStore: sqliteEventStore(db.db),\n noteStore: sqliteNoteStore(db.db),\n blockStore: sqliteBlockStore(db.db),\n effortStore: sqliteEffortStore(db.db),\n blockEffortsStore: sqliteIndexStore(db.db, 'block_efforts'),\n tagsStore: sqliteIndexStore(db.db, 'tags'),\n noteTagsStore: sqliteIndexStore(db.db, 'note_tags'),\n },\n });\n } finally {\n await db.close();\n }\n } else {\n if (!parsed.corpus && !stdinLogContent && !stdinFactsContent) {\n writeErr('[wod query] Error: Query requires input data. Specify --corpus <file>, --stdin-log, or --stdin-facts.');\n return 1;\n }\n ir = await runQueryCli(parsed.target, {\n corpusPath: parsed.corpus,\n stdinLog: stdinLogContent,\n stdinFacts: stdinFactsContent,\n preferredUnit: parsed.unit,\n sourceLabel: `cli:wod query \"${parsed.target}\"`,\n });\n }\n\n const pretty = !parsed.output && Boolean(process.stdout.isTTY);\n const formatted = formatQueryOutput(ir, parsed.format, pretty);\n deliverOutput(formatted);\n writeDebugFile('query', ir);\n return 0;\n }\n\n if (parsed.subcommand === 'download' || parsed.subcommand === 'export') {\n const verb = parsed.subcommand;\n const kind = parsed.target;\n const id = parsed.target2;\n const DOWNLOAD_KINDS = ['note', 'playground', 'session', 'effort', 'equipment'];\n if ((!id && kind !== 'equipment') || !DOWNLOAD_KINDS.includes(kind ?? '')) {\n writeErr(`[wod ${verb}] Usage: wod ${verb} <note|playground|session|effort|equipment> <id> [-o <path>]`);\n return 1;\n }\n const targetId = id as string;\n const db = await openCliDb(cliDb());\n try {\n if (kind === 'note' || kind === 'playground') {\n const bundle = await getNoteBundle(db.db, targetId);\n if (!bundle.note) {\n writeErr(`[wod ${verb}] Note not found in ${db.path}: ${id}`);\n return 1;\n }\n const markdown = composeNoteMarkdown(bundle.note);\n const target = parsed.output && parsed.output !== '-' ? parsed.output : `${id}.md`;\n if (parsed.output === '-') {\n writeOut(markdown);\n } else {\n nodeFs().writeFileSync(target, markdown, 'utf-8');\n }\n if (parsed.output !== '-') writeOut(`[wod ${verb}] ${kind} ${id} → ${target}`);\n } else if (kind === 'session') {\n const bundle = await getSessionBundle(db.db, targetId);\n if (!bundle) {\n writeErr(`[wod ${verb}] Session not found in ${db.path}: ${id}`);\n return 1;\n }\n const wantsJsonl = parsed.format === 'jsonl' || (parsed.output !== undefined && /\\.jsonl$/i.test(parsed.output));\n const defaultExt = wantsJsonl ? 'jsonl' : 'csv';\n const target = parsed.output && parsed.output !== '-' ? parsed.output : `${id}.${defaultExt}`;\n let payload: string;\n if (wantsJsonl) {\n const rev = await db.storage.readonly('block_revisions').get([\n bundle.session.noteId,\n bundle.session.blockId,\n bundle.session.blockVersion,\n ]);\n payload = serializeNoteBundleToJsonl({\n ...(rev ? { revisions: [rev] } : {}),\n sessions: [bundle.session],\n events: bundle.events,\n }) + '\\n';\n } else {\n payload = sessionToCsv(bundle.session, bundle.events);\n }\n if (parsed.output === '-') {\n writeOut(payload.trimEnd());\n } else {\n nodeFs().writeFileSync(target, payload, 'utf-8');\n }\n if (parsed.output !== '-') writeOut(`[wod ${verb}] session ${id} → ${target} (${bundle.events.length} events)`);\n } else if (kind === 'effort') {\n const effort = await getEffortBySlug(db.db, targetId);\n if (!effort) {\n writeErr(`[wod ${verb}] Effort not found in ${db.path}: ${id}`);\n return 1;\n }\n // Lossless first: the owning definition note keeps the authored\n // document verbatim; reconstruct only when no owner note exists.\n const ownerNoteId = typeof effort.ownerNoteId === 'string' ? effort.ownerNoteId : `effort/${effort.slug}`;\n const owner = await db.storage.readonly('notes').get(ownerNoteId);\n const markdown = owner?.rawContent ?? effortToMarkdown(effort as Parameters<typeof effortToMarkdown>[0]);\n const target = parsed.output && parsed.output !== '-' ? parsed.output : `${id}.md`;\n if (parsed.output === '-') {\n writeOut(markdown);\n } else {\n nodeFs().writeFileSync(target, markdown, 'utf-8');\n }\n writeOut(`[wod ${verb}] effort ${id} → ${target}`);\n } else {\n // equipment definition (when slug matches a stored definition) or whole-catalog CSV.\n const equipment = id ? await getEquipmentBySlug(db.db, targetId) : undefined;\n if (equipment) {\n const ownerNoteId = typeof equipment.ownerNoteId === 'string' ? equipment.ownerNoteId : `equipment/${equipment.slug}`;\n const owner = await db.storage.readonly('notes').get(ownerNoteId);\n const markdown = owner?.rawContent ?? equipmentToMarkdown(equipment as Parameters<typeof equipmentToMarkdown>[0]);\n const target = parsed.output && parsed.output !== '-' ? parsed.output : `${id}.md`;\n if (parsed.output === '-') {\n writeOut(markdown);\n } else {\n nodeFs().writeFileSync(target, markdown, 'utf-8');\n }\n writeOut(`[wod ${verb}] equipment ${id} → ${target}`);\n } else {\n const labels = (await listTagsByType(db.db, 'equipment')).map((t) => t.label).sort();\n const csv = equipmentToCsv(labels);\n const target = parsed.output && parsed.output !== '-' ? parsed.output : 'equipment.csv';\n if (parsed.output === '-') {\n writeOut(csv);\n } else {\n nodeFs().writeFileSync(target, csv, 'utf-8');\n }\n writeOut(`[wod ${verb}] equipment → ${target} (${labels.length} labels)`);\n }\n }\n } finally {\n await db.close();\n }\n return 0;\n }\n\n if (parsed.subcommand === 'import') {\n const kind = parsed.target;\n const file = parsed.target2;\n const IMPORT_KINDS = ['note', 'playground', 'session', 'effort', 'equipment'];\n if (!file || !IMPORT_KINDS.includes(kind ?? '')) {\n writeErr('[wod import] Usage: wod import <note|playground|session|effort|equipment> <file>');\n return 1;\n }\n const fs = nodeFs();\n if (!fs.existsSync(file)) {\n writeErr(`[wod import] File not found: ${file}`);\n return 1;\n }\n if (kind === 'note' || kind === 'playground') {\n const source = fs.readFileSync(file, 'utf-8');\n const identity = extractNoteIdentity(source);\n const tags = extractTypedTags(source);\n const db = await openCliDb(cliDb());\n try {\n const persisted = await persistNote(db, {\n source,\n sourceLabel: file,\n noteId: identity?.noteId,\n title: identity?.title,\n tags,\n });\n writeOut(\n `[wod import] ${kind} ${persisted.noteId}${persisted.created ? '' : ' (updated)'}` +\n ` — ${persisted.blocks} blocks${persisted.tags > 0 ? `, ${persisted.tags} tags` : ''} → ${db.path}`,\n );\n } finally {\n await db.close();\n }\n return 0;\n }\n if (kind === 'effort') {\n const source = fs.readFileSync(file, 'utf-8');\n const db = await openCliDb(cliDb());\n try {\n const result = await persistDefinitionNote(db, 'effort', source);\n writeOut(`[wod import] effort ${result.slug}${result.createdNote ? '' : ' (updated)'} — note ${result.noteId} → ${db.path}`);\n } finally {\n await db.close();\n }\n return 0;\n }\n if (kind === 'equipment' && /\\.md$/i.test(file)) {\n const source = fs.readFileSync(file, 'utf-8');\n const db = await openCliDb(cliDb());\n try {\n const result = await persistDefinitionNote(db, 'equipment', source);\n writeOut(`[wod import] equipment ${result.slug}${result.createdNote ? '' : ' (updated)'} — note ${result.noteId} → ${db.path}`);\n } finally {\n await db.close();\n }\n return 0;\n }\n if (kind === 'equipment') {\n const labels = csvToEquipmentLabels(fs.readFileSync(file, 'utf-8'));\n if (labels.length === 0) {\n writeErr(`[wod import] No equipment labels found in ${file}`);\n return 1;\n }\n const db = await openCliDb(cliDb());\n try {\n const added = await persistTypedTags(db, labels, 'equipment');\n writeOut(`[wod import] equipment — ${labels.length} labels (${added} new) → ${db.path}`);\n } finally {\n await db.close();\n }\n return 0;\n }\n const rawSessionText = fs.readFileSync(file, 'utf-8');\n const db = await openCliDb(cliDb());\n try {\n if (/\\.jsonl$/i.test(file)) {\n const report = await ingestPortableFilesIntoStorage(db.storage, [{ path: file, content: rawSessionText }]);\n if (report.errors.length > 0 && report.sessionsImported === 0) {\n writeErr(`[wod import] ${report.errors.join('; ')}`);\n return 1;\n }\n writeOut(\n `[wod import] session jsonl — ${report.sessionsImported} session(s), ${report.eventsImported} events → ${db.path}`,\n );\n } else {\n const { session, events } = csvToSessionRows(rawSessionText);\n const result = await persistSessionBundle(db, session, events);\n writeOut(\n `[wod import] session ${session.id} — ${result.events} events → ${db.path}`,\n );\n }\n } finally {\n await db.close();\n }\n return 0;\n }\n\n if (parsed.subcommand === 'publish') {\n const isDir = (s?: string) => Boolean(s && (s.startsWith('.') || s.startsWith('/') || s.includes('/') || s.includes('\\\\')));\n const notebook = isDir(parsed.target) ? undefined : parsed.target;\n const targetDir = isDir(parsed.target) ? parsed.target : parsed.target2;\n const outDir = parsed.output ?? targetDir ?? (notebook ? `./dist/seed/${notebook}` : './dist/seed');\n\n const db = await openCliDb(cliDb());\n try {\n const result = await publishNotebookSeed(db, {\n notebook,\n outDir,\n version: parsed.seedVersion,\n });\n writeOut(\n `[wod publish] published ${result.notebooks.join(', ')} (${result.totalNotes} notes) ` +\n `→ ${result.outDir} (manifest schema v${result.manifest.schema}, version ${result.manifest.version})`,\n );\n } finally {\n await db.close();\n }\n return 0;\n }\n\n if (parsed.subcommand === 'build') {\n const cwd = process.cwd();\n const root = nodePath().resolve(cwd, parsed.dir ?? parsed.target ?? '.');\n if (!nodeFs().existsSync(nodePath().resolve(root, 'markdown'))) {\n writeErr(`[wod build] No markdown/ corpus under ${root} — run from the content repo root (or pass its directory).`);\n return 1;\n }\n // Browser-boundary: dynamic import keeps node:crypto and child_process out of the browser graph.\n const { generateSeed } = await import('../seedbuild/compiler');\n try {\n const result = generateSeed({\n corpusRoot: root,\n ...(parsed.output ? { outDir: nodePath().resolve(cwd, parsed.output) } : {}),\n scaffoldDiscoveredEfforts: parsed.scaffold === true,\n });\n const kb = (n: number): string => `${(n / 1024).toFixed(0)} KB`;\n const totalBytes = result.manifest.chunks.reduce((s, c) => s + c.bytes, 0);\n writeOut(`[wod build] schema v${result.manifest.schema} version ${result.manifest.version} (${result.manifest.versionLabel}) → ${result.outDir}`);\n for (const c of result.manifest.chunks) {\n writeOut(` ${c.id.padEnd(48)} ${String(c.count).padStart(4)} files ${kb(c.bytes).padStart(8)}`);\n }\n writeOut(`[wod build] ${result.manifest.chunks.length} chunks, ${result.totalFiles} files, ${kb(totalBytes)} total — scan ${result.passMs.scan}ms, block-index ${result.passMs.blockIndex}ms, block-efforts ${result.passMs.blockEfforts}ms, write ${result.passMs.write}ms`);\n return 0;\n } catch (error) {\n writeErr(`[wod build] ${(error as Error).message}`);\n return 1;\n }\n }\n\n if (parsed.subcommand === 'seed') {\n const dirs = parsed.sources.length > 0\n ? parsed.sources.map((s) => nodePath().resolve(process.cwd(), s))\n : defaultSeedDirs(process.cwd());\n if (dirs.length === 0) {\n writeErr(\n '[wod seed] No seed sources found. Run `bun scripts/sync-seed.ts` to build the bundled ' +\n 'artifacts, or pass --source <dir> pointing at a compiled seed directory (manifest.json + chunks).',\n );\n return 1;\n }\n const db = await openCliDb(cliDb());\n try {\n for (const dir of dirs) {\n const summary = await importSeedDir(db, dir, '');\n writeOut(\n `[wod seed] ${summary.sourceId}: v${summary.version} — ${summary.notes} notes, ` +\n `${summary.efforts} efforts, ${summary.blocks} blocks, ${summary.blockEfforts} block-efforts ` +\n `(${summary.deleted} deleted, ${summary.skippedUserOwned} user-owned skipped) → ${db.path}`,\n );\n }\n } finally {\n await db.close();\n }\n return 0;\n }\n\n if (parsed.subcommand === 'reset') {\n const config = cliDb();\n if (config.kind !== 'sqlite') {\n // Never unlink a remote backend; the message names only the driver\n // kind so URLs/tokens can never leak through reset output.\n writeErr(\n `[wod reset] refusing to reset the configured ${config.kind} database — ` +\n 'reset only removes a local SQLite file. Clear remote databases through their provider.',\n );\n return 1;\n }\n const target = config.path;\n if (nodeFs().existsSync(target)) {\n nodeFs().unlinkSync(target);\n writeOut(`[wod reset] removed ${target}`);\n } else {\n writeOut(`[wod reset] nothing to reset — ${target} does not exist`);\n }\n return 0;\n }\n\n if (parsed.subcommand === 'init') {\n // Idempotent: opens and initializes the chosen backend. SQLite gets the\n // file + schema; PostgreSQL may create the target database when the\n // role authorizes it; Turso gets schema installed in the provisioned DB.\n const db = await openCliDb(cliDb(), { create: true });\n try {\n writeOut(`[wod init] database ready at ${db.path}`);\n } finally {\n await db.close();\n }\n return 0;\n }\n\n if (parsed.subcommand === 'db') {\n // Turso lifecycle: management credentials come from the environment\n // tier only; the action is the first positional, the database name the\n // second. Errors print credential-free and exit 1.\n try {\n await runDbCommand({\n action: parsed.target,\n name: parsed.target2,\n dbName: parsed.dbName,\n group: parsed.group,\n yes: parsed.yes,\n output: parsed.output,\n writeEnv: parsed.writeEnv === true,\n writersRetired: parsed.writersRetired === true,\n allowEmpty: parsed.allowEmpty === true,\n force: parsed.force === true,\n envFile: parsed.envFile,\n env: cliEnv(),\n }, { stdout: writeOut, stderr: writeErr }, io.dbDeps);\n return 0;\n } catch (error) {\n writeErr(error instanceof Error ? error.message : String(error));\n return 1;\n }\n }\n\n if (parsed.subcommand === 'server' || parsed.subcommand === 'serve' || parsed.subcommand === 'playground') {\n // 'server' is canonical; 'serve' is an accepted alias for the same branch.\n const mode = parsed.subcommand === 'playground' ? 'playground' as const : 'server' as const;\n // Lazy import: Bun-only server module must stay out of Node/browser graphs.\n const { runCliServer } = await import('./server');\n const options: CliServerOptions = { env: cliEnv() };\n if (mode === 'server') options.database = cliDb();\n if (parsed.host !== undefined) options.host = parsed.host;\n if (parsed.port !== undefined) options.port = parsed.port;\n if (parsed.dist !== undefined) options.dist = parsed.dist;\n await runCliServer(mode, options, writeOut);\n return 0;\n }\n\n writeErr(`[wod] Unknown subcommand \"${parsed.subcommand}\"`);\n return 1;\n } catch (error) {\n if (error instanceof ParseSyntaxError || error instanceof WqlSyntaxError) {\n writeErr(error.message);\n return 2;\n }\n if (error instanceof PackLoadError) {\n writeErr(error.message);\n return 3;\n }\n writeErr(`[wod] Error: ${error instanceof Error ? error.message : String(error)}`);\n return 1;\n }\n}\n"]}
|