@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.
Files changed (645) hide show
  1. package/dist/agentCommands-AMMASJPH.mjs +586 -0
  2. package/dist/agentCommands-AMMASJPH.mjs.map +1 -0
  3. package/dist/bin/wod.cjs +1071 -29
  4. package/dist/bin/wod.cjs.map +1 -1
  5. package/dist/bin/wod.mjs +2 -2
  6. package/dist/{chunk-LNBKPHEP.mjs → chunk-AS6OJRNH.mjs} +9 -4
  7. package/dist/chunk-AS6OJRNH.mjs.map +1 -0
  8. package/dist/{chunk-SLCRIGUR.mjs → chunk-KXNK4PIB.mjs} +168 -28
  9. package/dist/chunk-KXNK4PIB.mjs.map +1 -0
  10. package/dist/{chunk-5NNSHRMZ.mjs → chunk-T7VB7PPO.mjs} +3 -3
  11. package/dist/chunk-T7VB7PPO.mjs.map +1 -0
  12. package/dist/{chunk-2EWCEE6N.mjs → chunk-WLCUM7KO.mjs} +106 -6
  13. package/dist/chunk-WLCUM7KO.mjs.map +1 -0
  14. package/dist/chunk-ZZVL6UGV.mjs +144 -0
  15. package/dist/chunk-ZZVL6UGV.mjs.map +1 -0
  16. package/dist/index.cjs +1075 -29
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +68 -3
  19. package/dist/index.d.ts +68 -3
  20. package/dist/index.mjs +5 -4
  21. package/dist/mcp-D6QARYOG.mjs +73 -0
  22. package/dist/mcp-D6QARYOG.mjs.map +1 -0
  23. package/dist/{scaffoldFeed-TCRNXYQU.mjs → scaffoldFeed-D55NINVJ.mjs} +3 -3
  24. package/dist/{scaffoldFeed-TCRNXYQU.mjs.map → scaffoldFeed-D55NINVJ.mjs.map} +1 -1
  25. package/dist/server/app.cjs +239 -2
  26. package/dist/server/app.cjs.map +1 -1
  27. package/dist/server/app.d.cts +2 -0
  28. package/dist/server/app.d.ts +2 -0
  29. package/dist/server/app.mjs +3 -1
  30. package/dist/server-2GTVPJDA.mjs +13 -0
  31. package/dist/{server-SHNWCIIM.mjs.map → server-2GTVPJDA.mjs.map} +1 -1
  32. package/dist/skills/README.md +3 -0
  33. package/dist/skills/wod-agent-parity/SKILL.md +41 -0
  34. package/dist/skills/wod-cli/SKILL.md +127 -0
  35. package/dist/skills/wod-wql/SKILL.md +63 -0
  36. package/dist/web/playground/ai-skills/agent-parity.md +41 -0
  37. package/dist/web/playground/ai-skills/cli.md +127 -0
  38. package/dist/web/playground/ai-skills/wql.md +63 -0
  39. package/dist/web/playground/assets/main-BH_SMMzT.css +2 -0
  40. package/dist/web/playground/assets/main-vYMBKnsB.js +1152 -0
  41. package/dist/web/playground/assets/{statementBuilderFlow-CQWO7k9W.js → statementBuilderFlow-D8GG8Y7r.js} +2 -2
  42. package/dist/web/playground/assets/vendor-BUlwHBNF.js +255 -0
  43. package/dist/web/playground/assets/{vendor-codemirror-B4BeZarI.js → vendor-codemirror-Bh6hyz5v.js} +11 -11
  44. package/dist/web/playground/index.html +4 -4
  45. package/dist/web/playground/llms-full.txt +1444 -0
  46. package/dist/web/playground/llms.txt +67 -0
  47. package/dist/web/{server/seed/core/chunks/canvas.deac64e3.json → playground/seed/core/chunks/canvas.b0bc465b.json} +1 -1
  48. package/dist/web/playground/seed/core/chunks/{dashboards.08301ab4.json → dashboards.af9a29e4.json} +1 -1
  49. package/dist/web/playground/seed/core/chunks/{efforts.47f650fe.json → efforts.902271f9.json} +1 -1
  50. package/dist/web/playground/seed/core/chunks/{equipment.79146d31.json → equipment.dbdc1af3.json} +1 -1
  51. package/dist/web/playground/seed/core/indexes/notebooks/canvas.json +180 -180
  52. package/dist/web/playground/seed/core/indexes/notebooks/dashboards.json +16 -16
  53. package/dist/web/playground/seed/core/indexes/notebooks/efforts.json +326 -326
  54. package/dist/web/playground/seed/core/indexes/notebooks/equipment.json +50 -50
  55. package/dist/web/playground/seed/core/manifest.json +27 -27
  56. package/dist/web/playground/seed/core/markdown/canvas/ai-first/README.json +1 -1
  57. package/dist/web/playground/seed/core/markdown/canvas/guide/README.json +4 -4
  58. package/dist/web/playground/seed/core/markdown/canvas/guide/clock.json +1 -1
  59. package/dist/web/playground/seed/core/markdown/canvas/guide/dashboards.json +1 -1
  60. package/dist/web/playground/seed/core/markdown/canvas/guide/metrics-summaries.json +2 -2
  61. package/dist/web/playground/seed/core/markdown/canvas/guide/metrics.json +12 -12
  62. package/dist/web/playground/seed/core/markdown/canvas/guide/protocols.json +20 -20
  63. package/dist/web/playground/seed/core/markdown/canvas/guide/sessions.json +33 -33
  64. package/dist/web/playground/seed/core/markdown/canvas/guide/start.json +11 -11
  65. package/dist/web/playground/seed/core/markdown/canvas/guide/structure.json +25 -25
  66. package/dist/web/playground/seed/core/markdown/canvas/guide/wql.json +5 -5
  67. package/dist/web/playground/seed/core/markdown/canvas/home/sample-script.json +4 -4
  68. package/dist/web/playground/seed/core/markdown/canvas/home/welcome-1.json +2 -2
  69. package/dist/web/playground/seed/core/markdown/canvas/syntax/actions-comments.json +4 -4
  70. package/dist/web/playground/seed/core/markdown/canvas/syntax/alternating-emom.json +5 -5
  71. package/dist/web/playground/seed/core/markdown/canvas/syntax/basic-emom.json +4 -4
  72. package/dist/web/playground/seed/core/markdown/canvas/syntax/calculated-metrics.json +4 -4
  73. package/dist/web/playground/seed/core/markdown/canvas/syntax/classic-amrap.json +6 -6
  74. package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-barbell-cycling.json +4 -4
  75. package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-full-session.json +10 -10
  76. package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-nested-protocols.json +7 -7
  77. package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-partner-workout.json +7 -7
  78. package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-swimming.json +5 -5
  79. package/dist/web/playground/seed/core/markdown/canvas/syntax/core-rules.json +4 -4
  80. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-and-calculated-metrics.json +4 -4
  81. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-intervals.json +4 -4
  82. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-1.json +4 -4
  83. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-2.json +5 -5
  84. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-3.json +3 -3
  85. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-4.json +4 -4
  86. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-5.json +4 -4
  87. package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-climb-bouldering.json +2 -2
  88. package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-climb-hangboard.json +2 -2
  89. package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-climb-sport.json +2 -2
  90. package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-log.json +4 -4
  91. package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-plan.json +8 -8
  92. package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-wod.json +5 -5
  93. package/dist/web/playground/seed/core/markdown/canvas/syntax/distance-intervals.json +3 -3
  94. package/dist/web/playground/seed/core/markdown/canvas/syntax/document-1.json +4 -4
  95. package/dist/web/playground/seed/core/markdown/canvas/syntax/document-2.json +5 -5
  96. package/dist/web/playground/seed/core/markdown/canvas/syntax/document-3.json +10 -10
  97. package/dist/web/playground/seed/core/markdown/canvas/syntax/document-4.json +5 -5
  98. package/dist/web/playground/seed/core/markdown/canvas/syntax/effort-notes.json +5 -5
  99. package/dist/web/playground/seed/core/markdown/canvas/syntax/frontmatter-summaries.json +4 -4
  100. package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-1.json +5 -5
  101. package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-2.json +6 -6
  102. package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-3.json +3 -3
  103. package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-4.json +3 -3
  104. package/dist/web/playground/seed/core/markdown/canvas/syntax/longer-duration.json +4 -4
  105. package/dist/web/playground/seed/core/markdown/canvas/syntax/longer-intervals.json +4 -4
  106. package/dist/web/playground/seed/core/markdown/canvas/syntax/measurements.json +7 -7
  107. package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-1.json +5 -5
  108. package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-2.json +7 -7
  109. package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-3.json +8 -8
  110. package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-4.json +6 -6
  111. package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-5.json +5 -5
  112. package/dist/web/playground/seed/core/markdown/canvas/syntax/mixed-sections.json +10 -10
  113. package/dist/web/playground/seed/core/markdown/canvas/syntax/mixed-timers.json +5 -5
  114. package/dist/web/playground/seed/core/markdown/canvas/syntax/multiple-amrap-windows.json +7 -7
  115. package/dist/web/playground/seed/core/markdown/canvas/syntax/multiple-sets.json +4 -4
  116. package/dist/web/playground/seed/core/markdown/canvas/syntax/named-groups.json +6 -6
  117. package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-1.json +6 -6
  118. package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-2.json +4 -4
  119. package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-3.json +6 -6
  120. package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-4.json +3 -3
  121. package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-5.json +4 -4
  122. package/dist/web/playground/seed/core/markdown/canvas/syntax/single-movement.json +3 -3
  123. package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-1.json +4 -4
  124. package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-2.json +5 -5
  125. package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-3.json +4 -4
  126. package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-4.json +4 -4
  127. package/dist/web/playground/seed/core/markdown/canvas/syntax/time-cap.json +6 -6
  128. package/dist/web/playground/seed/core/markdown/canvas/syntax/timer-modifiers.json +6 -6
  129. package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-1.json +6 -6
  130. package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-2.json +4 -4
  131. package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-3.json +4 -4
  132. package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-4.json +4 -4
  133. package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-5.json +5 -5
  134. package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-rest.json +4 -4
  135. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/aggregate-by-effort.json +2 -2
  136. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/aggregate-by-week.json +2 -2
  137. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/content-fran.json +2 -2
  138. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/filter-combos.json +2 -2
  139. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/pipes-limit.json +2 -2
  140. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/session-rpe.json +2 -2
  141. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/source-journal.json +2 -2
  142. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/tis-trend.json +2 -2
  143. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/where-join.json +2 -2
  144. package/dist/web/playground/seed/core/markdown/dashboards/benchmark-pr-board.json +6 -6
  145. package/dist/web/playground/seed/core/markdown/dashboards/finger-strength-v8.json +5 -5
  146. package/dist/web/playground/seed/core/markdown/dashboards/polarized-base-marathon.json +9 -9
  147. package/dist/web/playground/seed/core/markdown/dashboards/recovery-readiness.json +7 -7
  148. package/dist/web/playground/seed/core/markdown/dashboards/road-to-560-total.json +9 -9
  149. package/dist/web/playground/seed/core/markdown/dashboards/training-block-review.json +11 -11
  150. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/air-squat.json +1 -1
  151. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/box-jump.json +1 -1
  152. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/broad-jump.json +1 -1
  153. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/burpee-box-jump-over.json +1 -1
  154. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/burpee-over-dumbbell.json +1 -1
  155. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/burpee.json +1 -1
  156. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/dumbbell-squat-clean.json +1 -1
  157. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/ghd-sit-up.json +1 -1
  158. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/ground-kong.json +1 -1
  159. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/jumping-jack.json +1 -1
  160. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/kong-walk.json +1 -1
  161. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/lunge.json +1 -1
  162. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/overhead-squat.json +1 -1
  163. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/parkour-roll.json +1 -1
  164. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/parkour-squat.json +1 -1
  165. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/pistol-squat.json +1 -1
  166. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/plank.json +1 -1
  167. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/precision-burpee.json +1 -1
  168. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/precision-jump.json +1 -1
  169. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/quadrupedal-movement.json +1 -1
  170. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/russian-twist.json +1 -1
  171. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/sit-up.json +1 -1
  172. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/squat-clean.json +1 -1
  173. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/squat-hold.json +1 -1
  174. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/squat-snatch.json +1 -1
  175. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/tuck-jump.json +1 -1
  176. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/wall-ball.json +1 -1
  177. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/wall-burpee.json +1 -1
  178. package/dist/web/playground/seed/core/markdown/efforts/cycling/assault-bike.json +1 -1
  179. package/dist/web/playground/seed/core/markdown/efforts/cycling/cycling-moderate.json +1 -1
  180. package/dist/web/playground/seed/core/markdown/efforts/cycling/cycling-vigorous.json +1 -1
  181. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/assisted-pull-up.json +1 -1
  182. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/burpee-pull-up.json +1 -1
  183. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/chest-to-bar-pull-up.json +1 -1
  184. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/dip.json +1 -1
  185. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/double-under.json +1 -1
  186. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/handstand-hold.json +1 -1
  187. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/handstand-push-up.json +1 -1
  188. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/handstand-walk.json +1 -1
  189. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/jump-rope.json +1 -1
  190. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/jumping-pull-up.json +1 -1
  191. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/jumping-push-up.json +1 -1
  192. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/l-sit-pull-up.json +1 -1
  193. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/muscle-up.json +1 -1
  194. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/pull-up.json +1 -1
  195. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/push-up.json +1 -1
  196. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/reverse-wall-dip.json +1 -1
  197. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/rope-climb.json +1 -1
  198. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/toes-to-bar.json +1 -1
  199. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-arm-bar.json +1 -1
  200. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-around-the-world.json +1 -1
  201. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-bent-over-row.json +1 -1
  202. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-jerk.json +1 -1
  203. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-press.json +1 -1
  204. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-clean.json +1 -1
  205. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-deadlift.json +1 -1
  206. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-floor-press.json +1 -1
  207. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-front-squat.json +1 -1
  208. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-goblet-squat.json +1 -1
  209. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-gorilla-row.json +1 -1
  210. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-halo.json +1 -1
  211. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-jerk.json +1 -1
  212. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-overhead-squat.json +1 -1
  213. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-press.json +1 -1
  214. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-snatch.json +1 -1
  215. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-swing.json +1 -1
  216. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-windmill.json +1 -1
  217. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/turkish-get-up.json +1 -1
  218. package/dist/web/playground/seed/core/markdown/efforts/recovery/rest.json +1 -1
  219. package/dist/web/playground/seed/core/markdown/efforts/recovery/stretching.json +1 -1
  220. package/dist/web/playground/seed/core/markdown/efforts/rowing/rowing-sprint.json +1 -1
  221. package/dist/web/playground/seed/core/markdown/efforts/rowing/rowing.json +1 -1
  222. package/dist/web/playground/seed/core/markdown/efforts/rowing/ski-erg.json +1 -1
  223. package/dist/web/playground/seed/core/markdown/efforts/running/backward-running.json +1 -1
  224. package/dist/web/playground/seed/core/markdown/efforts/running/running-6-mph.json +1 -1
  225. package/dist/web/playground/seed/core/markdown/efforts/running/running-8-mph.json +1 -1
  226. package/dist/web/playground/seed/core/markdown/efforts/running/running-sprint.json +1 -1
  227. package/dist/web/playground/seed/core/markdown/efforts/snatch.json +2 -2
  228. package/dist/web/playground/seed/core/markdown/efforts/strength/back-squat.json +1 -1
  229. package/dist/web/playground/seed/core/markdown/efforts/strength/bench-press.json +1 -1
  230. package/dist/web/playground/seed/core/markdown/efforts/strength/box-step-up.json +1 -1
  231. package/dist/web/playground/seed/core/markdown/efforts/strength/carioca.json +1 -1
  232. package/dist/web/playground/seed/core/markdown/efforts/strength/clean-and-jerk.json +1 -1
  233. package/dist/web/playground/seed/core/markdown/efforts/strength/cluster.json +1 -1
  234. package/dist/web/playground/seed/core/markdown/efforts/strength/dead-hang.json +1 -1
  235. package/dist/web/playground/seed/core/markdown/efforts/strength/deadlift.json +1 -1
  236. package/dist/web/playground/seed/core/markdown/efforts/strength/devils-press.json +1 -1
  237. package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-box-step-up.json +1 -1
  238. package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-clean.json +1 -1
  239. package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-fly.json +1 -1
  240. package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-row.json +1 -1
  241. package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-snatch.json +1 -1
  242. package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-thruster.json +1 -1
  243. package/dist/web/playground/seed/core/markdown/efforts/strength/elbows-to-knees.json +1 -1
  244. package/dist/web/playground/seed/core/markdown/efforts/strength/farmer-carry.json +1 -1
  245. package/dist/web/playground/seed/core/markdown/efforts/strength/frog-stand.json +1 -1
  246. package/dist/web/playground/seed/core/markdown/efforts/strength/front-squat.json +1 -1
  247. package/dist/web/playground/seed/core/markdown/efforts/strength/good-morning.json +1 -1
  248. package/dist/web/playground/seed/core/markdown/efforts/strength/hanging-leg-raise.json +1 -1
  249. package/dist/web/playground/seed/core/markdown/efforts/strength/hollow-rock.json +1 -1
  250. package/dist/web/playground/seed/core/markdown/efforts/strength/knees-to-elbows.json +1 -1
  251. package/dist/web/playground/seed/core/markdown/efforts/strength/l-sit.json +1 -1
  252. package/dist/web/playground/seed/core/markdown/efforts/strength/man-maker.json +1 -1
  253. package/dist/web/playground/seed/core/markdown/efforts/strength/medicine-ball-clean.json +1 -1
  254. package/dist/web/playground/seed/core/markdown/efforts/strength/overhead-press.json +1 -1
  255. package/dist/web/playground/seed/core/markdown/efforts/strength/parkour-vault.json +1 -1
  256. package/dist/web/playground/seed/core/markdown/efforts/strength/pig-flip.json +1 -1
  257. package/dist/web/playground/seed/core/markdown/efforts/strength/power-clean.json +1 -1
  258. package/dist/web/playground/seed/core/markdown/efforts/strength/power-snatch.json +1 -1
  259. package/dist/web/playground/seed/core/markdown/efforts/strength/push-jerk.json +1 -1
  260. package/dist/web/playground/seed/core/markdown/efforts/strength/push-press.json +1 -1
  261. package/dist/web/playground/seed/core/markdown/efforts/strength/romanian-deadlift.json +1 -1
  262. package/dist/web/playground/seed/core/markdown/efforts/strength/single-leg-deadlift.json +1 -1
  263. package/dist/web/playground/seed/core/markdown/efforts/strength/skull-crusher.json +1 -1
  264. package/dist/web/playground/seed/core/markdown/efforts/strength/slam-ball.json +1 -1
  265. package/dist/web/playground/seed/core/markdown/efforts/strength/sled-pull.json +1 -1
  266. package/dist/web/playground/seed/core/markdown/efforts/strength/sled-push.json +1 -1
  267. package/dist/web/playground/seed/core/markdown/efforts/strength/sumo-deadlift.json +1 -1
  268. package/dist/web/playground/seed/core/markdown/efforts/strength/thruster.json +1 -1
  269. package/dist/web/playground/seed/core/markdown/efforts/strength/triceps-extension.json +1 -1
  270. package/dist/web/playground/seed/core/markdown/efforts/strength/v-sit-hold.json +1 -1
  271. package/dist/web/playground/seed/core/markdown/efforts/strength/wall-walk.json +1 -1
  272. package/dist/web/playground/seed/core/markdown/efforts/strength/yoga-sun-salutation.json +1 -1
  273. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-assisted-sprint.json +1 -1
  274. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-backstroke.json +1 -1
  275. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-breaststroke-kick.json +1 -1
  276. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-breaststroke.json +1 -1
  277. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-butterfly.json +1 -1
  278. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-catch-up-drill.json +1 -1
  279. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-choice-stroke.json +1 -1
  280. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-dive-start.json +1 -1
  281. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-dolphin-kick.json +1 -1
  282. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-drafting.json +1 -1
  283. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-fingertip-drag.json +1 -1
  284. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-freestyle.json +1 -1
  285. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-individual-medley.json +1 -1
  286. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-kick.json +1 -1
  287. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-pull.json +1 -1
  288. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-resisted-sprint.json +1 -1
  289. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-rotation-drill.json +1 -1
  290. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-sighting.json +1 -1
  291. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-single-arm-drill.json +1 -1
  292. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-stroke-transition.json +1 -1
  293. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-two-kick-one-pull.json +1 -1
  294. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-vigorous.json +1 -1
  295. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming.json +1 -1
  296. package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-arm-cast.json +1 -1
  297. package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-circles.json +1 -1
  298. package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-mill.json +1 -1
  299. package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-reverse-mill.json +1 -1
  300. package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-shield-cast.json +1 -1
  301. package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-10-to-2-swing.json +1 -1
  302. package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-360-swing.json +1 -1
  303. package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-barbarian-squat.json +1 -1
  304. package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-flow.json +1 -1
  305. package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-gravedigger.json +1 -1
  306. package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-touchdown.json +1 -1
  307. package/dist/web/playground/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-carry.json +1 -1
  308. package/dist/web/playground/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-extension.json +1 -1
  309. package/dist/web/playground/seed/core/markdown/efforts/unconventional/sandbag-over-shoulder.json +1 -1
  310. package/dist/web/playground/seed/core/markdown/efforts/walking/walking-3-mph.json +1 -1
  311. package/dist/web/playground/seed/core/markdown/equipment/air-bike.json +1 -1
  312. package/dist/web/playground/seed/core/markdown/equipment/barbell.json +1 -1
  313. package/dist/web/playground/seed/core/markdown/equipment/bench.json +1 -1
  314. package/dist/web/playground/seed/core/markdown/equipment/bike-erg.json +1 -1
  315. package/dist/web/playground/seed/core/markdown/equipment/climbing-rope.json +1 -1
  316. package/dist/web/playground/seed/core/markdown/equipment/clubs.json +1 -1
  317. package/dist/web/playground/seed/core/markdown/equipment/dumbbell.json +1 -1
  318. package/dist/web/playground/seed/core/markdown/equipment/ghd.json +1 -1
  319. package/dist/web/playground/seed/core/markdown/equipment/gymnastic-rings.json +1 -1
  320. package/dist/web/playground/seed/core/markdown/equipment/jump-rope.json +1 -1
  321. package/dist/web/playground/seed/core/markdown/equipment/kettlebell.json +1 -1
  322. package/dist/web/playground/seed/core/markdown/equipment/macebell.json +1 -1
  323. package/dist/web/playground/seed/core/markdown/equipment/medicine-ball.json +1 -1
  324. package/dist/web/playground/seed/core/markdown/equipment/parallettes.json +1 -1
  325. package/dist/web/playground/seed/core/markdown/equipment/plyo-box.json +1 -1
  326. package/dist/web/playground/seed/core/markdown/equipment/pull-up-bar.json +1 -1
  327. package/dist/web/playground/seed/core/markdown/equipment/rower.json +1 -1
  328. package/dist/web/playground/seed/core/markdown/equipment/sandbag.json +1 -1
  329. package/dist/web/playground/seed/core/markdown/equipment/ski-erg.json +1 -1
  330. package/dist/web/playground/seed/core/markdown/equipment/slam-ball.json +1 -1
  331. package/dist/web/playground/seed/core/markdown/equipment/sled.json +1 -1
  332. package/dist/web/playground/seed/core/markdown/equipment/sledgehammer.json +1 -1
  333. package/dist/web/playground/seed/core/markdown/equipment/weight-vest.json +1 -1
  334. package/dist/web/playground/seed/core/report.html +13 -13
  335. package/dist/web/server/ai-skills/agent-parity.md +41 -0
  336. package/dist/web/server/ai-skills/cli.md +127 -0
  337. package/dist/web/server/ai-skills/wql.md +63 -0
  338. package/dist/web/server/assets/main-BH_SMMzT.css +2 -0
  339. package/dist/web/server/assets/main-D0W-D5YL.js +1152 -0
  340. package/dist/web/server/assets/{statementBuilderFlow-C7x-7JGx.js → statementBuilderFlow-CtmmV_Yv.js} +2 -2
  341. package/dist/web/server/assets/vendor-BUlwHBNF.js +255 -0
  342. package/dist/web/server/assets/{vendor-codemirror-B4BeZarI.js → vendor-codemirror-Bh6hyz5v.js} +11 -11
  343. package/dist/web/server/index.html +4 -4
  344. package/dist/web/server/llms-full.txt +1444 -0
  345. package/dist/web/server/llms.txt +67 -0
  346. package/dist/web/{playground/seed/core/chunks/canvas.deac64e3.json → server/seed/core/chunks/canvas.b0bc465b.json} +1 -1
  347. package/dist/web/server/seed/core/chunks/{dashboards.08301ab4.json → dashboards.af9a29e4.json} +1 -1
  348. package/dist/web/server/seed/core/chunks/{efforts.47f650fe.json → efforts.902271f9.json} +1 -1
  349. package/dist/web/server/seed/core/chunks/{equipment.79146d31.json → equipment.dbdc1af3.json} +1 -1
  350. package/dist/web/server/seed/core/indexes/notebooks/canvas.json +180 -180
  351. package/dist/web/server/seed/core/indexes/notebooks/dashboards.json +16 -16
  352. package/dist/web/server/seed/core/indexes/notebooks/efforts.json +326 -326
  353. package/dist/web/server/seed/core/indexes/notebooks/equipment.json +50 -50
  354. package/dist/web/server/seed/core/manifest.json +27 -27
  355. package/dist/web/server/seed/core/markdown/canvas/ai-first/README.json +1 -1
  356. package/dist/web/server/seed/core/markdown/canvas/guide/README.json +4 -4
  357. package/dist/web/server/seed/core/markdown/canvas/guide/clock.json +1 -1
  358. package/dist/web/server/seed/core/markdown/canvas/guide/dashboards.json +1 -1
  359. package/dist/web/server/seed/core/markdown/canvas/guide/metrics-summaries.json +2 -2
  360. package/dist/web/server/seed/core/markdown/canvas/guide/metrics.json +12 -12
  361. package/dist/web/server/seed/core/markdown/canvas/guide/protocols.json +20 -20
  362. package/dist/web/server/seed/core/markdown/canvas/guide/sessions.json +33 -33
  363. package/dist/web/server/seed/core/markdown/canvas/guide/start.json +11 -11
  364. package/dist/web/server/seed/core/markdown/canvas/guide/structure.json +25 -25
  365. package/dist/web/server/seed/core/markdown/canvas/guide/wql.json +5 -5
  366. package/dist/web/server/seed/core/markdown/canvas/home/sample-script.json +4 -4
  367. package/dist/web/server/seed/core/markdown/canvas/home/welcome-1.json +2 -2
  368. package/dist/web/server/seed/core/markdown/canvas/syntax/actions-comments.json +4 -4
  369. package/dist/web/server/seed/core/markdown/canvas/syntax/alternating-emom.json +5 -5
  370. package/dist/web/server/seed/core/markdown/canvas/syntax/basic-emom.json +4 -4
  371. package/dist/web/server/seed/core/markdown/canvas/syntax/calculated-metrics.json +4 -4
  372. package/dist/web/server/seed/core/markdown/canvas/syntax/classic-amrap.json +6 -6
  373. package/dist/web/server/seed/core/markdown/canvas/syntax/complex-barbell-cycling.json +4 -4
  374. package/dist/web/server/seed/core/markdown/canvas/syntax/complex-full-session.json +10 -10
  375. package/dist/web/server/seed/core/markdown/canvas/syntax/complex-nested-protocols.json +7 -7
  376. package/dist/web/server/seed/core/markdown/canvas/syntax/complex-partner-workout.json +7 -7
  377. package/dist/web/server/seed/core/markdown/canvas/syntax/complex-swimming.json +5 -5
  378. package/dist/web/server/seed/core/markdown/canvas/syntax/core-rules.json +4 -4
  379. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-and-calculated-metrics.json +4 -4
  380. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-intervals.json +4 -4
  381. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-1.json +4 -4
  382. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-2.json +5 -5
  383. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-3.json +3 -3
  384. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-4.json +4 -4
  385. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-5.json +4 -4
  386. package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-climb-bouldering.json +2 -2
  387. package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-climb-hangboard.json +2 -2
  388. package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-climb-sport.json +2 -2
  389. package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-log.json +4 -4
  390. package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-plan.json +8 -8
  391. package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-wod.json +5 -5
  392. package/dist/web/server/seed/core/markdown/canvas/syntax/distance-intervals.json +3 -3
  393. package/dist/web/server/seed/core/markdown/canvas/syntax/document-1.json +4 -4
  394. package/dist/web/server/seed/core/markdown/canvas/syntax/document-2.json +5 -5
  395. package/dist/web/server/seed/core/markdown/canvas/syntax/document-3.json +10 -10
  396. package/dist/web/server/seed/core/markdown/canvas/syntax/document-4.json +5 -5
  397. package/dist/web/server/seed/core/markdown/canvas/syntax/effort-notes.json +5 -5
  398. package/dist/web/server/seed/core/markdown/canvas/syntax/frontmatter-summaries.json +4 -4
  399. package/dist/web/server/seed/core/markdown/canvas/syntax/groups-1.json +5 -5
  400. package/dist/web/server/seed/core/markdown/canvas/syntax/groups-2.json +6 -6
  401. package/dist/web/server/seed/core/markdown/canvas/syntax/groups-3.json +3 -3
  402. package/dist/web/server/seed/core/markdown/canvas/syntax/groups-4.json +3 -3
  403. package/dist/web/server/seed/core/markdown/canvas/syntax/longer-duration.json +4 -4
  404. package/dist/web/server/seed/core/markdown/canvas/syntax/longer-intervals.json +4 -4
  405. package/dist/web/server/seed/core/markdown/canvas/syntax/measurements.json +7 -7
  406. package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-1.json +5 -5
  407. package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-2.json +7 -7
  408. package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-3.json +8 -8
  409. package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-4.json +6 -6
  410. package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-5.json +5 -5
  411. package/dist/web/server/seed/core/markdown/canvas/syntax/mixed-sections.json +10 -10
  412. package/dist/web/server/seed/core/markdown/canvas/syntax/mixed-timers.json +5 -5
  413. package/dist/web/server/seed/core/markdown/canvas/syntax/multiple-amrap-windows.json +7 -7
  414. package/dist/web/server/seed/core/markdown/canvas/syntax/multiple-sets.json +4 -4
  415. package/dist/web/server/seed/core/markdown/canvas/syntax/named-groups.json +6 -6
  416. package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-1.json +6 -6
  417. package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-2.json +4 -4
  418. package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-3.json +6 -6
  419. package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-4.json +3 -3
  420. package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-5.json +4 -4
  421. package/dist/web/server/seed/core/markdown/canvas/syntax/single-movement.json +3 -3
  422. package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-1.json +4 -4
  423. package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-2.json +5 -5
  424. package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-3.json +4 -4
  425. package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-4.json +4 -4
  426. package/dist/web/server/seed/core/markdown/canvas/syntax/time-cap.json +6 -6
  427. package/dist/web/server/seed/core/markdown/canvas/syntax/timer-modifiers.json +6 -6
  428. package/dist/web/server/seed/core/markdown/canvas/syntax/timers-1.json +6 -6
  429. package/dist/web/server/seed/core/markdown/canvas/syntax/timers-2.json +4 -4
  430. package/dist/web/server/seed/core/markdown/canvas/syntax/timers-3.json +4 -4
  431. package/dist/web/server/seed/core/markdown/canvas/syntax/timers-4.json +4 -4
  432. package/dist/web/server/seed/core/markdown/canvas/syntax/timers-5.json +5 -5
  433. package/dist/web/server/seed/core/markdown/canvas/syntax/timers-rest.json +4 -4
  434. package/dist/web/server/seed/core/markdown/canvas/wql-presets/aggregate-by-effort.json +2 -2
  435. package/dist/web/server/seed/core/markdown/canvas/wql-presets/aggregate-by-week.json +2 -2
  436. package/dist/web/server/seed/core/markdown/canvas/wql-presets/content-fran.json +2 -2
  437. package/dist/web/server/seed/core/markdown/canvas/wql-presets/filter-combos.json +2 -2
  438. package/dist/web/server/seed/core/markdown/canvas/wql-presets/pipes-limit.json +2 -2
  439. package/dist/web/server/seed/core/markdown/canvas/wql-presets/session-rpe.json +2 -2
  440. package/dist/web/server/seed/core/markdown/canvas/wql-presets/source-journal.json +2 -2
  441. package/dist/web/server/seed/core/markdown/canvas/wql-presets/tis-trend.json +2 -2
  442. package/dist/web/server/seed/core/markdown/canvas/wql-presets/where-join.json +2 -2
  443. package/dist/web/server/seed/core/markdown/dashboards/benchmark-pr-board.json +6 -6
  444. package/dist/web/server/seed/core/markdown/dashboards/finger-strength-v8.json +5 -5
  445. package/dist/web/server/seed/core/markdown/dashboards/polarized-base-marathon.json +9 -9
  446. package/dist/web/server/seed/core/markdown/dashboards/recovery-readiness.json +7 -7
  447. package/dist/web/server/seed/core/markdown/dashboards/road-to-560-total.json +9 -9
  448. package/dist/web/server/seed/core/markdown/dashboards/training-block-review.json +11 -11
  449. package/dist/web/server/seed/core/markdown/efforts/bodyweight/air-squat.json +1 -1
  450. package/dist/web/server/seed/core/markdown/efforts/bodyweight/box-jump.json +1 -1
  451. package/dist/web/server/seed/core/markdown/efforts/bodyweight/broad-jump.json +1 -1
  452. package/dist/web/server/seed/core/markdown/efforts/bodyweight/burpee-box-jump-over.json +1 -1
  453. package/dist/web/server/seed/core/markdown/efforts/bodyweight/burpee-over-dumbbell.json +1 -1
  454. package/dist/web/server/seed/core/markdown/efforts/bodyweight/burpee.json +1 -1
  455. package/dist/web/server/seed/core/markdown/efforts/bodyweight/dumbbell-squat-clean.json +1 -1
  456. package/dist/web/server/seed/core/markdown/efforts/bodyweight/ghd-sit-up.json +1 -1
  457. package/dist/web/server/seed/core/markdown/efforts/bodyweight/ground-kong.json +1 -1
  458. package/dist/web/server/seed/core/markdown/efforts/bodyweight/jumping-jack.json +1 -1
  459. package/dist/web/server/seed/core/markdown/efforts/bodyweight/kong-walk.json +1 -1
  460. package/dist/web/server/seed/core/markdown/efforts/bodyweight/lunge.json +1 -1
  461. package/dist/web/server/seed/core/markdown/efforts/bodyweight/overhead-squat.json +1 -1
  462. package/dist/web/server/seed/core/markdown/efforts/bodyweight/parkour-roll.json +1 -1
  463. package/dist/web/server/seed/core/markdown/efforts/bodyweight/parkour-squat.json +1 -1
  464. package/dist/web/server/seed/core/markdown/efforts/bodyweight/pistol-squat.json +1 -1
  465. package/dist/web/server/seed/core/markdown/efforts/bodyweight/plank.json +1 -1
  466. package/dist/web/server/seed/core/markdown/efforts/bodyweight/precision-burpee.json +1 -1
  467. package/dist/web/server/seed/core/markdown/efforts/bodyweight/precision-jump.json +1 -1
  468. package/dist/web/server/seed/core/markdown/efforts/bodyweight/quadrupedal-movement.json +1 -1
  469. package/dist/web/server/seed/core/markdown/efforts/bodyweight/russian-twist.json +1 -1
  470. package/dist/web/server/seed/core/markdown/efforts/bodyweight/sit-up.json +1 -1
  471. package/dist/web/server/seed/core/markdown/efforts/bodyweight/squat-clean.json +1 -1
  472. package/dist/web/server/seed/core/markdown/efforts/bodyweight/squat-hold.json +1 -1
  473. package/dist/web/server/seed/core/markdown/efforts/bodyweight/squat-snatch.json +1 -1
  474. package/dist/web/server/seed/core/markdown/efforts/bodyweight/tuck-jump.json +1 -1
  475. package/dist/web/server/seed/core/markdown/efforts/bodyweight/wall-ball.json +1 -1
  476. package/dist/web/server/seed/core/markdown/efforts/bodyweight/wall-burpee.json +1 -1
  477. package/dist/web/server/seed/core/markdown/efforts/cycling/assault-bike.json +1 -1
  478. package/dist/web/server/seed/core/markdown/efforts/cycling/cycling-moderate.json +1 -1
  479. package/dist/web/server/seed/core/markdown/efforts/cycling/cycling-vigorous.json +1 -1
  480. package/dist/web/server/seed/core/markdown/efforts/gymnastics/assisted-pull-up.json +1 -1
  481. package/dist/web/server/seed/core/markdown/efforts/gymnastics/burpee-pull-up.json +1 -1
  482. package/dist/web/server/seed/core/markdown/efforts/gymnastics/chest-to-bar-pull-up.json +1 -1
  483. package/dist/web/server/seed/core/markdown/efforts/gymnastics/dip.json +1 -1
  484. package/dist/web/server/seed/core/markdown/efforts/gymnastics/double-under.json +1 -1
  485. package/dist/web/server/seed/core/markdown/efforts/gymnastics/handstand-hold.json +1 -1
  486. package/dist/web/server/seed/core/markdown/efforts/gymnastics/handstand-push-up.json +1 -1
  487. package/dist/web/server/seed/core/markdown/efforts/gymnastics/handstand-walk.json +1 -1
  488. package/dist/web/server/seed/core/markdown/efforts/gymnastics/jump-rope.json +1 -1
  489. package/dist/web/server/seed/core/markdown/efforts/gymnastics/jumping-pull-up.json +1 -1
  490. package/dist/web/server/seed/core/markdown/efforts/gymnastics/jumping-push-up.json +1 -1
  491. package/dist/web/server/seed/core/markdown/efforts/gymnastics/l-sit-pull-up.json +1 -1
  492. package/dist/web/server/seed/core/markdown/efforts/gymnastics/muscle-up.json +1 -1
  493. package/dist/web/server/seed/core/markdown/efforts/gymnastics/pull-up.json +1 -1
  494. package/dist/web/server/seed/core/markdown/efforts/gymnastics/push-up.json +1 -1
  495. package/dist/web/server/seed/core/markdown/efforts/gymnastics/reverse-wall-dip.json +1 -1
  496. package/dist/web/server/seed/core/markdown/efforts/gymnastics/rope-climb.json +1 -1
  497. package/dist/web/server/seed/core/markdown/efforts/gymnastics/toes-to-bar.json +1 -1
  498. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-arm-bar.json +1 -1
  499. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-around-the-world.json +1 -1
  500. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-bent-over-row.json +1 -1
  501. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-jerk.json +1 -1
  502. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-press.json +1 -1
  503. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-clean.json +1 -1
  504. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-deadlift.json +1 -1
  505. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-floor-press.json +1 -1
  506. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-front-squat.json +1 -1
  507. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-goblet-squat.json +1 -1
  508. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-gorilla-row.json +1 -1
  509. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-halo.json +1 -1
  510. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-jerk.json +1 -1
  511. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-overhead-squat.json +1 -1
  512. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-press.json +1 -1
  513. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-snatch.json +1 -1
  514. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-swing.json +1 -1
  515. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-windmill.json +1 -1
  516. package/dist/web/server/seed/core/markdown/efforts/kettlebell/turkish-get-up.json +1 -1
  517. package/dist/web/server/seed/core/markdown/efforts/recovery/rest.json +1 -1
  518. package/dist/web/server/seed/core/markdown/efforts/recovery/stretching.json +1 -1
  519. package/dist/web/server/seed/core/markdown/efforts/rowing/rowing-sprint.json +1 -1
  520. package/dist/web/server/seed/core/markdown/efforts/rowing/rowing.json +1 -1
  521. package/dist/web/server/seed/core/markdown/efforts/rowing/ski-erg.json +1 -1
  522. package/dist/web/server/seed/core/markdown/efforts/running/backward-running.json +1 -1
  523. package/dist/web/server/seed/core/markdown/efforts/running/running-6-mph.json +1 -1
  524. package/dist/web/server/seed/core/markdown/efforts/running/running-8-mph.json +1 -1
  525. package/dist/web/server/seed/core/markdown/efforts/running/running-sprint.json +1 -1
  526. package/dist/web/server/seed/core/markdown/efforts/snatch.json +2 -2
  527. package/dist/web/server/seed/core/markdown/efforts/strength/back-squat.json +1 -1
  528. package/dist/web/server/seed/core/markdown/efforts/strength/bench-press.json +1 -1
  529. package/dist/web/server/seed/core/markdown/efforts/strength/box-step-up.json +1 -1
  530. package/dist/web/server/seed/core/markdown/efforts/strength/carioca.json +1 -1
  531. package/dist/web/server/seed/core/markdown/efforts/strength/clean-and-jerk.json +1 -1
  532. package/dist/web/server/seed/core/markdown/efforts/strength/cluster.json +1 -1
  533. package/dist/web/server/seed/core/markdown/efforts/strength/dead-hang.json +1 -1
  534. package/dist/web/server/seed/core/markdown/efforts/strength/deadlift.json +1 -1
  535. package/dist/web/server/seed/core/markdown/efforts/strength/devils-press.json +1 -1
  536. package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-box-step-up.json +1 -1
  537. package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-clean.json +1 -1
  538. package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-fly.json +1 -1
  539. package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-row.json +1 -1
  540. package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-snatch.json +1 -1
  541. package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-thruster.json +1 -1
  542. package/dist/web/server/seed/core/markdown/efforts/strength/elbows-to-knees.json +1 -1
  543. package/dist/web/server/seed/core/markdown/efforts/strength/farmer-carry.json +1 -1
  544. package/dist/web/server/seed/core/markdown/efforts/strength/frog-stand.json +1 -1
  545. package/dist/web/server/seed/core/markdown/efforts/strength/front-squat.json +1 -1
  546. package/dist/web/server/seed/core/markdown/efforts/strength/good-morning.json +1 -1
  547. package/dist/web/server/seed/core/markdown/efforts/strength/hanging-leg-raise.json +1 -1
  548. package/dist/web/server/seed/core/markdown/efforts/strength/hollow-rock.json +1 -1
  549. package/dist/web/server/seed/core/markdown/efforts/strength/knees-to-elbows.json +1 -1
  550. package/dist/web/server/seed/core/markdown/efforts/strength/l-sit.json +1 -1
  551. package/dist/web/server/seed/core/markdown/efforts/strength/man-maker.json +1 -1
  552. package/dist/web/server/seed/core/markdown/efforts/strength/medicine-ball-clean.json +1 -1
  553. package/dist/web/server/seed/core/markdown/efforts/strength/overhead-press.json +1 -1
  554. package/dist/web/server/seed/core/markdown/efforts/strength/parkour-vault.json +1 -1
  555. package/dist/web/server/seed/core/markdown/efforts/strength/pig-flip.json +1 -1
  556. package/dist/web/server/seed/core/markdown/efforts/strength/power-clean.json +1 -1
  557. package/dist/web/server/seed/core/markdown/efforts/strength/power-snatch.json +1 -1
  558. package/dist/web/server/seed/core/markdown/efforts/strength/push-jerk.json +1 -1
  559. package/dist/web/server/seed/core/markdown/efforts/strength/push-press.json +1 -1
  560. package/dist/web/server/seed/core/markdown/efforts/strength/romanian-deadlift.json +1 -1
  561. package/dist/web/server/seed/core/markdown/efforts/strength/single-leg-deadlift.json +1 -1
  562. package/dist/web/server/seed/core/markdown/efforts/strength/skull-crusher.json +1 -1
  563. package/dist/web/server/seed/core/markdown/efforts/strength/slam-ball.json +1 -1
  564. package/dist/web/server/seed/core/markdown/efforts/strength/sled-pull.json +1 -1
  565. package/dist/web/server/seed/core/markdown/efforts/strength/sled-push.json +1 -1
  566. package/dist/web/server/seed/core/markdown/efforts/strength/sumo-deadlift.json +1 -1
  567. package/dist/web/server/seed/core/markdown/efforts/strength/thruster.json +1 -1
  568. package/dist/web/server/seed/core/markdown/efforts/strength/triceps-extension.json +1 -1
  569. package/dist/web/server/seed/core/markdown/efforts/strength/v-sit-hold.json +1 -1
  570. package/dist/web/server/seed/core/markdown/efforts/strength/wall-walk.json +1 -1
  571. package/dist/web/server/seed/core/markdown/efforts/strength/yoga-sun-salutation.json +1 -1
  572. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-assisted-sprint.json +1 -1
  573. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-backstroke.json +1 -1
  574. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-breaststroke-kick.json +1 -1
  575. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-breaststroke.json +1 -1
  576. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-butterfly.json +1 -1
  577. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-catch-up-drill.json +1 -1
  578. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-choice-stroke.json +1 -1
  579. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-dive-start.json +1 -1
  580. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-dolphin-kick.json +1 -1
  581. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-drafting.json +1 -1
  582. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-fingertip-drag.json +1 -1
  583. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-freestyle.json +1 -1
  584. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-individual-medley.json +1 -1
  585. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-kick.json +1 -1
  586. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-pull.json +1 -1
  587. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-resisted-sprint.json +1 -1
  588. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-rotation-drill.json +1 -1
  589. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-sighting.json +1 -1
  590. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-single-arm-drill.json +1 -1
  591. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-stroke-transition.json +1 -1
  592. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-two-kick-one-pull.json +1 -1
  593. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-vigorous.json +1 -1
  594. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming.json +1 -1
  595. package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-arm-cast.json +1 -1
  596. package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-circles.json +1 -1
  597. package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-mill.json +1 -1
  598. package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-reverse-mill.json +1 -1
  599. package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-shield-cast.json +1 -1
  600. package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-10-to-2-swing.json +1 -1
  601. package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-360-swing.json +1 -1
  602. package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-barbarian-squat.json +1 -1
  603. package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-flow.json +1 -1
  604. package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-gravedigger.json +1 -1
  605. package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-touchdown.json +1 -1
  606. package/dist/web/server/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-carry.json +1 -1
  607. package/dist/web/server/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-extension.json +1 -1
  608. package/dist/web/server/seed/core/markdown/efforts/unconventional/sandbag-over-shoulder.json +1 -1
  609. package/dist/web/server/seed/core/markdown/efforts/walking/walking-3-mph.json +1 -1
  610. package/dist/web/server/seed/core/markdown/equipment/air-bike.json +1 -1
  611. package/dist/web/server/seed/core/markdown/equipment/barbell.json +1 -1
  612. package/dist/web/server/seed/core/markdown/equipment/bench.json +1 -1
  613. package/dist/web/server/seed/core/markdown/equipment/bike-erg.json +1 -1
  614. package/dist/web/server/seed/core/markdown/equipment/climbing-rope.json +1 -1
  615. package/dist/web/server/seed/core/markdown/equipment/clubs.json +1 -1
  616. package/dist/web/server/seed/core/markdown/equipment/dumbbell.json +1 -1
  617. package/dist/web/server/seed/core/markdown/equipment/ghd.json +1 -1
  618. package/dist/web/server/seed/core/markdown/equipment/gymnastic-rings.json +1 -1
  619. package/dist/web/server/seed/core/markdown/equipment/jump-rope.json +1 -1
  620. package/dist/web/server/seed/core/markdown/equipment/kettlebell.json +1 -1
  621. package/dist/web/server/seed/core/markdown/equipment/macebell.json +1 -1
  622. package/dist/web/server/seed/core/markdown/equipment/medicine-ball.json +1 -1
  623. package/dist/web/server/seed/core/markdown/equipment/parallettes.json +1 -1
  624. package/dist/web/server/seed/core/markdown/equipment/plyo-box.json +1 -1
  625. package/dist/web/server/seed/core/markdown/equipment/pull-up-bar.json +1 -1
  626. package/dist/web/server/seed/core/markdown/equipment/rower.json +1 -1
  627. package/dist/web/server/seed/core/markdown/equipment/sandbag.json +1 -1
  628. package/dist/web/server/seed/core/markdown/equipment/ski-erg.json +1 -1
  629. package/dist/web/server/seed/core/markdown/equipment/slam-ball.json +1 -1
  630. package/dist/web/server/seed/core/markdown/equipment/sled.json +1 -1
  631. package/dist/web/server/seed/core/markdown/equipment/sledgehammer.json +1 -1
  632. package/dist/web/server/seed/core/markdown/equipment/weight-vest.json +1 -1
  633. package/dist/web/server/seed/core/report.html +13 -13
  634. package/package.json +10 -8
  635. package/dist/chunk-2EWCEE6N.mjs.map +0 -1
  636. package/dist/chunk-5NNSHRMZ.mjs.map +0 -1
  637. package/dist/chunk-LNBKPHEP.mjs.map +0 -1
  638. package/dist/chunk-SLCRIGUR.mjs.map +0 -1
  639. package/dist/server-SHNWCIIM.mjs +0 -11
  640. package/dist/web/playground/assets/main-DGz9PHS_.css +0 -2
  641. package/dist/web/playground/assets/main-DfHqNhwO.js +0 -1149
  642. package/dist/web/playground/assets/vendor-Dz-Azkoq.js +0 -198
  643. package/dist/web/server/assets/main-DGz9PHS_.css +0 -2
  644. package/dist/web/server/assets/main-VXFEU44Q.js +0 -1149
  645. package/dist/web/server/assets/vendor-Dz-Azkoq.js +0 -198
