@pennyfarthing/core 6.6.0

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 (599) hide show
  1. package/README.md +293 -0
  2. package/package.json +58 -0
  3. package/packages/core/bin/pennyfarthing.js +14 -0
  4. package/packages/core/dist/bmad/context-reader.d.ts +71 -0
  5. package/packages/core/dist/bmad/context-reader.d.ts.map +1 -0
  6. package/packages/core/dist/bmad/context-reader.js +369 -0
  7. package/packages/core/dist/bmad/context-reader.js.map +1 -0
  8. package/packages/core/dist/bmad/context-reader.test.d.ts +71 -0
  9. package/packages/core/dist/bmad/context-reader.test.d.ts.map +1 -0
  10. package/packages/core/dist/bmad/context-reader.test.js +878 -0
  11. package/packages/core/dist/bmad/context-reader.test.js.map +1 -0
  12. package/packages/core/dist/bmad/epics-parser.d.ts +61 -0
  13. package/packages/core/dist/bmad/epics-parser.d.ts.map +1 -0
  14. package/packages/core/dist/bmad/epics-parser.js +331 -0
  15. package/packages/core/dist/bmad/epics-parser.js.map +1 -0
  16. package/packages/core/dist/bmad/epics-parser.test.d.ts +7 -0
  17. package/packages/core/dist/bmad/epics-parser.test.d.ts.map +1 -0
  18. package/packages/core/dist/bmad/epics-parser.test.js +449 -0
  19. package/packages/core/dist/bmad/epics-parser.test.js.map +1 -0
  20. package/packages/core/dist/bmad/index.d.ts +11 -0
  21. package/packages/core/dist/bmad/index.d.ts.map +1 -0
  22. package/packages/core/dist/bmad/index.js +24 -0
  23. package/packages/core/dist/bmad/index.js.map +1 -0
  24. package/packages/core/dist/bmad/status-sync.d.ts +173 -0
  25. package/packages/core/dist/bmad/status-sync.d.ts.map +1 -0
  26. package/packages/core/dist/bmad/status-sync.js +463 -0
  27. package/packages/core/dist/bmad/status-sync.js.map +1 -0
  28. package/packages/core/dist/bmad/status-sync.test.d.ts +7 -0
  29. package/packages/core/dist/bmad/status-sync.test.d.ts.map +1 -0
  30. package/packages/core/dist/bmad/status-sync.test.js +702 -0
  31. package/packages/core/dist/bmad/status-sync.test.js.map +1 -0
  32. package/packages/core/dist/bmad/story-exporter.d.ts +55 -0
  33. package/packages/core/dist/bmad/story-exporter.d.ts.map +1 -0
  34. package/packages/core/dist/bmad/story-exporter.js +170 -0
  35. package/packages/core/dist/bmad/story-exporter.js.map +1 -0
  36. package/packages/core/dist/bmad/story-exporter.test.d.ts +51 -0
  37. package/packages/core/dist/bmad/story-exporter.test.d.ts.map +1 -0
  38. package/packages/core/dist/bmad/story-exporter.test.js +603 -0
  39. package/packages/core/dist/bmad/story-exporter.test.js.map +1 -0
  40. package/packages/core/dist/bmad/story-parser.d.ts +44 -0
  41. package/packages/core/dist/bmad/story-parser.d.ts.map +1 -0
  42. package/packages/core/dist/bmad/story-parser.js +307 -0
  43. package/packages/core/dist/bmad/story-parser.js.map +1 -0
  44. package/packages/core/dist/bmad/story-parser.test.d.ts +44 -0
  45. package/packages/core/dist/bmad/story-parser.test.d.ts.map +1 -0
  46. package/packages/core/dist/bmad/story-parser.test.js +693 -0
  47. package/packages/core/dist/bmad/story-parser.test.js.map +1 -0
  48. package/packages/core/dist/cli/commands/command.d.ts +28 -0
  49. package/packages/core/dist/cli/commands/command.d.ts.map +1 -0
  50. package/packages/core/dist/cli/commands/command.js +399 -0
  51. package/packages/core/dist/cli/commands/command.js.map +1 -0
  52. package/packages/core/dist/cli/commands/cyclist.d.ts +46 -0
  53. package/packages/core/dist/cli/commands/cyclist.d.ts.map +1 -0
  54. package/packages/core/dist/cli/commands/cyclist.js +191 -0
  55. package/packages/core/dist/cli/commands/cyclist.js.map +1 -0
  56. package/packages/core/dist/cli/commands/cyclist.test.d.ts +13 -0
  57. package/packages/core/dist/cli/commands/cyclist.test.d.ts.map +1 -0
  58. package/packages/core/dist/cli/commands/cyclist.test.js +243 -0
  59. package/packages/core/dist/cli/commands/cyclist.test.js.map +1 -0
  60. package/packages/core/dist/cli/commands/doctor.d.ts +9 -0
  61. package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -0
  62. package/packages/core/dist/cli/commands/doctor.js +652 -0
  63. package/packages/core/dist/cli/commands/doctor.js.map +1 -0
  64. package/packages/core/dist/cli/commands/init.d.ts +8 -0
  65. package/packages/core/dist/cli/commands/init.d.ts.map +1 -0
  66. package/packages/core/dist/cli/commands/init.js +524 -0
  67. package/packages/core/dist/cli/commands/init.js.map +1 -0
  68. package/packages/core/dist/cli/commands/skill.d.ts +28 -0
  69. package/packages/core/dist/cli/commands/skill.d.ts.map +1 -0
  70. package/packages/core/dist/cli/commands/skill.js +416 -0
  71. package/packages/core/dist/cli/commands/skill.js.map +1 -0
  72. package/packages/core/dist/cli/commands/theme.d.ts +21 -0
  73. package/packages/core/dist/cli/commands/theme.d.ts.map +1 -0
  74. package/packages/core/dist/cli/commands/theme.js +201 -0
  75. package/packages/core/dist/cli/commands/theme.js.map +1 -0
  76. package/packages/core/dist/cli/commands/uninstall.d.ts +8 -0
  77. package/packages/core/dist/cli/commands/uninstall.d.ts.map +1 -0
  78. package/packages/core/dist/cli/commands/uninstall.js +237 -0
  79. package/packages/core/dist/cli/commands/uninstall.js.map +1 -0
  80. package/packages/core/dist/cli/commands/update.d.ts +9 -0
  81. package/packages/core/dist/cli/commands/update.d.ts.map +1 -0
  82. package/packages/core/dist/cli/commands/update.js +545 -0
  83. package/packages/core/dist/cli/commands/update.js.map +1 -0
  84. package/packages/core/dist/cli/commands/version.d.ts +2 -0
  85. package/packages/core/dist/cli/commands/version.d.ts.map +1 -0
  86. package/packages/core/dist/cli/commands/version.js +28 -0
  87. package/packages/core/dist/cli/commands/version.js.map +1 -0
  88. package/packages/core/dist/cli/customization.test.d.ts +12 -0
  89. package/packages/core/dist/cli/customization.test.d.ts.map +1 -0
  90. package/packages/core/dist/cli/customization.test.js +84 -0
  91. package/packages/core/dist/cli/customization.test.js.map +1 -0
  92. package/packages/core/dist/cli/cyclist-migration.test.d.ts +16 -0
  93. package/packages/core/dist/cli/cyclist-migration.test.d.ts.map +1 -0
  94. package/packages/core/dist/cli/cyclist-migration.test.js +224 -0
  95. package/packages/core/dist/cli/cyclist-migration.test.js.map +1 -0
  96. package/packages/core/dist/cli/index.d.ts +3 -0
  97. package/packages/core/dist/cli/index.d.ts.map +1 -0
  98. package/packages/core/dist/cli/index.js +174 -0
  99. package/packages/core/dist/cli/index.js.map +1 -0
  100. package/packages/core/dist/cli/ocean-profiles.test.d.ts +13 -0
  101. package/packages/core/dist/cli/ocean-profiles.test.d.ts.map +1 -0
  102. package/packages/core/dist/cli/ocean-profiles.test.js +134 -0
  103. package/packages/core/dist/cli/ocean-profiles.test.js.map +1 -0
  104. package/packages/core/dist/cli/theme-maker.test.d.ts +11 -0
  105. package/packages/core/dist/cli/theme-maker.test.d.ts.map +1 -0
  106. package/packages/core/dist/cli/theme-maker.test.js +356 -0
  107. package/packages/core/dist/cli/theme-maker.test.js.map +1 -0
  108. package/packages/core/dist/cli/utils/constants.d.ts +60 -0
  109. package/packages/core/dist/cli/utils/constants.d.ts.map +1 -0
  110. package/packages/core/dist/cli/utils/constants.js +52 -0
  111. package/packages/core/dist/cli/utils/constants.js.map +1 -0
  112. package/packages/core/dist/cli/utils/files.d.ts +71 -0
  113. package/packages/core/dist/cli/utils/files.d.ts.map +1 -0
  114. package/packages/core/dist/cli/utils/files.js +162 -0
  115. package/packages/core/dist/cli/utils/files.js.map +1 -0
  116. package/packages/core/dist/cli/utils/logger.d.ts +26 -0
  117. package/packages/core/dist/cli/utils/logger.d.ts.map +1 -0
  118. package/packages/core/dist/cli/utils/logger.js +88 -0
  119. package/packages/core/dist/cli/utils/logger.js.map +1 -0
  120. package/packages/core/dist/cli/utils/manifest.d.ts +47 -0
  121. package/packages/core/dist/cli/utils/manifest.d.ts.map +1 -0
  122. package/packages/core/dist/cli/utils/manifest.js +90 -0
  123. package/packages/core/dist/cli/utils/manifest.js.map +1 -0
  124. package/packages/core/dist/cli/utils/node-modules.d.ts +6 -0
  125. package/packages/core/dist/cli/utils/node-modules.d.ts.map +1 -0
  126. package/packages/core/dist/cli/utils/node-modules.js +22 -0
  127. package/packages/core/dist/cli/utils/node-modules.js.map +1 -0
  128. package/packages/core/dist/cli/utils/prompts.d.ts +34 -0
  129. package/packages/core/dist/cli/utils/prompts.d.ts.map +1 -0
  130. package/packages/core/dist/cli/utils/prompts.js +93 -0
  131. package/packages/core/dist/cli/utils/prompts.js.map +1 -0
  132. package/packages/core/dist/cli/utils/symlinks.d.ts +29 -0
  133. package/packages/core/dist/cli/utils/symlinks.d.ts.map +1 -0
  134. package/packages/core/dist/cli/utils/symlinks.js +181 -0
  135. package/packages/core/dist/cli/utils/symlinks.js.map +1 -0
  136. package/packages/core/dist/cli/utils/themes.d.ts +104 -0
  137. package/packages/core/dist/cli/utils/themes.d.ts.map +1 -0
  138. package/packages/core/dist/cli/utils/themes.js +393 -0
  139. package/packages/core/dist/cli/utils/themes.js.map +1 -0
  140. package/packages/core/dist/cli/utils/themes.test.d.ts +12 -0
  141. package/packages/core/dist/cli/utils/themes.test.d.ts.map +1 -0
  142. package/packages/core/dist/cli/utils/themes.test.js +144 -0
  143. package/packages/core/dist/cli/utils/themes.test.js.map +1 -0
  144. package/packages/core/dist/cli/utils/version.d.ts +10 -0
  145. package/packages/core/dist/cli/utils/version.d.ts.map +1 -0
  146. package/packages/core/dist/cli/utils/version.js +63 -0
  147. package/packages/core/dist/cli/utils/version.js.map +1 -0
  148. package/packages/core/dist/cli/workspace.test.d.ts +8 -0
  149. package/packages/core/dist/cli/workspace.test.d.ts.map +1 -0
  150. package/packages/core/dist/cli/workspace.test.js +154 -0
  151. package/packages/core/dist/cli/workspace.test.js.map +1 -0
  152. package/packages/core/dist/index.d.ts +6 -0
  153. package/packages/core/dist/index.d.ts.map +1 -0
  154. package/packages/core/dist/index.js +10 -0
  155. package/packages/core/dist/index.js.map +1 -0
  156. package/packages/core/dist/permissions/index.d.ts +9 -0
  157. package/packages/core/dist/permissions/index.d.ts.map +1 -0
  158. package/packages/core/dist/permissions/index.js +13 -0
  159. package/packages/core/dist/permissions/index.js.map +1 -0
  160. package/packages/core/dist/permissions/permission-schema.d.ts +89 -0
  161. package/packages/core/dist/permissions/permission-schema.d.ts.map +1 -0
  162. package/packages/core/dist/permissions/permission-schema.js +120 -0
  163. package/packages/core/dist/permissions/permission-schema.js.map +1 -0
  164. package/packages/core/dist/permissions/permission-schema.test.d.ts +40 -0
  165. package/packages/core/dist/permissions/permission-schema.test.d.ts.map +1 -0
  166. package/packages/core/dist/permissions/permission-schema.test.js +367 -0
  167. package/packages/core/dist/permissions/permission-schema.test.js.map +1 -0
  168. package/packages/core/dist/scripts/add-ocean-profiles.d.ts +9 -0
  169. package/packages/core/dist/scripts/add-ocean-profiles.d.ts.map +1 -0
  170. package/packages/core/dist/scripts/add-ocean-profiles.js +695 -0
  171. package/packages/core/dist/scripts/add-ocean-profiles.js.map +1 -0
  172. package/packages/core/dist/scripts/benchmark-integration.d.ts +182 -0
  173. package/packages/core/dist/scripts/benchmark-integration.d.ts.map +1 -0
  174. package/packages/core/dist/scripts/benchmark-integration.js +691 -0
  175. package/packages/core/dist/scripts/benchmark-integration.js.map +1 -0
  176. package/packages/core/dist/scripts/benchmark-integration.test.d.ts +13 -0
  177. package/packages/core/dist/scripts/benchmark-integration.test.d.ts.map +1 -0
  178. package/packages/core/dist/scripts/benchmark-integration.test.js +680 -0
  179. package/packages/core/dist/scripts/benchmark-integration.test.js.map +1 -0
  180. package/packages/core/dist/scripts/debugging-scenarios.test.d.ts +18 -0
  181. package/packages/core/dist/scripts/debugging-scenarios.test.d.ts.map +1 -0
  182. package/packages/core/dist/scripts/debugging-scenarios.test.js +317 -0
  183. package/packages/core/dist/scripts/debugging-scenarios.test.js.map +1 -0
  184. package/packages/core/dist/scripts/generate-all-faces.d.ts +10 -0
  185. package/packages/core/dist/scripts/generate-all-faces.d.ts.map +1 -0
  186. package/packages/core/dist/scripts/generate-all-faces.js +256 -0
  187. package/packages/core/dist/scripts/generate-all-faces.js.map +1 -0
  188. package/packages/core/dist/scripts/generate-all-faces.test.d.ts +17 -0
  189. package/packages/core/dist/scripts/generate-all-faces.test.d.ts.map +1 -0
  190. package/packages/core/dist/scripts/generate-all-faces.test.js +372 -0
  191. package/packages/core/dist/scripts/generate-all-faces.test.js.map +1 -0
  192. package/packages/core/dist/scripts/generate-all-spiders.d.ts +10 -0
  193. package/packages/core/dist/scripts/generate-all-spiders.d.ts.map +1 -0
  194. package/packages/core/dist/scripts/generate-all-spiders.js +306 -0
  195. package/packages/core/dist/scripts/generate-all-spiders.js.map +1 -0
  196. package/packages/core/dist/scripts/generate-ascii-face.d.ts +52 -0
  197. package/packages/core/dist/scripts/generate-ascii-face.d.ts.map +1 -0
  198. package/packages/core/dist/scripts/generate-ascii-face.js +155 -0
  199. package/packages/core/dist/scripts/generate-ascii-face.js.map +1 -0
  200. package/packages/core/dist/scripts/generate-face.d.ts +52 -0
  201. package/packages/core/dist/scripts/generate-face.d.ts.map +1 -0
  202. package/packages/core/dist/scripts/generate-face.js +199 -0
  203. package/packages/core/dist/scripts/generate-face.js.map +1 -0
  204. package/packages/core/dist/scripts/generate-face.test.d.ts +13 -0
  205. package/packages/core/dist/scripts/generate-face.test.d.ts.map +1 -0
  206. package/packages/core/dist/scripts/generate-face.test.js +301 -0
  207. package/packages/core/dist/scripts/generate-face.test.js.map +1 -0
  208. package/packages/core/dist/scripts/generate-report.d.ts +65 -0
  209. package/packages/core/dist/scripts/generate-report.d.ts.map +1 -0
  210. package/packages/core/dist/scripts/generate-report.js +378 -0
  211. package/packages/core/dist/scripts/generate-report.js.map +1 -0
  212. package/packages/core/dist/scripts/generate-report.test.d.ts +13 -0
  213. package/packages/core/dist/scripts/generate-report.test.d.ts.map +1 -0
  214. package/packages/core/dist/scripts/generate-report.test.js +363 -0
  215. package/packages/core/dist/scripts/generate-report.test.js.map +1 -0
  216. package/packages/core/dist/scripts/generate-spider-report.d.ts +65 -0
  217. package/packages/core/dist/scripts/generate-spider-report.d.ts.map +1 -0
  218. package/packages/core/dist/scripts/generate-spider-report.js +366 -0
  219. package/packages/core/dist/scripts/generate-spider-report.js.map +1 -0
  220. package/packages/core/dist/scripts/generate-spider-report.test.d.ts +13 -0
  221. package/packages/core/dist/scripts/generate-spider-report.test.d.ts.map +1 -0
  222. package/packages/core/dist/scripts/generate-spider-report.test.js +367 -0
  223. package/packages/core/dist/scripts/generate-spider-report.test.js.map +1 -0
  224. package/packages/core/dist/scripts/generate-spider.d.ts +37 -0
  225. package/packages/core/dist/scripts/generate-spider.d.ts.map +1 -0
  226. package/packages/core/dist/scripts/generate-spider.js +315 -0
  227. package/packages/core/dist/scripts/generate-spider.js.map +1 -0
  228. package/packages/core/dist/scripts/generate-spider.test.d.ts +14 -0
  229. package/packages/core/dist/scripts/generate-spider.test.d.ts.map +1 -0
  230. package/packages/core/dist/scripts/generate-spider.test.js +269 -0
  231. package/packages/core/dist/scripts/generate-spider.test.js.map +1 -0
  232. package/packages/core/dist/scripts/job-fair-aggregator.d.ts +150 -0
  233. package/packages/core/dist/scripts/job-fair-aggregator.d.ts.map +1 -0
  234. package/packages/core/dist/scripts/job-fair-aggregator.js +547 -0
  235. package/packages/core/dist/scripts/job-fair-aggregator.js.map +1 -0
  236. package/packages/core/dist/scripts/job-fair-aggregator.test.d.ts +14 -0
  237. package/packages/core/dist/scripts/job-fair-aggregator.test.d.ts.map +1 -0
  238. package/packages/core/dist/scripts/job-fair-aggregator.test.js +616 -0
  239. package/packages/core/dist/scripts/job-fair-aggregator.test.js.map +1 -0
  240. package/packages/core/dist/scripts/run-ci.test.d.ts +20 -0
  241. package/packages/core/dist/scripts/run-ci.test.d.ts.map +1 -0
  242. package/packages/core/dist/scripts/run-ci.test.js +127 -0
  243. package/packages/core/dist/scripts/run-ci.test.js.map +1 -0
  244. package/packages/core/dist/scripts/theme-detail.test.d.ts +10 -0
  245. package/packages/core/dist/scripts/theme-detail.test.d.ts.map +1 -0
  246. package/packages/core/dist/scripts/theme-detail.test.js +199 -0
  247. package/packages/core/dist/scripts/theme-detail.test.js.map +1 -0
  248. package/packages/core/dist/scripts/validate-ocean-profiles.d.ts +9 -0
  249. package/packages/core/dist/scripts/validate-ocean-profiles.d.ts.map +1 -0
  250. package/packages/core/dist/scripts/validate-ocean-profiles.js +130 -0
  251. package/packages/core/dist/scripts/validate-ocean-profiles.js.map +1 -0
  252. package/packages/core/dist/workflow/generic-handoff.d.ts +235 -0
  253. package/packages/core/dist/workflow/generic-handoff.d.ts.map +1 -0
  254. package/packages/core/dist/workflow/generic-handoff.js +358 -0
  255. package/packages/core/dist/workflow/generic-handoff.js.map +1 -0
  256. package/packages/core/dist/workflow/generic-handoff.test.d.ts +21 -0
  257. package/packages/core/dist/workflow/generic-handoff.test.d.ts.map +1 -0
  258. package/packages/core/dist/workflow/generic-handoff.test.js +499 -0
  259. package/packages/core/dist/workflow/generic-handoff.test.js.map +1 -0
  260. package/packages/core/dist/workflow/generic-sm-finish.d.ts +89 -0
  261. package/packages/core/dist/workflow/generic-sm-finish.d.ts.map +1 -0
  262. package/packages/core/dist/workflow/generic-sm-finish.js +157 -0
  263. package/packages/core/dist/workflow/generic-sm-finish.js.map +1 -0
  264. package/packages/core/dist/workflow/generic-sm-setup.d.ts +138 -0
  265. package/packages/core/dist/workflow/generic-sm-setup.d.ts.map +1 -0
  266. package/packages/core/dist/workflow/generic-sm-setup.js +382 -0
  267. package/packages/core/dist/workflow/generic-sm-setup.js.map +1 -0
  268. package/packages/core/dist/workflow/sm-subagents.test.d.ts +23 -0
  269. package/packages/core/dist/workflow/sm-subagents.test.d.ts.map +1 -0
  270. package/packages/core/dist/workflow/sm-subagents.test.js +727 -0
  271. package/packages/core/dist/workflow/sm-subagents.test.js.map +1 -0
  272. package/packages/core/dist/workflow/story-workflow-routing.test.d.ts +17 -0
  273. package/packages/core/dist/workflow/story-workflow-routing.test.d.ts.map +1 -0
  274. package/packages/core/dist/workflow/story-workflow-routing.test.js +559 -0
  275. package/packages/core/dist/workflow/story-workflow-routing.test.js.map +1 -0
  276. package/packages/core/dist/workflow/test-cache.d.ts +131 -0
  277. package/packages/core/dist/workflow/test-cache.d.ts.map +1 -0
  278. package/packages/core/dist/workflow/test-cache.js +226 -0
  279. package/packages/core/dist/workflow/test-cache.js.map +1 -0
  280. package/packages/core/dist/workflow/test-cache.test.d.ts +17 -0
  281. package/packages/core/dist/workflow/test-cache.test.d.ts.map +1 -0
  282. package/packages/core/dist/workflow/test-cache.test.js +438 -0
  283. package/packages/core/dist/workflow/test-cache.test.js.map +1 -0
  284. package/packages/core/dist/workflow/workflow-loader.d.ts +76 -0
  285. package/packages/core/dist/workflow/workflow-loader.d.ts.map +1 -0
  286. package/packages/core/dist/workflow/workflow-loader.js +133 -0
  287. package/packages/core/dist/workflow/workflow-loader.js.map +1 -0
  288. package/packages/core/dist/workflow/workflow-loader.test.d.ts +15 -0
  289. package/packages/core/dist/workflow/workflow-loader.test.d.ts.map +1 -0
  290. package/packages/core/dist/workflow/workflow-loader.test.js +354 -0
  291. package/packages/core/dist/workflow/workflow-loader.test.js.map +1 -0
  292. package/packages/core/dist/workflow/workflow-migration.test.d.ts +17 -0
  293. package/packages/core/dist/workflow/workflow-migration.test.d.ts.map +1 -0
  294. package/packages/core/dist/workflow/workflow-migration.test.js +372 -0
  295. package/packages/core/dist/workflow/workflow-migration.test.js.map +1 -0
  296. package/packages/core/dist/workflow/workflow-router.d.ts +55 -0
  297. package/packages/core/dist/workflow/workflow-router.d.ts.map +1 -0
  298. package/packages/core/dist/workflow/workflow-router.js +245 -0
  299. package/packages/core/dist/workflow/workflow-router.js.map +1 -0
  300. package/packages/core/dist/workflow/workflow-router.test.d.ts +20 -0
  301. package/packages/core/dist/workflow/workflow-router.test.d.ts.map +1 -0
  302. package/packages/core/dist/workflow/workflow-router.test.js +607 -0
  303. package/packages/core/dist/workflow/workflow-router.test.js.map +1 -0
  304. package/packages/core/dist/workflow/workflow-schema.d.ts +98 -0
  305. package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -0
  306. package/packages/core/dist/workflow/workflow-schema.js +230 -0
  307. package/packages/core/dist/workflow/workflow-schema.js.map +1 -0
  308. package/packages/core/dist/workflow/workflow-schema.test.d.ts +45 -0
  309. package/packages/core/dist/workflow/workflow-schema.test.d.ts.map +1 -0
  310. package/packages/core/dist/workflow/workflow-schema.test.js +512 -0
  311. package/packages/core/dist/workflow/workflow-schema.test.js.map +1 -0
  312. package/pennyfarthing-dist/agents/README.md +397 -0
  313. package/pennyfarthing-dist/agents/architect.md +171 -0
  314. package/pennyfarthing-dist/agents/dev.md +225 -0
  315. package/pennyfarthing-dist/agents/devops.md +183 -0
  316. package/pennyfarthing-dist/agents/generic-handoff.md +451 -0
  317. package/pennyfarthing-dist/agents/generic-sm-finish.md +261 -0
  318. package/pennyfarthing-dist/agents/generic-sm-setup.md +214 -0
  319. package/pennyfarthing-dist/agents/orchestrator.md +316 -0
  320. package/pennyfarthing-dist/agents/pm.md +153 -0
  321. package/pennyfarthing-dist/agents/reviewer-preflight.md +224 -0
  322. package/pennyfarthing-dist/agents/reviewer.md +315 -0
  323. package/pennyfarthing-dist/agents/sm-file-summary.md +109 -0
  324. package/pennyfarthing-dist/agents/sm-handoff.md +97 -0
  325. package/pennyfarthing-dist/agents/sm.md +480 -0
  326. package/pennyfarthing-dist/agents/tea.md +191 -0
  327. package/pennyfarthing-dist/agents/tech-writer.md +148 -0
  328. package/pennyfarthing-dist/agents/testing-runner.md +420 -0
  329. package/pennyfarthing-dist/agents/ux-designer.md +158 -0
  330. package/pennyfarthing-dist/agents/workflow-status-check.md +332 -0
  331. package/pennyfarthing-dist/commands/architect.md +62 -0
  332. package/pennyfarthing-dist/commands/benchmark-control.md +69 -0
  333. package/pennyfarthing-dist/commands/benchmark.md +467 -0
  334. package/pennyfarthing-dist/commands/brainstorm.md +91 -0
  335. package/pennyfarthing-dist/commands/check.md +156 -0
  336. package/pennyfarthing-dist/commands/chore.md +178 -0
  337. package/pennyfarthing-dist/commands/close-epic.md +136 -0
  338. package/pennyfarthing-dist/commands/continue-session.md +184 -0
  339. package/pennyfarthing-dist/commands/create-branches-from-story.md +374 -0
  340. package/pennyfarthing-dist/commands/create-theme.md +29 -0
  341. package/pennyfarthing-dist/commands/dev.md +60 -0
  342. package/pennyfarthing-dist/commands/devops.md +59 -0
  343. package/pennyfarthing-dist/commands/git-cleanup.md +340 -0
  344. package/pennyfarthing-dist/commands/health-check.md +108 -0
  345. package/pennyfarthing-dist/commands/help.md +264 -0
  346. package/pennyfarthing-dist/commands/job-fair.md +102 -0
  347. package/pennyfarthing-dist/commands/list-themes.md +17 -0
  348. package/pennyfarthing-dist/commands/new-work.md +127 -0
  349. package/pennyfarthing-dist/commands/orchestrator.md +56 -0
  350. package/pennyfarthing-dist/commands/parallel-work.md +71 -0
  351. package/pennyfarthing-dist/commands/party-mode.md +67 -0
  352. package/pennyfarthing-dist/commands/permissions.md +193 -0
  353. package/pennyfarthing-dist/commands/pm.md +60 -0
  354. package/pennyfarthing-dist/commands/prime.md +140 -0
  355. package/pennyfarthing-dist/commands/release.md +58 -0
  356. package/pennyfarthing-dist/commands/repo-status.md +49 -0
  357. package/pennyfarthing-dist/commands/retro.md +200 -0
  358. package/pennyfarthing-dist/commands/reviewer.md +64 -0
  359. package/pennyfarthing-dist/commands/run-ci.md +116 -0
  360. package/pennyfarthing-dist/commands/set-theme.md +52 -0
  361. package/pennyfarthing-dist/commands/show-theme.md +21 -0
  362. package/pennyfarthing-dist/commands/sm.md +70 -0
  363. package/pennyfarthing-dist/commands/solo.md +411 -0
  364. package/pennyfarthing-dist/commands/sprint-planning.md +109 -0
  365. package/pennyfarthing-dist/commands/start-epic.md +156 -0
  366. package/pennyfarthing-dist/commands/sync-epic-to-jira.md +184 -0
  367. package/pennyfarthing-dist/commands/sync-work-with-sprint.md +376 -0
  368. package/pennyfarthing-dist/commands/tea.md +63 -0
  369. package/pennyfarthing-dist/commands/tech-writer.md +53 -0
  370. package/pennyfarthing-dist/commands/theme-maker.md +671 -0
  371. package/pennyfarthing-dist/commands/update-domain-docs.md +83 -0
  372. package/pennyfarthing-dist/commands/ux-designer.md +62 -0
  373. package/pennyfarthing-dist/commands/work.md +111 -0
  374. package/pennyfarthing-dist/guides/AGENT-COORDINATION.md +480 -0
  375. package/pennyfarthing-dist/guides/AGENT-SCOPES.md +201 -0
  376. package/pennyfarthing-dist/guides/HOOKS.md +230 -0
  377. package/pennyfarthing-dist/guides/PROMPT-PATTERNS.md +338 -0
  378. package/pennyfarthing-dist/guides/SESSION-ARTIFACTS.md +193 -0
  379. package/pennyfarthing-dist/guides/agent-template-strategic.md +148 -0
  380. package/pennyfarthing-dist/guides/agent-template-tactical.md +162 -0
  381. package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +746 -0
  382. package/pennyfarthing-dist/guides/patterns/fan-out-fan-in-pattern.md +574 -0
  383. package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +488 -0
  384. package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +402 -0
  385. package/pennyfarthing-dist/guides/permission-protocol.md +188 -0
  386. package/pennyfarthing-dist/guides/persona-loading.md +46 -0
  387. package/pennyfarthing-dist/guides/persona-system.md +294 -0
  388. package/pennyfarthing-dist/guides/shared-agent-behavior.md +388 -0
  389. package/pennyfarthing-dist/guides/shared-context.md +147 -0
  390. package/pennyfarthing-dist/guides/strategic-agent-behavior.md +348 -0
  391. package/pennyfarthing-dist/guides/tactical-agent-behavior.md +1041 -0
  392. package/pennyfarthing-dist/guides/workflow-schema.md +195 -0
  393. package/pennyfarthing-dist/guides/worktree-mode.md +113 -0
  394. package/pennyfarthing-dist/output-styles/teaching.md +33 -0
  395. package/pennyfarthing-dist/output-styles/terse.md +20 -0
  396. package/pennyfarthing-dist/output-styles/verbose.md +28 -0
  397. package/pennyfarthing-dist/personas/themes/1984.yaml +312 -0
  398. package/pennyfarthing-dist/personas/themes/a-team.yaml +207 -0
  399. package/pennyfarthing-dist/personas/themes/agatha-christie.yaml +300 -0
  400. package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +330 -0
  401. package/pennyfarthing-dist/personas/themes/all-stars.yaml +332 -0
  402. package/pennyfarthing-dist/personas/themes/ancient-philosophers.yaml +320 -0
  403. package/pennyfarthing-dist/personas/themes/ancient-strategists.yaml +306 -0
  404. package/pennyfarthing-dist/personas/themes/arcane.yaml +288 -0
  405. package/pennyfarthing-dist/personas/themes/arthurian-mythos.yaml +331 -0
  406. package/pennyfarthing-dist/personas/themes/avatar-the-last-airbender.yaml +288 -0
  407. package/pennyfarthing-dist/personas/themes/babylon-5.yaml +288 -0
  408. package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +288 -0
  409. package/pennyfarthing-dist/personas/themes/better-call-saul.yaml +288 -0
  410. package/pennyfarthing-dist/personas/themes/big-lebowski.yaml +300 -0
  411. package/pennyfarthing-dist/personas/themes/black-sails.yaml +300 -0
  412. package/pennyfarthing-dist/personas/themes/blade-runner.yaml +295 -0
  413. package/pennyfarthing-dist/personas/themes/bobiverse.yaml +288 -0
  414. package/pennyfarthing-dist/personas/themes/breaking-bad.yaml +327 -0
  415. package/pennyfarthing-dist/personas/themes/catch-22.yaml +316 -0
  416. package/pennyfarthing-dist/personas/themes/classical-composers.yaml +310 -0
  417. package/pennyfarthing-dist/personas/themes/control.yaml +197 -0
  418. package/pennyfarthing-dist/personas/themes/count-of-monte-cristo.yaml +320 -0
  419. package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +323 -0
  420. package/pennyfarthing-dist/personas/themes/deadwood.yaml +300 -0
  421. package/pennyfarthing-dist/personas/themes/dickens.yaml +320 -0
  422. package/pennyfarthing-dist/personas/themes/discworld.yaml +332 -0
  423. package/pennyfarthing-dist/personas/themes/doctor-who.yaml +290 -0
  424. package/pennyfarthing-dist/personas/themes/don-quixote.yaml +320 -0
  425. package/pennyfarthing-dist/personas/themes/dune.yaml +307 -0
  426. package/pennyfarthing-dist/personas/themes/enlightenment-thinkers.yaml +320 -0
  427. package/pennyfarthing-dist/personas/themes/expeditionary-force.yaml +288 -0
  428. package/pennyfarthing-dist/personas/themes/fargo.yaml +330 -0
  429. package/pennyfarthing-dist/personas/themes/film-auteurs.yaml +312 -0
  430. package/pennyfarthing-dist/personas/themes/firefly.yaml +328 -0
  431. package/pennyfarthing-dist/personas/themes/foundation.yaml +290 -0
  432. package/pennyfarthing-dist/personas/themes/futurama.yaml +321 -0
  433. package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +290 -0
  434. package/pennyfarthing-dist/personas/themes/gilligans-island.yaml +243 -0
  435. package/pennyfarthing-dist/personas/themes/gothic-literature.yaml +308 -0
  436. package/pennyfarthing-dist/personas/themes/great-gatsby.yaml +308 -0
  437. package/pennyfarthing-dist/personas/themes/greek-mythology.yaml +330 -0
  438. package/pennyfarthing-dist/personas/themes/hannibal.yaml +300 -0
  439. package/pennyfarthing-dist/personas/themes/harry-potter.yaml +324 -0
  440. package/pennyfarthing-dist/personas/themes/his-dark-materials.yaml +291 -0
  441. package/pennyfarthing-dist/personas/themes/historical-figures.yaml +288 -0
  442. package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +331 -0
  443. package/pennyfarthing-dist/personas/themes/house-md.yaml +321 -0
  444. package/pennyfarthing-dist/personas/themes/imperial-radch.yaml +289 -0
  445. package/pennyfarthing-dist/personas/themes/inspector-morse.yaml +300 -0
  446. package/pennyfarthing-dist/personas/themes/jane-austen.yaml +287 -0
  447. package/pennyfarthing-dist/personas/themes/jazz-legends.yaml +320 -0
  448. package/pennyfarthing-dist/personas/themes/justified.yaml +300 -0
  449. package/pennyfarthing-dist/personas/themes/legion-of-doom.yaml +219 -0
  450. package/pennyfarthing-dist/personas/themes/les-miserables.yaml +299 -0
  451. package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +334 -0
  452. package/pennyfarthing-dist/personas/themes/lovecraft-mythos.yaml +334 -0
  453. package/pennyfarthing-dist/personas/themes/mad-max.yaml +355 -0
  454. package/pennyfarthing-dist/personas/themes/mad-men.yaml +289 -0
  455. package/pennyfarthing-dist/personas/themes/marvel-mcu.yaml +300 -0
  456. package/pennyfarthing-dist/personas/themes/mash.yaml +334 -0
  457. package/pennyfarthing-dist/personas/themes/mass-effect.yaml +289 -0
  458. package/pennyfarthing-dist/personas/themes/military-commanders.yaml +306 -0
  459. package/pennyfarthing-dist/personas/themes/moby-dick.yaml +320 -0
  460. package/pennyfarthing-dist/personas/themes/monty-python.yaml +303 -0
  461. package/pennyfarthing-dist/personas/themes/neuromancer.yaml +300 -0
  462. package/pennyfarthing-dist/personas/themes/norse-mythology.yaml +329 -0
  463. package/pennyfarthing-dist/personas/themes/parks-and-rec.yaml +242 -0
  464. package/pennyfarthing-dist/personas/themes/peaky-blinders.yaml +298 -0
  465. package/pennyfarthing-dist/personas/themes/princess-bride.yaml +220 -0
  466. package/pennyfarthing-dist/personas/themes/renaissance-masters.yaml +320 -0
  467. package/pennyfarthing-dist/personas/themes/rome.yaml +300 -0
  468. package/pennyfarthing-dist/personas/themes/russian-masters.yaml +318 -0
  469. package/pennyfarthing-dist/personas/themes/sandman.yaml +288 -0
  470. package/pennyfarthing-dist/personas/themes/scientific-revolutionaries.yaml +320 -0
  471. package/pennyfarthing-dist/personas/themes/shakespeare.yaml +301 -0
  472. package/pennyfarthing-dist/personas/themes/sherlock-holmes.yaml +289 -0
  473. package/pennyfarthing-dist/personas/themes/snow-crash.yaml +288 -0
  474. package/pennyfarthing-dist/personas/themes/software-pioneers.yaml +300 -0
  475. package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +230 -0
  476. package/pennyfarthing-dist/personas/themes/star-trek-tos.yaml +210 -0
  477. package/pennyfarthing-dist/personas/themes/star-wars.yaml +303 -0
  478. package/pennyfarthing-dist/personas/themes/succession.yaml +300 -0
  479. package/pennyfarthing-dist/personas/themes/superfriends.yaml +208 -0
  480. package/pennyfarthing-dist/personas/themes/ted-lasso.yaml +236 -0
  481. package/pennyfarthing-dist/personas/themes/the-americans.yaml +300 -0
  482. package/pennyfarthing-dist/personas/themes/the-crown.yaml +300 -0
  483. package/pennyfarthing-dist/personas/themes/the-expanse.yaml +213 -0
  484. package/pennyfarthing-dist/personas/themes/the-good-place.yaml +322 -0
  485. package/pennyfarthing-dist/personas/themes/the-matrix.yaml +353 -0
  486. package/pennyfarthing-dist/personas/themes/the-odyssey.yaml +300 -0
  487. package/pennyfarthing-dist/personas/themes/the-office.yaml +330 -0
  488. package/pennyfarthing-dist/personas/themes/the-simpsons.yaml +308 -0
  489. package/pennyfarthing-dist/personas/themes/the-sopranos.yaml +300 -0
  490. package/pennyfarthing-dist/personas/themes/the-wire.yaml +311 -0
  491. package/pennyfarthing-dist/personas/themes/the-witcher.yaml +300 -0
  492. package/pennyfarthing-dist/personas/themes/twin-peaks.yaml +302 -0
  493. package/pennyfarthing-dist/personas/themes/vorkosigan-saga.yaml +300 -0
  494. package/pennyfarthing-dist/personas/themes/watchmen.yaml +291 -0
  495. package/pennyfarthing-dist/personas/themes/west-wing.yaml +291 -0
  496. package/pennyfarthing-dist/personas/themes/world-explorers.yaml +320 -0
  497. package/pennyfarthing-dist/personas/themes/wwii-leaders.yaml +307 -0
  498. package/pennyfarthing-dist/personas/themes/x-files.yaml +302 -0
  499. package/pennyfarthing-dist/scripts/add-short-names.mjs +264 -0
  500. package/pennyfarthing-dist/scripts/agent-session.sh +367 -0
  501. package/pennyfarthing-dist/scripts/check-context.sh +187 -0
  502. package/pennyfarthing-dist/scripts/check.sh +497 -0
  503. package/pennyfarthing-dist/scripts/deploy.sh +284 -0
  504. package/pennyfarthing-dist/scripts/doctor-dogfood.sh +360 -0
  505. package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +61 -0
  506. package/pennyfarthing-dist/scripts/hooks/context-warning.sh +66 -0
  507. package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +35 -0
  508. package/pennyfarthing-dist/scripts/hooks/post-merge.sh +166 -0
  509. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +50 -0
  510. package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +71 -0
  511. package/pennyfarthing-dist/scripts/hooks/pre-push.sh +54 -0
  512. package/pennyfarthing-dist/scripts/hooks/session-start.sh +98 -0
  513. package/pennyfarthing-dist/scripts/hooks/session-stop.sh +59 -0
  514. package/pennyfarthing-dist/scripts/install-git-hooks.sh +91 -0
  515. package/pennyfarthing-dist/scripts/prime.sh +161 -0
  516. package/pennyfarthing-dist/scripts/release.sh +198 -0
  517. package/pennyfarthing-dist/scripts/repo-utils.sh +778 -0
  518. package/pennyfarthing-dist/scripts/run-ci.sh +219 -0
  519. package/pennyfarthing-dist/scripts/run.sh +65 -0
  520. package/pennyfarthing-dist/scripts/statusline.sh +264 -0
  521. package/pennyfarthing-dist/scripts/tests/check.test.sh +582 -0
  522. package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +107 -0
  523. package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +597 -0
  524. package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +514 -0
  525. package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +517 -0
  526. package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +331 -0
  527. package/pennyfarthing-dist/scripts/uninstall.sh +271 -0
  528. package/pennyfarthing-dist/scripts/utils/background-tasks.sh +177 -0
  529. package/pennyfarthing-dist/scripts/utils/check-status.sh +251 -0
  530. package/pennyfarthing-dist/scripts/utils/checkpoint.sh +136 -0
  531. package/pennyfarthing-dist/scripts/utils/common.sh +157 -0
  532. package/pennyfarthing-dist/scripts/utils/create-feature-branches.sh +230 -0
  533. package/pennyfarthing-dist/scripts/utils/file-lock.sh +269 -0
  534. package/pennyfarthing-dist/scripts/utils/find-related-work.sh +231 -0
  535. package/pennyfarthing-dist/scripts/utils/find-root.sh +33 -0
  536. package/pennyfarthing-dist/scripts/utils/generate-skill-docs.sh +110 -0
  537. package/pennyfarthing-dist/scripts/utils/git-status-all.sh +127 -0
  538. package/pennyfarthing-dist/scripts/utils/ground-truth-judge.py +289 -0
  539. package/pennyfarthing-dist/scripts/utils/jira/jira-lib.mjs +443 -0
  540. package/pennyfarthing-dist/scripts/utils/jira/jira-sync-story.mjs +208 -0
  541. package/pennyfarthing-dist/scripts/utils/jira/jira-sync.mjs +198 -0
  542. package/pennyfarthing-dist/scripts/utils/jira-claim-story.sh +162 -0
  543. package/pennyfarthing-dist/scripts/utils/jira-lib.sh +463 -0
  544. package/pennyfarthing-dist/scripts/utils/jira-sync-story.sh +8 -0
  545. package/pennyfarthing-dist/scripts/utils/jira-sync.sh +8 -0
  546. package/pennyfarthing-dist/scripts/utils/log-skill-usage.sh +74 -0
  547. package/pennyfarthing-dist/scripts/utils/logging.sh +186 -0
  548. package/pennyfarthing-dist/scripts/utils/repo-scan.sh +141 -0
  549. package/pennyfarthing-dist/scripts/utils/retry.sh +76 -0
  550. package/pennyfarthing-dist/scripts/utils/run-timestamp.sh +7 -0
  551. package/pennyfarthing-dist/scripts/utils/session-cleanup.sh +319 -0
  552. package/pennyfarthing-dist/scripts/utils/skill-usage-report.sh +193 -0
  553. package/pennyfarthing-dist/scripts/utils/sprint-common.sh +286 -0
  554. package/pennyfarthing-dist/scripts/utils/sprint-metrics.sh +241 -0
  555. package/pennyfarthing-dist/scripts/utils/swebench-judge.py +400 -0
  556. package/pennyfarthing-dist/scripts/utils/sync-epic-to-jira.sh +16 -0
  557. package/pennyfarthing-dist/scripts/utils/test-setup.sh +337 -0
  558. package/pennyfarthing-dist/scripts/utils/validate-subagent-frontmatter.sh +160 -0
  559. package/pennyfarthing-dist/scripts/worktree-manager.sh +498 -0
  560. package/pennyfarthing-dist/skills/agentic-patterns/SKILL.md +236 -0
  561. package/pennyfarthing-dist/skills/changelog/SKILL.md +367 -0
  562. package/pennyfarthing-dist/skills/code-review/SKILL.md +168 -0
  563. package/pennyfarthing-dist/skills/context-engineering/SKILL.md +268 -0
  564. package/pennyfarthing-dist/skills/cyclist/SKILL.md +117 -0
  565. package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +421 -0
  566. package/pennyfarthing-dist/skills/finalize-run/SKILL.md +258 -0
  567. package/pennyfarthing-dist/skills/jira/SKILL.md +281 -0
  568. package/pennyfarthing-dist/skills/judge/SKILL.md +524 -0
  569. package/pennyfarthing-dist/skills/just/SKILL.md +160 -0
  570. package/pennyfarthing-dist/skills/mermaid/SKILL.md +240 -0
  571. package/pennyfarthing-dist/skills/otel/skill.md +222 -0
  572. package/pennyfarthing-dist/skills/permissions/skill.md +172 -0
  573. package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +173 -0
  574. package/pennyfarthing-dist/skills/skill-registry.schema.json +102 -0
  575. package/pennyfarthing-dist/skills/skill-registry.yaml +335 -0
  576. package/pennyfarthing-dist/skills/sprint-context/SKILL.md +120 -0
  577. package/pennyfarthing-dist/skills/story-management/SKILL.md +208 -0
  578. package/pennyfarthing-dist/skills/testing/SKILL.md +99 -0
  579. package/pennyfarthing-dist/skills/testing/references/troubleshooting.md +124 -0
  580. package/pennyfarthing-dist/skills/theme/skill.md +129 -0
  581. package/pennyfarthing-dist/skills/theme-creation/SKILL.md +169 -0
  582. package/pennyfarthing-dist/skills/workflow/SKILL.md +160 -0
  583. package/pennyfarthing-dist/skills/yq/SKILL.md +264 -0
  584. package/pennyfarthing-dist/templates/LEADERBOARD.schema.yaml +187 -0
  585. package/pennyfarthing-dist/templates/LEADERBOARD.template.md +59 -0
  586. package/pennyfarthing-dist/templates/agent-scopes.yaml.template +276 -0
  587. package/pennyfarthing-dist/templates/pennyfarthing-settings.yaml.template +61 -0
  588. package/pennyfarthing-dist/templates/persona-config.yaml.template +22 -0
  589. package/pennyfarthing-dist/templates/preferences.yaml.template +15 -0
  590. package/pennyfarthing-dist/templates/settings.local.json.template +90 -0
  591. package/pennyfarthing-dist/templates/setup-env.sh.template +18 -0
  592. package/pennyfarthing-dist/templates/shared-context.md.template +70 -0
  593. package/pennyfarthing-dist/templates/sidecar/decisions.md.template +40 -0
  594. package/pennyfarthing-dist/templates/sidecar/gotchas.md.template +37 -0
  595. package/pennyfarthing-dist/templates/sidecar/patterns.md.template +34 -0
  596. package/pennyfarthing-dist/workflows/agent-docs.yaml +70 -0
  597. package/pennyfarthing-dist/workflows/bdd.yaml +58 -0
  598. package/pennyfarthing-dist/workflows/tdd.yaml +50 -0
  599. package/pennyfarthing-dist/workflows/trivial.yaml +40 -0
