@slope-dev/slope 1.5.1

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 (395) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +243 -0
  3. package/dist/cli/commands/auto-card.d.ts +2 -0
  4. package/dist/cli/commands/auto-card.d.ts.map +1 -0
  5. package/dist/cli/commands/auto-card.js +267 -0
  6. package/dist/cli/commands/auto-card.js.map +1 -0
  7. package/dist/cli/commands/briefing.d.ts +2 -0
  8. package/dist/cli/commands/briefing.d.ts.map +1 -0
  9. package/dist/cli/commands/briefing.js +133 -0
  10. package/dist/cli/commands/briefing.js.map +1 -0
  11. package/dist/cli/commands/card.d.ts +2 -0
  12. package/dist/cli/commands/card.d.ts.map +1 -0
  13. package/dist/cli/commands/card.js +144 -0
  14. package/dist/cli/commands/card.js.map +1 -0
  15. package/dist/cli/commands/claim.d.ts +2 -0
  16. package/dist/cli/commands/claim.d.ts.map +1 -0
  17. package/dist/cli/commands/claim.js +99 -0
  18. package/dist/cli/commands/claim.js.map +1 -0
  19. package/dist/cli/commands/classify.d.ts +2 -0
  20. package/dist/cli/commands/classify.d.ts.map +1 -0
  21. package/dist/cli/commands/classify.js +70 -0
  22. package/dist/cli/commands/classify.js.map +1 -0
  23. package/dist/cli/commands/dashboard.d.ts +4 -0
  24. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  25. package/dist/cli/commands/dashboard.js +156 -0
  26. package/dist/cli/commands/dashboard.js.map +1 -0
  27. package/dist/cli/commands/distill.d.ts +2 -0
  28. package/dist/cli/commands/distill.d.ts.map +1 -0
  29. package/dist/cli/commands/distill.js +91 -0
  30. package/dist/cli/commands/distill.js.map +1 -0
  31. package/dist/cli/commands/escalate.d.ts +2 -0
  32. package/dist/cli/commands/escalate.d.ts.map +1 -0
  33. package/dist/cli/commands/escalate.js +136 -0
  34. package/dist/cli/commands/escalate.js.map +1 -0
  35. package/dist/cli/commands/extract.d.ts +2 -0
  36. package/dist/cli/commands/extract.d.ts.map +1 -0
  37. package/dist/cli/commands/extract.js +147 -0
  38. package/dist/cli/commands/extract.js.map +1 -0
  39. package/dist/cli/commands/flows.d.ts +2 -0
  40. package/dist/cli/commands/flows.d.ts.map +1 -0
  41. package/dist/cli/commands/flows.js +156 -0
  42. package/dist/cli/commands/flows.js.map +1 -0
  43. package/dist/cli/commands/guard.d.ts +15 -0
  44. package/dist/cli/commands/guard.d.ts.map +1 -0
  45. package/dist/cli/commands/guard.js +207 -0
  46. package/dist/cli/commands/guard.js.map +1 -0
  47. package/dist/cli/commands/hook.d.ts +2 -0
  48. package/dist/cli/commands/hook.d.ts.map +1 -0
  49. package/dist/cli/commands/hook.js +299 -0
  50. package/dist/cli/commands/hook.js.map +1 -0
  51. package/dist/cli/commands/init.d.ts +6 -0
  52. package/dist/cli/commands/init.d.ts.map +1 -0
  53. package/dist/cli/commands/init.js +421 -0
  54. package/dist/cli/commands/init.js.map +1 -0
  55. package/dist/cli/commands/map.d.ts +10 -0
  56. package/dist/cli/commands/map.d.ts.map +1 -0
  57. package/dist/cli/commands/map.js +591 -0
  58. package/dist/cli/commands/map.js.map +1 -0
  59. package/dist/cli/commands/next.d.ts +2 -0
  60. package/dist/cli/commands/next.d.ts.map +1 -0
  61. package/dist/cli/commands/next.js +28 -0
  62. package/dist/cli/commands/next.js.map +1 -0
  63. package/dist/cli/commands/plan.d.ts +2 -0
  64. package/dist/cli/commands/plan.d.ts.map +1 -0
  65. package/dist/cli/commands/plan.js +54 -0
  66. package/dist/cli/commands/plan.js.map +1 -0
  67. package/dist/cli/commands/plugin.d.ts +2 -0
  68. package/dist/cli/commands/plugin.d.ts.map +1 -0
  69. package/dist/cli/commands/plugin.js +118 -0
  70. package/dist/cli/commands/plugin.js.map +1 -0
  71. package/dist/cli/commands/release.d.ts +2 -0
  72. package/dist/cli/commands/release.d.ts.map +1 -0
  73. package/dist/cli/commands/release.js +64 -0
  74. package/dist/cli/commands/release.js.map +1 -0
  75. package/dist/cli/commands/report.d.ts +2 -0
  76. package/dist/cli/commands/report.d.ts.map +1 -0
  77. package/dist/cli/commands/report.js +68 -0
  78. package/dist/cli/commands/report.js.map +1 -0
  79. package/dist/cli/commands/review-state.d.ts +11 -0
  80. package/dist/cli/commands/review-state.d.ts.map +1 -0
  81. package/dist/cli/commands/review-state.js +193 -0
  82. package/dist/cli/commands/review-state.js.map +1 -0
  83. package/dist/cli/commands/review.d.ts +2 -0
  84. package/dist/cli/commands/review.d.ts.map +1 -0
  85. package/dist/cli/commands/review.js +53 -0
  86. package/dist/cli/commands/review.js.map +1 -0
  87. package/dist/cli/commands/roadmap.d.ts +2 -0
  88. package/dist/cli/commands/roadmap.d.ts.map +1 -0
  89. package/dist/cli/commands/roadmap.js +283 -0
  90. package/dist/cli/commands/roadmap.js.map +1 -0
  91. package/dist/cli/commands/session.d.ts +2 -0
  92. package/dist/cli/commands/session.d.ts.map +1 -0
  93. package/dist/cli/commands/session.js +232 -0
  94. package/dist/cli/commands/session.js.map +1 -0
  95. package/dist/cli/commands/standup.d.ts +2 -0
  96. package/dist/cli/commands/standup.d.ts.map +1 -0
  97. package/dist/cli/commands/standup.js +117 -0
  98. package/dist/cli/commands/standup.js.map +1 -0
  99. package/dist/cli/commands/status.d.ts +2 -0
  100. package/dist/cli/commands/status.d.ts.map +1 -0
  101. package/dist/cli/commands/status.js +148 -0
  102. package/dist/cli/commands/status.js.map +1 -0
  103. package/dist/cli/commands/tournament.d.ts +2 -0
  104. package/dist/cli/commands/tournament.d.ts.map +1 -0
  105. package/dist/cli/commands/tournament.js +60 -0
  106. package/dist/cli/commands/tournament.js.map +1 -0
  107. package/dist/cli/commands/validate.d.ts +2 -0
  108. package/dist/cli/commands/validate.d.ts.map +1 -0
  109. package/dist/cli/commands/validate.js +74 -0
  110. package/dist/cli/commands/validate.js.map +1 -0
  111. package/dist/cli/config.d.ts +2 -0
  112. package/dist/cli/config.d.ts.map +1 -0
  113. package/dist/cli/config.js +2 -0
  114. package/dist/cli/config.js.map +1 -0
  115. package/dist/cli/guards/commit-nudge.d.ts +7 -0
  116. package/dist/cli/guards/commit-nudge.d.ts.map +1 -0
  117. package/dist/cli/guards/commit-nudge.js +50 -0
  118. package/dist/cli/guards/commit-nudge.js.map +1 -0
  119. package/dist/cli/guards/compaction.d.ts +8 -0
  120. package/dist/cli/guards/compaction.d.ts.map +1 -0
  121. package/dist/cli/guards/compaction.js +79 -0
  122. package/dist/cli/guards/compaction.js.map +1 -0
  123. package/dist/cli/guards/explore.d.ts +8 -0
  124. package/dist/cli/guards/explore.d.ts.map +1 -0
  125. package/dist/cli/guards/explore.js +78 -0
  126. package/dist/cli/guards/explore.js.map +1 -0
  127. package/dist/cli/guards/hazard.d.ts +7 -0
  128. package/dist/cli/guards/hazard.d.ts.map +1 -0
  129. package/dist/cli/guards/hazard.js +43 -0
  130. package/dist/cli/guards/hazard.js.map +1 -0
  131. package/dist/cli/guards/next-action.d.ts +28 -0
  132. package/dist/cli/guards/next-action.d.ts.map +1 -0
  133. package/dist/cli/guards/next-action.js +196 -0
  134. package/dist/cli/guards/next-action.js.map +1 -0
  135. package/dist/cli/guards/push-nudge.d.ts +7 -0
  136. package/dist/cli/guards/push-nudge.d.ts.map +1 -0
  137. package/dist/cli/guards/push-nudge.js +53 -0
  138. package/dist/cli/guards/push-nudge.js.map +1 -0
  139. package/dist/cli/guards/review-tier.d.ts +7 -0
  140. package/dist/cli/guards/review-tier.d.ts.map +1 -0
  141. package/dist/cli/guards/review-tier.js +108 -0
  142. package/dist/cli/guards/review-tier.js.map +1 -0
  143. package/dist/cli/guards/scope-drift.d.ts +7 -0
  144. package/dist/cli/guards/scope-drift.d.ts.map +1 -0
  145. package/dist/cli/guards/scope-drift.js +47 -0
  146. package/dist/cli/guards/scope-drift.js.map +1 -0
  147. package/dist/cli/guards/stop-check.d.ts +7 -0
  148. package/dist/cli/guards/stop-check.d.ts.map +1 -0
  149. package/dist/cli/guards/stop-check.js +34 -0
  150. package/dist/cli/guards/stop-check.js.map +1 -0
  151. package/dist/cli/guards/subagent-gate.d.ts +7 -0
  152. package/dist/cli/guards/subagent-gate.d.ts.map +1 -0
  153. package/dist/cli/guards/subagent-gate.js +39 -0
  154. package/dist/cli/guards/subagent-gate.js.map +1 -0
  155. package/dist/cli/guards/version-check.d.ts +8 -0
  156. package/dist/cli/guards/version-check.d.ts.map +1 -0
  157. package/dist/cli/guards/version-check.js +49 -0
  158. package/dist/cli/guards/version-check.js.map +1 -0
  159. package/dist/cli/guards/workflow-gate.d.ts +7 -0
  160. package/dist/cli/guards/workflow-gate.d.ts.map +1 -0
  161. package/dist/cli/guards/workflow-gate.js +31 -0
  162. package/dist/cli/guards/workflow-gate.js.map +1 -0
  163. package/dist/cli/hooks-config.d.ts +9 -0
  164. package/dist/cli/hooks-config.d.ts.map +1 -0
  165. package/dist/cli/hooks-config.js +21 -0
  166. package/dist/cli/hooks-config.js.map +1 -0
  167. package/dist/cli/index.d.ts +19 -0
  168. package/dist/cli/index.d.ts.map +1 -0
  169. package/dist/cli/index.js +282 -0
  170. package/dist/cli/index.js.map +1 -0
  171. package/dist/cli/loader.d.ts +2 -0
  172. package/dist/cli/loader.d.ts.map +1 -0
  173. package/dist/cli/loader.js +2 -0
  174. package/dist/cli/loader.js.map +1 -0
  175. package/dist/cli/metaphor.d.ts +6 -0
  176. package/dist/cli/metaphor.d.ts.map +1 -0
  177. package/dist/cli/metaphor.js +26 -0
  178. package/dist/cli/metaphor.js.map +1 -0
  179. package/dist/cli/registries/api-registry.d.ts +11 -0
  180. package/dist/cli/registries/api-registry.d.ts.map +1 -0
  181. package/dist/cli/registries/api-registry.js +42 -0
  182. package/dist/cli/registries/api-registry.js.map +1 -0
  183. package/dist/cli/registries/file-registry.d.ts +13 -0
  184. package/dist/cli/registries/file-registry.d.ts.map +1 -0
  185. package/dist/cli/registries/file-registry.js +55 -0
  186. package/dist/cli/registries/file-registry.js.map +1 -0
  187. package/dist/cli/registries/index.d.ts +7 -0
  188. package/dist/cli/registries/index.d.ts.map +1 -0
  189. package/dist/cli/registries/index.js +20 -0
  190. package/dist/cli/registries/index.js.map +1 -0
  191. package/dist/cli/store.d.ts +3 -0
  192. package/dist/cli/store.d.ts.map +1 -0
  193. package/dist/cli/store.js +13 -0
  194. package/dist/cli/store.js.map +1 -0
  195. package/dist/cli/template-generator.d.ts +15 -0
  196. package/dist/cli/template-generator.d.ts.map +1 -0
  197. package/dist/cli/template-generator.js +562 -0
  198. package/dist/cli/template-generator.js.map +1 -0
  199. package/dist/core/advisor.d.ts +63 -0
  200. package/dist/core/advisor.d.ts.map +1 -0
  201. package/dist/core/advisor.js +395 -0
  202. package/dist/core/advisor.js.map +1 -0
  203. package/dist/core/briefing.d.ts +103 -0
  204. package/dist/core/briefing.d.ts.map +1 -0
  205. package/dist/core/briefing.js +380 -0
  206. package/dist/core/briefing.js.map +1 -0
  207. package/dist/core/builder.d.ts +70 -0
  208. package/dist/core/builder.d.ts.map +1 -0
  209. package/dist/core/builder.js +175 -0
  210. package/dist/core/builder.js.map +1 -0
  211. package/dist/core/ci-signals.d.ts +10 -0
  212. package/dist/core/ci-signals.d.ts.map +1 -0
  213. package/dist/core/ci-signals.js +145 -0
  214. package/dist/core/ci-signals.js.map +1 -0
  215. package/dist/core/config.d.ts +48 -0
  216. package/dist/core/config.d.ts.map +1 -0
  217. package/dist/core/config.js +42 -0
  218. package/dist/core/config.js.map +1 -0
  219. package/dist/core/constants.d.ts +14 -0
  220. package/dist/core/constants.d.ts.map +1 -0
  221. package/dist/core/constants.js +44 -0
  222. package/dist/core/constants.js.map +1 -0
  223. package/dist/core/dashboard.d.ts +40 -0
  224. package/dist/core/dashboard.d.ts.map +1 -0
  225. package/dist/core/dashboard.js +413 -0
  226. package/dist/core/dashboard.js.map +1 -0
  227. package/dist/core/dispersion.d.ts +12 -0
  228. package/dist/core/dispersion.d.ts.map +1 -0
  229. package/dist/core/dispersion.js +164 -0
  230. package/dist/core/dispersion.js.map +1 -0
  231. package/dist/core/escalation.d.ts +52 -0
  232. package/dist/core/escalation.d.ts.map +1 -0
  233. package/dist/core/escalation.js +105 -0
  234. package/dist/core/escalation.js.map +1 -0
  235. package/dist/core/flows.d.ts +44 -0
  236. package/dist/core/flows.d.ts.map +1 -0
  237. package/dist/core/flows.js +123 -0
  238. package/dist/core/flows.js.map +1 -0
  239. package/dist/core/formatter.d.ts +23 -0
  240. package/dist/core/formatter.d.ts.map +1 -0
  241. package/dist/core/formatter.js +301 -0
  242. package/dist/core/formatter.js.map +1 -0
  243. package/dist/core/guard.d.ts +124 -0
  244. package/dist/core/guard.d.ts.map +1 -0
  245. package/dist/core/guard.js +185 -0
  246. package/dist/core/guard.js.map +1 -0
  247. package/dist/core/handicap.d.ts +22 -0
  248. package/dist/core/handicap.d.ts.map +1 -0
  249. package/dist/core/handicap.js +111 -0
  250. package/dist/core/handicap.js.map +1 -0
  251. package/dist/core/index.d.ts +55 -0
  252. package/dist/core/index.d.ts.map +1 -0
  253. package/dist/core/index.js +62 -0
  254. package/dist/core/index.js.map +1 -0
  255. package/dist/core/leaderboard.d.ts +32 -0
  256. package/dist/core/leaderboard.d.ts.map +1 -0
  257. package/dist/core/leaderboard.js +98 -0
  258. package/dist/core/leaderboard.js.map +1 -0
  259. package/dist/core/loader.d.ts +17 -0
  260. package/dist/core/loader.d.ts.map +1 -0
  261. package/dist/core/loader.js +68 -0
  262. package/dist/core/loader.js.map +1 -0
  263. package/dist/core/metaphor.d.ts +73 -0
  264. package/dist/core/metaphor.d.ts.map +1 -0
  265. package/dist/core/metaphor.js +73 -0
  266. package/dist/core/metaphor.js.map +1 -0
  267. package/dist/core/metaphors/baseball.d.ts +3 -0
  268. package/dist/core/metaphors/baseball.d.ts.map +1 -0
  269. package/dist/core/metaphors/baseball.js +89 -0
  270. package/dist/core/metaphors/baseball.js.map +1 -0
  271. package/dist/core/metaphors/dnd.d.ts +3 -0
  272. package/dist/core/metaphors/dnd.d.ts.map +1 -0
  273. package/dist/core/metaphors/dnd.js +89 -0
  274. package/dist/core/metaphors/dnd.js.map +1 -0
  275. package/dist/core/metaphors/gaming.d.ts +3 -0
  276. package/dist/core/metaphors/gaming.d.ts.map +1 -0
  277. package/dist/core/metaphors/gaming.js +89 -0
  278. package/dist/core/metaphors/gaming.js.map +1 -0
  279. package/dist/core/metaphors/golf.d.ts +3 -0
  280. package/dist/core/metaphors/golf.d.ts.map +1 -0
  281. package/dist/core/metaphors/golf.js +89 -0
  282. package/dist/core/metaphors/golf.js.map +1 -0
  283. package/dist/core/metaphors/index.d.ts +8 -0
  284. package/dist/core/metaphors/index.d.ts.map +1 -0
  285. package/dist/core/metaphors/index.js +17 -0
  286. package/dist/core/metaphors/index.js.map +1 -0
  287. package/dist/core/metaphors/matrix.d.ts +3 -0
  288. package/dist/core/metaphors/matrix.d.ts.map +1 -0
  289. package/dist/core/metaphors/matrix.js +89 -0
  290. package/dist/core/metaphors/matrix.js.map +1 -0
  291. package/dist/core/metaphors/tennis.d.ts +3 -0
  292. package/dist/core/metaphors/tennis.d.ts.map +1 -0
  293. package/dist/core/metaphors/tennis.js +89 -0
  294. package/dist/core/metaphors/tennis.js.map +1 -0
  295. package/dist/core/pipeline.d.ts +39 -0
  296. package/dist/core/pipeline.d.ts.map +1 -0
  297. package/dist/core/pipeline.js +158 -0
  298. package/dist/core/pipeline.js.map +1 -0
  299. package/dist/core/player.d.ts +51 -0
  300. package/dist/core/player.d.ts.map +1 -0
  301. package/dist/core/player.js +101 -0
  302. package/dist/core/player.js.map +1 -0
  303. package/dist/core/plugins.d.ts +33 -0
  304. package/dist/core/plugins.d.ts.map +1 -0
  305. package/dist/core/plugins.js +176 -0
  306. package/dist/core/plugins.js.map +1 -0
  307. package/dist/core/pr-signals.d.ts +23 -0
  308. package/dist/core/pr-signals.d.ts.map +1 -0
  309. package/dist/core/pr-signals.js +178 -0
  310. package/dist/core/pr-signals.js.map +1 -0
  311. package/dist/core/registry.d.ts +20 -0
  312. package/dist/core/registry.d.ts.map +1 -0
  313. package/dist/core/registry.js +62 -0
  314. package/dist/core/registry.js.map +1 -0
  315. package/dist/core/report.d.ts +50 -0
  316. package/dist/core/report.d.ts.map +1 -0
  317. package/dist/core/report.js +392 -0
  318. package/dist/core/report.js.map +1 -0
  319. package/dist/core/roadmap.d.ts +74 -0
  320. package/dist/core/roadmap.d.ts.map +1 -0
  321. package/dist/core/roadmap.js +389 -0
  322. package/dist/core/roadmap.js.map +1 -0
  323. package/dist/core/roles.d.ts +23 -0
  324. package/dist/core/roles.d.ts.map +1 -0
  325. package/dist/core/roles.js +107 -0
  326. package/dist/core/roles.js.map +1 -0
  327. package/dist/core/standup.d.ts +44 -0
  328. package/dist/core/standup.d.ts.map +1 -0
  329. package/dist/core/standup.js +164 -0
  330. package/dist/core/standup.js.map +1 -0
  331. package/dist/core/store.d.ts +43 -0
  332. package/dist/core/store.d.ts.map +1 -0
  333. package/dist/core/store.js +11 -0
  334. package/dist/core/store.js.map +1 -0
  335. package/dist/core/team-handicap.d.ts +59 -0
  336. package/dist/core/team-handicap.d.ts.map +1 -0
  337. package/dist/core/team-handicap.js +227 -0
  338. package/dist/core/team-handicap.js.map +1 -0
  339. package/dist/core/tournament.d.ts +12 -0
  340. package/dist/core/tournament.d.ts.map +1 -0
  341. package/dist/core/tournament.js +249 -0
  342. package/dist/core/tournament.js.map +1 -0
  343. package/dist/core/types.d.ts +339 -0
  344. package/dist/core/types.d.ts.map +1 -0
  345. package/dist/core/types.js +4 -0
  346. package/dist/core/types.js.map +1 -0
  347. package/dist/core/validation.d.ts +23 -0
  348. package/dist/core/validation.d.ts.map +1 -0
  349. package/dist/core/validation.js +140 -0
  350. package/dist/core/validation.js.map +1 -0
  351. package/dist/index.d.ts +4 -0
  352. package/dist/index.d.ts.map +1 -0
  353. package/dist/index.js +9 -0
  354. package/dist/index.js.map +1 -0
  355. package/dist/mcp/index.d.ts +17 -0
  356. package/dist/mcp/index.d.ts.map +1 -0
  357. package/dist/mcp/index.js +363 -0
  358. package/dist/mcp/index.js.map +1 -0
  359. package/dist/mcp/index.test.d.ts +2 -0
  360. package/dist/mcp/index.test.d.ts.map +1 -0
  361. package/dist/mcp/index.test.js +497 -0
  362. package/dist/mcp/index.test.js.map +1 -0
  363. package/dist/mcp/registry.d.ts +17 -0
  364. package/dist/mcp/registry.d.ts.map +1 -0
  365. package/dist/mcp/registry.js +708 -0
  366. package/dist/mcp/registry.js.map +1 -0
  367. package/dist/mcp/sandbox.d.ts +15 -0
  368. package/dist/mcp/sandbox.d.ts.map +1 -0
  369. package/dist/mcp/sandbox.js +153 -0
  370. package/dist/mcp/sandbox.js.map +1 -0
  371. package/dist/store/index.d.ts +40 -0
  372. package/dist/store/index.d.ts.map +1 -0
  373. package/dist/store/index.js +324 -0
  374. package/dist/store/index.js.map +1 -0
  375. package/dist/tokens/colors.d.ts +47 -0
  376. package/dist/tokens/colors.d.ts.map +1 -0
  377. package/dist/tokens/colors.js +56 -0
  378. package/dist/tokens/colors.js.map +1 -0
  379. package/dist/tokens/css.d.ts +3 -0
  380. package/dist/tokens/css.d.ts.map +1 -0
  381. package/dist/tokens/css.js +58 -0
  382. package/dist/tokens/css.js.map +1 -0
  383. package/dist/tokens/index.d.ts +5 -0
  384. package/dist/tokens/index.d.ts.map +1 -0
  385. package/dist/tokens/index.js +6 -0
  386. package/dist/tokens/index.js.map +1 -0
  387. package/dist/tokens/spacing.d.ts +23 -0
  388. package/dist/tokens/spacing.d.ts.map +1 -0
  389. package/dist/tokens/spacing.js +28 -0
  390. package/dist/tokens/spacing.js.map +1 -0
  391. package/dist/tokens/typography.d.ts +28 -0
  392. package/dist/tokens/typography.d.ts.map +1 -0
  393. package/dist/tokens/typography.js +34 -0
  394. package/dist/tokens/typography.js.map +1 -0
  395. package/package.json +69 -0
