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