@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,497 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { createSlopeToolsServer, SLOPE_MCP_TOOL_NAMES, detectSetupHints, buildSetupHint } from './index.js';
3
+ import { SLOPE_REGISTRY, SLOPE_TYPES } from './registry.js';
4
+ import { runInSandbox } from './sandbox.js';
5
+ import { mkdtempSync, writeFileSync, mkdirSync, rmSync } from 'node:fs';
6
+ import { join } from 'node:path';
7
+ import { tmpdir } from 'node:os';
8
+ /** In-memory mock store for testing */
9
+ function createMockStore() {
10
+ const sessions = [];
11
+ const claims = [];
12
+ return {
13
+ sessions,
14
+ claims,
15
+ async registerSession(s) {
16
+ const session = { ...s, started_at: new Date().toISOString(), last_heartbeat_at: new Date().toISOString() };
17
+ sessions.push(session);
18
+ return session;
19
+ },
20
+ async removeSession(id) {
21
+ const idx = sessions.findIndex(s => s.session_id === id);
22
+ if (idx === -1)
23
+ return false;
24
+ sessions.splice(idx, 1);
25
+ return true;
26
+ },
27
+ async getActiveSessions() { return [...sessions]; },
28
+ async getSessionsBySwarm(swarmId) { return sessions.filter(s => s.swarm_id === swarmId); },
29
+ async updateHeartbeat() { },
30
+ async cleanStaleSessions() { return 0; },
31
+ async claim(input) {
32
+ const claim = { ...input, id: `claim-${Date.now()}`, claimed_at: new Date().toISOString() };
33
+ claims.push(claim);
34
+ return claim;
35
+ },
36
+ async release(id) {
37
+ const idx = claims.findIndex(c => c.id === id);
38
+ if (idx === -1)
39
+ return false;
40
+ claims.splice(idx, 1);
41
+ return true;
42
+ },
43
+ async list(n) { return claims.filter(c => c.sprint_number === n); },
44
+ async get(id) { return claims.find(c => c.id === id); },
45
+ async getActiveClaims(n) { return n !== undefined ? claims.filter(c => c.sprint_number === n) : [...claims]; },
46
+ async saveScorecard() { },
47
+ async listScorecards() { return []; },
48
+ async loadCommonIssues() { return { recurring_patterns: [] }; },
49
+ async saveCommonIssues() { },
50
+ async insertEvent(e) { return { ...e, id: `evt-${Date.now()}`, timestamp: new Date().toISOString() }; },
51
+ async getEventsBySession() { return []; },
52
+ async getEventsBySprint() { return []; },
53
+ async getEventsByTicket() { return []; },
54
+ close() { },
55
+ };
56
+ }
57
+ describe('createSlopeToolsServer', () => {
58
+ it('returns an MCP server instance without store', () => {
59
+ const server = createSlopeToolsServer();
60
+ expect(server).toBeDefined();
61
+ expect(typeof server).toBe('object');
62
+ });
63
+ it('returns an MCP server instance with store', () => {
64
+ const server = createSlopeToolsServer(createMockStore());
65
+ expect(server).toBeDefined();
66
+ });
67
+ it('exposes exactly 5 tool names', () => {
68
+ expect(SLOPE_MCP_TOOL_NAMES).toHaveLength(5);
69
+ expect(SLOPE_MCP_TOOL_NAMES).toContain('search');
70
+ expect(SLOPE_MCP_TOOL_NAMES).toContain('execute');
71
+ expect(SLOPE_MCP_TOOL_NAMES).toContain('session_status');
72
+ expect(SLOPE_MCP_TOOL_NAMES).toContain('acquire_claim');
73
+ expect(SLOPE_MCP_TOOL_NAMES).toContain('check_conflicts');
74
+ });
75
+ });
76
+ describe('registry', () => {
77
+ it('search with no args returns full registry', () => {
78
+ expect(SLOPE_REGISTRY.length).toBeGreaterThan(30);
79
+ expect(SLOPE_REGISTRY.every((e) => e.name && e.module && e.description)).toBe(true);
80
+ });
81
+ it('search with query filters correctly', () => {
82
+ const q = 'handicap';
83
+ const results = SLOPE_REGISTRY.filter((e) => e.name.toLowerCase().includes(q) || e.description.toLowerCase().includes(q));
84
+ expect(results.length).toBeGreaterThan(0);
85
+ expect(results.every((e) => e.name.toLowerCase().includes(q) || e.description.toLowerCase().includes(q))).toBe(true);
86
+ });
87
+ it('search with module filter returns only that module', () => {
88
+ const fsEntries = SLOPE_REGISTRY.filter((e) => e.module === 'fs');
89
+ expect(fsEntries.length).toBeGreaterThan(0);
90
+ expect(fsEntries.every((e) => e.module === 'fs')).toBe(true);
91
+ });
92
+ it('store module entries exist', () => {
93
+ const storeEntries = SLOPE_REGISTRY.filter((e) => e.module === 'store');
94
+ expect(storeEntries).toHaveLength(3);
95
+ expect(storeEntries.map(e => e.name)).toEqual(['session_status', 'acquire_claim', 'check_conflicts']);
96
+ });
97
+ it('SLOPE_TYPES contains key type definitions', () => {
98
+ expect(SLOPE_TYPES).toContain('GolfScorecard');
99
+ expect(SLOPE_TYPES).toContain('HandicapCard');
100
+ expect(SLOPE_TYPES).toContain('SlopeConfig');
101
+ expect(SLOPE_TYPES).toContain('ScorecardInput');
102
+ expect(SLOPE_TYPES).toContain('SlopeSession');
103
+ });
104
+ it('registry includes roadmap functions', () => {
105
+ const roadmapNames = [
106
+ 'validateRoadmap', 'computeCriticalPath', 'findParallelOpportunities',
107
+ 'parseRoadmap', 'formatRoadmapSummary', 'formatStrategicContext',
108
+ ];
109
+ for (const name of roadmapNames) {
110
+ expect(SLOPE_REGISTRY.find(e => e.name === name)).toBeDefined();
111
+ }
112
+ });
113
+ it('registry includes loadRoadmap fs helper', () => {
114
+ const entry = SLOPE_REGISTRY.find(e => e.name === 'loadRoadmap');
115
+ expect(entry).toBeDefined();
116
+ expect(entry.module).toBe('fs');
117
+ });
118
+ it('SLOPE_TYPES contains roadmap type definitions', () => {
119
+ expect(SLOPE_TYPES).toContain('RoadmapDefinition');
120
+ expect(SLOPE_TYPES).toContain('RoadmapSprint');
121
+ expect(SLOPE_TYPES).toContain('RoadmapTicket');
122
+ expect(SLOPE_TYPES).toContain('CriticalPathResult');
123
+ expect(SLOPE_TYPES).toContain('ParallelGroup');
124
+ });
125
+ // S15 orchestration registry entries
126
+ it('registry includes standup functions', () => {
127
+ const names = ['generateStandup', 'formatStandup', 'parseStandup', 'extractRelevantHandoffs'];
128
+ for (const name of names) {
129
+ expect(SLOPE_REGISTRY.find(e => e.name === name)).toBeDefined();
130
+ }
131
+ });
132
+ it('registry includes escalation functions', () => {
133
+ const names = ['detectEscalation', 'buildEscalationEvent', 'resolveEscalationConfig'];
134
+ for (const name of names) {
135
+ expect(SLOPE_REGISTRY.find(e => e.name === name)).toBeDefined();
136
+ }
137
+ });
138
+ it('registry includes team handicap functions', () => {
139
+ const names = ['computeTeamHandicap', 'computeRoleHandicap', 'computeSwarmEfficiency', 'analyzeRoleCombinations'];
140
+ for (const name of names) {
141
+ expect(SLOPE_REGISTRY.find(e => e.name === name)).toBeDefined();
142
+ }
143
+ });
144
+ it('registry includes agent breakdown functions', () => {
145
+ const entry = SLOPE_REGISTRY.find(e => e.name === 'buildAgentBreakdowns');
146
+ expect(entry).toBeDefined();
147
+ expect(entry.module).toBe('core');
148
+ });
149
+ it('SLOPE_TYPES contains orchestration type definitions', () => {
150
+ expect(SLOPE_TYPES).toContain('StandupReport');
151
+ expect(SLOPE_TYPES).toContain('HandoffEntry');
152
+ expect(SLOPE_TYPES).toContain('EscalationConfig');
153
+ expect(SLOPE_TYPES).toContain('EscalationResult');
154
+ expect(SLOPE_TYPES).toContain('AgentBreakdown');
155
+ expect(SLOPE_TYPES).toContain('TeamHandicapCard');
156
+ expect(SLOPE_TYPES).toContain('SwarmEfficiency');
157
+ expect(SLOPE_TYPES).toContain('RoleHandicap');
158
+ });
159
+ });
160
+ describe('sandbox', () => {
161
+ it('executes simple expression and returns result', async () => {
162
+ const { result } = await runInSandbox('return 1 + 2;', process.cwd());
163
+ expect(result).toBe(3);
164
+ });
165
+ it('executes core function: computePar(3)', async () => {
166
+ const { result } = await runInSandbox('return computePar(3);', process.cwd());
167
+ expect(result).toBe(4);
168
+ });
169
+ it('executes computeHandicapCard with empty array', async () => {
170
+ const { result } = await runInSandbox('return computeHandicapCard([]);', process.cwd());
171
+ expect(result).toBeDefined();
172
+ expect(result.all_time).toBeDefined();
173
+ });
174
+ it('captures console.log output', async () => {
175
+ const { result, logs } = await runInSandbox('console.log("hello"); return 42;', process.cwd());
176
+ expect(result).toBe(42);
177
+ expect(logs).toContain('hello');
178
+ });
179
+ it('returns constants', async () => {
180
+ const { result } = await runInSandbox('return SLOPE_FACTORS;', process.cwd());
181
+ expect(Array.isArray(result)).toBe(true);
182
+ expect(result).toContain('cross_package');
183
+ });
184
+ it('rejects path escape', async () => {
185
+ await expect(runInSandbox('return readFile("../../etc/passwd");', process.cwd())).rejects.toThrow(/[Pp]ath escape/);
186
+ });
187
+ it('times out on infinite loop', async () => {
188
+ await expect(runInSandbox('while(true){}', process.cwd())).rejects.toThrow();
189
+ }, 35_000);
190
+ it('errors on require', async () => {
191
+ await expect(runInSandbox('return require("fs");', process.cwd())).rejects.toThrow();
192
+ });
193
+ it('errors on process access', async () => {
194
+ await expect(runInSandbox('return process.env;', process.cwd())).rejects.toThrow();
195
+ });
196
+ it('executes roadmap functions in sandbox', async () => {
197
+ const code = `
198
+ const roadmap = {
199
+ name: 'Test',
200
+ phases: [{ name: 'P1', sprints: [1, 2] }],
201
+ sprints: [
202
+ { id: 1, theme: 'A', par: 4, slope: 2, type: 'feature', tickets: [
203
+ { key: 'S1-1', title: 'T1', club: 'short_iron', complexity: 'standard' },
204
+ { key: 'S1-2', title: 'T2', club: 'wedge', complexity: 'small' },
205
+ { key: 'S1-3', title: 'T3', club: 'short_iron', complexity: 'standard' },
206
+ ]},
207
+ { id: 2, theme: 'B', par: 4, slope: 2, type: 'feature', depends_on: [1], tickets: [
208
+ { key: 'S2-1', title: 'T1', club: 'short_iron', complexity: 'standard' },
209
+ { key: 'S2-2', title: 'T2', club: 'short_iron', complexity: 'standard' },
210
+ { key: 'S2-3', title: 'T3', club: 'wedge', complexity: 'small' },
211
+ ]},
212
+ ],
213
+ };
214
+ const v = validateRoadmap(roadmap);
215
+ const cp = computeCriticalPath(roadmap);
216
+ return { valid: v.valid, criticalPath: cp.path, length: cp.length };
217
+ `;
218
+ const { result } = await runInSandbox(code, process.cwd());
219
+ const r = result;
220
+ expect(r.valid).toBe(true);
221
+ expect(r.criticalPath).toEqual([1, 2]);
222
+ expect(r.length).toBe(2);
223
+ });
224
+ it('loadRoadmap returns null when no roadmap file', async () => {
225
+ const tmp = mkdtempSync(join(tmpdir(), 'slope-sandbox-roadmap-'));
226
+ const slopeDir = join(tmp, '.slope');
227
+ mkdirSync(slopeDir, { recursive: true });
228
+ writeFileSync(join(slopeDir, 'config.json'), JSON.stringify({
229
+ scorecardDir: 'docs/retros',
230
+ scorecardPattern: 'sprint-*.json',
231
+ minSprint: 1,
232
+ }));
233
+ const { result } = await runInSandbox('return loadRoadmap();', tmp);
234
+ expect(result).toBeNull();
235
+ rmSync(tmp, { recursive: true, force: true });
236
+ });
237
+ it('loadRoadmap loads and parses roadmap from file', async () => {
238
+ const tmp = mkdtempSync(join(tmpdir(), 'slope-sandbox-roadmap-'));
239
+ const slopeDir = join(tmp, '.slope');
240
+ const backlogDir = join(tmp, 'docs', 'backlog');
241
+ mkdirSync(slopeDir, { recursive: true });
242
+ mkdirSync(backlogDir, { recursive: true });
243
+ writeFileSync(join(slopeDir, 'config.json'), JSON.stringify({
244
+ scorecardDir: 'docs/retros',
245
+ scorecardPattern: 'sprint-*.json',
246
+ minSprint: 1,
247
+ }));
248
+ writeFileSync(join(backlogDir, 'roadmap.json'), JSON.stringify({
249
+ name: 'Test Roadmap',
250
+ phases: [{ name: 'P1', sprints: [1] }],
251
+ sprints: [{
252
+ id: 1, theme: 'Intro', par: 3, slope: 1, type: 'feature',
253
+ tickets: [
254
+ { key: 'S1-1', title: 'T1', club: 'wedge', complexity: 'small' },
255
+ { key: 'S1-2', title: 'T2', club: 'wedge', complexity: 'small' },
256
+ { key: 'S1-3', title: 'T3', club: 'wedge', complexity: 'small' },
257
+ ],
258
+ }],
259
+ }));
260
+ const { result } = await runInSandbox('const r = loadRoadmap(); return r ? r.name : null;', tmp);
261
+ expect(result).toBe('Test Roadmap');
262
+ rmSync(tmp, { recursive: true, force: true });
263
+ });
264
+ // S15 orchestration sandbox tests
265
+ it('executes generateStandup in sandbox', async () => {
266
+ const code = `
267
+ const report = generateStandup({
268
+ sessionId: 'test-sess',
269
+ agent_role: 'backend',
270
+ events: [],
271
+ claims: [],
272
+ });
273
+ return report.sessionId;
274
+ `;
275
+ const { result } = await runInSandbox(code, process.cwd());
276
+ expect(result).toBe('test-sess');
277
+ });
278
+ it('executes detectEscalation in sandbox', async () => {
279
+ const code = `
280
+ const results = detectEscalation({
281
+ standups: [],
282
+ conflicts: [],
283
+ events: [],
284
+ });
285
+ return results.length;
286
+ `;
287
+ const { result } = await runInSandbox(code, process.cwd());
288
+ expect(result).toBe(0);
289
+ });
290
+ it('executes buildAgentBreakdowns in sandbox', async () => {
291
+ const code = `
292
+ const agents = buildAgentBreakdowns([{
293
+ session_id: 's1',
294
+ agent_role: 'backend',
295
+ shots: [{ ticket_key: 'T-1', title: 'Test', club: 'short_iron', result: 'green', hazards: [] }],
296
+ }]);
297
+ return agents[0].score;
298
+ `;
299
+ const { result } = await runInSandbox(code, process.cwd());
300
+ expect(result).toBe(1);
301
+ });
302
+ it('executes computeTeamHandicap in sandbox', async () => {
303
+ const code = `
304
+ const card = computeTeamHandicap([]);
305
+ return card.swarm_efficiency.total_sprints;
306
+ `;
307
+ const { result } = await runInSandbox(code, process.cwd());
308
+ expect(result).toBe(0);
309
+ });
310
+ it('executes resolveEscalationConfig in sandbox', async () => {
311
+ const code = `
312
+ const config = resolveEscalationConfig({ blocker_timeout: 30 });
313
+ return config.blocker_timeout;
314
+ `;
315
+ const { result } = await runInSandbox(code, process.cwd());
316
+ expect(result).toBe(30);
317
+ });
318
+ it('loads scorecards from a test project', async () => {
319
+ const tmp = mkdtempSync(join(tmpdir(), 'slope-sandbox-'));
320
+ const retrosDir = join(tmp, 'docs', 'retros');
321
+ const slopeDir = join(tmp, '.slope');
322
+ mkdirSync(retrosDir, { recursive: true });
323
+ mkdirSync(slopeDir, { recursive: true });
324
+ writeFileSync(join(slopeDir, 'config.json'), JSON.stringify({
325
+ scorecardDir: 'docs/retros',
326
+ scorecardPattern: 'sprint-*.json',
327
+ minSprint: 1,
328
+ }));
329
+ writeFileSync(join(retrosDir, 'sprint-1.json'), JSON.stringify({
330
+ sprint_number: 1, theme: 'Test', par: 3, slope: 0, score: 3,
331
+ score_label: 'par', date: '2026-01-01',
332
+ shots: [], conditions: [], special_plays: [], stats: {
333
+ fairways_hit: 0, fairways_total: 0, greens_in_regulation: 0,
334
+ greens_total: 0, putts: 0, penalties: 0, hazards_hit: 0, hazard_penalties: 0,
335
+ miss_directions: { long: 0, short: 0, left: 0, right: 0 },
336
+ },
337
+ yardage_book_updates: [], bunker_locations: [], course_management_notes: [],
338
+ }));
339
+ const { result } = await runInSandbox('const cards = loadScorecards(); return cards.length;', tmp);
340
+ expect(result).toBe(1);
341
+ });
342
+ });
343
+ describe('mock store tools', () => {
344
+ it('session_status returns sessions and claims from mock', async () => {
345
+ const store = createMockStore();
346
+ await store.registerSession({ session_id: 's1', role: 'primary', ide: 'claude-code' });
347
+ await store.claim({ sprint_number: 1, player: 'alice', target: 'T-1', scope: 'ticket', session_id: 's1' });
348
+ const sessions = await store.getActiveSessions();
349
+ const claims = await store.getActiveClaims();
350
+ expect(sessions).toHaveLength(1);
351
+ expect(claims).toHaveLength(1);
352
+ });
353
+ it('acquire_claim creates claim in mock', async () => {
354
+ const store = createMockStore();
355
+ const claim = await store.claim({ sprint_number: 1, player: 'bob', target: 'T-2', scope: 'ticket' });
356
+ expect(claim.id).toMatch(/^claim-/);
357
+ expect(claim.target).toBe('T-2');
358
+ });
359
+ it('check_conflicts detects overlaps', async () => {
360
+ const { checkConflicts } = await import('../core/index.js');
361
+ const store = createMockStore();
362
+ await store.claim({ sprint_number: 1, player: 'alice', target: 'T-1', scope: 'ticket' });
363
+ await store.claim({ sprint_number: 1, player: 'bob', target: 'T-1', scope: 'ticket' });
364
+ const claims = await store.getActiveClaims(1);
365
+ const conflicts = checkConflicts(claims);
366
+ expect(conflicts).toHaveLength(1);
367
+ expect(conflicts[0].severity).toBe('overlap');
368
+ });
369
+ it('check_conflicts filters by sprint', async () => {
370
+ const { checkConflicts } = await import('../core/index.js');
371
+ const store = createMockStore();
372
+ await store.claim({ sprint_number: 1, player: 'alice', target: 'T-1', scope: 'ticket' });
373
+ await store.claim({ sprint_number: 2, player: 'bob', target: 'T-1', scope: 'ticket' });
374
+ const claimsSprint1 = await store.getActiveClaims(1);
375
+ const conflicts = checkConflicts(claimsSprint1);
376
+ expect(conflicts).toHaveLength(0); // Different sprints, only sprint 1 claims returned
377
+ });
378
+ it('server without store creates successfully with only 2 base tools', () => {
379
+ const server = createSlopeToolsServer();
380
+ expect(server).toBeDefined();
381
+ });
382
+ it('server with store creates successfully', () => {
383
+ const server = createSlopeToolsServer(createMockStore());
384
+ expect(server).toBeDefined();
385
+ });
386
+ });
387
+ describe('detectSetupHints', () => {
388
+ it('returns all false when no hooks.json or settings.json exist', () => {
389
+ const tmp = mkdtempSync(join(tmpdir(), 'slope-hints-'));
390
+ const hints = detectSetupHints(tmp);
391
+ expect(hints.guardsInstalled).toBe(false);
392
+ expect(hints.lifecycleHooksInstalled).toBe(false);
393
+ expect(hints.settingsConfigured).toBe(false);
394
+ rmSync(tmp, { recursive: true, force: true });
395
+ });
396
+ it('detects guard hooks in hooks.json', () => {
397
+ const tmp = mkdtempSync(join(tmpdir(), 'slope-hints-'));
398
+ const slopeDir = join(tmp, '.slope');
399
+ mkdirSync(slopeDir, { recursive: true });
400
+ writeFileSync(join(slopeDir, 'hooks.json'), JSON.stringify({
401
+ installed: {
402
+ 'guard-explore': { provider: 'claude-code', installed_at: '2026-01-01T00:00:00Z' },
403
+ 'guard-hazard': { provider: 'claude-code', installed_at: '2026-01-01T00:00:00Z' },
404
+ },
405
+ }));
406
+ const hints = detectSetupHints(tmp);
407
+ expect(hints.guardsInstalled).toBe(true);
408
+ expect(hints.lifecycleHooksInstalled).toBe(false);
409
+ rmSync(tmp, { recursive: true, force: true });
410
+ });
411
+ it('detects lifecycle hooks in hooks.json', () => {
412
+ const tmp = mkdtempSync(join(tmpdir(), 'slope-hints-'));
413
+ const slopeDir = join(tmp, '.slope');
414
+ mkdirSync(slopeDir, { recursive: true });
415
+ writeFileSync(join(slopeDir, 'hooks.json'), JSON.stringify({
416
+ installed: {
417
+ 'session-start': { provider: 'claude-code', installed_at: '2026-01-01T00:00:00Z' },
418
+ 'session-end': { provider: 'claude-code', installed_at: '2026-01-01T00:00:00Z' },
419
+ },
420
+ }));
421
+ const hints = detectSetupHints(tmp);
422
+ expect(hints.guardsInstalled).toBe(false);
423
+ expect(hints.lifecycleHooksInstalled).toBe(true);
424
+ rmSync(tmp, { recursive: true, force: true });
425
+ });
426
+ it('requires both session-start and session-end for lifecycle', () => {
427
+ const tmp = mkdtempSync(join(tmpdir(), 'slope-hints-'));
428
+ const slopeDir = join(tmp, '.slope');
429
+ mkdirSync(slopeDir, { recursive: true });
430
+ writeFileSync(join(slopeDir, 'hooks.json'), JSON.stringify({
431
+ installed: {
432
+ 'session-start': { provider: 'claude-code', installed_at: '2026-01-01T00:00:00Z' },
433
+ },
434
+ }));
435
+ const hints = detectSetupHints(tmp);
436
+ expect(hints.lifecycleHooksInstalled).toBe(false);
437
+ rmSync(tmp, { recursive: true, force: true });
438
+ });
439
+ it('detects slope-guard.sh in settings.json', () => {
440
+ const tmp = mkdtempSync(join(tmpdir(), 'slope-hints-'));
441
+ const claudeDir = join(tmp, '.claude');
442
+ mkdirSync(claudeDir, { recursive: true });
443
+ writeFileSync(join(claudeDir, 'settings.json'), JSON.stringify({
444
+ hooks: {
445
+ PreToolUse: [{ hooks: [{ command: '$CLAUDE_PROJECT_DIR/.claude/hooks/slope-guard.sh explore' }] }],
446
+ },
447
+ }));
448
+ const hints = detectSetupHints(tmp);
449
+ expect(hints.settingsConfigured).toBe(true);
450
+ rmSync(tmp, { recursive: true, force: true });
451
+ });
452
+ it('handles malformed hooks.json gracefully', () => {
453
+ const tmp = mkdtempSync(join(tmpdir(), 'slope-hints-'));
454
+ const slopeDir = join(tmp, '.slope');
455
+ mkdirSync(slopeDir, { recursive: true });
456
+ writeFileSync(join(slopeDir, 'hooks.json'), 'not valid json{{{');
457
+ const hints = detectSetupHints(tmp);
458
+ expect(hints.guardsInstalled).toBe(false);
459
+ expect(hints.lifecycleHooksInstalled).toBe(false);
460
+ rmSync(tmp, { recursive: true, force: true });
461
+ });
462
+ });
463
+ describe('buildSetupHint', () => {
464
+ it('returns null when everything is set up', () => {
465
+ const hints = { guardsInstalled: true, lifecycleHooksInstalled: true, settingsConfigured: true };
466
+ expect(buildSetupHint(hints)).toBeNull();
467
+ });
468
+ it('includes guard hint when guards not installed', () => {
469
+ const hints = { guardsInstalled: false, lifecycleHooksInstalled: true, settingsConfigured: true };
470
+ const result = buildSetupHint(hints);
471
+ expect(result).toContain('Guard hooks');
472
+ expect(result).toContain('slope hook add --level=full');
473
+ expect(result).not.toContain('Lifecycle hooks');
474
+ });
475
+ it('includes lifecycle hint when lifecycle hooks not installed', () => {
476
+ const hints = { guardsInstalled: true, lifecycleHooksInstalled: false, settingsConfigured: true };
477
+ const result = buildSetupHint(hints);
478
+ expect(result).toContain('Lifecycle hooks');
479
+ expect(result).toContain('slope hook add session-start');
480
+ expect(result).not.toContain('Guard hooks');
481
+ });
482
+ it('includes both hints when nothing is installed', () => {
483
+ const hints = { guardsInstalled: false, lifecycleHooksInstalled: false, settingsConfigured: false };
484
+ const result = buildSetupHint(hints);
485
+ expect(result).toContain('Guard hooks');
486
+ expect(result).toContain('Lifecycle hooks');
487
+ expect(result).toContain('SLOPE Setup Hint');
488
+ });
489
+ });
490
+ describe('search with setup hints', () => {
491
+ it('server accepts setupHints parameter', () => {
492
+ const hints = { guardsInstalled: false, lifecycleHooksInstalled: false, settingsConfigured: false };
493
+ const server = createSlopeToolsServer(undefined, hints);
494
+ expect(server).toBeDefined();
495
+ });
496
+ });
497
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/mcp/index.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * SLOPE function registry — discoverable API surface for the search() tool.
3
+ */
4
+ export interface FunctionRegistryEntry {
5
+ name: string;
6
+ module: 'core' | 'fs' | 'constants' | 'store' | 'flows';
7
+ description: string;
8
+ signature: string;
9
+ example: string;
10
+ }
11
+ export declare const SLOPE_REGISTRY: FunctionRegistryEntry[];
12
+ /**
13
+ * Key TypeScript type definitions for agent reference.
14
+ * Agents call search({ module: 'types' }) to retrieve this.
15
+ */
16
+ export declare const SLOPE_TYPES = "// \u2500\u2500\u2500 Core Scoring Enums \u2500\u2500\u2500\ntype ClubSelection = 'driver' | 'long_iron' | 'short_iron' | 'wedge' | 'putter';\ntype ShotResult = 'fairway' | 'green' | 'in_the_hole' | 'missed_long' | 'missed_short' | 'missed_left' | 'missed_right';\ntype HazardType = 'bunker' | 'water' | 'ob' | 'rough' | 'trees';\ntype ConditionType = 'wind' | 'rain' | 'frost_delay' | 'altitude' | 'pin_position';\ntype SpecialPlay = 'gimme' | 'mulligan' | 'provisional' | 'lay_up' | 'scramble';\ntype MissDirection = 'long' | 'short' | 'left' | 'right';\ntype ScoreLabel = 'eagle' | 'birdie' | 'par' | 'bogey' | 'double_bogey' | 'triple_plus';\ntype SprintType = 'feature' | 'feedback' | 'infra' | 'bugfix' | 'research' | 'flow' | 'test-coverage';\n\n// \u2500\u2500\u2500 Record Types \u2500\u2500\u2500\ninterface HazardHit { type: HazardType; description: string; gotcha_id?: string; }\ninterface ShotRecord { ticket_key: string; title: string; club: ClubSelection; result: ShotResult; hazards: HazardHit[]; provisional_declared?: boolean; notes?: string; }\ninterface ConditionRecord { type: ConditionType; description: string; impact: 'none' | 'minor' | 'major'; }\n\n// \u2500\u2500\u2500 Scoring Types \u2500\u2500\u2500\ninterface HoleStats { fairways_hit: number; fairways_total: number; greens_in_regulation: number; greens_total: number; putts: number; penalties: number; hazards_hit: number; hazard_penalties: number; miss_directions: Record<MissDirection, number>; }\ninterface HoleScore { sprint_number: number; theme: string; par: 3 | 4 | 5; slope: number; score: number; score_label: ScoreLabel; shots: ShotRecord[]; conditions: ConditionRecord[]; special_plays: SpecialPlay[]; stats: HoleStats; }\n\n// \u2500\u2500\u2500 Full Scorecard \u2500\u2500\u2500\ninterface GolfScorecard extends HoleScore { type?: SprintType; player?: string; date: string; training?: TrainingSession[]; nutrition?: NutritionEntry[]; yardage_book_updates: string[]; bunker_locations: string[]; course_management_notes: string[]; nineteenth_hole?: NineteenthHole; }\n\n// \u2500\u2500\u2500 Handicap \u2500\u2500\u2500\ninterface RollingStats { handicap: number; fairway_pct: number; gir_pct: number; avg_putts: number; penalties_per_round: number; miss_pattern: Record<MissDirection, number>; mulligans: number; gimmes: number; }\ninterface HandicapCard { last_5: RollingStats; last_10: RollingStats; all_time: RollingStats; }\n\n// \u2500\u2500\u2500 Dispersion \u2500\u2500\u2500\ninterface DispersionReport { total_shots: number; total_misses: number; miss_rate_pct: number; by_direction: Record<MissDirection, { count: number; pct: number; interpretation: string }>; dominant_miss: MissDirection | null; systemic_issues: string[]; }\ninterface AreaReport { by_sprint_type: Record<string, { count: number; avg_score_vs_par: number; fairway_pct: number; gir_pct: number }>; by_club: Record<string, { count: number; in_the_hole_rate: number; miss_rate: number }>; par_performance: Record<number, { count: number; avg_score_vs_par: number; over_par_rate: number }>; }\n\n// \u2500\u2500\u2500 Config & Loader \u2500\u2500\u2500\ninterface SlopeConfig { scorecardDir: string; scorecardPattern: string; minSprint: number; commonIssuesPath: string; sessionsPath: string; registry: 'file' | 'api'; claimsPath: string; registryApiUrl?: string; currentSprint?: number; store?: string; store_path?: string; }\n\n// \u2500\u2500\u2500 Store \u2500\u2500\u2500\ninterface SlopeSession { session_id: string; role: 'primary' | 'secondary' | 'observer'; ide: string; worktree_path?: string; branch?: string; started_at: string; last_heartbeat_at: string; metadata?: Record<string, unknown>; agent_role?: string; swarm_id?: string; }\ninterface SprintClaim { id: string; sprint_number: number; player: string; target: string; scope: ClaimScope; claimed_at: string; notes?: string; session_id?: string; expires_at?: string; metadata?: Record<string, unknown>; }\n\n// \u2500\u2500\u2500 Standup \u2500\u2500\u2500\ninterface StandupReport { sessionId: string; agent_role?: string; ticketKey?: string; status: 'working' | 'blocked' | 'complete'; progress: string; blockers: string[]; decisions: string[]; handoffs: HandoffEntry[]; timestamp: string; }\ninterface HandoffEntry { target: string; description: string; for_role?: string; }\n\n// \u2500\u2500\u2500 Roles \u2500\u2500\u2500\ninterface RoleDefinition { id: string; name: string; description: string; focusAreas: string[]; clubPreferences: Partial<Record<string, ClubSelection>>; briefingFilter: { emphasize: string[]; deemphasize: string[] }; }\n\n// \u2500\u2500\u2500 Builder Input \u2500\u2500\u2500\ninterface AgentBreakdown { session_id: string; agent_role: string; shots: ShotRecord[]; score: number; stats: HoleStats; }\ninterface AgentShotInput { session_id: string; agent_role: string; shots: ShotRecord[]; }\ninterface ScorecardInput { sprint_number: number; theme: string; par: 3 | 4 | 5; slope: number; date: string; shots: ShotRecord[]; putts?: number; penalties?: number; type?: SprintType; conditions?: ConditionRecord[]; special_plays?: SpecialPlay[]; training?: TrainingSession[]; nutrition?: NutritionEntry[]; nineteenth_hole?: NineteenthHole; bunker_locations?: string[]; yardage_book_updates?: string[]; course_management_notes?: string[]; agents?: AgentBreakdown[]; }\n\n// \u2500\u2500\u2500 Escalation \u2500\u2500\u2500\ntype EscalationTrigger = 'blocker_timeout' | 'claim_conflict' | 'test_failure_cascade' | 'manual';\ntype EscalationSeverity = 'warning' | 'critical';\ntype EscalationAction = 'log_event' | 'mark_blocked' | 'notify_standup';\ninterface EscalationConfig { blocker_timeout?: number; claim_conflict?: boolean; test_failure_cascade?: number; actions?: EscalationAction[]; }\ninterface EscalationResult { trigger: EscalationTrigger; severity: EscalationSeverity; description: string; session_id?: string; agent_role?: string; actions: EscalationAction[]; }\n\n// \u2500\u2500\u2500 Team Handicap \u2500\u2500\u2500\ninterface RoleHandicap { role: string; sprints_participated: number; total_shots: number; stats: RollingStats; }\ninterface SwarmEfficiency { total_sprints: number; total_agents: number; avg_agents_per_sprint: number; total_shots: number; total_score: number; avg_score_vs_par: number; coordination_events: number; efficiency_ratio: number; }\ninterface RoleCombinationStats { roles: string[]; sprint_count: number; avg_score_vs_par: number; total_hazards: number; }\ninterface TeamHandicapCard { overall: RollingStats; by_role: RoleHandicap[]; swarm_efficiency: SwarmEfficiency; role_combinations: RoleCombinationStats[]; }\n\n// \u2500\u2500\u2500 PR Signals \u2500\u2500\u2500\ntype PRPlatform = 'github' | 'gitlab' | 'bitbucket' | 'unknown';\ntype PRReviewDecision = 'APPROVED' | 'CHANGES_REQUESTED' | 'REVIEW_REQUIRED' | 'COMMENTED' | 'NONE';\ninterface PRSignal { platform: PRPlatform; pr_number: number; review_cycles: number; change_request_count: number; time_to_merge_minutes: number | null; ci_checks_passed: number; ci_checks_failed: number; file_count: number; additions: number; deletions: number; comment_count: number; review_decision: PRReviewDecision; }\n\n// \u2500\u2500\u2500 Advisor \u2500\u2500\u2500\ninterface ExecutionTrace { planned_scope_paths: string[]; modified_files: string[]; test_results: { suite: string; passed: boolean; first_run: boolean }[]; reverts: number; elapsed_minutes: number; hazards_encountered: HazardHit[]; }\ninterface ShotClassification { result: ShotResult; miss_direction: MissDirection | null; confidence: number; reasoning: string; }\ninterface CombinedSignals { trace: ExecutionTrace; ci?: CISignal; pr?: PRSignal; events?: SlopeEvent[]; }\ninterface ClubRecommendation { club: ClubSelection; confidence: number; reasoning: string; provisional_suggestion?: string; }\ninterface TrainingRecommendation { area: string; type: TrainingType; description: string; priority: 'high' | 'medium' | 'low'; instruction_adjustment?: string; }\ninterface RecommendClubInput { ticketComplexity: 'trivial' | 'small' | 'medium' | 'large'; scorecards: GolfScorecard[]; slopeFactors?: string[]; }\ninterface TrainingPlanInput { handicap: HandicapCard; dispersion: DispersionReport; recentScorecards: GolfScorecard[]; }\n\n// \u2500\u2500\u2500 Roadmap \u2500\u2500\u2500\ntype RoadmapClub = 'driver' | 'long_iron' | 'short_iron' | 'wedge' | 'putter';\ninterface RoadmapTicket { key: string; title: string; club: RoadmapClub; complexity: 'trivial' | 'small' | 'standard' | 'moderate'; depends_on?: string[]; }\ninterface RoadmapSprint { id: number; theme: string; par: 3 | 4 | 5; slope: number; type: string; tickets: RoadmapTicket[]; depends_on?: number[]; }\ninterface RoadmapPhase { name: string; sprints: number[]; }\ninterface RoadmapDefinition { name: string; description?: string; phases: RoadmapPhase[]; sprints: RoadmapSprint[]; }\ninterface RoadmapValidationResult { valid: boolean; errors: RoadmapValidationError[]; warnings: RoadmapValidationWarning[]; }\ninterface RoadmapValidationError { type: 'error'; sprint?: number; ticket?: string; message: string; }\ninterface RoadmapValidationWarning { type: 'warning'; sprint?: number; ticket?: string; message: string; }\ninterface CriticalPathResult { path: number[]; length: number; totalPar: number; }\ninterface ParallelGroup { sprints: number[]; reason: string; }\n\n// \u2500\u2500\u2500 Player (Multi-Developer) \u2500\u2500\u2500\ninterface PlayerHandicap { player: string; scorecardCount: number; handicapCard: HandicapCard; }\ninterface LeaderboardEntry { rank: number; player: string; handicap: number; scorecardCount: number; improvementTrend: number; fairwayPct: number; girPct: number; }\ninterface Leaderboard { entries: LeaderboardEntry[]; generatedAt: string; }\n\n// \u2500\u2500\u2500 Flows \u2500\u2500\u2500\ninterface FlowStep { name: string; description: string; file_paths: string[]; notes?: string; }\ninterface FlowDefinition { id: string; title: string; description: string; entry_point: string; steps: FlowStep[]; files: string[]; tags: string[]; last_verified_sha: string; last_verified_at: string; }\ninterface FlowsFile { version: '1'; last_generated: string; flows: FlowDefinition[]; }\n\n// \u2500\u2500\u2500 Briefing \u2500\u2500\u2500\ninterface RecurringPattern { id: number; title: string; category: string; sprints_hit: number[]; gotcha_refs: string[]; description: string; prevention: string; reported_by?: string[]; }\ninterface CommonIssuesFile { recurring_patterns: RecurringPattern[]; }\ninterface SessionEntry { id: number; date: string; sprint: string; summary: string; where_left_off: string; }\ninterface BriefingFilter { categories?: string[]; keywords?: string[]; }\n\n// \u2500\u2500\u2500 Tournament \u2500\u2500\u2500\ninterface TournamentReview { id: string; name: string; dateRange: { start: string; end: string }; sprints: TournamentSprintEntry[]; scoring: TournamentScoring; stats: TournamentStats; hazardIndex: TournamentHazard[]; clubPerformance: Record<string, { attempts: number; inTheHole: number; avgScore: number }>; takeaways: string[]; improvements: string[]; reflection?: string; }\ninterface TournamentSprintEntry { sprintNumber: number; theme: string; par: number; slope: number; score: number; scoreLabel: ScoreLabel; ticketCount: number; ticketsLanded: number; }\ninterface TournamentScoring { totalPar: number; totalScore: number; differential: number; avgScoreLabel: string; bestSprint: { sprintNumber: number; label: ScoreLabel }; worstSprint: { sprintNumber: number; label: ScoreLabel }; sprintCount: number; ticketCount: number; ticketsLanded: number; landingRate: number; }\n";
17
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/mcp/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,cAAc,EAAE,qBAAqB,EAimBjD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,i4WA6GvB,CAAC"}