@pennyfarthing/core 7.0.1 → 7.4.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 (692) hide show
  1. package/{packages/core/dist → dist}/cli/commands/cyclist.d.ts +2 -2
  2. package/{packages/core/dist → dist}/cli/commands/cyclist.d.ts.map +1 -1
  3. package/{packages/core/dist → dist}/cli/commands/cyclist.js +8 -9
  4. package/dist/cli/commands/cyclist.js.map +1 -0
  5. package/{packages/core/dist → dist}/cli/commands/cyclist.test.js +6 -4
  6. package/dist/cli/commands/cyclist.test.js.map +1 -0
  7. package/{packages/core/dist → dist}/cli/commands/update.d.ts.map +1 -1
  8. package/{packages/core/dist → dist}/cli/commands/update.js +9 -136
  9. package/dist/cli/commands/update.js.map +1 -0
  10. package/{packages/core/dist → dist}/cli/cyclist-migration.test.js +4 -3
  11. package/{packages/core/dist → dist}/cli/cyclist-migration.test.js.map +1 -1
  12. package/{packages/core/dist → dist}/cli/utils/constants.d.ts +7 -1
  13. package/dist/cli/utils/constants.d.ts.map +1 -0
  14. package/{packages/core/dist → dist}/cli/utils/constants.js +4 -2
  15. package/{packages/core/dist → dist}/cli/utils/constants.js.map +1 -1
  16. package/{packages/core/dist → dist}/cli/utils/themes.d.ts +1 -4
  17. package/{packages/core/dist → dist}/cli/utils/themes.d.ts.map +1 -1
  18. package/{packages/core/dist → dist}/cli/utils/themes.js +2 -22
  19. package/dist/cli/utils/themes.js.map +1 -0
  20. package/dist/cli/utils/themes.test.d.ts +12 -0
  21. package/{packages/core/dist → dist}/cli/utils/themes.test.js +16 -13
  22. package/dist/cli/utils/themes.test.js.map +1 -0
  23. package/{packages/core/dist → dist}/cli/workspace.test.js +5 -8
  24. package/{packages/core/dist → dist}/cli/workspace.test.js.map +1 -1
  25. package/{packages/core/dist → dist}/index.d.ts +1 -0
  26. package/{packages/core/dist → dist}/index.d.ts.map +1 -1
  27. package/{packages/core/dist → dist}/index.js +10 -0
  28. package/{packages/core/dist → dist}/index.js.map +1 -1
  29. package/dist/jira/jira-epic-creation.d.ts +109 -0
  30. package/dist/jira/jira-epic-creation.d.ts.map +1 -0
  31. package/dist/jira/jira-epic-creation.js +253 -0
  32. package/dist/jira/jira-epic-creation.js.map +1 -0
  33. package/dist/jira/jira-epic-creation.test.d.ts +16 -0
  34. package/dist/jira/jira-epic-creation.test.d.ts.map +1 -0
  35. package/dist/jira/jira-epic-creation.test.js +387 -0
  36. package/dist/jira/jira-epic-creation.test.js.map +1 -0
  37. package/dist/jira/jira-sprint-sync.d.ts +247 -0
  38. package/dist/jira/jira-sprint-sync.d.ts.map +1 -0
  39. package/dist/jira/jira-sprint-sync.js +670 -0
  40. package/dist/jira/jira-sprint-sync.js.map +1 -0
  41. package/dist/jira/jira-sprint-sync.test.d.ts +16 -0
  42. package/dist/jira/jira-sprint-sync.test.d.ts.map +1 -0
  43. package/dist/jira/jira-sprint-sync.test.js +845 -0
  44. package/dist/jira/jira-sprint-sync.test.js.map +1 -0
  45. package/{packages/core/dist → dist}/scripts/generate-spider.d.ts +11 -1
  46. package/{packages/core/dist → dist}/scripts/generate-spider.d.ts.map +1 -1
  47. package/{packages/core/dist → dist}/scripts/generate-spider.js +24 -1
  48. package/dist/scripts/generate-spider.js.map +1 -0
  49. package/{packages/core/dist → dist}/scripts/generate-spider.test.js +6 -4
  50. package/dist/scripts/generate-spider.test.js.map +1 -0
  51. package/dist/workflow/gate-handler.d.ts +94 -0
  52. package/dist/workflow/gate-handler.d.ts.map +1 -0
  53. package/dist/workflow/gate-handler.js +189 -0
  54. package/dist/workflow/gate-handler.js.map +1 -0
  55. package/dist/workflow/gate-handler.test.d.ts +14 -0
  56. package/dist/workflow/gate-handler.test.d.ts.map +1 -0
  57. package/dist/workflow/gate-handler.test.js +543 -0
  58. package/dist/workflow/gate-handler.test.js.map +1 -0
  59. package/{packages/core/dist → dist}/workflow/generic-handoff.d.ts +46 -0
  60. package/{packages/core/dist → dist}/workflow/generic-handoff.d.ts.map +1 -1
  61. package/{packages/core/dist → dist}/workflow/generic-handoff.js +53 -0
  62. package/{packages/core/dist → dist}/workflow/generic-handoff.js.map +1 -1
  63. package/{packages/core/dist → dist}/workflow/generic-handoff.test.js +2 -2
  64. package/{packages/core/dist → dist}/workflow/generic-handoff.test.js.map +1 -1
  65. package/dist/workflow/index.d.ts +16 -0
  66. package/dist/workflow/index.d.ts.map +1 -0
  67. package/dist/workflow/index.js +24 -0
  68. package/dist/workflow/index.js.map +1 -0
  69. package/dist/workflow/session-state.d.ts +92 -0
  70. package/dist/workflow/session-state.d.ts.map +1 -0
  71. package/dist/workflow/session-state.js +198 -0
  72. package/dist/workflow/session-state.js.map +1 -0
  73. package/dist/workflow/session-state.test.d.ts +8 -0
  74. package/dist/workflow/session-state.test.d.ts.map +1 -0
  75. package/dist/workflow/session-state.test.js +551 -0
  76. package/dist/workflow/session-state.test.js.map +1 -0
  77. package/dist/workflow/step-parser.d.ts +45 -0
  78. package/dist/workflow/step-parser.d.ts.map +1 -0
  79. package/dist/workflow/step-parser.js +147 -0
  80. package/dist/workflow/step-parser.js.map +1 -0
  81. package/dist/workflow/step-parser.test.d.ts +14 -0
  82. package/dist/workflow/step-parser.test.d.ts.map +1 -0
  83. package/dist/workflow/step-parser.test.js +470 -0
  84. package/dist/workflow/step-parser.test.js.map +1 -0
  85. package/dist/workflow/trimodal.d.ts +86 -0
  86. package/dist/workflow/trimodal.d.ts.map +1 -0
  87. package/dist/workflow/trimodal.js +118 -0
  88. package/dist/workflow/trimodal.js.map +1 -0
  89. package/dist/workflow/trimodal.test.d.ts +11 -0
  90. package/dist/workflow/trimodal.test.d.ts.map +1 -0
  91. package/dist/workflow/trimodal.test.js +395 -0
  92. package/dist/workflow/trimodal.test.js.map +1 -0
  93. package/dist/workflow/variable-resolver.d.ts +67 -0
  94. package/dist/workflow/variable-resolver.d.ts.map +1 -0
  95. package/dist/workflow/variable-resolver.js +156 -0
  96. package/dist/workflow/variable-resolver.js.map +1 -0
  97. package/dist/workflow/variable-resolver.test.d.ts +14 -0
  98. package/dist/workflow/variable-resolver.test.d.ts.map +1 -0
  99. package/dist/workflow/variable-resolver.test.js +400 -0
  100. package/dist/workflow/variable-resolver.test.js.map +1 -0
  101. package/dist/workflow/workflow-executor.d.ts +163 -0
  102. package/dist/workflow/workflow-executor.d.ts.map +1 -0
  103. package/dist/workflow/workflow-executor.js +197 -0
  104. package/dist/workflow/workflow-executor.js.map +1 -0
  105. package/dist/workflow/workflow-executor.test.d.ts +8 -0
  106. package/dist/workflow/workflow-executor.test.d.ts.map +1 -0
  107. package/dist/workflow/workflow-executor.test.js +444 -0
  108. package/dist/workflow/workflow-executor.test.js.map +1 -0
  109. package/{packages/core/dist → dist}/workflow/workflow-loader.test.js +5 -5
  110. package/dist/workflow/workflow-loader.test.js.map +1 -0
  111. package/{packages/core/dist → dist}/workflow/workflow-migration.test.js +8 -9
  112. package/{packages/core/dist → dist}/workflow/workflow-migration.test.js.map +1 -1
  113. package/dist/workflow/workflow-permissions.d.ts +55 -0
  114. package/dist/workflow/workflow-permissions.d.ts.map +1 -0
  115. package/dist/workflow/workflow-permissions.js +64 -0
  116. package/dist/workflow/workflow-permissions.js.map +1 -0
  117. package/dist/workflow/workflow-permissions.test.d.ts +15 -0
  118. package/dist/workflow/workflow-permissions.test.d.ts.map +1 -0
  119. package/dist/workflow/workflow-permissions.test.js +301 -0
  120. package/dist/workflow/workflow-permissions.test.js.map +1 -0
  121. package/{packages/core/dist → dist}/workflow/workflow-schema.d.ts +61 -2
  122. package/dist/workflow/workflow-schema.d.ts.map +1 -0
  123. package/dist/workflow/workflow-schema.js +454 -0
  124. package/dist/workflow/workflow-schema.js.map +1 -0
  125. package/{packages/core/dist → dist}/workflow/workflow-schema.test.js +6 -6
  126. package/{packages/core/dist → dist}/workflow/workflow-schema.test.js.map +1 -1
  127. package/dist/workflow/workflow-stepped-schema.test.d.ts +18 -0
  128. package/dist/workflow/workflow-stepped-schema.test.d.ts.map +1 -0
  129. package/dist/workflow/workflow-stepped-schema.test.js +608 -0
  130. package/dist/workflow/workflow-stepped-schema.test.js.map +1 -0
  131. package/package.json +36 -31
  132. package/README.md +0 -301
  133. package/packages/core/dist/cli/commands/cyclist.js.map +0 -1
  134. package/packages/core/dist/cli/commands/cyclist.test.js.map +0 -1
  135. package/packages/core/dist/cli/commands/update.js.map +0 -1
  136. package/packages/core/dist/cli/utils/constants.d.ts.map +0 -1
  137. package/packages/core/dist/cli/utils/themes.js.map +0 -1
  138. package/packages/core/dist/cli/utils/themes.test.d.ts +0 -12
  139. package/packages/core/dist/cli/utils/themes.test.js.map +0 -1
  140. package/packages/core/dist/scripts/generate-all-faces.d.ts +0 -10
  141. package/packages/core/dist/scripts/generate-all-faces.d.ts.map +0 -1
  142. package/packages/core/dist/scripts/generate-all-faces.js +0 -256
  143. package/packages/core/dist/scripts/generate-all-faces.js.map +0 -1
  144. package/packages/core/dist/scripts/generate-all-faces.test.d.ts +0 -17
  145. package/packages/core/dist/scripts/generate-all-faces.test.d.ts.map +0 -1
  146. package/packages/core/dist/scripts/generate-all-faces.test.js +0 -372
  147. package/packages/core/dist/scripts/generate-all-faces.test.js.map +0 -1
  148. package/packages/core/dist/scripts/generate-ascii-face.d.ts +0 -52
  149. package/packages/core/dist/scripts/generate-ascii-face.d.ts.map +0 -1
  150. package/packages/core/dist/scripts/generate-ascii-face.js +0 -155
  151. package/packages/core/dist/scripts/generate-ascii-face.js.map +0 -1
  152. package/packages/core/dist/scripts/generate-face.d.ts +0 -52
  153. package/packages/core/dist/scripts/generate-face.d.ts.map +0 -1
  154. package/packages/core/dist/scripts/generate-face.js +0 -199
  155. package/packages/core/dist/scripts/generate-face.js.map +0 -1
  156. package/packages/core/dist/scripts/generate-face.test.d.ts +0 -13
  157. package/packages/core/dist/scripts/generate-face.test.d.ts.map +0 -1
  158. package/packages/core/dist/scripts/generate-face.test.js +0 -301
  159. package/packages/core/dist/scripts/generate-face.test.js.map +0 -1
  160. package/packages/core/dist/scripts/generate-spider.js.map +0 -1
  161. package/packages/core/dist/scripts/generate-spider.test.js.map +0 -1
  162. package/packages/core/dist/workflow/workflow-loader.test.js.map +0 -1
  163. package/packages/core/dist/workflow/workflow-schema.d.ts.map +0 -1
  164. package/packages/core/dist/workflow/workflow-schema.js +0 -230
  165. package/packages/core/dist/workflow/workflow-schema.js.map +0 -1
  166. package/pennyfarthing-dist/agents/README.md +0 -397
  167. package/pennyfarthing-dist/agents/architect.md +0 -171
  168. package/pennyfarthing-dist/agents/dev.md +0 -225
  169. package/pennyfarthing-dist/agents/devops.md +0 -183
  170. package/pennyfarthing-dist/agents/generic-handoff.md +0 -451
  171. package/pennyfarthing-dist/agents/generic-sm-finish.md +0 -261
  172. package/pennyfarthing-dist/agents/generic-sm-setup.md +0 -214
  173. package/pennyfarthing-dist/agents/orchestrator.md +0 -316
  174. package/pennyfarthing-dist/agents/pm.md +0 -153
  175. package/pennyfarthing-dist/agents/reviewer-preflight.md +0 -224
  176. package/pennyfarthing-dist/agents/reviewer.md +0 -315
  177. package/pennyfarthing-dist/agents/sm-file-summary.md +0 -109
  178. package/pennyfarthing-dist/agents/sm-handoff.md +0 -97
  179. package/pennyfarthing-dist/agents/sm.md +0 -480
  180. package/pennyfarthing-dist/agents/tea.md +0 -191
  181. package/pennyfarthing-dist/agents/tech-writer.md +0 -148
  182. package/pennyfarthing-dist/agents/testing-runner.md +0 -420
  183. package/pennyfarthing-dist/agents/ux-designer.md +0 -158
  184. package/pennyfarthing-dist/agents/workflow-status-check.md +0 -332
  185. package/pennyfarthing-dist/commands/architect.md +0 -62
  186. package/pennyfarthing-dist/commands/benchmark-control.md +0 -69
  187. package/pennyfarthing-dist/commands/benchmark.md +0 -467
  188. package/pennyfarthing-dist/commands/brainstorm.md +0 -91
  189. package/pennyfarthing-dist/commands/check.md +0 -156
  190. package/pennyfarthing-dist/commands/chore.md +0 -178
  191. package/pennyfarthing-dist/commands/close-epic.md +0 -136
  192. package/pennyfarthing-dist/commands/continue-session.md +0 -184
  193. package/pennyfarthing-dist/commands/create-branches-from-story.md +0 -374
  194. package/pennyfarthing-dist/commands/create-theme.md +0 -29
  195. package/pennyfarthing-dist/commands/dev.md +0 -60
  196. package/pennyfarthing-dist/commands/devops.md +0 -59
  197. package/pennyfarthing-dist/commands/git-cleanup.md +0 -340
  198. package/pennyfarthing-dist/commands/health-check.md +0 -108
  199. package/pennyfarthing-dist/commands/help.md +0 -264
  200. package/pennyfarthing-dist/commands/job-fair.md +0 -102
  201. package/pennyfarthing-dist/commands/list-themes.md +0 -17
  202. package/pennyfarthing-dist/commands/new-work.md +0 -127
  203. package/pennyfarthing-dist/commands/orchestrator.md +0 -56
  204. package/pennyfarthing-dist/commands/parallel-work.md +0 -71
  205. package/pennyfarthing-dist/commands/party-mode.md +0 -67
  206. package/pennyfarthing-dist/commands/permissions.md +0 -193
  207. package/pennyfarthing-dist/commands/pm.md +0 -60
  208. package/pennyfarthing-dist/commands/prime.md +0 -140
  209. package/pennyfarthing-dist/commands/release.md +0 -58
  210. package/pennyfarthing-dist/commands/repo-status.md +0 -49
  211. package/pennyfarthing-dist/commands/retro.md +0 -200
  212. package/pennyfarthing-dist/commands/reviewer.md +0 -64
  213. package/pennyfarthing-dist/commands/run-ci.md +0 -116
  214. package/pennyfarthing-dist/commands/set-theme.md +0 -52
  215. package/pennyfarthing-dist/commands/show-theme.md +0 -21
  216. package/pennyfarthing-dist/commands/sm.md +0 -70
  217. package/pennyfarthing-dist/commands/solo.md +0 -411
  218. package/pennyfarthing-dist/commands/sprint-planning.md +0 -109
  219. package/pennyfarthing-dist/commands/start-epic.md +0 -156
  220. package/pennyfarthing-dist/commands/sync-epic-to-jira.md +0 -184
  221. package/pennyfarthing-dist/commands/sync-work-with-sprint.md +0 -376
  222. package/pennyfarthing-dist/commands/tea.md +0 -63
  223. package/pennyfarthing-dist/commands/tech-writer.md +0 -53
  224. package/pennyfarthing-dist/commands/theme-maker.md +0 -671
  225. package/pennyfarthing-dist/commands/update-domain-docs.md +0 -83
  226. package/pennyfarthing-dist/commands/ux-designer.md +0 -62
  227. package/pennyfarthing-dist/commands/work.md +0 -111
  228. package/pennyfarthing-dist/guides/AGENT-COORDINATION.md +0 -480
  229. package/pennyfarthing-dist/guides/AGENT-SCOPES.md +0 -201
  230. package/pennyfarthing-dist/guides/HOOKS.md +0 -230
  231. package/pennyfarthing-dist/guides/PROMPT-PATTERNS.md +0 -338
  232. package/pennyfarthing-dist/guides/SESSION-ARTIFACTS.md +0 -193
  233. package/pennyfarthing-dist/guides/agent-template-strategic.md +0 -148
  234. package/pennyfarthing-dist/guides/agent-template-tactical.md +0 -162
  235. package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +0 -746
  236. package/pennyfarthing-dist/guides/patterns/fan-out-fan-in-pattern.md +0 -574
  237. package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +0 -488
  238. package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +0 -402
  239. package/pennyfarthing-dist/guides/permission-protocol.md +0 -188
  240. package/pennyfarthing-dist/guides/persona-loading.md +0 -46
  241. package/pennyfarthing-dist/guides/persona-system.md +0 -294
  242. package/pennyfarthing-dist/guides/shared-agent-behavior.md +0 -388
  243. package/pennyfarthing-dist/guides/shared-context.md +0 -147
  244. package/pennyfarthing-dist/guides/strategic-agent-behavior.md +0 -348
  245. package/pennyfarthing-dist/guides/tactical-agent-behavior.md +0 -1041
  246. package/pennyfarthing-dist/guides/workflow-schema.md +0 -195
  247. package/pennyfarthing-dist/guides/worktree-mode.md +0 -113
  248. package/pennyfarthing-dist/output-styles/teaching.md +0 -33
  249. package/pennyfarthing-dist/output-styles/terse.md +0 -20
  250. package/pennyfarthing-dist/output-styles/verbose.md +0 -28
  251. package/pennyfarthing-dist/personas/themes/1984.yaml +0 -312
  252. package/pennyfarthing-dist/personas/themes/a-team.yaml +0 -207
  253. package/pennyfarthing-dist/personas/themes/agatha-christie.yaml +0 -300
  254. package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +0 -330
  255. package/pennyfarthing-dist/personas/themes/all-stars.yaml +0 -332
  256. package/pennyfarthing-dist/personas/themes/ancient-philosophers.yaml +0 -320
  257. package/pennyfarthing-dist/personas/themes/ancient-strategists.yaml +0 -306
  258. package/pennyfarthing-dist/personas/themes/arcane.yaml +0 -288
  259. package/pennyfarthing-dist/personas/themes/arthurian-mythos.yaml +0 -331
  260. package/pennyfarthing-dist/personas/themes/avatar-the-last-airbender.yaml +0 -288
  261. package/pennyfarthing-dist/personas/themes/babylon-5.yaml +0 -288
  262. package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +0 -288
  263. package/pennyfarthing-dist/personas/themes/better-call-saul.yaml +0 -288
  264. package/pennyfarthing-dist/personas/themes/big-lebowski.yaml +0 -300
  265. package/pennyfarthing-dist/personas/themes/black-sails.yaml +0 -300
  266. package/pennyfarthing-dist/personas/themes/blade-runner.yaml +0 -295
  267. package/pennyfarthing-dist/personas/themes/bobiverse.yaml +0 -288
  268. package/pennyfarthing-dist/personas/themes/breaking-bad.yaml +0 -327
  269. package/pennyfarthing-dist/personas/themes/catch-22.yaml +0 -316
  270. package/pennyfarthing-dist/personas/themes/classical-composers.yaml +0 -310
  271. package/pennyfarthing-dist/personas/themes/control.yaml +0 -197
  272. package/pennyfarthing-dist/personas/themes/count-of-monte-cristo.yaml +0 -320
  273. package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +0 -323
  274. package/pennyfarthing-dist/personas/themes/deadwood.yaml +0 -300
  275. package/pennyfarthing-dist/personas/themes/dickens.yaml +0 -320
  276. package/pennyfarthing-dist/personas/themes/discworld.yaml +0 -332
  277. package/pennyfarthing-dist/personas/themes/doctor-who.yaml +0 -290
  278. package/pennyfarthing-dist/personas/themes/don-quixote.yaml +0 -320
  279. package/pennyfarthing-dist/personas/themes/dune.yaml +0 -307
  280. package/pennyfarthing-dist/personas/themes/enlightenment-thinkers.yaml +0 -320
  281. package/pennyfarthing-dist/personas/themes/expeditionary-force.yaml +0 -288
  282. package/pennyfarthing-dist/personas/themes/fargo.yaml +0 -330
  283. package/pennyfarthing-dist/personas/themes/film-auteurs.yaml +0 -312
  284. package/pennyfarthing-dist/personas/themes/firefly.yaml +0 -328
  285. package/pennyfarthing-dist/personas/themes/foundation.yaml +0 -290
  286. package/pennyfarthing-dist/personas/themes/futurama.yaml +0 -321
  287. package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +0 -290
  288. package/pennyfarthing-dist/personas/themes/gilligans-island.yaml +0 -243
  289. package/pennyfarthing-dist/personas/themes/gothic-literature.yaml +0 -308
  290. package/pennyfarthing-dist/personas/themes/great-gatsby.yaml +0 -308
  291. package/pennyfarthing-dist/personas/themes/greek-mythology.yaml +0 -330
  292. package/pennyfarthing-dist/personas/themes/hannibal.yaml +0 -300
  293. package/pennyfarthing-dist/personas/themes/harry-potter.yaml +0 -324
  294. package/pennyfarthing-dist/personas/themes/his-dark-materials.yaml +0 -291
  295. package/pennyfarthing-dist/personas/themes/historical-figures.yaml +0 -288
  296. package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +0 -331
  297. package/pennyfarthing-dist/personas/themes/house-md.yaml +0 -321
  298. package/pennyfarthing-dist/personas/themes/imperial-radch.yaml +0 -289
  299. package/pennyfarthing-dist/personas/themes/inspector-morse.yaml +0 -300
  300. package/pennyfarthing-dist/personas/themes/jane-austen.yaml +0 -287
  301. package/pennyfarthing-dist/personas/themes/jazz-legends.yaml +0 -320
  302. package/pennyfarthing-dist/personas/themes/justified.yaml +0 -300
  303. package/pennyfarthing-dist/personas/themes/legion-of-doom.yaml +0 -219
  304. package/pennyfarthing-dist/personas/themes/les-miserables.yaml +0 -299
  305. package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +0 -334
  306. package/pennyfarthing-dist/personas/themes/lovecraft-mythos.yaml +0 -334
  307. package/pennyfarthing-dist/personas/themes/mad-max.yaml +0 -355
  308. package/pennyfarthing-dist/personas/themes/mad-men.yaml +0 -289
  309. package/pennyfarthing-dist/personas/themes/marvel-mcu.yaml +0 -300
  310. package/pennyfarthing-dist/personas/themes/mash.yaml +0 -334
  311. package/pennyfarthing-dist/personas/themes/mass-effect.yaml +0 -289
  312. package/pennyfarthing-dist/personas/themes/military-commanders.yaml +0 -306
  313. package/pennyfarthing-dist/personas/themes/moby-dick.yaml +0 -320
  314. package/pennyfarthing-dist/personas/themes/monty-python.yaml +0 -303
  315. package/pennyfarthing-dist/personas/themes/neuromancer.yaml +0 -300
  316. package/pennyfarthing-dist/personas/themes/norse-mythology.yaml +0 -329
  317. package/pennyfarthing-dist/personas/themes/parks-and-rec.yaml +0 -242
  318. package/pennyfarthing-dist/personas/themes/peaky-blinders.yaml +0 -298
  319. package/pennyfarthing-dist/personas/themes/princess-bride.yaml +0 -220
  320. package/pennyfarthing-dist/personas/themes/renaissance-masters.yaml +0 -320
  321. package/pennyfarthing-dist/personas/themes/rome.yaml +0 -300
  322. package/pennyfarthing-dist/personas/themes/russian-masters.yaml +0 -318
  323. package/pennyfarthing-dist/personas/themes/sandman.yaml +0 -288
  324. package/pennyfarthing-dist/personas/themes/scientific-revolutionaries.yaml +0 -320
  325. package/pennyfarthing-dist/personas/themes/shakespeare.yaml +0 -301
  326. package/pennyfarthing-dist/personas/themes/sherlock-holmes.yaml +0 -289
  327. package/pennyfarthing-dist/personas/themes/snow-crash.yaml +0 -288
  328. package/pennyfarthing-dist/personas/themes/software-pioneers.yaml +0 -300
  329. package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +0 -230
  330. package/pennyfarthing-dist/personas/themes/star-trek-tos.yaml +0 -210
  331. package/pennyfarthing-dist/personas/themes/star-wars.yaml +0 -303
  332. package/pennyfarthing-dist/personas/themes/succession.yaml +0 -300
  333. package/pennyfarthing-dist/personas/themes/superfriends.yaml +0 -208
  334. package/pennyfarthing-dist/personas/themes/ted-lasso.yaml +0 -236
  335. package/pennyfarthing-dist/personas/themes/the-americans.yaml +0 -300
  336. package/pennyfarthing-dist/personas/themes/the-crown.yaml +0 -300
  337. package/pennyfarthing-dist/personas/themes/the-expanse.yaml +0 -213
  338. package/pennyfarthing-dist/personas/themes/the-good-place.yaml +0 -322
  339. package/pennyfarthing-dist/personas/themes/the-matrix.yaml +0 -353
  340. package/pennyfarthing-dist/personas/themes/the-odyssey.yaml +0 -300
  341. package/pennyfarthing-dist/personas/themes/the-office.yaml +0 -330
  342. package/pennyfarthing-dist/personas/themes/the-simpsons.yaml +0 -308
  343. package/pennyfarthing-dist/personas/themes/the-sopranos.yaml +0 -300
  344. package/pennyfarthing-dist/personas/themes/the-wire.yaml +0 -311
  345. package/pennyfarthing-dist/personas/themes/the-witcher.yaml +0 -300
  346. package/pennyfarthing-dist/personas/themes/twin-peaks.yaml +0 -302
  347. package/pennyfarthing-dist/personas/themes/vorkosigan-saga.yaml +0 -300
  348. package/pennyfarthing-dist/personas/themes/watchmen.yaml +0 -291
  349. package/pennyfarthing-dist/personas/themes/west-wing.yaml +0 -291
  350. package/pennyfarthing-dist/personas/themes/world-explorers.yaml +0 -320
  351. package/pennyfarthing-dist/personas/themes/wwii-leaders.yaml +0 -307
  352. package/pennyfarthing-dist/personas/themes/x-files.yaml +0 -302
  353. package/pennyfarthing-dist/scripts/add-short-names.mjs +0 -264
  354. package/pennyfarthing-dist/scripts/agent-session.sh +0 -367
  355. package/pennyfarthing-dist/scripts/check-context.sh +0 -187
  356. package/pennyfarthing-dist/scripts/check.sh +0 -497
  357. package/pennyfarthing-dist/scripts/deploy.sh +0 -284
  358. package/pennyfarthing-dist/scripts/doctor-dogfood.sh +0 -395
  359. package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +0 -61
  360. package/pennyfarthing-dist/scripts/hooks/context-warning.sh +0 -66
  361. package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +0 -35
  362. package/pennyfarthing-dist/scripts/hooks/post-merge.sh +0 -166
  363. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +0 -50
  364. package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +0 -71
  365. package/pennyfarthing-dist/scripts/hooks/pre-push.sh +0 -54
  366. package/pennyfarthing-dist/scripts/hooks/session-start.sh +0 -98
  367. package/pennyfarthing-dist/scripts/hooks/session-stop.sh +0 -59
  368. package/pennyfarthing-dist/scripts/install-git-hooks.sh +0 -91
  369. package/pennyfarthing-dist/scripts/prime.sh +0 -161
  370. package/pennyfarthing-dist/scripts/release.sh +0 -198
  371. package/pennyfarthing-dist/scripts/repo-utils.sh +0 -778
  372. package/pennyfarthing-dist/scripts/run-ci.sh +0 -219
  373. package/pennyfarthing-dist/scripts/run.sh +0 -65
  374. package/pennyfarthing-dist/scripts/statusline.sh +0 -264
  375. package/pennyfarthing-dist/scripts/tests/check.test.sh +0 -582
  376. package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +0 -107
  377. package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +0 -597
  378. package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +0 -514
  379. package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +0 -517
  380. package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +0 -331
  381. package/pennyfarthing-dist/scripts/uninstall.sh +0 -271
  382. package/pennyfarthing-dist/scripts/utils/background-tasks.sh +0 -177
  383. package/pennyfarthing-dist/scripts/utils/check-status.sh +0 -251
  384. package/pennyfarthing-dist/scripts/utils/checkpoint.sh +0 -136
  385. package/pennyfarthing-dist/scripts/utils/common.sh +0 -157
  386. package/pennyfarthing-dist/scripts/utils/create-feature-branches.sh +0 -230
  387. package/pennyfarthing-dist/scripts/utils/file-lock.sh +0 -269
  388. package/pennyfarthing-dist/scripts/utils/find-related-work.sh +0 -231
  389. package/pennyfarthing-dist/scripts/utils/find-root.sh +0 -33
  390. package/pennyfarthing-dist/scripts/utils/generate-skill-docs.sh +0 -110
  391. package/pennyfarthing-dist/scripts/utils/git-status-all.sh +0 -127
  392. package/pennyfarthing-dist/scripts/utils/ground-truth-judge.py +0 -289
  393. package/pennyfarthing-dist/scripts/utils/jira/jira-lib.mjs +0 -443
  394. package/pennyfarthing-dist/scripts/utils/jira/jira-sync-story.mjs +0 -208
  395. package/pennyfarthing-dist/scripts/utils/jira/jira-sync.mjs +0 -198
  396. package/pennyfarthing-dist/scripts/utils/jira-claim-story.sh +0 -162
  397. package/pennyfarthing-dist/scripts/utils/jira-lib.sh +0 -463
  398. package/pennyfarthing-dist/scripts/utils/jira-sync-story.sh +0 -8
  399. package/pennyfarthing-dist/scripts/utils/jira-sync.sh +0 -8
  400. package/pennyfarthing-dist/scripts/utils/log-skill-usage.sh +0 -74
  401. package/pennyfarthing-dist/scripts/utils/logging.sh +0 -186
  402. package/pennyfarthing-dist/scripts/utils/repo-scan.sh +0 -141
  403. package/pennyfarthing-dist/scripts/utils/retry.sh +0 -76
  404. package/pennyfarthing-dist/scripts/utils/run-timestamp.sh +0 -7
  405. package/pennyfarthing-dist/scripts/utils/session-cleanup.sh +0 -319
  406. package/pennyfarthing-dist/scripts/utils/skill-usage-report.sh +0 -193
  407. package/pennyfarthing-dist/scripts/utils/sprint-common.sh +0 -286
  408. package/pennyfarthing-dist/scripts/utils/sprint-metrics.sh +0 -241
  409. package/pennyfarthing-dist/scripts/utils/swebench-judge.py +0 -400
  410. package/pennyfarthing-dist/scripts/utils/sync-epic-to-jira.sh +0 -16
  411. package/pennyfarthing-dist/scripts/utils/test-setup.sh +0 -337
  412. package/pennyfarthing-dist/scripts/utils/validate-subagent-frontmatter.sh +0 -160
  413. package/pennyfarthing-dist/scripts/worktree-manager.sh +0 -498
  414. package/pennyfarthing-dist/skills/agentic-patterns/SKILL.md +0 -236
  415. package/pennyfarthing-dist/skills/changelog/SKILL.md +0 -367
  416. package/pennyfarthing-dist/skills/code-review/SKILL.md +0 -168
  417. package/pennyfarthing-dist/skills/context-engineering/SKILL.md +0 -268
  418. package/pennyfarthing-dist/skills/cyclist/SKILL.md +0 -117
  419. package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +0 -421
  420. package/pennyfarthing-dist/skills/finalize-run/SKILL.md +0 -258
  421. package/pennyfarthing-dist/skills/jira/SKILL.md +0 -281
  422. package/pennyfarthing-dist/skills/judge/SKILL.md +0 -524
  423. package/pennyfarthing-dist/skills/just/SKILL.md +0 -160
  424. package/pennyfarthing-dist/skills/mermaid/SKILL.md +0 -240
  425. package/pennyfarthing-dist/skills/otel/skill.md +0 -222
  426. package/pennyfarthing-dist/skills/permissions/skill.md +0 -172
  427. package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +0 -173
  428. package/pennyfarthing-dist/skills/skill-registry.schema.json +0 -102
  429. package/pennyfarthing-dist/skills/skill-registry.yaml +0 -335
  430. package/pennyfarthing-dist/skills/sprint-context/SKILL.md +0 -120
  431. package/pennyfarthing-dist/skills/story-management/SKILL.md +0 -208
  432. package/pennyfarthing-dist/skills/testing/SKILL.md +0 -99
  433. package/pennyfarthing-dist/skills/testing/references/troubleshooting.md +0 -124
  434. package/pennyfarthing-dist/skills/theme/skill.md +0 -129
  435. package/pennyfarthing-dist/skills/theme-creation/SKILL.md +0 -169
  436. package/pennyfarthing-dist/skills/workflow/SKILL.md +0 -160
  437. package/pennyfarthing-dist/skills/yq/SKILL.md +0 -264
  438. package/pennyfarthing-dist/templates/LEADERBOARD.schema.yaml +0 -187
  439. package/pennyfarthing-dist/templates/LEADERBOARD.template.md +0 -59
  440. package/pennyfarthing-dist/templates/agent-scopes.yaml.template +0 -276
  441. package/pennyfarthing-dist/templates/pennyfarthing-settings.yaml.template +0 -61
  442. package/pennyfarthing-dist/templates/persona-config.yaml.template +0 -22
  443. package/pennyfarthing-dist/templates/preferences.yaml.template +0 -15
  444. package/pennyfarthing-dist/templates/settings.local.json.template +0 -90
  445. package/pennyfarthing-dist/templates/setup-env.sh.template +0 -18
  446. package/pennyfarthing-dist/templates/shared-context.md.template +0 -70
  447. package/pennyfarthing-dist/templates/sidecar/decisions.md.template +0 -40
  448. package/pennyfarthing-dist/templates/sidecar/gotchas.md.template +0 -37
  449. package/pennyfarthing-dist/templates/sidecar/patterns.md.template +0 -34
  450. package/pennyfarthing-dist/workflows/agent-docs.yaml +0 -70
  451. package/pennyfarthing-dist/workflows/bdd.yaml +0 -58
  452. package/pennyfarthing-dist/workflows/tdd.yaml +0 -50
  453. package/pennyfarthing-dist/workflows/trivial.yaml +0 -40
  454. /package/{packages/core/bin → bin}/pennyfarthing.js +0 -0
  455. /package/{packages/core/dist → dist}/bmad/context-reader.d.ts +0 -0
  456. /package/{packages/core/dist → dist}/bmad/context-reader.d.ts.map +0 -0
  457. /package/{packages/core/dist → dist}/bmad/context-reader.js +0 -0
  458. /package/{packages/core/dist → dist}/bmad/context-reader.js.map +0 -0
  459. /package/{packages/core/dist → dist}/bmad/context-reader.test.d.ts +0 -0
  460. /package/{packages/core/dist → dist}/bmad/context-reader.test.d.ts.map +0 -0
  461. /package/{packages/core/dist → dist}/bmad/context-reader.test.js +0 -0
  462. /package/{packages/core/dist → dist}/bmad/context-reader.test.js.map +0 -0
  463. /package/{packages/core/dist → dist}/bmad/epics-parser.d.ts +0 -0
  464. /package/{packages/core/dist → dist}/bmad/epics-parser.d.ts.map +0 -0
  465. /package/{packages/core/dist → dist}/bmad/epics-parser.js +0 -0
  466. /package/{packages/core/dist → dist}/bmad/epics-parser.js.map +0 -0
  467. /package/{packages/core/dist → dist}/bmad/epics-parser.test.d.ts +0 -0
  468. /package/{packages/core/dist → dist}/bmad/epics-parser.test.d.ts.map +0 -0
  469. /package/{packages/core/dist → dist}/bmad/epics-parser.test.js +0 -0
  470. /package/{packages/core/dist → dist}/bmad/epics-parser.test.js.map +0 -0
  471. /package/{packages/core/dist → dist}/bmad/index.d.ts +0 -0
  472. /package/{packages/core/dist → dist}/bmad/index.d.ts.map +0 -0
  473. /package/{packages/core/dist → dist}/bmad/index.js +0 -0
  474. /package/{packages/core/dist → dist}/bmad/index.js.map +0 -0
  475. /package/{packages/core/dist → dist}/bmad/status-sync.d.ts +0 -0
  476. /package/{packages/core/dist → dist}/bmad/status-sync.d.ts.map +0 -0
  477. /package/{packages/core/dist → dist}/bmad/status-sync.js +0 -0
  478. /package/{packages/core/dist → dist}/bmad/status-sync.js.map +0 -0
  479. /package/{packages/core/dist → dist}/bmad/status-sync.test.d.ts +0 -0
  480. /package/{packages/core/dist → dist}/bmad/status-sync.test.d.ts.map +0 -0
  481. /package/{packages/core/dist → dist}/bmad/status-sync.test.js +0 -0
  482. /package/{packages/core/dist → dist}/bmad/status-sync.test.js.map +0 -0
  483. /package/{packages/core/dist → dist}/bmad/story-exporter.d.ts +0 -0
  484. /package/{packages/core/dist → dist}/bmad/story-exporter.d.ts.map +0 -0
  485. /package/{packages/core/dist → dist}/bmad/story-exporter.js +0 -0
  486. /package/{packages/core/dist → dist}/bmad/story-exporter.js.map +0 -0
  487. /package/{packages/core/dist → dist}/bmad/story-exporter.test.d.ts +0 -0
  488. /package/{packages/core/dist → dist}/bmad/story-exporter.test.d.ts.map +0 -0
  489. /package/{packages/core/dist → dist}/bmad/story-exporter.test.js +0 -0
  490. /package/{packages/core/dist → dist}/bmad/story-exporter.test.js.map +0 -0
  491. /package/{packages/core/dist → dist}/bmad/story-parser.d.ts +0 -0
  492. /package/{packages/core/dist → dist}/bmad/story-parser.d.ts.map +0 -0
  493. /package/{packages/core/dist → dist}/bmad/story-parser.js +0 -0
  494. /package/{packages/core/dist → dist}/bmad/story-parser.js.map +0 -0
  495. /package/{packages/core/dist → dist}/bmad/story-parser.test.d.ts +0 -0
  496. /package/{packages/core/dist → dist}/bmad/story-parser.test.d.ts.map +0 -0
  497. /package/{packages/core/dist → dist}/bmad/story-parser.test.js +0 -0
  498. /package/{packages/core/dist → dist}/bmad/story-parser.test.js.map +0 -0
  499. /package/{packages/core/dist → dist}/cli/commands/command.d.ts +0 -0
  500. /package/{packages/core/dist → dist}/cli/commands/command.d.ts.map +0 -0
  501. /package/{packages/core/dist → dist}/cli/commands/command.js +0 -0
  502. /package/{packages/core/dist → dist}/cli/commands/command.js.map +0 -0
  503. /package/{packages/core/dist → dist}/cli/commands/cyclist.test.d.ts +0 -0
  504. /package/{packages/core/dist → dist}/cli/commands/cyclist.test.d.ts.map +0 -0
  505. /package/{packages/core/dist → dist}/cli/commands/doctor.d.ts +0 -0
  506. /package/{packages/core/dist → dist}/cli/commands/doctor.d.ts.map +0 -0
  507. /package/{packages/core/dist → dist}/cli/commands/doctor.js +0 -0
  508. /package/{packages/core/dist → dist}/cli/commands/doctor.js.map +0 -0
  509. /package/{packages/core/dist → dist}/cli/commands/init.d.ts +0 -0
  510. /package/{packages/core/dist → dist}/cli/commands/init.d.ts.map +0 -0
  511. /package/{packages/core/dist → dist}/cli/commands/init.js +0 -0
  512. /package/{packages/core/dist → dist}/cli/commands/init.js.map +0 -0
  513. /package/{packages/core/dist → dist}/cli/commands/skill.d.ts +0 -0
  514. /package/{packages/core/dist → dist}/cli/commands/skill.d.ts.map +0 -0
  515. /package/{packages/core/dist → dist}/cli/commands/skill.js +0 -0
  516. /package/{packages/core/dist → dist}/cli/commands/skill.js.map +0 -0
  517. /package/{packages/core/dist → dist}/cli/commands/theme.d.ts +0 -0
  518. /package/{packages/core/dist → dist}/cli/commands/theme.d.ts.map +0 -0
  519. /package/{packages/core/dist → dist}/cli/commands/theme.js +0 -0
  520. /package/{packages/core/dist → dist}/cli/commands/theme.js.map +0 -0
  521. /package/{packages/core/dist → dist}/cli/commands/uninstall.d.ts +0 -0
  522. /package/{packages/core/dist → dist}/cli/commands/uninstall.d.ts.map +0 -0
  523. /package/{packages/core/dist → dist}/cli/commands/uninstall.js +0 -0
  524. /package/{packages/core/dist → dist}/cli/commands/uninstall.js.map +0 -0
  525. /package/{packages/core/dist → dist}/cli/commands/update.d.ts +0 -0
  526. /package/{packages/core/dist → dist}/cli/commands/version.d.ts +0 -0
  527. /package/{packages/core/dist → dist}/cli/commands/version.d.ts.map +0 -0
  528. /package/{packages/core/dist → dist}/cli/commands/version.js +0 -0
  529. /package/{packages/core/dist → dist}/cli/commands/version.js.map +0 -0
  530. /package/{packages/core/dist → dist}/cli/customization.test.d.ts +0 -0
  531. /package/{packages/core/dist → dist}/cli/customization.test.d.ts.map +0 -0
  532. /package/{packages/core/dist → dist}/cli/customization.test.js +0 -0
  533. /package/{packages/core/dist → dist}/cli/customization.test.js.map +0 -0
  534. /package/{packages/core/dist → dist}/cli/cyclist-migration.test.d.ts +0 -0
  535. /package/{packages/core/dist → dist}/cli/cyclist-migration.test.d.ts.map +0 -0
  536. /package/{packages/core/dist → dist}/cli/index.d.ts +0 -0
  537. /package/{packages/core/dist → dist}/cli/index.d.ts.map +0 -0
  538. /package/{packages/core/dist → dist}/cli/index.js +0 -0
  539. /package/{packages/core/dist → dist}/cli/index.js.map +0 -0
  540. /package/{packages/core/dist → dist}/cli/ocean-profiles.test.d.ts +0 -0
  541. /package/{packages/core/dist → dist}/cli/ocean-profiles.test.d.ts.map +0 -0
  542. /package/{packages/core/dist → dist}/cli/ocean-profiles.test.js +0 -0
  543. /package/{packages/core/dist → dist}/cli/ocean-profiles.test.js.map +0 -0
  544. /package/{packages/core/dist → dist}/cli/theme-maker.test.d.ts +0 -0
  545. /package/{packages/core/dist → dist}/cli/theme-maker.test.d.ts.map +0 -0
  546. /package/{packages/core/dist → dist}/cli/theme-maker.test.js +0 -0
  547. /package/{packages/core/dist → dist}/cli/theme-maker.test.js.map +0 -0
  548. /package/{packages/core/dist → dist}/cli/utils/files.d.ts +0 -0
  549. /package/{packages/core/dist → dist}/cli/utils/files.d.ts.map +0 -0
  550. /package/{packages/core/dist → dist}/cli/utils/files.js +0 -0
  551. /package/{packages/core/dist → dist}/cli/utils/files.js.map +0 -0
  552. /package/{packages/core/dist → dist}/cli/utils/logger.d.ts +0 -0
  553. /package/{packages/core/dist → dist}/cli/utils/logger.d.ts.map +0 -0
  554. /package/{packages/core/dist → dist}/cli/utils/logger.js +0 -0
  555. /package/{packages/core/dist → dist}/cli/utils/logger.js.map +0 -0
  556. /package/{packages/core/dist → dist}/cli/utils/manifest.d.ts +0 -0
  557. /package/{packages/core/dist → dist}/cli/utils/manifest.d.ts.map +0 -0
  558. /package/{packages/core/dist → dist}/cli/utils/manifest.js +0 -0
  559. /package/{packages/core/dist → dist}/cli/utils/manifest.js.map +0 -0
  560. /package/{packages/core/dist → dist}/cli/utils/node-modules.d.ts +0 -0
  561. /package/{packages/core/dist → dist}/cli/utils/node-modules.d.ts.map +0 -0
  562. /package/{packages/core/dist → dist}/cli/utils/node-modules.js +0 -0
  563. /package/{packages/core/dist → dist}/cli/utils/node-modules.js.map +0 -0
  564. /package/{packages/core/dist → dist}/cli/utils/prompts.d.ts +0 -0
  565. /package/{packages/core/dist → dist}/cli/utils/prompts.d.ts.map +0 -0
  566. /package/{packages/core/dist → dist}/cli/utils/prompts.js +0 -0
  567. /package/{packages/core/dist → dist}/cli/utils/prompts.js.map +0 -0
  568. /package/{packages/core/dist → dist}/cli/utils/symlinks.d.ts +0 -0
  569. /package/{packages/core/dist → dist}/cli/utils/symlinks.d.ts.map +0 -0
  570. /package/{packages/core/dist → dist}/cli/utils/symlinks.js +0 -0
  571. /package/{packages/core/dist → dist}/cli/utils/symlinks.js.map +0 -0
  572. /package/{packages/core/dist → dist}/cli/utils/themes.test.d.ts.map +0 -0
  573. /package/{packages/core/dist → dist}/cli/utils/version.d.ts +0 -0
  574. /package/{packages/core/dist → dist}/cli/utils/version.d.ts.map +0 -0
  575. /package/{packages/core/dist → dist}/cli/utils/version.js +0 -0
  576. /package/{packages/core/dist → dist}/cli/utils/version.js.map +0 -0
  577. /package/{packages/core/dist → dist}/cli/workspace.test.d.ts +0 -0
  578. /package/{packages/core/dist → dist}/cli/workspace.test.d.ts.map +0 -0
  579. /package/{packages/core/dist → dist}/permissions/index.d.ts +0 -0
  580. /package/{packages/core/dist → dist}/permissions/index.d.ts.map +0 -0
  581. /package/{packages/core/dist → dist}/permissions/index.js +0 -0
  582. /package/{packages/core/dist → dist}/permissions/index.js.map +0 -0
  583. /package/{packages/core/dist → dist}/permissions/permission-schema.d.ts +0 -0
  584. /package/{packages/core/dist → dist}/permissions/permission-schema.d.ts.map +0 -0
  585. /package/{packages/core/dist → dist}/permissions/permission-schema.js +0 -0
  586. /package/{packages/core/dist → dist}/permissions/permission-schema.js.map +0 -0
  587. /package/{packages/core/dist → dist}/permissions/permission-schema.test.d.ts +0 -0
  588. /package/{packages/core/dist → dist}/permissions/permission-schema.test.d.ts.map +0 -0
  589. /package/{packages/core/dist → dist}/permissions/permission-schema.test.js +0 -0
  590. /package/{packages/core/dist → dist}/permissions/permission-schema.test.js.map +0 -0
  591. /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.d.ts +0 -0
  592. /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.d.ts.map +0 -0
  593. /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.js +0 -0
  594. /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.js.map +0 -0
  595. /package/{packages/core/dist → dist}/scripts/benchmark-integration.d.ts +0 -0
  596. /package/{packages/core/dist → dist}/scripts/benchmark-integration.d.ts.map +0 -0
  597. /package/{packages/core/dist → dist}/scripts/benchmark-integration.js +0 -0
  598. /package/{packages/core/dist → dist}/scripts/benchmark-integration.js.map +0 -0
  599. /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.d.ts +0 -0
  600. /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.d.ts.map +0 -0
  601. /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.js +0 -0
  602. /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.js.map +0 -0
  603. /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.d.ts +0 -0
  604. /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.d.ts.map +0 -0
  605. /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.js +0 -0
  606. /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.js.map +0 -0
  607. /package/{packages/core/dist → dist}/scripts/generate-all-spiders.d.ts +0 -0
  608. /package/{packages/core/dist → dist}/scripts/generate-all-spiders.d.ts.map +0 -0
  609. /package/{packages/core/dist → dist}/scripts/generate-all-spiders.js +0 -0
  610. /package/{packages/core/dist → dist}/scripts/generate-all-spiders.js.map +0 -0
  611. /package/{packages/core/dist → dist}/scripts/generate-report.d.ts +0 -0
  612. /package/{packages/core/dist → dist}/scripts/generate-report.d.ts.map +0 -0
  613. /package/{packages/core/dist → dist}/scripts/generate-report.js +0 -0
  614. /package/{packages/core/dist → dist}/scripts/generate-report.js.map +0 -0
  615. /package/{packages/core/dist → dist}/scripts/generate-report.test.d.ts +0 -0
  616. /package/{packages/core/dist → dist}/scripts/generate-report.test.d.ts.map +0 -0
  617. /package/{packages/core/dist → dist}/scripts/generate-report.test.js +0 -0
  618. /package/{packages/core/dist → dist}/scripts/generate-report.test.js.map +0 -0
  619. /package/{packages/core/dist → dist}/scripts/generate-spider-report.d.ts +0 -0
  620. /package/{packages/core/dist → dist}/scripts/generate-spider-report.d.ts.map +0 -0
  621. /package/{packages/core/dist → dist}/scripts/generate-spider-report.js +0 -0
  622. /package/{packages/core/dist → dist}/scripts/generate-spider-report.js.map +0 -0
  623. /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.d.ts +0 -0
  624. /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.d.ts.map +0 -0
  625. /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.js +0 -0
  626. /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.js.map +0 -0
  627. /package/{packages/core/dist → dist}/scripts/generate-spider.test.d.ts +0 -0
  628. /package/{packages/core/dist → dist}/scripts/generate-spider.test.d.ts.map +0 -0
  629. /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.d.ts +0 -0
  630. /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.d.ts.map +0 -0
  631. /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.js +0 -0
  632. /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.js.map +0 -0
  633. /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.d.ts +0 -0
  634. /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.d.ts.map +0 -0
  635. /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.js +0 -0
  636. /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.js.map +0 -0
  637. /package/{packages/core/dist → dist}/scripts/run-ci.test.d.ts +0 -0
  638. /package/{packages/core/dist → dist}/scripts/run-ci.test.d.ts.map +0 -0
  639. /package/{packages/core/dist → dist}/scripts/run-ci.test.js +0 -0
  640. /package/{packages/core/dist → dist}/scripts/run-ci.test.js.map +0 -0
  641. /package/{packages/core/dist → dist}/scripts/theme-detail.test.d.ts +0 -0
  642. /package/{packages/core/dist → dist}/scripts/theme-detail.test.d.ts.map +0 -0
  643. /package/{packages/core/dist → dist}/scripts/theme-detail.test.js +0 -0
  644. /package/{packages/core/dist → dist}/scripts/theme-detail.test.js.map +0 -0
  645. /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.d.ts +0 -0
  646. /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.d.ts.map +0 -0
  647. /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.js +0 -0
  648. /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.js.map +0 -0
  649. /package/{packages/core/dist → dist}/workflow/generic-handoff.test.d.ts +0 -0
  650. /package/{packages/core/dist → dist}/workflow/generic-handoff.test.d.ts.map +0 -0
  651. /package/{packages/core/dist → dist}/workflow/generic-sm-finish.d.ts +0 -0
  652. /package/{packages/core/dist → dist}/workflow/generic-sm-finish.d.ts.map +0 -0
  653. /package/{packages/core/dist → dist}/workflow/generic-sm-finish.js +0 -0
  654. /package/{packages/core/dist → dist}/workflow/generic-sm-finish.js.map +0 -0
  655. /package/{packages/core/dist → dist}/workflow/generic-sm-setup.d.ts +0 -0
  656. /package/{packages/core/dist → dist}/workflow/generic-sm-setup.d.ts.map +0 -0
  657. /package/{packages/core/dist → dist}/workflow/generic-sm-setup.js +0 -0
  658. /package/{packages/core/dist → dist}/workflow/generic-sm-setup.js.map +0 -0
  659. /package/{packages/core/dist → dist}/workflow/sm-subagents.test.d.ts +0 -0
  660. /package/{packages/core/dist → dist}/workflow/sm-subagents.test.d.ts.map +0 -0
  661. /package/{packages/core/dist → dist}/workflow/sm-subagents.test.js +0 -0
  662. /package/{packages/core/dist → dist}/workflow/sm-subagents.test.js.map +0 -0
  663. /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.d.ts +0 -0
  664. /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.d.ts.map +0 -0
  665. /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.js +0 -0
  666. /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.js.map +0 -0
  667. /package/{packages/core/dist → dist}/workflow/test-cache.d.ts +0 -0
  668. /package/{packages/core/dist → dist}/workflow/test-cache.d.ts.map +0 -0
  669. /package/{packages/core/dist → dist}/workflow/test-cache.js +0 -0
  670. /package/{packages/core/dist → dist}/workflow/test-cache.js.map +0 -0
  671. /package/{packages/core/dist → dist}/workflow/test-cache.test.d.ts +0 -0
  672. /package/{packages/core/dist → dist}/workflow/test-cache.test.d.ts.map +0 -0
  673. /package/{packages/core/dist → dist}/workflow/test-cache.test.js +0 -0
  674. /package/{packages/core/dist → dist}/workflow/test-cache.test.js.map +0 -0
  675. /package/{packages/core/dist → dist}/workflow/workflow-loader.d.ts +0 -0
  676. /package/{packages/core/dist → dist}/workflow/workflow-loader.d.ts.map +0 -0
  677. /package/{packages/core/dist → dist}/workflow/workflow-loader.js +0 -0
  678. /package/{packages/core/dist → dist}/workflow/workflow-loader.js.map +0 -0
  679. /package/{packages/core/dist → dist}/workflow/workflow-loader.test.d.ts +0 -0
  680. /package/{packages/core/dist → dist}/workflow/workflow-loader.test.d.ts.map +0 -0
  681. /package/{packages/core/dist → dist}/workflow/workflow-migration.test.d.ts +0 -0
  682. /package/{packages/core/dist → dist}/workflow/workflow-migration.test.d.ts.map +0 -0
  683. /package/{packages/core/dist → dist}/workflow/workflow-router.d.ts +0 -0
  684. /package/{packages/core/dist → dist}/workflow/workflow-router.d.ts.map +0 -0
  685. /package/{packages/core/dist → dist}/workflow/workflow-router.js +0 -0
  686. /package/{packages/core/dist → dist}/workflow/workflow-router.js.map +0 -0
  687. /package/{packages/core/dist → dist}/workflow/workflow-router.test.d.ts +0 -0
  688. /package/{packages/core/dist → dist}/workflow/workflow-router.test.d.ts.map +0 -0
  689. /package/{packages/core/dist → dist}/workflow/workflow-router.test.js +0 -0
  690. /package/{packages/core/dist → dist}/workflow/workflow-router.test.js.map +0 -0
  691. /package/{packages/core/dist → dist}/workflow/workflow-schema.test.d.ts +0 -0
  692. /package/{packages/core/dist → dist}/workflow/workflow-schema.test.d.ts.map +0 -0
