@bitcobblers/wod-wiki-tools 0.53.2204 → 0.55.2206

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 (647) hide show
  1. package/dist/agentCommands-O6WPIGLW.mjs +586 -0
  2. package/dist/agentCommands-O6WPIGLW.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-67JAEWEF.mjs +144 -0
  7. package/dist/chunk-67JAEWEF.mjs.map +1 -0
  8. package/dist/{chunk-SLCRIGUR.mjs → chunk-76CB4MGO.mjs} +168 -28
  9. package/dist/chunk-76CB4MGO.mjs.map +1 -0
  10. package/dist/{chunk-2EWCEE6N.mjs → chunk-FNEN33GQ.mjs} +106 -6
  11. package/dist/chunk-FNEN33GQ.mjs.map +1 -0
  12. package/dist/{chunk-LNBKPHEP.mjs → chunk-RVQB3DYE.mjs} +9 -4
  13. package/dist/chunk-RVQB3DYE.mjs.map +1 -0
  14. package/dist/{chunk-5NNSHRMZ.mjs → chunk-WKU3MRQI.mjs} +3 -3
  15. package/dist/chunk-WKU3MRQI.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-XCK6B5JA.mjs +73 -0
  22. package/dist/mcp-XCK6B5JA.mjs.map +1 -0
  23. package/dist/{scaffoldFeed-TCRNXYQU.mjs → scaffoldFeed-MC4UX4CO.mjs} +3 -3
  24. package/dist/{scaffoldFeed-TCRNXYQU.mjs.map → scaffoldFeed-MC4UX4CO.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-HQJMA7BU.mjs +13 -0
  31. package/dist/{server-SHNWCIIM.mjs.map → server-HQJMA7BU.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/{server/assets/feedSync.worker-O4TGLEj3.js → playground/assets/feedSync.worker-CJyLPLAX.js} +2 -2
  40. package/dist/web/playground/assets/main-CmNfdWYO.js +1160 -0
  41. package/dist/web/playground/assets/main-DedlsEjf.css +2 -0
  42. package/dist/web/playground/assets/{statementBuilderFlow-CQWO7k9W.js → statementBuilderFlow-CtEe1EOX.js} +2 -2
  43. package/dist/web/playground/assets/vendor-BUlwHBNF.js +255 -0
  44. package/dist/web/{server/assets/vendor-codemirror-B4BeZarI.js → playground/assets/vendor-codemirror-Bh6hyz5v.js} +11 -11
  45. package/dist/web/playground/index.html +4 -4
  46. package/dist/web/playground/llms-full.txt +1444 -0
  47. package/dist/web/playground/llms.txt +67 -0
  48. package/dist/web/{server/seed/core/chunks/canvas.deac64e3.json → playground/seed/core/chunks/canvas.6cf875a1.json} +1 -1
  49. package/dist/web/playground/seed/core/chunks/{dashboards.08301ab4.json → dashboards.277192c5.json} +1 -1
  50. package/dist/web/playground/seed/core/chunks/{efforts.47f650fe.json → efforts.b943edc6.json} +1 -1
  51. package/dist/web/playground/seed/core/chunks/{equipment.79146d31.json → equipment.3cc3e02c.json} +1 -1
  52. package/dist/web/playground/seed/core/indexes/notebooks/canvas.json +180 -180
  53. package/dist/web/playground/seed/core/indexes/notebooks/dashboards.json +16 -16
  54. package/dist/web/playground/seed/core/indexes/notebooks/efforts.json +326 -326
  55. package/dist/web/playground/seed/core/indexes/notebooks/equipment.json +50 -50
  56. package/dist/web/playground/seed/core/manifest.json +27 -27
  57. package/dist/web/playground/seed/core/markdown/canvas/ai-first/README.json +1 -1
  58. package/dist/web/playground/seed/core/markdown/canvas/guide/README.json +4 -4
  59. package/dist/web/playground/seed/core/markdown/canvas/guide/clock.json +1 -1
  60. package/dist/web/playground/seed/core/markdown/canvas/guide/dashboards.json +1 -1
  61. package/dist/web/playground/seed/core/markdown/canvas/guide/metrics-summaries.json +2 -2
  62. package/dist/web/playground/seed/core/markdown/canvas/guide/metrics.json +12 -12
  63. package/dist/web/playground/seed/core/markdown/canvas/guide/protocols.json +20 -20
  64. package/dist/web/playground/seed/core/markdown/canvas/guide/sessions.json +33 -33
  65. package/dist/web/playground/seed/core/markdown/canvas/guide/start.json +11 -11
  66. package/dist/web/playground/seed/core/markdown/canvas/guide/structure.json +25 -25
  67. package/dist/web/playground/seed/core/markdown/canvas/guide/wql.json +5 -5
  68. package/dist/web/playground/seed/core/markdown/canvas/home/sample-script.json +4 -4
  69. package/dist/web/playground/seed/core/markdown/canvas/home/welcome-1.json +2 -2
  70. package/dist/web/playground/seed/core/markdown/canvas/syntax/actions-comments.json +4 -4
  71. package/dist/web/playground/seed/core/markdown/canvas/syntax/alternating-emom.json +5 -5
  72. package/dist/web/playground/seed/core/markdown/canvas/syntax/basic-emom.json +4 -4
  73. package/dist/web/playground/seed/core/markdown/canvas/syntax/calculated-metrics.json +4 -4
  74. package/dist/web/playground/seed/core/markdown/canvas/syntax/classic-amrap.json +6 -6
  75. package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-barbell-cycling.json +4 -4
  76. package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-full-session.json +10 -10
  77. package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-nested-protocols.json +7 -7
  78. package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-partner-workout.json +7 -7
  79. package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-swimming.json +5 -5
  80. package/dist/web/playground/seed/core/markdown/canvas/syntax/core-rules.json +4 -4
  81. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-and-calculated-metrics.json +4 -4
  82. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-intervals.json +4 -4
  83. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-1.json +4 -4
  84. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-2.json +5 -5
  85. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-3.json +3 -3
  86. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-4.json +4 -4
  87. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-5.json +4 -4
  88. package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-climb-bouldering.json +2 -2
  89. package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-climb-hangboard.json +2 -2
  90. package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-climb-sport.json +2 -2
  91. package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-log.json +4 -4
  92. package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-plan.json +8 -8
  93. package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-wod.json +5 -5
  94. package/dist/web/playground/seed/core/markdown/canvas/syntax/distance-intervals.json +3 -3
  95. package/dist/web/playground/seed/core/markdown/canvas/syntax/document-1.json +4 -4
  96. package/dist/web/playground/seed/core/markdown/canvas/syntax/document-2.json +5 -5
  97. package/dist/web/playground/seed/core/markdown/canvas/syntax/document-3.json +10 -10
  98. package/dist/web/playground/seed/core/markdown/canvas/syntax/document-4.json +5 -5
  99. package/dist/web/playground/seed/core/markdown/canvas/syntax/effort-notes.json +5 -5
  100. package/dist/web/playground/seed/core/markdown/canvas/syntax/frontmatter-summaries.json +4 -4
  101. package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-1.json +5 -5
  102. package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-2.json +6 -6
  103. package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-3.json +3 -3
  104. package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-4.json +3 -3
  105. package/dist/web/playground/seed/core/markdown/canvas/syntax/longer-duration.json +4 -4
  106. package/dist/web/playground/seed/core/markdown/canvas/syntax/longer-intervals.json +4 -4
  107. package/dist/web/playground/seed/core/markdown/canvas/syntax/measurements.json +7 -7
  108. package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-1.json +5 -5
  109. package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-2.json +7 -7
  110. package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-3.json +8 -8
  111. package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-4.json +6 -6
  112. package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-5.json +5 -5
  113. package/dist/web/playground/seed/core/markdown/canvas/syntax/mixed-sections.json +10 -10
  114. package/dist/web/playground/seed/core/markdown/canvas/syntax/mixed-timers.json +5 -5
  115. package/dist/web/playground/seed/core/markdown/canvas/syntax/multiple-amrap-windows.json +7 -7
  116. package/dist/web/playground/seed/core/markdown/canvas/syntax/multiple-sets.json +4 -4
  117. package/dist/web/playground/seed/core/markdown/canvas/syntax/named-groups.json +6 -6
  118. package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-1.json +6 -6
  119. package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-2.json +4 -4
  120. package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-3.json +6 -6
  121. package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-4.json +3 -3
  122. package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-5.json +4 -4
  123. package/dist/web/playground/seed/core/markdown/canvas/syntax/single-movement.json +3 -3
  124. package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-1.json +4 -4
  125. package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-2.json +5 -5
  126. package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-3.json +4 -4
  127. package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-4.json +4 -4
  128. package/dist/web/playground/seed/core/markdown/canvas/syntax/time-cap.json +6 -6
  129. package/dist/web/playground/seed/core/markdown/canvas/syntax/timer-modifiers.json +6 -6
  130. package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-1.json +6 -6
  131. package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-2.json +4 -4
  132. package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-3.json +4 -4
  133. package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-4.json +4 -4
  134. package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-5.json +5 -5
  135. package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-rest.json +4 -4
  136. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/aggregate-by-effort.json +2 -2
  137. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/aggregate-by-week.json +2 -2
  138. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/content-fran.json +2 -2
  139. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/filter-combos.json +2 -2
  140. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/pipes-limit.json +2 -2
  141. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/session-rpe.json +2 -2
  142. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/source-journal.json +2 -2
  143. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/tis-trend.json +2 -2
  144. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/where-join.json +2 -2
  145. package/dist/web/playground/seed/core/markdown/dashboards/benchmark-pr-board.json +6 -6
  146. package/dist/web/playground/seed/core/markdown/dashboards/finger-strength-v8.json +5 -5
  147. package/dist/web/playground/seed/core/markdown/dashboards/polarized-base-marathon.json +9 -9
  148. package/dist/web/playground/seed/core/markdown/dashboards/recovery-readiness.json +7 -7
  149. package/dist/web/playground/seed/core/markdown/dashboards/road-to-560-total.json +9 -9
  150. package/dist/web/playground/seed/core/markdown/dashboards/training-block-review.json +11 -11
  151. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/air-squat.json +1 -1
  152. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/box-jump.json +1 -1
  153. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/broad-jump.json +1 -1
  154. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/burpee-box-jump-over.json +1 -1
  155. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/burpee-over-dumbbell.json +1 -1
  156. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/burpee.json +1 -1
  157. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/dumbbell-squat-clean.json +1 -1
  158. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/ghd-sit-up.json +1 -1
  159. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/ground-kong.json +1 -1
  160. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/jumping-jack.json +1 -1
  161. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/kong-walk.json +1 -1
  162. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/lunge.json +1 -1
  163. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/overhead-squat.json +1 -1
  164. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/parkour-roll.json +1 -1
  165. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/parkour-squat.json +1 -1
  166. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/pistol-squat.json +1 -1
  167. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/plank.json +1 -1
  168. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/precision-burpee.json +1 -1
  169. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/precision-jump.json +1 -1
  170. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/quadrupedal-movement.json +1 -1
  171. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/russian-twist.json +1 -1
  172. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/sit-up.json +1 -1
  173. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/squat-clean.json +1 -1
  174. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/squat-hold.json +1 -1
  175. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/squat-snatch.json +1 -1
  176. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/tuck-jump.json +1 -1
  177. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/wall-ball.json +1 -1
  178. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/wall-burpee.json +1 -1
  179. package/dist/web/playground/seed/core/markdown/efforts/cycling/assault-bike.json +1 -1
  180. package/dist/web/playground/seed/core/markdown/efforts/cycling/cycling-moderate.json +1 -1
  181. package/dist/web/playground/seed/core/markdown/efforts/cycling/cycling-vigorous.json +1 -1
  182. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/assisted-pull-up.json +1 -1
  183. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/burpee-pull-up.json +1 -1
  184. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/chest-to-bar-pull-up.json +1 -1
  185. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/dip.json +1 -1
  186. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/double-under.json +1 -1
  187. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/handstand-hold.json +1 -1
  188. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/handstand-push-up.json +1 -1
  189. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/handstand-walk.json +1 -1
  190. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/jump-rope.json +1 -1
  191. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/jumping-pull-up.json +1 -1
  192. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/jumping-push-up.json +1 -1
  193. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/l-sit-pull-up.json +1 -1
  194. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/muscle-up.json +1 -1
  195. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/pull-up.json +1 -1
  196. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/push-up.json +1 -1
  197. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/reverse-wall-dip.json +1 -1
  198. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/rope-climb.json +1 -1
  199. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/toes-to-bar.json +1 -1
  200. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-arm-bar.json +1 -1
  201. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-around-the-world.json +1 -1
  202. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-bent-over-row.json +1 -1
  203. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-jerk.json +1 -1
  204. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-press.json +1 -1
  205. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-clean.json +1 -1
  206. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-deadlift.json +1 -1
  207. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-floor-press.json +1 -1
  208. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-front-squat.json +1 -1
  209. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-goblet-squat.json +1 -1
  210. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-gorilla-row.json +1 -1
  211. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-halo.json +1 -1
  212. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-jerk.json +1 -1
  213. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-overhead-squat.json +1 -1
  214. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-press.json +1 -1
  215. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-snatch.json +1 -1
  216. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-swing.json +1 -1
  217. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-windmill.json +1 -1
  218. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/turkish-get-up.json +1 -1
  219. package/dist/web/playground/seed/core/markdown/efforts/recovery/rest.json +1 -1
  220. package/dist/web/playground/seed/core/markdown/efforts/recovery/stretching.json +1 -1
  221. package/dist/web/playground/seed/core/markdown/efforts/rowing/rowing-sprint.json +1 -1
  222. package/dist/web/playground/seed/core/markdown/efforts/rowing/rowing.json +1 -1
  223. package/dist/web/playground/seed/core/markdown/efforts/rowing/ski-erg.json +1 -1
  224. package/dist/web/playground/seed/core/markdown/efforts/running/backward-running.json +1 -1
  225. package/dist/web/playground/seed/core/markdown/efforts/running/running-6-mph.json +1 -1
  226. package/dist/web/playground/seed/core/markdown/efforts/running/running-8-mph.json +1 -1
  227. package/dist/web/playground/seed/core/markdown/efforts/running/running-sprint.json +1 -1
  228. package/dist/web/playground/seed/core/markdown/efforts/snatch.json +2 -2
  229. package/dist/web/playground/seed/core/markdown/efforts/strength/back-squat.json +1 -1
  230. package/dist/web/playground/seed/core/markdown/efforts/strength/bench-press.json +1 -1
  231. package/dist/web/playground/seed/core/markdown/efforts/strength/box-step-up.json +1 -1
  232. package/dist/web/playground/seed/core/markdown/efforts/strength/carioca.json +1 -1
  233. package/dist/web/playground/seed/core/markdown/efforts/strength/clean-and-jerk.json +1 -1
  234. package/dist/web/playground/seed/core/markdown/efforts/strength/cluster.json +1 -1
  235. package/dist/web/playground/seed/core/markdown/efforts/strength/dead-hang.json +1 -1
  236. package/dist/web/playground/seed/core/markdown/efforts/strength/deadlift.json +1 -1
  237. package/dist/web/playground/seed/core/markdown/efforts/strength/devils-press.json +1 -1
  238. package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-box-step-up.json +1 -1
  239. package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-clean.json +1 -1
  240. package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-fly.json +1 -1
  241. package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-row.json +1 -1
  242. package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-snatch.json +1 -1
  243. package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-thruster.json +1 -1
  244. package/dist/web/playground/seed/core/markdown/efforts/strength/elbows-to-knees.json +1 -1
  245. package/dist/web/playground/seed/core/markdown/efforts/strength/farmer-carry.json +1 -1
  246. package/dist/web/playground/seed/core/markdown/efforts/strength/frog-stand.json +1 -1
  247. package/dist/web/playground/seed/core/markdown/efforts/strength/front-squat.json +1 -1
  248. package/dist/web/playground/seed/core/markdown/efforts/strength/good-morning.json +1 -1
  249. package/dist/web/playground/seed/core/markdown/efforts/strength/hanging-leg-raise.json +1 -1
  250. package/dist/web/playground/seed/core/markdown/efforts/strength/hollow-rock.json +1 -1
  251. package/dist/web/playground/seed/core/markdown/efforts/strength/knees-to-elbows.json +1 -1
  252. package/dist/web/playground/seed/core/markdown/efforts/strength/l-sit.json +1 -1
  253. package/dist/web/playground/seed/core/markdown/efforts/strength/man-maker.json +1 -1
  254. package/dist/web/playground/seed/core/markdown/efforts/strength/medicine-ball-clean.json +1 -1
  255. package/dist/web/playground/seed/core/markdown/efforts/strength/overhead-press.json +1 -1
  256. package/dist/web/playground/seed/core/markdown/efforts/strength/parkour-vault.json +1 -1
  257. package/dist/web/playground/seed/core/markdown/efforts/strength/pig-flip.json +1 -1
  258. package/dist/web/playground/seed/core/markdown/efforts/strength/power-clean.json +1 -1
  259. package/dist/web/playground/seed/core/markdown/efforts/strength/power-snatch.json +1 -1
  260. package/dist/web/playground/seed/core/markdown/efforts/strength/push-jerk.json +1 -1
  261. package/dist/web/playground/seed/core/markdown/efforts/strength/push-press.json +1 -1
  262. package/dist/web/playground/seed/core/markdown/efforts/strength/romanian-deadlift.json +1 -1
  263. package/dist/web/playground/seed/core/markdown/efforts/strength/single-leg-deadlift.json +1 -1
  264. package/dist/web/playground/seed/core/markdown/efforts/strength/skull-crusher.json +1 -1
  265. package/dist/web/playground/seed/core/markdown/efforts/strength/slam-ball.json +1 -1
  266. package/dist/web/playground/seed/core/markdown/efforts/strength/sled-pull.json +1 -1
  267. package/dist/web/playground/seed/core/markdown/efforts/strength/sled-push.json +1 -1
  268. package/dist/web/playground/seed/core/markdown/efforts/strength/sumo-deadlift.json +1 -1
  269. package/dist/web/playground/seed/core/markdown/efforts/strength/thruster.json +1 -1
  270. package/dist/web/playground/seed/core/markdown/efforts/strength/triceps-extension.json +1 -1
  271. package/dist/web/playground/seed/core/markdown/efforts/strength/v-sit-hold.json +1 -1
  272. package/dist/web/playground/seed/core/markdown/efforts/strength/wall-walk.json +1 -1
  273. package/dist/web/playground/seed/core/markdown/efforts/strength/yoga-sun-salutation.json +1 -1
  274. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-assisted-sprint.json +1 -1
  275. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-backstroke.json +1 -1
  276. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-breaststroke-kick.json +1 -1
  277. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-breaststroke.json +1 -1
  278. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-butterfly.json +1 -1
  279. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-catch-up-drill.json +1 -1
  280. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-choice-stroke.json +1 -1
  281. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-dive-start.json +1 -1
  282. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-dolphin-kick.json +1 -1
  283. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-drafting.json +1 -1
  284. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-fingertip-drag.json +1 -1
  285. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-freestyle.json +1 -1
  286. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-individual-medley.json +1 -1
  287. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-kick.json +1 -1
  288. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-pull.json +1 -1
  289. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-resisted-sprint.json +1 -1
  290. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-rotation-drill.json +1 -1
  291. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-sighting.json +1 -1
  292. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-single-arm-drill.json +1 -1
  293. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-stroke-transition.json +1 -1
  294. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-two-kick-one-pull.json +1 -1
  295. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-vigorous.json +1 -1
  296. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming.json +1 -1
  297. package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-arm-cast.json +1 -1
  298. package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-circles.json +1 -1
  299. package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-mill.json +1 -1
  300. package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-reverse-mill.json +1 -1
  301. package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-shield-cast.json +1 -1
  302. package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-10-to-2-swing.json +1 -1
  303. package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-360-swing.json +1 -1
  304. package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-barbarian-squat.json +1 -1
  305. package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-flow.json +1 -1
  306. package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-gravedigger.json +1 -1
  307. package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-touchdown.json +1 -1
  308. package/dist/web/playground/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-carry.json +1 -1
  309. package/dist/web/playground/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-extension.json +1 -1
  310. package/dist/web/playground/seed/core/markdown/efforts/unconventional/sandbag-over-shoulder.json +1 -1
  311. package/dist/web/playground/seed/core/markdown/efforts/walking/walking-3-mph.json +1 -1
  312. package/dist/web/playground/seed/core/markdown/equipment/air-bike.json +1 -1
  313. package/dist/web/playground/seed/core/markdown/equipment/barbell.json +1 -1
  314. package/dist/web/playground/seed/core/markdown/equipment/bench.json +1 -1
  315. package/dist/web/playground/seed/core/markdown/equipment/bike-erg.json +1 -1
  316. package/dist/web/playground/seed/core/markdown/equipment/climbing-rope.json +1 -1
  317. package/dist/web/playground/seed/core/markdown/equipment/clubs.json +1 -1
  318. package/dist/web/playground/seed/core/markdown/equipment/dumbbell.json +1 -1
  319. package/dist/web/playground/seed/core/markdown/equipment/ghd.json +1 -1
  320. package/dist/web/playground/seed/core/markdown/equipment/gymnastic-rings.json +1 -1
  321. package/dist/web/playground/seed/core/markdown/equipment/jump-rope.json +1 -1
  322. package/dist/web/playground/seed/core/markdown/equipment/kettlebell.json +1 -1
  323. package/dist/web/playground/seed/core/markdown/equipment/macebell.json +1 -1
  324. package/dist/web/playground/seed/core/markdown/equipment/medicine-ball.json +1 -1
  325. package/dist/web/playground/seed/core/markdown/equipment/parallettes.json +1 -1
  326. package/dist/web/playground/seed/core/markdown/equipment/plyo-box.json +1 -1
  327. package/dist/web/playground/seed/core/markdown/equipment/pull-up-bar.json +1 -1
  328. package/dist/web/playground/seed/core/markdown/equipment/rower.json +1 -1
  329. package/dist/web/playground/seed/core/markdown/equipment/sandbag.json +1 -1
  330. package/dist/web/playground/seed/core/markdown/equipment/ski-erg.json +1 -1
  331. package/dist/web/playground/seed/core/markdown/equipment/slam-ball.json +1 -1
  332. package/dist/web/playground/seed/core/markdown/equipment/sled.json +1 -1
  333. package/dist/web/playground/seed/core/markdown/equipment/sledgehammer.json +1 -1
  334. package/dist/web/playground/seed/core/markdown/equipment/weight-vest.json +1 -1
  335. package/dist/web/playground/seed/core/report.html +13 -13
  336. package/dist/web/server/ai-skills/agent-parity.md +41 -0
  337. package/dist/web/server/ai-skills/cli.md +127 -0
  338. package/dist/web/server/ai-skills/wql.md +63 -0
  339. package/dist/web/{playground/assets/feedSync.worker-O4TGLEj3.js → server/assets/feedSync.worker-CJyLPLAX.js} +2 -2
  340. package/dist/web/server/assets/main-DJQ7VwVX.js +1160 -0
  341. package/dist/web/server/assets/main-DedlsEjf.css +2 -0
  342. package/dist/web/server/assets/{statementBuilderFlow-C7x-7JGx.js → statementBuilderFlow-4p9d-7VX.js} +2 -2
  343. package/dist/web/server/assets/vendor-BUlwHBNF.js +255 -0
  344. package/dist/web/{playground/assets/vendor-codemirror-B4BeZarI.js → server/assets/vendor-codemirror-Bh6hyz5v.js} +11 -11
  345. package/dist/web/server/index.html +4 -4
  346. package/dist/web/server/llms-full.txt +1444 -0
  347. package/dist/web/server/llms.txt +67 -0
  348. package/dist/web/{playground/seed/core/chunks/canvas.deac64e3.json → server/seed/core/chunks/canvas.6cf875a1.json} +1 -1
  349. package/dist/web/server/seed/core/chunks/{dashboards.08301ab4.json → dashboards.277192c5.json} +1 -1
  350. package/dist/web/server/seed/core/chunks/{efforts.47f650fe.json → efforts.b943edc6.json} +1 -1
  351. package/dist/web/server/seed/core/chunks/{equipment.79146d31.json → equipment.3cc3e02c.json} +1 -1
  352. package/dist/web/server/seed/core/indexes/notebooks/canvas.json +180 -180
  353. package/dist/web/server/seed/core/indexes/notebooks/dashboards.json +16 -16
  354. package/dist/web/server/seed/core/indexes/notebooks/efforts.json +326 -326
  355. package/dist/web/server/seed/core/indexes/notebooks/equipment.json +50 -50
  356. package/dist/web/server/seed/core/manifest.json +27 -27
  357. package/dist/web/server/seed/core/markdown/canvas/ai-first/README.json +1 -1
  358. package/dist/web/server/seed/core/markdown/canvas/guide/README.json +4 -4
  359. package/dist/web/server/seed/core/markdown/canvas/guide/clock.json +1 -1
  360. package/dist/web/server/seed/core/markdown/canvas/guide/dashboards.json +1 -1
  361. package/dist/web/server/seed/core/markdown/canvas/guide/metrics-summaries.json +2 -2
  362. package/dist/web/server/seed/core/markdown/canvas/guide/metrics.json +12 -12
  363. package/dist/web/server/seed/core/markdown/canvas/guide/protocols.json +20 -20
  364. package/dist/web/server/seed/core/markdown/canvas/guide/sessions.json +33 -33
  365. package/dist/web/server/seed/core/markdown/canvas/guide/start.json +11 -11
  366. package/dist/web/server/seed/core/markdown/canvas/guide/structure.json +25 -25
  367. package/dist/web/server/seed/core/markdown/canvas/guide/wql.json +5 -5
  368. package/dist/web/server/seed/core/markdown/canvas/home/sample-script.json +4 -4
  369. package/dist/web/server/seed/core/markdown/canvas/home/welcome-1.json +2 -2
  370. package/dist/web/server/seed/core/markdown/canvas/syntax/actions-comments.json +4 -4
  371. package/dist/web/server/seed/core/markdown/canvas/syntax/alternating-emom.json +5 -5
  372. package/dist/web/server/seed/core/markdown/canvas/syntax/basic-emom.json +4 -4
  373. package/dist/web/server/seed/core/markdown/canvas/syntax/calculated-metrics.json +4 -4
  374. package/dist/web/server/seed/core/markdown/canvas/syntax/classic-amrap.json +6 -6
  375. package/dist/web/server/seed/core/markdown/canvas/syntax/complex-barbell-cycling.json +4 -4
  376. package/dist/web/server/seed/core/markdown/canvas/syntax/complex-full-session.json +10 -10
  377. package/dist/web/server/seed/core/markdown/canvas/syntax/complex-nested-protocols.json +7 -7
  378. package/dist/web/server/seed/core/markdown/canvas/syntax/complex-partner-workout.json +7 -7
  379. package/dist/web/server/seed/core/markdown/canvas/syntax/complex-swimming.json +5 -5
  380. package/dist/web/server/seed/core/markdown/canvas/syntax/core-rules.json +4 -4
  381. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-and-calculated-metrics.json +4 -4
  382. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-intervals.json +4 -4
  383. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-1.json +4 -4
  384. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-2.json +5 -5
  385. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-3.json +3 -3
  386. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-4.json +4 -4
  387. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-5.json +4 -4
  388. package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-climb-bouldering.json +2 -2
  389. package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-climb-hangboard.json +2 -2
  390. package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-climb-sport.json +2 -2
  391. package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-log.json +4 -4
  392. package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-plan.json +8 -8
  393. package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-wod.json +5 -5
  394. package/dist/web/server/seed/core/markdown/canvas/syntax/distance-intervals.json +3 -3
  395. package/dist/web/server/seed/core/markdown/canvas/syntax/document-1.json +4 -4
  396. package/dist/web/server/seed/core/markdown/canvas/syntax/document-2.json +5 -5
  397. package/dist/web/server/seed/core/markdown/canvas/syntax/document-3.json +10 -10
  398. package/dist/web/server/seed/core/markdown/canvas/syntax/document-4.json +5 -5
  399. package/dist/web/server/seed/core/markdown/canvas/syntax/effort-notes.json +5 -5
  400. package/dist/web/server/seed/core/markdown/canvas/syntax/frontmatter-summaries.json +4 -4
  401. package/dist/web/server/seed/core/markdown/canvas/syntax/groups-1.json +5 -5
  402. package/dist/web/server/seed/core/markdown/canvas/syntax/groups-2.json +6 -6
  403. package/dist/web/server/seed/core/markdown/canvas/syntax/groups-3.json +3 -3
  404. package/dist/web/server/seed/core/markdown/canvas/syntax/groups-4.json +3 -3
  405. package/dist/web/server/seed/core/markdown/canvas/syntax/longer-duration.json +4 -4
  406. package/dist/web/server/seed/core/markdown/canvas/syntax/longer-intervals.json +4 -4
  407. package/dist/web/server/seed/core/markdown/canvas/syntax/measurements.json +7 -7
  408. package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-1.json +5 -5
  409. package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-2.json +7 -7
  410. package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-3.json +8 -8
  411. package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-4.json +6 -6
  412. package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-5.json +5 -5
  413. package/dist/web/server/seed/core/markdown/canvas/syntax/mixed-sections.json +10 -10
  414. package/dist/web/server/seed/core/markdown/canvas/syntax/mixed-timers.json +5 -5
  415. package/dist/web/server/seed/core/markdown/canvas/syntax/multiple-amrap-windows.json +7 -7
  416. package/dist/web/server/seed/core/markdown/canvas/syntax/multiple-sets.json +4 -4
  417. package/dist/web/server/seed/core/markdown/canvas/syntax/named-groups.json +6 -6
  418. package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-1.json +6 -6
  419. package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-2.json +4 -4
  420. package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-3.json +6 -6
  421. package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-4.json +3 -3
  422. package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-5.json +4 -4
  423. package/dist/web/server/seed/core/markdown/canvas/syntax/single-movement.json +3 -3
  424. package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-1.json +4 -4
  425. package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-2.json +5 -5
  426. package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-3.json +4 -4
  427. package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-4.json +4 -4
  428. package/dist/web/server/seed/core/markdown/canvas/syntax/time-cap.json +6 -6
  429. package/dist/web/server/seed/core/markdown/canvas/syntax/timer-modifiers.json +6 -6
  430. package/dist/web/server/seed/core/markdown/canvas/syntax/timers-1.json +6 -6
  431. package/dist/web/server/seed/core/markdown/canvas/syntax/timers-2.json +4 -4
  432. package/dist/web/server/seed/core/markdown/canvas/syntax/timers-3.json +4 -4
  433. package/dist/web/server/seed/core/markdown/canvas/syntax/timers-4.json +4 -4
  434. package/dist/web/server/seed/core/markdown/canvas/syntax/timers-5.json +5 -5
  435. package/dist/web/server/seed/core/markdown/canvas/syntax/timers-rest.json +4 -4
  436. package/dist/web/server/seed/core/markdown/canvas/wql-presets/aggregate-by-effort.json +2 -2
  437. package/dist/web/server/seed/core/markdown/canvas/wql-presets/aggregate-by-week.json +2 -2
  438. package/dist/web/server/seed/core/markdown/canvas/wql-presets/content-fran.json +2 -2
  439. package/dist/web/server/seed/core/markdown/canvas/wql-presets/filter-combos.json +2 -2
  440. package/dist/web/server/seed/core/markdown/canvas/wql-presets/pipes-limit.json +2 -2
  441. package/dist/web/server/seed/core/markdown/canvas/wql-presets/session-rpe.json +2 -2
  442. package/dist/web/server/seed/core/markdown/canvas/wql-presets/source-journal.json +2 -2
  443. package/dist/web/server/seed/core/markdown/canvas/wql-presets/tis-trend.json +2 -2
  444. package/dist/web/server/seed/core/markdown/canvas/wql-presets/where-join.json +2 -2
  445. package/dist/web/server/seed/core/markdown/dashboards/benchmark-pr-board.json +6 -6
  446. package/dist/web/server/seed/core/markdown/dashboards/finger-strength-v8.json +5 -5
  447. package/dist/web/server/seed/core/markdown/dashboards/polarized-base-marathon.json +9 -9
  448. package/dist/web/server/seed/core/markdown/dashboards/recovery-readiness.json +7 -7
  449. package/dist/web/server/seed/core/markdown/dashboards/road-to-560-total.json +9 -9
  450. package/dist/web/server/seed/core/markdown/dashboards/training-block-review.json +11 -11
  451. package/dist/web/server/seed/core/markdown/efforts/bodyweight/air-squat.json +1 -1
  452. package/dist/web/server/seed/core/markdown/efforts/bodyweight/box-jump.json +1 -1
  453. package/dist/web/server/seed/core/markdown/efforts/bodyweight/broad-jump.json +1 -1
  454. package/dist/web/server/seed/core/markdown/efforts/bodyweight/burpee-box-jump-over.json +1 -1
  455. package/dist/web/server/seed/core/markdown/efforts/bodyweight/burpee-over-dumbbell.json +1 -1
  456. package/dist/web/server/seed/core/markdown/efforts/bodyweight/burpee.json +1 -1
  457. package/dist/web/server/seed/core/markdown/efforts/bodyweight/dumbbell-squat-clean.json +1 -1
  458. package/dist/web/server/seed/core/markdown/efforts/bodyweight/ghd-sit-up.json +1 -1
  459. package/dist/web/server/seed/core/markdown/efforts/bodyweight/ground-kong.json +1 -1
  460. package/dist/web/server/seed/core/markdown/efforts/bodyweight/jumping-jack.json +1 -1
  461. package/dist/web/server/seed/core/markdown/efforts/bodyweight/kong-walk.json +1 -1
  462. package/dist/web/server/seed/core/markdown/efforts/bodyweight/lunge.json +1 -1
  463. package/dist/web/server/seed/core/markdown/efforts/bodyweight/overhead-squat.json +1 -1
  464. package/dist/web/server/seed/core/markdown/efforts/bodyweight/parkour-roll.json +1 -1
  465. package/dist/web/server/seed/core/markdown/efforts/bodyweight/parkour-squat.json +1 -1
  466. package/dist/web/server/seed/core/markdown/efforts/bodyweight/pistol-squat.json +1 -1
  467. package/dist/web/server/seed/core/markdown/efforts/bodyweight/plank.json +1 -1
  468. package/dist/web/server/seed/core/markdown/efforts/bodyweight/precision-burpee.json +1 -1
  469. package/dist/web/server/seed/core/markdown/efforts/bodyweight/precision-jump.json +1 -1
  470. package/dist/web/server/seed/core/markdown/efforts/bodyweight/quadrupedal-movement.json +1 -1
  471. package/dist/web/server/seed/core/markdown/efforts/bodyweight/russian-twist.json +1 -1
  472. package/dist/web/server/seed/core/markdown/efforts/bodyweight/sit-up.json +1 -1
  473. package/dist/web/server/seed/core/markdown/efforts/bodyweight/squat-clean.json +1 -1
  474. package/dist/web/server/seed/core/markdown/efforts/bodyweight/squat-hold.json +1 -1
  475. package/dist/web/server/seed/core/markdown/efforts/bodyweight/squat-snatch.json +1 -1
  476. package/dist/web/server/seed/core/markdown/efforts/bodyweight/tuck-jump.json +1 -1
  477. package/dist/web/server/seed/core/markdown/efforts/bodyweight/wall-ball.json +1 -1
  478. package/dist/web/server/seed/core/markdown/efforts/bodyweight/wall-burpee.json +1 -1
  479. package/dist/web/server/seed/core/markdown/efforts/cycling/assault-bike.json +1 -1
  480. package/dist/web/server/seed/core/markdown/efforts/cycling/cycling-moderate.json +1 -1
  481. package/dist/web/server/seed/core/markdown/efforts/cycling/cycling-vigorous.json +1 -1
  482. package/dist/web/server/seed/core/markdown/efforts/gymnastics/assisted-pull-up.json +1 -1
  483. package/dist/web/server/seed/core/markdown/efforts/gymnastics/burpee-pull-up.json +1 -1
  484. package/dist/web/server/seed/core/markdown/efforts/gymnastics/chest-to-bar-pull-up.json +1 -1
  485. package/dist/web/server/seed/core/markdown/efforts/gymnastics/dip.json +1 -1
  486. package/dist/web/server/seed/core/markdown/efforts/gymnastics/double-under.json +1 -1
  487. package/dist/web/server/seed/core/markdown/efforts/gymnastics/handstand-hold.json +1 -1
  488. package/dist/web/server/seed/core/markdown/efforts/gymnastics/handstand-push-up.json +1 -1
  489. package/dist/web/server/seed/core/markdown/efforts/gymnastics/handstand-walk.json +1 -1
  490. package/dist/web/server/seed/core/markdown/efforts/gymnastics/jump-rope.json +1 -1
  491. package/dist/web/server/seed/core/markdown/efforts/gymnastics/jumping-pull-up.json +1 -1
  492. package/dist/web/server/seed/core/markdown/efforts/gymnastics/jumping-push-up.json +1 -1
  493. package/dist/web/server/seed/core/markdown/efforts/gymnastics/l-sit-pull-up.json +1 -1
  494. package/dist/web/server/seed/core/markdown/efforts/gymnastics/muscle-up.json +1 -1
  495. package/dist/web/server/seed/core/markdown/efforts/gymnastics/pull-up.json +1 -1
  496. package/dist/web/server/seed/core/markdown/efforts/gymnastics/push-up.json +1 -1
  497. package/dist/web/server/seed/core/markdown/efforts/gymnastics/reverse-wall-dip.json +1 -1
  498. package/dist/web/server/seed/core/markdown/efforts/gymnastics/rope-climb.json +1 -1
  499. package/dist/web/server/seed/core/markdown/efforts/gymnastics/toes-to-bar.json +1 -1
  500. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-arm-bar.json +1 -1
  501. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-around-the-world.json +1 -1
  502. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-bent-over-row.json +1 -1
  503. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-jerk.json +1 -1
  504. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-press.json +1 -1
  505. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-clean.json +1 -1
  506. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-deadlift.json +1 -1
  507. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-floor-press.json +1 -1
  508. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-front-squat.json +1 -1
  509. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-goblet-squat.json +1 -1
  510. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-gorilla-row.json +1 -1
  511. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-halo.json +1 -1
  512. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-jerk.json +1 -1
  513. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-overhead-squat.json +1 -1
  514. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-press.json +1 -1
  515. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-snatch.json +1 -1
  516. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-swing.json +1 -1
  517. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-windmill.json +1 -1
  518. package/dist/web/server/seed/core/markdown/efforts/kettlebell/turkish-get-up.json +1 -1
  519. package/dist/web/server/seed/core/markdown/efforts/recovery/rest.json +1 -1
  520. package/dist/web/server/seed/core/markdown/efforts/recovery/stretching.json +1 -1
  521. package/dist/web/server/seed/core/markdown/efforts/rowing/rowing-sprint.json +1 -1
  522. package/dist/web/server/seed/core/markdown/efforts/rowing/rowing.json +1 -1
  523. package/dist/web/server/seed/core/markdown/efforts/rowing/ski-erg.json +1 -1
  524. package/dist/web/server/seed/core/markdown/efforts/running/backward-running.json +1 -1
  525. package/dist/web/server/seed/core/markdown/efforts/running/running-6-mph.json +1 -1
  526. package/dist/web/server/seed/core/markdown/efforts/running/running-8-mph.json +1 -1
  527. package/dist/web/server/seed/core/markdown/efforts/running/running-sprint.json +1 -1
  528. package/dist/web/server/seed/core/markdown/efforts/snatch.json +2 -2
  529. package/dist/web/server/seed/core/markdown/efforts/strength/back-squat.json +1 -1
  530. package/dist/web/server/seed/core/markdown/efforts/strength/bench-press.json +1 -1
  531. package/dist/web/server/seed/core/markdown/efforts/strength/box-step-up.json +1 -1
  532. package/dist/web/server/seed/core/markdown/efforts/strength/carioca.json +1 -1
  533. package/dist/web/server/seed/core/markdown/efforts/strength/clean-and-jerk.json +1 -1
  534. package/dist/web/server/seed/core/markdown/efforts/strength/cluster.json +1 -1
  535. package/dist/web/server/seed/core/markdown/efforts/strength/dead-hang.json +1 -1
  536. package/dist/web/server/seed/core/markdown/efforts/strength/deadlift.json +1 -1
  537. package/dist/web/server/seed/core/markdown/efforts/strength/devils-press.json +1 -1
  538. package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-box-step-up.json +1 -1
  539. package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-clean.json +1 -1
  540. package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-fly.json +1 -1
  541. package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-row.json +1 -1
  542. package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-snatch.json +1 -1
  543. package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-thruster.json +1 -1
  544. package/dist/web/server/seed/core/markdown/efforts/strength/elbows-to-knees.json +1 -1
  545. package/dist/web/server/seed/core/markdown/efforts/strength/farmer-carry.json +1 -1
  546. package/dist/web/server/seed/core/markdown/efforts/strength/frog-stand.json +1 -1
  547. package/dist/web/server/seed/core/markdown/efforts/strength/front-squat.json +1 -1
  548. package/dist/web/server/seed/core/markdown/efforts/strength/good-morning.json +1 -1
  549. package/dist/web/server/seed/core/markdown/efforts/strength/hanging-leg-raise.json +1 -1
  550. package/dist/web/server/seed/core/markdown/efforts/strength/hollow-rock.json +1 -1
  551. package/dist/web/server/seed/core/markdown/efforts/strength/knees-to-elbows.json +1 -1
  552. package/dist/web/server/seed/core/markdown/efforts/strength/l-sit.json +1 -1
  553. package/dist/web/server/seed/core/markdown/efforts/strength/man-maker.json +1 -1
  554. package/dist/web/server/seed/core/markdown/efforts/strength/medicine-ball-clean.json +1 -1
  555. package/dist/web/server/seed/core/markdown/efforts/strength/overhead-press.json +1 -1
  556. package/dist/web/server/seed/core/markdown/efforts/strength/parkour-vault.json +1 -1
  557. package/dist/web/server/seed/core/markdown/efforts/strength/pig-flip.json +1 -1
  558. package/dist/web/server/seed/core/markdown/efforts/strength/power-clean.json +1 -1
  559. package/dist/web/server/seed/core/markdown/efforts/strength/power-snatch.json +1 -1
  560. package/dist/web/server/seed/core/markdown/efforts/strength/push-jerk.json +1 -1
  561. package/dist/web/server/seed/core/markdown/efforts/strength/push-press.json +1 -1
  562. package/dist/web/server/seed/core/markdown/efforts/strength/romanian-deadlift.json +1 -1
  563. package/dist/web/server/seed/core/markdown/efforts/strength/single-leg-deadlift.json +1 -1
  564. package/dist/web/server/seed/core/markdown/efforts/strength/skull-crusher.json +1 -1
  565. package/dist/web/server/seed/core/markdown/efforts/strength/slam-ball.json +1 -1
  566. package/dist/web/server/seed/core/markdown/efforts/strength/sled-pull.json +1 -1
  567. package/dist/web/server/seed/core/markdown/efforts/strength/sled-push.json +1 -1
  568. package/dist/web/server/seed/core/markdown/efforts/strength/sumo-deadlift.json +1 -1
  569. package/dist/web/server/seed/core/markdown/efforts/strength/thruster.json +1 -1
  570. package/dist/web/server/seed/core/markdown/efforts/strength/triceps-extension.json +1 -1
  571. package/dist/web/server/seed/core/markdown/efforts/strength/v-sit-hold.json +1 -1
  572. package/dist/web/server/seed/core/markdown/efforts/strength/wall-walk.json +1 -1
  573. package/dist/web/server/seed/core/markdown/efforts/strength/yoga-sun-salutation.json +1 -1
  574. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-assisted-sprint.json +1 -1
  575. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-backstroke.json +1 -1
  576. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-breaststroke-kick.json +1 -1
  577. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-breaststroke.json +1 -1
  578. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-butterfly.json +1 -1
  579. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-catch-up-drill.json +1 -1
  580. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-choice-stroke.json +1 -1
  581. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-dive-start.json +1 -1
  582. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-dolphin-kick.json +1 -1
  583. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-drafting.json +1 -1
  584. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-fingertip-drag.json +1 -1
  585. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-freestyle.json +1 -1
  586. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-individual-medley.json +1 -1
  587. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-kick.json +1 -1
  588. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-pull.json +1 -1
  589. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-resisted-sprint.json +1 -1
  590. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-rotation-drill.json +1 -1
  591. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-sighting.json +1 -1
  592. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-single-arm-drill.json +1 -1
  593. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-stroke-transition.json +1 -1
  594. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-two-kick-one-pull.json +1 -1
  595. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-vigorous.json +1 -1
  596. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming.json +1 -1
  597. package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-arm-cast.json +1 -1
  598. package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-circles.json +1 -1
  599. package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-mill.json +1 -1
  600. package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-reverse-mill.json +1 -1
  601. package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-shield-cast.json +1 -1
  602. package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-10-to-2-swing.json +1 -1
  603. package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-360-swing.json +1 -1
  604. package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-barbarian-squat.json +1 -1
  605. package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-flow.json +1 -1
  606. package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-gravedigger.json +1 -1
  607. package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-touchdown.json +1 -1
  608. package/dist/web/server/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-carry.json +1 -1
  609. package/dist/web/server/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-extension.json +1 -1
  610. package/dist/web/server/seed/core/markdown/efforts/unconventional/sandbag-over-shoulder.json +1 -1
  611. package/dist/web/server/seed/core/markdown/efforts/walking/walking-3-mph.json +1 -1
  612. package/dist/web/server/seed/core/markdown/equipment/air-bike.json +1 -1
  613. package/dist/web/server/seed/core/markdown/equipment/barbell.json +1 -1
  614. package/dist/web/server/seed/core/markdown/equipment/bench.json +1 -1
  615. package/dist/web/server/seed/core/markdown/equipment/bike-erg.json +1 -1
  616. package/dist/web/server/seed/core/markdown/equipment/climbing-rope.json +1 -1
  617. package/dist/web/server/seed/core/markdown/equipment/clubs.json +1 -1
  618. package/dist/web/server/seed/core/markdown/equipment/dumbbell.json +1 -1
  619. package/dist/web/server/seed/core/markdown/equipment/ghd.json +1 -1
  620. package/dist/web/server/seed/core/markdown/equipment/gymnastic-rings.json +1 -1
  621. package/dist/web/server/seed/core/markdown/equipment/jump-rope.json +1 -1
  622. package/dist/web/server/seed/core/markdown/equipment/kettlebell.json +1 -1
  623. package/dist/web/server/seed/core/markdown/equipment/macebell.json +1 -1
  624. package/dist/web/server/seed/core/markdown/equipment/medicine-ball.json +1 -1
  625. package/dist/web/server/seed/core/markdown/equipment/parallettes.json +1 -1
  626. package/dist/web/server/seed/core/markdown/equipment/plyo-box.json +1 -1
  627. package/dist/web/server/seed/core/markdown/equipment/pull-up-bar.json +1 -1
  628. package/dist/web/server/seed/core/markdown/equipment/rower.json +1 -1
  629. package/dist/web/server/seed/core/markdown/equipment/sandbag.json +1 -1
  630. package/dist/web/server/seed/core/markdown/equipment/ski-erg.json +1 -1
  631. package/dist/web/server/seed/core/markdown/equipment/slam-ball.json +1 -1
  632. package/dist/web/server/seed/core/markdown/equipment/sled.json +1 -1
  633. package/dist/web/server/seed/core/markdown/equipment/sledgehammer.json +1 -1
  634. package/dist/web/server/seed/core/markdown/equipment/weight-vest.json +1 -1
  635. package/dist/web/server/seed/core/report.html +13 -13
  636. package/package.json +10 -8
  637. package/dist/chunk-2EWCEE6N.mjs.map +0 -1
  638. package/dist/chunk-5NNSHRMZ.mjs.map +0 -1
  639. package/dist/chunk-LNBKPHEP.mjs.map +0 -1
  640. package/dist/chunk-SLCRIGUR.mjs.map +0 -1
  641. package/dist/server-SHNWCIIM.mjs +0 -11
  642. package/dist/web/playground/assets/main-DGz9PHS_.css +0 -2
  643. package/dist/web/playground/assets/main-DfHqNhwO.js +0 -1149
  644. package/dist/web/playground/assets/vendor-Dz-Azkoq.js +0 -198
  645. package/dist/web/server/assets/main-DGz9PHS_.css +0 -2
  646. package/dist/web/server/assets/main-VXFEU44Q.js +0 -1149
  647. package/dist/web/server/assets/vendor-Dz-Azkoq.js +0 -198
package/dist/index.cjs CHANGED
@@ -4,15 +4,20 @@ var wodWikiLang = require('@bitcobblers/wod-wiki-lang');
4
4
  var wod_wiki_engine_star = require('@bitcobblers/wod-wiki-engine');
5
5
  var fs = require('fs');
6
6
  var path = require('path');
7
+ var wodWikiStorage = require('@bitcobblers/wod-wiki-storage');
8
+ var agent = require('@bitcobblers/wod-wiki-engine/agent');
7
9
  var child_process = require('child_process');
8
10
  var wodWikiCore = require('@bitcobblers/wod-wiki-core');
9
11
  var wodWikiWql = require('@bitcobblers/wod-wiki-wql');
10
12
  var crypto = require('crypto');
13
+ var zod = require('zod');
14
+ var mcp_js = require('@modelcontextprotocol/sdk/server/mcp.js');
15
+ var webStandardStreamableHttp_js = require('@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js');
16
+ var sql = require('@bitcobblers/wod-wiki-storage/sql');
11
17
  var promises = require('fs/promises');
12
18
  var stream = require('stream');
13
- var sql = require('@bitcobblers/wod-wiki-storage/sql');
14
- var wodWikiStorage = require('@bitcobblers/wod-wiki-storage');
15
19
  var http = require('http');
20
+ var stdio_js = require('@modelcontextprotocol/sdk/server/stdio.js');
16
21
 
17
22
  var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
18
23
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -439,7 +444,7 @@ var init_report = __esm({
439
444
  var VERSION;
440
445
  var init_version = __esm({
441
446
  "src/version.ts"() {
442
- VERSION = "0.53.2204";
447
+ VERSION = "0.55.2206";
443
448
  }
444
449
  });
445
450
 
@@ -705,6 +710,590 @@ var init_skills = __esm({
705
710
  }
706
711
  });
707
712
 
713
+ // src/cli/agentCommands.ts
714
+ var agentCommands_exports = {};
715
+ __export(agentCommands_exports, {
716
+ runAgentNounVerbCommand: () => runAgentNounVerbCommand
717
+ });
718
+ async function openStorageSession(env) {
719
+ if (env.parsed.serverUrl) {
720
+ const trimmed = env.parsed.serverUrl.replace(/\/+$/, "");
721
+ const apiBase = trimmed.endsWith("/api") ? trimmed : `${trimmed}/api`;
722
+ const baseUrl = trimmed.endsWith("/api") ? trimmed.slice(0, -4) : trimmed;
723
+ const storage = new wodWikiStorage.ApiStorage(apiBase);
724
+ return {
725
+ storage,
726
+ feedTree: new wod_wiki_engine_star.MemoryFeedTree(),
727
+ baseUrl,
728
+ label: baseUrl,
729
+ close: () => storage.close()
730
+ };
731
+ }
732
+ const dbConfig = env.resolveDbConfig();
733
+ const dbHandle = await openCliDb(dbConfig);
734
+ const feedTree = dbConfig.kind === "sqlite" ? new NodeFsFeedTree(`${dbConfig.path}.feed`) : new wod_wiki_engine_star.MemoryFeedTree();
735
+ return {
736
+ storage: dbHandle.storage,
737
+ feedTree,
738
+ baseUrl: "",
739
+ label: dbHandle.path,
740
+ close: () => dbHandle.close()
741
+ };
742
+ }
743
+ function parseSetPairs(pairs) {
744
+ const out = {};
745
+ for (const pair of pairs) {
746
+ const idx = pair.indexOf("=");
747
+ if (idx <= 0) {
748
+ throw new Error(`Invalid --set "${pair}" (expected fieldId=value)`);
749
+ }
750
+ const key = pair.slice(0, idx).trim();
751
+ const rawVal = pair.slice(idx + 1).trim();
752
+ if (!key || !rawVal) {
753
+ throw new Error(`Invalid --set "${pair}" (expected fieldId=value)`);
754
+ }
755
+ const num = Number(rawVal);
756
+ out[key] = Number.isFinite(num) ? num : rawVal;
757
+ }
758
+ return out;
759
+ }
760
+ function toNotebookId(slugOrId) {
761
+ if (!slugOrId) return void 0;
762
+ return slugOrId.startsWith("notebook/") ? slugOrId : `notebook/${slugOrId}`;
763
+ }
764
+ function slugifyName(input) {
765
+ return input.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
766
+ }
767
+ async function readContentArg(fileOrDash, inlineMarkdown, readStdin2) {
768
+ if (inlineMarkdown !== void 0) return inlineMarkdown;
769
+ if (!fileOrDash || fileOrDash === "-") {
770
+ return readStdin2();
771
+ }
772
+ const fs = nodeFs();
773
+ if (!fs.existsSync(fileOrDash)) {
774
+ throw new Error(`File not found: ${fileOrDash}`);
775
+ }
776
+ return fs.readFileSync(fileOrDash, "utf-8");
777
+ }
778
+ function emitSuccess(env, toolName, data, humanSummary) {
779
+ if (env.parsed.json) {
780
+ env.writeOut(
781
+ JSON.stringify(
782
+ {
783
+ ok: true,
784
+ tool: toolName,
785
+ data
786
+ },
787
+ null,
788
+ 2
789
+ )
790
+ );
791
+ } else {
792
+ env.writeOut(humanSummary);
793
+ }
794
+ return 0;
795
+ }
796
+ function emitError(env, error) {
797
+ if (error instanceof agent.AgentConfirmationRequiredError) {
798
+ const payload = {
799
+ ok: false,
800
+ code: error.code,
801
+ exitCode: 4,
802
+ action: error.action,
803
+ targetId: error.targetId,
804
+ error: error.message,
805
+ hint: `Re-run with --yes "${error.targetId}" to confirm.`
806
+ };
807
+ if (env.parsed.json) {
808
+ env.writeOut(JSON.stringify(payload, null, 2));
809
+ } else {
810
+ env.writeErr(
811
+ `[wod] Confirmation required (${error.action}): ${error.message} Pass --yes "${error.targetId}" to confirm.`
812
+ );
813
+ }
814
+ return 4;
815
+ }
816
+ const message = error instanceof Error ? error.message : String(error);
817
+ if (env.parsed.json) {
818
+ env.writeOut(
819
+ JSON.stringify(
820
+ {
821
+ ok: false,
822
+ code: "RUNTIME_ERROR",
823
+ error: message
824
+ },
825
+ null,
826
+ 2
827
+ )
828
+ );
829
+ } else {
830
+ env.writeErr(`[wod] Error: ${message}`);
831
+ }
832
+ return 1;
833
+ }
834
+ async function runAgentNounVerbCommand(env) {
835
+ const { parsed } = env;
836
+ const noun = parsed.subcommand;
837
+ const verb = parsed.target;
838
+ const arg1 = parsed.target2;
839
+ const arg2 = parsed.target3;
840
+ try {
841
+ if (noun === "tools") {
842
+ const action = verb ?? "list";
843
+ const manifest = agent.exportAgentCapabilitiesManifest();
844
+ if (action === "manifest") {
845
+ env.writeOut(JSON.stringify(manifest, null, 2));
846
+ return 0;
847
+ }
848
+ if (action === "list") {
849
+ if (parsed.json) {
850
+ return emitSuccess(env, "wod_tools_list", manifest.domainTools, "");
851
+ }
852
+ for (const t of manifest.domainTools) {
853
+ env.writeOut(`${t.name.padEnd(26)} [Tier ${t.tier}] ${t.cliEquivalent}`);
854
+ }
855
+ env.writeOut(`[wod tools] ${manifest.domainTools.length} portable domain tools`);
856
+ return 0;
857
+ }
858
+ throw new Error(`Unknown tools action "${action}" (expected: list | manifest)`);
859
+ }
860
+ if (noun === "doctor") {
861
+ let backendKind = "sqlite";
862
+ let backendTarget = "";
863
+ let dbReady = false;
864
+ let noteCount = 0;
865
+ let sessionCount = 0;
866
+ if (parsed.serverUrl) {
867
+ backendKind = "api";
868
+ backendTarget = parsed.serverUrl;
869
+ const session2 = await openStorageSession(env);
870
+ try {
871
+ noteCount = (await session2.storage.readonly("notes").getAll()).length;
872
+ sessionCount = (await session2.storage.readonly("sessions").getAll()).length;
873
+ dbReady = true;
874
+ } finally {
875
+ await session2.close();
876
+ }
877
+ } else {
878
+ const cfg = env.resolveDbConfig();
879
+ backendKind = cfg.kind;
880
+ backendTarget = cfg.kind === "sqlite" ? cfg.path : cfg.kind;
881
+ try {
882
+ const db = await openCliDb(cfg, { initialize: false });
883
+ try {
884
+ noteCount = (await db.storage.readonly("notes").getAll()).length;
885
+ sessionCount = (await db.storage.readonly("sessions").getAll()).length;
886
+ dbReady = true;
887
+ } finally {
888
+ await db.close();
889
+ }
890
+ } catch {
891
+ dbReady = false;
892
+ }
893
+ }
894
+ const { bundledSkillsRoot: bundledSkillsRoot2, listBundledSkills: listBundledSkills2 } = await Promise.resolve().then(() => (init_skills(), skills_exports));
895
+ const skillsRoot = bundledSkillsRoot2();
896
+ const skills = skillsRoot ? listBundledSkills2(skillsRoot).map((s) => s.name) : [];
897
+ const report = {
898
+ version: VERSION,
899
+ backendKind,
900
+ backendTarget,
901
+ databaseInitialized: dbReady,
902
+ noteCount,
903
+ sessionCount,
904
+ domainToolCount: agent.DOMAIN_AGENT_TOOLS.length,
905
+ bundledSkills: skills
906
+ };
907
+ return emitSuccess(
908
+ env,
909
+ "wod_doctor",
910
+ report,
911
+ `[wod doctor] v${VERSION} \xB7 backend=${backendKind} (${dbReady ? "ready" : "uninitialized"}) \xB7 ${noteCount} notes \xB7 ${sessionCount} sessions \xB7 ${agent.DOMAIN_AGENT_TOOLS.length} tools \xB7 ${skills.length} skills`
912
+ );
913
+ }
914
+ const session = await openStorageSession(env);
915
+ const ctx = {
916
+ storage: session.storage,
917
+ feedTree: session.feedTree,
918
+ baseUrl: session.baseUrl
919
+ };
920
+ try {
921
+ if (noun === "note") {
922
+ if (verb === "list" || !verb) {
923
+ const out = await agent.wodNoteListTool.execute(
924
+ {
925
+ notebookId: toNotebookId(parsed.notebook),
926
+ tag: parsed.tag,
927
+ search: parsed.search,
928
+ limit: parsed.limit
929
+ },
930
+ ctx
931
+ );
932
+ return emitSuccess(
933
+ env,
934
+ agent.wodNoteListTool.name,
935
+ out,
936
+ out.notes.map((n) => `${n.id} ${(n.date ? new Date(n.date).toISOString().slice(0, 10) : "").padEnd(10)} ${n.title}`).join("\n") || "[wod note list] 0 notes"
937
+ );
938
+ }
939
+ if (verb === "get") {
940
+ const noteId = arg1 ?? parsed.noteId;
941
+ if (!noteId) throw new Error("Usage: wod note get <noteId>");
942
+ const out = await agent.wodNoteGetTool.execute({ noteId }, ctx);
943
+ return emitSuccess(
944
+ env,
945
+ agent.wodNoteGetTool.name,
946
+ out,
947
+ parsed.format === "table" ? `${out.id} ${out.title}
948
+
949
+ ${out.rawContent}` : out.rawContent
950
+ );
951
+ }
952
+ if (verb === "create" || verb === "update" || verb === "upsert") {
953
+ const noteId = verb === "update" ? arg1 ?? parsed.noteId : parsed.noteId;
954
+ const fileArg = verb === "update" ? arg2 : arg1;
955
+ let content = await readContentArg(fileArg, parsed.markdown, env.readStdin);
956
+ if (parsed.tags.length > 0 && !content.trimStart().startsWith("---")) {
957
+ content = `---
958
+ tags:
959
+ ${parsed.tags.map((t) => ` - ${t}`).join("\n")}
960
+ ---
961
+
962
+ ${content}`;
963
+ }
964
+ const out = await agent.wodNoteUpsertTool.execute(
965
+ {
966
+ noteId,
967
+ title: parsed.title,
968
+ content,
969
+ notebookId: toNotebookId(parsed.notebook),
970
+ journalDate: parsed.date,
971
+ sport: parsed.sport
972
+ },
973
+ ctx
974
+ );
975
+ return emitSuccess(
976
+ env,
977
+ agent.wodNoteUpsertTool.name,
978
+ out,
979
+ `[wod note ${verb}] ${out.noteId}${out.created ? " (created)" : " (updated)"} \u2014 ${out.blockCount} block(s)`
980
+ );
981
+ }
982
+ if (verb === "clone") {
983
+ const sourceNoteId = arg1 ?? parsed.noteId;
984
+ if (!sourceNoteId) {
985
+ throw new Error("Usage: wod note clone <sourceNoteId> [--date YYYY-MM-DD] [--notebook <slug>]");
986
+ }
987
+ const out = await agent.wodNoteCloneTool.execute(
988
+ {
989
+ sourceNoteId,
990
+ title: parsed.title,
991
+ targetNotebookId: toNotebookId(parsed.notebook),
992
+ journalDate: parsed.date
993
+ },
994
+ ctx
995
+ );
996
+ return emitSuccess(
997
+ env,
998
+ agent.wodNoteCloneTool.name,
999
+ out,
1000
+ `[wod note clone] ${sourceNoteId} \u2192 ${out.noteId}`
1001
+ );
1002
+ }
1003
+ if (verb === "delete") {
1004
+ const noteId = arg1 ?? parsed.noteId;
1005
+ if (!noteId) throw new Error("Usage: wod note delete <noteId> --yes <noteId>");
1006
+ const out = await agent.wodNoteDeleteTool.execute({ noteId, confirmId: parsed.yes }, ctx);
1007
+ return emitSuccess(
1008
+ env,
1009
+ agent.wodNoteDeleteTool.name,
1010
+ out,
1011
+ `[wod note delete] deleted=${out.deleted} note=${out.noteId}`
1012
+ );
1013
+ }
1014
+ throw new Error(`Unknown note verb "${verb}" (expected: list | get | create | update | clone | delete)`);
1015
+ }
1016
+ if (noun === "journal") {
1017
+ if (verb === "day" || !verb) {
1018
+ const date = arg1 ?? parsed.date ?? "today";
1019
+ const out = await agent.wodJournalDayTool.execute({ date }, ctx);
1020
+ return emitSuccess(
1021
+ env,
1022
+ agent.wodJournalDayTool.name,
1023
+ out,
1024
+ `[wod journal day ${out.date}] ${out.noteCount} scheduled note(s), ${out.sessionCount} session(s)`
1025
+ );
1026
+ }
1027
+ if (verb === "add") {
1028
+ const date = arg1 ?? parsed.date ?? "today";
1029
+ const sourceNoteId = parsed.sourceNoteId ?? parsed.noteId;
1030
+ if (sourceNoteId && !parsed.markdown && !arg2) {
1031
+ const cloned = await agent.wodNoteCloneTool.execute(
1032
+ {
1033
+ sourceNoteId,
1034
+ title: parsed.title,
1035
+ targetNotebookId: toNotebookId(parsed.notebook ?? "journal"),
1036
+ journalDate: date
1037
+ },
1038
+ ctx
1039
+ );
1040
+ return emitSuccess(
1041
+ env,
1042
+ agent.wodNoteCloneTool.name,
1043
+ cloned,
1044
+ `[wod journal add] cloned ${sourceNoteId} \u2192 ${cloned.noteId} on ${date}`
1045
+ );
1046
+ }
1047
+ const content = await readContentArg(arg2, parsed.markdown, env.readStdin);
1048
+ const out = await agent.wodJournalAddTool.execute(
1049
+ {
1050
+ date,
1051
+ title: parsed.title,
1052
+ content,
1053
+ sport: parsed.sport,
1054
+ notebookId: toNotebookId(parsed.notebook)
1055
+ },
1056
+ ctx
1057
+ );
1058
+ return emitSuccess(
1059
+ env,
1060
+ agent.wodJournalAddTool.name,
1061
+ out,
1062
+ `[wod journal add] scheduled note ${out.noteId} on ${out.date}`
1063
+ );
1064
+ }
1065
+ throw new Error(`Unknown journal verb "${verb}" (expected: day | add)`);
1066
+ }
1067
+ if (noun === "notebook") {
1068
+ if (verb === "list" || !verb) {
1069
+ const out = await agent.wodNotebookListTool.execute({ origin: "all" }, ctx);
1070
+ return emitSuccess(
1071
+ env,
1072
+ agent.wodNotebookListTool.name,
1073
+ out,
1074
+ out.notebooks.map((nb) => `${nb.slug.padEnd(20)} (${nb.noteCount} notes) \u2014 ${nb.name}`).join("\n") || "[wod notebook list] 0 notebooks"
1075
+ );
1076
+ }
1077
+ if (verb === "create" || verb === "save" || verb === "update") {
1078
+ const slugOrId = arg1 ?? parsed.notebook;
1079
+ const name = parsed.title ?? parsed.dbName ?? slugOrId;
1080
+ if (!name) throw new Error('Usage: wod notebook save <slug> --title "<Name>"');
1081
+ const notebookId = toNotebookId(slugOrId ?? slugifyName(name));
1082
+ const existing = notebookId ? await session.storage.readonly("notes").get(notebookId) : void 0;
1083
+ const action = verb === "create" || !existing ? "create" : "update";
1084
+ const out = await agent.wodNotebookSaveTool.execute(
1085
+ {
1086
+ action,
1087
+ notebookId,
1088
+ name,
1089
+ description: parsed.description,
1090
+ noteId: parsed.noteId
1091
+ },
1092
+ ctx
1093
+ );
1094
+ return emitSuccess(
1095
+ env,
1096
+ agent.wodNotebookSaveTool.name,
1097
+ out,
1098
+ `[wod notebook ${verb}] ${out.notebookId ?? slugOrId ?? name}`
1099
+ );
1100
+ }
1101
+ if (verb === "promote" || verb === "detach") {
1102
+ const slugOrId = arg1 ?? parsed.notebook;
1103
+ const noteId = arg2 ?? parsed.noteId;
1104
+ if (!slugOrId || !noteId) {
1105
+ throw new Error(`Usage: wod notebook ${verb} <slug> <noteId>`);
1106
+ }
1107
+ const out = await agent.wodNotebookSaveTool.execute(
1108
+ {
1109
+ action: verb,
1110
+ notebookId: toNotebookId(slugOrId),
1111
+ noteId
1112
+ },
1113
+ ctx
1114
+ );
1115
+ return emitSuccess(
1116
+ env,
1117
+ agent.wodNotebookSaveTool.name,
1118
+ out,
1119
+ `[wod notebook ${verb}] note ${out.noteId} \u2192 ${(out.notebookIds ?? []).join(", ")}`
1120
+ );
1121
+ }
1122
+ if (verb === "delete") {
1123
+ const slugOrId = arg1 ?? parsed.notebook;
1124
+ if (!slugOrId) throw new Error("Usage: wod notebook delete <slug> --yes <notebook/slug>");
1125
+ const notebookId = toNotebookId(slugOrId);
1126
+ const confirmId = parsed.yes === slugOrId ? notebookId : parsed.yes;
1127
+ const out = await agent.wodNotebookDeleteTool.execute({ notebookId, confirmId }, ctx);
1128
+ return emitSuccess(
1129
+ env,
1130
+ agent.wodNotebookDeleteTool.name,
1131
+ out,
1132
+ `[wod notebook delete] deleted ${out.notebookId}`
1133
+ );
1134
+ }
1135
+ throw new Error(`Unknown notebook verb "${verb}" (expected: list | create | save | update | promote | detach | delete)`);
1136
+ }
1137
+ if (noun === "session") {
1138
+ if (verb === "list" || !verb) {
1139
+ const out = await agent.wodSessionListTool.execute(
1140
+ {
1141
+ noteId: parsed.noteId,
1142
+ limit: parsed.limit
1143
+ },
1144
+ ctx
1145
+ );
1146
+ return emitSuccess(
1147
+ env,
1148
+ agent.wodSessionListTool.name,
1149
+ out,
1150
+ out.sessions.map(
1151
+ (s) => `${s.id} ${new Date(s.startTime).toISOString().slice(0, 10)} note=${s.noteId} completed=${s.completed}`
1152
+ ).join("\n") || "[wod session list] 0 sessions"
1153
+ );
1154
+ }
1155
+ if (verb === "get") {
1156
+ const sessionId = arg1;
1157
+ if (!sessionId) throw new Error("Usage: wod session get <sessionId>");
1158
+ const out = await agent.wodSessionGetTool.execute({ sessionId }, ctx);
1159
+ return emitSuccess(
1160
+ env,
1161
+ agent.wodSessionGetTool.name,
1162
+ out,
1163
+ `[wod session get] ${out.session.id} \u2014 ${out.eventCount} event(s), duration=${out.session.duration}ms`
1164
+ );
1165
+ }
1166
+ if (verb === "run") {
1167
+ const noteId = parsed.noteId ?? arg1;
1168
+ const source = !noteId ? await readContentArg(arg1, parsed.markdown, env.readStdin) : void 0;
1169
+ const out = await agent.wodSessionRunHeadlessTool.execute(
1170
+ {
1171
+ noteId,
1172
+ blockId: parsed.blockId,
1173
+ source,
1174
+ title: parsed.title,
1175
+ sport: parsed.sport,
1176
+ journalDate: parsed.date,
1177
+ collectibles: parsed.setPairs.length > 0 ? parseSetPairs(parsed.setPairs) : void 0
1178
+ },
1179
+ ctx
1180
+ );
1181
+ return emitSuccess(
1182
+ env,
1183
+ agent.wodSessionRunHeadlessTool.name,
1184
+ out,
1185
+ `[wod session run] session ${out.sessionId} on note ${out.noteId} (${out.eventCount} events, ${out.summaryCount} summaries)`
1186
+ );
1187
+ }
1188
+ if (verb === "delete") {
1189
+ const sessionId = arg1;
1190
+ if (!sessionId) throw new Error("Usage: wod session delete <sessionId> --yes <sessionId>");
1191
+ const out = await agent.wodSessionDeleteTool.execute({ sessionId, confirmId: parsed.yes }, ctx);
1192
+ return emitSuccess(
1193
+ env,
1194
+ agent.wodSessionDeleteTool.name,
1195
+ out,
1196
+ `[wod session delete] deleted=${out.deleted} session=${out.sessionId}`
1197
+ );
1198
+ }
1199
+ throw new Error(`Unknown session verb "${verb}" (expected: list | get | run | delete)`);
1200
+ }
1201
+ if (noun === "catalog" || noun === "tag") {
1202
+ const defaultKind = noun === "tag" ? "tag" : "effort";
1203
+ if (verb === "list" || verb === "lookup" || !verb) {
1204
+ const kind = (noun === "tag" ? "tag" : arg1) ?? defaultKind;
1205
+ const out = await agent.wodCatalogLookupTool.execute(
1206
+ {
1207
+ kind,
1208
+ search: parsed.search ?? (noun === "tag" ? arg1 : arg2),
1209
+ slug: parsed.slug,
1210
+ notebookId: toNotebookId(parsed.notebook),
1211
+ limit: parsed.limit
1212
+ },
1213
+ ctx
1214
+ );
1215
+ return emitSuccess(
1216
+ env,
1217
+ agent.wodCatalogLookupTool.name,
1218
+ out,
1219
+ `[wod ${noun} ${verb ?? "list"}] ${out.items.length} ${out.kind} item(s)`
1220
+ );
1221
+ }
1222
+ if (verb === "get") {
1223
+ const kind = noun === "tag" ? "tag" : arg1 ?? "effort";
1224
+ const slug = noun === "tag" ? arg1 : arg2;
1225
+ const out = await agent.wodCatalogLookupTool.execute({ kind, slug }, ctx);
1226
+ return emitSuccess(
1227
+ env,
1228
+ agent.wodCatalogLookupTool.name,
1229
+ out,
1230
+ JSON.stringify(out.items[0] ?? null, null, 2)
1231
+ );
1232
+ }
1233
+ if (verb === "upsert" || verb === "create") {
1234
+ const kind = noun === "tag" ? "tag" : arg1 ?? "effort";
1235
+ const label = (noun === "tag" ? arg1 : arg2) ?? parsed.title ?? parsed.slug;
1236
+ if (!label) {
1237
+ throw new Error(
1238
+ `Usage: wod ${noun} upsert ${noun === "tag" ? "<label> [--category <tagType>]" : "<effort|equipment|tag> <name>"}`
1239
+ );
1240
+ }
1241
+ const slug = parsed.slug ?? slugifyName(label);
1242
+ const out = await agent.wodCatalogUpsertTool.execute(
1243
+ {
1244
+ kind,
1245
+ slug,
1246
+ label,
1247
+ targetNotebookId: toNotebookId(parsed.notebook),
1248
+ markdown: parsed.markdown,
1249
+ category: parsed.category ?? parsed.tagType,
1250
+ aliases: parsed.aliases.length > 0 ? parsed.aliases : void 0
1251
+ },
1252
+ ctx
1253
+ );
1254
+ return emitSuccess(
1255
+ env,
1256
+ agent.wodCatalogUpsertTool.name,
1257
+ out,
1258
+ `[wod ${noun} upsert] ${out.kind} ${out.slug} (${out.ownerNoteId})`
1259
+ );
1260
+ }
1261
+ throw new Error(`Unknown ${noun} verb "${verb}" (expected: list | lookup | get | upsert)`);
1262
+ }
1263
+ if (noun === "feed") {
1264
+ const action = verb ?? "list";
1265
+ const out = await agent.wodFeedManageTool.execute(
1266
+ {
1267
+ action,
1268
+ notebookSlug: parsed.notebook,
1269
+ name: parsed.title,
1270
+ description: parsed.description
1271
+ },
1272
+ ctx
1273
+ );
1274
+ return emitSuccess(
1275
+ env,
1276
+ agent.wodFeedManageTool.name,
1277
+ out,
1278
+ `[wod feed ${action}] ok`
1279
+ );
1280
+ }
1281
+ throw new Error(`Unhandled agent command group "${noun}"`);
1282
+ } finally {
1283
+ await session.close();
1284
+ }
1285
+ } catch (err) {
1286
+ return emitError(env, err);
1287
+ }
1288
+ }
1289
+ var init_agentCommands = __esm({
1290
+ "src/cli/agentCommands.ts"() {
1291
+ init_db();
1292
+ init_nodeFeedTree();
1293
+ init_version();
1294
+ }
1295
+ });
1296
+
708
1297
  // src/seedbuild/contract.ts
709
1298
  var contract_exports = {};
710
1299
  var init_contract = __esm({
@@ -1518,6 +2107,221 @@ var init_errors = __esm({
1518
2107
  };
1519
2108
  }
1520
2109
  });
2110
+ function createWodMcpServer(options) {
2111
+ const server = new mcp_js.McpServer(
2112
+ {
2113
+ name: "wod-wiki",
2114
+ version: VERSION
2115
+ },
2116
+ {
2117
+ capabilities: {
2118
+ tools: {},
2119
+ resources: {},
2120
+ prompts: {}
2121
+ }
2122
+ }
2123
+ );
2124
+ const ctx = {
2125
+ storage: options.storage,
2126
+ feedTree: options.feedTree,
2127
+ baseUrl: options.baseUrl,
2128
+ onMutated: options.onMutated
2129
+ // Over MCP HTTP/stdio, explicit confirm="<targetId>" inside tool arguments
2130
+ // satisfies Tier 2 confirmation; when omitted, requireAgentConfirmation throws
2131
+ // an actionable error instructing the caller to pass confirm="<targetId>".
2132
+ };
2133
+ for (const spec of agent.DOMAIN_AGENT_TOOLS) {
2134
+ if (options.readonly && spec.tier !== 0) {
2135
+ continue;
2136
+ }
2137
+ server.registerTool(
2138
+ spec.name,
2139
+ {
2140
+ title: spec.title,
2141
+ description: spec.description,
2142
+ inputSchema: spec.inputSchema,
2143
+ annotations: spec.annotations
2144
+ },
2145
+ async (args) => {
2146
+ try {
2147
+ const parsed = spec.inputSchema.parse(args ?? {});
2148
+ const result = await spec.execute(parsed, ctx);
2149
+ return {
2150
+ content: [
2151
+ {
2152
+ type: "text",
2153
+ text: JSON.stringify(result, null, 2)
2154
+ }
2155
+ ],
2156
+ structuredContent: result
2157
+ };
2158
+ } catch (err) {
2159
+ const message = err instanceof Error ? err.message : String(err);
2160
+ return {
2161
+ isError: true,
2162
+ content: [
2163
+ {
2164
+ type: "text",
2165
+ text: message
2166
+ }
2167
+ ]
2168
+ };
2169
+ }
2170
+ }
2171
+ );
2172
+ }
2173
+ for (const resource of agent.AGENT_STATIC_RESOURCES) {
2174
+ server.registerResource(
2175
+ resource.name,
2176
+ resource.uri,
2177
+ {
2178
+ description: resource.description,
2179
+ mimeType: resource.mimeType
2180
+ },
2181
+ async (uri) => {
2182
+ const res = await agent.readAgentResource(uri.toString(), ctx);
2183
+ return {
2184
+ contents: [
2185
+ {
2186
+ uri: res.uri,
2187
+ mimeType: res.mimeType,
2188
+ text: res.text
2189
+ }
2190
+ ]
2191
+ };
2192
+ }
2193
+ );
2194
+ }
2195
+ for (const tmpl of agent.AGENT_RESOURCE_TEMPLATES) {
2196
+ const template = new mcp_js.ResourceTemplate(tmpl.uriTemplate, { list: void 0 });
2197
+ server.registerResource(
2198
+ tmpl.name,
2199
+ template,
2200
+ {
2201
+ description: tmpl.description,
2202
+ mimeType: tmpl.mimeType
2203
+ },
2204
+ async (uri) => {
2205
+ const res = await agent.readAgentResource(uri.toString(), ctx);
2206
+ return {
2207
+ contents: [
2208
+ {
2209
+ uri: res.uri,
2210
+ mimeType: res.mimeType,
2211
+ text: res.text
2212
+ }
2213
+ ]
2214
+ };
2215
+ }
2216
+ );
2217
+ }
2218
+ for (const prompt of agent.AGENT_PROMPTS) {
2219
+ const argsShape = {};
2220
+ for (const arg of prompt.arguments) {
2221
+ argsShape[arg.name] = arg.required ? zod.z.string().describe(arg.description) : zod.z.string().optional().describe(arg.description);
2222
+ }
2223
+ server.registerPrompt(
2224
+ prompt.name,
2225
+ {
2226
+ title: prompt.title,
2227
+ description: prompt.description,
2228
+ argsSchema: argsShape
2229
+ },
2230
+ async (args) => {
2231
+ const rendered = agent.renderAgentPrompt(prompt.name, args);
2232
+ return {
2233
+ description: rendered.description,
2234
+ messages: rendered.messages
2235
+ };
2236
+ }
2237
+ );
2238
+ }
2239
+ return server;
2240
+ }
2241
+ var init_createWodMcpServer = __esm({
2242
+ "src/mcp/createWodMcpServer.ts"() {
2243
+ init_version();
2244
+ }
2245
+ });
2246
+ function withMcpCors(response) {
2247
+ const headers = new Headers(response.headers);
2248
+ for (const [k, v] of Object.entries(MCP_CORS_HEADERS)) {
2249
+ if (!headers.has(k)) {
2250
+ headers.set(k, v);
2251
+ }
2252
+ }
2253
+ return new Response(response.body, {
2254
+ status: response.status,
2255
+ statusText: response.statusText,
2256
+ headers
2257
+ });
2258
+ }
2259
+ function normalizeAcceptForPost(request) {
2260
+ if (request.method !== "POST") return request;
2261
+ const accept = request.headers.get("accept") ?? "";
2262
+ if (accept.includes("application/json") && accept.includes("text/event-stream")) {
2263
+ return request;
2264
+ }
2265
+ const headers = new Headers(request.headers);
2266
+ headers.set("accept", "application/json, text/event-stream");
2267
+ return new Request(request, { headers });
2268
+ }
2269
+ async function handleMcpHttpRequest(request, options) {
2270
+ if (request.method === "OPTIONS") {
2271
+ return new Response(null, { status: 204, headers: MCP_CORS_HEADERS });
2272
+ }
2273
+ const expectedToken = options.authToken ?? process.env.WOD_MCP_TOKEN?.trim();
2274
+ if (expectedToken) {
2275
+ const authHeader = request.headers.get("authorization") ?? "";
2276
+ const bearer = authHeader.startsWith("Bearer ") ? authHeader.slice("Bearer ".length).trim() : "";
2277
+ if (bearer !== expectedToken) {
2278
+ return withMcpCors(
2279
+ new Response(
2280
+ JSON.stringify({
2281
+ jsonrpc: "2.0",
2282
+ error: { code: -32001, message: "Unauthorized: missing or invalid Bearer token" },
2283
+ id: null
2284
+ }),
2285
+ { status: 401, headers: { "content-type": "application/json" } }
2286
+ )
2287
+ );
2288
+ }
2289
+ }
2290
+ const storage = new sql.SqlStorage(options.db);
2291
+ const server = createWodMcpServer({
2292
+ storage,
2293
+ feedTree: options.feedTree,
2294
+ baseUrl: options.baseUrl,
2295
+ readonly: options.readonly ?? process.env.WOD_MCP_READONLY === "1"
2296
+ });
2297
+ const transport = new webStandardStreamableHttp_js.WebStandardStreamableHTTPServerTransport({
2298
+ sessionIdGenerator: void 0,
2299
+ enableJsonResponse: true
2300
+ });
2301
+ await server.connect(transport);
2302
+ try {
2303
+ const normalizedReq = normalizeAcceptForPost(request);
2304
+ const response = await transport.handleRequest(normalizedReq);
2305
+ return withMcpCors(response);
2306
+ } finally {
2307
+ await transport.close().catch(() => {
2308
+ });
2309
+ await server.close().catch(() => {
2310
+ });
2311
+ }
2312
+ }
2313
+ var MCP_CORS_HEADERS;
2314
+ var init_httpHandler = __esm({
2315
+ "src/mcp/httpHandler.ts"() {
2316
+ init_createWodMcpServer();
2317
+ MCP_CORS_HEADERS = {
2318
+ "access-control-allow-origin": "*",
2319
+ "access-control-allow-methods": "GET, POST, DELETE, OPTIONS",
2320
+ "access-control-allow-headers": "Content-Type, Accept, Authorization, Mcp-Session-Id, MCP-Protocol-Version, Last-Event-ID",
2321
+ "access-control-expose-headers": "Mcp-Session-Id, MCP-Protocol-Version"
2322
+ };
2323
+ }
2324
+ });
1521
2325
  function streamFile(path) {
1522
2326
  const bun = globalThis.Bun;
1523
2327
  if (bun?.file) return bun.file(path);
@@ -1749,10 +2553,19 @@ async function servePublishedFeed(feedTree, method, relPath) {
1749
2553
  throw err;
1750
2554
  }
1751
2555
  }
1752
- async function apiRoutes(db, feedTree, req, method, sub, url) {
2556
+ async function apiRoutes(db, feedTree, req, method, sub, url, mcpOptions) {
1753
2557
  if (sub === "/health") {
1754
2558
  return json({ ok: true, driver: db.dialect }, 200);
1755
2559
  }
2560
+ if (sub === "/mcp") {
2561
+ return handleMcpHttpRequest(req, {
2562
+ db,
2563
+ feedTree,
2564
+ baseUrl: url.origin,
2565
+ readonly: mcpOptions?.readonly,
2566
+ authToken: mcpOptions?.authToken
2567
+ });
2568
+ }
1756
2569
  if (sub === "/v1/feed/status" && method === "GET") {
1757
2570
  const storage = new sql.SqlStorage(db);
1758
2571
  const status = await wod_wiki_engine_star.checkUnpublishedFeedChanges(storage, feedTree);
@@ -1816,7 +2629,20 @@ function createHandler(db, options) {
1816
2629
  const method = request.method === "HEAD" ? "GET" : request.method;
1817
2630
  const path = url.pathname;
1818
2631
  if (path === "/api" || path.startsWith("/api/")) {
1819
- return db ? await apiRoutes(db, feedTree, request, method, path.slice("/api".length) || "/", url) : notFound();
2632
+ return db ? await apiRoutes(
2633
+ db,
2634
+ feedTree,
2635
+ request,
2636
+ request.method === "OPTIONS" ? "OPTIONS" : method,
2637
+ path.slice("/api".length) || "/",
2638
+ url,
2639
+ { readonly: options.mcpReadonly, authToken: options.mcpToken }
2640
+ ) : notFound();
2641
+ }
2642
+ if (db && path === "/.well-known/agent-capabilities.json" && method === "GET") {
2643
+ const res = await staticResponse(distRoot, method, path);
2644
+ if (res.status === 200) return res;
2645
+ return json(agent.exportAgentCapabilitiesManifest(), 200);
1820
2646
  }
1821
2647
  if (db) {
1822
2648
  const feedAsset = isPublishedFeedAssetPath(path);
@@ -1843,6 +2669,7 @@ var init_app = __esm({
1843
2669
  "src/server/app.ts"() {
1844
2670
  init_errors();
1845
2671
  init_nodeFeedTree();
2672
+ init_httpHandler();
1846
2673
  json = (value, status) => new Response(JSON.stringify(value), { status, headers: { "content-type": "application/json" } });
1847
2674
  plain = (body, status) => new Response(body, { status, headers: { "content-type": "text/plain; charset=utf-8" } });
1848
2675
  notFound = () => json({ error: "not found" }, 404);
@@ -2004,7 +2831,12 @@ async function runCliServer(mode, options, writeOut) {
2004
2831
  try {
2005
2832
  const dist = resolveDist(mode, options);
2006
2833
  const feedDir = mode === "server" && options.database?.kind === "sqlite" ? `${options.database.path}.feed` : void 0;
2007
- const handler = createHandler(db?.db ?? null, { playgroundDist: dist, feedDir });
2834
+ const handler = createHandler(db?.db ?? null, {
2835
+ playgroundDist: dist,
2836
+ feedDir,
2837
+ mcpReadonly: options.mcpReadonly === true || options.env.WOD_MCP_READONLY === "1",
2838
+ mcpToken: options.env.WOD_MCP_TOKEN?.trim()
2839
+ });
2008
2840
  server = await startHttpServer(handler, host, port);
2009
2841
  if (mode === "server") {
2010
2842
  writeOut(`wod server: http://${host}:${port} \u2014 ${dbLabel} \xB7 dist ${dist}`);
@@ -2041,6 +2873,76 @@ var init_server = __esm({
2041
2873
  init_app();
2042
2874
  }
2043
2875
  });
2876
+
2877
+ // src/cli/mcp.ts
2878
+ var mcp_exports = {};
2879
+ __export(mcp_exports, {
2880
+ runMcpStdio: () => runMcpStdio
2881
+ });
2882
+ async function runMcpStdio(options) {
2883
+ const logErr = options.writeErr ?? ((msg) => process.stderr.write(`${msg}
2884
+ `));
2885
+ let dbHandle;
2886
+ let storage;
2887
+ let feedTree;
2888
+ let baseUrl = "";
2889
+ if (options.serverUrl) {
2890
+ const trimmed = options.serverUrl.replace(/\/+$/, "");
2891
+ const apiBase = trimmed.endsWith("/api") ? trimmed : `${trimmed}/api`;
2892
+ storage = new wodWikiStorage.ApiStorage(apiBase);
2893
+ feedTree = new wod_wiki_engine_star.MemoryFeedTree();
2894
+ baseUrl = trimmed.endsWith("/api") ? trimmed.slice(0, -4) : trimmed;
2895
+ } else {
2896
+ if (!options.database) {
2897
+ logErr("[wod mcp] Error: Missing database configuration");
2898
+ return 1;
2899
+ }
2900
+ dbHandle = await openCliDb(options.database);
2901
+ storage = dbHandle.storage;
2902
+ feedTree = options.database.kind === "sqlite" ? new NodeFsFeedTree(`${options.database.path}.feed`) : new wod_wiki_engine_star.MemoryFeedTree();
2903
+ }
2904
+ const server = createWodMcpServer({
2905
+ storage,
2906
+ feedTree,
2907
+ baseUrl,
2908
+ readonly: options.readonly
2909
+ });
2910
+ const transport = new stdio_js.StdioServerTransport();
2911
+ await server.connect(transport);
2912
+ return new Promise((resolve4) => {
2913
+ let closed = false;
2914
+ const finish = async (code) => {
2915
+ if (closed) return;
2916
+ closed = true;
2917
+ await server.close().catch(() => {
2918
+ });
2919
+ if (dbHandle) {
2920
+ await dbHandle.close().catch(() => {
2921
+ });
2922
+ }
2923
+ resolve4(code);
2924
+ };
2925
+ transport.onclose = () => {
2926
+ void finish(0);
2927
+ };
2928
+ transport.onerror = (err) => {
2929
+ logErr(`[wod mcp] Transport error: ${err.message}`);
2930
+ };
2931
+ process.once("SIGINT", () => {
2932
+ void finish(0);
2933
+ });
2934
+ process.once("SIGTERM", () => {
2935
+ void finish(0);
2936
+ });
2937
+ });
2938
+ }
2939
+ var init_mcp = __esm({
2940
+ "src/cli/mcp.ts"() {
2941
+ init_db();
2942
+ init_nodeFeedTree();
2943
+ init_createWodMcpServer();
2944
+ }
2945
+ });
2044
2946
  var ParseSyntaxError = class extends Error {
2045
2947
  constructor(errors, message = "Parse error in Whiteboard Script") {
2046
2948
  const details = errors.map((e) => e.message).join("; ");
@@ -4071,7 +4973,23 @@ var VALUE_FLAGS = [
4071
4973
  ["--env-file", "envFile"],
4072
4974
  ["--host", "host"],
4073
4975
  ["--port", "port"],
4074
- ["--dist", "dist"]
4976
+ ["--dist", "dist"],
4977
+ ["--server", "serverUrl"],
4978
+ ["--note", "noteId"],
4979
+ ["--source-note", "sourceNoteId"],
4980
+ ["--block", "blockId"],
4981
+ ["--notebook", "notebook"],
4982
+ ["--date", "date"],
4983
+ ["--title", "title"],
4984
+ ["--description", "description"],
4985
+ ["--markdown", "markdown"],
4986
+ ["--search", "search"],
4987
+ ["--tag", "tag"],
4988
+ ["--slug", "slug"],
4989
+ ["--category", "category"],
4990
+ ["--type", "tagType"],
4991
+ ["--url", "url"],
4992
+ ["--feed-id", "feedId"]
4075
4993
  ];
4076
4994
  function readValueFlag(args, i, flag) {
4077
4995
  const inline = args[i].startsWith(`${flag}=`);
@@ -4088,7 +5006,10 @@ function parseCliArgs(args) {
4088
5006
  const result = {
4089
5007
  format: "json",
4090
5008
  packs: [],
4091
- sources: []
5009
+ sources: [],
5010
+ tags: [],
5011
+ aliases: [],
5012
+ setPairs: []
4092
5013
  };
4093
5014
  const valueArgs = result;
4094
5015
  let i = 0;
@@ -4196,8 +5117,50 @@ function parseCliArgs(args) {
4196
5117
  const v = Number(arg.slice("--seed-version=".length));
4197
5118
  if (Number.isSafeInteger(v) && v >= 0) result.seedVersion = v;
4198
5119
  i++;
5120
+ } else if (arg === "--json") {
5121
+ result.json = true;
5122
+ result.format = "json";
5123
+ i++;
5124
+ } else if (arg === "--no-save") {
5125
+ result.noSave = true;
5126
+ i++;
5127
+ } else if (arg === "--mcp-readonly" || arg === "--readonly") {
5128
+ result.mcpReadonly = true;
5129
+ i++;
5130
+ } else if (arg === "--validate-only") {
5131
+ result.validateOnly = true;
5132
+ i++;
5133
+ } else if (arg === "--limit") {
5134
+ const v = Number(args[++i]);
5135
+ if (Number.isSafeInteger(v) && v > 0) result.limit = v;
5136
+ i++;
5137
+ } else if (arg.startsWith("--limit=")) {
5138
+ const v = Number(arg.slice("--limit=".length));
5139
+ if (Number.isSafeInteger(v) && v > 0) result.limit = v;
5140
+ i++;
5141
+ } else if (arg === "--tags") {
5142
+ const raw = args[++i] ?? "";
5143
+ result.tags.push(...raw.split(",").map((t) => t.trim()).filter(Boolean));
5144
+ i++;
5145
+ } else if (arg.startsWith("--tags=")) {
5146
+ result.tags.push(...arg.slice("--tags=".length).split(",").map((t) => t.trim()).filter(Boolean));
5147
+ i++;
5148
+ } else if (arg === "--alias") {
5149
+ const raw = args[++i];
5150
+ if (raw) result.aliases.push(raw);
5151
+ i++;
5152
+ } else if (arg.startsWith("--alias=")) {
5153
+ result.aliases.push(arg.slice("--alias=".length));
5154
+ i++;
5155
+ } else if (arg === "--set") {
5156
+ const raw = args[++i];
5157
+ if (raw) result.setPairs.push(raw);
5158
+ i++;
5159
+ } else if (arg.startsWith("--set=")) {
5160
+ result.setPairs.push(arg.slice("--set=".length));
5161
+ i++;
4199
5162
  } else if (!result.subcommand) {
4200
- if (arg === "parse" || arg === "run" || arg === "query" || arg === "download" || arg === "export" || arg === "import" || arg === "publish" || arg === "build" || arg === "seed" || arg === "reset" || arg === "init" || arg === "db" || arg === "server" || arg === "serve" || arg === "playground" || arg === "init-feed" || arg === "skills" || arg === "help" || arg === "version") {
5163
+ if (arg === "parse" || arg === "run" || arg === "query" || arg === "download" || arg === "export" || arg === "import" || arg === "publish" || arg === "build" || arg === "seed" || arg === "reset" || arg === "init" || arg === "db" || arg === "server" || arg === "serve" || arg === "playground" || arg === "init-feed" || arg === "skills" || arg === "note" || arg === "journal" || arg === "notebook" || arg === "session" || arg === "catalog" || arg === "tag" || arg === "feed" || arg === "mcp" || arg === "tools" || arg === "doctor" || arg === "help" || arg === "version") {
4201
5164
  result.subcommand = arg;
4202
5165
  } else {
4203
5166
  result.target = arg;
@@ -4209,6 +5172,9 @@ function parseCliArgs(args) {
4209
5172
  } else if (!result.target2) {
4210
5173
  result.target2 = arg;
4211
5174
  i++;
5175
+ } else if (!result.target3) {
5176
+ result.target3 = arg;
5177
+ i++;
4212
5178
  } else {
4213
5179
  i++;
4214
5180
  }
@@ -4319,9 +5285,22 @@ DB OPTIONS (for 'wod db'):
4319
5285
  actions; credentials are never printed to stdout
4320
5286
 
4321
5287
  wod server [options]
4322
- Serve the app (HTTP API + packaged frontend; alias: serve)
5288
+ Serve the app (HTTP API + /api/mcp + packaged frontend; alias: serve)
4323
5289
  wod playground [options]
4324
- Serve the local playground (browser IndexedDB build)
5290
+ Serve the local playground (browser IndexedDB build + WebMCP)
5291
+ wod mcp [--readonly] [--server <url>]
5292
+ Start the official MCP server over stdio for Claude/Cursor/Codex
5293
+
5294
+ AGENT NOUN-VERB COMMANDS (all support --json and --server <url>):
5295
+ wod note <list|get|create|update|clone|delete> [args]
5296
+ wod journal <day|add> [date] [options]
5297
+ wod notebook <list|save|delete> [slug] [options]
5298
+ wod session <list|get|run|delete> [id] [options]
5299
+ wod catalog <lookup|get|upsert> [effort|equipment|tag|tag-type] [name]
5300
+ wod tag <list|upsert> [label] [--type <tagType>]
5301
+ wod feed <list|status|subscribe|sync|unsubscribe|publish> [options]
5302
+ wod tools <list|manifest> [--json]
5303
+ wod doctor [--json]
4325
5304
 
4326
5305
  SUBCOMMANDS:
4327
5306
  parse <file | -> Parse Whiteboard Script, create a note in the database
@@ -4452,6 +5431,7 @@ EXIT CODES:
4452
5431
  1 - General / Runtime error
4453
5432
  2 - Parse / Syntax error
4454
5433
  3 - Language Pack load error
5434
+ 4 - Destructive confirmation required (pass --yes <targetId>)
4455
5435
  `;
4456
5436
  }
4457
5437
  function printUsage(writer) {
@@ -4585,22 +5565,32 @@ async function cliMain(argv = process.argv.slice(2), io = {}) {
4585
5565
  }
4586
5566
  const noteSource = cliNoteSource(source, parsed.target, parsed.sport);
4587
5567
  const ir = runParse(source, { sport: parsed.sport, sourceLabel: `cli:wod parse ${parsed.target}` });
4588
- const identity = wod_wiki_engine_star.extractNoteIdentity(source);
4589
- const tags = wod_wiki_engine_star.extractTypedTags(source);
4590
- const db = await openCliDb(cliDb());
4591
- try {
4592
- const persisted = await persistNote(db, {
4593
- source: noteSource,
4594
- sourceLabel: parsed.target,
4595
- noteId: identity?.noteId,
4596
- title: identity?.title,
4597
- tags
4598
- });
4599
- writeOut(
4600
- `[wod parse] note ${persisted.noteId}${persisted.created ? "" : " (updated)"} \u2014 ${persisted.blocks} blocks, ${persisted.efforts} efforts${persisted.tags > 0 ? `, ${persisted.tags} tags` : ""} \u2192 ${db.path}`
4601
- );
4602
- } finally {
4603
- await db.close();
5568
+ if (!parsed.noSave) {
5569
+ const identity = wod_wiki_engine_star.extractNoteIdentity(source);
5570
+ const tags = wod_wiki_engine_star.extractTypedTags(source);
5571
+ const db = await openCliDb(cliDb());
5572
+ try {
5573
+ const persisted = await persistNote(db, {
5574
+ source: noteSource,
5575
+ sourceLabel: parsed.target,
5576
+ noteId: identity?.noteId,
5577
+ title: identity?.title,
5578
+ tags
5579
+ });
5580
+ if (!parsed.json) {
5581
+ writeOut(
5582
+ `[wod parse] note ${persisted.noteId}${persisted.created ? "" : " (updated)"} \u2014 ${persisted.blocks} blocks, ${persisted.efforts} efforts${persisted.tags > 0 ? `, ${persisted.tags} tags` : ""} \u2192 ${db.path}`
5583
+ );
5584
+ } else if (!parsed.output) {
5585
+ deliverOutput(JSON.stringify({ ok: true, persisted, ir }, null, 2));
5586
+ }
5587
+ } finally {
5588
+ await db.close();
5589
+ }
5590
+ } else if (parsed.json && !parsed.output) {
5591
+ deliverOutput(formatParseOutput(ir, "json", true));
5592
+ } else if (!parsed.output) {
5593
+ writeOut(`[wod parse] valid Whiteboard Script (--no-save)`);
4604
5594
  }
4605
5595
  if (parsed.output) {
4606
5596
  const pretty = Boolean(process.stdout.isTTY);
@@ -4610,8 +5600,18 @@ async function cliMain(argv = process.argv.slice(2), io = {}) {
4610
5600
  return 0;
4611
5601
  }
4612
5602
  if (parsed.subcommand === "run") {
5603
+ if (parsed.noteId && !parsed.target) {
5604
+ const { runAgentNounVerbCommand: runAgentNounVerbCommand2 } = await Promise.resolve().then(() => (init_agentCommands(), agentCommands_exports));
5605
+ return runAgentNounVerbCommand2({
5606
+ parsed: { ...parsed, subcommand: "session", target: "run", target2: parsed.noteId },
5607
+ resolveDbConfig: cliDb,
5608
+ readStdin: getStdin,
5609
+ writeOut,
5610
+ writeErr
5611
+ });
5612
+ }
4613
5613
  if (!parsed.target) {
4614
- writeErr('[wod run] Error: Missing input file or "-" for stdin');
5614
+ writeErr('[wod run] Error: Missing input file, "-" for stdin, or --note <noteId>');
4615
5615
  return 1;
4616
5616
  }
4617
5617
  let source;
@@ -4667,6 +5667,18 @@ async function cliMain(argv = process.argv.slice(2), io = {}) {
4667
5667
  writeErr("[wod query] Error: Missing WQL query argument");
4668
5668
  return 1;
4669
5669
  }
5670
+ if (parsed.validateOnly) {
5671
+ const { wodValidateWqlTool } = await import('@bitcobblers/wod-wiki-engine/agent');
5672
+ const validation = await wodValidateWqlTool.execute({ query: parsed.target }, {
5673
+ storage: void 0
5674
+ });
5675
+ if (parsed.json || parsed.format === "json") {
5676
+ deliverOutput(JSON.stringify(validation, null, 2));
5677
+ } else {
5678
+ writeOut(validation.valid ? `[wod query] valid (${validation.family ?? "wql"})` : `[wod query] invalid: ${validation.error}`);
5679
+ }
5680
+ return validation.valid ? 0 : 2;
5681
+ }
4670
5682
  const useDb = !parsed.corpus && !parsed.stdinLog && !parsed.stdinFacts;
4671
5683
  let stdinLogContent;
4672
5684
  let stdinFactsContent;
@@ -4994,10 +6006,20 @@ async function cliMain(argv = process.argv.slice(2), io = {}) {
4994
6006
  );
4995
6007
  return 1;
4996
6008
  }
6009
+ if (parsed.yes !== void 0 && parsed.yes !== "RESET") {
6010
+ writeErr("[wod reset] Invalid --yes value (expected: --yes RESET)");
6011
+ return 4;
6012
+ }
4997
6013
  const target = config.path;
4998
6014
  if (nodeFs().existsSync(target)) {
4999
6015
  nodeFs().unlinkSync(target);
5000
- writeOut(`[wod reset] removed ${target}`);
6016
+ if (parsed.json) {
6017
+ writeOut(JSON.stringify({ ok: true, removed: true, path: target }, null, 2));
6018
+ } else {
6019
+ writeOut(`[wod reset] removed ${target}`);
6020
+ }
6021
+ } else if (parsed.json) {
6022
+ writeOut(JSON.stringify({ ok: true, removed: false, path: target }, null, 2));
5001
6023
  } else {
5002
6024
  writeOut(`[wod reset] nothing to reset \u2014 ${target} does not exist`);
5003
6025
  }
@@ -5042,9 +6064,29 @@ async function cliMain(argv = process.argv.slice(2), io = {}) {
5042
6064
  if (parsed.host !== void 0) options.host = parsed.host;
5043
6065
  if (parsed.port !== void 0) options.port = parsed.port;
5044
6066
  if (parsed.dist !== void 0) options.dist = parsed.dist;
6067
+ if (parsed.mcpReadonly === true) options.mcpReadonly = true;
5045
6068
  await runCliServer2(mode, options, writeOut);
5046
6069
  return 0;
5047
6070
  }
6071
+ if (parsed.subcommand === "mcp") {
6072
+ const { runMcpStdio: runMcpStdio2 } = await Promise.resolve().then(() => (init_mcp(), mcp_exports));
6073
+ return runMcpStdio2({
6074
+ database: parsed.serverUrl ? void 0 : cliDb(),
6075
+ serverUrl: parsed.serverUrl,
6076
+ readonly: parsed.mcpReadonly === true || cliEnv().WOD_MCP_READONLY === "1",
6077
+ writeErr
6078
+ });
6079
+ }
6080
+ if (parsed.subcommand === "note" || parsed.subcommand === "journal" || parsed.subcommand === "notebook" || parsed.subcommand === "session" || parsed.subcommand === "catalog" || parsed.subcommand === "tag" || parsed.subcommand === "feed" || parsed.subcommand === "tools" || parsed.subcommand === "doctor") {
6081
+ const { runAgentNounVerbCommand: runAgentNounVerbCommand2 } = await Promise.resolve().then(() => (init_agentCommands(), agentCommands_exports));
6082
+ return runAgentNounVerbCommand2({
6083
+ parsed,
6084
+ resolveDbConfig: cliDb,
6085
+ readStdin: getStdin,
6086
+ writeOut,
6087
+ writeErr
6088
+ });
6089
+ }
5048
6090
  writeErr(`[wod] Unknown subcommand "${parsed.subcommand}"`);
5049
6091
  return 1;
5050
6092
  } catch (error) {
@@ -5064,14 +6106,18 @@ async function cliMain(argv = process.argv.slice(2), io = {}) {
5064
6106
  // src/index.ts
5065
6107
  init_db();
5066
6108
  init_server();
6109
+ init_createWodMcpServer();
6110
+ init_httpHandler();
5067
6111
 
5068
6112
  exports.PackLoadError = PackLoadError;
5069
6113
  exports.ParseSyntaxError = ParseSyntaxError;
5070
6114
  exports.WqlSyntaxError = WqlSyntaxError;
5071
6115
  exports.cliMain = cliMain;
6116
+ exports.createWodMcpServer = createWodMcpServer;
5072
6117
  exports.formatExecutionOutput = formatExecutionOutput;
5073
6118
  exports.formatParseOutput = formatParseOutput;
5074
6119
  exports.formatQueryOutput = formatQueryOutput;
6120
+ exports.handleMcpHttpRequest = handleMcpHttpRequest;
5075
6121
  exports.loadCliEnvironment = loadCliEnvironment;
5076
6122
  exports.loadLanguagePack = loadLanguagePack;
5077
6123
  exports.loadQueryData = loadQueryData;