@pennyfarthing/core 7.4.0 → 7.5.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 (369) hide show
  1. package/dist/cli/utils/files.d.ts +0 -1
  2. package/dist/cli/utils/files.js +73 -56
  3. package/dist/cli/utils/manifest.d.ts +0 -1
  4. package/dist/cli/utils/manifest.js +48 -45
  5. package/dist/cli/utils/version.d.ts +0 -1
  6. package/dist/cli/utils/version.js +38 -32
  7. package/dist/index.d.ts +0 -1
  8. package/dist/index.js +39 -11
  9. package/dist/permissions/index.d.ts +0 -1
  10. package/dist/permissions/index.js +7 -4
  11. package/dist/permissions/permission-schema.d.ts +0 -1
  12. package/dist/permissions/permission-schema.js +13 -9
  13. package/dist/scripts/job-fair-aggregator.d.ts +0 -1
  14. package/dist/scripts/job-fair-aggregator.js +484 -341
  15. package/dist/workflow/index.d.ts +0 -1
  16. package/dist/workflow/index.js +12 -5
  17. package/dist/workflow/workflow-loader.d.ts +0 -1
  18. package/dist/workflow/workflow-loader.js +40 -34
  19. package/dist/workflow/workflow-permissions.d.ts +0 -1
  20. package/dist/workflow/workflow-permissions.js +14 -8
  21. package/dist/workflow/workflow-router.d.ts +0 -1
  22. package/dist/workflow/workflow-router.js +70 -51
  23. package/dist/workflow/workflow-schema.d.ts +0 -1
  24. package/dist/workflow/workflow-schema.js +62 -59
  25. package/package.json +1 -1
  26. package/dist/bmad/context-reader.d.ts +0 -71
  27. package/dist/bmad/context-reader.d.ts.map +0 -1
  28. package/dist/bmad/context-reader.js +0 -369
  29. package/dist/bmad/context-reader.js.map +0 -1
  30. package/dist/bmad/context-reader.test.d.ts +0 -71
  31. package/dist/bmad/context-reader.test.d.ts.map +0 -1
  32. package/dist/bmad/context-reader.test.js +0 -878
  33. package/dist/bmad/context-reader.test.js.map +0 -1
  34. package/dist/bmad/epics-parser.d.ts +0 -61
  35. package/dist/bmad/epics-parser.d.ts.map +0 -1
  36. package/dist/bmad/epics-parser.js +0 -331
  37. package/dist/bmad/epics-parser.js.map +0 -1
  38. package/dist/bmad/epics-parser.test.d.ts +0 -7
  39. package/dist/bmad/epics-parser.test.d.ts.map +0 -1
  40. package/dist/bmad/epics-parser.test.js +0 -449
  41. package/dist/bmad/epics-parser.test.js.map +0 -1
  42. package/dist/bmad/index.d.ts +0 -11
  43. package/dist/bmad/index.d.ts.map +0 -1
  44. package/dist/bmad/index.js +0 -24
  45. package/dist/bmad/index.js.map +0 -1
  46. package/dist/bmad/status-sync.d.ts +0 -173
  47. package/dist/bmad/status-sync.d.ts.map +0 -1
  48. package/dist/bmad/status-sync.js +0 -463
  49. package/dist/bmad/status-sync.js.map +0 -1
  50. package/dist/bmad/status-sync.test.d.ts +0 -7
  51. package/dist/bmad/status-sync.test.d.ts.map +0 -1
  52. package/dist/bmad/status-sync.test.js +0 -702
  53. package/dist/bmad/status-sync.test.js.map +0 -1
  54. package/dist/bmad/story-exporter.d.ts +0 -55
  55. package/dist/bmad/story-exporter.d.ts.map +0 -1
  56. package/dist/bmad/story-exporter.js +0 -170
  57. package/dist/bmad/story-exporter.js.map +0 -1
  58. package/dist/bmad/story-exporter.test.d.ts +0 -51
  59. package/dist/bmad/story-exporter.test.d.ts.map +0 -1
  60. package/dist/bmad/story-exporter.test.js +0 -603
  61. package/dist/bmad/story-exporter.test.js.map +0 -1
  62. package/dist/bmad/story-parser.d.ts +0 -44
  63. package/dist/bmad/story-parser.d.ts.map +0 -1
  64. package/dist/bmad/story-parser.js +0 -307
  65. package/dist/bmad/story-parser.js.map +0 -1
  66. package/dist/bmad/story-parser.test.d.ts +0 -44
  67. package/dist/bmad/story-parser.test.d.ts.map +0 -1
  68. package/dist/bmad/story-parser.test.js +0 -693
  69. package/dist/bmad/story-parser.test.js.map +0 -1
  70. package/dist/cli/commands/command.d.ts +0 -28
  71. package/dist/cli/commands/command.d.ts.map +0 -1
  72. package/dist/cli/commands/command.js +0 -399
  73. package/dist/cli/commands/command.js.map +0 -1
  74. package/dist/cli/commands/cyclist.d.ts +0 -46
  75. package/dist/cli/commands/cyclist.d.ts.map +0 -1
  76. package/dist/cli/commands/cyclist.js +0 -196
  77. package/dist/cli/commands/cyclist.js.map +0 -1
  78. package/dist/cli/commands/cyclist.test.d.ts +0 -13
  79. package/dist/cli/commands/cyclist.test.d.ts.map +0 -1
  80. package/dist/cli/commands/cyclist.test.js +0 -245
  81. package/dist/cli/commands/cyclist.test.js.map +0 -1
  82. package/dist/cli/commands/doctor.d.ts +0 -9
  83. package/dist/cli/commands/doctor.d.ts.map +0 -1
  84. package/dist/cli/commands/doctor.js +0 -652
  85. package/dist/cli/commands/doctor.js.map +0 -1
  86. package/dist/cli/commands/init.d.ts +0 -8
  87. package/dist/cli/commands/init.d.ts.map +0 -1
  88. package/dist/cli/commands/init.js +0 -524
  89. package/dist/cli/commands/init.js.map +0 -1
  90. package/dist/cli/commands/skill.d.ts +0 -28
  91. package/dist/cli/commands/skill.d.ts.map +0 -1
  92. package/dist/cli/commands/skill.js +0 -416
  93. package/dist/cli/commands/skill.js.map +0 -1
  94. package/dist/cli/commands/theme.d.ts +0 -21
  95. package/dist/cli/commands/theme.d.ts.map +0 -1
  96. package/dist/cli/commands/theme.js +0 -201
  97. package/dist/cli/commands/theme.js.map +0 -1
  98. package/dist/cli/commands/uninstall.d.ts +0 -8
  99. package/dist/cli/commands/uninstall.d.ts.map +0 -1
  100. package/dist/cli/commands/uninstall.js +0 -237
  101. package/dist/cli/commands/uninstall.js.map +0 -1
  102. package/dist/cli/commands/update.d.ts +0 -9
  103. package/dist/cli/commands/update.d.ts.map +0 -1
  104. package/dist/cli/commands/update.js +0 -418
  105. package/dist/cli/commands/update.js.map +0 -1
  106. package/dist/cli/commands/version.d.ts +0 -2
  107. package/dist/cli/commands/version.d.ts.map +0 -1
  108. package/dist/cli/commands/version.js +0 -28
  109. package/dist/cli/commands/version.js.map +0 -1
  110. package/dist/cli/customization.test.d.ts +0 -12
  111. package/dist/cli/customization.test.d.ts.map +0 -1
  112. package/dist/cli/customization.test.js +0 -84
  113. package/dist/cli/customization.test.js.map +0 -1
  114. package/dist/cli/cyclist-migration.test.d.ts +0 -16
  115. package/dist/cli/cyclist-migration.test.d.ts.map +0 -1
  116. package/dist/cli/cyclist-migration.test.js +0 -225
  117. package/dist/cli/cyclist-migration.test.js.map +0 -1
  118. package/dist/cli/index.d.ts +0 -3
  119. package/dist/cli/index.d.ts.map +0 -1
  120. package/dist/cli/index.js +0 -174
  121. package/dist/cli/index.js.map +0 -1
  122. package/dist/cli/ocean-profiles.test.d.ts +0 -13
  123. package/dist/cli/ocean-profiles.test.d.ts.map +0 -1
  124. package/dist/cli/ocean-profiles.test.js +0 -134
  125. package/dist/cli/ocean-profiles.test.js.map +0 -1
  126. package/dist/cli/theme-maker.test.d.ts +0 -11
  127. package/dist/cli/theme-maker.test.d.ts.map +0 -1
  128. package/dist/cli/theme-maker.test.js +0 -356
  129. package/dist/cli/theme-maker.test.js.map +0 -1
  130. package/dist/cli/utils/constants.d.ts +0 -66
  131. package/dist/cli/utils/constants.d.ts.map +0 -1
  132. package/dist/cli/utils/constants.js +0 -54
  133. package/dist/cli/utils/constants.js.map +0 -1
  134. package/dist/cli/utils/files.d.ts.map +0 -1
  135. package/dist/cli/utils/files.js.map +0 -1
  136. package/dist/cli/utils/logger.d.ts +0 -26
  137. package/dist/cli/utils/logger.d.ts.map +0 -1
  138. package/dist/cli/utils/logger.js +0 -88
  139. package/dist/cli/utils/logger.js.map +0 -1
  140. package/dist/cli/utils/manifest.d.ts.map +0 -1
  141. package/dist/cli/utils/manifest.js.map +0 -1
  142. package/dist/cli/utils/node-modules.d.ts +0 -6
  143. package/dist/cli/utils/node-modules.d.ts.map +0 -1
  144. package/dist/cli/utils/node-modules.js +0 -31
  145. package/dist/cli/utils/node-modules.js.map +0 -1
  146. package/dist/cli/utils/prompts.d.ts +0 -34
  147. package/dist/cli/utils/prompts.d.ts.map +0 -1
  148. package/dist/cli/utils/prompts.js +0 -93
  149. package/dist/cli/utils/prompts.js.map +0 -1
  150. package/dist/cli/utils/symlinks.d.ts +0 -29
  151. package/dist/cli/utils/symlinks.d.ts.map +0 -1
  152. package/dist/cli/utils/symlinks.js +0 -181
  153. package/dist/cli/utils/symlinks.js.map +0 -1
  154. package/dist/cli/utils/themes.d.ts +0 -101
  155. package/dist/cli/utils/themes.d.ts.map +0 -1
  156. package/dist/cli/utils/themes.js +0 -373
  157. package/dist/cli/utils/themes.js.map +0 -1
  158. package/dist/cli/utils/themes.test.d.ts +0 -12
  159. package/dist/cli/utils/themes.test.d.ts.map +0 -1
  160. package/dist/cli/utils/themes.test.js +0 -147
  161. package/dist/cli/utils/themes.test.js.map +0 -1
  162. package/dist/cli/utils/version.d.ts.map +0 -1
  163. package/dist/cli/utils/version.js.map +0 -1
  164. package/dist/cli/workspace.test.d.ts +0 -8
  165. package/dist/cli/workspace.test.d.ts.map +0 -1
  166. package/dist/cli/workspace.test.js +0 -151
  167. package/dist/cli/workspace.test.js.map +0 -1
  168. package/dist/index.d.ts.map +0 -1
  169. package/dist/index.js.map +0 -1
  170. package/dist/jira/jira-epic-creation.d.ts +0 -109
  171. package/dist/jira/jira-epic-creation.d.ts.map +0 -1
  172. package/dist/jira/jira-epic-creation.js +0 -253
  173. package/dist/jira/jira-epic-creation.js.map +0 -1
  174. package/dist/jira/jira-epic-creation.test.d.ts +0 -16
  175. package/dist/jira/jira-epic-creation.test.d.ts.map +0 -1
  176. package/dist/jira/jira-epic-creation.test.js +0 -387
  177. package/dist/jira/jira-epic-creation.test.js.map +0 -1
  178. package/dist/jira/jira-sprint-sync.d.ts +0 -247
  179. package/dist/jira/jira-sprint-sync.d.ts.map +0 -1
  180. package/dist/jira/jira-sprint-sync.js +0 -670
  181. package/dist/jira/jira-sprint-sync.js.map +0 -1
  182. package/dist/jira/jira-sprint-sync.test.d.ts +0 -16
  183. package/dist/jira/jira-sprint-sync.test.d.ts.map +0 -1
  184. package/dist/jira/jira-sprint-sync.test.js +0 -845
  185. package/dist/jira/jira-sprint-sync.test.js.map +0 -1
  186. package/dist/permissions/index.d.ts.map +0 -1
  187. package/dist/permissions/index.js.map +0 -1
  188. package/dist/permissions/permission-schema.d.ts.map +0 -1
  189. package/dist/permissions/permission-schema.js.map +0 -1
  190. package/dist/permissions/permission-schema.test.d.ts +0 -40
  191. package/dist/permissions/permission-schema.test.d.ts.map +0 -1
  192. package/dist/permissions/permission-schema.test.js +0 -367
  193. package/dist/permissions/permission-schema.test.js.map +0 -1
  194. package/dist/scripts/add-ocean-profiles.d.ts +0 -9
  195. package/dist/scripts/add-ocean-profiles.d.ts.map +0 -1
  196. package/dist/scripts/add-ocean-profiles.js +0 -695
  197. package/dist/scripts/add-ocean-profiles.js.map +0 -1
  198. package/dist/scripts/benchmark-integration.d.ts +0 -182
  199. package/dist/scripts/benchmark-integration.d.ts.map +0 -1
  200. package/dist/scripts/benchmark-integration.js +0 -691
  201. package/dist/scripts/benchmark-integration.js.map +0 -1
  202. package/dist/scripts/benchmark-integration.test.d.ts +0 -13
  203. package/dist/scripts/benchmark-integration.test.d.ts.map +0 -1
  204. package/dist/scripts/benchmark-integration.test.js +0 -680
  205. package/dist/scripts/benchmark-integration.test.js.map +0 -1
  206. package/dist/scripts/debugging-scenarios.test.d.ts +0 -18
  207. package/dist/scripts/debugging-scenarios.test.d.ts.map +0 -1
  208. package/dist/scripts/debugging-scenarios.test.js +0 -317
  209. package/dist/scripts/debugging-scenarios.test.js.map +0 -1
  210. package/dist/scripts/generate-all-spiders.d.ts +0 -10
  211. package/dist/scripts/generate-all-spiders.d.ts.map +0 -1
  212. package/dist/scripts/generate-all-spiders.js +0 -306
  213. package/dist/scripts/generate-all-spiders.js.map +0 -1
  214. package/dist/scripts/generate-report.d.ts +0 -65
  215. package/dist/scripts/generate-report.d.ts.map +0 -1
  216. package/dist/scripts/generate-report.js +0 -378
  217. package/dist/scripts/generate-report.js.map +0 -1
  218. package/dist/scripts/generate-report.test.d.ts +0 -13
  219. package/dist/scripts/generate-report.test.d.ts.map +0 -1
  220. package/dist/scripts/generate-report.test.js +0 -363
  221. package/dist/scripts/generate-report.test.js.map +0 -1
  222. package/dist/scripts/generate-spider-report.d.ts +0 -65
  223. package/dist/scripts/generate-spider-report.d.ts.map +0 -1
  224. package/dist/scripts/generate-spider-report.js +0 -366
  225. package/dist/scripts/generate-spider-report.js.map +0 -1
  226. package/dist/scripts/generate-spider-report.test.d.ts +0 -13
  227. package/dist/scripts/generate-spider-report.test.d.ts.map +0 -1
  228. package/dist/scripts/generate-spider-report.test.js +0 -367
  229. package/dist/scripts/generate-spider-report.test.js.map +0 -1
  230. package/dist/scripts/generate-spider.d.ts +0 -47
  231. package/dist/scripts/generate-spider.d.ts.map +0 -1
  232. package/dist/scripts/generate-spider.js +0 -338
  233. package/dist/scripts/generate-spider.js.map +0 -1
  234. package/dist/scripts/generate-spider.test.d.ts +0 -14
  235. package/dist/scripts/generate-spider.test.d.ts.map +0 -1
  236. package/dist/scripts/generate-spider.test.js +0 -271
  237. package/dist/scripts/generate-spider.test.js.map +0 -1
  238. package/dist/scripts/job-fair-aggregator.d.ts.map +0 -1
  239. package/dist/scripts/job-fair-aggregator.js.map +0 -1
  240. package/dist/scripts/job-fair-aggregator.test.d.ts +0 -14
  241. package/dist/scripts/job-fair-aggregator.test.d.ts.map +0 -1
  242. package/dist/scripts/job-fair-aggregator.test.js +0 -616
  243. package/dist/scripts/job-fair-aggregator.test.js.map +0 -1
  244. package/dist/scripts/run-ci.test.d.ts +0 -20
  245. package/dist/scripts/run-ci.test.d.ts.map +0 -1
  246. package/dist/scripts/run-ci.test.js +0 -127
  247. package/dist/scripts/run-ci.test.js.map +0 -1
  248. package/dist/scripts/theme-detail.test.d.ts +0 -10
  249. package/dist/scripts/theme-detail.test.d.ts.map +0 -1
  250. package/dist/scripts/theme-detail.test.js +0 -199
  251. package/dist/scripts/theme-detail.test.js.map +0 -1
  252. package/dist/scripts/validate-ocean-profiles.d.ts +0 -9
  253. package/dist/scripts/validate-ocean-profiles.d.ts.map +0 -1
  254. package/dist/scripts/validate-ocean-profiles.js +0 -130
  255. package/dist/scripts/validate-ocean-profiles.js.map +0 -1
  256. package/dist/workflow/gate-handler.d.ts +0 -94
  257. package/dist/workflow/gate-handler.d.ts.map +0 -1
  258. package/dist/workflow/gate-handler.js +0 -189
  259. package/dist/workflow/gate-handler.js.map +0 -1
  260. package/dist/workflow/gate-handler.test.d.ts +0 -14
  261. package/dist/workflow/gate-handler.test.d.ts.map +0 -1
  262. package/dist/workflow/gate-handler.test.js +0 -543
  263. package/dist/workflow/gate-handler.test.js.map +0 -1
  264. package/dist/workflow/generic-handoff.d.ts +0 -281
  265. package/dist/workflow/generic-handoff.d.ts.map +0 -1
  266. package/dist/workflow/generic-handoff.js +0 -411
  267. package/dist/workflow/generic-handoff.js.map +0 -1
  268. package/dist/workflow/generic-handoff.test.d.ts +0 -21
  269. package/dist/workflow/generic-handoff.test.d.ts.map +0 -1
  270. package/dist/workflow/generic-handoff.test.js +0 -499
  271. package/dist/workflow/generic-handoff.test.js.map +0 -1
  272. package/dist/workflow/generic-sm-finish.d.ts +0 -89
  273. package/dist/workflow/generic-sm-finish.d.ts.map +0 -1
  274. package/dist/workflow/generic-sm-finish.js +0 -157
  275. package/dist/workflow/generic-sm-finish.js.map +0 -1
  276. package/dist/workflow/generic-sm-setup.d.ts +0 -138
  277. package/dist/workflow/generic-sm-setup.d.ts.map +0 -1
  278. package/dist/workflow/generic-sm-setup.js +0 -382
  279. package/dist/workflow/generic-sm-setup.js.map +0 -1
  280. package/dist/workflow/index.d.ts.map +0 -1
  281. package/dist/workflow/index.js.map +0 -1
  282. package/dist/workflow/session-state.d.ts +0 -92
  283. package/dist/workflow/session-state.d.ts.map +0 -1
  284. package/dist/workflow/session-state.js +0 -198
  285. package/dist/workflow/session-state.js.map +0 -1
  286. package/dist/workflow/session-state.test.d.ts +0 -8
  287. package/dist/workflow/session-state.test.d.ts.map +0 -1
  288. package/dist/workflow/session-state.test.js +0 -551
  289. package/dist/workflow/session-state.test.js.map +0 -1
  290. package/dist/workflow/sm-subagents.test.d.ts +0 -23
  291. package/dist/workflow/sm-subagents.test.d.ts.map +0 -1
  292. package/dist/workflow/sm-subagents.test.js +0 -727
  293. package/dist/workflow/sm-subagents.test.js.map +0 -1
  294. package/dist/workflow/step-parser.d.ts +0 -45
  295. package/dist/workflow/step-parser.d.ts.map +0 -1
  296. package/dist/workflow/step-parser.js +0 -147
  297. package/dist/workflow/step-parser.js.map +0 -1
  298. package/dist/workflow/step-parser.test.d.ts +0 -14
  299. package/dist/workflow/step-parser.test.d.ts.map +0 -1
  300. package/dist/workflow/step-parser.test.js +0 -470
  301. package/dist/workflow/step-parser.test.js.map +0 -1
  302. package/dist/workflow/story-workflow-routing.test.d.ts +0 -17
  303. package/dist/workflow/story-workflow-routing.test.d.ts.map +0 -1
  304. package/dist/workflow/story-workflow-routing.test.js +0 -559
  305. package/dist/workflow/story-workflow-routing.test.js.map +0 -1
  306. package/dist/workflow/test-cache.d.ts +0 -131
  307. package/dist/workflow/test-cache.d.ts.map +0 -1
  308. package/dist/workflow/test-cache.js +0 -226
  309. package/dist/workflow/test-cache.js.map +0 -1
  310. package/dist/workflow/test-cache.test.d.ts +0 -17
  311. package/dist/workflow/test-cache.test.d.ts.map +0 -1
  312. package/dist/workflow/test-cache.test.js +0 -438
  313. package/dist/workflow/test-cache.test.js.map +0 -1
  314. package/dist/workflow/trimodal.d.ts +0 -86
  315. package/dist/workflow/trimodal.d.ts.map +0 -1
  316. package/dist/workflow/trimodal.js +0 -118
  317. package/dist/workflow/trimodal.js.map +0 -1
  318. package/dist/workflow/trimodal.test.d.ts +0 -11
  319. package/dist/workflow/trimodal.test.d.ts.map +0 -1
  320. package/dist/workflow/trimodal.test.js +0 -395
  321. package/dist/workflow/trimodal.test.js.map +0 -1
  322. package/dist/workflow/variable-resolver.d.ts +0 -67
  323. package/dist/workflow/variable-resolver.d.ts.map +0 -1
  324. package/dist/workflow/variable-resolver.js +0 -156
  325. package/dist/workflow/variable-resolver.js.map +0 -1
  326. package/dist/workflow/variable-resolver.test.d.ts +0 -14
  327. package/dist/workflow/variable-resolver.test.d.ts.map +0 -1
  328. package/dist/workflow/variable-resolver.test.js +0 -400
  329. package/dist/workflow/variable-resolver.test.js.map +0 -1
  330. package/dist/workflow/workflow-executor.d.ts +0 -163
  331. package/dist/workflow/workflow-executor.d.ts.map +0 -1
  332. package/dist/workflow/workflow-executor.js +0 -197
  333. package/dist/workflow/workflow-executor.js.map +0 -1
  334. package/dist/workflow/workflow-executor.test.d.ts +0 -8
  335. package/dist/workflow/workflow-executor.test.d.ts.map +0 -1
  336. package/dist/workflow/workflow-executor.test.js +0 -444
  337. package/dist/workflow/workflow-executor.test.js.map +0 -1
  338. package/dist/workflow/workflow-loader.d.ts.map +0 -1
  339. package/dist/workflow/workflow-loader.js.map +0 -1
  340. package/dist/workflow/workflow-loader.test.d.ts +0 -15
  341. package/dist/workflow/workflow-loader.test.d.ts.map +0 -1
  342. package/dist/workflow/workflow-loader.test.js +0 -354
  343. package/dist/workflow/workflow-loader.test.js.map +0 -1
  344. package/dist/workflow/workflow-migration.test.d.ts +0 -17
  345. package/dist/workflow/workflow-migration.test.d.ts.map +0 -1
  346. package/dist/workflow/workflow-migration.test.js +0 -371
  347. package/dist/workflow/workflow-migration.test.js.map +0 -1
  348. package/dist/workflow/workflow-permissions.d.ts.map +0 -1
  349. package/dist/workflow/workflow-permissions.js.map +0 -1
  350. package/dist/workflow/workflow-permissions.test.d.ts +0 -15
  351. package/dist/workflow/workflow-permissions.test.d.ts.map +0 -1
  352. package/dist/workflow/workflow-permissions.test.js +0 -301
  353. package/dist/workflow/workflow-permissions.test.js.map +0 -1
  354. package/dist/workflow/workflow-router.d.ts.map +0 -1
  355. package/dist/workflow/workflow-router.js.map +0 -1
  356. package/dist/workflow/workflow-router.test.d.ts +0 -20
  357. package/dist/workflow/workflow-router.test.d.ts.map +0 -1
  358. package/dist/workflow/workflow-router.test.js +0 -607
  359. package/dist/workflow/workflow-router.test.js.map +0 -1
  360. package/dist/workflow/workflow-schema.d.ts.map +0 -1
  361. package/dist/workflow/workflow-schema.js.map +0 -1
  362. package/dist/workflow/workflow-schema.test.d.ts +0 -45
  363. package/dist/workflow/workflow-schema.test.d.ts.map +0 -1
  364. package/dist/workflow/workflow-schema.test.js +0 -512
  365. package/dist/workflow/workflow-schema.test.js.map +0 -1
  366. package/dist/workflow/workflow-stepped-schema.test.d.ts +0 -18
  367. package/dist/workflow/workflow-stepped-schema.test.d.ts.map +0 -1
  368. package/dist/workflow/workflow-stepped-schema.test.js +0 -608
  369. package/dist/workflow/workflow-stepped-schema.test.js.map +0 -1
