@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,47 @@
1
+ import { loadConfig } from '../config.js';
2
+ import { resolveStore } from '../store.js';
3
+ /**
4
+ * Scope drift guard: fires PreToolUse on Edit|Write.
5
+ * Warns when editing files outside the claimed ticket's scope.
6
+ */
7
+ export async function scopeDriftGuard(input, cwd) {
8
+ const config = loadConfig();
9
+ if (config.guidance?.scopeDrift === false)
10
+ return {};
11
+ const filePath = input.tool_input?.file_path;
12
+ if (!filePath)
13
+ return {};
14
+ // Normalize file path relative to cwd
15
+ const relativePath = filePath.startsWith(cwd)
16
+ ? filePath.slice(cwd.length + 1)
17
+ : filePath;
18
+ // Look up active claims for the current sprint
19
+ let sprintNumber;
20
+ if (config.currentSprint) {
21
+ sprintNumber = config.currentSprint;
22
+ }
23
+ if (!sprintNumber)
24
+ return {}; // Can't check without a sprint
25
+ try {
26
+ const store = await resolveStore(cwd);
27
+ const claims = await store.list(sprintNumber);
28
+ store.close();
29
+ if (claims.length === 0)
30
+ return {}; // No claims — can't check
31
+ // Check if the file is within any claimed area
32
+ const areaClaims = claims.filter(c => c.scope === 'area');
33
+ if (areaClaims.length === 0)
34
+ return {}; // No area claims — ticket-only claims don't restrict files
35
+ const inScope = areaClaims.some(c => relativePath.startsWith(c.target));
36
+ if (inScope)
37
+ return {}; // File is in scope
38
+ const claimedAreas = areaClaims.map(c => c.target).join(', ');
39
+ return {
40
+ context: `SLOPE scope drift: ${relativePath} is outside claimed areas (${claimedAreas}). Intentional?`,
41
+ };
42
+ }
43
+ catch {
44
+ return {}; // Store not available — skip
45
+ }
46
+ }
47
+ //# sourceMappingURL=scope-drift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-drift.js","sourceRoot":"","sources":["../../../src/cli/guards/scope-drift.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAgB,EAAE,GAAW;IACjE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,MAAM,CAAC,QAAQ,EAAE,UAAU,KAAK,KAAK;QAAE,OAAO,EAAE,CAAC;IAErD,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,SAA+B,CAAC;IACnE,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEzB,sCAAsC;IACtC,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;QAC3C,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QAChC,CAAC,CAAC,QAAQ,CAAC;IAEb,+CAA+C;IAC/C,IAAI,YAAgC,CAAC;IACrC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC;IACtC,CAAC;IACD,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,CAAC,CAAC,+BAA+B;IAE7D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9C,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC,CAAC,0BAA0B;QAE9D,+CAA+C;QAC/C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;QAC1D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC,CAAC,2DAA2D;QAEnG,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,IAAI,OAAO;YAAE,OAAO,EAAE,CAAC,CAAC,mBAAmB;QAE3C,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,OAAO;YACL,OAAO,EAAE,sBAAsB,YAAY,8BAA8B,YAAY,iBAAiB;SACvG,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,6BAA6B;IAC1C,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { HookInput, GuardResult } from '../../core/index.js';
2
+ /**
3
+ * Stop check guard: fires on Stop.
4
+ * Checks for uncommitted/unpushed work before session end.
5
+ */
6
+ export declare function stopCheckGuard(input: HookInput, cwd: string): Promise<GuardResult>;
7
+ //# sourceMappingURL=stop-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop-check.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/stop-check.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElE;;;GAGG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA4BxF"}
@@ -0,0 +1,34 @@
1
+ import { execSync } from 'node:child_process';
2
+ /**
3
+ * Stop check guard: fires on Stop.
4
+ * Checks for uncommitted/unpushed work before session end.
5
+ */
6
+ export async function stopCheckGuard(input, cwd) {
7
+ const issues = [];
8
+ // Check for uncommitted changes
9
+ try {
10
+ const status = execSync('git status --porcelain 2>/dev/null', { cwd, encoding: 'utf8' }).trim();
11
+ if (status.length > 0) {
12
+ const lines = status.split('\n').filter(Boolean);
13
+ issues.push(`${lines.length} uncommitted change${lines.length === 1 ? '' : 's'}`);
14
+ }
15
+ }
16
+ catch { /* not a git repo */ }
17
+ // Check for unpushed commits
18
+ try {
19
+ const unpushed = execSync('git log @{u}..HEAD --oneline 2>/dev/null', { cwd, encoding: 'utf8' }).trim();
20
+ if (unpushed) {
21
+ const lines = unpushed.split('\n').filter(Boolean);
22
+ if (lines.length > 0) {
23
+ issues.push(`${lines.length} unpushed commit${lines.length === 1 ? '' : 's'}`);
24
+ }
25
+ }
26
+ }
27
+ catch { /* no upstream */ }
28
+ if (issues.length === 0)
29
+ return {};
30
+ return {
31
+ blockReason: `SLOPE: ${issues.join(' and ')} detected. Commit and push before stopping to preserve your recovery point.`,
32
+ };
33
+ }
34
+ //# sourceMappingURL=stop-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop-check.js","sourceRoot":"","sources":["../../../src/cli/guards/stop-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAgB,EAAE,GAAW;IAChE,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,gCAAgC;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,oCAAoC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChG,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,sBAAsB,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAEhC,6BAA6B;IAC7B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,0CAA0C,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxG,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,mBAAmB,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAE7B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,OAAO;QACL,WAAW,EAAE,UAAU,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,6EAA6E;KACzH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { HookInput, GuardResult } from '../../core/index.js';
2
+ /**
3
+ * Subagent gate guard: fires PreToolUse on Task.
4
+ * Forces haiku model and caps max_turns on Explore/Plan subagents.
5
+ */
6
+ export declare function subagentGateGuard(input: HookInput, _cwd: string): Promise<GuardResult>;
7
+ //# sourceMappingURL=subagent-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-gate.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/subagent-gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlE;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAqC5F"}
@@ -0,0 +1,39 @@
1
+ import { loadConfig } from '../config.js';
2
+ /**
3
+ * Subagent gate guard: fires PreToolUse on Task.
4
+ * Forces haiku model and caps max_turns on Explore/Plan subagents.
5
+ */
6
+ export async function subagentGateGuard(input, _cwd) {
7
+ const toolInput = input.tool_input ?? {};
8
+ const subagentType = toolInput.subagent_type;
9
+ const model = toolInput.model;
10
+ const maxTurns = toolInput.max_turns;
11
+ const resume = toolInput.resume;
12
+ // Exempt resumed agents — they inherit prior settings
13
+ if (resume)
14
+ return {};
15
+ // Only gate Explore and Plan subagents
16
+ if (subagentType !== 'Explore' && subagentType !== 'Plan')
17
+ return {};
18
+ const config = loadConfig();
19
+ const guidance = config.guidance ?? {};
20
+ const allowedModels = guidance.subagentAllowModels ?? ['haiku'];
21
+ const turnsLimit = subagentType === 'Explore'
22
+ ? (guidance.subagentExploreTurns ?? 10)
23
+ : (guidance.subagentPlanTurns ?? 15);
24
+ const violations = [];
25
+ if (model && !allowedModels.includes(model)) {
26
+ violations.push(`model "${model}" not in allowed list [${allowedModels.join(', ')}]`);
27
+ }
28
+ if (maxTurns === undefined || maxTurns > turnsLimit) {
29
+ const current = maxTurns === undefined ? 'not set' : `${maxTurns}`;
30
+ violations.push(`max_turns ${current}, limit is ${turnsLimit}`);
31
+ }
32
+ if (violations.length === 0)
33
+ return {};
34
+ return {
35
+ decision: 'deny',
36
+ blockReason: `SLOPE subagent-gate: ${subagentType} agent blocked — ${violations.join('; ')}. Resubmit with model: ${allowedModels[0]}, max_turns: ${turnsLimit}.`,
37
+ };
38
+ }
39
+ //# sourceMappingURL=subagent-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-gate.js","sourceRoot":"","sources":["../../../src/cli/guards/subagent-gate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAgB,EAAE,IAAY;IACpE,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;IACzC,MAAM,YAAY,GAAG,SAAS,CAAC,aAAmC,CAAC;IACnE,MAAM,KAAK,GAAG,SAAS,CAAC,KAA2B,CAAC;IACpD,MAAM,QAAQ,GAAG,SAAS,CAAC,SAA+B,CAAC;IAC3D,MAAM,MAAM,GAAG,SAAS,CAAC,MAA4B,CAAC;IAEtD,sDAAsD;IACtD,IAAI,MAAM;QAAE,OAAO,EAAE,CAAC;IAEtB,uCAAuC;IACvC,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IAErE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IACvC,MAAM,aAAa,GAAG,QAAQ,CAAC,mBAAmB,IAAI,CAAC,OAAO,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,YAAY,KAAK,SAAS;QAC3C,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,IAAI,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IAEvC,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,UAAU,CAAC,IAAI,CAAC,UAAU,KAAK,0BAA0B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,GAAG,UAAU,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC;QACnE,UAAU,CAAC,IAAI,CAAC,aAAa,OAAO,cAAc,UAAU,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,OAAO;QACL,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,wBAAwB,YAAY,oBAAoB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,aAAa,CAAC,CAAC,CAAC,gBAAgB,UAAU,GAAG;KAClK,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { HookInput, GuardResult } from '../../core/index.js';
2
+ /**
3
+ * Version-check guard: fires PreToolUse on Bash.
4
+ * Blocks `git push` to main/master when local package version matches
5
+ * the published npm version (i.e. version hasn't been bumped).
6
+ */
7
+ export declare function versionCheckGuard(input: HookInput, cwd: string): Promise<GuardResult>;
8
+ //# sourceMappingURL=version-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/version-check.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElE;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAwC3F"}
@@ -0,0 +1,49 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { readFileSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ /**
5
+ * Version-check guard: fires PreToolUse on Bash.
6
+ * Blocks `git push` to main/master when local package version matches
7
+ * the published npm version (i.e. version hasn't been bumped).
8
+ */
9
+ export async function versionCheckGuard(input, cwd) {
10
+ const command = input.tool_input?.command ?? '';
11
+ // Only fire on git push targeting main/master
12
+ if (!command.includes('git push'))
13
+ return {};
14
+ if (!/(main|master)/.test(command))
15
+ return {};
16
+ // Read local version from core package.json
17
+ let localVersion;
18
+ try {
19
+ const pkgPath = join(cwd, 'packages', 'core', 'package.json');
20
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
21
+ localVersion = pkg.version;
22
+ }
23
+ catch {
24
+ // Can't read local package — skip check
25
+ return {};
26
+ }
27
+ // Get published version from npm
28
+ let publishedVersion;
29
+ try {
30
+ publishedVersion = execSync('npm view @slope-dev/slope version 2>/dev/null', {
31
+ cwd,
32
+ encoding: 'utf8',
33
+ timeout: 10000,
34
+ }).trim();
35
+ }
36
+ catch {
37
+ // Package not published yet or npm unreachable — allow
38
+ return {};
39
+ }
40
+ // If versions match, the developer hasn't bumped yet
41
+ if (localVersion === publishedVersion) {
42
+ return {
43
+ decision: 'deny',
44
+ blockReason: `Version not bumped — local @slope-dev/slope is ${localVersion}, same as npm. Run \`pnpm version:bump <version>\` before pushing to main.`,
45
+ };
46
+ }
47
+ return {};
48
+ }
49
+ //# sourceMappingURL=version-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-check.js","sourceRoot":"","sources":["../../../src/cli/guards/version-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAgB,EAAE,GAAW;IACnE,MAAM,OAAO,GAAI,KAAK,CAAC,UAAU,EAAE,OAAkB,IAAI,EAAE,CAAC;IAE5D,8CAA8C;IAC9C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAE9C,4CAA4C;IAC5C,IAAI,YAAoB,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QACtD,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,wCAAwC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,iCAAiC;IACjC,IAAI,gBAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,gBAAgB,GAAG,QAAQ,CAAC,+CAA+C,EAAE;YAC3E,GAAG;YACH,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,KAAK;SACf,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,uDAAuD;QACvD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,qDAAqD;IACrD,IAAI,YAAY,KAAK,gBAAgB,EAAE,CAAC;QACtC,OAAO;YACL,QAAQ,EAAE,MAAM;YAChB,WAAW,EAAE,kDAAkD,YAAY,4EAA4E;SACxJ,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { HookInput, GuardResult } from '../../core/index.js';
2
+ /**
3
+ * Workflow gate guard: fires PreToolUse on ExitPlanMode.
4
+ * Blocks ExitPlanMode until review rounds are complete.
5
+ */
6
+ export declare function workflowGateGuard(input: HookInput, cwd: string): Promise<GuardResult>;
7
+ //# sourceMappingURL=workflow-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-gate.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/workflow-gate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQlE;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAyB3F"}
@@ -0,0 +1,31 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ /**
4
+ * Workflow gate guard: fires PreToolUse on ExitPlanMode.
5
+ * Blocks ExitPlanMode until review rounds are complete.
6
+ */
7
+ export async function workflowGateGuard(input, cwd) {
8
+ const statePath = join(cwd, '.slope', 'review-state.json');
9
+ if (!existsSync(statePath))
10
+ return {};
11
+ let state;
12
+ try {
13
+ state = JSON.parse(readFileSync(statePath, 'utf8'));
14
+ }
15
+ catch {
16
+ // Malformed JSON — don't block on bad data
17
+ return {};
18
+ }
19
+ // Validate shape
20
+ if (typeof state.rounds_required !== 'number' || typeof state.rounds_completed !== 'number') {
21
+ return {};
22
+ }
23
+ if (state.rounds_completed >= state.rounds_required)
24
+ return {};
25
+ const planRef = state.plan_file ? ` (${state.plan_file})` : '';
26
+ return {
27
+ decision: 'deny',
28
+ blockReason: `SLOPE workflow-gate: Review incomplete. ${state.rounds_completed}/${state.rounds_required} rounds done${planRef}. Complete remaining review rounds before exiting plan mode.`,
29
+ };
30
+ }
31
+ //# sourceMappingURL=workflow-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-gate.js","sourceRoot":"","sources":["../../../src/cli/guards/workflow-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AASjC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAgB,EAAE,GAAW;IACnE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAE3D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtC,IAAI,KAAkB,CAAC;IACvB,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;QAC3C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,iBAAiB;IACjB,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ,EAAE,CAAC;QAC5F,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,eAAe;QAAE,OAAO,EAAE,CAAC;IAE/D,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,OAAO;QACL,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,2CAA2C,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,eAAe,eAAe,OAAO,8DAA8D;KAC5L,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface HooksConfig {
2
+ installed: Record<string, {
3
+ provider: string;
4
+ installed_at: string;
5
+ }>;
6
+ }
7
+ export declare function loadHooksConfig(cwd: string): HooksConfig;
8
+ export declare function saveHooksConfig(cwd: string, config: HooksConfig): void;
9
+ //# sourceMappingURL=hooks-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-config.d.ts","sourceRoot":"","sources":["../../src/cli/hooks-config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvE;AAID,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAUxD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAItE"}
@@ -0,0 +1,21 @@
1
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ const HOOKS_CONFIG_FILE = '.slope/hooks.json';
4
+ export function loadHooksConfig(cwd) {
5
+ const configPath = join(cwd, HOOKS_CONFIG_FILE);
6
+ if (!existsSync(configPath)) {
7
+ return { installed: {} };
8
+ }
9
+ try {
10
+ return JSON.parse(readFileSync(configPath, 'utf8'));
11
+ }
12
+ catch {
13
+ return { installed: {} };
14
+ }
15
+ }
16
+ export function saveHooksConfig(cwd, config) {
17
+ const dir = join(cwd, '.slope');
18
+ mkdirSync(dir, { recursive: true });
19
+ writeFileSync(join(cwd, HOOKS_CONFIG_FILE), JSON.stringify(config, null, 2) + '\n');
20
+ }
21
+ //# sourceMappingURL=hooks-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-config.js","sourceRoot":"","sources":["../../src/cli/hooks-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAMjC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAE9C,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAgB,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,MAAmB;IAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAChC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACtF,CAAC"}
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * SLOPE CLI — Sprint Lifecycle & Operational Performance Engine
4
+ *
5
+ * Usage:
6
+ * slope init Initialize .slope/ directory
7
+ * slope card Display handicap card
8
+ * slope validate [path] Validate scorecard(s)
9
+ * slope review [path] [--plain] Format sprint review
10
+ * slope briefing [--sprint=N] [options] Pre-round briefing
11
+ * slope plan --complexity=<level> Pre-shot advisor
12
+ * slope classify --scope=... ... Classify a shot
13
+ * slope claim --target=<t> [--force] Claim a ticket or area
14
+ * slope release --id=<id> Release a claim
15
+ * slope status [--sprint=N] Show sprint course status
16
+ * slope dashboard [--port=N] [--no-open] Live local performance dashboard
17
+ */
18
+ export {};
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG"}
@@ -0,0 +1,282 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * SLOPE CLI — Sprint Lifecycle & Operational Performance Engine
4
+ *
5
+ * Usage:
6
+ * slope init Initialize .slope/ directory
7
+ * slope card Display handicap card
8
+ * slope validate [path] Validate scorecard(s)
9
+ * slope review [path] [--plain] Format sprint review
10
+ * slope briefing [--sprint=N] [options] Pre-round briefing
11
+ * slope plan --complexity=<level> Pre-shot advisor
12
+ * slope classify --scope=... ... Classify a shot
13
+ * slope claim --target=<t> [--force] Claim a ticket or area
14
+ * slope release --id=<id> Release a claim
15
+ * slope status [--sprint=N] Show sprint course status
16
+ * slope dashboard [--port=N] [--no-open] Live local performance dashboard
17
+ */
18
+ import { initCommand } from './commands/init.js';
19
+ import { cardCommand } from './commands/card.js';
20
+ import { validateCommand } from './commands/validate.js';
21
+ import { reviewCommand } from './commands/review.js';
22
+ import { briefingCommand } from './commands/briefing.js';
23
+ import { planCommand } from './commands/plan.js';
24
+ import { classifyCommand } from './commands/classify.js';
25
+ import { claimCommand } from './commands/claim.js';
26
+ import { releaseCommand } from './commands/release.js';
27
+ import { statusCommand } from './commands/status.js';
28
+ import { tournamentCommand } from './commands/tournament.js';
29
+ import { autoCardCommand } from './commands/auto-card.js';
30
+ import { nextCommand } from './commands/next.js';
31
+ import { sessionCommand } from './commands/session.js';
32
+ import { hookCommand } from './commands/hook.js';
33
+ import { roadmapCommand } from './commands/roadmap.js';
34
+ import { extractCommand } from './commands/extract.js';
35
+ import { distillCommand } from './commands/distill.js';
36
+ import { guardCommand, guardManageCommand } from './commands/guard.js';
37
+ import { reportCommand } from './commands/report.js';
38
+ import { standupCommand } from './commands/standup.js';
39
+ import { escalateCommand } from './commands/escalate.js';
40
+ import { pluginCommand } from './commands/plugin.js';
41
+ import { dashboardCommand } from './commands/dashboard.js';
42
+ import { mapCommand } from './commands/map.js';
43
+ import { flowsCommand } from './commands/flows.js';
44
+ import { reviewStateCommand } from './commands/review-state.js';
45
+ const subcommand = process.argv[2];
46
+ switch (subcommand) {
47
+ case 'init':
48
+ initCommand(process.argv.slice(3)).catch(err => {
49
+ console.error('Error:', err.message);
50
+ process.exit(1);
51
+ });
52
+ break;
53
+ case 'card':
54
+ cardCommand(process.argv.slice(3));
55
+ break;
56
+ case 'validate':
57
+ validateCommand(process.argv[3]);
58
+ break;
59
+ case 'review': {
60
+ const reviewArgs = process.argv.slice(3);
61
+ const reviewSub = reviewArgs[0];
62
+ if (['start', 'round', 'status', 'reset'].includes(reviewSub)) {
63
+ reviewStateCommand(reviewArgs).catch(err => {
64
+ console.error('Error:', err.message);
65
+ process.exit(1);
66
+ });
67
+ }
68
+ else {
69
+ const plainFlag = reviewArgs.includes('--plain');
70
+ const metaphorArg = reviewArgs.find((a) => a.startsWith('--metaphor='));
71
+ const metaphorVal = metaphorArg?.slice('--metaphor='.length);
72
+ const path = reviewArgs.find((a) => !a.startsWith('--'));
73
+ reviewCommand(path, plainFlag ? 'plain' : undefined, metaphorVal);
74
+ }
75
+ break;
76
+ }
77
+ case 'briefing':
78
+ briefingCommand(process.argv.slice(3)).catch(err => {
79
+ console.error('Error:', err.message);
80
+ process.exit(1);
81
+ });
82
+ break;
83
+ case 'plan':
84
+ planCommand(process.argv.slice(3));
85
+ break;
86
+ case 'classify':
87
+ classifyCommand(process.argv.slice(3));
88
+ break;
89
+ case 'claim':
90
+ claimCommand(process.argv.slice(3)).catch(err => {
91
+ console.error('Error:', err.message);
92
+ process.exit(1);
93
+ });
94
+ break;
95
+ case 'release':
96
+ releaseCommand(process.argv.slice(3)).catch(err => {
97
+ console.error('Error:', err.message);
98
+ process.exit(1);
99
+ });
100
+ break;
101
+ case 'status':
102
+ statusCommand(process.argv.slice(3)).catch(err => {
103
+ console.error('Error:', err.message);
104
+ process.exit(1);
105
+ });
106
+ break;
107
+ case 'tournament':
108
+ tournamentCommand(process.argv.slice(3));
109
+ break;
110
+ case 'auto-card':
111
+ autoCardCommand(process.argv.slice(3)).catch(err => {
112
+ console.error('Error:', err.message);
113
+ process.exit(1);
114
+ });
115
+ break;
116
+ case 'hook':
117
+ hookCommand(process.argv.slice(3)).catch(err => {
118
+ console.error('Error:', err.message);
119
+ process.exit(1);
120
+ });
121
+ break;
122
+ case 'session':
123
+ sessionCommand(process.argv.slice(3)).catch(err => {
124
+ console.error('Error:', err.message);
125
+ process.exit(1);
126
+ });
127
+ break;
128
+ case 'next':
129
+ nextCommand();
130
+ break;
131
+ case 'roadmap':
132
+ roadmapCommand(process.argv.slice(3)).catch(err => {
133
+ console.error('Error:', err.message);
134
+ process.exit(1);
135
+ });
136
+ break;
137
+ case 'extract':
138
+ extractCommand(process.argv.slice(3)).catch(err => {
139
+ console.error('Error:', err.message);
140
+ process.exit(1);
141
+ });
142
+ break;
143
+ case 'distill':
144
+ distillCommand(process.argv.slice(3)).catch(err => {
145
+ console.error('Error:', err.message);
146
+ process.exit(1);
147
+ });
148
+ break;
149
+ case 'report':
150
+ reportCommand(process.argv.slice(3)).catch(err => {
151
+ console.error('Error:', err.message);
152
+ process.exit(1);
153
+ });
154
+ break;
155
+ case 'standup':
156
+ standupCommand(process.argv.slice(3)).catch(err => {
157
+ console.error('Error:', err.message);
158
+ process.exit(1);
159
+ });
160
+ break;
161
+ case 'escalate':
162
+ escalateCommand(process.argv.slice(3)).catch(err => {
163
+ console.error('Error:', err.message);
164
+ process.exit(1);
165
+ });
166
+ break;
167
+ case 'guard': {
168
+ const guardArgs = process.argv.slice(3);
169
+ const guardSub = guardArgs[0];
170
+ if (guardSub === 'list' || guardSub === 'enable' || guardSub === 'disable') {
171
+ guardManageCommand(guardArgs).catch(err => {
172
+ console.error('Error:', err.message);
173
+ process.exit(1);
174
+ });
175
+ }
176
+ else {
177
+ guardCommand(guardArgs).catch(err => {
178
+ console.error('Error:', err.message);
179
+ process.exit(1);
180
+ });
181
+ }
182
+ break;
183
+ }
184
+ case 'plugin':
185
+ pluginCommand(process.argv.slice(3)).catch(err => {
186
+ console.error('Error:', err.message);
187
+ process.exit(1);
188
+ });
189
+ break;
190
+ case 'dashboard':
191
+ dashboardCommand(process.argv.slice(3)).catch(err => {
192
+ console.error('Error:', err.message);
193
+ process.exit(1);
194
+ });
195
+ break;
196
+ case 'map':
197
+ mapCommand(process.argv.slice(3)).catch(err => {
198
+ console.error('Error:', err.message);
199
+ process.exit(1);
200
+ });
201
+ break;
202
+ case 'flows':
203
+ flowsCommand(process.argv.slice(3)).catch(err => {
204
+ console.error('Error:', err.message);
205
+ process.exit(1);
206
+ });
207
+ break;
208
+ default:
209
+ console.log(`
210
+ SLOPE CLI — Sprint Lifecycle & Operational Performance Engine
211
+
212
+ Usage:
213
+ slope init [--claude-code|--cursor|--opencode|--generic|--all] Initialize .slope/ directory
214
+ slope init --team Enable multi-developer team mode
215
+ slope card Show handicap card
216
+ slope card --player=<name> Show handicap for a specific player
217
+ slope card --team Show per-player comparison table
218
+ slope validate [path] Validate scorecard(s)
219
+ slope review [path] [--plain] Format sprint review markdown
220
+ slope review start [--rounds=N|--tier=T] Start plan review lifecycle
221
+ slope review round Record a completed review round
222
+ slope review status Show current review state
223
+ slope review reset Clear review state
224
+ slope briefing [--sprint=N] [options] Pre-round briefing
225
+ slope plan --complexity=<level> Pre-shot advisor (club + training + hazards)
226
+ slope classify --scope=... ... Classify a shot from execution trace
227
+ slope claim --target=<t> [--force] Claim a ticket or area for the sprint
228
+ slope release --id=<id> Release a claim by ID
229
+ slope release --target=<t> [--player=<p>] Release a claim by target
230
+ slope status [--sprint=N] Show sprint course status + conflicts
231
+ slope tournament --id=<id> --sprints=N..M Build tournament review from sprints
232
+ slope auto-card --sprint=<N> [options] Generate scorecard from git + CI signals
233
+ slope hook add|remove|list|show Manage lifecycle hooks
234
+ slope hook add --level=full Install all guidance hooks
235
+ slope guard <name> Run a guard handler (reads stdin)
236
+ slope guard list|enable|disable Manage guard activation
237
+ slope session start|end|heartbeat|list Manage live sessions
238
+ slope next Show next sprint number (auto-detect)
239
+ slope extract --file=<path> [options] Extract events into SLOPE store
240
+ slope distill [--auto] [--dry-run] Promote event patterns to common issues
241
+ slope standup [--session=<id>] [--json] Generate standup report from session
242
+ slope standup --ingest=<path> [--role=<id>] Ingest another agent's standup
243
+ slope report --html [--output=<path>] Generate HTML performance report
244
+ slope dashboard [--port=N] [--no-open] Live local performance dashboard
245
+ slope dashboard --player=<name> Filter dashboard to a single player
246
+ slope roadmap validate|review|status|show Strategic planning tools
247
+ slope map [--check] [--output=<path>] Generate/update codebase map
248
+ slope flows init|list|check Manage user flow definitions
249
+ slope plugin list|validate Manage custom plugins
250
+
251
+ Examples:
252
+ slope init Create .slope/ with config + example scorecard
253
+ slope init --cursor Also install Cursor IDE rules
254
+ slope init --cursor Also add SLOPE MCP server to .cursor/mcp.json
255
+ slope init --claude-code Also install Claude Code rules + hooks
256
+ slope init --opencode Also install OpenCode AGENTS.md + MCP config
257
+ slope init --team Enable multi-developer mode
258
+ slope card Show handicap across all scorecards
259
+ slope card --player=alice Show handicap for alice only
260
+ slope card --team Compare all players side-by-side
261
+ slope validate docs/retros/sprint-1.json Validate a specific scorecard
262
+ slope validate Validate all scorecards
263
+ slope review Review the latest scorecard
264
+ slope review --plain Non-technical sprint review
265
+ slope briefing Full briefing (top 10 recent gotchas)
266
+ slope briefing --categories=testing Filter by category
267
+ slope briefing --keywords=migration Filter by keyword
268
+ slope plan --complexity=medium Club recommendation for medium ticket
269
+ slope plan --complexity=large --areas=db Include hazard warnings for db area
270
+ slope classify --scope="a.ts" --modified="a.ts" --tests=pass --reverts=0
271
+ slope briefing --sprint=2 Briefing for sprint 2
272
+ slope claim --target=S2-1 --sprint=2 Claim ticket S2-1 for sprint 2
273
+ slope claim --target=packages/cli --scope=area Claim an area
274
+ slope claim --target=S2-1 --force Claim even if overlap conflict exists
275
+ slope status --sprint=2 Show all claims for sprint 2
276
+ slope release --target=S2-1 Release your claim on S2-1
277
+ slope dashboard Start live dashboard on port 3000
278
+ slope dashboard --port=8080 --no-open Custom port, no browser auto-open
279
+ `);
280
+ process.exit(subcommand ? 1 : 0);
281
+ }
282
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}