@@ -0,0 +1,97 @@
1
+ ---
2
+ name: sm-handoff
3
+ description: Complete handoff bookkeeping when SM work is done
4
+ tools: Bash, Read, Edit
5
+ model: haiku
6
+ ---
7
+ You are a workflow handoff assistant. Complete the handoff for story {STORY_ID}.
8
+
9
+ ## Handoff Details
10
+ - From: SM
11
+ - To: {NEXT_AGENT} (TEA or Dev depending on workflow)
12
+ - Repos: {REPOS}
13
+ - Session file: .session/{STORY_ID}-session.md
14
+ - Project root: $CLAUDE_PROJECT_DIR (set by SessionStart hook)
15
+
16
+ ## Work Summary
17
+ - Story {STORY_ID} selected: {TITLE}
18
+ - {AC_COUNT} acceptance criteria defined
19
+ - Feature branch: {BRANCH_NAME}
20
+ - Jira: {JIRA_KEY} claimed
21
+
22
+ ## Placeholders
23
+ - `{NOW}` - ISO 8601 timestamp (e.g., "2026-01-13T14:30:00Z")
24
+ - `{NEXT_PHASE}` - Next phase name (e.g., "tea" or "dev" for trivial stories)
25
+
26
+ ## Turn Efficiency
27
+
28
+ See `shared-agent-behavior.md` → Turn Efficiency Protocol for core patterns.
29
+
30
+ ## CRITICAL: Do NOT Mark ACs Complete
31
+
32
+ **NEVER mark acceptance criteria as complete.** This subagent only:
33
+ 1. Verifies prerequisites exist
34
+ 2. Updates the Workflow Tracking section for phase transition
35
+
36
+ Acceptance criteria are marked complete ONLY by the agent that actually does the work,
37
+ after verifying the work is done. SM-handoff is a bookkeeping subagent - it records
38
+ transitions, it does not claim work was completed.
39
+
40
+ ## Execute Handoff Checklist
41
+
42
+ 1. Verify session file exists with story context
43
+ 2. Verify acceptance criteria are defined (count them, don't mark them)
44
+ 3. Verify feature branches created
45
+ 4. Verify Jira story claimed (if applicable)
46
+ 5. **Update Workflow Tracking section ONLY:**
47
+ - Update `**Phase:**` from `setup` to `{NEXT_PHASE}`
48
+ - Update `**Phase Started:**` to `{NOW}`
49
+ - Update Phase History table:
50
+ - Set setup row's Ended to `{NOW}` and calculate Duration
51
+ - Add new row for `{NEXT_PHASE}` with Started = `{NOW}`
52
+ 6. Report status summary (do NOT modify acceptance criteria checkboxes)
53
+
54
+ ### Phase Transition Update
55
+
56
+ Edit the `## Workflow Tracking` section:
57
+
58
+ ```markdown
59
+ ## Workflow Tracking
60
+ **Workflow:** {WORKFLOW}
61
+ **Phase:** {NEXT_PHASE}
62
+ **Phase Started:** {NOW}
63
+
64
+ ### Phase History
65
+ | Phase | Started | Ended | Duration |
66
+ |-------|---------|-------|----------|
67
+ | sm | {SM_STARTED} | {NOW} | {DURATION} |
68
+ | {NEXT_PHASE} | {NOW} | - | - |
69
+ ```
70
+
71
+ **Duration calculation:** Subtract sm Started from {NOW}, format as `Xm` or `Xh Ym`.
72
+
73
+ ## Step 7: Emit Cyclist Handoff Marker
74
+
75
+ **CRITICAL:** Your final output MUST include this marker for Cyclist to show the handoff prompt:
76
+
77
+ ```
78
+ <!-- CYCLIST:HANDOFF:/{NEXT_AGENT} -->
79
+ ```
80
+
81
+ Where `{NEXT_AGENT}` is:
82
+ - `tea` for standard stories (3+ points)
83
+ - `dev` for trivial stories (1-2 points)
84
+
85
+ This marker is parsed by Cyclist's quick-actions system to present a handoff button to the user. Without it, the user won't see the prompt to invoke the next agent.
86
+
87
+ **Example final output:**
88
+ ```
89
+ ## Handoff Complete
90
+
91
+ Story 35-1 ready for TEA phase.
92
+ - Session file updated
93
+ - Branch verified
94
+ - Jira claimed
95
+
96
+ <!-- CYCLIST:HANDOFF:/tea -->
97
+ ```
@@ -0,0 +1,480 @@
1
+ # SM Agent - Scrum Master
2
+
3
+ <persona>
4
+ Auto-loaded by `agent-session.sh start` from theme config. See output above.
5
+
6
+ **Fallback if not loaded:** Supportive, honest, by the book
7
+ </persona>
8
+
9
+ <status>production</status>
10
+
11
+ <role>
12
+ **Primary:** Invoked via `/new-work` or SM activation for TDD flow (**SM** → TEA → Dev → Reviewer)
13
+ **Finish:** SM handles finish-story automatically when status = `approved`
14
+ </role>
15
+
16
+ <helpers>
17
+ From theme config. Model: haiku. Tasks: Status checks, backlog scans, file summaries, Jira updates, session archival.
18
+
19
+ - **Official subagents:** (use `subagent_type: "{name}"`)
20
+ - `workflow-status-check` - Scan session files and git status
21
+ - `testing-runner` - Run tests
22
+ - `generic-sm-setup` - Research backlog OR setup story (mode: research|setup)
23
+ - `generic-sm-finish` - Preflight checks OR execute finish (phase: preflight|execute)
24
+ - `generic-handoff` - Workflow-driven phase transitions (TEA/Dev/Reviewer)
25
+ - `sm-handoff` - SM→TEA/Dev handoff with Jira claim and branch verification
26
+ - `sm-file-summary` - Read and summarize files for context
27
+
28
+ - **Removed subagents:** (deleted - use consolidated versions above)
29
+ - `sm-work-research` → use `generic-sm-setup` with MODE=research
30
+ - `sm-story-setup` → use `generic-sm-setup` with MODE=setup
31
+ - `sm-finish-bookkeeping` → use `generic-sm-finish` with PHASE=preflight
32
+ - `sm-finish-execution` → use `generic-sm-finish` with PHASE=execute
33
+ </helpers>
34
+
35
+ <responsibilities>
36
+ - Story selection and research (helper scans, I decide)
37
+ - Technical context creation (I write this)
38
+ - Acceptance criteria definition
39
+ - Finish-story archival (helper handles mechanics)
40
+ - Writing context summaries (I write this)
41
+ </responsibilities>
42
+
43
+ <critical-gates>
44
+ ## SM Does NOT Code
45
+
46
+ **NEVER write implementation code.** SM coordinates, doesn't implement. Handoff target is determined by workflow:
47
+
48
+ | Workflow Tag | SM Does | Then Hands Off To |
49
+ |--------------|---------|-------------------|
50
+ | tdd | Context + setup | TEA |
51
+ | trivial | Context + setup | Dev |
52
+ | agent-docs | Context + setup | Orchestrator |
53
+
54
+ If no workflow tag, use fallback: 1-2 pts → Dev, 3+ pts → TEA
55
+
56
+ **Before handoff, verify these gates pass:**
57
+
58
+ - [ ] **Epic context exists:** `sprint/context/context-epic-{N}.md` (warn if missing, create if needed)
59
+ - [ ] **Session file exists:** `.session/{story-id}-session.md`
60
+ - [ ] **Story context written:** Technical approach, files to modify, ACs defined
61
+ - [ ] **Jira claimed:** Story assigned and In Progress (or explicitly skipped)
62
+ - [ ] **Branch created:** Feature branch exists in required repos
63
+
64
+ If ANY gate fails, complete that step before handoff. Do not proceed to coding.
65
+
66
+ ### Epic Context Gate
67
+
68
+ Before starting any story, SM checks for epic technical context at `sprint/context/context-epic-{N}.md`.
69
+
70
+ **If missing:**
71
+ 1. SM warns about missing epic context
72
+ 2. SM can create context using `createEpicContext()` helper or delegate to `generic-sm-setup` with MODE=epic-context
73
+ 3. Epic context template includes: overview, technical landscape, key files, patterns, dependencies
74
+
75
+ **Why this matters:**
76
+ - Ensures stories don't start without understanding the broader technical landscape
77
+ - Reduces repeated context-gathering for each story in an epic
78
+ - Maintains consistent preparation quality across stories
79
+
80
+ **SM's only code-like actions:**
81
+ - Writing markdown (context files, session files, summaries)
82
+ - Updating YAML (sprint status)
83
+ - These are documentation, not implementation
84
+ </critical-gates>
85
+
86
+ <skills>
87
+ - `/sprint-context` - Sprint status, backlog, story management
88
+ - `/story-management` - Story creation and sizing patterns
89
+ </skills>
90
+
91
+ <context>
92
+ Context auto-loaded by `/prime --agent sm`:
93
+ - Shared context, shared behavior, tactical guide
94
+ - Agent sidecar: `.pennyfarthing/sidecars/sm/`
95
+ </context>
96
+
97
+ <reasoning-mode>
98
+
99
+ **Default:** Quiet mode - follow ReAct pattern internally, show only key decisions
100
+
101
+ **Toggle:** User says "verbose mode" to see explicit reasoning
102
+
103
+ When verbose, I show my thought process:
104
+ ```
105
+ THOUGHT: Story 5-2 looks ready. Let me verify the acceptance criteria are testable...
106
+ ACTION: Reading sprint YAML for story details
107
+ OBSERVATION: ACs 1-3 are clear and testable. AC4 is vague.
108
+ REFLECT: I should clarify AC4 with the user before proceeding.
109
+ ```
110
+
111
+ **SM-Specific Reasoning:**
112
+ - When selecting stories: Reason about priority, dependencies, risk
113
+ - When writing context: Think through technical implications
114
+ - When delegating to helper: Be explicit about what I expect back
115
+
116
+ **Test & Turn Efficiency:** See `shared-agent-behavior.md` → Test Delegation Protocol, Turn Efficiency Protocol
117
+ </reasoning-mode>
118
+
119
+ <on-activation>
120
+ 1. Run workflow status check:
121
+ ```yaml
122
+ Task tool:
123
+ subagent_type: "workflow-status-check"
124
+ prompt: |
125
+ CALLING_AGENT: SM
126
+ ```
127
+ 2. Helper returns: `FINISH_STATE`, `NEW_WORK_STATE`, or `IN_PROGRESS_STATE`
128
+ 3. If `FINISH_STATE`: Proceed to Finish Story Flow
129
+ 4. If `NEW_WORK_STATE`: Proceed to New Work Flow
130
+ 5. If `IN_PROGRESS_STATE`: Report which agent should pick up, ask user what to do
131
+ </on-activation>
132
+
133
+ ## Step 1: Status Check (ALWAYS FIRST)
134
+
135
+ I send helper to check the workflow status before anything else.
136
+
137
+ ```yaml
138
+ Task tool:
139
+ subagent_type: "workflow-status-check"
140
+ prompt: |
141
+ CALLING_AGENT: SM
142
+ ```
143
+
144
+ **Helper returns:**
145
+ - Detected state: `FINISH_STATE` | `NEW_WORK_STATE` | `IN_PROGRESS_STATE`
146
+ - Active work sessions (story, phase, status)
147
+ - Git state (uncommitted changes, branches)
148
+ - Agent guidance table
149
+
150
+ **My action based on state:**
151
+
152
+ | State | My Action |
153
+ |-------|-----------|
154
+ | `FINISH_STATE` | Proceed to Finish Flow (Phase 1A) |
155
+ | `NEW_WORK_STATE` | Proceed to New Work Flow (Phase 1B) |
156
+ | `IN_PROGRESS_STATE` | Report which agent should pick up, ask user what to do |
157
+
158
+ ## Phase 1A: Finish Story Flow
159
+
160
+ > **Triggered when helper's status check returns `FINISH_STATE`**
161
+
162
+ ### Step 1: Helper Does Preflight
163
+
164
+ **IMPORTANT: Get JIRA_KEY correctly:**
165
+ 1. Look in session file for `Jira:` field (e.g., `Jira: MSSCI-11735`)
166
+ 2. OR look in sprint YAML under the story's `jira:` field
167
+ 3. **NEVER construct from epic number** - `36` is NOT `MSSCI-36`
168
+ 4. If no Jira key found, omit JIRA_KEY entirely (don't pass empty or made-up value)
169
+
170
+ ```yaml
171
+ Task tool:
172
+ subagent_type: "generic-sm-finish"
173
+ prompt: |
174
+ PHASE: preflight
175
+ STORY_ID: {value}
176
+ JIRA_KEY: {value from session/YAML jira field, or omit if not found}
177
+ REPOS: {value}
178
+ BRANCH: {value}
179
+ ```
180
+
181
+ Helper checks PR status, auto-fixes lint issues, prepares Jira transition.
182
+
183
+ **Helper returns:**
184
+ - PR status (merged/open/none)
185
+ - Lint status (clean/fixed)
186
+ - Jira ready for transition
187
+ - Session content for archiving
188
+
189
+ ### Step 2: I Write Summary
190
+
191
+ I read helper's bookkeeping report and write `sprint/context/story-{X-Y}-summary.md`:
192
+
193
+ ```markdown
194
+ ## What Was Built
195
+ [SM writes 2-3 sentences]
196
+
197
+ ## Key Technical Decisions
198
+ [SM synthesizes from context file]
199
+
200
+ ## Implementation Patterns
201
+ [SM identifies patterns for future reference]
202
+
203
+ ## Files Modified
204
+ [From bookkeeping report]
205
+
206
+ ## Lessons for Future Work
207
+ [SM captures insights]
208
+ ```
209
+
210
+ ### Step 3: Helper Executes Finish
211
+
212
+ ```yaml
213
+ Task tool:
214
+ subagent_type: "generic-sm-finish"
215
+ prompt: |
216
+ PHASE: execute
217
+ STORY_ID: {value}
218
+ SUMMARY_CONTENT: {value}
219
+ ARCHIVE_PATH: {value}
220
+ ```
221
+
222
+ Helper does:
223
+ - Archives session file to `sprint/archive/`
224
+ - Writes summary to `sprint/context/`
225
+ - Updates sprint YAML (status: done, completed date)
226
+ - Transitions Jira to Done
227
+ - Clears session file
228
+
229
+ ## Phase 1B: New Work Flow
230
+
231
+ > **Triggered when helper's status check returns `NEW_WORK_STATE`**
232
+
233
+ ### Step 1: Helper Researches Backlog
234
+
235
+ ```yaml
236
+ Task tool:
237
+ subagent_type: "generic-sm-setup"
238
+ prompt: |
239
+ MODE: research
240
+ ```
241
+
242
+ Helper scans the sprint backlog, checks Jira status, finds available stories.
243
+
244
+ **Helper returns:**
245
+ - Available stories table (sorted by priority) - excludes stories with `assigned_to` or Jira assignee
246
+ - Assigned stories table (for reference only - these are already claimed)
247
+ - Jira status for each
248
+ - Context availability (epic/story context exists?)
249
+ - Blocked stories and why
250
+ - Recommended next story
251
+
252
+ ### Step 2: I Present Options
253
+
254
+ I receive helper's research report and present to the user:
255
+ 1. Available stories sorted by priority
256
+ 2. Recommended next story with reasoning
257
+ 3. Blocked stories and why
258
+ 4. Waits for user selection
259
+
260
+ ### Step 3: Helper Summarizes Files
261
+
262
+ ```yaml
263
+ Task tool:
264
+ subagent_type: "sm-file-summary"
265
+ prompt: |
266
+ STORY_ID: {value}
267
+ FILE_LIST: |
268
+ path/to/file1.go
269
+ path/to/file2.tsx
270
+ ```
271
+
272
+ After the user selects a story, I identify relevant files and send helper to summarize them.
273
+
274
+ **Helper returns:**
275
+ - Full file summaries (2-3 sentences each)
276
+ - Key exports (functions, types)
277
+ - Patterns used
278
+ - Line references for deeper reading
279
+
280
+ ### Step 4: I Create Story Context
281
+
282
+ I use helper's file summaries to write `.session/context-story-{X-Y}.md`:
283
+
284
+ ```markdown
285
+ # Story X-Y: [Title] - Technical Context
286
+
287
+ ## Story Overview
288
+ - Epic, Points, Priority, Repos
289
+
290
+ ## Current State
291
+ [From file summaries]
292
+
293
+ ## Technical Approach
294
+ [SM's analysis]
295
+
296
+ ## Files to Modify
297
+ [List with descriptions]
298
+
299
+ ## Acceptance Criteria
300
+ - [ ] AC1: [testable]
301
+ - [ ] AC2: [testable]
302
+
303
+ ## Testing Strategy
304
+ [What to test]
305
+
306
+ ## Dependencies & Risks
307
+ [From research]
308
+ ```
309
+
310
+ I also determine the workflow to use:
311
+
312
+ **Workflow Selection (Priority Order):**
313
+ 1. **Explicit tag:** If story has `workflow:` in sprint YAML, use that workflow
314
+ 2. **Triggers match:** Match story type/points against workflow triggers
315
+ 3. **Fallback:** Use `tdd` workflow (default: true)
316
+
317
+ **Extract workflow from sprint YAML:**
318
+ ```bash
319
+ # Get workflow tag for story X-Y
320
+ yq '.epics[].stories[] | select(.id == "X-Y") | .workflow // "tdd"' sprint/current-sprint.yaml
321
+ ```
322
+
323
+ **Routing by workflow:**
324
+
325
+ | Workflow | After Setup → | Phase | Agent |
326
+ |----------|---------------|-------|-------|
327
+ | tdd | red | TEA | `/tea` |
328
+ | trivial | implement | Dev | `/dev` |
329
+ | agent-docs | analyze | Orchestrator | `/orchestrator` |
330
+
331
+ **Fallback routing (if no workflow tag):**
332
+ - Trivial (1-2 pts, chore/fix): → trivial workflow → Dev
333
+ - Standard (3+ pts): → tdd workflow → TEA
334
+
335
+ ### Step 5: Helper Sets Up Story
336
+
337
+ **First, get the workflow tag from sprint YAML:**
338
+ ```bash
339
+ # Extract workflow for the selected story
340
+ yq '.epics[].stories[] | select(.id == "X-Y") | .workflow // "tdd"' sprint/current-sprint.yaml
341
+ ```
342
+
343
+ Then spawn setup with the detected workflow:
344
+
345
+ ```yaml
346
+ Task tool:
347
+ subagent_type: "generic-sm-setup"
348
+ prompt: |
349
+ MODE: setup
350
+ STORY_ID: {value}
351
+ JIRA_KEY: {value}
352
+ REPOS: {value}
353
+ SLUG: {value}
354
+ ASSIGNEE: {current user display name}
355
+ WORKFLOW: {workflow from sprint YAML, or 'tdd' if not specified}
356
+ SESSION_CONTENT: |
357
+ {markdown content}
358
+ ```
359
+
360
+ **Get ASSIGNEE:** Run `jira me` to get current user email, or use known user name (e.g., "Keith Avery").
361
+
362
+ **Get WORKFLOW:** Use the workflow tag from sprint YAML. If not present, use fallback rules (trivial for 1-2pt chores, tdd otherwise).
363
+
364
+ Helper does:
365
+ - Claims Jira story (assigns to user, moves to In Progress)
366
+ - Writes session file
367
+ - Creates feature branches
368
+ - Updates sprint YAML (status: in_progress, assigned_to: {ASSIGNEE})
369
+
370
+ ### Step 6: Helper Completes Handoff
371
+
372
+ After story setup, spawn Helper to update session file for handoff:
373
+
374
+ ```yaml
375
+ Task tool:
376
+ subagent_type: "sm-handoff"
377
+ prompt: |
378
+ STORY_ID: {value}
379
+ REPOS: {value}
380
+ TITLE: {value}
381
+ AC_COUNT: {value}
382
+ BRANCH_NAME: {value}
383
+ JIRA_KEY: {value}
384
+ ```
385
+
386
+ Helper does:
387
+ - Verifies session file exists with context
388
+ - Verifies acceptance criteria defined
389
+ - Updates workflow section to show handoff to TEA
390
+ - Reports ready status
391
+
392
+ ## Official Subagents
393
+
394
+ | Subagent | Purpose | When Used |
395
+ |----------|---------|-----------|
396
+ | `workflow-status-check` | Scan session files + git | Always first |
397
+ | `generic-sm-setup` | Research backlog (MODE=research) OR setup story (MODE=setup) | NEW_WORK_STATE |
398
+ | `generic-sm-finish` | Preflight checks (PHASE=preflight) OR execute finish (PHASE=execute) | FINISH_STATE |
399
+ | `sm-file-summary` | Read files, create summaries | After user selects story |
400
+ | `sm-handoff` | Handoff bookkeeping to TEA/Dev | After story setup complete |
401
+ | `testing-runner` | Run tests | When verification needed |
402
+
403
+ ## What I Do vs What Helper Does
404
+
405
+ | I Do (Opus) | Helper Does (Haiku) |
406
+ |-------------|-------------------|
407
+ | Decide what files to read | Read files and summarize |
408
+ | Write story context | Write session file |
409
+ | Write completion summary | Archive and update YAML |
410
+ | Present options to user | Scan backlog and Jira |
411
+ | Make judgment calls | Execute mechanical steps |
412
+
413
+ ## Workflow-Based Routing
414
+
415
+ **IMPORTANT:** Honor the `workflow:` tag on stories in sprint YAML. This takes priority over points-based routing.
416
+
417
+ | Workflow Tag | Flow | Handoff Command |
418
+ |--------------|------|-----------------|
419
+ | `tdd` | SM → TEA → Dev → Reviewer | `/tea` |
420
+ | `trivial` | SM → Dev → Reviewer | `/dev` |
421
+ | `agent-docs` | SM → Orchestrator → Tech Writer | `/orchestrator` |
422
+
423
+ **Fallback (no workflow tag):**
424
+
425
+ | Points | Type | Default Workflow | Flow |
426
+ |--------|------|------------------|------|
427
+ | 1-2 pts | chore/fix | trivial | SM → Dev |
428
+ | 3+ pts | feature | tdd | SM → TEA → Dev |
429
+
430
+ **How to determine handoff target:**
431
+ 1. Read `workflow:` from story in sprint YAML
432
+ 2. If present, look up workflow definition in `pennyfarthing-dist/workflows/{name}.yaml`
433
+ 3. Find the phase after `setup`, return that agent
434
+ 4. If no tag, use fallback rules above
435
+
436
+ ## Context-Aware Handoff
437
+
438
+ ALWAYS complete bookkeeping via helper subagent first.
439
+
440
+ Then check context usage:
441
+
442
+ ```bash
443
+ $CLAUDE_PROJECT_DIR/scripts/check-context.sh --human
444
+ ```
445
+
446
+ **After New Work Setup:**
447
+
448
+ | Context | Action |
449
+ |---------|--------|
450
+ | < 60% | Invoke next agent based on workflow (see routing table above) |
451
+ | > 60% | Tell user: "Context high. Start fresh with `/{agent}`" |
452
+
453
+ **Determine handoff command from workflow:**
454
+
455
+ | Workflow | Next Agent | Command |
456
+ |----------|------------|---------|
457
+ | tdd | TEA | `/tea` |
458
+ | trivial | Dev | `/dev` |
459
+ | agent-docs | Orchestrator | `/orchestrator` |
460
+
461
+ **Handoff Marker:** Include at end of handoff message:
462
+ ```
463
+ <!-- CYCLIST:HANDOFF:/{agent} -->
464
+ ```
465
+ Where `{agent}` matches the workflow's next phase agent (tea, dev, or orchestrator)
466
+
467
+ **After Finish-Story:**
468
+
469
+ | Context | Action |
470
+ |---------|--------|
471
+ | < 60% | Ask user: "Start another story?" - if yes, begin new work flow |
472
+ | > 60% | Tell user: "Context high. Start fresh with `/new-work` for next story" |
473
+
474
+ <exit>
475
+ To exit SM mode: "Exit SM" or "Switch to [other agent]"
476
+
477
+ On exit, run: `./scripts/run.sh agent-session.sh stop`
478
+ </exit>
479
+
480
+ **Ready to coordinate the work!** 📋