@@ -1,418 +0,0 @@
1
- import { readFileSync, writeFileSync, symlinkSync, copyFileSync, readdirSync } from 'fs';
2
- import { join, relative } from 'path';
3
- import fsExtra from 'fs-extra';
4
- const { ensureDirSync, removeSync } = fsExtra;
5
- import { logger } from '../utils/logger.js';
6
- import { manifestExists, readManifest, writeManifest, createManifest } from '../utils/manifest.js';
7
- import { pathExists, isDirectory, isSymlink, hashFile } from '../utils/files.js';
8
- import { getPackageVersion, getAssetsPath } from '../utils/version.js';
9
- import { computeRelativeSymlink, createCommandsDirectory, createSkillsDirectory, needsCommandsMigration, needsSkillsMigration } from '../utils/symlinks.js';
10
- import { findNodeModulesPath } from '../utils/node-modules.js';
11
- import { DIRECTORY_SYMLINKS, CORE_AGENTS } from '../utils/constants.js';
12
- export async function updateCommand(options) {
13
- const projectRoot = process.cwd();
14
- const dryRun = options.dryRun;
15
- // 1. Check for manifest
16
- if (!manifestExists(projectRoot)) {
17
- logger.error('Pennyfarthing not initialized. Run `pennyfarthing init` first.');
18
- process.exit(1);
19
- }
20
- const manifest = readManifest(projectRoot);
21
- if (!manifest) {
22
- logger.error('Failed to read manifest');
23
- process.exit(1);
24
- }
25
- // 2. Compare versions
26
- const packageVersion = getPackageVersion();
27
- const updateInfo = await checkForUpdates(projectRoot, manifest);
28
- if (options.check) {
29
- // Just check and exit
30
- if (updateInfo.needsUpdate) {
31
- logger.info(`Update available: ${updateInfo.currentVersion} → ${updateInfo.availableVersion}`);
32
- process.exit(0);
33
- }
34
- else {
35
- logger.success(`Already up to date (v${updateInfo.currentVersion})`);
36
- process.exit(0);
37
- }
38
- }
39
- // 3. Show update info
40
- logger.header('Pennyfarthing Update');
41
- // Check installation type and node_modules availability
42
- const nodeModulesPath = findNodeModulesPath(projectRoot);
43
- const currentInstallType = manifest.installationType || 'copy'; // Default to copy for old manifests
44
- // Always check and update settings (idempotent - only makes changes if needed)
45
- const assetsPath = getAssetsPath();
46
- // Copy mode is no longer supported - require fresh install
47
- if (currentInstallType === 'copy') {
48
- logger.error('Copy mode installations are no longer supported.');
49
- logger.error('');
50
- logger.error('Please reinstall with npm:');
51
- logger.error(' npm install pennyfarthing');
52
- logger.error(' npx pennyfarthing init --force');
53
- process.exit(1);
54
- }
55
- // Must have node_modules for symlink mode
56
- if (!nodeModulesPath) {
57
- logger.error('@pennyfarthing/core (or pennyfarthing) not found');
58
- logger.error('');
59
- logger.error('Please ensure pennyfarthing is installed:');
60
- logger.error(' npm install pennyfarthing');
61
- process.exit(1);
62
- }
63
- const settingsUpdated = await mergeSettingsHooks(projectRoot, assetsPath, { dryRun });
64
- if (!updateInfo.needsUpdate && updateInfo.userModifiedFiles.length === 0 && !settingsUpdated) {
65
- logger.success(`Already up to date (v${updateInfo.currentVersion})`);
66
- return;
67
- }
68
- if (updateInfo.needsUpdate) {
69
- logger.info(`Updating ${updateInfo.currentVersion} → ${updateInfo.availableVersion}`);
70
- }
71
- else {
72
- logger.info(`Refreshing files (v${updateInfo.currentVersion})`);
73
- }
74
- if (dryRun) {
75
- logger.info('Dry run mode - no changes will be made');
76
- }
77
- // Symlink mode: verify symlinks are correct
78
- await updateSymlinkMode(projectRoot, nodeModulesPath, manifest, packageVersion, { dryRun });
79
- // 7. Success
80
- logger.newline();
81
- logger.success(`Updated to v${packageVersion}`);
82
- // 8. Run doctor
83
- logger.newline();
84
- logger.info('Running health check...');
85
- const { doctorCommand } = await import('./doctor.js');
86
- await doctorCommand({ quiet: true });
87
- }
88
- /**
89
- * Update in symlink mode - verify symlinks point to correct location
90
- */
91
- async function updateSymlinkMode(projectRoot, nodeModulesPath, manifest, version, options) {
92
- const dryRun = options.dryRun;
93
- logger.newline();
94
- logger.info('Verifying symlinks...');
95
- // Verify standard symlinks (not commands or skills - handled separately)
96
- for (const { name, link } of DIRECTORY_SYMLINKS) {
97
- const linkPath = join(projectRoot, link);
98
- const targetPath = join(nodeModulesPath, name);
99
- const expectedRelative = computeRelativeSymlink(linkPath, targetPath);
100
- if (!isSymlink(linkPath)) {
101
- // Create missing symlink
102
- if (!dryRun) {
103
- try {
104
- if (pathExists(linkPath)) {
105
- removeSync(linkPath);
106
- }
107
- symlinkSync(expectedRelative, linkPath);
108
- logger.created(`${link} -> ${expectedRelative}`);
109
- }
110
- catch (e) {
111
- logger.warning(`Could not create symlink ${link}: ${e}`);
112
- }
113
- }
114
- }
115
- else {
116
- // Verify symlink points to correct location
117
- logger.info(` ✓ ${link}`);
118
- }
119
- }
120
- // Handle commands directory - migrate from symlink to directory if needed
121
- const projectCommandsDir = join(projectRoot, '.claude/project/commands');
122
- if (!pathExists(projectCommandsDir)) {
123
- if (!dryRun) {
124
- ensureDirSync(projectCommandsDir);
125
- }
126
- logger.created('.claude/project/commands/ (for user custom commands)');
127
- }
128
- if (needsCommandsMigration(projectRoot)) {
129
- logger.info('Migrating commands to new directory structure...');
130
- const builtInCommandsPath = join(nodeModulesPath, 'commands');
131
- createCommandsDirectory(projectRoot, builtInCommandsPath, projectCommandsDir, dryRun || false);
132
- }
133
- else {
134
- const commandsDir = join(projectRoot, '.claude/commands');
135
- if (isDirectory(commandsDir)) {
136
- logger.info(` ✓ .claude/commands/ (directory with individual symlinks)`);
137
- }
138
- }
139
- // Handle skills directory - migrate from symlink to directory if needed
140
- const projectSkillsDir = join(projectRoot, '.claude/project/skills');
141
- if (!pathExists(projectSkillsDir)) {
142
- if (!dryRun) {
143
- ensureDirSync(projectSkillsDir);
144
- }
145
- logger.created('.claude/project/skills/ (for user custom skills)');
146
- }
147
- if (needsSkillsMigration(projectRoot)) {
148
- logger.info('Migrating skills to new directory structure...');
149
- const builtInSkillsPath = join(nodeModulesPath, 'skills');
150
- createSkillsDirectory(projectRoot, builtInSkillsPath, projectSkillsDir, dryRun || false);
151
- }
152
- else {
153
- const skillsDir = join(projectRoot, '.claude/skills');
154
- if (isDirectory(skillsDir)) {
155
- logger.info(` ✓ .claude/skills/ (directory with individual symlinks)`);
156
- }
157
- }
158
- // Migrate sidecars from old location to new location
159
- await migrateSidecars(projectRoot, { dryRun });
160
- // Update settings
161
- const assetsPath = getAssetsPath();
162
- await mergeSettingsHooks(projectRoot, assetsPath, { dryRun });
163
- // Update manifest version
164
- logger.newline();
165
- logger.info('Updating manifest...');
166
- const nodeModulesRelPath = relative(projectRoot, nodeModulesPath);
167
- const newManifest = createManifest(manifest?.projectName || 'unknown', version, {
168
- nodeModulesPath: nodeModulesRelPath
169
- });
170
- writeManifest(projectRoot, newManifest, { dryRun });
171
- logger.updated('.claude/manifest.json');
172
- }
173
- /**
174
- * Migrate sidecars from .claude/project/agents/{agent}-sidecar/ to .pennyfarthing/sidecars/{agent}/
175
- * Also migrates from old sprint/sidecars/ location
176
- * Preserves user content while moving to new location
177
- */
178
- async function migrateSidecars(projectRoot, options) {
179
- const dryRun = options.dryRun;
180
- let migrated = 0;
181
- // Ensure new sidecars directory exists
182
- const newSidecarsDir = join(projectRoot, '.pennyfarthing/sidecars');
183
- if (!pathExists(newSidecarsDir)) {
184
- if (!dryRun) {
185
- ensureDirSync(newSidecarsDir);
186
- }
187
- }
188
- for (const agent of CORE_AGENTS) {
189
- // Check both legacy locations
190
- const legacyDir1 = join(projectRoot, `.claude/project/agents/${agent}-sidecar`);
191
- const legacyDir2 = join(projectRoot, `sprint/sidecars/${agent}`);
192
- const oldDir = pathExists(legacyDir1) ? legacyDir1 : (pathExists(legacyDir2) ? legacyDir2 : null);
193
- const newDir = join(projectRoot, `.pennyfarthing/sidecars/${agent}`);
194
- // Skip if no legacy directory found
195
- if (!oldDir) {
196
- continue;
197
- }
198
- // Create new directory if needed
199
- if (!pathExists(newDir)) {
200
- if (!dryRun) {
201
- ensureDirSync(newDir);
202
- }
203
- }
204
- // Copy each .md file from old to new (don't overwrite existing)
205
- try {
206
- const files = readdirSync(oldDir);
207
- for (const file of files) {
208
- if (!file.endsWith('.md'))
209
- continue;
210
- const oldPath = join(oldDir, file);
211
- const newPath = join(newDir, file);
212
- // Don't overwrite if new file already exists
213
- if (pathExists(newPath)) {
214
- continue;
215
- }
216
- if (!dryRun) {
217
- copyFileSync(oldPath, newPath);
218
- }
219
- migrated++;
220
- }
221
- }
222
- catch {
223
- // Ignore errors reading old directory
224
- }
225
- }
226
- if (migrated > 0) {
227
- logger.info(`Migrated ${migrated} sidecar files to .pennyfarthing/sidecars/`);
228
- }
229
- // Clean up old sprint/sidecars directory if it exists and is now empty or fully migrated
230
- const oldSprintSidecars = join(projectRoot, 'sprint/sidecars');
231
- if (pathExists(oldSprintSidecars)) {
232
- try {
233
- const remaining = readdirSync(oldSprintSidecars);
234
- // Check if all remaining items are agent directories that have been migrated
235
- const allMigrated = remaining.every(item => {
236
- const itemPath = join(oldSprintSidecars, item);
237
- if (!isDirectory(itemPath))
238
- return false;
239
- // Check if this agent's sidecar now exists in new location
240
- const newAgentDir = join(projectRoot, `.pennyfarthing/sidecars/${item}`);
241
- return pathExists(newAgentDir);
242
- });
243
- if (allMigrated && !dryRun) {
244
- removeSync(oldSprintSidecars);
245
- logger.info('Removed legacy sprint/sidecars/ directory');
246
- }
247
- }
248
- catch {
249
- // Ignore cleanup errors
250
- }
251
- }
252
- }
253
- async function checkForUpdates(projectRoot, manifest) {
254
- const packageVersion = getPackageVersion();
255
- const assetsPath = getAssetsPath();
256
- const changedFiles = [];
257
- const userModifiedFiles = [];
258
- if (!manifest) {
259
- return {
260
- currentVersion: '0.0.0',
261
- availableVersion: packageVersion,
262
- needsUpdate: true,
263
- changedFiles: [],
264
- userModifiedFiles: []
265
- };
266
- }
267
- // Check each file in manifest
268
- for (const [filePath, expectedHash] of Object.entries(manifest.fileHashes)) {
269
- const fullPath = join(projectRoot, filePath);
270
- if (!pathExists(fullPath)) {
271
- changedFiles.push(filePath);
272
- continue;
273
- }
274
- const currentHash = hashFile(fullPath);
275
- if (currentHash !== expectedHash) {
276
- // File has been modified locally
277
- userModifiedFiles.push(filePath);
278
- }
279
- // Check if package has a newer version
280
- // Map installed path back to source path
281
- const assetsFile = filePath
282
- .replace('.claude/pennyfarthing/', '')
283
- .replace('scripts/', 'scripts/');
284
- const assetsFilePath = join(assetsPath, assetsFile);
285
- if (pathExists(assetsFilePath)) {
286
- const packageHash = hashFile(assetsFilePath);
287
- if (packageHash !== expectedHash) {
288
- changedFiles.push(filePath);
289
- }
290
- }
291
- }
292
- // Compare versions
293
- const needsUpdate = compareVersions(packageVersion, manifest.version) > 0;
294
- return {
295
- currentVersion: manifest.version,
296
- availableVersion: packageVersion,
297
- needsUpdate,
298
- changedFiles,
299
- userModifiedFiles
300
- };
301
- }
302
- function compareVersions(a, b) {
303
- const partsA = a.split('.').map(Number);
304
- const partsB = b.split('.').map(Number);
305
- for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
306
- const numA = partsA[i] || 0;
307
- const numB = partsB[i] || 0;
308
- if (numA > numB)
309
- return 1;
310
- if (numA < numB)
311
- return -1;
312
- }
313
- return 0;
314
- }
315
- /**
316
- * Merge required hooks into existing settings.local.json
317
- * This ensures critical hooks like SessionStart are always configured
318
- * Returns true if any changes were made
319
- */
320
- async function mergeSettingsHooks(projectRoot, assetsPath, options) {
321
- const settingsPath = join(projectRoot, '.claude/settings.local.json');
322
- const templatePath = join(assetsPath, 'templates/settings.local.json.template');
323
- if (!pathExists(templatePath)) {
324
- return false;
325
- }
326
- const templateContent = JSON.parse(readFileSync(templatePath, 'utf8'));
327
- // If no existing settings, create from template
328
- if (!pathExists(settingsPath)) {
329
- if (!options.dryRun) {
330
- ensureDirSync(join(projectRoot, '.claude'));
331
- writeFileSync(settingsPath, JSON.stringify(templateContent, null, 2), 'utf8');
332
- }
333
- logger.created('.claude/settings.local.json');
334
- return true;
335
- }
336
- // Read existing settings
337
- let existingSettings;
338
- try {
339
- existingSettings = JSON.parse(readFileSync(settingsPath, 'utf8'));
340
- }
341
- catch {
342
- logger.warning('Could not parse existing settings.local.json, skipping merge');
343
- return false;
344
- }
345
- let modified = false;
346
- // Ensure hooks object exists
347
- if (!existingSettings.hooks) {
348
- existingSettings.hooks = {};
349
- modified = true;
350
- }
351
- const hooks = existingSettings.hooks;
352
- // Merge SessionStart hooks - these are critical for PROJECT_ROOT
353
- if (!hooks.SessionStart) {
354
- hooks.SessionStart = templateContent.hooks?.SessionStart || [];
355
- modified = true;
356
- logger.info('Added missing SessionStart hooks');
357
- }
358
- else if (Array.isArray(hooks.SessionStart)) {
359
- // Check if session-start.sh hook is configured
360
- const hasSessionStartHook = hooks.SessionStart.some((entry) => {
361
- if (typeof entry === 'object' && entry !== null) {
362
- const hookEntry = entry;
363
- return hookEntry.hooks?.some(h => h.command?.includes('session-start.sh'));
364
- }
365
- return false;
366
- });
367
- if (!hasSessionStartHook && templateContent.hooks?.SessionStart) {
368
- // Prepend the session-start.sh hook entry
369
- const sessionStartEntry = templateContent.hooks.SessionStart.find((entry) => {
370
- if (typeof entry === 'object' && entry !== null) {
371
- const hookEntry = entry;
372
- return hookEntry.hooks?.some(h => h.command?.includes('session-start.sh'));
373
- }
374
- return false;
375
- });
376
- if (sessionStartEntry) {
377
- hooks.SessionStart = [sessionStartEntry, ...hooks.SessionStart];
378
- modified = true;
379
- logger.info('Added missing session-start.sh hook');
380
- }
381
- }
382
- }
383
- // Merge SessionEnd hooks if missing
384
- if (!hooks.SessionEnd && templateContent.hooks?.SessionEnd) {
385
- hooks.SessionEnd = templateContent.hooks.SessionEnd;
386
- modified = true;
387
- logger.info('Added missing SessionEnd hooks');
388
- }
389
- // Ensure statusLine is configured and points to new location
390
- const statusLine = existingSettings.statusLine;
391
- if (!statusLine) {
392
- existingSettings.statusLine = templateContent.statusLine;
393
- modified = true;
394
- logger.info('Added missing statusLine configuration');
395
- }
396
- else if (statusLine.command && typeof statusLine.command === 'string') {
397
- // Migrate from any legacy path to new path (.claude/scripts/statusline.sh)
398
- const legacyPaths = [
399
- '.claude/core/statusline.sh',
400
- '.claude/statusline.sh',
401
- '.claude/pennyfarthing/statusline.sh' // Also migrate from old copy-mode path
402
- ];
403
- for (const legacyPath of legacyPaths) {
404
- if (statusLine.command.includes(legacyPath)) {
405
- statusLine.command = statusLine.command.replace(legacyPath, '.claude/scripts/statusline.sh');
406
- modified = true;
407
- logger.info(`Updated statusLine path from ${legacyPath} to new location`);
408
- break;
409
- }
410
- }
411
- }
412
- if (modified && !options.dryRun) {
413
- writeFileSync(settingsPath, JSON.stringify(existingSettings, null, 2), 'utf8');
414
- logger.updated('.claude/settings.local.json');
415
- }
416
- return modified;
417
- }
418
- //# sourceMappingURL=update.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function versionCommand(): Promise<void>;
2
- //# sourceMappingURL=version.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/version.ts"],"names":[],"mappings":"AAGA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA2BpD"}
@@ -1,28 +0,0 @@
1
- import { getPackageVersion } from '../utils/version.js';
2
- import { manifestExists, readManifest } from '../utils/manifest.js';
3
- export async function versionCommand() {
4
- const projectRoot = process.cwd();
5
- const packageVersion = getPackageVersion();
6
- console.log(`Pennyfarthing v${packageVersion}`);
7
- // Check if installed in current project
8
- if (manifestExists(projectRoot)) {
9
- const manifest = readManifest(projectRoot);
10
- if (manifest) {
11
- console.log();
12
- console.log(`Installed: v${manifest.version} (${manifest.updatedAt.split('T')[0]})`);
13
- // Check for update
14
- if (manifest.version !== packageVersion) {
15
- console.log(`Latest: v${packageVersion} (update available)`);
16
- }
17
- if (manifest.migrationSource) {
18
- console.log(`Migrated from: ${manifest.migrationSource}`);
19
- }
20
- }
21
- }
22
- else {
23
- console.log();
24
- console.log('Not installed in current project.');
25
- console.log('Run `pennyfarthing init` to install.');
26
- }
27
- }
28
- //# sourceMappingURL=version.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/cli/commands/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAE3C,OAAO,CAAC,GAAG,CAAC,kBAAkB,cAAc,EAAE,CAAC,CAAC;IAEhD,wCAAwC;IACxC,IAAI,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAErF,mBAAmB;YACnB,IAAI,QAAQ,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,eAAe,cAAc,qBAAqB,CAAC,CAAC;YAClE,CAAC;YAED,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,kBAAkB,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;AACH,CAAC"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Tests for Story 2-7: User-Customizable Output Styles and Preferences
3
- *
4
- * These tests verify:
5
- * - Output style files exist in pennyfarthing-dist/output-styles/
6
- * - Preferences template exists with required fields
7
- * - CLI init creates preferences file
8
- *
9
- * Run with: npm test
10
- */
11
- export {};
12
- //# sourceMappingURL=customization.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"customization.test.d.ts","sourceRoot":"","sources":["../../src/cli/customization.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -1,84 +0,0 @@
1
- /**
2
- * Tests for Story 2-7: User-Customizable Output Styles and Preferences
3
- *
4
- * These tests verify:
5
- * - Output style files exist in pennyfarthing-dist/output-styles/
6
- * - Preferences template exists with required fields
7
- * - CLI init creates preferences file
8
- *
9
- * Run with: npm test
10
- */
11
- import { describe, it } from 'node:test';
12
- import assert from 'node:assert';
13
- import { existsSync, readFileSync } from 'fs';
14
- import { join, dirname } from 'path';
15
- import { fileURLToPath } from 'url';
16
- import { parse as parseYaml } from 'yaml';
17
- import { findMonorepoRoot } from './utils/files.js';
18
- const __filename = fileURLToPath(import.meta.url);
19
- const __dirname = dirname(__filename);
20
- // Find monorepo root by walking up from current directory
21
- const projectRoot = findMonorepoRoot(__dirname);
22
- const distDir = join(projectRoot, 'pennyfarthing-dist');
23
- describe('Output Styles', () => {
24
- const outputStylesDir = join(distDir, 'output-styles');
25
- it('should have output-styles directory', () => {
26
- assert.ok(existsSync(outputStylesDir), `Missing directory: ${outputStylesDir}`);
27
- });
28
- it('should have verbose.md output style', () => {
29
- const filePath = join(outputStylesDir, 'verbose.md');
30
- assert.ok(existsSync(filePath), `Missing file: ${filePath}`);
31
- const content = readFileSync(filePath, 'utf-8');
32
- assert.ok(content.length > 100, 'verbose.md should have substantial content');
33
- assert.ok(content.toLowerCase().includes('detail') || content.toLowerCase().includes('explain'), 'verbose.md should mention detailed explanations');
34
- });
35
- it('should have terse.md output style', () => {
36
- const filePath = join(outputStylesDir, 'terse.md');
37
- assert.ok(existsSync(filePath), `Missing file: ${filePath}`);
38
- const content = readFileSync(filePath, 'utf-8');
39
- assert.ok(content.length > 50, 'terse.md should have content');
40
- assert.ok(content.toLowerCase().includes('minimal') || content.toLowerCase().includes('brief') || content.toLowerCase().includes('concise'), 'terse.md should mention minimal/brief output');
41
- });
42
- it('should have teaching.md output style', () => {
43
- const filePath = join(outputStylesDir, 'teaching.md');
44
- assert.ok(existsSync(filePath), `Missing file: ${filePath}`);
45
- const content = readFileSync(filePath, 'utf-8');
46
- assert.ok(content.length > 100, 'teaching.md should have substantial content');
47
- assert.ok(content.toLowerCase().includes('explain') || content.toLowerCase().includes('teach') || content.toLowerCase().includes('reason'), 'teaching.md should mention explaining or teaching');
48
- });
49
- });
50
- describe('Preferences Template', () => {
51
- const templatesDir = join(distDir, 'templates');
52
- const prefsTemplatePath = join(templatesDir, 'preferences.yaml.template');
53
- it('should have preferences.yaml.template', () => {
54
- assert.ok(existsSync(prefsTemplatePath), `Missing file: ${prefsTemplatePath}`);
55
- });
56
- it('should have valid YAML structure', () => {
57
- const content = readFileSync(prefsTemplatePath, 'utf-8');
58
- const parsed = parseYaml(content);
59
- assert.ok(typeof parsed === 'object', 'Should parse as YAML object');
60
- });
61
- it('should have character_voice preference', () => {
62
- const content = readFileSync(prefsTemplatePath, 'utf-8');
63
- const parsed = parseYaml(content);
64
- assert.ok('character_voice' in parsed, 'preferences.yaml.template should have character_voice field');
65
- assert.ok(typeof parsed.character_voice === 'boolean', 'character_voice should be a boolean');
66
- });
67
- it('should have explain_decisions preference', () => {
68
- const content = readFileSync(prefsTemplatePath, 'utf-8');
69
- const parsed = parseYaml(content);
70
- assert.ok('explain_decisions' in parsed, 'preferences.yaml.template should have explain_decisions field');
71
- assert.ok(typeof parsed.explain_decisions === 'boolean', 'explain_decisions should be a boolean');
72
- });
73
- it('should have auto_commit preference', () => {
74
- const content = readFileSync(prefsTemplatePath, 'utf-8');
75
- const parsed = parseYaml(content);
76
- assert.ok('auto_commit' in parsed, 'preferences.yaml.template should have auto_commit field');
77
- assert.ok(typeof parsed.auto_commit === 'boolean', 'auto_commit should be a boolean');
78
- });
79
- it('should have documentation comments', () => {
80
- const content = readFileSync(prefsTemplatePath, 'utf-8');
81
- assert.ok(content.includes('#'), 'Template should have YAML comments documenting options');
82
- });
83
- });
84
- //# sourceMappingURL=customization.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"customization.test.js","sourceRoot":"","sources":["../../src/cli/customization.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,0DAA0D;AAC1D,MAAM,WAAW,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAChD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;AAExD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAEvD,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,EAAE,CACP,UAAU,CAAC,eAAe,CAAC,EAC3B,sBAAsB,eAAe,EAAE,CACxC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QACrD,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,iBAAiB,QAAQ,EAAE,CAAC,CAAC;QAE7D,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,4CAA4C,CAAC,CAAC;QAC9E,MAAM,CAAC,EAAE,CACP,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EACrF,iDAAiD,CAClD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QACnD,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,iBAAiB,QAAQ,EAAE,CAAC,CAAC;QAE7D,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,8BAA8B,CAAC,CAAC;QAC/D,MAAM,CAAC,EAAE,CACP,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EACjI,8CAA8C,CAC/C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QACtD,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,iBAAiB,QAAQ,EAAE,CAAC,CAAC;QAE7D,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,6CAA6C,CAAC,CAAC;QAC/E,MAAM,CAAC,EAAE,CACP,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAChI,mDAAmD,CACpD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAChD,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,EAAE,2BAA2B,CAAC,CAAC;IAE1E,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,EAAE,CACP,UAAU,CAAC,iBAAiB,CAAC,EAC7B,iBAAiB,iBAAiB,EAAE,CACrC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,OAAO,GAAG,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,CAAC,EAAE,CAAC,OAAO,MAAM,KAAK,QAAQ,EAAE,6BAA6B,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,OAAO,GAAG,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,CAAC,EAAE,CACP,iBAAiB,IAAI,MAAM,EAC3B,6DAA6D,CAC9D,CAAC;QACF,MAAM,CAAC,EAAE,CACP,OAAO,MAAM,CAAC,eAAe,KAAK,SAAS,EAC3C,qCAAqC,CACtC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,OAAO,GAAG,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,CAAC,EAAE,CACP,mBAAmB,IAAI,MAAM,EAC7B,+DAA+D,CAChE,CAAC;QACF,MAAM,CAAC,EAAE,CACP,OAAO,MAAM,CAAC,iBAAiB,KAAK,SAAS,EAC7C,uCAAuC,CACxC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,CAAC,EAAE,CACP,aAAa,IAAI,MAAM,EACvB,yDAAyD,CAC1D,CAAC;QACF,MAAM,CAAC,EAAE,CACP,OAAO,MAAM,CAAC,WAAW,KAAK,SAAS,EACvC,iCAAiC,CAClC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,CAAC,EAAE,CACP,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EACrB,wDAAwD,CACzD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Story 11-3: Cyclist Migration Tests
3
- *
4
- * These tests verify the Cyclist Electron GUI is correctly migrated
5
- * into the pnpm workspace as @pennyfarthing/cyclist.
6
- * Tests are designed to FAIL until the migration is complete.
7
- *
8
- * Acceptance Criteria:
9
- * 1. packages/cyclist/ contains Cyclist source
10
- * 2. Dependencies use workspace:* for internal packages
11
- * 3. Portrait resolution uses @pennyfarthing/shared
12
- * 4. Electron app starts and shows portraits
13
- * 5. Dogfooding scenario works (portraits load from pennyfarthing-dist/)
14
- */
15
- export {};
16
- //# sourceMappingURL=cyclist-migration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cyclist-migration.test.d.ts","sourceRoot":"","sources":["../../src/cli/cyclist-migration.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}