@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
package/dist/index.d.cts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { WodWikiIRFile, StatementNode, ExecutionLog, LanguagePack } from '@bitcobblers/wod-wiki-engine';
|
|
1
|
+
import { WodWikiIRFile, StatementNode, ExecutionLog, LanguagePack, FeedTree } from '@bitcobblers/wod-wiki-engine';
|
|
2
2
|
import { INowProvider, IEffort } from '@bitcobblers/wod-wiki-lang';
|
|
3
3
|
import { QueryServiceStores, QueryResult, RowsQueryResult, FindQueryResult, PipelineResult } from '@bitcobblers/wod-wiki-wql';
|
|
4
4
|
import { EventRecord, AnalyticsDataPoint, Session, Note, BlockIndexRow, BlockRevision } from '@bitcobblers/wod-wiki-core';
|
|
5
5
|
import { IStorage } from '@bitcobblers/wod-wiki-storage';
|
|
6
6
|
import { Database } from '@bitcobblers/wod-wiki-storage/sql';
|
|
7
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Headless Parse Command Runner
|
|
@@ -187,17 +188,50 @@ declare function formatQueryOutput(ir: WodWikiIRFile<QueryResult | RowsQueryResu
|
|
|
187
188
|
* 1 - Runtime error (file missing, bad arguments, execution error)
|
|
188
189
|
* 2 - Parse / Syntax error (invalid Whiteboard Script or malformed WQL)
|
|
189
190
|
* 3 - Pack load error (failed to import or register --pack)
|
|
191
|
+
* 4 - Destructive confirmation required (missing --yes <targetId>)
|
|
190
192
|
*/
|
|
191
193
|
|
|
192
194
|
interface CliParsedArgs {
|
|
193
|
-
subcommand?: 'parse' | 'run' | 'query' | 'download' | 'export' | 'import' | 'publish' | 'build' | 'seed' | 'reset' | 'init' | 'db' | 'server' | 'serve' | 'playground' | 'init-feed' | 'skills' | 'help' | 'version';
|
|
195
|
+
subcommand?: 'parse' | 'run' | 'query' | 'download' | 'export' | 'import' | 'publish' | 'build' | 'seed' | 'reset' | 'init' | 'db' | 'server' | 'serve' | 'playground' | 'init-feed' | 'skills' | 'note' | 'journal' | 'notebook' | 'session' | 'catalog' | 'tag' | 'feed' | 'mcp' | 'tools' | 'doctor' | 'help' | 'version';
|
|
194
196
|
target?: string;
|
|
195
197
|
/** Second positional: the id (download) or file (import) after the kind. */
|
|
196
198
|
target2?: string;
|
|
199
|
+
/** Third positional for noun-verb commands (e.g. `wod note update <id> <file>`). */
|
|
200
|
+
target3?: string;
|
|
197
201
|
corpus?: string;
|
|
198
202
|
stdinLog?: boolean;
|
|
199
203
|
stdinFacts?: boolean;
|
|
200
204
|
format: OutputFormat;
|
|
205
|
+
/** Emit structured JSON envelope on stdout across noun-verb and legacy commands. */
|
|
206
|
+
json?: boolean;
|
|
207
|
+
/** Skip database persistence during `wod parse --no-save`. */
|
|
208
|
+
noSave?: boolean;
|
|
209
|
+
/** Restrict `wod server` / `wod mcp` to Tier 0 read-only tools. */
|
|
210
|
+
mcpReadonly?: boolean;
|
|
211
|
+
/** Validate WQL syntax/schema without executing against data (`wod query --validate-only`). */
|
|
212
|
+
validateOnly?: boolean;
|
|
213
|
+
/** Target a running `wod server` HTTP API instead of opening a local DB (`--server <url>`). */
|
|
214
|
+
serverUrl?: string;
|
|
215
|
+
/** Explicit Note / Block / Notebook / Date / Filter options for agent noun-verb commands. */
|
|
216
|
+
noteId?: string;
|
|
217
|
+
sourceNoteId?: string;
|
|
218
|
+
blockId?: string;
|
|
219
|
+
notebook?: string;
|
|
220
|
+
date?: string;
|
|
221
|
+
title?: string;
|
|
222
|
+
description?: string;
|
|
223
|
+
markdown?: string;
|
|
224
|
+
search?: string;
|
|
225
|
+
tag?: string;
|
|
226
|
+
tags: string[];
|
|
227
|
+
aliases: string[];
|
|
228
|
+
setPairs: string[];
|
|
229
|
+
slug?: string;
|
|
230
|
+
category?: string;
|
|
231
|
+
tagType?: string;
|
|
232
|
+
url?: string;
|
|
233
|
+
feedId?: string;
|
|
234
|
+
limit?: number;
|
|
201
235
|
output?: string;
|
|
202
236
|
packs: string[];
|
|
203
237
|
sport?: string;
|
|
@@ -401,6 +435,8 @@ interface CliServerOptions {
|
|
|
401
435
|
port?: string;
|
|
402
436
|
/** Explicit dist directory (flag or PLAYGROUND_DIST); must already exist. */
|
|
403
437
|
dist?: string;
|
|
438
|
+
/** Restrict `/api/mcp` to Tier 0 read-only tools. */
|
|
439
|
+
mcpReadonly?: boolean;
|
|
404
440
|
/** Merged CLI environment (process env + .env). */
|
|
405
441
|
env: Record<string, string | undefined>;
|
|
406
442
|
}
|
|
@@ -411,4 +447,33 @@ interface CliServerOptions {
|
|
|
411
447
|
*/
|
|
412
448
|
declare function runCliServer(mode: CliServerMode, options: CliServerOptions, writeOut: WriteOut): Promise<void>;
|
|
413
449
|
|
|
414
|
-
|
|
450
|
+
interface CreateWodMcpServerOptions {
|
|
451
|
+
storage: IStorage;
|
|
452
|
+
feedTree?: FeedTree;
|
|
453
|
+
baseUrl?: string;
|
|
454
|
+
readonly?: boolean;
|
|
455
|
+
onMutated?: () => Promise<void> | void;
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Creates a configured official `@modelcontextprotocol/sdk` `McpServer`
|
|
459
|
+
* exposing all 22 WOD Wiki domain tools (or read-only Tier 0 tools when
|
|
460
|
+
* `readonly: true`), `wod://*` resources, and guided workout prompts.
|
|
461
|
+
*/
|
|
462
|
+
declare function createWodMcpServer(options: CreateWodMcpServerOptions): McpServer;
|
|
463
|
+
|
|
464
|
+
interface HandleMcpHttpOptions {
|
|
465
|
+
db: Database;
|
|
466
|
+
feedTree: FeedTree;
|
|
467
|
+
baseUrl: string;
|
|
468
|
+
readonly?: boolean;
|
|
469
|
+
authToken?: string;
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* Handles Web-Standard Streamable HTTP MCP requests at `/api/mcp`.
|
|
473
|
+
* Uses stateless per-request `WebStandardStreamableHTTPServerTransport` with
|
|
474
|
+
* `enableJsonResponse: true` so both official MCP SDK clients and plain HTTP
|
|
475
|
+
* JSON-RPC clients work out of the box without sticky session requirements.
|
|
476
|
+
*/
|
|
477
|
+
declare function handleMcpHttpRequest(request: Request, options: HandleMcpHttpOptions): Promise<Response>;
|
|
478
|
+
|
|
479
|
+
export { type CliDatabaseConfig, type CliDb, type CliParsedArgs, type CliServerMode, type CliServerOptions, type CreateWodMcpServerOptions, type HandleMcpHttpOptions, type OutputFormat, PackLoadError, type ParseOptions, ParseSyntaxError, type QueryCliOptions, type RunOptions, WqlSyntaxError, cliMain, createWodMcpServer, formatExecutionOutput, formatParseOutput, formatQueryOutput, handleMcpHttpRequest, loadCliEnvironment, loadLanguagePack, loadQueryData, openCliDb, parseCliArgs, readStdin, resolveDatabaseConfig, runCliServer, runExecution, runParse, runQueryCli };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { WodWikiIRFile, StatementNode, ExecutionLog, LanguagePack } from '@bitcobblers/wod-wiki-engine';
|
|
1
|
+
import { WodWikiIRFile, StatementNode, ExecutionLog, LanguagePack, FeedTree } from '@bitcobblers/wod-wiki-engine';
|
|
2
2
|
import { INowProvider, IEffort } from '@bitcobblers/wod-wiki-lang';
|
|
3
3
|
import { QueryServiceStores, QueryResult, RowsQueryResult, FindQueryResult, PipelineResult } from '@bitcobblers/wod-wiki-wql';
|
|
4
4
|
import { EventRecord, AnalyticsDataPoint, Session, Note, BlockIndexRow, BlockRevision } from '@bitcobblers/wod-wiki-core';
|
|
5
5
|
import { IStorage } from '@bitcobblers/wod-wiki-storage';
|
|
6
6
|
import { Database } from '@bitcobblers/wod-wiki-storage/sql';
|
|
7
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Headless Parse Command Runner
|
|
@@ -187,17 +188,50 @@ declare function formatQueryOutput(ir: WodWikiIRFile<QueryResult | RowsQueryResu
|
|
|
187
188
|
* 1 - Runtime error (file missing, bad arguments, execution error)
|
|
188
189
|
* 2 - Parse / Syntax error (invalid Whiteboard Script or malformed WQL)
|
|
189
190
|
* 3 - Pack load error (failed to import or register --pack)
|
|
191
|
+
* 4 - Destructive confirmation required (missing --yes <targetId>)
|
|
190
192
|
*/
|
|
191
193
|
|
|
192
194
|
interface CliParsedArgs {
|
|
193
|
-
subcommand?: 'parse' | 'run' | 'query' | 'download' | 'export' | 'import' | 'publish' | 'build' | 'seed' | 'reset' | 'init' | 'db' | 'server' | 'serve' | 'playground' | 'init-feed' | 'skills' | 'help' | 'version';
|
|
195
|
+
subcommand?: 'parse' | 'run' | 'query' | 'download' | 'export' | 'import' | 'publish' | 'build' | 'seed' | 'reset' | 'init' | 'db' | 'server' | 'serve' | 'playground' | 'init-feed' | 'skills' | 'note' | 'journal' | 'notebook' | 'session' | 'catalog' | 'tag' | 'feed' | 'mcp' | 'tools' | 'doctor' | 'help' | 'version';
|
|
194
196
|
target?: string;
|
|
195
197
|
/** Second positional: the id (download) or file (import) after the kind. */
|
|
196
198
|
target2?: string;
|
|
199
|
+
/** Third positional for noun-verb commands (e.g. `wod note update <id> <file>`). */
|
|
200
|
+
target3?: string;
|
|
197
201
|
corpus?: string;
|
|
198
202
|
stdinLog?: boolean;
|
|
199
203
|
stdinFacts?: boolean;
|
|
200
204
|
format: OutputFormat;
|
|
205
|
+
/** Emit structured JSON envelope on stdout across noun-verb and legacy commands. */
|
|
206
|
+
json?: boolean;
|
|
207
|
+
/** Skip database persistence during `wod parse --no-save`. */
|
|
208
|
+
noSave?: boolean;
|
|
209
|
+
/** Restrict `wod server` / `wod mcp` to Tier 0 read-only tools. */
|
|
210
|
+
mcpReadonly?: boolean;
|
|
211
|
+
/** Validate WQL syntax/schema without executing against data (`wod query --validate-only`). */
|
|
212
|
+
validateOnly?: boolean;
|
|
213
|
+
/** Target a running `wod server` HTTP API instead of opening a local DB (`--server <url>`). */
|
|
214
|
+
serverUrl?: string;
|
|
215
|
+
/** Explicit Note / Block / Notebook / Date / Filter options for agent noun-verb commands. */
|
|
216
|
+
noteId?: string;
|
|
217
|
+
sourceNoteId?: string;
|
|
218
|
+
blockId?: string;
|
|
219
|
+
notebook?: string;
|
|
220
|
+
date?: string;
|
|
221
|
+
title?: string;
|
|
222
|
+
description?: string;
|
|
223
|
+
markdown?: string;
|
|
224
|
+
search?: string;
|
|
225
|
+
tag?: string;
|
|
226
|
+
tags: string[];
|
|
227
|
+
aliases: string[];
|
|
228
|
+
setPairs: string[];
|
|
229
|
+
slug?: string;
|
|
230
|
+
category?: string;
|
|
231
|
+
tagType?: string;
|
|
232
|
+
url?: string;
|
|
233
|
+
feedId?: string;
|
|
234
|
+
limit?: number;
|
|
201
235
|
output?: string;
|
|
202
236
|
packs: string[];
|
|
203
237
|
sport?: string;
|
|
@@ -401,6 +435,8 @@ interface CliServerOptions {
|
|
|
401
435
|
port?: string;
|
|
402
436
|
/** Explicit dist directory (flag or PLAYGROUND_DIST); must already exist. */
|
|
403
437
|
dist?: string;
|
|
438
|
+
/** Restrict `/api/mcp` to Tier 0 read-only tools. */
|
|
439
|
+
mcpReadonly?: boolean;
|
|
404
440
|
/** Merged CLI environment (process env + .env). */
|
|
405
441
|
env: Record<string, string | undefined>;
|
|
406
442
|
}
|
|
@@ -411,4 +447,33 @@ interface CliServerOptions {
|
|
|
411
447
|
*/
|
|
412
448
|
declare function runCliServer(mode: CliServerMode, options: CliServerOptions, writeOut: WriteOut): Promise<void>;
|
|
413
449
|
|
|
414
|
-
|
|
450
|
+
interface CreateWodMcpServerOptions {
|
|
451
|
+
storage: IStorage;
|
|
452
|
+
feedTree?: FeedTree;
|
|
453
|
+
baseUrl?: string;
|
|
454
|
+
readonly?: boolean;
|
|
455
|
+
onMutated?: () => Promise<void> | void;
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Creates a configured official `@modelcontextprotocol/sdk` `McpServer`
|
|
459
|
+
* exposing all 22 WOD Wiki domain tools (or read-only Tier 0 tools when
|
|
460
|
+
* `readonly: true`), `wod://*` resources, and guided workout prompts.
|
|
461
|
+
*/
|
|
462
|
+
declare function createWodMcpServer(options: CreateWodMcpServerOptions): McpServer;
|
|
463
|
+
|
|
464
|
+
interface HandleMcpHttpOptions {
|
|
465
|
+
db: Database;
|
|
466
|
+
feedTree: FeedTree;
|
|
467
|
+
baseUrl: string;
|
|
468
|
+
readonly?: boolean;
|
|
469
|
+
authToken?: string;
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* Handles Web-Standard Streamable HTTP MCP requests at `/api/mcp`.
|
|
473
|
+
* Uses stateless per-request `WebStandardStreamableHTTPServerTransport` with
|
|
474
|
+
* `enableJsonResponse: true` so both official MCP SDK clients and plain HTTP
|
|
475
|
+
* JSON-RPC clients work out of the box without sticky session requirements.
|
|
476
|
+
*/
|
|
477
|
+
declare function handleMcpHttpRequest(request: Request, options: HandleMcpHttpOptions): Promise<Response>;
|
|
478
|
+
|
|
479
|
+
export { type CliDatabaseConfig, type CliDb, type CliParsedArgs, type CliServerMode, type CliServerOptions, type CreateWodMcpServerOptions, type HandleMcpHttpOptions, type OutputFormat, PackLoadError, type ParseOptions, ParseSyntaxError, type QueryCliOptions, type RunOptions, WqlSyntaxError, cliMain, createWodMcpServer, formatExecutionOutput, formatParseOutput, formatQueryOutput, handleMcpHttpRequest, loadCliEnvironment, loadLanguagePack, loadQueryData, openCliDb, parseCliArgs, readStdin, resolveDatabaseConfig, runCliServer, runExecution, runParse, runQueryCli };
|
package/dist/index.mjs
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { createRequire } from 'module';
|
|
2
|
-
export { PackLoadError, ParseSyntaxError, WqlSyntaxError, cliMain, formatExecutionOutput, formatParseOutput, formatQueryOutput, loadCliEnvironment, loadLanguagePack, loadQueryData, parseCliArgs, readStdin, resolveDatabaseConfig, runExecution, runParse, runQueryCli } from './chunk-
|
|
3
|
-
import './chunk-5NNSHRMZ.mjs';
|
|
2
|
+
export { PackLoadError, ParseSyntaxError, WqlSyntaxError, cliMain, formatExecutionOutput, formatParseOutput, formatQueryOutput, loadCliEnvironment, loadLanguagePack, loadQueryData, parseCliArgs, readStdin, resolveDatabaseConfig, runExecution, runParse, runQueryCli } from './chunk-KXNK4PIB.mjs';
|
|
4
3
|
import './chunk-KGP6STLY.mjs';
|
|
5
|
-
export { runCliServer } from './chunk-
|
|
6
|
-
|
|
4
|
+
export { runCliServer } from './chunk-AS6OJRNH.mjs';
|
|
5
|
+
export { handleMcpHttpRequest } from './chunk-WLCUM7KO.mjs';
|
|
6
|
+
export { createWodMcpServer } from './chunk-ZZVL6UGV.mjs';
|
|
7
7
|
export { openCliDb } from './chunk-FUISPA7A.mjs';
|
|
8
|
+
import './chunk-T7VB7PPO.mjs';
|
|
8
9
|
import './chunk-QUUX6NX2.mjs';
|
|
9
10
|
|
|
10
11
|
if (typeof globalThis.require === 'undefined') {
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { createRequire } from 'module';
|
|
2
|
+
import { createWodMcpServer } from './chunk-ZZVL6UGV.mjs';
|
|
3
|
+
import { openCliDb, NodeFsFeedTree } from './chunk-FUISPA7A.mjs';
|
|
4
|
+
import './chunk-T7VB7PPO.mjs';
|
|
5
|
+
import './chunk-QUUX6NX2.mjs';
|
|
6
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
7
|
+
import { ApiStorage } from '@bitcobblers/wod-wiki-storage';
|
|
8
|
+
import { MemoryFeedTree } from '@bitcobblers/wod-wiki-engine';
|
|
9
|
+
|
|
10
|
+
if (typeof globalThis.require === 'undefined') {
|
|
11
|
+
try { globalThis.require = createRequire(import.meta.url); } catch {}
|
|
12
|
+
}
|
|
13
|
+
async function runMcpStdio(options) {
|
|
14
|
+
const logErr = options.writeErr ?? ((msg) => process.stderr.write(`${msg}
|
|
15
|
+
`));
|
|
16
|
+
let dbHandle;
|
|
17
|
+
let storage;
|
|
18
|
+
let feedTree;
|
|
19
|
+
let baseUrl = "";
|
|
20
|
+
if (options.serverUrl) {
|
|
21
|
+
const trimmed = options.serverUrl.replace(/\/+$/, "");
|
|
22
|
+
const apiBase = trimmed.endsWith("/api") ? trimmed : `${trimmed}/api`;
|
|
23
|
+
storage = new ApiStorage(apiBase);
|
|
24
|
+
feedTree = new MemoryFeedTree();
|
|
25
|
+
baseUrl = trimmed.endsWith("/api") ? trimmed.slice(0, -4) : trimmed;
|
|
26
|
+
} else {
|
|
27
|
+
if (!options.database) {
|
|
28
|
+
logErr("[wod mcp] Error: Missing database configuration");
|
|
29
|
+
return 1;
|
|
30
|
+
}
|
|
31
|
+
dbHandle = await openCliDb(options.database);
|
|
32
|
+
storage = dbHandle.storage;
|
|
33
|
+
feedTree = options.database.kind === "sqlite" ? new NodeFsFeedTree(`${options.database.path}.feed`) : new MemoryFeedTree();
|
|
34
|
+
}
|
|
35
|
+
const server = createWodMcpServer({
|
|
36
|
+
storage,
|
|
37
|
+
feedTree,
|
|
38
|
+
baseUrl,
|
|
39
|
+
readonly: options.readonly
|
|
40
|
+
});
|
|
41
|
+
const transport = new StdioServerTransport();
|
|
42
|
+
await server.connect(transport);
|
|
43
|
+
return new Promise((resolve) => {
|
|
44
|
+
let closed = false;
|
|
45
|
+
const finish = async (code) => {
|
|
46
|
+
if (closed) return;
|
|
47
|
+
closed = true;
|
|
48
|
+
await server.close().catch(() => {
|
|
49
|
+
});
|
|
50
|
+
if (dbHandle) {
|
|
51
|
+
await dbHandle.close().catch(() => {
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
resolve(code);
|
|
55
|
+
};
|
|
56
|
+
transport.onclose = () => {
|
|
57
|
+
void finish(0);
|
|
58
|
+
};
|
|
59
|
+
transport.onerror = (err) => {
|
|
60
|
+
logErr(`[wod mcp] Transport error: ${err.message}`);
|
|
61
|
+
};
|
|
62
|
+
process.once("SIGINT", () => {
|
|
63
|
+
void finish(0);
|
|
64
|
+
});
|
|
65
|
+
process.once("SIGTERM", () => {
|
|
66
|
+
void finish(0);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export { runMcpStdio };
|
|
72
|
+
//# sourceMappingURL=mcp-D6QARYOG.mjs.map
|
|
73
|
+
//# sourceMappingURL=mcp-D6QARYOG.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/mcp.ts"],"names":[],"mappings":"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","file":"mcp-D6QARYOG.mjs","sourcesContent":["import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { ApiStorage, type IStorage } from '@bitcobblers/wod-wiki-storage';\nimport { MemoryFeedTree, type FeedTree } from '@bitcobblers/wod-wiki-engine';\nimport type { CliDatabaseConfig } from './config';\nimport { openCliDb, type CliDb } from './db';\nimport { NodeFsFeedTree } from './nodeFeedTree';\nimport { createWodMcpServer } from '../mcp/createWodMcpServer';\n\nexport interface RunMcpStdioOptions {\n database?: CliDatabaseConfig;\n serverUrl?: string;\n readonly?: boolean;\n writeErr?: (text: string) => void;\n}\n\n/**\n * Starts the `wod mcp` stdio server using `@modelcontextprotocol/sdk`'s\n * `StdioServerTransport`. All diagnostic messages go to `stderr` so `stdout`\n * stays strictly reserved for JSON-RPC frames.\n */\nexport async function runMcpStdio(options: RunMcpStdioOptions): Promise<number> {\n const logErr = options.writeErr ?? ((msg: string) => process.stderr.write(`${msg}\\n`));\n\n let dbHandle: CliDb | undefined;\n let storage: IStorage;\n let feedTree: FeedTree;\n let baseUrl = '';\n\n if (options.serverUrl) {\n const trimmed = options.serverUrl.replace(/\\/+$/, '');\n const apiBase = trimmed.endsWith('/api') ? trimmed : `${trimmed}/api`;\n storage = new ApiStorage(apiBase);\n feedTree = new MemoryFeedTree();\n baseUrl = trimmed.endsWith('/api') ? trimmed.slice(0, -4) : trimmed;\n } else {\n if (!options.database) {\n logErr('[wod mcp] Error: Missing database configuration');\n return 1;\n }\n dbHandle = await openCliDb(options.database);\n storage = dbHandle.storage;\n feedTree =\n options.database.kind === 'sqlite'\n ? new NodeFsFeedTree(`${options.database.path}.feed`)\n : new MemoryFeedTree();\n }\n\n const server = createWodMcpServer({\n storage,\n feedTree,\n baseUrl,\n readonly: options.readonly,\n });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n return new Promise<number>((resolve) => {\n let closed = false;\n const finish = async (code: number) => {\n if (closed) return;\n closed = true;\n await server.close().catch(() => {});\n if (dbHandle) {\n await dbHandle.close().catch(() => {});\n }\n resolve(code);\n };\n\n transport.onclose = () => {\n void finish(0);\n };\n transport.onerror = (err) => {\n logErr(`[wod mcp] Transport error: ${err.message}`);\n };\n process.once('SIGINT', () => {\n void finish(0);\n });\n process.once('SIGTERM', () => {\n void finish(0);\n });\n });\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire } from 'module';
|
|
2
|
-
import { VERSION } from './chunk-
|
|
2
|
+
import { VERSION } from './chunk-T7VB7PPO.mjs';
|
|
3
3
|
import './chunk-QUUX6NX2.mjs';
|
|
4
4
|
import { mkdirSync, writeFileSync, rmSync } from 'fs';
|
|
5
5
|
import { resolve, join, dirname } from 'path';
|
|
@@ -201,5 +201,5 @@ function scaffoldFeed(name, opts = {}) {
|
|
|
201
201
|
}
|
|
202
202
|
|
|
203
203
|
export { scaffoldFeed, validateFeedName };
|
|
204
|
-
//# sourceMappingURL=scaffoldFeed-
|
|
205
|
-
//# sourceMappingURL=scaffoldFeed-
|
|
204
|
+
//# sourceMappingURL=scaffoldFeed-D55NINVJ.mjs.map
|
|
205
|
+
//# sourceMappingURL=scaffoldFeed-D55NINVJ.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/scaffoldFeed.ts"],"names":[],"mappings":"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","file":"scaffoldFeed-
|
|
1
|
+
{"version":3,"sources":["../src/cli/scaffoldFeed.ts"],"names":[],"mappings":"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","file":"scaffoldFeed-D55NINVJ.mjs","sourcesContent":["/**\n * `wod init-feed <name>` — scaffold a ready-to-publish WOD Wiki feed\n * repository skeleton (the publisher-repository contract in\n * docs/adrs/0001-feed-seed-data-contract.md): a markdown notebooks example,\n * package.json, GitHub Actions Pages workflow, README. Creates a new\n * directory only; refuses an existing destination without touching it.\n *\n * Lazily imported by cli/runner.ts (dynamic import), so static node:fs/node:path\n * imports stay out of browser bundles.\n */\nimport { mkdirSync, rmSync, writeFileSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\nimport { VERSION } from '../version';\n\nexport interface ScaffoldFeedResult {\n /** Absolute path of the created feed root. */\n dir: string;\n /** Created files, POSIX-relative to the feed root. */\n files: string[];\n}\n\n/** npm package name + single-directory-segment validation for `<name>`. */\nexport function validateFeedName(name: string): string {\n if (name.length === 0 || name === '.' || name === '..') {\n throw new Error('Feed name must be a single non-empty directory name');\n }\n if (name.includes('/') || name.includes('\\\\') || name.includes('\\0')) {\n throw new Error(`Invalid feed name '${name}': must be a single directory name (no path separators or traversal)`);\n }\n if (/^(?:[A-Za-z]:)?[/\\\\]/.test(name)) {\n throw new Error(`Invalid feed name '${name}': absolute paths are not allowed`);\n }\n if (name.length > 214 || !/^[a-z0-9][a-z0-9._-]*$/.test(name)) {\n throw new Error(\n `Invalid feed name '${name}': must be a valid npm package name ` +\n '(lowercase letters, digits, dots, hyphens, underscores; no leading dot/hyphen)',\n );\n }\n return name;\n}\n\nconst publishWorkflow = (): string => `name: Publish feed\n\n# Compile the feed with the wod CLI and deploy dist/ to GitHub Pages.\n# Requires Pages enabled: repo Settings → Pages → Source: \"GitHub Actions\".\n\non:\n push:\n branches: [main]\n workflow_dispatch:\n\npermissions:\n contents: read\n pages: write\n id-token: write\n\nconcurrency:\n group: pages\n cancel-in-progress: true\n\njobs:\n publish:\n runs-on: ubuntu-latest\n environment:\n name: github-pages\n url: \\${{ steps.deployment.outputs.page_url }}\n steps:\n - uses: actions/checkout@v4\n with:\n # Full history: seed manifest version stamps derive from git commit count.\n fetch-depth: 0\n\n - name: Set up Bun\n uses: oven-sh/setup-bun@v2\n with:\n bun-version: 1.4.x\n\n - name: Install dependencies\n run: bun install\n\n - name: Build seed\n run: bunx wod build . --output dist\n\n - uses: actions/configure-pages@v5\n\n - name: Upload dist\n uses: actions/upload-pages-artifact@v3\n with:\n path: dist\n\n - id: deployment\n uses: actions/deploy-pages@v4\n`;\n\nconst feedReadme = (name: string): string => `# ${name}\n\nExample benchmark notebook. Each \\`.md\\` file in this directory becomes part of\nthe \\`example\\` notebook chunk; \\`README.md\\` is the notebook's landing page.\n\nAdd one file per workout:\n\n\\`\\`\\`\\`markdown\n---\ntitle: My workout\ndate: 2026-01-01\n---\n\n# My workout\n\n\\`\\`\\`time\n(21-15-9)\n Thrusters @95lb\n Pull-ups\n\\`\\`\\`\n\\`\\`\\`\\`\n\nThe \\`date:\\` frontmatter field sets the workout's chronological placement\n(regardless of filename or directory).\n`;\n\nconst exampleWorkout = (date: string): string => `---\ntitle: Morning session\ndate: ${date}\n---\n\n# Morning session\n\n\\`\\`\\`time\n(21-15-9)\n Thrusters @95lb\n Pull-ups\n\\`\\`\\`\n`;\n\nconst repoReadme = (name: string): string => `# ${name}\n\nA [WOD Wiki](https://github.com/bitcobblers/wod-wiki) workout feed: plain\nMarkdown workouts compiled to static, version-stamped seed chunks and published\nvia GitHub Pages.\n\n## Develop\n\n\\`\\`\\`sh\nbun install\nbunx wod build . --output dist\n\\`\\`\\`\n\nWorkouts live under \\`markdown/\\` — this scaffold starts with one example\nfeed. Validate everything with \\`bunx wod build\\`: it gates every file on\nthe Whiteboard grammar and corpus layout before writing \\`dist/\\`.\n\n## Publish\n\nPush to GitHub and enable Pages (**Settings → Pages → Source: GitHub\nActions**). The bundled workflow (\\`.github/workflows/publish-feed.yml\\`)\nbuilds the feed on every push to \\`main\\` and deploys \\`dist/\\`.\n\n## Share\n\nOnce published, anyone can subscribe to this feed from a WOD Wiki instance\nat:\n\n\\`\\`\\`\n<app-url>/subscribe?source=<url-encoded published feed URL>\n\\`\\`\\`\n\nFor \\`owner\\`/\\`repo\\` on GitHub Pages the feed URL is the deployed\ndirectory, \\`https://owner.github.io/repo/\\`, e.g.\n\\`/subscribe?source=https%3A%2F%2Fowner.github.io%2Frepo%2F\\`.\n`;\n\n/**\n * Scaffold a new feed repository at `<cwd>/<name>`. Throws when the name is\n * invalid or the destination already exists; partial failure removes created files.\n */\nexport function scaffoldFeed(name: string, opts: { cwd?: string } = {}): ScaffoldFeedResult {\n validateFeedName(name);\n const dir = resolve(opts.cwd ?? process.cwd(), name);\n // Atomic acquire: EEXIST is the refusal signal — no exists-check/create race,\n // and an existing destination is never removed or written.\n try {\n mkdirSync(dir);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'EEXIST') {\n throw new Error(`Refusing to overwrite '${dir}': destination already exists`, { cause: error });\n }\n throw error;\n }\n\n const date = new Date().toISOString().slice(0, 10);\n const files: Array<[rel: string, content: string]> = [\n ['package.json', `${JSON.stringify(\n {\n name,\n version: '0.1.0',\n private: true,\n type: 'module',\n description: `WOD Wiki workout feed: ${name}`,\n scripts: {\n build: 'wod build . --output dist',\n },\n devDependencies: {\n '@bitcobblers/wod-wiki-tools': `^${VERSION}`,\n },\n },\n null,\n 2,\n )}\\n`],\n ['.gitignore', 'node_modules/\\ndist/\\n'],\n ['.github/workflows/publish-feed.yml', publishWorkflow()],\n ['markdown/notebooks/example/README.md', feedReadme(name)],\n [`markdown/notebooks/example/morning-session.md`, exampleWorkout(date)],\n ['README.md', repoReadme(name)],\n ];\n\n try {\n for (const [rel, content] of files) {\n const target = join(dir, rel);\n mkdirSync(dirname(target), { recursive: true });\n writeFileSync(target, content, 'utf-8');\n }\n } catch (error) {\n rmSync(dir, { recursive: true, force: true });\n throw error;\n }\n return { dir, files: files.map(([rel]) => rel) };\n}\n"]}
|
package/dist/server/app.cjs
CHANGED
|
@@ -7,7 +7,11 @@ var stream = require('stream');
|
|
|
7
7
|
var sql = require('@bitcobblers/wod-wiki-storage/sql');
|
|
8
8
|
var wodWikiStorage = require('@bitcobblers/wod-wiki-storage');
|
|
9
9
|
var wodWikiEngine = require('@bitcobblers/wod-wiki-engine');
|
|
10
|
+
var agent = require('@bitcobblers/wod-wiki-engine/agent');
|
|
10
11
|
require('@bitcobblers/wod-wiki-lang');
|
|
12
|
+
var webStandardStreamableHttp_js = require('@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js');
|
|
13
|
+
var zod = require('zod');
|
|
14
|
+
var mcp_js = require('@modelcontextprotocol/sdk/server/mcp.js');
|
|
11
15
|
|
|
12
16
|
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
13
17
|
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
@@ -92,6 +96,217 @@ var NodeFsFeedTree = class {
|
|
|
92
96
|
}
|
|
93
97
|
};
|
|
94
98
|
|
|
99
|
+
// src/version.ts
|
|
100
|
+
var VERSION = "0.54.2205";
|
|
101
|
+
|
|
102
|
+
// src/mcp/createWodMcpServer.ts
|
|
103
|
+
function createWodMcpServer(options) {
|
|
104
|
+
const server = new mcp_js.McpServer(
|
|
105
|
+
{
|
|
106
|
+
name: "wod-wiki",
|
|
107
|
+
version: VERSION
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
capabilities: {
|
|
111
|
+
tools: {},
|
|
112
|
+
resources: {},
|
|
113
|
+
prompts: {}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
);
|
|
117
|
+
const ctx = {
|
|
118
|
+
storage: options.storage,
|
|
119
|
+
feedTree: options.feedTree,
|
|
120
|
+
baseUrl: options.baseUrl,
|
|
121
|
+
onMutated: options.onMutated
|
|
122
|
+
// Over MCP HTTP/stdio, explicit confirm="<targetId>" inside tool arguments
|
|
123
|
+
// satisfies Tier 2 confirmation; when omitted, requireAgentConfirmation throws
|
|
124
|
+
// an actionable error instructing the caller to pass confirm="<targetId>".
|
|
125
|
+
};
|
|
126
|
+
for (const spec of agent.DOMAIN_AGENT_TOOLS) {
|
|
127
|
+
if (options.readonly && spec.tier !== 0) {
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
server.registerTool(
|
|
131
|
+
spec.name,
|
|
132
|
+
{
|
|
133
|
+
title: spec.title,
|
|
134
|
+
description: spec.description,
|
|
135
|
+
inputSchema: spec.inputSchema,
|
|
136
|
+
annotations: spec.annotations
|
|
137
|
+
},
|
|
138
|
+
async (args) => {
|
|
139
|
+
try {
|
|
140
|
+
const parsed = spec.inputSchema.parse(args ?? {});
|
|
141
|
+
const result = await spec.execute(parsed, ctx);
|
|
142
|
+
return {
|
|
143
|
+
content: [
|
|
144
|
+
{
|
|
145
|
+
type: "text",
|
|
146
|
+
text: JSON.stringify(result, null, 2)
|
|
147
|
+
}
|
|
148
|
+
],
|
|
149
|
+
structuredContent: result
|
|
150
|
+
};
|
|
151
|
+
} catch (err) {
|
|
152
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
153
|
+
return {
|
|
154
|
+
isError: true,
|
|
155
|
+
content: [
|
|
156
|
+
{
|
|
157
|
+
type: "text",
|
|
158
|
+
text: message
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
for (const resource of agent.AGENT_STATIC_RESOURCES) {
|
|
167
|
+
server.registerResource(
|
|
168
|
+
resource.name,
|
|
169
|
+
resource.uri,
|
|
170
|
+
{
|
|
171
|
+
description: resource.description,
|
|
172
|
+
mimeType: resource.mimeType
|
|
173
|
+
},
|
|
174
|
+
async (uri) => {
|
|
175
|
+
const res = await agent.readAgentResource(uri.toString(), ctx);
|
|
176
|
+
return {
|
|
177
|
+
contents: [
|
|
178
|
+
{
|
|
179
|
+
uri: res.uri,
|
|
180
|
+
mimeType: res.mimeType,
|
|
181
|
+
text: res.text
|
|
182
|
+
}
|
|
183
|
+
]
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
for (const tmpl of agent.AGENT_RESOURCE_TEMPLATES) {
|
|
189
|
+
const template = new mcp_js.ResourceTemplate(tmpl.uriTemplate, { list: void 0 });
|
|
190
|
+
server.registerResource(
|
|
191
|
+
tmpl.name,
|
|
192
|
+
template,
|
|
193
|
+
{
|
|
194
|
+
description: tmpl.description,
|
|
195
|
+
mimeType: tmpl.mimeType
|
|
196
|
+
},
|
|
197
|
+
async (uri) => {
|
|
198
|
+
const res = await agent.readAgentResource(uri.toString(), ctx);
|
|
199
|
+
return {
|
|
200
|
+
contents: [
|
|
201
|
+
{
|
|
202
|
+
uri: res.uri,
|
|
203
|
+
mimeType: res.mimeType,
|
|
204
|
+
text: res.text
|
|
205
|
+
}
|
|
206
|
+
]
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
for (const prompt of agent.AGENT_PROMPTS) {
|
|
212
|
+
const argsShape = {};
|
|
213
|
+
for (const arg of prompt.arguments) {
|
|
214
|
+
argsShape[arg.name] = arg.required ? zod.z.string().describe(arg.description) : zod.z.string().optional().describe(arg.description);
|
|
215
|
+
}
|
|
216
|
+
server.registerPrompt(
|
|
217
|
+
prompt.name,
|
|
218
|
+
{
|
|
219
|
+
title: prompt.title,
|
|
220
|
+
description: prompt.description,
|
|
221
|
+
argsSchema: argsShape
|
|
222
|
+
},
|
|
223
|
+
async (args) => {
|
|
224
|
+
const rendered = agent.renderAgentPrompt(prompt.name, args);
|
|
225
|
+
return {
|
|
226
|
+
description: rendered.description,
|
|
227
|
+
messages: rendered.messages
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
);
|
|
231
|
+
}
|
|
232
|
+
return server;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// src/mcp/httpHandler.ts
|
|
236
|
+
var MCP_CORS_HEADERS = {
|
|
237
|
+
"access-control-allow-origin": "*",
|
|
238
|
+
"access-control-allow-methods": "GET, POST, DELETE, OPTIONS",
|
|
239
|
+
"access-control-allow-headers": "Content-Type, Accept, Authorization, Mcp-Session-Id, MCP-Protocol-Version, Last-Event-ID",
|
|
240
|
+
"access-control-expose-headers": "Mcp-Session-Id, MCP-Protocol-Version"
|
|
241
|
+
};
|
|
242
|
+
function withMcpCors(response) {
|
|
243
|
+
const headers = new Headers(response.headers);
|
|
244
|
+
for (const [k, v] of Object.entries(MCP_CORS_HEADERS)) {
|
|
245
|
+
if (!headers.has(k)) {
|
|
246
|
+
headers.set(k, v);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return new Response(response.body, {
|
|
250
|
+
status: response.status,
|
|
251
|
+
statusText: response.statusText,
|
|
252
|
+
headers
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
function normalizeAcceptForPost(request) {
|
|
256
|
+
if (request.method !== "POST") return request;
|
|
257
|
+
const accept = request.headers.get("accept") ?? "";
|
|
258
|
+
if (accept.includes("application/json") && accept.includes("text/event-stream")) {
|
|
259
|
+
return request;
|
|
260
|
+
}
|
|
261
|
+
const headers = new Headers(request.headers);
|
|
262
|
+
headers.set("accept", "application/json, text/event-stream");
|
|
263
|
+
return new Request(request, { headers });
|
|
264
|
+
}
|
|
265
|
+
async function handleMcpHttpRequest(request, options) {
|
|
266
|
+
if (request.method === "OPTIONS") {
|
|
267
|
+
return new Response(null, { status: 204, headers: MCP_CORS_HEADERS });
|
|
268
|
+
}
|
|
269
|
+
const expectedToken = options.authToken ?? process.env.WOD_MCP_TOKEN?.trim();
|
|
270
|
+
if (expectedToken) {
|
|
271
|
+
const authHeader = request.headers.get("authorization") ?? "";
|
|
272
|
+
const bearer = authHeader.startsWith("Bearer ") ? authHeader.slice("Bearer ".length).trim() : "";
|
|
273
|
+
if (bearer !== expectedToken) {
|
|
274
|
+
return withMcpCors(
|
|
275
|
+
new Response(
|
|
276
|
+
JSON.stringify({
|
|
277
|
+
jsonrpc: "2.0",
|
|
278
|
+
error: { code: -32001, message: "Unauthorized: missing or invalid Bearer token" },
|
|
279
|
+
id: null
|
|
280
|
+
}),
|
|
281
|
+
{ status: 401, headers: { "content-type": "application/json" } }
|
|
282
|
+
)
|
|
283
|
+
);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
const storage = new sql.SqlStorage(options.db);
|
|
287
|
+
const server = createWodMcpServer({
|
|
288
|
+
storage,
|
|
289
|
+
feedTree: options.feedTree,
|
|
290
|
+
baseUrl: options.baseUrl,
|
|
291
|
+
readonly: options.readonly ?? process.env.WOD_MCP_READONLY === "1"
|
|
292
|
+
});
|
|
293
|
+
const transport = new webStandardStreamableHttp_js.WebStandardStreamableHTTPServerTransport({
|
|
294
|
+
sessionIdGenerator: void 0,
|
|
295
|
+
enableJsonResponse: true
|
|
296
|
+
});
|
|
297
|
+
await server.connect(transport);
|
|
298
|
+
try {
|
|
299
|
+
const normalizedReq = normalizeAcceptForPost(request);
|
|
300
|
+
const response = await transport.handleRequest(normalizedReq);
|
|
301
|
+
return withMcpCors(response);
|
|
302
|
+
} finally {
|
|
303
|
+
await transport.close().catch(() => {
|
|
304
|
+
});
|
|
305
|
+
await server.close().catch(() => {
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
95
310
|
// src/server/app.ts
|
|
96
311
|
var json = (value, status) => new Response(JSON.stringify(value), { status, headers: { "content-type": "application/json" } });
|
|
97
312
|
function streamFile(path) {
|
|
@@ -355,10 +570,19 @@ async function servePublishedFeed(feedTree, method, relPath) {
|
|
|
355
570
|
throw err;
|
|
356
571
|
}
|
|
357
572
|
}
|
|
358
|
-
async function apiRoutes(db, feedTree, req, method, sub, url) {
|
|
573
|
+
async function apiRoutes(db, feedTree, req, method, sub, url, mcpOptions) {
|
|
359
574
|
if (sub === "/health") {
|
|
360
575
|
return json({ ok: true, driver: db.dialect }, 200);
|
|
361
576
|
}
|
|
577
|
+
if (sub === "/mcp") {
|
|
578
|
+
return handleMcpHttpRequest(req, {
|
|
579
|
+
db,
|
|
580
|
+
feedTree,
|
|
581
|
+
baseUrl: url.origin,
|
|
582
|
+
readonly: mcpOptions?.readonly,
|
|
583
|
+
authToken: mcpOptions?.authToken
|
|
584
|
+
});
|
|
585
|
+
}
|
|
362
586
|
if (sub === "/v1/feed/status" && method === "GET") {
|
|
363
587
|
const storage = new sql.SqlStorage(db);
|
|
364
588
|
const status = await wodWikiEngine.checkUnpublishedFeedChanges(storage, feedTree);
|
|
@@ -422,7 +646,20 @@ function createHandler(db, options) {
|
|
|
422
646
|
const method = request.method === "HEAD" ? "GET" : request.method;
|
|
423
647
|
const path = url.pathname;
|
|
424
648
|
if (path === "/api" || path.startsWith("/api/")) {
|
|
425
|
-
return db ? await apiRoutes(
|
|
649
|
+
return db ? await apiRoutes(
|
|
650
|
+
db,
|
|
651
|
+
feedTree,
|
|
652
|
+
request,
|
|
653
|
+
request.method === "OPTIONS" ? "OPTIONS" : method,
|
|
654
|
+
path.slice("/api".length) || "/",
|
|
655
|
+
url,
|
|
656
|
+
{ readonly: options.mcpReadonly, authToken: options.mcpToken }
|
|
657
|
+
) : notFound();
|
|
658
|
+
}
|
|
659
|
+
if (db && path === "/.well-known/agent-capabilities.json" && method === "GET") {
|
|
660
|
+
const res = await staticResponse(distRoot, method, path);
|
|
661
|
+
if (res.status === 200) return res;
|
|
662
|
+
return json(agent.exportAgentCapabilitiesManifest(), 200);
|
|
426
663
|
}
|
|
427
664
|
if (db) {
|
|
428
665
|
const feedAsset = isPublishedFeedAssetPath(path);
|