@@ -0,0 +1,551 @@
1
+ /**
2
+ * Session State Tests for MSSCI-12082
3
+ *
4
+ * Tests for session file stepped workflow state tracking.
5
+ * Covers all 4 acceptance criteria plus edge cases.
6
+ */
7
+ import { describe, it } from 'node:test';
8
+ import assert from 'node:assert';
9
+ import { initWorkflowState, updateWorkflowState, parseSessionState, updateSessionContent, formatWorkflowState, } from './session-state.js';
10
+ // =============================================================================
11
+ // AC1: Session file has Workflow State section
12
+ // =============================================================================
13
+ describe('MSSCI-12082: Session State', () => {
14
+ describe('AC1: Session file has Workflow State section', () => {
15
+ it('should parse Workflow State section from session file', () => {
16
+ const content = `# Story MSSCI-12082: Test Story
17
+
18
+ ## Story Overview
19
+ - **Epic:** Test Epic
20
+ - **Points:** 2
21
+
22
+ ## Workflow State
23
+ - **Workflow Name:** architecture
24
+ - **Type:** stepped
25
+ - **Mode:** create
26
+ - **Started:** 2026-01-20T10:00:00.000Z
27
+ - **Last Updated:** 2026-01-20T11:30:00.000Z
28
+ - **Current Step:** 3
29
+ - **Steps Completed:** [1, 2]
30
+ - **Status:** in_progress
31
+
32
+ ## Acceptance Criteria
33
+ - [ ] AC1: Test
34
+ `;
35
+ const result = parseSessionState(content);
36
+ assert.strictEqual(result.success, true);
37
+ assert.ok(result.state);
38
+ assert.strictEqual(result.state.name, 'architecture');
39
+ assert.strictEqual(result.state.type, 'stepped');
40
+ assert.strictEqual(result.state.mode, 'create');
41
+ assert.strictEqual(result.state.currentStep, 3);
42
+ assert.deepStrictEqual(result.state.stepsCompleted, [1, 2]);
43
+ assert.strictEqual(result.state.status, 'in_progress');
44
+ });
45
+ it('should extract workflow name correctly', () => {
46
+ const content = `## Workflow State
47
+ - **Workflow Name:** planning-workflow
48
+ - **Type:** stepped
49
+ - **Started:** 2026-01-20T10:00:00.000Z
50
+ - **Last Updated:** 2026-01-20T10:00:00.000Z
51
+ - **Current Step:** 1
52
+ - **Steps Completed:** []
53
+ - **Status:** in_progress
54
+ `;
55
+ const result = parseSessionState(content);
56
+ assert.strictEqual(result.success, true);
57
+ assert.strictEqual(result.state?.name, 'planning-workflow');
58
+ });
59
+ it('should extract type as stepped or phased', () => {
60
+ const steppedContent = `## Workflow State
61
+ - **Workflow Name:** test
62
+ - **Type:** stepped
63
+ - **Started:** 2026-01-20T10:00:00.000Z
64
+ - **Last Updated:** 2026-01-20T10:00:00.000Z
65
+ - **Current Step:** 1
66
+ - **Steps Completed:** []
67
+ - **Status:** in_progress
68
+ `;
69
+ const phasedContent = `## Workflow State
70
+ - **Workflow Name:** test
71
+ - **Type:** phased
72
+ - **Started:** 2026-01-20T10:00:00.000Z
73
+ - **Last Updated:** 2026-01-20T10:00:00.000Z
74
+ - **Current Step:** 1
75
+ - **Steps Completed:** []
76
+ - **Status:** in_progress
77
+ `;
78
+ const steppedResult = parseSessionState(steppedContent);
79
+ const phasedResult = parseSessionState(phasedContent);
80
+ assert.strictEqual(steppedResult.state?.type, 'stepped');
81
+ assert.strictEqual(phasedResult.state?.type, 'phased');
82
+ });
83
+ it('should extract optional mode field (create/validate/edit)', () => {
84
+ const createContent = `## Workflow State
85
+ - **Workflow Name:** test
86
+ - **Type:** stepped
87
+ - **Mode:** create
88
+ - **Started:** 2026-01-20T10:00:00.000Z
89
+ - **Last Updated:** 2026-01-20T10:00:00.000Z
90
+ - **Current Step:** 1
91
+ - **Steps Completed:** []
92
+ - **Status:** in_progress
93
+ `;
94
+ const validateContent = `## Workflow State
95
+ - **Workflow Name:** test
96
+ - **Type:** stepped
97
+ - **Mode:** validate
98
+ - **Started:** 2026-01-20T10:00:00.000Z
99
+ - **Last Updated:** 2026-01-20T10:00:00.000Z
100
+ - **Current Step:** 1
101
+ - **Steps Completed:** []
102
+ - **Status:** in_progress
103
+ `;
104
+ const editContent = `## Workflow State
105
+ - **Workflow Name:** test
106
+ - **Type:** stepped
107
+ - **Mode:** edit
108
+ - **Started:** 2026-01-20T10:00:00.000Z
109
+ - **Last Updated:** 2026-01-20T10:00:00.000Z
110
+ - **Current Step:** 1
111
+ - **Steps Completed:** []
112
+ - **Status:** in_progress
113
+ `;
114
+ assert.strictEqual(parseSessionState(createContent).state?.mode, 'create');
115
+ assert.strictEqual(parseSessionState(validateContent).state?.mode, 'validate');
116
+ assert.strictEqual(parseSessionState(editContent).state?.mode, 'edit');
117
+ });
118
+ it('should extract timestamps in ISO format', () => {
119
+ const content = `## Workflow State
120
+ - **Workflow Name:** test
121
+ - **Type:** stepped
122
+ - **Started:** 2026-01-20T10:30:45.123Z
123
+ - **Last Updated:** 2026-01-20T14:22:33.456Z
124
+ - **Current Step:** 1
125
+ - **Steps Completed:** []
126
+ - **Status:** in_progress
127
+ `;
128
+ const result = parseSessionState(content);
129
+ assert.strictEqual(result.state?.started, '2026-01-20T10:30:45.123Z');
130
+ assert.strictEqual(result.state?.lastUpdated, '2026-01-20T14:22:33.456Z');
131
+ });
132
+ it('should handle notes field if present', () => {
133
+ const content = `## Workflow State
134
+ - **Workflow Name:** test
135
+ - **Type:** stepped
136
+ - **Started:** 2026-01-20T10:00:00.000Z
137
+ - **Last Updated:** 2026-01-20T10:00:00.000Z
138
+ - **Current Step:** 2
139
+ - **Steps Completed:** [1]
140
+ - **Status:** paused
141
+ - **Notes:** Waiting for user input at gate
142
+
143
+ ## Next Section
144
+ `;
145
+ const result = parseSessionState(content);
146
+ assert.strictEqual(result.state?.notes, 'Waiting for user input at gate');
147
+ });
148
+ });
149
+ // =============================================================================
150
+ // AC2: State tracks current step and completed steps
151
+ // =============================================================================
152
+ describe('AC2: State tracks current step and completed steps', () => {
153
+ it('should initialize state at step 1 with empty completed array', () => {
154
+ const state = initWorkflowState('architecture', 'stepped', 'create');
155
+ assert.strictEqual(state.name, 'architecture');
156
+ assert.strictEqual(state.type, 'stepped');
157
+ assert.strictEqual(state.mode, 'create');
158
+ assert.strictEqual(state.currentStep, 1);
159
+ assert.deepStrictEqual(state.stepsCompleted, []);
160
+ assert.strictEqual(state.status, 'in_progress');
161
+ });
162
+ it('should initialize state without mode for phased workflows', () => {
163
+ const state = initWorkflowState('tdd-workflow', 'phased');
164
+ assert.strictEqual(state.name, 'tdd-workflow');
165
+ assert.strictEqual(state.type, 'phased');
166
+ assert.strictEqual(state.mode, undefined);
167
+ });
168
+ it('should update state from step 1 to step 2', () => {
169
+ const initial = initWorkflowState('test', 'stepped');
170
+ const updated = updateWorkflowState(initial, 1); // completed step 1
171
+ assert.strictEqual(updated.currentStep, 2);
172
+ assert.deepStrictEqual(updated.stepsCompleted, [1]);
173
+ });
174
+ it('should update state from step 2 to step 3', () => {
175
+ const state = {
176
+ name: 'test',
177
+ type: 'stepped',
178
+ started: '2026-01-20T10:00:00.000Z',
179
+ lastUpdated: '2026-01-20T10:00:00.000Z',
180
+ currentStep: 2,
181
+ stepsCompleted: [1],
182
+ status: 'in_progress',
183
+ };
184
+ const updated = updateWorkflowState(state, 2);
185
+ assert.strictEqual(updated.currentStep, 3);
186
+ assert.deepStrictEqual(updated.stepsCompleted, [1, 2]);
187
+ });
188
+ it('should accumulate completed steps in order', () => {
189
+ let state = initWorkflowState('test', 'stepped');
190
+ state = updateWorkflowState(state, 1);
191
+ assert.deepStrictEqual(state.stepsCompleted, [1]);
192
+ state = updateWorkflowState(state, 2);
193
+ assert.deepStrictEqual(state.stepsCompleted, [1, 2]);
194
+ state = updateWorkflowState(state, 3);
195
+ assert.deepStrictEqual(state.stepsCompleted, [1, 2, 3]);
196
+ state = updateWorkflowState(state, 4);
197
+ assert.deepStrictEqual(state.stepsCompleted, [1, 2, 3, 4]);
198
+ });
199
+ it('should allow jumping to specific next step', () => {
200
+ const state = initWorkflowState('test', 'stepped');
201
+ const updated = updateWorkflowState(state, 1, 5); // skip to step 5
202
+ assert.strictEqual(updated.currentStep, 5);
203
+ assert.deepStrictEqual(updated.stepsCompleted, [1]);
204
+ });
205
+ it('should update lastUpdated timestamp on state change', () => {
206
+ const state = initWorkflowState('test', 'stepped');
207
+ const _originalLastUpdated = state.lastUpdated;
208
+ // Small delay to ensure timestamp changes
209
+ const updated = updateWorkflowState(state, 1);
210
+ // lastUpdated should be different (or at least not throw)
211
+ assert.ok(updated.lastUpdated);
212
+ assert.strictEqual(typeof updated.lastUpdated, 'string');
213
+ });
214
+ it('should preserve started timestamp on updates', () => {
215
+ const state = {
216
+ name: 'test',
217
+ type: 'stepped',
218
+ started: '2026-01-15T09:00:00.000Z',
219
+ lastUpdated: '2026-01-15T09:00:00.000Z',
220
+ currentStep: 1,
221
+ stepsCompleted: [],
222
+ status: 'in_progress',
223
+ };
224
+ const updated = updateWorkflowState(state, 1);
225
+ assert.strictEqual(updated.started, '2026-01-15T09:00:00.000Z');
226
+ });
227
+ });
228
+ // =============================================================================
229
+ // AC3: State persists across session reloads
230
+ // =============================================================================
231
+ describe('AC3: State persists across session reloads', () => {
232
+ it('should format state as markdown section', () => {
233
+ const state = {
234
+ name: 'architecture',
235
+ type: 'stepped',
236
+ mode: 'create',
237
+ started: '2026-01-20T10:00:00.000Z',
238
+ lastUpdated: '2026-01-20T11:30:00.000Z',
239
+ currentStep: 3,
240
+ stepsCompleted: [1, 2],
241
+ status: 'in_progress',
242
+ };
243
+ const formatted = formatWorkflowState(state);
244
+ assert.ok(formatted.includes('## Workflow State'));
245
+ assert.ok(formatted.includes('**Workflow Name:** architecture'));
246
+ assert.ok(formatted.includes('**Type:** stepped'));
247
+ assert.ok(formatted.includes('**Mode:** create'));
248
+ assert.ok(formatted.includes('**Current Step:** 3'));
249
+ assert.ok(formatted.includes('**Steps Completed:** [1, 2]'));
250
+ });
251
+ it('should write state to session file content', () => {
252
+ const originalContent = `# Story Test
253
+
254
+ ## Story Overview
255
+ - **Epic:** Test
256
+
257
+ ## Acceptance Criteria
258
+ - [ ] AC1
259
+ `;
260
+ const state = {
261
+ name: 'test-workflow',
262
+ type: 'stepped',
263
+ started: '2026-01-20T10:00:00.000Z',
264
+ lastUpdated: '2026-01-20T10:00:00.000Z',
265
+ currentStep: 1,
266
+ stepsCompleted: [],
267
+ status: 'in_progress',
268
+ };
269
+ const result = updateSessionContent(originalContent, state);
270
+ assert.strictEqual(result.success, true);
271
+ assert.ok(result.content?.includes('## Workflow State'));
272
+ assert.ok(result.content?.includes('**Workflow Name:** test-workflow'));
273
+ });
274
+ it('should read back written state unchanged', () => {
275
+ const originalState = {
276
+ name: 'architecture',
277
+ type: 'stepped',
278
+ mode: 'validate',
279
+ started: '2026-01-20T10:00:00.000Z',
280
+ lastUpdated: '2026-01-20T12:00:00.000Z',
281
+ currentStep: 5,
282
+ stepsCompleted: [1, 2, 3, 4],
283
+ status: 'in_progress',
284
+ };
285
+ const sessionContent = `# Story Test
286
+
287
+ ## Workflow State
288
+ - **Workflow Name:** architecture
289
+ - **Type:** stepped
290
+ - **Mode:** validate
291
+ - **Started:** 2026-01-20T10:00:00.000Z
292
+ - **Last Updated:** 2026-01-20T12:00:00.000Z
293
+ - **Current Step:** 5
294
+ - **Steps Completed:** [1, 2, 3, 4]
295
+ - **Status:** in_progress
296
+ `;
297
+ // Write then read back
298
+ const writeResult = updateSessionContent(sessionContent, originalState);
299
+ assert.strictEqual(writeResult.success, true);
300
+ const readResult = parseSessionState(writeResult.content);
301
+ assert.strictEqual(readResult.success, true);
302
+ // Verify all fields match
303
+ assert.strictEqual(readResult.state?.name, originalState.name);
304
+ assert.strictEqual(readResult.state?.type, originalState.type);
305
+ assert.strictEqual(readResult.state?.mode, originalState.mode);
306
+ assert.strictEqual(readResult.state?.started, originalState.started);
307
+ assert.strictEqual(readResult.state?.currentStep, originalState.currentStep);
308
+ assert.deepStrictEqual(readResult.state?.stepsCompleted, originalState.stepsCompleted);
309
+ assert.strictEqual(readResult.state?.status, originalState.status);
310
+ });
311
+ it('should handle multi-step workflow state persistence', () => {
312
+ const state = {
313
+ name: 'comprehensive-workflow',
314
+ type: 'stepped',
315
+ mode: 'create',
316
+ started: '2026-01-15T08:00:00.000Z',
317
+ lastUpdated: '2026-01-20T16:45:30.123Z',
318
+ currentStep: 10,
319
+ stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8, 9],
320
+ status: 'in_progress',
321
+ notes: 'Almost complete',
322
+ };
323
+ const formatted = formatWorkflowState(state);
324
+ const parsed = parseSessionState(formatted);
325
+ assert.strictEqual(parsed.success, true);
326
+ assert.deepStrictEqual(parsed.state?.stepsCompleted, [1, 2, 3, 4, 5, 6, 7, 8, 9]);
327
+ assert.strictEqual(parsed.state?.currentStep, 10);
328
+ });
329
+ it('should update existing Workflow State section', () => {
330
+ const existingContent = `# Story Test
331
+
332
+ ## Story Overview
333
+ - **Epic:** Test
334
+
335
+ ## Workflow State
336
+ - **Workflow Name:** old-workflow
337
+ - **Type:** stepped
338
+ - **Started:** 2026-01-19T10:00:00.000Z
339
+ - **Last Updated:** 2026-01-19T10:00:00.000Z
340
+ - **Current Step:** 1
341
+ - **Steps Completed:** []
342
+ - **Status:** in_progress
343
+
344
+ ## Acceptance Criteria
345
+ - [ ] AC1
346
+ `;
347
+ const newState = {
348
+ name: 'old-workflow',
349
+ type: 'stepped',
350
+ started: '2026-01-19T10:00:00.000Z',
351
+ lastUpdated: '2026-01-20T15:00:00.000Z',
352
+ currentStep: 3,
353
+ stepsCompleted: [1, 2],
354
+ status: 'in_progress',
355
+ };
356
+ const result = updateSessionContent(existingContent, newState);
357
+ assert.strictEqual(result.success, true);
358
+ assert.ok(result.content?.includes('**Current Step:** 3'));
359
+ assert.ok(result.content?.includes('**Steps Completed:** [1, 2]'));
360
+ // Should still have other sections
361
+ assert.ok(result.content?.includes('## Story Overview'));
362
+ assert.ok(result.content?.includes('## Acceptance Criteria'));
363
+ });
364
+ });
365
+ // =============================================================================
366
+ // AC4: Reader/writer handles missing state gracefully
367
+ // =============================================================================
368
+ describe('AC4: Reader/writer handles missing state gracefully', () => {
369
+ it('should return success with undefined state for missing section', () => {
370
+ const content = `# Story Test
371
+
372
+ ## Story Overview
373
+ - **Epic:** Test
374
+
375
+ ## Acceptance Criteria
376
+ - [ ] AC1
377
+ `;
378
+ const result = parseSessionState(content);
379
+ assert.strictEqual(result.success, true);
380
+ assert.strictEqual(result.state, undefined);
381
+ });
382
+ it('should insert Workflow State section when missing', () => {
383
+ const content = `# Story Test
384
+
385
+ ## Story Overview
386
+ - **Epic:** Test
387
+
388
+ ## Acceptance Criteria
389
+ - [ ] AC1
390
+ `;
391
+ const state = {
392
+ name: 'new-workflow',
393
+ type: 'stepped',
394
+ started: '2026-01-20T10:00:00.000Z',
395
+ lastUpdated: '2026-01-20T10:00:00.000Z',
396
+ currentStep: 1,
397
+ stepsCompleted: [],
398
+ status: 'in_progress',
399
+ };
400
+ const result = updateSessionContent(content, state);
401
+ assert.strictEqual(result.success, true);
402
+ assert.ok(result.content?.includes('## Workflow State'));
403
+ assert.ok(result.content?.includes('**Workflow Name:** new-workflow'));
404
+ });
405
+ it('should handle empty session file', () => {
406
+ const content = '';
407
+ const result = parseSessionState(content);
408
+ assert.strictEqual(result.success, true);
409
+ assert.strictEqual(result.state, undefined);
410
+ });
411
+ it('should handle session file with only header', () => {
412
+ const content = '# Story Test\n';
413
+ const result = parseSessionState(content);
414
+ assert.strictEqual(result.success, true);
415
+ assert.strictEqual(result.state, undefined);
416
+ });
417
+ it('should use default values for missing optional fields', () => {
418
+ const content = `## Workflow State
419
+ - **Workflow Name:** test
420
+ - **Type:** stepped
421
+ - **Started:** 2026-01-20T10:00:00.000Z
422
+ - **Last Updated:** 2026-01-20T10:00:00.000Z
423
+ - **Current Step:** 1
424
+ - **Steps Completed:** []
425
+ - **Status:** in_progress
426
+ `;
427
+ const result = parseSessionState(content);
428
+ assert.strictEqual(result.success, true);
429
+ assert.strictEqual(result.state?.mode, undefined);
430
+ assert.strictEqual(result.state?.notes, undefined);
431
+ });
432
+ });
433
+ // =============================================================================
434
+ // Edge Cases
435
+ // =============================================================================
436
+ describe('Edge Cases', () => {
437
+ it('should handle empty stepsCompleted array', () => {
438
+ const content = `## Workflow State
439
+ - **Workflow Name:** test
440
+ - **Type:** stepped
441
+ - **Started:** 2026-01-20T10:00:00.000Z
442
+ - **Last Updated:** 2026-01-20T10:00:00.000Z
443
+ - **Current Step:** 1
444
+ - **Steps Completed:** []
445
+ - **Status:** in_progress
446
+ `;
447
+ const result = parseSessionState(content);
448
+ assert.strictEqual(result.success, true);
449
+ assert.deepStrictEqual(result.state?.stepsCompleted, []);
450
+ });
451
+ it('should handle completed workflow status', () => {
452
+ const content = `## Workflow State
453
+ - **Workflow Name:** test
454
+ - **Type:** stepped
455
+ - **Started:** 2026-01-20T10:00:00.000Z
456
+ - **Last Updated:** 2026-01-20T12:00:00.000Z
457
+ - **Current Step:** 5
458
+ - **Steps Completed:** [1, 2, 3, 4, 5]
459
+ - **Status:** completed
460
+ `;
461
+ const result = parseSessionState(content);
462
+ assert.strictEqual(result.state?.status, 'completed');
463
+ });
464
+ it('should handle paused workflow status', () => {
465
+ const content = `## Workflow State
466
+ - **Workflow Name:** test
467
+ - **Type:** stepped
468
+ - **Started:** 2026-01-20T10:00:00.000Z
469
+ - **Last Updated:** 2026-01-20T11:00:00.000Z
470
+ - **Current Step:** 2
471
+ - **Steps Completed:** [1]
472
+ - **Status:** paused
473
+ `;
474
+ const result = parseSessionState(content);
475
+ assert.strictEqual(result.state?.status, 'paused');
476
+ });
477
+ it('should handle malformed stepsCompleted gracefully', () => {
478
+ const content = `## Workflow State
479
+ - **Workflow Name:** test
480
+ - **Type:** stepped
481
+ - **Started:** 2026-01-20T10:00:00.000Z
482
+ - **Last Updated:** 2026-01-20T10:00:00.000Z
483
+ - **Current Step:** 1
484
+ - **Steps Completed:** not-an-array
485
+ - **Status:** in_progress
486
+ `;
487
+ // Should either parse as empty array or return error - implementation choice
488
+ const result = parseSessionState(content);
489
+ // At minimum, should not throw
490
+ assert.ok(result);
491
+ });
492
+ it('should handle section with extra whitespace', () => {
493
+ const content = `## Workflow State
494
+
495
+ - **Workflow Name:** architecture
496
+ - **Type:** stepped
497
+ - **Started:** 2026-01-20T10:00:00.000Z
498
+ - **Last Updated:** 2026-01-20T10:00:00.000Z
499
+ - **Current Step:** 2
500
+ - **Steps Completed:** [1]
501
+ - **Status:** in_progress
502
+
503
+ ## Next Section
504
+ `;
505
+ const result = parseSessionState(content);
506
+ assert.strictEqual(result.success, true);
507
+ assert.strictEqual(result.state?.name, 'architecture');
508
+ assert.strictEqual(result.state?.currentStep, 2);
509
+ });
510
+ it('should not duplicate completed steps', () => {
511
+ const state = {
512
+ name: 'test',
513
+ type: 'stepped',
514
+ started: '2026-01-20T10:00:00.000Z',
515
+ lastUpdated: '2026-01-20T10:00:00.000Z',
516
+ currentStep: 2,
517
+ stepsCompleted: [1],
518
+ status: 'in_progress',
519
+ };
520
+ // Try to complete step 1 again
521
+ const updated = updateWorkflowState(state, 1, 2);
522
+ // Should not have duplicate 1s
523
+ const counts = updated.stepsCompleted.filter((s) => s === 1).length;
524
+ assert.strictEqual(counts, 1);
525
+ });
526
+ it('should initialize with current ISO timestamp', () => {
527
+ const before = new Date().toISOString();
528
+ const state = initWorkflowState('test', 'stepped');
529
+ const after = new Date().toISOString();
530
+ // Started should be between before and after
531
+ assert.ok(state.started >= before);
532
+ assert.ok(state.started <= after);
533
+ assert.ok(state.lastUpdated >= before);
534
+ assert.ok(state.lastUpdated <= after);
535
+ });
536
+ it('should format stepsCompleted as JSON array in markdown', () => {
537
+ const state = {
538
+ name: 'test',
539
+ type: 'stepped',
540
+ started: '2026-01-20T10:00:00.000Z',
541
+ lastUpdated: '2026-01-20T10:00:00.000Z',
542
+ currentStep: 4,
543
+ stepsCompleted: [1, 2, 3],
544
+ status: 'in_progress',
545
+ };
546
+ const formatted = formatWorkflowState(state);
547
+ assert.ok(formatted.includes('[1, 2, 3]'));
548
+ });
549
+ });
550
+ });
551
+ //# sourceMappingURL=session-state.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-state.test.js","sourceRoot":"","sources":["../../src/workflow/session-state.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Step File Parser for MSSCI-12079
3
+ *
4
+ * Parses step files in stepped workflows, extracting metadata from
5
+ * <step-meta> YAML blocks and detecting gate markers.
6
+ */
7
+ /**
8
+ * Parsed step data extracted from a step file
9
+ */
10
+ export interface ParsedStep {
11
+ /** Step number (from meta or filename) */
12
+ number: number;
13
+ /** Step name/slug (from meta or filename) */
14
+ name: string;
15
+ /** Whether this step has a gate checkpoint */
16
+ gate: boolean;
17
+ /** Full markdown content (excluding step-meta block) */
18
+ content: string;
19
+ /** Raw step-meta YAML if present */
20
+ meta?: Record<string, unknown>;
21
+ }
22
+ /**
23
+ * Result of parsing a step file
24
+ */
25
+ export interface StepParseResult {
26
+ success: boolean;
27
+ step?: ParsedStep;
28
+ error?: string;
29
+ }
30
+ /**
31
+ * Parse a step file from its content
32
+ *
33
+ * @param content - The raw markdown content of the step file
34
+ * @param filename - Optional filename for fallback extraction (e.g., "step-03-design.md")
35
+ * @returns StepParseResult with parsed step or error
36
+ */
37
+ export declare function parseStepFile(content: string, filename?: string): StepParseResult;
38
+ /**
39
+ * Parse a step file from a file path
40
+ *
41
+ * @param filePath - Absolute or relative path to the step file
42
+ * @returns Promise<StepParseResult> with parsed step or error
43
+ */
44
+ export declare function parseStepFromPath(filePath: string): Promise<StepParseResult>;
45
+ //# sourceMappingURL=step-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-parser.d.ts","sourceRoot":"","sources":["../../src/workflow/step-parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,IAAI,EAAE,OAAO,CAAC;IACd,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAmED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,eAAe,CA8DjF;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAWlF"}