@@ -0,0 +1,22 @@
1
+ import type { GolfScorecard, HandicapCard, ScoreLabel } from './types.js';
2
+ /**
3
+ * Compute par value from ticket count.
4
+ * 1-2 tickets = par 3, 3-4 tickets = par 4, 5+ tickets = par 5.
5
+ */
6
+ export declare function computePar(ticketCount: number): 3 | 4 | 5;
7
+ /**
8
+ * Compute slope (difficulty modifier) from a list of factors present in the sprint.
9
+ * Each factor adds +1 to the base slope of 0.
10
+ */
11
+ export declare function computeSlope(factors: string[]): number;
12
+ /**
13
+ * Compute a ScoreLabel from actual score and par.
14
+ * Scores 3+ over par are all 'triple_plus'.
15
+ */
16
+ export declare function computeScoreLabel(score: number, par: number): ScoreLabel;
17
+ /**
18
+ * Compute a full HandicapCard from an array of scorecards.
19
+ * Scorecards should be ordered chronologically (oldest first).
20
+ */
21
+ export declare function computeHandicapCard(scorecards: GolfScorecard[]): HandicapCard;
22
+ //# sourceMappingURL=handicap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handicap.d.ts","sourceRoot":"","sources":["../../src/core/handicap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAIZ,UAAU,EACX,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAOzD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAKxE;AA0ED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,YAAY,CAS7E"}
@@ -0,0 +1,111 @@
1
+ import { PAR_THRESHOLDS, SCORE_LABELS } from './constants.js';
2
+ import { normalizeStats } from './builder.js';
3
+ /**
4
+ * Compute par value from ticket count.
5
+ * 1-2 tickets = par 3, 3-4 tickets = par 4, 5+ tickets = par 5.
6
+ */
7
+ export function computePar(ticketCount) {
8
+ for (const [par, [min, max]] of Object.entries(PAR_THRESHOLDS)) {
9
+ if (ticketCount >= min && ticketCount <= max) {
10
+ return Number(par);
11
+ }
12
+ }
13
+ return 5;
14
+ }
15
+ /**
16
+ * Compute slope (difficulty modifier) from a list of factors present in the sprint.
17
+ * Each factor adds +1 to the base slope of 0.
18
+ */
19
+ export function computeSlope(factors) {
20
+ return factors.length;
21
+ }
22
+ /**
23
+ * Compute a ScoreLabel from actual score and par.
24
+ * Scores 3+ over par are all 'triple_plus'.
25
+ */
26
+ export function computeScoreLabel(score, par) {
27
+ const diff = score - par;
28
+ if (diff <= -2)
29
+ return 'eagle';
30
+ if (diff >= 3)
31
+ return 'triple_plus';
32
+ return SCORE_LABELS[diff] ?? 'par';
33
+ }
34
+ /**
35
+ * Compute rolling statistics from a window of scorecards.
36
+ * Returns zeroed stats if the array is empty.
37
+ */
38
+ function computeRollingStats(scorecards) {
39
+ if (scorecards.length === 0) {
40
+ return {
41
+ handicap: 0,
42
+ fairway_pct: 0,
43
+ gir_pct: 0,
44
+ avg_putts: 0,
45
+ penalties_per_round: 0,
46
+ miss_pattern: { long: 0, short: 0, left: 0, right: 0 },
47
+ mulligans: 0,
48
+ gimmes: 0,
49
+ };
50
+ }
51
+ const n = scorecards.length;
52
+ const totalDiff = scorecards.reduce((sum, sc) => sum + (sc.score - sc.par), 0);
53
+ const handicap = Math.max(0, Math.round((totalDiff / n) * 10) / 10);
54
+ let totalFairways = 0;
55
+ let totalFairwaysTotal = 0;
56
+ let totalGir = 0;
57
+ let totalGirTotal = 0;
58
+ let totalPutts = 0;
59
+ let totalPenalties = 0;
60
+ const missPattern = { long: 0, short: 0, left: 0, right: 0 };
61
+ let totalMulligans = 0;
62
+ let totalGimmes = 0;
63
+ for (const sc of scorecards) {
64
+ const stats = normalizeStats(sc.stats, sc.shots?.length ?? 0);
65
+ totalFairways += stats.fairways_hit;
66
+ totalFairwaysTotal += stats.fairways_total;
67
+ totalGir += stats.greens_in_regulation;
68
+ totalGirTotal += stats.greens_total;
69
+ totalPutts += stats.putts;
70
+ totalPenalties += stats.penalties;
71
+ for (const dir of ['long', 'short', 'left', 'right']) {
72
+ missPattern[dir] += stats.miss_directions[dir] ?? 0;
73
+ }
74
+ for (const play of sc.special_plays ?? []) {
75
+ if (play === 'mulligan')
76
+ totalMulligans++;
77
+ if (play === 'gimme')
78
+ totalGimmes++;
79
+ }
80
+ }
81
+ const fairway_pct = totalFairwaysTotal > 0
82
+ ? Math.round((totalFairways / totalFairwaysTotal) * 1000) / 10
83
+ : 0;
84
+ const gir_pct = totalGirTotal > 0
85
+ ? Math.round((totalGir / totalGirTotal) * 1000) / 10
86
+ : 0;
87
+ return {
88
+ handicap,
89
+ fairway_pct,
90
+ gir_pct,
91
+ avg_putts: Math.round((totalPutts / n) * 10) / 10,
92
+ penalties_per_round: Math.round((totalPenalties / n) * 10) / 10,
93
+ miss_pattern: missPattern,
94
+ mulligans: totalMulligans,
95
+ gimmes: totalGimmes,
96
+ };
97
+ }
98
+ /**
99
+ * Compute a full HandicapCard from an array of scorecards.
100
+ * Scorecards should be ordered chronologically (oldest first).
101
+ */
102
+ export function computeHandicapCard(scorecards) {
103
+ const last5 = scorecards.slice(-5);
104
+ const last10 = scorecards.slice(-10);
105
+ return {
106
+ last_5: computeRollingStats(last5),
107
+ last_10: computeRollingStats(last10),
108
+ all_time: computeRollingStats(scorecards),
109
+ };
110
+ }
111
+ //# sourceMappingURL=handicap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handicap.js","sourceRoot":"","sources":["../../src/core/handicap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ export type { ClubSelection, ShotResult, HazardType, ConditionType, SpecialPlay, MissDirection, ScoreLabel, SprintType, HazardHit, ShotRecord, ConditionRecord, HoleStats, HoleScore, TrainingType, TrainingSession, NutritionCategory, NutritionEntry, NineteenthHole, GolfScorecard, AgentBreakdown, RollingStats, HandicapCard, DispersionReport, AreaReport, ExecutionTrace, ShotClassification, ClubRecommendation, TrainingRecommendation, ClaimScope, SprintClaim, SprintConflict, EventType, SlopeEvent, CIRunner, CISignal, PRPlatform, PRReviewDecision, PRSignal, HazardSeverity, } from './types.js';
2
+ export { PAR_THRESHOLDS, SLOPE_FACTORS, SCORE_LABELS, TRAINING_TYPE_MAP, NUTRITION_CHECKLIST, HAZARD_SEVERITY_PENALTIES, } from './constants.js';
3
+ export { computePar, computeSlope, computeScoreLabel, computeHandicapCard, } from './handicap.js';
4
+ export { computeStatsFromShots, buildScorecard, buildAgentBreakdowns, } from './builder.js';
5
+ export type { ScorecardInput, AgentShotInput } from './builder.js';
6
+ export { validateScorecard, } from './validation.js';
7
+ export type { ScorecardValidationError, ScorecardValidationWarning, ScorecardValidationResult, } from './validation.js';
8
+ export { computeDispersion, computeAreaPerformance, } from './dispersion.js';
9
+ export { recommendClub, classifyShot, classifyShotFromSignals, generateTrainingPlan, } from './advisor.js';
10
+ export type { RecommendClubInput, TrainingPlanInput, CombinedSignals, } from './advisor.js';
11
+ export { formatSprintReview, formatAdvisorReport, } from './formatter.js';
12
+ export type { ProjectStats, ProjectStatsDelta, ReviewMode, AdvisorReportInput, } from './formatter.js';
13
+ export { filterCommonIssues, extractHazardIndex, computeNutritionTrend, hazardBriefing, formatBriefing, } from './briefing.js';
14
+ export type { RecurringPattern, CommonIssuesFile, SessionEntry, BriefingFilter, HazardEntry, NutritionTrend, } from './briefing.js';
15
+ export { checkConflicts } from './registry.js';
16
+ export type { SprintRegistry } from './registry.js';
17
+ export { SlopeStoreError } from './store.js';
18
+ export type { SlopeStore, SlopeSession, StoreErrorCode } from './store.js';
19
+ export { buildTournamentReview, formatTournamentReview, } from './tournament.js';
20
+ export type { TournamentReview, TournamentSprintEntry, TournamentScoring, TournamentStats, TournamentHazard, } from './types.js';
21
+ export { validateRoadmap, computeCriticalPath, findParallelOpportunities, parseRoadmap, formatRoadmapSummary, formatStrategicContext, } from './roadmap.js';
22
+ export type { RoadmapDefinition, RoadmapSprint, RoadmapTicket, RoadmapPhase, RoadmapClub, RoadmapValidationResult, RoadmapValidationError, RoadmapValidationWarning, CriticalPathResult, ParallelGroup, } from './roadmap.js';
23
+ export type { SlopeConfig } from './config.js';
24
+ export { loadConfig, createConfig, resolveConfigPath } from './config.js';
25
+ export { loadScorecards, detectLatestSprint, resolveCurrentSprint } from './loader.js';
26
+ export { registerMetaphor, getMetaphor, listMetaphors, hasMetaphor, validateMetaphor, } from './metaphor.js';
27
+ export type { MetaphorDefinition, MetaphorVocabulary, ClubTerms, ShotResultTerms, HazardTerms, ConditionTerms, SpecialPlayTerms, MissDirectionTerms, ScoreLabelTerms, SprintTypeTerms, TrainingTypeTerms, NutritionTerms, } from './metaphor.js';
28
+ export { clusterEvents, findPromotionCandidates, runPipeline, } from './pipeline.js';
29
+ export type { EventCluster, PromotionCandidate, PipelineResult, } from './pipeline.js';
30
+ export { detectRunner, parseTestOutput, parseVitestOutput, parseJestOutput, } from './ci-signals.js';
31
+ export { GH_PR_JSON_FIELDS, buildGhCommand, parsePRJson, emptyPRSignal, mergePRChecksWithCI, detectCheckRetries, } from './pr-signals.js';
32
+ export { GUARD_DEFINITIONS, formatPreToolUseOutput, formatPostToolUseOutput, formatStopOutput, generateClaudeCodeHooksConfig, registerCustomGuard, getAllGuardDefinitions, getCustomGuard, clearCustomGuards, } from './guard.js';
33
+ export type { HookInput, PreToolUseOutput, PostToolUseOutput, StopOutput, GuardResult, GuardName, GuardDefinition, GuidanceConfig, CustomGuardDefinition, AnyGuardDefinition, } from './guard.js';
34
+ export { buildReportData, generateHtmlReport, REPORT_CSS, escapeHtml, svgLine, svgRect, svgText, renderSummaryCards, renderHandicapTrendChart, renderDispersionChart, renderAreaPerformanceChart, renderNutritionChart, renderSprintTable, } from './report.js';
35
+ export type { ReportData, SprintTrendEntry, NutritionTrendEntry, } from './report.js';
36
+ export { DEFAULT_DASHBOARD_CONFIG, generateDashboardHtml, renderSprintDetail, renderSprintTimeline, generateDashboardScript, computeMissHeatmap, renderMissHeatmap, computeAreaHazards, renderAreaHazardOverlay, } from './dashboard.js';
37
+ export type { DashboardConfig, HeatmapCell, MissHeatmapData, AreaHazardEntry, } from './dashboard.js';
38
+ export { extractRoleData, computeRoleHandicap, computeSwarmEfficiency, analyzeRoleCombinations, computeTeamHandicap, } from './team-handicap.js';
39
+ export type { RoleHandicap, SwarmEfficiency, RoleCombinationStats, TeamHandicapCard, } from './team-handicap.js';
40
+ export { registerRole, getRole, hasRole, listRoles, loadCustomRoles, generalist, backend, frontend, architect, devops, } from './roles.js';
41
+ export type { RoleDefinition } from './roles.js';
42
+ export { resolveEscalationConfig, detectEscalation, buildEscalationEvent, } from './escalation.js';
43
+ export type { EscalationTrigger, EscalationSeverity, EscalationAction, EscalationConfig, EscalationResult, } from './escalation.js';
44
+ export { generateStandup, formatStandup, parseStandup, extractRelevantHandoffs, } from './standup.js';
45
+ export type { StandupReport, HandoffEntry, } from './standup.js';
46
+ export { validatePluginManifest, discoverPlugins, loadPlugins, loadPluginMetaphors, loadPluginGuards, isPluginEnabled, } from './plugins.js';
47
+ export type { PluginType, PluginManifest, DiscoveredPlugin, PluginLoadResult, PluginsConfig, } from './plugins.js';
48
+ export { buildLeaderboard, formatLeaderboard, renderLeaderboardHtml, } from './leaderboard.js';
49
+ export type { LeaderboardEntry, Leaderboard } from './leaderboard.js';
50
+ export { DEFAULT_PLAYER, extractPlayers, filterScorecardsByPlayer, computePlayerHandicaps, computePlayerHandicap, computeReporterSeverity, mergeHazardIndices, filterHazardsByVisibility, } from './player.js';
51
+ export type { PlayerHandicap, ReporterSeverity } from './player.js';
52
+ export { parseFlows, validateFlows, checkFlowStaleness, loadFlows, } from './flows.js';
53
+ export type { FlowStep, FlowDefinition, FlowsFile, FlowValidationResult, FlowStalenessResult, } from './flows.js';
54
+ export { golf, tennis, baseball, gaming, dnd, matrix } from './metaphors/index.js';
55
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ // SLOPE — Sprint Lifecycle & Operational Performance Engine
2
+ // Core library barrel export
3
+ // Constants
4
+ export { PAR_THRESHOLDS, SLOPE_FACTORS, SCORE_LABELS, TRAINING_TYPE_MAP, NUTRITION_CHECKLIST, HAZARD_SEVERITY_PENALTIES, } from './constants.js';
5
+ // Handicap
6
+ export { computePar, computeSlope, computeScoreLabel, computeHandicapCard, } from './handicap.js';
7
+ // Builder
8
+ export { computeStatsFromShots, buildScorecard, buildAgentBreakdowns, } from './builder.js';
9
+ // Validation
10
+ export { validateScorecard, } from './validation.js';
11
+ // Dispersion
12
+ export { computeDispersion, computeAreaPerformance, } from './dispersion.js';
13
+ // Advisor
14
+ export { recommendClub, classifyShot, classifyShotFromSignals, generateTrainingPlan, } from './advisor.js';
15
+ // Formatter
16
+ export { formatSprintReview, formatAdvisorReport, } from './formatter.js';
17
+ // Briefing
18
+ export { filterCommonIssues, extractHazardIndex, computeNutritionTrend, hazardBriefing, formatBriefing, } from './briefing.js';
19
+ // Registry
20
+ export { checkConflicts } from './registry.js';
21
+ // Store
22
+ export { SlopeStoreError } from './store.js';
23
+ // Tournament Review
24
+ export { buildTournamentReview, formatTournamentReview, } from './tournament.js';
25
+ // Roadmap
26
+ export { validateRoadmap, computeCriticalPath, findParallelOpportunities, parseRoadmap, formatRoadmapSummary, formatStrategicContext, } from './roadmap.js';
27
+ export { loadConfig, createConfig, resolveConfigPath } from './config.js';
28
+ // Loader
29
+ export { loadScorecards, detectLatestSprint, resolveCurrentSprint } from './loader.js';
30
+ // Metaphor
31
+ export { registerMetaphor, getMetaphor, listMetaphors, hasMetaphor, validateMetaphor, } from './metaphor.js';
32
+ // Event Pipeline
33
+ export { clusterEvents, findPromotionCandidates, runPipeline, } from './pipeline.js';
34
+ // CI Signal Parser
35
+ export { detectRunner, parseTestOutput, parseVitestOutput, parseJestOutput, } from './ci-signals.js';
36
+ // PR Signal Parser
37
+ export { GH_PR_JSON_FIELDS, buildGhCommand, parsePRJson, emptyPRSignal, mergePRChecksWithCI, detectCheckRetries, } from './pr-signals.js';
38
+ // Guard Framework
39
+ export { GUARD_DEFINITIONS, formatPreToolUseOutput, formatPostToolUseOutput, formatStopOutput, generateClaudeCodeHooksConfig, registerCustomGuard, getAllGuardDefinitions, getCustomGuard, clearCustomGuards, } from './guard.js';
40
+ // Report
41
+ export { buildReportData, generateHtmlReport, REPORT_CSS, escapeHtml, svgLine, svgRect, svgText, renderSummaryCards, renderHandicapTrendChart, renderDispersionChart, renderAreaPerformanceChart, renderNutritionChart, renderSprintTable, } from './report.js';
42
+ // Dashboard
43
+ export { DEFAULT_DASHBOARD_CONFIG, generateDashboardHtml, renderSprintDetail, renderSprintTimeline, generateDashboardScript, computeMissHeatmap, renderMissHeatmap, computeAreaHazards, renderAreaHazardOverlay, } from './dashboard.js';
44
+ // Team Handicap
45
+ export { extractRoleData, computeRoleHandicap, computeSwarmEfficiency, analyzeRoleCombinations, computeTeamHandicap, } from './team-handicap.js';
46
+ // Roles
47
+ export { registerRole, getRole, hasRole, listRoles, loadCustomRoles, generalist, backend, frontend, architect, devops, } from './roles.js';
48
+ // Escalation
49
+ export { resolveEscalationConfig, detectEscalation, buildEscalationEvent, } from './escalation.js';
50
+ // Standup (Communication Protocol)
51
+ export { generateStandup, formatStandup, parseStandup, extractRelevantHandoffs, } from './standup.js';
52
+ // Plugin System
53
+ export { validatePluginManifest, discoverPlugins, loadPlugins, loadPluginMetaphors, loadPluginGuards, isPluginEnabled, } from './plugins.js';
54
+ // Leaderboard (Multi-Developer)
55
+ export { buildLeaderboard, formatLeaderboard, renderLeaderboardHtml, } from './leaderboard.js';
56
+ // Player (Multi-Developer)
57
+ export { DEFAULT_PLAYER, extractPlayers, filterScorecardsByPlayer, computePlayerHandicaps, computePlayerHandicap, computeReporterSeverity, mergeHazardIndices, filterHazardsByVisibility, } from './player.js';
58
+ // Flows
59
+ export { parseFlows, validateFlows, checkFlowStaleness, loadFlows, } from './flows.js';
60
+ // Built-in metaphors (auto-registers on import)
61
+ export { golf, tennis, baseball, gaming, dnd, matrix } from './metaphors/index.js';
62
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { GolfScorecard } from './types.js';
2
+ import type { MetaphorDefinition } from './metaphor.js';
3
+ /** A single entry in the team leaderboard */
4
+ export interface LeaderboardEntry {
5
+ rank: number;
6
+ player: string;
7
+ handicap: number;
8
+ scorecardCount: number;
9
+ improvementTrend: number;
10
+ fairwayPct: number;
11
+ girPct: number;
12
+ }
13
+ /** Complete leaderboard */
14
+ export interface Leaderboard {
15
+ entries: LeaderboardEntry[];
16
+ generatedAt: string;
17
+ }
18
+ /**
19
+ * Build a ranked leaderboard from scorecards.
20
+ * Rank by handicap ascending (lower = better).
21
+ * Ties broken by improvement trend (last_5.handicap - all_time.handicap, more negative = more improvement).
22
+ */
23
+ export declare function buildLeaderboard(scorecards: GolfScorecard[]): Leaderboard;
24
+ /**
25
+ * Format leaderboard as a text table for CLI output.
26
+ */
27
+ export declare function formatLeaderboard(leaderboard: Leaderboard, metaphor?: MetaphorDefinition): string;
28
+ /**
29
+ * Render leaderboard as an HTML table, following renderSprintTable() pattern.
30
+ */
31
+ export declare function renderLeaderboardHtml(leaderboard: Leaderboard, metaphor?: MetaphorDefinition): string;
32
+ //# sourceMappingURL=leaderboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaderboard.d.ts","sourceRoot":"","sources":["../../src/core/leaderboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAKxD,6CAA6C;AAC7C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,2BAA2B;AAC3B,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,WAAW,CA0CzE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAsBjG;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,kBAAkB,GAAG,MAAM,CA4BrG"}
@@ -0,0 +1,98 @@
1
+ import { escapeHtml } from './report.js';
2
+ import { extractPlayers, filterScorecardsByPlayer } from './player.js';
3
+ import { computeHandicapCard } from './handicap.js';
4
+ /**
5
+ * Build a ranked leaderboard from scorecards.
6
+ * Rank by handicap ascending (lower = better).
7
+ * Ties broken by improvement trend (last_5.handicap - all_time.handicap, more negative = more improvement).
8
+ */
9
+ export function buildLeaderboard(scorecards) {
10
+ const players = extractPlayers(scorecards);
11
+ const entries = players.map(player => {
12
+ const filtered = filterScorecardsByPlayer(scorecards, player);
13
+ const card = computeHandicapCard(filtered);
14
+ const improvementTrend = filtered.length >= 5
15
+ ? Math.round((card.last_5.handicap - card.all_time.handicap) * 10) / 10
16
+ : 0;
17
+ return {
18
+ rank: 0, // assigned below
19
+ player,
20
+ handicap: card.all_time.handicap,
21
+ scorecardCount: filtered.length,
22
+ improvementTrend,
23
+ fairwayPct: card.all_time.fairway_pct,
24
+ girPct: card.all_time.gir_pct,
25
+ };
26
+ });
27
+ // Sort by handicap asc, then improvement trend asc (more negative = better)
28
+ entries.sort((a, b) => {
29
+ if (a.handicap !== b.handicap)
30
+ return a.handicap - b.handicap;
31
+ return a.improvementTrend - b.improvementTrend;
32
+ });
33
+ // Assign ranks (ties get same rank)
34
+ let currentRank = 1;
35
+ for (let i = 0; i < entries.length; i++) {
36
+ if (i > 0 && entries[i].handicap === entries[i - 1].handicap) {
37
+ entries[i].rank = entries[i - 1].rank;
38
+ }
39
+ else {
40
+ entries[i].rank = currentRank;
41
+ }
42
+ currentRank = i + 2;
43
+ }
44
+ return {
45
+ entries,
46
+ generatedAt: new Date().toISOString(),
47
+ };
48
+ }
49
+ /**
50
+ * Format leaderboard as a text table for CLI output.
51
+ */
52
+ export function formatLeaderboard(leaderboard, metaphor) {
53
+ const lines = [];
54
+ const title = metaphor?.vocabulary.review ?? 'Team Leaderboard';
55
+ lines.push(title);
56
+ lines.push('\u2501'.repeat(64));
57
+ lines.push('');
58
+ const pad = (s, w) => String(s).padStart(w);
59
+ lines.push(`${'Rank'.padEnd(6)}${'Player'.padEnd(16)}${'Handicap'.padStart(10)}${'Cards'.padStart(7)}${'Fairway%'.padStart(10)}${'GIR%'.padStart(8)}${'Trend'.padStart(7)}`);
60
+ lines.push('\u2500'.repeat(64));
61
+ for (const e of leaderboard.entries) {
62
+ const trend = e.improvementTrend > 0 ? `+${e.improvementTrend}` : e.improvementTrend === 0 ? '—' : `${e.improvementTrend}`;
63
+ lines.push(`${pad(e.rank, 4)} ${e.player.padEnd(16)}${pad(`+${e.handicap.toFixed(1)}`, 10)}${pad(e.scorecardCount, 7)}${pad(e.fairwayPct.toFixed(1) + '%', 10)}${pad(e.girPct.toFixed(1) + '%', 8)}${pad(trend, 7)}`);
64
+ }
65
+ lines.push('');
66
+ return lines.join('\n');
67
+ }
68
+ /**
69
+ * Render leaderboard as an HTML table, following renderSprintTable() pattern.
70
+ */
71
+ export function renderLeaderboardHtml(leaderboard, metaphor) {
72
+ if (leaderboard.entries.length === 0) {
73
+ return '<p>No leaderboard data available.</p>';
74
+ }
75
+ const rows = leaderboard.entries.map(e => {
76
+ const trend = e.improvementTrend > 0 ? `+${e.improvementTrend}` : e.improvementTrend === 0 ? '\u2014' : `${e.improvementTrend}`;
77
+ const trendClass = e.improvementTrend < 0 ? 'under' : e.improvementTrend > 0 ? 'over' : 'even';
78
+ return `<tr>
79
+ <td>${e.rank}</td>
80
+ <td>${escapeHtml(e.player)}</td>
81
+ <td>+${e.handicap.toFixed(1)}</td>
82
+ <td>${e.scorecardCount}</td>
83
+ <td>${e.fairwayPct.toFixed(1)}%</td>
84
+ <td>${e.girPct.toFixed(1)}%</td>
85
+ <td class="${trendClass}">${escapeHtml(trend)}</td>
86
+ </tr>`;
87
+ }).join('\n');
88
+ return `
89
+ <div class="chart-container">
90
+ <table>
91
+ <thead>
92
+ <tr><th>Rank</th><th>Player</th><th>Handicap</th><th>Cards</th><th>Fairway%</th><th>GIR%</th><th>Trend</th></tr>
93
+ </thead>
94
+ <tbody>${rows}</tbody>
95
+ </table>
96
+ </div>`;
97
+ }
98
+ //# sourceMappingURL=leaderboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaderboard.js","sourceRoot":"","sources":["../../src/core/leaderboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { GolfScorecard } from './types.js';
2
+ import type { SlopeConfig } from './config.js';
3
+ /**
4
+ * Load SLOPE scorecards from the configured directory.
5
+ * Filters by minSprint and normalizes sprint_number.
6
+ */
7
+ export declare function loadScorecards(config: SlopeConfig, cwd?: string): GolfScorecard[];
8
+ /**
9
+ * Detect the latest sprint number from existing scorecards.
10
+ * Returns 0 if no scorecards are found.
11
+ */
12
+ export declare function detectLatestSprint(config: SlopeConfig, cwd?: string): number;
13
+ /**
14
+ * Resolve the current sprint number: explicit config > auto-detect + 1.
15
+ */
16
+ export declare function resolveCurrentSprint(config: SlopeConfig, cwd?: string): number;
17
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,GAAE,MAAsB,GAAG,aAAa,EAAE,CAyChG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CAI3F;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CAI7F"}
@@ -0,0 +1,68 @@
1
+ import { readFileSync, readdirSync, existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ /**
4
+ * Load SLOPE scorecards from the configured directory.
5
+ * Filters by minSprint and normalizes sprint_number.
6
+ */
7
+ export function loadScorecards(config, cwd = process.cwd()) {
8
+ const dir = join(cwd, config.scorecardDir);
9
+ if (!existsSync(dir)) {
10
+ return [];
11
+ }
12
+ // Build regex from pattern (e.g. "sprint-*.json" → /^sprint-(\d+)\.json$/)
13
+ const patternParts = config.scorecardPattern.split('*');
14
+ const prefix = patternParts[0] ?? '';
15
+ const suffix = patternParts[1] ?? '';
16
+ const regex = new RegExp(`^${escapeRegex(prefix)}(\\d+)${escapeRegex(suffix)}$`);
17
+ const files = readdirSync(dir)
18
+ .filter((f) => regex.test(f))
19
+ .sort((a, b) => {
20
+ const na = parseInt(a.match(regex)?.[1] ?? '0', 10);
21
+ const nb = parseInt(b.match(regex)?.[1] ?? '0', 10);
22
+ return na - nb;
23
+ });
24
+ const scorecards = [];
25
+ for (const file of files) {
26
+ const match = file.match(regex);
27
+ if (!match)
28
+ continue;
29
+ const num = parseInt(match[1], 10);
30
+ if (num < config.minSprint)
31
+ continue;
32
+ try {
33
+ const raw = JSON.parse(readFileSync(join(dir, file), 'utf8'));
34
+ const card = {
35
+ ...raw,
36
+ sprint_number: raw.sprint_number ?? raw.sprint,
37
+ };
38
+ scorecards.push(card);
39
+ }
40
+ catch {
41
+ console.error(` Warning: Could not parse ${file}, skipping`);
42
+ }
43
+ }
44
+ return scorecards;
45
+ }
46
+ /**
47
+ * Detect the latest sprint number from existing scorecards.
48
+ * Returns 0 if no scorecards are found.
49
+ */
50
+ export function detectLatestSprint(config, cwd = process.cwd()) {
51
+ const cards = loadScorecards(config, cwd);
52
+ if (cards.length === 0)
53
+ return 0;
54
+ return Math.max(...cards.map((c) => c.sprint_number));
55
+ }
56
+ /**
57
+ * Resolve the current sprint number: explicit config > auto-detect + 1.
58
+ */
59
+ export function resolveCurrentSprint(config, cwd = process.cwd()) {
60
+ if (config.currentSprint)
61
+ return config.currentSprint;
62
+ const latest = detectLatestSprint(config, cwd);
63
+ return latest + 1;
64
+ }
65
+ function escapeRegex(s) {
66
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
67
+ }
68
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import type { ClubSelection, ShotResult, HazardType, ConditionType, SpecialPlay, MissDirection, ScoreLabel, SprintType, TrainingType, NutritionCategory } from './types.js';
2
+ /** Display names for club selections (approach complexity) */
3
+ export type ClubTerms = Record<ClubSelection, string>;
4
+ /** Display names for shot results (ticket outcomes) */
5
+ export type ShotResultTerms = Record<ShotResult, string>;
6
+ /** Display names for hazard types */
7
+ export type HazardTerms = Record<HazardType, string>;
8
+ /** Display names for external conditions */
9
+ export type ConditionTerms = Record<ConditionType, string>;
10
+ /** Display names for special plays */
11
+ export type SpecialPlayTerms = Record<SpecialPlay, string>;
12
+ /** Display names for miss directions */
13
+ export type MissDirectionTerms = Record<MissDirection, string>;
14
+ /** Display names for score labels */
15
+ export type ScoreLabelTerms = Record<ScoreLabel, string>;
16
+ /** Display names for sprint types */
17
+ export type SprintTypeTerms = Record<SprintType, string>;
18
+ /** Display names for training types */
19
+ export type TrainingTypeTerms = Record<TrainingType, string>;
20
+ /** Display names for nutrition categories */
21
+ export type NutritionTerms = Record<NutritionCategory, string>;
22
+ /** Metaphor-specific vocabulary for framework concepts */
23
+ export interface MetaphorVocabulary {
24
+ /** What a sprint is called (e.g., "hole", "set", "inning") */
25
+ sprint: string;
26
+ /** What a ticket is called (e.g., "shot", "point", "at-bat") */
27
+ ticket: string;
28
+ /** What the scorecard is called (e.g., "scorecard", "match report") */
29
+ scorecard: string;
30
+ /** What the handicap card is called (e.g., "handicap card", "player stats") */
31
+ handicapCard: string;
32
+ /** What the briefing is called (e.g., "pre-round briefing", "pre-match scouting") */
33
+ briefing: string;
34
+ /** What a perfect score is called (e.g., "hole-in-one", "ace") */
35
+ perfectScore: string;
36
+ /** What par means (e.g., "par", "expected", "baseline") */
37
+ onTarget: string;
38
+ /** What the review is called (e.g., "19th hole", "post-match") */
39
+ review: string;
40
+ }
41
+ /** A complete metaphor definition — all display terms for SLOPE output */
42
+ export interface MetaphorDefinition {
43
+ /** Unique identifier (e.g., "golf", "tennis", "gaming") */
44
+ id: string;
45
+ /** Human-readable name (e.g., "Golf", "Tennis", "Gaming") */
46
+ name: string;
47
+ /** Brief description of the metaphor */
48
+ description: string;
49
+ /** Framework vocabulary */
50
+ vocabulary: MetaphorVocabulary;
51
+ /** Term maps for all enum types */
52
+ clubs: ClubTerms;
53
+ shotResults: ShotResultTerms;
54
+ hazards: HazardTerms;
55
+ conditions: ConditionTerms;
56
+ specialPlays: SpecialPlayTerms;
57
+ missDirections: MissDirectionTerms;
58
+ scoreLabels: ScoreLabelTerms;
59
+ sprintTypes: SprintTypeTerms;
60
+ trainingTypes: TrainingTypeTerms;
61
+ nutrition: NutritionTerms;
62
+ }
63
+ /** Register a metaphor definition */
64
+ export declare function registerMetaphor(metaphor: MetaphorDefinition): void;
65
+ /** Get a metaphor by ID. Returns the golf metaphor as fallback if not found. */
66
+ export declare function getMetaphor(id: string): MetaphorDefinition;
67
+ /** List all registered metaphors */
68
+ export declare function listMetaphors(): MetaphorDefinition[];
69
+ /** Check if a metaphor ID is registered */
70
+ export declare function hasMetaphor(id: string): boolean;
71
+ /** Validate that a metaphor definition covers every required term */
72
+ export declare function validateMetaphor(metaphor: MetaphorDefinition): string[];
73
+ //# sourceMappingURL=metaphor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metaphor.d.ts","sourceRoot":"","sources":["../../src/core/metaphor.ts"],"names":[],"mappings":"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"}