package/dist/index.d.cts CHANGED
@@ -1,9 +1,10 @@
1
- import { WodWikiIRFile, StatementNode, ExecutionLog, LanguagePack } from '@bitcobblers/wod-wiki-engine';
1
+ import { WodWikiIRFile, StatementNode, ExecutionLog, LanguagePack, FeedTree } from '@bitcobblers/wod-wiki-engine';
2
2
  import { INowProvider, IEffort } from '@bitcobblers/wod-wiki-lang';
3
3
  import { QueryServiceStores, QueryResult, RowsQueryResult, FindQueryResult, PipelineResult } from '@bitcobblers/wod-wiki-wql';
4
4
  import { EventRecord, AnalyticsDataPoint, Session, Note, BlockIndexRow, BlockRevision } from '@bitcobblers/wod-wiki-core';
5
5
  import { IStorage } from '@bitcobblers/wod-wiki-storage';
6
6
  import { Database } from '@bitcobblers/wod-wiki-storage/sql';
7
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
8
 
8
9
  /**
9
10
  * Headless Parse Command Runner
@@ -187,17 +188,50 @@ declare function formatQueryOutput(ir: WodWikiIRFile<QueryResult | RowsQueryResu
187
188
  * 1 - Runtime error (file missing, bad arguments, execution error)
188
189
  * 2 - Parse / Syntax error (invalid Whiteboard Script or malformed WQL)
189
190
  * 3 - Pack load error (failed to import or register --pack)
191
+ * 4 - Destructive confirmation required (missing --yes <targetId>)
190
192
  */
