@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
|
@@ -0,0 +1,586 @@
|
|
|
1
|
+
import { createRequire } from 'module';
|
|
2
|
+
import { openCliDb, NodeFsFeedTree, nodeFs } from './chunk-FUISPA7A.mjs';
|
|
3
|
+
import { VERSION } from './chunk-T7VB7PPO.mjs';
|
|
4
|
+
import './chunk-QUUX6NX2.mjs';
|
|
5
|
+
import { ApiStorage } from '@bitcobblers/wod-wiki-storage';
|
|
6
|
+
import { MemoryFeedTree } from '@bitcobblers/wod-wiki-engine';
|
|
7
|
+
import { exportAgentCapabilitiesManifest, DOMAIN_AGENT_TOOLS, wodNoteListTool, wodNoteGetTool, wodNoteUpsertTool, wodNoteCloneTool, wodNoteDeleteTool, wodJournalDayTool, wodJournalAddTool, wodNotebookListTool, wodNotebookSaveTool, wodNotebookDeleteTool, wodSessionListTool, wodSessionGetTool, wodSessionRunHeadlessTool, wodSessionDeleteTool, wodCatalogLookupTool, wodCatalogUpsertTool, wodFeedManageTool, AgentConfirmationRequiredError } from '@bitcobblers/wod-wiki-engine/agent';
|
|
8
|
+
|
|
9
|
+
if (typeof globalThis.require === 'undefined') {
|
|
10
|
+
try { globalThis.require = createRequire(import.meta.url); } catch {}
|
|
11
|
+
}
|
|
12
|
+
async function openStorageSession(env) {
|
|
13
|
+
if (env.parsed.serverUrl) {
|
|
14
|
+
const trimmed = env.parsed.serverUrl.replace(/\/+$/, "");
|
|
15
|
+
const apiBase = trimmed.endsWith("/api") ? trimmed : `${trimmed}/api`;
|
|
16
|
+
const baseUrl = trimmed.endsWith("/api") ? trimmed.slice(0, -4) : trimmed;
|
|
17
|
+
const storage = new ApiStorage(apiBase);
|
|
18
|
+
return {
|
|
19
|
+
storage,
|
|
20
|
+
feedTree: new MemoryFeedTree(),
|
|
21
|
+
baseUrl,
|
|
22
|
+
label: baseUrl,
|
|
23
|
+
close: () => storage.close()
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
const dbConfig = env.resolveDbConfig();
|
|
27
|
+
const dbHandle = await openCliDb(dbConfig);
|
|
28
|
+
const feedTree = dbConfig.kind === "sqlite" ? new NodeFsFeedTree(`${dbConfig.path}.feed`) : new MemoryFeedTree();
|
|
29
|
+
return {
|
|
30
|
+
storage: dbHandle.storage,
|
|
31
|
+
feedTree,
|
|
32
|
+
baseUrl: "",
|
|
33
|
+
label: dbHandle.path,
|
|
34
|
+
close: () => dbHandle.close()
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function parseSetPairs(pairs) {
|
|
38
|
+
const out = {};
|
|
39
|
+
for (const pair of pairs) {
|
|
40
|
+
const idx = pair.indexOf("=");
|
|
41
|
+
if (idx <= 0) {
|
|
42
|
+
throw new Error(`Invalid --set "${pair}" (expected fieldId=value)`);
|
|
43
|
+
}
|
|
44
|
+
const key = pair.slice(0, idx).trim();
|
|
45
|
+
const rawVal = pair.slice(idx + 1).trim();
|
|
46
|
+
if (!key || !rawVal) {
|
|
47
|
+
throw new Error(`Invalid --set "${pair}" (expected fieldId=value)`);
|
|
48
|
+
}
|
|
49
|
+
const num = Number(rawVal);
|
|
50
|
+
out[key] = Number.isFinite(num) ? num : rawVal;
|
|
51
|
+
}
|
|
52
|
+
return out;
|
|
53
|
+
}
|
|
54
|
+
function toNotebookId(slugOrId) {
|
|
55
|
+
if (!slugOrId) return void 0;
|
|
56
|
+
return slugOrId.startsWith("notebook/") ? slugOrId : `notebook/${slugOrId}`;
|
|
57
|
+
}
|
|
58
|
+
function slugifyName(input) {
|
|
59
|
+
return input.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
60
|
+
}
|
|
61
|
+
async function readContentArg(fileOrDash, inlineMarkdown, readStdin) {
|
|
62
|
+
if (inlineMarkdown !== void 0) return inlineMarkdown;
|
|
63
|
+
if (!fileOrDash || fileOrDash === "-") {
|
|
64
|
+
return readStdin();
|
|
65
|
+
}
|
|
66
|
+
const fs = nodeFs();
|
|
67
|
+
if (!fs.existsSync(fileOrDash)) {
|
|
68
|
+
throw new Error(`File not found: ${fileOrDash}`);
|
|
69
|
+
}
|
|
70
|
+
return fs.readFileSync(fileOrDash, "utf-8");
|
|
71
|
+
}
|
|
72
|
+
function emitSuccess(env, toolName, data, humanSummary) {
|
|
73
|
+
if (env.parsed.json) {
|
|
74
|
+
env.writeOut(
|
|
75
|
+
JSON.stringify(
|
|
76
|
+
{
|
|
77
|
+
ok: true,
|
|
78
|
+
tool: toolName,
|
|
79
|
+
data
|
|
80
|
+
},
|
|
81
|
+
null,
|
|
82
|
+
2
|
|
83
|
+
)
|
|
84
|
+
);
|
|
85
|
+
} else {
|
|
86
|
+
env.writeOut(humanSummary);
|
|
87
|
+
}
|
|
88
|
+
return 0;
|
|
89
|
+
}
|
|
90
|
+
function emitError(env, error) {
|
|
91
|
+
if (error instanceof AgentConfirmationRequiredError) {
|
|
92
|
+
const payload = {
|
|
93
|
+
ok: false,
|
|
94
|
+
code: error.code,
|
|
95
|
+
exitCode: 4,
|
|
96
|
+
action: error.action,
|
|
97
|
+
targetId: error.targetId,
|
|
98
|
+
error: error.message,
|
|
99
|
+
hint: `Re-run with --yes "${error.targetId}" to confirm.`
|
|
100
|
+
};
|
|
101
|
+
if (env.parsed.json) {
|
|
102
|
+
env.writeOut(JSON.stringify(payload, null, 2));
|
|
103
|
+
} else {
|
|
104
|
+
env.writeErr(
|
|
105
|
+
`[wod] Confirmation required (${error.action}): ${error.message} Pass --yes "${error.targetId}" to confirm.`
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
return 4;
|
|
109
|
+
}
|
|
110
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
111
|
+
if (env.parsed.json) {
|
|
112
|
+
env.writeOut(
|
|
113
|
+
JSON.stringify(
|
|
114
|
+
{
|
|
115
|
+
ok: false,
|
|
116
|
+
code: "RUNTIME_ERROR",
|
|
117
|
+
error: message
|
|
118
|
+
},
|
|
119
|
+
null,
|
|
120
|
+
2
|
|
121
|
+
)
|
|
122
|
+
);
|
|
123
|
+
} else {
|
|
124
|
+
env.writeErr(`[wod] Error: ${message}`);
|
|
125
|
+
}
|
|
126
|
+
return 1;
|
|
127
|
+
}
|
|
128
|
+
async function runAgentNounVerbCommand(env) {
|
|
129
|
+
const { parsed } = env;
|
|
130
|
+
const noun = parsed.subcommand;
|
|
131
|
+
const verb = parsed.target;
|
|
132
|
+
const arg1 = parsed.target2;
|
|
133
|
+
const arg2 = parsed.target3;
|
|
134
|
+
try {
|
|
135
|
+
if (noun === "tools") {
|
|
136
|
+
const action = verb ?? "list";
|
|
137
|
+
const manifest = exportAgentCapabilitiesManifest();
|
|
138
|
+
if (action === "manifest") {
|
|
139
|
+
env.writeOut(JSON.stringify(manifest, null, 2));
|
|
140
|
+
return 0;
|
|
141
|
+
}
|
|
142
|
+
if (action === "list") {
|
|
143
|
+
if (parsed.json) {
|
|
144
|
+
return emitSuccess(env, "wod_tools_list", manifest.domainTools, "");
|
|
145
|
+
}
|
|
146
|
+
for (const t of manifest.domainTools) {
|
|
147
|
+
env.writeOut(`${t.name.padEnd(26)} [Tier ${t.tier}] ${t.cliEquivalent}`);
|
|
148
|
+
}
|
|
149
|
+
env.writeOut(`[wod tools] ${manifest.domainTools.length} portable domain tools`);
|
|
150
|
+
return 0;
|
|
151
|
+
}
|
|
152
|
+
throw new Error(`Unknown tools action "${action}" (expected: list | manifest)`);
|
|
153
|
+
}
|
|
154
|
+
if (noun === "doctor") {
|
|
155
|
+
let backendKind = "sqlite";
|
|
156
|
+
let backendTarget = "";
|
|
157
|
+
let dbReady = false;
|
|
158
|
+
let noteCount = 0;
|
|
159
|
+
let sessionCount = 0;
|
|
160
|
+
if (parsed.serverUrl) {
|
|
161
|
+
backendKind = "api";
|
|
162
|
+
backendTarget = parsed.serverUrl;
|
|
163
|
+
const session2 = await openStorageSession(env);
|
|
164
|
+
try {
|
|
165
|
+
noteCount = (await session2.storage.readonly("notes").getAll()).length;
|
|
166
|
+
sessionCount = (await session2.storage.readonly("sessions").getAll()).length;
|
|
167
|
+
dbReady = true;
|
|
168
|
+
} finally {
|
|
169
|
+
await session2.close();
|
|
170
|
+
}
|
|
171
|
+
} else {
|
|
172
|
+
const cfg = env.resolveDbConfig();
|
|
173
|
+
backendKind = cfg.kind;
|
|
174
|
+
backendTarget = cfg.kind === "sqlite" ? cfg.path : cfg.kind;
|
|
175
|
+
try {
|
|
176
|
+
const db = await openCliDb(cfg, { initialize: false });
|
|
177
|
+
try {
|
|
178
|
+
noteCount = (await db.storage.readonly("notes").getAll()).length;
|
|
179
|
+
sessionCount = (await db.storage.readonly("sessions").getAll()).length;
|
|
180
|
+
dbReady = true;
|
|
181
|
+
} finally {
|
|
182
|
+
await db.close();
|
|
183
|
+
}
|
|
184
|
+
} catch {
|
|
185
|
+
dbReady = false;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
const { bundledSkillsRoot, listBundledSkills } = await import('./skills-5F737S2K.mjs');
|
|
189
|
+
const skillsRoot = bundledSkillsRoot();
|
|
190
|
+
const skills = skillsRoot ? listBundledSkills(skillsRoot).map((s) => s.name) : [];
|
|
191
|
+
const report = {
|
|
192
|
+
version: VERSION,
|
|
193
|
+
backendKind,
|
|
194
|
+
backendTarget,
|
|
195
|
+
databaseInitialized: dbReady,
|
|
196
|
+
noteCount,
|
|
197
|
+
sessionCount,
|
|
198
|
+
domainToolCount: DOMAIN_AGENT_TOOLS.length,
|
|
199
|
+
bundledSkills: skills
|
|
200
|
+
};
|
|
201
|
+
return emitSuccess(
|
|
202
|
+
env,
|
|
203
|
+
"wod_doctor",
|
|
204
|
+
report,
|
|
205
|
+
`[wod doctor] v${VERSION} \xB7 backend=${backendKind} (${dbReady ? "ready" : "uninitialized"}) \xB7 ${noteCount} notes \xB7 ${sessionCount} sessions \xB7 ${DOMAIN_AGENT_TOOLS.length} tools \xB7 ${skills.length} skills`
|
|
206
|
+
);
|
|
207
|
+
}
|
|
208
|
+
const session = await openStorageSession(env);
|
|
209
|
+
const ctx = {
|
|
210
|
+
storage: session.storage,
|
|
211
|
+
feedTree: session.feedTree,
|
|
212
|
+
baseUrl: session.baseUrl
|
|
213
|
+
};
|
|
214
|
+
try {
|
|
215
|
+
if (noun === "note") {
|
|
216
|
+
if (verb === "list" || !verb) {
|
|
217
|
+
const out = await wodNoteListTool.execute(
|
|
218
|
+
{
|
|
219
|
+
notebookId: toNotebookId(parsed.notebook),
|
|
220
|
+
tag: parsed.tag,
|
|
221
|
+
search: parsed.search,
|
|
222
|
+
limit: parsed.limit
|
|
223
|
+
},
|
|
224
|
+
ctx
|
|
225
|
+
);
|
|
226
|
+
return emitSuccess(
|
|
227
|
+
env,
|
|
228
|
+
wodNoteListTool.name,
|
|
229
|
+
out,
|
|
230
|
+
out.notes.map((n) => `${n.id} ${(n.date ? new Date(n.date).toISOString().slice(0, 10) : "").padEnd(10)} ${n.title}`).join("\n") || "[wod note list] 0 notes"
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
if (verb === "get") {
|
|
234
|
+
const noteId = arg1 ?? parsed.noteId;
|
|
235
|
+
if (!noteId) throw new Error("Usage: wod note get <noteId>");
|
|
236
|
+
const out = await wodNoteGetTool.execute({ noteId }, ctx);
|
|
237
|
+
return emitSuccess(
|
|
238
|
+
env,
|
|
239
|
+
wodNoteGetTool.name,
|
|
240
|
+
out,
|
|
241
|
+
parsed.format === "table" ? `${out.id} ${out.title}
|
|
242
|
+
|
|
243
|
+
${out.rawContent}` : out.rawContent
|
|
244
|
+
);
|
|
245
|
+
}
|
|
246
|
+
if (verb === "create" || verb === "update" || verb === "upsert") {
|
|
247
|
+
const noteId = verb === "update" ? arg1 ?? parsed.noteId : parsed.noteId;
|
|
248
|
+
const fileArg = verb === "update" ? arg2 : arg1;
|
|
249
|
+
let content = await readContentArg(fileArg, parsed.markdown, env.readStdin);
|
|
250
|
+
if (parsed.tags.length > 0 && !content.trimStart().startsWith("---")) {
|
|
251
|
+
content = `---
|
|
252
|
+
tags:
|
|
253
|
+
${parsed.tags.map((t) => ` - ${t}`).join("\n")}
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
${content}`;
|
|
257
|
+
}
|
|
258
|
+
const out = await wodNoteUpsertTool.execute(
|
|
259
|
+
{
|
|
260
|
+
noteId,
|
|
261
|
+
title: parsed.title,
|
|
262
|
+
content,
|
|
263
|
+
notebookId: toNotebookId(parsed.notebook),
|
|
264
|
+
journalDate: parsed.date,
|
|
265
|
+
sport: parsed.sport
|
|
266
|
+
},
|
|
267
|
+
ctx
|
|
268
|
+
);
|
|
269
|
+
return emitSuccess(
|
|
270
|
+
env,
|
|
271
|
+
wodNoteUpsertTool.name,
|
|
272
|
+
out,
|
|
273
|
+
`[wod note ${verb}] ${out.noteId}${out.created ? " (created)" : " (updated)"} \u2014 ${out.blockCount} block(s)`
|
|
274
|
+
);
|
|
275
|
+
}
|
|
276
|
+
if (verb === "clone") {
|
|
277
|
+
const sourceNoteId = arg1 ?? parsed.noteId;
|
|
278
|
+
if (!sourceNoteId) {
|
|
279
|
+
throw new Error("Usage: wod note clone <sourceNoteId> [--date YYYY-MM-DD] [--notebook <slug>]");
|
|
280
|
+
}
|
|
281
|
+
const out = await wodNoteCloneTool.execute(
|
|
282
|
+
{
|
|
283
|
+
sourceNoteId,
|
|
284
|
+
title: parsed.title,
|
|
285
|
+
targetNotebookId: toNotebookId(parsed.notebook),
|
|
286
|
+
journalDate: parsed.date
|
|
287
|
+
},
|
|
288
|
+
ctx
|
|
289
|
+
);
|
|
290
|
+
return emitSuccess(
|
|
291
|
+
env,
|
|
292
|
+
wodNoteCloneTool.name,
|
|
293
|
+
out,
|
|
294
|
+
`[wod note clone] ${sourceNoteId} \u2192 ${out.noteId}`
|
|
295
|
+
);
|
|
296
|
+
}
|
|
297
|
+
if (verb === "delete") {
|
|
298
|
+
const noteId = arg1 ?? parsed.noteId;
|
|
299
|
+
if (!noteId) throw new Error("Usage: wod note delete <noteId> --yes <noteId>");
|
|
300
|
+
const out = await wodNoteDeleteTool.execute({ noteId, confirmId: parsed.yes }, ctx);
|
|
301
|
+
return emitSuccess(
|
|
302
|
+
env,
|
|
303
|
+
wodNoteDeleteTool.name,
|
|
304
|
+
out,
|
|
305
|
+
`[wod note delete] deleted=${out.deleted} note=${out.noteId}`
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
throw new Error(`Unknown note verb "${verb}" (expected: list | get | create | update | clone | delete)`);
|
|
309
|
+
}
|
|
310
|
+
if (noun === "journal") {
|
|
311
|
+
if (verb === "day" || !verb) {
|
|
312
|
+
const date = arg1 ?? parsed.date ?? "today";
|
|
313
|
+
const out = await wodJournalDayTool.execute({ date }, ctx);
|
|
314
|
+
return emitSuccess(
|
|
315
|
+
env,
|
|
316
|
+
wodJournalDayTool.name,
|
|
317
|
+
out,
|
|
318
|
+
`[wod journal day ${out.date}] ${out.noteCount} scheduled note(s), ${out.sessionCount} session(s)`
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
if (verb === "add") {
|
|
322
|
+
const date = arg1 ?? parsed.date ?? "today";
|
|
323
|
+
const sourceNoteId = parsed.sourceNoteId ?? parsed.noteId;
|
|
324
|
+
if (sourceNoteId && !parsed.markdown && !arg2) {
|
|
325
|
+
const cloned = await wodNoteCloneTool.execute(
|
|
326
|
+
{
|
|
327
|
+
sourceNoteId,
|
|
328
|
+
title: parsed.title,
|
|
329
|
+
targetNotebookId: toNotebookId(parsed.notebook ?? "journal"),
|
|
330
|
+
journalDate: date
|
|
331
|
+
},
|
|
332
|
+
ctx
|
|
333
|
+
);
|
|
334
|
+
return emitSuccess(
|
|
335
|
+
env,
|
|
336
|
+
wodNoteCloneTool.name,
|
|
337
|
+
cloned,
|
|
338
|
+
`[wod journal add] cloned ${sourceNoteId} \u2192 ${cloned.noteId} on ${date}`
|
|
339
|
+
);
|
|
340
|
+
}
|
|
341
|
+
const content = await readContentArg(arg2, parsed.markdown, env.readStdin);
|
|
342
|
+
const out = await wodJournalAddTool.execute(
|
|
343
|
+
{
|
|
344
|
+
date,
|
|
345
|
+
title: parsed.title,
|
|
346
|
+
content,
|
|
347
|
+
sport: parsed.sport,
|
|
348
|
+
notebookId: toNotebookId(parsed.notebook)
|
|
349
|
+
},
|
|
350
|
+
ctx
|
|
351
|
+
);
|
|
352
|
+
return emitSuccess(
|
|
353
|
+
env,
|
|
354
|
+
wodJournalAddTool.name,
|
|
355
|
+
out,
|
|
356
|
+
`[wod journal add] scheduled note ${out.noteId} on ${out.date}`
|
|
357
|
+
);
|
|
358
|
+
}
|
|
359
|
+
throw new Error(`Unknown journal verb "${verb}" (expected: day | add)`);
|
|
360
|
+
}
|
|
361
|
+
if (noun === "notebook") {
|
|
362
|
+
if (verb === "list" || !verb) {
|
|
363
|
+
const out = await wodNotebookListTool.execute({ origin: "all" }, ctx);
|
|
364
|
+
return emitSuccess(
|
|
365
|
+
env,
|
|
366
|
+
wodNotebookListTool.name,
|
|
367
|
+
out,
|
|
368
|
+
out.notebooks.map((nb) => `${nb.slug.padEnd(20)} (${nb.noteCount} notes) \u2014 ${nb.name}`).join("\n") || "[wod notebook list] 0 notebooks"
|
|
369
|
+
);
|
|
370
|
+
}
|
|
371
|
+
if (verb === "create" || verb === "save" || verb === "update") {
|
|
372
|
+
const slugOrId = arg1 ?? parsed.notebook;
|
|
373
|
+
const name = parsed.title ?? parsed.dbName ?? slugOrId;
|
|
374
|
+
if (!name) throw new Error('Usage: wod notebook save <slug> --title "<Name>"');
|
|
375
|
+
const notebookId = toNotebookId(slugOrId ?? slugifyName(name));
|
|
376
|
+
const existing = notebookId ? await session.storage.readonly("notes").get(notebookId) : void 0;
|
|
377
|
+
const action = verb === "create" || !existing ? "create" : "update";
|
|
378
|
+
const out = await wodNotebookSaveTool.execute(
|
|
379
|
+
{
|
|
380
|
+
action,
|
|
381
|
+
notebookId,
|
|
382
|
+
name,
|
|
383
|
+
description: parsed.description,
|
|
384
|
+
noteId: parsed.noteId
|
|
385
|
+
},
|
|
386
|
+
ctx
|
|
387
|
+
);
|
|
388
|
+
return emitSuccess(
|
|
389
|
+
env,
|
|
390
|
+
wodNotebookSaveTool.name,
|
|
391
|
+
out,
|
|
392
|
+
`[wod notebook ${verb}] ${out.notebookId ?? slugOrId ?? name}`
|
|
393
|
+
);
|
|
394
|
+
}
|
|
395
|
+
if (verb === "promote" || verb === "detach") {
|
|
396
|
+
const slugOrId = arg1 ?? parsed.notebook;
|
|
397
|
+
const noteId = arg2 ?? parsed.noteId;
|
|
398
|
+
if (!slugOrId || !noteId) {
|
|
399
|
+
throw new Error(`Usage: wod notebook ${verb} <slug> <noteId>`);
|
|
400
|
+
}
|
|
401
|
+
const out = await wodNotebookSaveTool.execute(
|
|
402
|
+
{
|
|
403
|
+
action: verb,
|
|
404
|
+
notebookId: toNotebookId(slugOrId),
|
|
405
|
+
noteId
|
|
406
|
+
},
|
|
407
|
+
ctx
|
|
408
|
+
);
|
|
409
|
+
return emitSuccess(
|
|
410
|
+
env,
|
|
411
|
+
wodNotebookSaveTool.name,
|
|
412
|
+
out,
|
|
413
|
+
`[wod notebook ${verb}] note ${out.noteId} \u2192 ${(out.notebookIds ?? []).join(", ")}`
|
|
414
|
+
);
|
|
415
|
+
}
|
|
416
|
+
if (verb === "delete") {
|
|
417
|
+
const slugOrId = arg1 ?? parsed.notebook;
|
|
418
|
+
if (!slugOrId) throw new Error("Usage: wod notebook delete <slug> --yes <notebook/slug>");
|
|
419
|
+
const notebookId = toNotebookId(slugOrId);
|
|
420
|
+
const confirmId = parsed.yes === slugOrId ? notebookId : parsed.yes;
|
|
421
|
+
const out = await wodNotebookDeleteTool.execute({ notebookId, confirmId }, ctx);
|
|
422
|
+
return emitSuccess(
|
|
423
|
+
env,
|
|
424
|
+
wodNotebookDeleteTool.name,
|
|
425
|
+
out,
|
|
426
|
+
`[wod notebook delete] deleted ${out.notebookId}`
|
|
427
|
+
);
|
|
428
|
+
}
|
|
429
|
+
throw new Error(`Unknown notebook verb "${verb}" (expected: list | create | save | update | promote | detach | delete)`);
|
|
430
|
+
}
|
|
431
|
+
if (noun === "session") {
|
|
432
|
+
if (verb === "list" || !verb) {
|
|
433
|
+
const out = await wodSessionListTool.execute(
|
|
434
|
+
{
|
|
435
|
+
noteId: parsed.noteId,
|
|
436
|
+
limit: parsed.limit
|
|
437
|
+
},
|
|
438
|
+
ctx
|
|
439
|
+
);
|
|
440
|
+
return emitSuccess(
|
|
441
|
+
env,
|
|
442
|
+
wodSessionListTool.name,
|
|
443
|
+
out,
|
|
444
|
+
out.sessions.map(
|
|
445
|
+
(s) => `${s.id} ${new Date(s.startTime).toISOString().slice(0, 10)} note=${s.noteId} completed=${s.completed}`
|
|
446
|
+
).join("\n") || "[wod session list] 0 sessions"
|
|
447
|
+
);
|
|
448
|
+
}
|
|
449
|
+
if (verb === "get") {
|
|
450
|
+
const sessionId = arg1;
|
|
451
|
+
if (!sessionId) throw new Error("Usage: wod session get <sessionId>");
|
|
452
|
+
const out = await wodSessionGetTool.execute({ sessionId }, ctx);
|
|
453
|
+
return emitSuccess(
|
|
454
|
+
env,
|
|
455
|
+
wodSessionGetTool.name,
|
|
456
|
+
out,
|
|
457
|
+
`[wod session get] ${out.session.id} \u2014 ${out.eventCount} event(s), duration=${out.session.duration}ms`
|
|
458
|
+
);
|
|
459
|
+
}
|
|
460
|
+
if (verb === "run") {
|
|
461
|
+
const noteId = parsed.noteId ?? arg1;
|
|
462
|
+
const source = !noteId ? await readContentArg(arg1, parsed.markdown, env.readStdin) : void 0;
|
|
463
|
+
const out = await wodSessionRunHeadlessTool.execute(
|
|
464
|
+
{
|
|
465
|
+
noteId,
|
|
466
|
+
blockId: parsed.blockId,
|
|
467
|
+
source,
|
|
468
|
+
title: parsed.title,
|
|
469
|
+
sport: parsed.sport,
|
|
470
|
+
journalDate: parsed.date,
|
|
471
|
+
collectibles: parsed.setPairs.length > 0 ? parseSetPairs(parsed.setPairs) : void 0
|
|
472
|
+
},
|
|
473
|
+
ctx
|
|
474
|
+
);
|
|
475
|
+
return emitSuccess(
|
|
476
|
+
env,
|
|
477
|
+
wodSessionRunHeadlessTool.name,
|
|
478
|
+
out,
|
|
479
|
+
`[wod session run] session ${out.sessionId} on note ${out.noteId} (${out.eventCount} events, ${out.summaryCount} summaries)`
|
|
480
|
+
);
|
|
481
|
+
}
|
|
482
|
+
if (verb === "delete") {
|
|
483
|
+
const sessionId = arg1;
|
|
484
|
+
if (!sessionId) throw new Error("Usage: wod session delete <sessionId> --yes <sessionId>");
|
|
485
|
+
const out = await wodSessionDeleteTool.execute({ sessionId, confirmId: parsed.yes }, ctx);
|
|
486
|
+
return emitSuccess(
|
|
487
|
+
env,
|
|
488
|
+
wodSessionDeleteTool.name,
|
|
489
|
+
out,
|
|
490
|
+
`[wod session delete] deleted=${out.deleted} session=${out.sessionId}`
|
|
491
|
+
);
|
|
492
|
+
}
|
|
493
|
+
throw new Error(`Unknown session verb "${verb}" (expected: list | get | run | delete)`);
|
|
494
|
+
}
|
|
495
|
+
if (noun === "catalog" || noun === "tag") {
|
|
496
|
+
const defaultKind = noun === "tag" ? "tag" : "effort";
|
|
497
|
+
if (verb === "list" || verb === "lookup" || !verb) {
|
|
498
|
+
const kind = (noun === "tag" ? "tag" : arg1) ?? defaultKind;
|
|
499
|
+
const out = await wodCatalogLookupTool.execute(
|
|
500
|
+
{
|
|
501
|
+
kind,
|
|
502
|
+
search: parsed.search ?? (noun === "tag" ? arg1 : arg2),
|
|
503
|
+
slug: parsed.slug,
|
|
504
|
+
notebookId: toNotebookId(parsed.notebook),
|
|
505
|
+
limit: parsed.limit
|
|
506
|
+
},
|
|
507
|
+
ctx
|
|
508
|
+
);
|
|
509
|
+
return emitSuccess(
|
|
510
|
+
env,
|
|
511
|
+
wodCatalogLookupTool.name,
|
|
512
|
+
out,
|
|
513
|
+
`[wod ${noun} ${verb ?? "list"}] ${out.items.length} ${out.kind} item(s)`
|
|
514
|
+
);
|
|
515
|
+
}
|
|
516
|
+
if (verb === "get") {
|
|
517
|
+
const kind = noun === "tag" ? "tag" : arg1 ?? "effort";
|
|
518
|
+
const slug = noun === "tag" ? arg1 : arg2;
|
|
519
|
+
const out = await wodCatalogLookupTool.execute({ kind, slug }, ctx);
|
|
520
|
+
return emitSuccess(
|
|
521
|
+
env,
|
|
522
|
+
wodCatalogLookupTool.name,
|
|
523
|
+
out,
|
|
524
|
+
JSON.stringify(out.items[0] ?? null, null, 2)
|
|
525
|
+
);
|
|
526
|
+
}
|
|
527
|
+
if (verb === "upsert" || verb === "create") {
|
|
528
|
+
const kind = noun === "tag" ? "tag" : arg1 ?? "effort";
|
|
529
|
+
const label = (noun === "tag" ? arg1 : arg2) ?? parsed.title ?? parsed.slug;
|
|
530
|
+
if (!label) {
|
|
531
|
+
throw new Error(
|
|
532
|
+
`Usage: wod ${noun} upsert ${noun === "tag" ? "<label> [--category <tagType>]" : "<effort|equipment|tag> <name>"}`
|
|
533
|
+
);
|
|
534
|
+
}
|
|
535
|
+
const slug = parsed.slug ?? slugifyName(label);
|
|
536
|
+
const out = await wodCatalogUpsertTool.execute(
|
|
537
|
+
{
|
|
538
|
+
kind,
|
|
539
|
+
slug,
|
|
540
|
+
label,
|
|
541
|
+
targetNotebookId: toNotebookId(parsed.notebook),
|
|
542
|
+
markdown: parsed.markdown,
|
|
543
|
+
category: parsed.category ?? parsed.tagType,
|
|
544
|
+
aliases: parsed.aliases.length > 0 ? parsed.aliases : void 0
|
|
545
|
+
},
|
|
546
|
+
ctx
|
|
547
|
+
);
|
|
548
|
+
return emitSuccess(
|
|
549
|
+
env,
|
|
550
|
+
wodCatalogUpsertTool.name,
|
|
551
|
+
out,
|
|
552
|
+
`[wod ${noun} upsert] ${out.kind} ${out.slug} (${out.ownerNoteId})`
|
|
553
|
+
);
|
|
554
|
+
}
|
|
555
|
+
throw new Error(`Unknown ${noun} verb "${verb}" (expected: list | lookup | get | upsert)`);
|
|
556
|
+
}
|
|
557
|
+
if (noun === "feed") {
|
|
558
|
+
const action = verb ?? "list";
|
|
559
|
+
const out = await wodFeedManageTool.execute(
|
|
560
|
+
{
|
|
561
|
+
action,
|
|
562
|
+
notebookSlug: parsed.notebook,
|
|
563
|
+
name: parsed.title,
|
|
564
|
+
description: parsed.description
|
|
565
|
+
},
|
|
566
|
+
ctx
|
|
567
|
+
);
|
|
568
|
+
return emitSuccess(
|
|
569
|
+
env,
|
|
570
|
+
wodFeedManageTool.name,
|
|
571
|
+
out,
|
|
572
|
+
`[wod feed ${action}] ok`
|
|
573
|
+
);
|
|
574
|
+
}
|
|
575
|
+
throw new Error(`Unhandled agent command group "${noun}"`);
|
|
576
|
+
} finally {
|
|
577
|
+
await session.close();
|
|
578
|
+
}
|
|
579
|
+
} catch (err) {
|
|
580
|
+
return emitError(env, err);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
export { runAgentNounVerbCommand };
|
|
585
|
+
//# sourceMappingURL=agentCommands-AMMASJPH.mjs.map
|
|
586
|
+
//# sourceMappingURL=agentCommands-AMMASJPH.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/agentCommands.ts"],"names":["session"],"mappings":"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","file":"agentCommands-AMMASJPH.mjs","sourcesContent":["import { ApiStorage, type IStorage } from '@bitcobblers/wod-wiki-storage';\nimport { MemoryFeedTree, type FeedTree } from '@bitcobblers/wod-wiki-engine';\nimport {\n AgentConfirmationRequiredError,\n DOMAIN_AGENT_TOOLS,\n exportAgentCapabilitiesManifest,\n wodCatalogLookupTool,\n wodCatalogUpsertTool,\n wodFeedManageTool,\n wodJournalAddTool,\n wodJournalDayTool,\n wodNoteCloneTool,\n wodNoteDeleteTool,\n wodNoteGetTool,\n wodNoteListTool,\n wodNoteUpsertTool,\n wodNotebookDeleteTool,\n wodNotebookListTool,\n wodNotebookSaveTool,\n wodSessionDeleteTool,\n wodSessionGetTool,\n wodSessionListTool,\n wodSessionRunHeadlessTool,\n type AgentDomainContext,\n} from '@bitcobblers/wod-wiki-engine/agent';\nimport type { CliDatabaseConfig } from './config';\nimport { nodeFs, openCliDb, type CliDb } from './db';\nimport { NodeFsFeedTree } from './nodeFeedTree';\nimport type { CliParsedArgs } from './runner';\nimport { VERSION } from '../version';\n\nexport interface AgentCliExecutionEnv {\n parsed: CliParsedArgs;\n resolveDbConfig: () => CliDatabaseConfig;\n readStdin: () => Promise<string>;\n writeOut: (text: string) => void;\n writeErr: (text: string) => void;\n}\n\ninterface StorageSession {\n storage: IStorage;\n feedTree: FeedTree;\n baseUrl: string;\n label: string;\n close: () => Promise<void>;\n}\n\nasync function openStorageSession(env: AgentCliExecutionEnv): Promise<StorageSession> {\n if (env.parsed.serverUrl) {\n const trimmed = env.parsed.serverUrl.replace(/\\/+$/, '');\n const apiBase = trimmed.endsWith('/api') ? trimmed : `${trimmed}/api`;\n const baseUrl = trimmed.endsWith('/api') ? trimmed.slice(0, -4) : trimmed;\n const storage = new ApiStorage(apiBase);\n return {\n storage,\n feedTree: new MemoryFeedTree(),\n baseUrl,\n label: baseUrl,\n close: () => storage.close(),\n };\n }\n\n const dbConfig = env.resolveDbConfig();\n const dbHandle: CliDb = await openCliDb(dbConfig);\n const feedTree: FeedTree =\n dbConfig.kind === 'sqlite'\n ? new NodeFsFeedTree(`${dbConfig.path}.feed`)\n : new MemoryFeedTree();\n return {\n storage: dbHandle.storage,\n feedTree,\n baseUrl: '',\n label: dbHandle.path,\n close: () => dbHandle.close(),\n };\n}\n\nfunction parseSetPairs(pairs: string[]): Record<string, string | number> {\n const out: Record<string, string | number> = {};\n for (const pair of pairs) {\n const idx = pair.indexOf('=');\n if (idx <= 0) {\n throw new Error(`Invalid --set \"${pair}\" (expected fieldId=value)`);\n }\n const key = pair.slice(0, idx).trim();\n const rawVal = pair.slice(idx + 1).trim();\n if (!key || !rawVal) {\n throw new Error(`Invalid --set \"${pair}\" (expected fieldId=value)`);\n }\n const num = Number(rawVal);\n out[key] = Number.isFinite(num) ? num : rawVal;\n }\n return out;\n}\n\nfunction toNotebookId(slugOrId?: string): string | undefined {\n if (!slugOrId) return undefined;\n return slugOrId.startsWith('notebook/') ? slugOrId : `notebook/${slugOrId}`;\n}\n\nfunction slugifyName(input: string): string {\n return input\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\nasync function readContentArg(\n fileOrDash: string | undefined,\n inlineMarkdown: string | undefined,\n readStdin: () => Promise<string>,\n): Promise<string> {\n if (inlineMarkdown !== undefined) return inlineMarkdown;\n if (!fileOrDash || fileOrDash === '-') {\n return readStdin();\n }\n const fs = nodeFs();\n if (!fs.existsSync(fileOrDash)) {\n throw new Error(`File not found: ${fileOrDash}`);\n }\n return fs.readFileSync(fileOrDash, 'utf-8');\n}\n\nfunction emitSuccess(\n env: AgentCliExecutionEnv,\n toolName: string,\n data: unknown,\n humanSummary: string,\n): number {\n if (env.parsed.json) {\n env.writeOut(\n JSON.stringify(\n {\n ok: true,\n tool: toolName,\n data,\n },\n null,\n 2,\n ),\n );\n } else {\n env.writeOut(humanSummary);\n }\n return 0;\n}\n\nfunction emitError(env: AgentCliExecutionEnv, error: unknown): number {\n if (error instanceof AgentConfirmationRequiredError) {\n const payload = {\n ok: false,\n code: error.code,\n exitCode: 4,\n action: error.action,\n targetId: error.targetId,\n error: error.message,\n hint: `Re-run with --yes \"${error.targetId}\" to confirm.`,\n };\n if (env.parsed.json) {\n env.writeOut(JSON.stringify(payload, null, 2));\n } else {\n env.writeErr(\n `[wod] Confirmation required (${error.action}): ${error.message} ` +\n `Pass --yes \"${error.targetId}\" to confirm.`,\n );\n }\n return 4;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n if (env.parsed.json) {\n env.writeOut(\n JSON.stringify(\n {\n ok: false,\n code: 'RUNTIME_ERROR',\n error: message,\n },\n null,\n 2,\n ),\n );\n } else {\n env.writeErr(`[wod] Error: ${message}`);\n }\n return 1;\n}\n\nexport async function runAgentNounVerbCommand(env: AgentCliExecutionEnv): Promise<number> {\n const { parsed } = env;\n const noun = parsed.subcommand;\n const verb = parsed.target;\n const arg1 = parsed.target2;\n const arg2 = parsed.target3;\n\n try {\n if (noun === 'tools') {\n const action = verb ?? 'list';\n const manifest = exportAgentCapabilitiesManifest();\n if (action === 'manifest') {\n env.writeOut(JSON.stringify(manifest, null, 2));\n return 0;\n }\n if (action === 'list') {\n if (parsed.json) {\n return emitSuccess(env, 'wod_tools_list', manifest.domainTools, '');\n }\n for (const t of manifest.domainTools) {\n env.writeOut(`${t.name.padEnd(26)} [Tier ${t.tier}] ${t.cliEquivalent}`);\n }\n env.writeOut(`[wod tools] ${manifest.domainTools.length} portable domain tools`);\n return 0;\n }\n throw new Error(`Unknown tools action \"${action}\" (expected: list | manifest)`);\n }\n\n if (noun === 'doctor') {\n let backendKind = 'sqlite';\n let backendTarget = '';\n let dbReady = false;\n let noteCount = 0;\n let sessionCount = 0;\n\n if (parsed.serverUrl) {\n backendKind = 'api';\n backendTarget = parsed.serverUrl;\n const session = await openStorageSession(env);\n try {\n noteCount = (await session.storage.readonly('notes').getAll()).length;\n sessionCount = (await session.storage.readonly('sessions').getAll()).length;\n dbReady = true;\n } finally {\n await session.close();\n }\n } else {\n const cfg = env.resolveDbConfig();\n backendKind = cfg.kind;\n backendTarget = cfg.kind === 'sqlite' ? cfg.path : cfg.kind;\n try {\n const db = await openCliDb(cfg, { initialize: false });\n try {\n noteCount = (await db.storage.readonly('notes').getAll()).length;\n sessionCount = (await db.storage.readonly('sessions').getAll()).length;\n dbReady = true;\n } finally {\n await db.close();\n }\n } catch {\n dbReady = false;\n }\n }\n\n const { bundledSkillsRoot, listBundledSkills } = await import('./skills');\n const skillsRoot = bundledSkillsRoot();\n const skills = skillsRoot ? listBundledSkills(skillsRoot).map((s) => s.name) : [];\n\n const report = {\n version: VERSION,\n backendKind,\n backendTarget,\n databaseInitialized: dbReady,\n noteCount,\n sessionCount,\n domainToolCount: DOMAIN_AGENT_TOOLS.length,\n bundledSkills: skills,\n };\n\n return emitSuccess(\n env,\n 'wod_doctor',\n report,\n `[wod doctor] v${VERSION} · backend=${backendKind} (${dbReady ? 'ready' : 'uninitialized'}) · ` +\n `${noteCount} notes · ${sessionCount} sessions · ${DOMAIN_AGENT_TOOLS.length} tools · ${skills.length} skills`,\n );\n }\n\n const session = await openStorageSession(env);\n const ctx: AgentDomainContext = {\n storage: session.storage,\n feedTree: session.feedTree,\n baseUrl: session.baseUrl,\n };\n\n try {\n if (noun === 'note') {\n if (verb === 'list' || !verb) {\n const out = await wodNoteListTool.execute(\n {\n notebookId: toNotebookId(parsed.notebook),\n tag: parsed.tag,\n search: parsed.search,\n limit: parsed.limit,\n },\n ctx,\n );\n return emitSuccess(\n env,\n wodNoteListTool.name,\n out,\n out.notes\n .map((n) => `${n.id} ${(n.date ? new Date(n.date).toISOString().slice(0, 10) : '').padEnd(10)} ${n.title}`)\n .join('\\n') || '[wod note list] 0 notes',\n );\n }\n if (verb === 'get') {\n const noteId = arg1 ?? parsed.noteId;\n if (!noteId) throw new Error('Usage: wod note get <noteId>');\n const out = await wodNoteGetTool.execute({ noteId }, ctx);\n return emitSuccess(\n env,\n wodNoteGetTool.name,\n out,\n parsed.format === 'table' ? `${out.id} ${out.title}\\n\\n${out.rawContent}` : out.rawContent,\n );\n }\n if (verb === 'create' || verb === 'update' || verb === 'upsert') {\n const noteId = verb === 'update' ? (arg1 ?? parsed.noteId) : parsed.noteId;\n const fileArg = verb === 'update' ? arg2 : arg1;\n let content = await readContentArg(fileArg, parsed.markdown, env.readStdin);\n if (parsed.tags.length > 0 && !content.trimStart().startsWith('---')) {\n content = `---\\ntags:\\n${parsed.tags.map((t) => ` - ${t}`).join('\\n')}\\n---\\n\\n${content}`;\n }\n const out = await wodNoteUpsertTool.execute(\n {\n noteId,\n title: parsed.title,\n content,\n notebookId: toNotebookId(parsed.notebook),\n journalDate: parsed.date,\n sport: parsed.sport,\n },\n ctx,\n );\n return emitSuccess(\n env,\n wodNoteUpsertTool.name,\n out,\n `[wod note ${verb}] ${out.noteId}${out.created ? ' (created)' : ' (updated)'} — ${out.blockCount} block(s)`,\n );\n }\n if (verb === 'clone') {\n const sourceNoteId = arg1 ?? parsed.noteId;\n if (!sourceNoteId) {\n throw new Error('Usage: wod note clone <sourceNoteId> [--date YYYY-MM-DD] [--notebook <slug>]');\n }\n const out = await wodNoteCloneTool.execute(\n {\n sourceNoteId,\n title: parsed.title,\n targetNotebookId: toNotebookId(parsed.notebook),\n journalDate: parsed.date,\n },\n ctx,\n );\n return emitSuccess(\n env,\n wodNoteCloneTool.name,\n out,\n `[wod note clone] ${sourceNoteId} → ${out.noteId}`,\n );\n }\n if (verb === 'delete') {\n const noteId = arg1 ?? parsed.noteId;\n if (!noteId) throw new Error('Usage: wod note delete <noteId> --yes <noteId>');\n const out = await wodNoteDeleteTool.execute({ noteId, confirmId: parsed.yes }, ctx);\n return emitSuccess(\n env,\n wodNoteDeleteTool.name,\n out,\n `[wod note delete] deleted=${out.deleted} note=${out.noteId}`,\n );\n }\n throw new Error(`Unknown note verb \"${verb}\" (expected: list | get | create | update | clone | delete)`);\n }\n\n if (noun === 'journal') {\n if (verb === 'day' || !verb) {\n const date = arg1 ?? parsed.date ?? 'today';\n const out = await wodJournalDayTool.execute({ date }, ctx);\n return emitSuccess(\n env,\n wodJournalDayTool.name,\n out,\n `[wod journal day ${out.date}] ${out.noteCount} scheduled note(s), ${out.sessionCount} session(s)`,\n );\n }\n if (verb === 'add') {\n const date = arg1 ?? parsed.date ?? 'today';\n const sourceNoteId = parsed.sourceNoteId ?? parsed.noteId;\n if (sourceNoteId && !parsed.markdown && !arg2) {\n const cloned = await wodNoteCloneTool.execute(\n {\n sourceNoteId,\n title: parsed.title,\n targetNotebookId: toNotebookId(parsed.notebook ?? 'journal'),\n journalDate: date,\n },\n ctx,\n );\n return emitSuccess(\n env,\n wodNoteCloneTool.name,\n cloned,\n `[wod journal add] cloned ${sourceNoteId} → ${cloned.noteId} on ${date}`,\n );\n }\n const content = await readContentArg(arg2, parsed.markdown, env.readStdin);\n const out = await wodJournalAddTool.execute(\n {\n date,\n title: parsed.title,\n content,\n sport: parsed.sport,\n notebookId: toNotebookId(parsed.notebook),\n },\n ctx,\n );\n return emitSuccess(\n env,\n wodJournalAddTool.name,\n out,\n `[wod journal add] scheduled note ${out.noteId} on ${out.date}`,\n );\n }\n throw new Error(`Unknown journal verb \"${verb}\" (expected: day | add)`);\n }\n\n if (noun === 'notebook') {\n if (verb === 'list' || !verb) {\n const out = await wodNotebookListTool.execute({ origin: 'all' }, ctx);\n return emitSuccess(\n env,\n wodNotebookListTool.name,\n out,\n out.notebooks.map((nb) => `${nb.slug.padEnd(20)} (${nb.noteCount} notes) — ${nb.name}`).join('\\n') ||\n '[wod notebook list] 0 notebooks',\n );\n }\n if (verb === 'create' || verb === 'save' || verb === 'update') {\n const slugOrId = arg1 ?? parsed.notebook;\n const name = parsed.title ?? parsed.dbName ?? slugOrId;\n if (!name) throw new Error('Usage: wod notebook save <slug> --title \"<Name>\"');\n const notebookId = toNotebookId(slugOrId ?? slugifyName(name));\n const existing = notebookId\n ? await session.storage.readonly('notes').get(notebookId)\n : undefined;\n const action = verb === 'create' || !existing ? 'create' : 'update';\n const out = await wodNotebookSaveTool.execute(\n {\n action,\n notebookId,\n name,\n description: parsed.description,\n noteId: parsed.noteId,\n },\n ctx,\n );\n return emitSuccess(\n env,\n wodNotebookSaveTool.name,\n out,\n `[wod notebook ${verb}] ${out.notebookId ?? slugOrId ?? name}`,\n );\n }\n if (verb === 'promote' || verb === 'detach') {\n const slugOrId = arg1 ?? parsed.notebook;\n const noteId = arg2 ?? parsed.noteId;\n if (!slugOrId || !noteId) {\n throw new Error(`Usage: wod notebook ${verb} <slug> <noteId>`);\n }\n const out = await wodNotebookSaveTool.execute(\n {\n action: verb,\n notebookId: toNotebookId(slugOrId),\n noteId,\n },\n ctx,\n );\n return emitSuccess(\n env,\n wodNotebookSaveTool.name,\n out,\n `[wod notebook ${verb}] note ${out.noteId} → ${(out.notebookIds ?? []).join(', ')}`,\n );\n }\n if (verb === 'delete') {\n const slugOrId = arg1 ?? parsed.notebook;\n if (!slugOrId) throw new Error('Usage: wod notebook delete <slug> --yes <notebook/slug>');\n const notebookId = toNotebookId(slugOrId)!;\n const confirmId =\n parsed.yes === slugOrId ? notebookId : parsed.yes;\n const out = await wodNotebookDeleteTool.execute({ notebookId, confirmId }, ctx);\n return emitSuccess(\n env,\n wodNotebookDeleteTool.name,\n out,\n `[wod notebook delete] deleted ${out.notebookId}`,\n );\n }\n throw new Error(`Unknown notebook verb \"${verb}\" (expected: list | create | save | update | promote | detach | delete)`);\n }\n\n if (noun === 'session') {\n if (verb === 'list' || !verb) {\n const out = await wodSessionListTool.execute(\n {\n noteId: parsed.noteId,\n limit: parsed.limit,\n },\n ctx,\n );\n return emitSuccess(\n env,\n wodSessionListTool.name,\n out,\n out.sessions\n .map(\n (s) =>\n `${s.id} ${new Date(s.startTime).toISOString().slice(0, 10)} note=${s.noteId} completed=${s.completed}`,\n )\n .join('\\n') || '[wod session list] 0 sessions',\n );\n }\n if (verb === 'get') {\n const sessionId = arg1;\n if (!sessionId) throw new Error('Usage: wod session get <sessionId>');\n const out = await wodSessionGetTool.execute({ sessionId }, ctx);\n return emitSuccess(\n env,\n wodSessionGetTool.name,\n out,\n `[wod session get] ${out.session.id} — ${out.eventCount} event(s), duration=${out.session.duration}ms`,\n );\n }\n if (verb === 'run') {\n const noteId = parsed.noteId ?? arg1;\n const source = !noteId ? await readContentArg(arg1, parsed.markdown, env.readStdin) : undefined;\n const out = await wodSessionRunHeadlessTool.execute(\n {\n noteId,\n blockId: parsed.blockId,\n source,\n title: parsed.title,\n sport: parsed.sport,\n journalDate: parsed.date,\n collectibles: parsed.setPairs.length > 0 ? parseSetPairs(parsed.setPairs) : undefined,\n },\n ctx,\n );\n return emitSuccess(\n env,\n wodSessionRunHeadlessTool.name,\n out,\n `[wod session run] session ${out.sessionId} on note ${out.noteId} (${out.eventCount} events, ${out.summaryCount} summaries)`,\n );\n }\n if (verb === 'delete') {\n const sessionId = arg1;\n if (!sessionId) throw new Error('Usage: wod session delete <sessionId> --yes <sessionId>');\n const out = await wodSessionDeleteTool.execute({ sessionId, confirmId: parsed.yes }, ctx);\n return emitSuccess(\n env,\n wodSessionDeleteTool.name,\n out,\n `[wod session delete] deleted=${out.deleted} session=${out.sessionId}`,\n );\n }\n throw new Error(`Unknown session verb \"${verb}\" (expected: list | get | run | delete)`);\n }\n\n if (noun === 'catalog' || noun === 'tag') {\n const defaultKind = noun === 'tag' ? 'tag' : 'effort';\n if (verb === 'list' || verb === 'lookup' || !verb) {\n const kind =\n (noun === 'tag'\n ? 'tag'\n : (arg1 as 'effort' | 'equipment' | 'tag' | 'tag-type' | undefined)) ?? defaultKind;\n const out = await wodCatalogLookupTool.execute(\n {\n kind,\n search: parsed.search ?? (noun === 'tag' ? arg1 : arg2),\n slug: parsed.slug,\n notebookId: toNotebookId(parsed.notebook),\n limit: parsed.limit,\n },\n ctx,\n );\n return emitSuccess(\n env,\n wodCatalogLookupTool.name,\n out,\n `[wod ${noun} ${verb ?? 'list'}] ${out.items.length} ${out.kind} item(s)`,\n );\n }\n if (verb === 'get') {\n const kind = noun === 'tag' ? 'tag' : ((arg1 as 'effort' | 'equipment' | 'tag') ?? 'effort');\n const slug = noun === 'tag' ? arg1 : arg2;\n const out = await wodCatalogLookupTool.execute({ kind, slug }, ctx);\n return emitSuccess(\n env,\n wodCatalogLookupTool.name,\n out,\n JSON.stringify(out.items[0] ?? null, null, 2),\n );\n }\n if (verb === 'upsert' || verb === 'create') {\n const kind =\n noun === 'tag'\n ? 'tag'\n : ((arg1 as 'effort' | 'equipment' | 'tag' | 'tag-type') ?? 'effort');\n const label = (noun === 'tag' ? arg1 : arg2) ?? parsed.title ?? parsed.slug;\n if (!label) {\n throw new Error(\n `Usage: wod ${noun} upsert ${noun === 'tag' ? '<label> [--category <tagType>]' : '<effort|equipment|tag> <name>'}`,\n );\n }\n const slug = parsed.slug ?? slugifyName(label);\n const out = await wodCatalogUpsertTool.execute(\n {\n kind,\n slug,\n label,\n targetNotebookId: toNotebookId(parsed.notebook),\n markdown: parsed.markdown,\n category: parsed.category ?? parsed.tagType,\n aliases: parsed.aliases.length > 0 ? parsed.aliases : undefined,\n },\n ctx,\n );\n return emitSuccess(\n env,\n wodCatalogUpsertTool.name,\n out,\n `[wod ${noun} upsert] ${out.kind} ${out.slug} (${out.ownerNoteId})`,\n );\n }\n throw new Error(`Unknown ${noun} verb \"${verb}\" (expected: list | lookup | get | upsert)`);\n }\n\n if (noun === 'feed') {\n const action = (verb as 'list' | 'status' | 'publish' | 'import-bundle' | undefined) ?? 'list';\n const out = await wodFeedManageTool.execute(\n {\n action,\n notebookSlug: parsed.notebook,\n name: parsed.title,\n description: parsed.description,\n },\n ctx,\n );\n return emitSuccess(\n env,\n wodFeedManageTool.name,\n out,\n `[wod feed ${action}] ok`,\n );\n }\n\n throw new Error(`Unhandled agent command group \"${noun}\"`);\n } finally {\n await session.close();\n }\n } catch (err) {\n return emitError(env, err);\n }\n}\n"]}
|