@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,20 +0,0 @@
1
- /**
2
- * Story 21-4: /run-ci thin wrapper command
3
- *
4
- * Tests for the run-ci.sh script that detects and runs CI locally.
5
- *
6
- * Detection Order:
7
- * 1. justfile with 'ci' recipe → `just ci`
8
- * 2. .github/workflows/*.yml → `act` (if installed)
9
- * 3. .gitlab-ci.yml → `gitlab-runner exec`
10
- * 4. Fallback: npm test && npm run lint && npm run build
11
- *
12
- * AC1: Command detects CI system from project files
13
- * AC2: Delegates to project's CI definition
14
- * AC3: Works with justfile 'ci' recipe
15
- * AC4: Works with GitHub Actions via 'act' (optional)
16
- * AC5: Provides clear output of what's running
17
- * AC6: Fallback to npm scripts if no CI config found
18
- */
19
- export {};
20
- //# sourceMappingURL=run-ci.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run-ci.test.d.ts","sourceRoot":"","sources":["../../src/scripts/run-ci.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
@@ -1,127 +0,0 @@
1
- /**
2
- * Story 21-4: /run-ci thin wrapper command
3
- *
4
- * Tests for the run-ci.sh script that detects and runs CI locally.
5
- *
6
- * Detection Order:
7
- * 1. justfile with 'ci' recipe → `just ci`
8
- * 2. .github/workflows/*.yml → `act` (if installed)
9
- * 3. .gitlab-ci.yml → `gitlab-runner exec`
10
- * 4. Fallback: npm test && npm run lint && npm run build
11
- *
12
- * AC1: Command detects CI system from project files
13
- * AC2: Delegates to project's CI definition
14
- * AC3: Works with justfile 'ci' recipe
15
- * AC4: Works with GitHub Actions via 'act' (optional)
16
- * AC5: Provides clear output of what's running
17
- * AC6: Fallback to npm scripts if no CI config found
18
- */
19
- import { describe, it } from 'node:test';
20
- import assert from 'node:assert';
21
- import { existsSync, accessSync, constants, readFileSync } from 'fs';
22
- import { spawnSync } from 'child_process';
23
- import { join, dirname } from 'path';
24
- import { fileURLToPath } from 'url';
25
- const __filename = fileURLToPath(import.meta.url);
26
- const __dirname = dirname(__filename);
27
- // Find project root (pennyfarthing/)
28
- function findProjectRoot() {
29
- let dir = __dirname;
30
- while (!existsSync(join(dir, '.claude')) && dir !== '/') {
31
- dir = dirname(dir);
32
- }
33
- return dir;
34
- }
35
- const PROJECT_ROOT = findProjectRoot();
36
- const SCRIPT_PATH = join(PROJECT_ROOT, '.claude', 'scripts', 'run-ci.sh');
37
- describe('Story 21-4: /run-ci command', () => {
38
- describe('AC1: Script exists and is executable', () => {
39
- it('should have run-ci.sh in .claude/scripts/', () => {
40
- assert.ok(existsSync(SCRIPT_PATH), 'run-ci.sh should exist');
41
- });
42
- it('should be executable', () => {
43
- assert.doesNotThrow(() => {
44
- accessSync(SCRIPT_PATH, constants.X_OK);
45
- }, 'run-ci.sh should be executable');
46
- });
47
- });
48
- describe('AC2: Detection functions exist', () => {
49
- it('should define has_just_ci_recipe function', () => {
50
- const script = readFileSync(SCRIPT_PATH, 'utf-8');
51
- assert.ok(script.includes('has_just_ci_recipe'), 'should define has_just_ci_recipe');
52
- });
53
- it('should define has_github_actions function', () => {
54
- const script = readFileSync(SCRIPT_PATH, 'utf-8');
55
- assert.ok(script.includes('has_github_actions'), 'should define has_github_actions');
56
- });
57
- it('should define has_gitlab_ci function', () => {
58
- const script = readFileSync(SCRIPT_PATH, 'utf-8');
59
- assert.ok(script.includes('has_gitlab_ci'), 'should define has_gitlab_ci');
60
- });
61
- });
62
- describe('AC3: Justfile CI recipe detection', () => {
63
- it('should detect justfile with ci recipe', () => {
64
- // Run script with --detect-only to just show what would run
65
- const result = spawnSync('bash', [SCRIPT_PATH, '--detect-only'], {
66
- cwd: PROJECT_ROOT,
67
- encoding: 'utf-8',
68
- });
69
- // Should detect something (justfile, github actions, or npm fallback)
70
- const output = result.stdout + result.stderr;
71
- assert.match(output, /detected|justfile|github|npm|fallback/i, 'should detect a CI system');
72
- });
73
- });
74
- describe('AC4: GitHub Actions detection', () => {
75
- it('should detect .github/workflows directory', () => {
76
- const workflowsPath = join(PROJECT_ROOT, '.github', 'workflows');
77
- assert.ok(existsSync(workflowsPath), '.github/workflows should exist');
78
- });
79
- it('should find CI workflow files', () => {
80
- const ciPath = join(PROJECT_ROOT, '.github', 'workflows', 'ci.yml');
81
- assert.ok(existsSync(ciPath), 'ci.yml workflow should exist');
82
- });
83
- });
84
- describe('AC5: Clear output format', () => {
85
- it('should show what CI system is being used', () => {
86
- const result = spawnSync('bash', [SCRIPT_PATH, '--dry-run'], {
87
- cwd: PROJECT_ROOT,
88
- encoding: 'utf-8',
89
- });
90
- const output = result.stdout + result.stderr;
91
- assert.match(output, /running|using|detected|would run/i, 'should indicate what will run');
92
- });
93
- it('should show the command being executed', () => {
94
- const result = spawnSync('bash', [SCRIPT_PATH, '--dry-run'], {
95
- cwd: PROJECT_ROOT,
96
- encoding: 'utf-8',
97
- });
98
- const output = result.stdout + result.stderr;
99
- assert.match(output, /just|act|npm|pnpm/i, 'should show the command');
100
- });
101
- });
102
- describe('AC6: Help and usage', () => {
103
- it('should show help with --help flag', () => {
104
- const result = spawnSync('bash', [SCRIPT_PATH, '--help'], {
105
- cwd: PROJECT_ROOT,
106
- encoding: 'utf-8',
107
- });
108
- assert.ok(result.stdout.includes('run-ci'), 'should mention run-ci');
109
- assert.match(result.stdout, /usage|options|help/i, 'should show usage info');
110
- });
111
- it('should exit 0 on --help', () => {
112
- const result = spawnSync('bash', [SCRIPT_PATH, '--help'], {
113
- cwd: PROJECT_ROOT,
114
- encoding: 'utf-8',
115
- });
116
- assert.strictEqual(result.status, 0, 'should exit 0 on --help');
117
- });
118
- });
119
- describe('AC6: Fallback behavior', () => {
120
- it('should have npm fallback defined', () => {
121
- const script = readFileSync(SCRIPT_PATH, 'utf-8');
122
- assert.match(script, /npm|pnpm/, 'should have npm/pnpm fallback');
123
- assert.match(script, /test|lint|build/, 'should reference test/lint/build');
124
- });
125
- });
126
- });
127
- //# sourceMappingURL=run-ci.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run-ci.test.js","sourceRoot":"","sources":["../../src/scripts/run-ci.test.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Story 13-5: Theme Detail Page Tests
3
- *
4
- * Tests for the theme detail page with team spider chart,
5
- * agent grid with ProfileCards, and profile links.
6
- *
7
- * Run with: npm test
8
- */
9
- export {};
10
- //# sourceMappingURL=theme-detail.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"theme-detail.test.d.ts","sourceRoot":"","sources":["../../src/scripts/theme-detail.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -1,199 +0,0 @@
1
- /**
2
- * Story 13-5: Theme Detail Page Tests
3
- *
4
- * Tests for the theme detail page with team spider chart,
5
- * agent grid with ProfileCards, and profile links.
6
- *
7
- * Run with: npm test
8
- */
9
- import { describe, it } from 'node:test';
10
- import assert from 'node:assert';
11
- import { existsSync, readFileSync } from 'fs';
12
- import { join, dirname } from 'path';
13
- import { fileURLToPath } from 'url';
14
- import { findMonorepoRoot } from '../cli/utils/files.js';
15
- const __filename = fileURLToPath(import.meta.url);
16
- const __dirname = dirname(__filename);
17
- // Find monorepo root by walking up from current directory
18
- const projectRoot = findMonorepoRoot(__dirname);
19
- const PAGES_DIR = join(projectRoot, 'internal', 'showcase', 'src', 'pages');
20
- const COMPONENTS_DIR = join(projectRoot, 'internal', 'showcase', 'src', 'components');
21
- describe('Story 13-5: Theme Detail Page', () => {
22
- describe('AC1: Theme detail pages generated for all themes', () => {
23
- it('should have dynamic [theme].astro route', () => {
24
- const pagePath = join(PAGES_DIR, 'themes', '[theme].astro');
25
- assert.ok(existsSync(pagePath), 'Dynamic theme page should exist');
26
- });
27
- it('should use getStaticPaths for dynamic routing', () => {
28
- const pagePath = join(PAGES_DIR, 'themes', '[theme].astro');
29
- assert.ok(existsSync(pagePath), 'Page file should exist');
30
- const content = readFileSync(pagePath, 'utf-8');
31
- assert.match(content, /getStaticPaths/, 'Should use getStaticPaths');
32
- });
33
- it('should import loadThemes for generating paths', () => {
34
- const pagePath = join(PAGES_DIR, 'themes', '[theme].astro');
35
- assert.ok(existsSync(pagePath), 'Page file should exist');
36
- const content = readFileSync(pagePath, 'utf-8');
37
- assert.match(content, /import.*loadThemes.*from/, 'Should import loadThemes');
38
- });
39
- it('should generate paths for all themes', () => {
40
- const pagePath = join(PAGES_DIR, 'themes', '[theme].astro');
41
- assert.ok(existsSync(pagePath), 'Page file should exist');
42
- const content = readFileSync(pagePath, 'utf-8');
43
- // Should map themes to params
44
- assert.match(content, /themes\.map|\.map.*params/, 'Should map themes to params');
45
- });
46
- it('should display theme name in header', () => {
47
- const pagePath = join(PAGES_DIR, 'themes', '[theme].astro');
48
- assert.ok(existsSync(pagePath), 'Page file should exist');
49
- const content = readFileSync(pagePath, 'utf-8');
50
- assert.match(content, /metadata\.name|theme\.metadata\.name/, 'Should display theme name');
51
- });
52
- it('should display theme description', () => {
53
- const pagePath = join(PAGES_DIR, 'themes', '[theme].astro');
54
- assert.ok(existsSync(pagePath), 'Page file should exist');
55
- const content = readFileSync(pagePath, 'utf-8');
56
- assert.match(content, /metadata\.description|theme\.metadata\.description/, 'Should display description');
57
- });
58
- it('should display theme source', () => {
59
- const pagePath = join(PAGES_DIR, 'themes', '[theme].astro');
60
- assert.ok(existsSync(pagePath), 'Page file should exist');
61
- const content = readFileSync(pagePath, 'utf-8');
62
- assert.match(content, /metadata\.source|theme\.metadata\.source/, 'Should display source');
63
- });
64
- });
65
- describe('AC2: Team overlay spider displayed prominently (300px+)', () => {
66
- it('should include SpiderChart in detail page', () => {
67
- const pagePath = join(PAGES_DIR, 'themes', '[theme].astro');
68
- assert.ok(existsSync(pagePath), 'Page file should exist');
69
- const content = readFileSync(pagePath, 'utf-8');
70
- assert.match(content, /SpiderChart/, 'Should include SpiderChart');
71
- });
72
- it('should import SpiderChart component', () => {
73
- const pagePath = join(PAGES_DIR, 'themes', '[theme].astro');
74
- assert.ok(existsSync(pagePath), 'Page file should exist');
75
- const content = readFileSync(pagePath, 'utf-8');
76
- assert.match(content, /import.*SpiderChart.*from/, 'Should import SpiderChart');
77
- });
78
- it('should pass size prop of at least 300 to team spider', () => {
79
- const pagePath = join(PAGES_DIR, 'themes', '[theme].astro');
80
- assert.ok(existsSync(pagePath), 'Page file should exist');
81
- const content = readFileSync(pagePath, 'utf-8');
82
- // Should have size={300} or larger
83
- const sizeMatch = content.match(/SpiderChart[\s\S]*?size=\{?(\d+)/);
84
- assert.ok(sizeMatch, 'Should have size prop on SpiderChart');
85
- if (sizeMatch) {
86
- assert.ok(parseInt(sizeMatch[1]) >= 300, 'Size should be at least 300');
87
- }
88
- });
89
- it('should pass all theme agents to team spider', () => {
90
- const pagePath = join(PAGES_DIR, 'themes', '[theme].astro');
91
- assert.ok(existsSync(pagePath), 'Page file should exist');
92
- const content = readFileSync(pagePath, 'utf-8');
93
- // Should pass theme.agents or agents array
94
- assert.match(content, /SpiderChart[\s\S]*?agents=\{.*agents/, 'Should pass agents to SpiderChart');
95
- });
96
- });
97
- describe('AC3: All 10 agents shown with face + spider + quote', () => {
98
- it('should have ProfileCard component', () => {
99
- const componentPath = join(COMPONENTS_DIR, 'ProfileCard.astro');
100
- assert.ok(existsSync(componentPath), 'ProfileCard component should exist');
101
- });
102
- it('should display character name in ProfileCard', () => {
103
- const cardPath = join(COMPONENTS_DIR, 'ProfileCard.astro');
104
- assert.ok(existsSync(cardPath), 'ProfileCard file should exist');
105
- const content = readFileSync(cardPath, 'utf-8');
106
- assert.match(content, /agent\.character|character/, 'Should display character name');
107
- });
108
- it('should display quote in ProfileCard', () => {
109
- const cardPath = join(COMPONENTS_DIR, 'ProfileCard.astro');
110
- assert.ok(existsSync(cardPath), 'ProfileCard file should exist');
111
- const content = readFileSync(cardPath, 'utf-8');
112
- assert.match(content, /agent\.quote|quote/, 'Should display quote');
113
- });
114
- it('should include SpiderChart in ProfileCard', () => {
115
- const cardPath = join(COMPONENTS_DIR, 'ProfileCard.astro');
116
- assert.ok(existsSync(cardPath), 'ProfileCard file should exist');
117
- const content = readFileSync(cardPath, 'utf-8');
118
- assert.match(content, /SpiderChart/, 'Should include SpiderChart');
119
- });
120
- it('should show agent emoji or face placeholder', () => {
121
- const cardPath = join(COMPONENTS_DIR, 'ProfileCard.astro');
122
- assert.ok(existsSync(cardPath), 'ProfileCard file should exist');
123
- const content = readFileSync(cardPath, 'utf-8');
124
- // Should have emoji, avatar, or face reference
125
- assert.match(content, /emoji|avatar|face|icon/i, 'Should show face or icon');
126
- });
127
- it('should have AgentGrid component for 2x5 layout', () => {
128
- const gridPath = join(COMPONENTS_DIR, 'AgentGrid.astro');
129
- assert.ok(existsSync(gridPath), 'AgentGrid component should exist');
130
- });
131
- it('should use responsive grid in AgentGrid', () => {
132
- const gridPath = join(COMPONENTS_DIR, 'AgentGrid.astro');
133
- assert.ok(existsSync(gridPath), 'AgentGrid file should exist');
134
- const content = readFileSync(gridPath, 'utf-8');
135
- // Should have grid-cols classes for responsive 2x5 layout
136
- assert.match(content, /grid-cols/, 'Should use grid-cols for layout');
137
- });
138
- it('should render ProfileCard for each agent in detail page', () => {
139
- const pagePath = join(PAGES_DIR, 'themes', '[theme].astro');
140
- assert.ok(existsSync(pagePath), 'Page file should exist');
141
- const content = readFileSync(pagePath, 'utf-8');
142
- // Should map agents to ProfileCard components
143
- assert.match(content, /ProfileCard/, 'Should use ProfileCard');
144
- assert.match(content, /\.map\s*\(/, 'Should map agents to components');
145
- });
146
- it('should include AgentGrid in detail page', () => {
147
- const pagePath = join(PAGES_DIR, 'themes', '[theme].astro');
148
- assert.ok(existsSync(pagePath), 'Page file should exist');
149
- const content = readFileSync(pagePath, 'utf-8');
150
- assert.match(content, /AgentGrid/, 'Should include AgentGrid');
151
- });
152
- });
153
- describe('AC4: Links to individual profile pages work', () => {
154
- it('should have link in ProfileCard', () => {
155
- const cardPath = join(COMPONENTS_DIR, 'ProfileCard.astro');
156
- assert.ok(existsSync(cardPath), 'ProfileCard file should exist');
157
- const content = readFileSync(cardPath, 'utf-8');
158
- assert.match(content, /<a\s|href=/, 'Should have anchor link');
159
- });
160
- it('should link to /characters/[theme]/[role] pattern', () => {
161
- const cardPath = join(COMPONENTS_DIR, 'ProfileCard.astro');
162
- assert.ok(existsSync(cardPath), 'ProfileCard file should exist');
163
- const content = readFileSync(cardPath, 'utf-8');
164
- // Should have href pointing to /characters/{theme}/{role}
165
- assert.match(content, /href=.*characters.*\//, 'Should link to characters path');
166
- });
167
- it('should pass themeId to ProfileCard', () => {
168
- const pagePath = join(PAGES_DIR, 'themes', '[theme].astro');
169
- assert.ok(existsSync(pagePath), 'Page file should exist');
170
- const content = readFileSync(pagePath, 'utf-8');
171
- // ProfileCard needs themeId for building profile links
172
- assert.match(content, /ProfileCard[\s\S]*?themeId=|theme\.id/, 'Should pass themeId to ProfileCard');
173
- });
174
- });
175
- describe('Component integration', () => {
176
- it('should use Base layout in detail page', () => {
177
- const pagePath = join(PAGES_DIR, 'themes', '[theme].astro');
178
- assert.ok(existsSync(pagePath), 'Page file should exist');
179
- const content = readFileSync(pagePath, 'utf-8');
180
- assert.match(content, /import.*Base.*from.*layouts/, 'Should import Base layout');
181
- assert.match(content, /<Base/, 'Should use Base component');
182
- });
183
- it('should have dynamic page title with theme name', () => {
184
- const pagePath = join(PAGES_DIR, 'themes', '[theme].astro');
185
- assert.ok(existsSync(pagePath), 'Page file should exist');
186
- const content = readFileSync(pagePath, 'utf-8');
187
- // Title should include theme name
188
- assert.match(content, /title=.*metadata\.name|title=.*theme/, 'Should have dynamic title');
189
- });
190
- it('should have Compare this team button', () => {
191
- const pagePath = join(PAGES_DIR, 'themes', '[theme].astro');
192
- assert.ok(existsSync(pagePath), 'Page file should exist');
193
- const content = readFileSync(pagePath, 'utf-8');
194
- // Should have compare button/link
195
- assert.match(content, /[Cc]ompare|compare/i, 'Should have compare button');
196
- });
197
- });
198
- });
199
- //# sourceMappingURL=theme-detail.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"theme-detail.test.js","sourceRoot":"","sources":["../../src/scripts/theme-detail.test.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- #!/usr/bin/env npx ts-node
2
- /**
3
- * Validate OCEAN profiles across all persona themes
4
- *
5
- * Checks that every agent in every theme has a complete ocean: block
6
- * with O, C, E, A, N scores (1-5).
7
- */
8
- export {};
9
- //# sourceMappingURL=validate-ocean-profiles.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate-ocean-profiles.d.ts","sourceRoot":"","sources":["../../src/scripts/validate-ocean-profiles.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}
@@ -1,130 +0,0 @@
1
- #!/usr/bin/env npx ts-node
2
- /**
3
- * Validate OCEAN profiles across all persona themes
4
- *
5
- * Checks that every agent in every theme has a complete ocean: block
6
- * with O, C, E, A, N scores (1-5).
7
- */
8
- import { readFileSync, readdirSync } from 'fs';
9
- import { join, basename, dirname } from 'path';
10
- import { fileURLToPath } from 'url';
11
- import { parse as parseYaml } from 'yaml';
12
- import { findMonorepoRoot } from '../cli/utils/files.js';
13
- const __filename = fileURLToPath(import.meta.url);
14
- const __dirname = dirname(__filename);
15
- // Find monorepo root by walking up from current directory
16
- const projectRoot = findMonorepoRoot(__dirname);
17
- const THEMES_DIR = join(projectRoot, 'pennyfarthing-dist', 'personas', 'themes');
18
- const AGENTS = ['orchestrator', 'sm', 'tea', 'dev', 'reviewer', 'architect', 'pm', 'tech-writer', 'ux-designer', 'devops'];
19
- const OCEAN_DIMS = ['O', 'C', 'E', 'A', 'N'];
20
- function validateTheme(themePath) {
21
- const results = [];
22
- const themeName = basename(themePath, '.yaml');
23
- try {
24
- const content = readFileSync(themePath, 'utf-8');
25
- const data = parseYaml(content);
26
- if (!data?.agents) {
27
- console.error(` Warning: ${themeName} has no agents block`);
28
- return results;
29
- }
30
- for (const agent of AGENTS) {
31
- const agentDef = data.agents[agent];
32
- if (!agentDef) {
33
- results.push({
34
- theme: themeName,
35
- agent,
36
- character: '(missing)',
37
- hasOcean: false,
38
- missingDims: OCEAN_DIMS,
39
- });
40
- continue;
41
- }
42
- const character = agentDef.character || '(unnamed)';
43
- const ocean = agentDef.ocean;
44
- if (!ocean) {
45
- results.push({
46
- theme: themeName,
47
- agent,
48
- character,
49
- hasOcean: false,
50
- missingDims: OCEAN_DIMS,
51
- });
52
- continue;
53
- }
54
- const missingDims = OCEAN_DIMS.filter(dim => {
55
- const val = ocean[dim];
56
- return val === undefined || val < 1 || val > 5;
57
- });
58
- results.push({
59
- theme: themeName,
60
- agent,
61
- character,
62
- hasOcean: missingDims.length === 0,
63
- missingDims,
64
- scores: ocean,
65
- });
66
- }
67
- }
68
- catch (err) {
69
- console.error(` Error parsing ${themeName}: ${err}`);
70
- }
71
- return results;
72
- }
73
- function main() {
74
- const themeFiles = readdirSync(THEMES_DIR)
75
- .filter(f => f.endsWith('.yaml'))
76
- .sort();
77
- console.log(`\nValidating OCEAN profiles across ${themeFiles.length} themes...\n`);
78
- const allResults = [];
79
- const completeThemes = [];
80
- const incompleteThemes = [];
81
- for (const file of themeFiles) {
82
- const themePath = join(THEMES_DIR, file);
83
- const results = validateTheme(themePath);
84
- allResults.push(...results);
85
- const themeName = basename(file, '.yaml');
86
- const incomplete = results.filter(r => !r.hasOcean);
87
- if (incomplete.length === 0) {
88
- completeThemes.push(themeName);
89
- }
90
- else {
91
- incompleteThemes.push(themeName);
92
- }
93
- }
94
- // Summary
95
- const totalProfiles = allResults.length;
96
- const completeProfiles = allResults.filter(r => r.hasOcean).length;
97
- const incompleteProfiles = totalProfiles - completeProfiles;
98
- console.log('='.repeat(60));
99
- console.log('OCEAN Profile Validation Summary');
100
- console.log('='.repeat(60));
101
- console.log(`Total themes: ${themeFiles.length}`);
102
- console.log(`Complete themes: ${completeThemes.length}`);
103
- console.log(`Incomplete themes: ${incompleteThemes.length}`);
104
- console.log();
105
- console.log(`Total profiles: ${totalProfiles}`);
106
- console.log(`Complete profiles: ${completeProfiles}`);
107
- console.log(`Missing profiles: ${incompleteProfiles}`);
108
- console.log(`Coverage: ${((completeProfiles / totalProfiles) * 100).toFixed(1)}%`);
109
- console.log('='.repeat(60));
110
- if (incompleteThemes.length > 0) {
111
- console.log('\nIncomplete themes:');
112
- for (const theme of incompleteThemes) {
113
- const missing = allResults.filter(r => r.theme === theme && !r.hasOcean);
114
- console.log(` ${theme}: ${missing.length} agents missing OCEAN`);
115
- for (const m of missing) {
116
- console.log(` - ${m.agent} (${m.character})`);
117
- }
118
- }
119
- }
120
- if (completeThemes.length > 0 && process.argv.includes('--show-complete')) {
121
- console.log('\nComplete themes:');
122
- for (const theme of completeThemes) {
123
- console.log(` ✓ ${theme}`);
124
- }
125
- }
126
- // Exit with error if incomplete
127
- process.exit(incompleteProfiles > 0 ? 1 : 0);
128
- }
129
- main();
130
- //# sourceMappingURL=validate-ocean-profiles.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate-ocean-profiles.js","sourceRoot":"","sources":["../../src/scripts/validate-ocean-profiles.ts"],"names":[],"mappings":"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"}
@@ -1,94 +0,0 @@
1
- /**
2
- * Gate Handler for MSSCI-12085
3
- *
4
- * Unifies gate detection from three sources:
5
- * 1. Workflow YAML: gates.after_steps array
6
- * 2. Step-meta: gate: true field
7
- * 3. Content marker: <!-- GATE --> in step content
8
- *
9
- * Also handles gate prompt extraction and decision recording.
10
- */
11
- /**
12
- * Information about a detected gate
13
- */
14
- export interface GateInfo {
15
- /** Whether this step has a gate */
16
- isGate: boolean;
17
- /** Source that triggered the gate (null if no gate) */
18
- source: 'workflow' | 'step-meta' | 'marker' | null;
19
- /** Gate prompt text to display to user */
20
- prompt?: string;
21
- /** Step number for tracking */
22
- stepNumber: number;
23
- }
24
- /**
25
- * Parameters for gate detection
26
- */
27
- export interface DetectGateParams {
28
- /** Current step number */
29
- stepNumber: number;
30
- /** Steps with gates from workflow.gates.after_steps */
31
- afterSteps?: number[];
32
- /** Step metadata from <step-meta> block */
33
- stepMeta?: Record<string, unknown>;
34
- /** Step content (markdown) */
35
- stepContent: string;
36
- }
37
- /**
38
- * A recorded gate decision
39
- */
40
- export interface GateDecision {
41
- /** Step number where decision was made */
42
- step: number;
43
- /** User's choice */
44
- choice: 'continue' | 'revise';
45
- /** ISO timestamp of decision */
46
- timestamp: string;
47
- /** Optional notes from user */
48
- notes?: string;
49
- }
50
- /**
51
- * Detect if a step has a gate from any of the three sources
52
- *
53
- * Priority (for source reporting): workflow > step-meta > marker
54
- * Logic: OR - any source triggers a gate
55
- *
56
- * @param params - Detection parameters
57
- * @returns GateInfo with detection result
58
- */
59
- export declare function detectGate(params: DetectGateParams): GateInfo;
60
- /**
61
- * Extract gate prompt from step content or metadata
62
- *
63
- * Priority: ## Gate Prompt section > step-meta gate_prompt > default
64
- *
65
- * @param content - Step markdown content
66
- * @param meta - Optional step metadata
67
- * @returns Gate prompt text
68
- */
69
- export declare function extractGatePrompt(content: string, meta?: Record<string, unknown>): string;
70
- /**
71
- * Record a gate decision to session file content
72
- *
73
- * Adds or updates the ## Gate Decisions section with a markdown table
74
- *
75
- * @param sessionContent - Current session file content
76
- * @param decision - Gate decision to record
77
- * @returns Updated session content
78
- */
79
- export declare function recordGateDecision(sessionContent: string, decision: GateDecision): string;
80
- /**
81
- * Parse existing gate decisions from session file
82
- *
83
- * @param sessionContent - Session file content
84
- * @returns Array of gate decisions
85
- */
86
- export declare function parseGateDecisions(sessionContent: string): GateDecision[];
87
- /**
88
- * Format gate decisions as markdown table
89
- *
90
- * @param decisions - Array of gate decisions
91
- * @returns Markdown table string
92
- */
93
- export declare function formatGateDecisions(decisions: GateDecision[]): string;
94
- //# sourceMappingURL=gate-handler.d.ts.map