191
193
 
192
194
  interface CliParsedArgs {
193
- subcommand?: 'parse' | 'run' | 'query' | 'download' | 'export' | 'import' | 'publish' | 'build' | 'seed' | 'reset' | 'init' | 'db' | 'server' | 'serve' | 'playground' | 'init-feed' | 'skills' | 'help' | 'version';
195
+ subcommand?: 'parse' | 'run' | 'query' | 'download' | 'export' | 'import' | 'publish' | 'build' | 'seed' | 'reset' | 'init' | 'db' | 'server' | 'serve' | 'playground' | 'init-feed' | 'skills' | 'note' | 'journal' | 'notebook' | 'session' | 'catalog' | 'tag' | 'feed' | 'mcp' | 'tools' | 'doctor' | 'help' | 'version';
194
196
  target?: string;
195
197
  /** Second positional: the id (download) or file (import) after the kind. */
196
198
  target2?: string;
199
+ /** Third positional for noun-verb commands (e.g. `wod note update <id> <file>`). */
200
+ target3?: string;
197
201
  corpus?: string;
198
202
  stdinLog?: boolean;
199
203
  stdinFacts?: boolean;
200
204
  format: OutputFormat;
205
+ /** Emit structured JSON envelope on stdout across noun-verb and legacy commands. */
206
+ json?: boolean;
207
+ /** Skip database persistence during `wod parse --no-save`. */
208
+ noSave?: boolean;
209
+ /** Restrict `wod server` / `wod mcp` to Tier 0 read-only tools. */
210
+ mcpReadonly?: boolean;
211
+ /** Validate WQL syntax/schema without executing against data (`wod query --validate-only`). */
212
+ validateOnly?: boolean;
213
+ /** Target a running `wod server` HTTP API instead of opening a local DB (`--server <url>`). */
214
+ serverUrl?: string;
215
+ /** Explicit Note / Block / Notebook / Date / Filter options for agent noun-verb commands. */
216
+ noteId?: string;
217
+ sourceNoteId?: string;
218
+ blockId?: string;
219
+ notebook?: string;
220
+ date?: string;
221
+ title?: string;
222
+ description?: string;
223
+ markdown?: string;
224
+ search?: string;
225
+ tag?: string;
226
+ tags: string[];
227
+ aliases: string[];
228
+ setPairs: string[];
229
+ slug?: string;
230
+ category?: string;
231
+ tagType?: string;
232
+ url?: string;
233
+ feedId?: string;
234
+ limit?: number;
201
235
  output?: string;
202
236
  packs: string[];
203
237
  sport?: string;
@@ -401,6 +435,8 @@ interface CliServerOptions {
401
435
  port?: string;
402
436
  /** Explicit dist directory (flag or PLAYGROUND_DIST); must already exist. */
403
437
  dist?: string;
438
+ /** Restrict `/api/mcp` to Tier 0 read-only tools. */
439
+ mcpReadonly?: boolean;
404
440
  /** Merged CLI environment (process env + .env). */
405
441
  env: Record<string, string | undefined>;
406
442
  }
@@ -411,4 +447,33 @@ interface CliServerOptions {
411
447
  */
412
448
  declare function runCliServer(mode: CliServerMode, options: CliServerOptions, writeOut: WriteOut): Promise<void>;
413
449
 
414
- export { type CliDatabaseConfig, type CliDb, type CliParsedArgs, type CliServerMode, type CliServerOptions, type OutputFormat, PackLoadError, type ParseOptions, ParseSyntaxError, type QueryCliOptions, type RunOptions, WqlSyntaxError, cliMain, formatExecutionOutput, formatParseOutput, formatQueryOutput, loadCliEnvironment, loadLanguagePack, loadQueryData, openCliDb, parseCliArgs, readStdin, resolveDatabaseConfig, runCliServer, runExecution, runParse, runQueryCli };
450
+ interface CreateWodMcpServerOptions {
451
+ storage: IStorage;
452
+ feedTree?: FeedTree;
453
+ baseUrl?: string;
454
+ readonly?: boolean;
455
+ onMutated?: () => Promise<void> | void;
456
+ }
457
+ /**
458
+ * Creates a configured official `@modelcontextprotocol/sdk` `McpServer`
459
+ * exposing all 22 WOD Wiki domain tools (or read-only Tier 0 tools when
460
+ * `readonly: true`), `wod://*` resources, and guided workout prompts.
461
+ */
462
+ declare function createWodMcpServer(options: CreateWodMcpServerOptions): McpServer;
463
+
464
+ interface HandleMcpHttpOptions {
465
+ db: Database;
466
+ feedTree: FeedTree;
467
+ baseUrl: string;
468
+ readonly?: boolean;
469
+ authToken?: string;
470
+ }
471
+ /**
472
+ * Handles Web-Standard Streamable HTTP MCP requests at `/api/mcp`.
473
+ * Uses stateless per-request `WebStandardStreamableHTTPServerTransport` with
474
+ * `enableJsonResponse: true` so both official MCP SDK clients and plain HTTP
475
+ * JSON-RPC clients work out of the box without sticky session requirements.
476
+ */
477
+ declare function handleMcpHttpRequest(request: Request, options: HandleMcpHttpOptions): Promise<Response>;
478
+
479
+ export { type CliDatabaseConfig, type CliDb, type CliParsedArgs, type CliServerMode, type CliServerOptions, type CreateWodMcpServerOptions, type HandleMcpHttpOptions, type OutputFormat, PackLoadError, type ParseOptions, ParseSyntaxError, type QueryCliOptions, type RunOptions, WqlSyntaxError, cliMain, createWodMcpServer, formatExecutionOutput, formatParseOutput, formatQueryOutput, handleMcpHttpRequest, loadCliEnvironment, loadLanguagePack, loadQueryData, openCliDb, parseCliArgs, readStdin, resolveDatabaseConfig, runCliServer, runExecution, runParse, runQueryCli };
package/dist/index.d.ts CHANGED
@@ -1,9 +1,10 @@
1
- import { WodWikiIRFile, StatementNode, ExecutionLog, LanguagePack } from '@bitcobblers/wod-wiki-engine';
1
+ import { WodWikiIRFile, StatementNode, ExecutionLog, LanguagePack, FeedTree } from '@bitcobblers/wod-wiki-engine';
2
2
  import { INowProvider, IEffort } from '@bitcobblers/wod-wiki-lang';
3
3
  import { QueryServiceStores, QueryResult, RowsQueryResult, FindQueryResult, PipelineResult } from '@bitcobblers/wod-wiki-wql';
4
4
  import { EventRecord, AnalyticsDataPoint, Session, Note, BlockIndexRow, BlockRevision } from '@bitcobblers/wod-wiki-core';
5
5
  import { IStorage } from '@bitcobblers/wod-wiki-storage';
6
6
  import { Database } from '@bitcobblers/wod-wiki-storage/sql';
7
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
8
 
8
9
  /**
9
10
  * Headless Parse Command Runner
@@ -187,17 +188,50 @@ declare function formatQueryOutput(ir: WodWikiIRFile<QueryResult | RowsQueryResu
187
188
  * 1 - Runtime error (file missing, bad arguments, execution error)
188
189
  * 2 - Parse / Syntax error (invalid Whiteboard Script or malformed WQL)
189
190
  * 3 - Pack load error (failed to import or register --pack)
191
+ * 4 - Destructive confirmation required (missing --yes <targetId>)
190
192
  */
191
193
 
192
194
  interface CliParsedArgs {
193
- subcommand?: 'parse' | 'run' | 'query' | 'download' | 'export' | 'import' | 'publish' | 'build' | 'seed' | 'reset' | 'init' | 'db' | 'server' | 'serve' | 'playground' | 'init-feed' | 'skills' | 'help' | 'version';
195
+ subcommand?: 'parse' | 'run' | 'query' | 'download' | 'export' | 'import' | 'publish' | 'build' | 'seed' | 'reset' | 'init' | 'db' | 'server' | 'serve' | 'playground' | 'init-feed' | 'skills' | 'note' | 'journal' | 'notebook' | 'session' | 'catalog' | 'tag' | 'feed' | 'mcp' | 'tools' | 'doctor' | 'help' | 'version';
194
196
  target?: string;
195
197
  /** Second positional: the id (download) or file (import) after the kind. */
196
198
  target2?: string;
199
+ /** Third positional for noun-verb commands (e.g. `wod note update <id> <file>`). */
200
+ target3?: string;
197
201
  corpus?: string;
198
202
  stdinLog?: boolean;
199
203
  stdinFacts?: boolean;
200
204
  format: OutputFormat;
205
+ /** Emit structured JSON envelope on stdout across noun-verb and legacy commands. */
206
+ json?: boolean;
207
+ /** Skip database persistence during `wod parse --no-save`. */
208
+ noSave?: boolean;
209
+ /** Restrict `wod server` / `wod mcp` to Tier 0 read-only tools. */
210
+ mcpReadonly?: boolean;
211
+ /** Validate WQL syntax/schema without executing against data (`wod query --validate-only`). */
212
+ validateOnly?: boolean;
213
+ /** Target a running `wod server` HTTP API instead of opening a local DB (`--server <url>`). */
214
+ serverUrl?: string;
215
+ /** Explicit Note / Block / Notebook / Date / Filter options for agent noun-verb commands. */
216
+ noteId?: string;
217
+ sourceNoteId?: string;
218
+ blockId?: string;
219
+ notebook?: string;
220
+ date?: string;
221
+ title?: string;
222
+ description?: string;
223
+ markdown?: string;
224
+ search?: string;
225
+ tag?: string;
226
+ tags: string[];
227
+ aliases: string[];
228
+ setPairs: string[];
229
+ slug?: string;
230
+ category?: string;
231
+ tagType?: string;
232
+ url?: string;
233
+ feedId?: string;
234
+ limit?: number;
201
235
  output?: string;
202
236
  packs: string[];
203
237
  sport?: string;
@@ -401,6 +435,8 @@ interface CliServerOptions {
401
435
  port?: string;
402
436
  /** Explicit dist directory (flag or PLAYGROUND_DIST); must already exist. */
403
437
  dist?: string;
438
+ /** Restrict `/api/mcp` to Tier 0 read-only tools. */
439
+ mcpReadonly?: boolean;
404
440
  /** Merged CLI environment (process env + .env). */
405
441
  env: Record<string, string | undefined>;
406
442
  }
@@ -411,4 +447,33 @@ interface CliServerOptions {
411
447
  */
412
448
  declare function runCliServer(mode: CliServerMode, options: CliServerOptions, writeOut: WriteOut): Promise<void>;
413
449
 
414
- export { type CliDatabaseConfig, type CliDb, type CliParsedArgs, type CliServerMode, type CliServerOptions, type OutputFormat, PackLoadError, type ParseOptions, ParseSyntaxError, type QueryCliOptions, type RunOptions, WqlSyntaxError, cliMain, formatExecutionOutput, formatParseOutput, formatQueryOutput, loadCliEnvironment, loadLanguagePack, loadQueryData, openCliDb, parseCliArgs, readStdin, resolveDatabaseConfig, runCliServer, runExecution, runParse, runQueryCli };
450
+ interface CreateWodMcpServerOptions {
451
+ storage: IStorage;
452
+ feedTree?: FeedTree;
453
+ baseUrl?: string;
454
+ readonly?: boolean;
455
+ onMutated?: () => Promise<void> | void;
456
+ }
457
+ /**
458
+ * Creates a configured official `@modelcontextprotocol/sdk` `McpServer`
459
+ * exposing all 22 WOD Wiki domain tools (or read-only Tier 0 tools when
460
+ * `readonly: true`), `wod://*` resources, and guided workout prompts.
461
+ */
462
+ declare function createWodMcpServer(options: CreateWodMcpServerOptions): McpServer;
463
+
464
+ interface HandleMcpHttpOptions {
465
+ db: Database;
466
+ feedTree: FeedTree;
467
+ baseUrl: string;
468
+ readonly?: boolean;
469
+ authToken?: string;
470
+ }
471
+ /**
472
+ * Handles Web-Standard Streamable HTTP MCP requests at `/api/mcp`.
473
+ * Uses stateless per-request `WebStandardStreamableHTTPServerTransport` with
474
+ * `enableJsonResponse: true` so both official MCP SDK clients and plain HTTP
475
+ * JSON-RPC clients work out of the box without sticky session requirements.
476
+ */
477
+ declare function handleMcpHttpRequest(request: Request, options: HandleMcpHttpOptions): Promise<Response>;
478
+
479
+ export { type CliDatabaseConfig, type CliDb, type CliParsedArgs, type CliServerMode, type CliServerOptions, type CreateWodMcpServerOptions, type HandleMcpHttpOptions, type OutputFormat, PackLoadError, type ParseOptions, ParseSyntaxError, type QueryCliOptions, type RunOptions, WqlSyntaxError, cliMain, createWodMcpServer, formatExecutionOutput, formatParseOutput, formatQueryOutput, handleMcpHttpRequest, loadCliEnvironment, loadLanguagePack, loadQueryData, openCliDb, parseCliArgs, readStdin, resolveDatabaseConfig, runCliServer, runExecution, runParse, runQueryCli };
package/dist/index.mjs CHANGED
@@ -1,10 +1,11 @@
1
1
  import { createRequire } from 'module';
2
- export { PackLoadError, ParseSyntaxError, WqlSyntaxError, cliMain, formatExecutionOutput, formatParseOutput, formatQueryOutput, loadCliEnvironment, loadLanguagePack, loadQueryData, parseCliArgs, readStdin, resolveDatabaseConfig, runExecution, runParse, runQueryCli } from './chunk-SLCRIGUR.mjs';
3
- import './chunk-5NNSHRMZ.mjs';
2
+ export { PackLoadError, ParseSyntaxError, WqlSyntaxError, cliMain, formatExecutionOutput, formatParseOutput, formatQueryOutput, loadCliEnvironment, loadLanguagePack, loadQueryData, parseCliArgs, readStdin, resolveDatabaseConfig, runExecution, runParse, runQueryCli } from './chunk-KXNK4PIB.mjs';
4
3
  import './chunk-KGP6STLY.mjs';
5
- export { runCliServer } from './chunk-LNBKPHEP.mjs';
6
- import './chunk-2EWCEE6N.mjs';
4
+ export { runCliServer } from './chunk-AS6OJRNH.mjs';
5
+ export { handleMcpHttpRequest } from './chunk-WLCUM7KO.mjs';
6
+ export { createWodMcpServer } from './chunk-ZZVL6UGV.mjs';
7
7
  export { openCliDb } from './chunk-FUISPA7A.mjs';
8
+ import './chunk-T7VB7PPO.mjs';
8
9
  import './chunk-QUUX6NX2.mjs';
9
10
 
10
11
  if (typeof globalThis.require === 'undefined') {
@@ -0,0 +1,73 @@
1
+ import { createRequire } from 'module';
2
+ import { createWodMcpServer } from './chunk-ZZVL6UGV.mjs';
3
+ import { openCliDb, NodeFsFeedTree } from './chunk-FUISPA7A.mjs';
4
+ import './chunk-T7VB7PPO.mjs';
5
+ import './chunk-QUUX6NX2.mjs';
6
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
7
+ import { ApiStorage } from '@bitcobblers/wod-wiki-storage';
8
+ import { MemoryFeedTree } from '@bitcobblers/wod-wiki-engine';
9
+
10
+ if (typeof globalThis.require === 'undefined') {
11
+ try { globalThis.require = createRequire(import.meta.url); } catch {}
12
+ }
13
+ async function runMcpStdio(options) {
14
+ const logErr = options.writeErr ?? ((msg) => process.stderr.write(`${msg}
15
+ `));
16
+ let dbHandle;
17
+ let storage;
18
+ let feedTree;
19
+ let baseUrl = "";
20
+ if (options.serverUrl) {
21
+ const trimmed = options.serverUrl.replace(/\/+$/, "");
22
+ const apiBase = trimmed.endsWith("/api") ? trimmed : `${trimmed}/api`;
23
+ storage = new ApiStorage(apiBase);
24
+ feedTree = new MemoryFeedTree();
25
+ baseUrl = trimmed.endsWith("/api") ? trimmed.slice(0, -4) : trimmed;
26
+ } else {
27
+ if (!options.database) {
28
+ logErr("[wod mcp] Error: Missing database configuration");
29
+ return 1;
30
+ }
31
+ dbHandle = await openCliDb(options.database);
32
+ storage = dbHandle.storage;
33
+ feedTree = options.database.kind === "sqlite" ? new NodeFsFeedTree(`${options.database.path}.feed`) : new MemoryFeedTree();
34
+ }
35
+ const server = createWodMcpServer({
36
+ storage,
37
+ feedTree,
38
+ baseUrl,
39
+ readonly: options.readonly
40
+ });
41
+ const transport = new StdioServerTransport();
42
+ await server.connect(transport);
43
+ return new Promise((resolve) => {
44
+ let closed = false;
45
+ const finish = async (code) => {
46
+ if (closed) return;
47
+ closed = true;
48
+ await server.close().catch(() => {
49
+ });
50
+ if (dbHandle) {
51
+ await dbHandle.close().catch(() => {
52
+ });
53
+ }
54
+ resolve(code);
55
+ };
56
+ transport.onclose = () => {
57
+ void finish(0);
58
+ };
59
+ transport.onerror = (err) => {
60
+ logErr(`[wod mcp] Transport error: ${err.message}`);
61
+ };
62
+ process.once("SIGINT", () => {
63
+ void finish(0);
64
+ });
65
+ process.once("SIGTERM", () => {
66
+ void finish(0);
67
+ });
68
+ });
69
+ }
70
+
71
+ export { runMcpStdio };
72
+ //# sourceMappingURL=mcp-D6QARYOG.mjs.map
73
+ //# sourceMappingURL=mcp-D6QARYOG.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/mcp.ts"],"names":[],"mappings":"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","file":"mcp-D6QARYOG.mjs","sourcesContent":["import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { ApiStorage, type IStorage } from '@bitcobblers/wod-wiki-storage';\nimport { MemoryFeedTree, type FeedTree } from '@bitcobblers/wod-wiki-engine';\nimport type { CliDatabaseConfig } from './config';\nimport { openCliDb, type CliDb } from './db';\nimport { NodeFsFeedTree } from './nodeFeedTree';\nimport { createWodMcpServer } from '../mcp/createWodMcpServer';\n\nexport interface RunMcpStdioOptions {\n database?: CliDatabaseConfig;\n serverUrl?: string;\n readonly?: boolean;\n writeErr?: (text: string) => void;\n}\n\n/**\n * Starts the `wod mcp` stdio server using `@modelcontextprotocol/sdk`'s\n * `StdioServerTransport`. All diagnostic messages go to `stderr` so `stdout`\n * stays strictly reserved for JSON-RPC frames.\n */\nexport async function runMcpStdio(options: RunMcpStdioOptions): Promise<number> {\n const logErr = options.writeErr ?? ((msg: string) => process.stderr.write(`${msg}\\n`));\n\n let dbHandle: CliDb | undefined;\n let storage: IStorage;\n let feedTree: FeedTree;\n let baseUrl = '';\n\n if (options.serverUrl) {\n const trimmed = options.serverUrl.replace(/\\/+$/, '');\n const apiBase = trimmed.endsWith('/api') ? trimmed : `${trimmed}/api`;\n storage = new ApiStorage(apiBase);\n feedTree = new MemoryFeedTree();\n baseUrl = trimmed.endsWith('/api') ? trimmed.slice(0, -4) : trimmed;\n } else {\n if (!options.database) {\n logErr('[wod mcp] Error: Missing database configuration');\n return 1;\n }\n dbHandle = await openCliDb(options.database);\n storage = dbHandle.storage;\n feedTree =\n options.database.kind === 'sqlite'\n ? new NodeFsFeedTree(`${options.database.path}.feed`)\n : new MemoryFeedTree();\n }\n\n const server = createWodMcpServer({\n storage,\n feedTree,\n baseUrl,\n readonly: options.readonly,\n });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n return new Promise<number>((resolve) => {\n let closed = false;\n const finish = async (code: number) => {\n if (closed) return;\n closed = true;\n await server.close().catch(() => {});\n if (dbHandle) {\n await dbHandle.close().catch(() => {});\n }\n resolve(code);\n };\n\n transport.onclose = () => {\n void finish(0);\n };\n transport.onerror = (err) => {\n logErr(`[wod mcp] Transport error: ${err.message}`);\n };\n process.once('SIGINT', () => {\n void finish(0);\n });\n process.once('SIGTERM', () => {\n void finish(0);\n });\n });\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module';
2
- import { VERSION } from './chunk-5NNSHRMZ.mjs';
2
+ import { VERSION } from './chunk-T7VB7PPO.mjs';
3
3
  import './chunk-QUUX6NX2.mjs';
4
4
  import { mkdirSync, writeFileSync, rmSync } from 'fs';
5
5
  import { resolve, join, dirname } from 'path';
@@ -201,5 +201,5 @@ function scaffoldFeed(name, opts = {}) {
201
201
  }
202
202
 
203
203
  export { scaffoldFeed, validateFeedName };
204
- //# sourceMappingURL=scaffoldFeed-TCRNXYQU.mjs.map
205
- //# sourceMappingURL=scaffoldFeed-TCRNXYQU.mjs.map
204
+ //# sourceMappingURL=scaffoldFeed-D55NINVJ.mjs.map
205
+ //# sourceMappingURL=scaffoldFeed-D55NINVJ.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/scaffoldFeed.ts"],"names":[],"mappings":"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","file":"scaffoldFeed-TCRNXYQU.mjs","sourcesContent":["/**\n * `wod init-feed <name>` — scaffold a ready-to-publish WOD Wiki feed\n * repository skeleton (the publisher-repository contract in\n * docs/adrs/0001-feed-seed-data-contract.md): a markdown notebooks example,\n * package.json, GitHub Actions Pages workflow, README. Creates a new\n * directory only; refuses an existing destination without touching it.\n *\n * Lazily imported by cli/runner.ts (dynamic import), so static node:fs/node:path\n * imports stay out of browser bundles.\n */\nimport { mkdirSync, rmSync, writeFileSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\nimport { VERSION } from '../version';\n\nexport interface ScaffoldFeedResult {\n /** Absolute path of the created feed root. */\n dir: string;\n /** Created files, POSIX-relative to the feed root. */\n files: string[];\n}\n\n/** npm package name + single-directory-segment validation for `<name>`. */\nexport function validateFeedName(name: string): string {\n if (name.length === 0 || name === '.' || name === '..') {\n throw new Error('Feed name must be a single non-empty directory name');\n }\n if (name.includes('/') || name.includes('\\\\') || name.includes('\\0')) {\n throw new Error(`Invalid feed name '${name}': must be a single directory name (no path separators or traversal)`);\n }\n if (/^(?:[A-Za-z]:)?[/\\\\]/.test(name)) {\n throw new Error(`Invalid feed name '${name}': absolute paths are not allowed`);\n }\n if (name.length > 214 || !/^[a-z0-9][a-z0-9._-]*$/.test(name)) {\n throw new Error(\n `Invalid feed name '${name}': must be a valid npm package name ` +\n '(lowercase letters, digits, dots, hyphens, underscores; no leading dot/hyphen)',\n );\n }\n return name;\n}\n\nconst publishWorkflow = (): string => `name: Publish feed\n\n# Compile the feed with the wod CLI and deploy dist/ to GitHub Pages.\n# Requires Pages enabled: repo Settings → Pages → Source: \"GitHub Actions\".\n\non:\n push:\n branches: [main]\n workflow_dispatch:\n\npermissions:\n contents: read\n pages: write\n id-token: write\n\nconcurrency:\n group: pages\n cancel-in-progress: true\n\njobs:\n publish:\n runs-on: ubuntu-latest\n environment:\n name: github-pages\n url: \\${{ steps.deployment.outputs.page_url }}\n steps:\n - uses: actions/checkout@v4\n with:\n # Full history: seed manifest version stamps derive from git commit count.\n fetch-depth: 0\n\n - name: Set up Bun\n uses: oven-sh/setup-bun@v2\n with:\n bun-version: 1.4.x\n\n - name: Install dependencies\n run: bun install\n\n - name: Build seed\n run: bunx wod build . --output dist\n\n - uses: actions/configure-pages@v5\n\n - name: Upload dist\n uses: actions/upload-pages-artifact@v3\n with:\n path: dist\n\n - id: deployment\n uses: actions/deploy-pages@v4\n`;\n\nconst feedReadme = (name: string): string => `# ${name}\n\nExample benchmark notebook. Each \\`.md\\` file in this directory becomes part of\nthe \\`example\\` notebook chunk; \\`README.md\\` is the notebook's landing page.\n\nAdd one file per workout:\n\n\\`\\`\\`\\`markdown\n---\ntitle: My workout\ndate: 2026-01-01\n---\n\n# My workout\n\n\\`\\`\\`time\n(21-15-9)\n Thrusters @95lb\n Pull-ups\n\\`\\`\\`\n\\`\\`\\`\\`\n\nThe \\`date:\\` frontmatter field sets the workout's chronological placement\n(regardless of filename or directory).\n`;\n\nconst exampleWorkout = (date: string): string => `---\ntitle: Morning session\ndate: ${date}\n---\n\n# Morning session\n\n\\`\\`\\`time\n(21-15-9)\n Thrusters @95lb\n Pull-ups\n\\`\\`\\`\n`;\n\nconst repoReadme = (name: string): string => `# ${name}\n\nA [WOD Wiki](https://github.com/bitcobblers/wod-wiki) workout feed: plain\nMarkdown workouts compiled to static, version-stamped seed chunks and published\nvia GitHub Pages.\n\n## Develop\n\n\\`\\`\\`sh\nbun install\nbunx wod build . --output dist\n\\`\\`\\`\n\nWorkouts live under \\`markdown/\\` — this scaffold starts with one example\nfeed. Validate everything with \\`bunx wod build\\`: it gates every file on\nthe Whiteboard grammar and corpus layout before writing \\`dist/\\`.\n\n## Publish\n\nPush to GitHub and enable Pages (**Settings → Pages → Source: GitHub\nActions**). The bundled workflow (\\`.github/workflows/publish-feed.yml\\`)\nbuilds the feed on every push to \\`main\\` and deploys \\`dist/\\`.\n\n## Share\n\nOnce published, anyone can subscribe to this feed from a WOD Wiki instance\nat:\n\n\\`\\`\\`\n<app-url>/subscribe?source=<url-encoded published feed URL>\n\\`\\`\\`\n\nFor \\`owner\\`/\\`repo\\` on GitHub Pages the feed URL is the deployed\ndirectory, \\`https://owner.github.io/repo/\\`, e.g.\n\\`/subscribe?source=https%3A%2F%2Fowner.github.io%2Frepo%2F\\`.\n`;\n\n/**\n * Scaffold a new feed repository at `<cwd>/<name>`. Throws when the name is\n * invalid or the destination already exists; partial failure removes created files.\n */\nexport function scaffoldFeed(name: string, opts: { cwd?: string } = {}): ScaffoldFeedResult {\n validateFeedName(name);\n const dir = resolve(opts.cwd ?? process.cwd(), name);\n // Atomic acquire: EEXIST is the refusal signal — no exists-check/create race,\n // and an existing destination is never removed or written.\n try {\n mkdirSync(dir);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'EEXIST') {\n throw new Error(`Refusing to overwrite '${dir}': destination already exists`, { cause: error });\n }\n throw error;\n }\n\n const date = new Date().toISOString().slice(0, 10);\n const files: Array<[rel: string, content: string]> = [\n ['package.json', `${JSON.stringify(\n {\n name,\n version: '0.1.0',\n private: true,\n type: 'module',\n description: `WOD Wiki workout feed: ${name}`,\n scripts: {\n build: 'wod build . --output dist',\n },\n devDependencies: {\n '@bitcobblers/wod-wiki-tools': `^${VERSION}`,\n },\n },\n null,\n 2,\n )}\\n`],\n ['.gitignore', 'node_modules/\\ndist/\\n'],\n ['.github/workflows/publish-feed.yml', publishWorkflow()],\n ['markdown/notebooks/example/README.md', feedReadme(name)],\n [`markdown/notebooks/example/morning-session.md`, exampleWorkout(date)],\n ['README.md', repoReadme(name)],\n ];\n\n try {\n for (const [rel, content] of files) {\n const target = join(dir, rel);\n mkdirSync(dirname(target), { recursive: true });\n writeFileSync(target, content, 'utf-8');\n }\n } catch (error) {\n rmSync(dir, { recursive: true, force: true });\n throw error;\n }\n return { dir, files: files.map(([rel]) => rel) };\n}\n"]}
1
+ {"version":3,"sources":["../src/cli/scaffoldFeed.ts"],"names":[],"mappings":";;;;;;;;;AAsBO,SAAS,iBAAiB,IAAA,EAAsB;AACrD,EAAA,IAAI,KAAK,MAAA,KAAW,CAAA,IAAK,IAAA,KAAS,GAAA,IAAO,SAAS,IAAA,EAAM;AACtD,IAAA,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAAA,EACvE;AACA,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AACpE,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,IAAI,CAAA,oEAAA,CAAsE,CAAA;AAAA,EAClH;AACA,EAAA,IAAI,sBAAA,CAAuB,IAAA,CAAK,IAAI,CAAA,EAAG;AACrC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,IAAI,CAAA,iCAAA,CAAmC,CAAA;AAAA,EAC/E;AACA,EAAA,IAAI,KAAK,MAAA,GAAS,GAAA,IAAO,CAAC,wBAAA,CAAyB,IAAA,CAAK,IAAI,CAAA,EAAG;AAC7D,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,sBAAsB,IAAI,CAAA,kHAAA;AAAA,KAE5B;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,IAAM,kBAAkB,MAAc,CAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,CAAA;AAqDtC,IAAM,UAAA,GAAa,CAAC,IAAA,KAAyB,CAAA,EAAA,EAAK,IAAI;;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,CAAA;AA0BtD,IAAM,cAAA,GAAiB,CAAC,IAAA,KAAyB,CAAA;AAAA;AAAA,MAAA,EAEzC,IAAI;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAYZ,IAAM,UAAA,GAAa,CAAC,IAAA,KAAyB,CAAA,EAAA,EAAK,IAAI;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA;AAyC/C,SAAS,YAAA,CAAa,IAAA,EAAc,IAAA,GAAyB,EAAC,EAAuB;AAC1F,EAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,EAAA,MAAM,MAAM,OAAA,CAAQ,IAAA,CAAK,OAAO,OAAA,CAAQ,GAAA,IAAO,IAAI,CAAA;AAGnD,EAAA,IAAI;AACF,IAAA,SAAA,CAAU,GAAG,CAAA;AAAA,EACf,SAAS,KAAA,EAAO;AACd,IAAA,IAAK,KAAA,CAAgC,SAAS,QAAA,EAAU;AACtD,MAAA,MAAM,IAAI,MAAM,CAAA,uBAAA,EAA0B,GAAG,iCAAiC,EAAE,KAAA,EAAO,OAAO,CAAA;AAAA,IAChG;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AAEA,EAAA,MAAM,IAAA,GAAA,qBAAW,IAAA,EAAK,EAAE,aAAY,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AACjD,EAAA,MAAM,KAAA,GAA+C;AAAA,IACnD,CAAC,cAAA,EAAgB,CAAA,EAAG,IAAA,CAAK,SAAA;AAAA,MACvB;AAAA,QACE,IAAA;AAAA,QACA,OAAA,EAAS,OAAA;AAAA,QACT,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa,0BAA0B,IAAI,CAAA,CAAA;AAAA,QAC3C,OAAA,EAAS;AAAA,UACP,KAAA,EAAO;AAAA,SACT;AAAA,QACA,eAAA,EAAiB;AAAA,UACf,6BAAA,EAA+B,IAAI,OAAO,CAAA;AAAA;AAC5C,OACF;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACD;AAAA,CAAI,CAAA;AAAA,IACL,CAAC,cAAc,wBAAwB,CAAA;AAAA,IACvC,CAAC,oCAAA,EAAsC,eAAA,EAAiB,CAAA;AAAA,IACxD,CAAC,sCAAA,EAAwC,UAAA,CAAW,IAAI,CAAC,CAAA;AAAA,IACzD,CAAC,CAAA,6CAAA,CAAA,EAAiD,cAAA,CAAe,IAAI,CAAC,CAAA;AAAA,IACtE,CAAC,WAAA,EAAa,UAAA,CAAW,IAAI,CAAC;AAAA,GAChC;AAEA,EAAA,IAAI;AACF,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,OAAO,CAAA,IAAK,KAAA,EAAO;AAClC,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,EAAK,GAAG,CAAA;AAC5B,MAAA,SAAA,CAAU,QAAQ,MAAM,CAAA,EAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAC9C,MAAA,aAAA,CAAc,MAAA,EAAQ,SAAS,OAAO,CAAA;AAAA,IACxC;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAA,CAAO,KAAK,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAC5C,IAAA,MAAM,KAAA;AAAA,EACR;AACA,EAAA,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAC,GAAG,CAAA,KAAM,GAAG,CAAA,EAAE;AACjD","file":"scaffoldFeed-D55NINVJ.mjs","sourcesContent":["/**\n * `wod init-feed <name>` — scaffold a ready-to-publish WOD Wiki feed\n * repository skeleton (the publisher-repository contract in\n * docs/adrs/0001-feed-seed-data-contract.md): a markdown notebooks example,\n * package.json, GitHub Actions Pages workflow, README. Creates a new\n * directory only; refuses an existing destination without touching it.\n *\n * Lazily imported by cli/runner.ts (dynamic import), so static node:fs/node:path\n * imports stay out of browser bundles.\n */\nimport { mkdirSync, rmSync, writeFileSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\nimport { VERSION } from '../version';\n\nexport interface ScaffoldFeedResult {\n /** Absolute path of the created feed root. */\n dir: string;\n /** Created files, POSIX-relative to the feed root. */\n files: string[];\n}\n\n/** npm package name + single-directory-segment validation for `<name>`. */\nexport function validateFeedName(name: string): string {\n if (name.length === 0 || name === '.' || name === '..') {\n throw new Error('Feed name must be a single non-empty directory name');\n }\n if (name.includes('/') || name.includes('\\\\') || name.includes('\\0')) {\n throw new Error(`Invalid feed name '${name}': must be a single directory name (no path separators or traversal)`);\n }\n if (/^(?:[A-Za-z]:)?[/\\\\]/.test(name)) {\n throw new Error(`Invalid feed name '${name}': absolute paths are not allowed`);\n }\n if (name.length > 214 || !/^[a-z0-9][a-z0-9._-]*$/.test(name)) {\n throw new Error(\n `Invalid feed name '${name}': must be a valid npm package name ` +\n '(lowercase letters, digits, dots, hyphens, underscores; no leading dot/hyphen)',\n );\n }\n return name;\n}\n\nconst publishWorkflow = (): string => `name: Publish feed\n\n# Compile the feed with the wod CLI and deploy dist/ to GitHub Pages.\n# Requires Pages enabled: repo Settings → Pages → Source: \"GitHub Actions\".\n\non:\n push:\n branches: [main]\n workflow_dispatch:\n\npermissions:\n contents: read\n pages: write\n id-token: write\n\nconcurrency:\n group: pages\n cancel-in-progress: true\n\njobs:\n publish:\n runs-on: ubuntu-latest\n environment:\n name: github-pages\n url: \\${{ steps.deployment.outputs.page_url }}\n steps:\n - uses: actions/checkout@v4\n with:\n # Full history: seed manifest version stamps derive from git commit count.\n fetch-depth: 0\n\n - name: Set up Bun\n uses: oven-sh/setup-bun@v2\n with:\n bun-version: 1.4.x\n\n - name: Install dependencies\n run: bun install\n\n - name: Build seed\n run: bunx wod build . --output dist\n\n - uses: actions/configure-pages@v5\n\n - name: Upload dist\n uses: actions/upload-pages-artifact@v3\n with:\n path: dist\n\n - id: deployment\n uses: actions/deploy-pages@v4\n`;\n\nconst feedReadme = (name: string): string => `# ${name}\n\nExample benchmark notebook. Each \\`.md\\` file in this directory becomes part of\nthe \\`example\\` notebook chunk; \\`README.md\\` is the notebook's landing page.\n\nAdd one file per workout:\n\n\\`\\`\\`\\`markdown\n---\ntitle: My workout\ndate: 2026-01-01\n---\n\n# My workout\n\n\\`\\`\\`time\n(21-15-9)\n Thrusters @95lb\n Pull-ups\n\\`\\`\\`\n\\`\\`\\`\\`\n\nThe \\`date:\\` frontmatter field sets the workout's chronological placement\n(regardless of filename or directory).\n`;\n\nconst exampleWorkout = (date: string): string => `---\ntitle: Morning session\ndate: ${date}\n---\n\n# Morning session\n\n\\`\\`\\`time\n(21-15-9)\n Thrusters @95lb\n Pull-ups\n\\`\\`\\`\n`;\n\nconst repoReadme = (name: string): string => `# ${name}\n\nA [WOD Wiki](https://github.com/bitcobblers/wod-wiki) workout feed: plain\nMarkdown workouts compiled to static, version-stamped seed chunks and published\nvia GitHub Pages.\n\n## Develop\n\n\\`\\`\\`sh\nbun install\nbunx wod build . --output dist\n\\`\\`\\`\n\nWorkouts live under \\`markdown/\\` — this scaffold starts with one example\nfeed. Validate everything with \\`bunx wod build\\`: it gates every file on\nthe Whiteboard grammar and corpus layout before writing \\`dist/\\`.\n\n## Publish\n\nPush to GitHub and enable Pages (**Settings → Pages → Source: GitHub\nActions**). The bundled workflow (\\`.github/workflows/publish-feed.yml\\`)\nbuilds the feed on every push to \\`main\\` and deploys \\`dist/\\`.\n\n## Share\n\nOnce published, anyone can subscribe to this feed from a WOD Wiki instance\nat:\n\n\\`\\`\\`\n<app-url>/subscribe?source=<url-encoded published feed URL>\n\\`\\`\\`\n\nFor \\`owner\\`/\\`repo\\` on GitHub Pages the feed URL is the deployed\ndirectory, \\`https://owner.github.io/repo/\\`, e.g.\n\\`/subscribe?source=https%3A%2F%2Fowner.github.io%2Frepo%2F\\`.\n`;\n\n/**\n * Scaffold a new feed repository at `<cwd>/<name>`. Throws when the name is\n * invalid or the destination already exists; partial failure removes created files.\n */\nexport function scaffoldFeed(name: string, opts: { cwd?: string } = {}): ScaffoldFeedResult {\n validateFeedName(name);\n const dir = resolve(opts.cwd ?? process.cwd(), name);\n // Atomic acquire: EEXIST is the refusal signal — no exists-check/create race,\n // and an existing destination is never removed or written.\n try {\n mkdirSync(dir);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'EEXIST') {\n throw new Error(`Refusing to overwrite '${dir}': destination already exists`, { cause: error });\n }\n throw error;\n }\n\n const date = new Date().toISOString().slice(0, 10);\n const files: Array<[rel: string, content: string]> = [\n ['package.json', `${JSON.stringify(\n {\n name,\n version: '0.1.0',\n private: true,\n type: 'module',\n description: `WOD Wiki workout feed: ${name}`,\n scripts: {\n build: 'wod build . --output dist',\n },\n devDependencies: {\n '@bitcobblers/wod-wiki-tools': `^${VERSION}`,\n },\n },\n null,\n 2,\n )}\\n`],\n ['.gitignore', 'node_modules/\\ndist/\\n'],\n ['.github/workflows/publish-feed.yml', publishWorkflow()],\n ['markdown/notebooks/example/README.md', feedReadme(name)],\n [`markdown/notebooks/example/morning-session.md`, exampleWorkout(date)],\n ['README.md', repoReadme(name)],\n ];\n\n try {\n for (const [rel, content] of files) {\n const target = join(dir, rel);\n mkdirSync(dirname(target), { recursive: true });\n writeFileSync(target, content, 'utf-8');\n }\n } catch (error) {\n rmSync(dir, { recursive: true, force: true });\n throw error;\n }\n return { dir, files: files.map(([rel]) => rel) };\n}\n"]}
@@ -7,7 +7,11 @@ var stream = require('stream');
7
7
  var sql = require('@bitcobblers/wod-wiki-storage/sql');
8
8
  var wodWikiStorage = require('@bitcobblers/wod-wiki-storage');
9
9
  var wodWikiEngine = require('@bitcobblers/wod-wiki-engine');
10
+ var agent = require('@bitcobblers/wod-wiki-engine/agent');
10
11
  require('@bitcobblers/wod-wiki-lang');
12
+ var webStandardStreamableHttp_js = require('@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js');
13
+ var zod = require('zod');
14
+ var mcp_js = require('@modelcontextprotocol/sdk/server/mcp.js');
11
15
 
12
16
  var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
13
17
  get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
@@ -92,6 +96,217 @@ var NodeFsFeedTree = class {
92
96
  }
93
97
  };
94
98
 
99
+ // src/version.ts
100
+ var VERSION = "0.54.2205";
101
+
102
+ // src/mcp/createWodMcpServer.ts
103
+ function createWodMcpServer(options) {
104
+ const server = new mcp_js.McpServer(
105
+ {
106
+ name: "wod-wiki",
107
+ version: VERSION
108
+ },
109
+ {
110
+ capabilities: {
111
+ tools: {},
112
+ resources: {},
113
+ prompts: {}
114
+ }
115
+ }
116
+ );
117
+ const ctx = {
118
+ storage: options.storage,
119
+ feedTree: options.feedTree,
120
+ baseUrl: options.baseUrl,
121
+ onMutated: options.onMutated
122
+ // Over MCP HTTP/stdio, explicit confirm="<targetId>" inside tool arguments
123
+ // satisfies Tier 2 confirmation; when omitted, requireAgentConfirmation throws
124
+ // an actionable error instructing the caller to pass confirm="<targetId>".
125
+ };
126
+ for (const spec of agent.DOMAIN_AGENT_TOOLS) {
127
+ if (options.readonly && spec.tier !== 0) {
128
+ continue;
129
+ }
130
+ server.registerTool(
131
+ spec.name,
132
+ {
133
+ title: spec.title,
134
+ description: spec.description,
135
+ inputSchema: spec.inputSchema,
136
+ annotations: spec.annotations
137
+ },
138
+ async (args) => {
139
+ try {
140
+ const parsed = spec.inputSchema.parse(args ?? {});
141
+ const result = await spec.execute(parsed, ctx);
142
+ return {
143
+ content: [
144
+ {
145
+ type: "text",
146
+ text: JSON.stringify(result, null, 2)
147
+ }
148
+ ],
149
+ structuredContent: result
150
+ };
151
+ } catch (err) {
152
+ const message = err instanceof Error ? err.message : String(err);
153
+ return {
154
+ isError: true,
155
+ content: [
156
+ {
157
+ type: "text",
158
+ text: message
159
+ }
160
+ ]
161
+ };
162
+ }
163
+ }
164
+ );
165
+ }
166
+ for (const resource of agent.AGENT_STATIC_RESOURCES) {
167
+ server.registerResource(
168
+ resource.name,
169
+ resource.uri,
170
+ {
171
+ description: resource.description,
172
+ mimeType: resource.mimeType
173
+ },
174
+ async (uri) => {
175
+ const res = await agent.readAgentResource(uri.toString(), ctx);
176
+ return {
177
+ contents: [
178
+ {
179
+ uri: res.uri,
180
+ mimeType: res.mimeType,
181
+ text: res.text
182
+ }
183
+ ]
184
+ };
185
+ }
186
+ );
187
+ }
188
+ for (const tmpl of agent.AGENT_RESOURCE_TEMPLATES) {
189
+ const template = new mcp_js.ResourceTemplate(tmpl.uriTemplate, { list: void 0 });
190
+ server.registerResource(
191
+ tmpl.name,
192
+ template,
193
+ {
194
+ description: tmpl.description,
195
+ mimeType: tmpl.mimeType
196
+ },
197
+ async (uri) => {
198
+ const res = await agent.readAgentResource(uri.toString(), ctx);
199
+ return {
200
+ contents: [
201
+ {
202
+ uri: res.uri,
203
+ mimeType: res.mimeType,
204
+ text: res.text
205
+ }
206
+ ]
207
+ };
208
+ }
209
+ );
210
+ }
211
+ for (const prompt of agent.AGENT_PROMPTS) {
212
+ const argsShape = {};
213
+ for (const arg of prompt.arguments) {
214
+ argsShape[arg.name] = arg.required ? zod.z.string().describe(arg.description) : zod.z.string().optional().describe(arg.description);
215
+ }
216
+ server.registerPrompt(
217
+ prompt.name,
218
+ {
219
+ title: prompt.title,
220
+ description: prompt.description,
221
+ argsSchema: argsShape
222
+ },
223
+ async (args) => {
224
+ const rendered = agent.renderAgentPrompt(prompt.name, args);
225
+ return {
226
+ description: rendered.description,
227
+ messages: rendered.messages
228
+ };
229
+ }
230
+ );
231
+ }
232
+ return server;
233
+ }
234
+
235
+ // src/mcp/httpHandler.ts
236
+ var MCP_CORS_HEADERS = {
237
+ "access-control-allow-origin": "*",
238
+ "access-control-allow-methods": "GET, POST, DELETE, OPTIONS",
239
+ "access-control-allow-headers": "Content-Type, Accept, Authorization, Mcp-Session-Id, MCP-Protocol-Version, Last-Event-ID",
240
+ "access-control-expose-headers": "Mcp-Session-Id, MCP-Protocol-Version"
241
+ };
242
+ function withMcpCors(response) {
243
+ const headers = new Headers(response.headers);
244
+ for (const [k, v] of Object.entries(MCP_CORS_HEADERS)) {
245
+ if (!headers.has(k)) {
246
+ headers.set(k, v);
247
+ }
248
+ }
249
+ return new Response(response.body, {
250
+ status: response.status,
251
+ statusText: response.statusText,
252
+ headers
253
+ });
254
+ }
255
+ function normalizeAcceptForPost(request) {
256
+ if (request.method !== "POST") return request;
257
+ const accept = request.headers.get("accept") ?? "";
258
+ if (accept.includes("application/json") && accept.includes("text/event-stream")) {
259
+ return request;
260
+ }
261
+ const headers = new Headers(request.headers);
262
+ headers.set("accept", "application/json, text/event-stream");
263
+ return new Request(request, { headers });
264
+ }
265
+ async function handleMcpHttpRequest(request, options) {
266
+ if (request.method === "OPTIONS") {
267
+ return new Response(null, { status: 204, headers: MCP_CORS_HEADERS });
268
+ }
269
+ const expectedToken = options.authToken ?? process.env.WOD_MCP_TOKEN?.trim();
270
+ if (expectedToken) {
271
+ const authHeader = request.headers.get("authorization") ?? "";
272
+ const bearer = authHeader.startsWith("Bearer ") ? authHeader.slice("Bearer ".length).trim() : "";
273
+ if (bearer !== expectedToken) {
274
+ return withMcpCors(
275
+ new Response(
276
+ JSON.stringify({
277
+ jsonrpc: "2.0",
278
+ error: { code: -32001, message: "Unauthorized: missing or invalid Bearer token" },
279
+ id: null
280
+ }),
281
+ { status: 401, headers: { "content-type": "application/json" } }
282
+ )
283
+ );
284
+ }
285
+ }
286
+ const storage = new sql.SqlStorage(options.db);
287
+ const server = createWodMcpServer({
288
+ storage,
289
+ feedTree: options.feedTree,
290
+ baseUrl: options.baseUrl,
291
+ readonly: options.readonly ?? process.env.WOD_MCP_READONLY === "1"
292
+ });
293
+ const transport = new webStandardStreamableHttp_js.WebStandardStreamableHTTPServerTransport({
294
+ sessionIdGenerator: void 0,
295
+ enableJsonResponse: true
296
+ });
297
+ await server.connect(transport);
298
+ try {
299
+ const normalizedReq = normalizeAcceptForPost(request);
300
+ const response = await transport.handleRequest(normalizedReq);
301
+ return withMcpCors(response);
302
+ } finally {
303
+ await transport.close().catch(() => {
304
+ });
305
+ await server.close().catch(() => {
306
+ });
307
+ }
308
+ }
309
+
95
310
  // src/server/app.ts
96
311
  var json = (value, status) => new Response(JSON.stringify(value), { status, headers: { "content-type": "application/json" } });
97
312
  function streamFile(path) {
@@ -355,10 +570,19 @@ async function servePublishedFeed(feedTree, method, relPath) {
355
570
  throw err;
356
571
  }
357
572
  }
358
- async function apiRoutes(db, feedTree, req, method, sub, url) {
573
+ async function apiRoutes(db, feedTree, req, method, sub, url, mcpOptions) {
359
574
  if (sub === "/health") {
360
575
  return json({ ok: true, driver: db.dialect }, 200);
361
576
  }
577
+ if (sub === "/mcp") {
578
+ return handleMcpHttpRequest(req, {
579
+ db,
580
+ feedTree,
581
+ baseUrl: url.origin,
582
+ readonly: mcpOptions?.readonly,
583
+ authToken: mcpOptions?.authToken
584
+ });
585
+ }
362
586
  if (sub === "/v1/feed/status" && method === "GET") {
363
587
  const storage = new sql.SqlStorage(db);
364
588
  const status = await wodWikiEngine.checkUnpublishedFeedChanges(storage, feedTree);
@@ -422,7 +646,20 @@ function createHandler(db, options) {
422
646
  const method = request.method === "HEAD" ? "GET" : request.method;
423
647
  const path = url.pathname;
424
648
  if (path === "/api" || path.startsWith("/api/")) {
425
- return db ? await apiRoutes(db, feedTree, request, method, path.slice("/api".length) || "/", url) : notFound();
649
+ return db ? await apiRoutes(
650
+ db,
651
+ feedTree,
652
+ request,
653
+ request.method === "OPTIONS" ? "OPTIONS" : method,
654
+ path.slice("/api".length) || "/",
655
+ url,
656
+ { readonly: options.mcpReadonly, authToken: options.mcpToken }
657
+ ) : notFound();
658
+ }
659
+ if (db && path === "/.well-known/agent-capabilities.json" && method === "GET") {
660
+ const res = await staticResponse(distRoot, method, path);
661
+ if (res.status === 200) return res;
662
+ return json(agent.exportAgentCapabilitiesManifest(), 200);
426
663
  }
427
664
  if (db) {
428
665
  const feedAsset = isPublishedFeedAssetPath(path);