@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.
- package/dist/cli/utils/files.d.ts +0 -1
- package/dist/cli/utils/files.js +73 -56
- package/dist/cli/utils/manifest.d.ts +0 -1
- package/dist/cli/utils/manifest.js +48 -45
- package/dist/cli/utils/version.d.ts +0 -1
- package/dist/cli/utils/version.js +38 -32
- package/dist/index.d.ts +0 -1
- package/dist/index.js +39 -11
- package/dist/permissions/index.d.ts +0 -1
- package/dist/permissions/index.js +7 -4
- package/dist/permissions/permission-schema.d.ts +0 -1
- package/dist/permissions/permission-schema.js +13 -9
- package/dist/scripts/job-fair-aggregator.d.ts +0 -1
- package/dist/scripts/job-fair-aggregator.js +484 -341
- package/dist/workflow/index.d.ts +0 -1
- package/dist/workflow/index.js +12 -5
- package/dist/workflow/workflow-loader.d.ts +0 -1
- package/dist/workflow/workflow-loader.js +40 -34
- package/dist/workflow/workflow-permissions.d.ts +0 -1
- package/dist/workflow/workflow-permissions.js +14 -8
- package/dist/workflow/workflow-router.d.ts +0 -1
- package/dist/workflow/workflow-router.js +70 -51
- package/dist/workflow/workflow-schema.d.ts +0 -1
- package/dist/workflow/workflow-schema.js +62 -59
- package/package.json +1 -1
- package/dist/bmad/context-reader.d.ts +0 -71
- package/dist/bmad/context-reader.d.ts.map +0 -1
- package/dist/bmad/context-reader.js +0 -369
- package/dist/bmad/context-reader.js.map +0 -1
- package/dist/bmad/context-reader.test.d.ts +0 -71
- package/dist/bmad/context-reader.test.d.ts.map +0 -1
- package/dist/bmad/context-reader.test.js +0 -878
- package/dist/bmad/context-reader.test.js.map +0 -1
- package/dist/bmad/epics-parser.d.ts +0 -61
- package/dist/bmad/epics-parser.d.ts.map +0 -1
- package/dist/bmad/epics-parser.js +0 -331
- package/dist/bmad/epics-parser.js.map +0 -1
- package/dist/bmad/epics-parser.test.d.ts +0 -7
- package/dist/bmad/epics-parser.test.d.ts.map +0 -1
- package/dist/bmad/epics-parser.test.js +0 -449
- package/dist/bmad/epics-parser.test.js.map +0 -1
- package/dist/bmad/index.d.ts +0 -11
- package/dist/bmad/index.d.ts.map +0 -1
- package/dist/bmad/index.js +0 -24
- package/dist/bmad/index.js.map +0 -1
- package/dist/bmad/status-sync.d.ts +0 -173
- package/dist/bmad/status-sync.d.ts.map +0 -1
- package/dist/bmad/status-sync.js +0 -463
- package/dist/bmad/status-sync.js.map +0 -1
- package/dist/bmad/status-sync.test.d.ts +0 -7
- package/dist/bmad/status-sync.test.d.ts.map +0 -1
- package/dist/bmad/status-sync.test.js +0 -702
- package/dist/bmad/status-sync.test.js.map +0 -1
- package/dist/bmad/story-exporter.d.ts +0 -55
- package/dist/bmad/story-exporter.d.ts.map +0 -1
- package/dist/bmad/story-exporter.js +0 -170
- package/dist/bmad/story-exporter.js.map +0 -1
- package/dist/bmad/story-exporter.test.d.ts +0 -51
- package/dist/bmad/story-exporter.test.d.ts.map +0 -1
- package/dist/bmad/story-exporter.test.js +0 -603
- package/dist/bmad/story-exporter.test.js.map +0 -1
- package/dist/bmad/story-parser.d.ts +0 -44
- package/dist/bmad/story-parser.d.ts.map +0 -1
- package/dist/bmad/story-parser.js +0 -307
- package/dist/bmad/story-parser.js.map +0 -1
- package/dist/bmad/story-parser.test.d.ts +0 -44
- package/dist/bmad/story-parser.test.d.ts.map +0 -1
- package/dist/bmad/story-parser.test.js +0 -693
- package/dist/bmad/story-parser.test.js.map +0 -1
- package/dist/cli/commands/command.d.ts +0 -28
- package/dist/cli/commands/command.d.ts.map +0 -1
- package/dist/cli/commands/command.js +0 -399
- package/dist/cli/commands/command.js.map +0 -1
- package/dist/cli/commands/cyclist.d.ts +0 -46
- package/dist/cli/commands/cyclist.d.ts.map +0 -1
- package/dist/cli/commands/cyclist.js +0 -196
- package/dist/cli/commands/cyclist.js.map +0 -1
- package/dist/cli/commands/cyclist.test.d.ts +0 -13
- package/dist/cli/commands/cyclist.test.d.ts.map +0 -1
- package/dist/cli/commands/cyclist.test.js +0 -245
- package/dist/cli/commands/cyclist.test.js.map +0 -1
- package/dist/cli/commands/doctor.d.ts +0 -9
- package/dist/cli/commands/doctor.d.ts.map +0 -1
- package/dist/cli/commands/doctor.js +0 -652
- package/dist/cli/commands/doctor.js.map +0 -1
- package/dist/cli/commands/init.d.ts +0 -8
- package/dist/cli/commands/init.d.ts.map +0 -1
- package/dist/cli/commands/init.js +0 -524
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/skill.d.ts +0 -28
- package/dist/cli/commands/skill.d.ts.map +0 -1
- package/dist/cli/commands/skill.js +0 -416
- package/dist/cli/commands/skill.js.map +0 -1
- package/dist/cli/commands/theme.d.ts +0 -21
- package/dist/cli/commands/theme.d.ts.map +0 -1
- package/dist/cli/commands/theme.js +0 -201
- package/dist/cli/commands/theme.js.map +0 -1
- package/dist/cli/commands/uninstall.d.ts +0 -8
- package/dist/cli/commands/uninstall.d.ts.map +0 -1
- package/dist/cli/commands/uninstall.js +0 -237
- package/dist/cli/commands/uninstall.js.map +0 -1
- package/dist/cli/commands/update.d.ts +0 -9
- package/dist/cli/commands/update.d.ts.map +0 -1
- package/dist/cli/commands/update.js +0 -418
- package/dist/cli/commands/update.js.map +0 -1
- package/dist/cli/commands/version.d.ts +0 -2
- package/dist/cli/commands/version.d.ts.map +0 -1
- package/dist/cli/commands/version.js +0 -28
- package/dist/cli/commands/version.js.map +0 -1
- package/dist/cli/customization.test.d.ts +0 -12
- package/dist/cli/customization.test.d.ts.map +0 -1
- package/dist/cli/customization.test.js +0 -84
- package/dist/cli/customization.test.js.map +0 -1
- package/dist/cli/cyclist-migration.test.d.ts +0 -16
- package/dist/cli/cyclist-migration.test.d.ts.map +0 -1
- package/dist/cli/cyclist-migration.test.js +0 -225
- package/dist/cli/cyclist-migration.test.js.map +0 -1
- package/dist/cli/index.d.ts +0 -3
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -174
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/ocean-profiles.test.d.ts +0 -13
- package/dist/cli/ocean-profiles.test.d.ts.map +0 -1
- package/dist/cli/ocean-profiles.test.js +0 -134
- package/dist/cli/ocean-profiles.test.js.map +0 -1
- package/dist/cli/theme-maker.test.d.ts +0 -11
- package/dist/cli/theme-maker.test.d.ts.map +0 -1
- package/dist/cli/theme-maker.test.js +0 -356
- package/dist/cli/theme-maker.test.js.map +0 -1
- package/dist/cli/utils/constants.d.ts +0 -66
- package/dist/cli/utils/constants.d.ts.map +0 -1
- package/dist/cli/utils/constants.js +0 -54
- package/dist/cli/utils/constants.js.map +0 -1
- package/dist/cli/utils/files.d.ts.map +0 -1
- package/dist/cli/utils/files.js.map +0 -1
- package/dist/cli/utils/logger.d.ts +0 -26
- package/dist/cli/utils/logger.d.ts.map +0 -1
- package/dist/cli/utils/logger.js +0 -88
- package/dist/cli/utils/logger.js.map +0 -1
- package/dist/cli/utils/manifest.d.ts.map +0 -1
- package/dist/cli/utils/manifest.js.map +0 -1
- package/dist/cli/utils/node-modules.d.ts +0 -6
- package/dist/cli/utils/node-modules.d.ts.map +0 -1
- package/dist/cli/utils/node-modules.js +0 -31
- package/dist/cli/utils/node-modules.js.map +0 -1
- package/dist/cli/utils/prompts.d.ts +0 -34
- package/dist/cli/utils/prompts.d.ts.map +0 -1
- package/dist/cli/utils/prompts.js +0 -93
- package/dist/cli/utils/prompts.js.map +0 -1
- package/dist/cli/utils/symlinks.d.ts +0 -29
- package/dist/cli/utils/symlinks.d.ts.map +0 -1
- package/dist/cli/utils/symlinks.js +0 -181
- package/dist/cli/utils/symlinks.js.map +0 -1
- package/dist/cli/utils/themes.d.ts +0 -101
- package/dist/cli/utils/themes.d.ts.map +0 -1
- package/dist/cli/utils/themes.js +0 -373
- package/dist/cli/utils/themes.js.map +0 -1
- package/dist/cli/utils/themes.test.d.ts +0 -12
- package/dist/cli/utils/themes.test.d.ts.map +0 -1
- package/dist/cli/utils/themes.test.js +0 -147
- package/dist/cli/utils/themes.test.js.map +0 -1
- package/dist/cli/utils/version.d.ts.map +0 -1
- package/dist/cli/utils/version.js.map +0 -1
- package/dist/cli/workspace.test.d.ts +0 -8
- package/dist/cli/workspace.test.d.ts.map +0 -1
- package/dist/cli/workspace.test.js +0 -151
- package/dist/cli/workspace.test.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/jira/jira-epic-creation.d.ts +0 -109
- package/dist/jira/jira-epic-creation.d.ts.map +0 -1
- package/dist/jira/jira-epic-creation.js +0 -253
- package/dist/jira/jira-epic-creation.js.map +0 -1
- package/dist/jira/jira-epic-creation.test.d.ts +0 -16
- package/dist/jira/jira-epic-creation.test.d.ts.map +0 -1
- package/dist/jira/jira-epic-creation.test.js +0 -387
- package/dist/jira/jira-epic-creation.test.js.map +0 -1
- package/dist/jira/jira-sprint-sync.d.ts +0 -247
- package/dist/jira/jira-sprint-sync.d.ts.map +0 -1
- package/dist/jira/jira-sprint-sync.js +0 -670
- package/dist/jira/jira-sprint-sync.js.map +0 -1
- package/dist/jira/jira-sprint-sync.test.d.ts +0 -16
- package/dist/jira/jira-sprint-sync.test.d.ts.map +0 -1
- package/dist/jira/jira-sprint-sync.test.js +0 -845
- package/dist/jira/jira-sprint-sync.test.js.map +0 -1
- package/dist/permissions/index.d.ts.map +0 -1
- package/dist/permissions/index.js.map +0 -1
- package/dist/permissions/permission-schema.d.ts.map +0 -1
- package/dist/permissions/permission-schema.js.map +0 -1
- package/dist/permissions/permission-schema.test.d.ts +0 -40
- package/dist/permissions/permission-schema.test.d.ts.map +0 -1
- package/dist/permissions/permission-schema.test.js +0 -367
- package/dist/permissions/permission-schema.test.js.map +0 -1
- package/dist/scripts/add-ocean-profiles.d.ts +0 -9
- package/dist/scripts/add-ocean-profiles.d.ts.map +0 -1
- package/dist/scripts/add-ocean-profiles.js +0 -695
- package/dist/scripts/add-ocean-profiles.js.map +0 -1
- package/dist/scripts/benchmark-integration.d.ts +0 -182
- package/dist/scripts/benchmark-integration.d.ts.map +0 -1
- package/dist/scripts/benchmark-integration.js +0 -691
- package/dist/scripts/benchmark-integration.js.map +0 -1
- package/dist/scripts/benchmark-integration.test.d.ts +0 -13
- package/dist/scripts/benchmark-integration.test.d.ts.map +0 -1
- package/dist/scripts/benchmark-integration.test.js +0 -680
- package/dist/scripts/benchmark-integration.test.js.map +0 -1
- package/dist/scripts/debugging-scenarios.test.d.ts +0 -18
- package/dist/scripts/debugging-scenarios.test.d.ts.map +0 -1
- package/dist/scripts/debugging-scenarios.test.js +0 -317
- package/dist/scripts/debugging-scenarios.test.js.map +0 -1
- package/dist/scripts/generate-all-spiders.d.ts +0 -10
- package/dist/scripts/generate-all-spiders.d.ts.map +0 -1
- package/dist/scripts/generate-all-spiders.js +0 -306
- package/dist/scripts/generate-all-spiders.js.map +0 -1
- package/dist/scripts/generate-report.d.ts +0 -65
- package/dist/scripts/generate-report.d.ts.map +0 -1
- package/dist/scripts/generate-report.js +0 -378
- package/dist/scripts/generate-report.js.map +0 -1
- package/dist/scripts/generate-report.test.d.ts +0 -13
- package/dist/scripts/generate-report.test.d.ts.map +0 -1
- package/dist/scripts/generate-report.test.js +0 -363
- package/dist/scripts/generate-report.test.js.map +0 -1
- package/dist/scripts/generate-spider-report.d.ts +0 -65
- package/dist/scripts/generate-spider-report.d.ts.map +0 -1
- package/dist/scripts/generate-spider-report.js +0 -366
- package/dist/scripts/generate-spider-report.js.map +0 -1
- package/dist/scripts/generate-spider-report.test.d.ts +0 -13
- package/dist/scripts/generate-spider-report.test.d.ts.map +0 -1
- package/dist/scripts/generate-spider-report.test.js +0 -367
- package/dist/scripts/generate-spider-report.test.js.map +0 -1
- package/dist/scripts/generate-spider.d.ts +0 -47
- package/dist/scripts/generate-spider.d.ts.map +0 -1
- package/dist/scripts/generate-spider.js +0 -338
- package/dist/scripts/generate-spider.js.map +0 -1
- package/dist/scripts/generate-spider.test.d.ts +0 -14
- package/dist/scripts/generate-spider.test.d.ts.map +0 -1
- package/dist/scripts/generate-spider.test.js +0 -271
- package/dist/scripts/generate-spider.test.js.map +0 -1
- package/dist/scripts/job-fair-aggregator.d.ts.map +0 -1
- package/dist/scripts/job-fair-aggregator.js.map +0 -1
- package/dist/scripts/job-fair-aggregator.test.d.ts +0 -14
- package/dist/scripts/job-fair-aggregator.test.d.ts.map +0 -1
- package/dist/scripts/job-fair-aggregator.test.js +0 -616
- package/dist/scripts/job-fair-aggregator.test.js.map +0 -1
- package/dist/scripts/run-ci.test.d.ts +0 -20
- package/dist/scripts/run-ci.test.d.ts.map +0 -1
- package/dist/scripts/run-ci.test.js +0 -127
- package/dist/scripts/run-ci.test.js.map +0 -1
- package/dist/scripts/theme-detail.test.d.ts +0 -10
- package/dist/scripts/theme-detail.test.d.ts.map +0 -1
- package/dist/scripts/theme-detail.test.js +0 -199
- package/dist/scripts/theme-detail.test.js.map +0 -1
- package/dist/scripts/validate-ocean-profiles.d.ts +0 -9
- package/dist/scripts/validate-ocean-profiles.d.ts.map +0 -1
- package/dist/scripts/validate-ocean-profiles.js +0 -130
- package/dist/scripts/validate-ocean-profiles.js.map +0 -1
- package/dist/workflow/gate-handler.d.ts +0 -94
- package/dist/workflow/gate-handler.d.ts.map +0 -1
- package/dist/workflow/gate-handler.js +0 -189
- package/dist/workflow/gate-handler.js.map +0 -1
- package/dist/workflow/gate-handler.test.d.ts +0 -14
- package/dist/workflow/gate-handler.test.d.ts.map +0 -1
- package/dist/workflow/gate-handler.test.js +0 -543
- package/dist/workflow/gate-handler.test.js.map +0 -1
- package/dist/workflow/generic-handoff.d.ts +0 -281
- package/dist/workflow/generic-handoff.d.ts.map +0 -1
- package/dist/workflow/generic-handoff.js +0 -411
- package/dist/workflow/generic-handoff.js.map +0 -1
- package/dist/workflow/generic-handoff.test.d.ts +0 -21
- package/dist/workflow/generic-handoff.test.d.ts.map +0 -1
- package/dist/workflow/generic-handoff.test.js +0 -499
- package/dist/workflow/generic-handoff.test.js.map +0 -1
- package/dist/workflow/generic-sm-finish.d.ts +0 -89
- package/dist/workflow/generic-sm-finish.d.ts.map +0 -1
- package/dist/workflow/generic-sm-finish.js +0 -157
- package/dist/workflow/generic-sm-finish.js.map +0 -1
- package/dist/workflow/generic-sm-setup.d.ts +0 -138
- package/dist/workflow/generic-sm-setup.d.ts.map +0 -1
- package/dist/workflow/generic-sm-setup.js +0 -382
- package/dist/workflow/generic-sm-setup.js.map +0 -1
- package/dist/workflow/index.d.ts.map +0 -1
- package/dist/workflow/index.js.map +0 -1
- package/dist/workflow/session-state.d.ts +0 -92
- package/dist/workflow/session-state.d.ts.map +0 -1
- package/dist/workflow/session-state.js +0 -198
- package/dist/workflow/session-state.js.map +0 -1
- package/dist/workflow/session-state.test.d.ts +0 -8
- package/dist/workflow/session-state.test.d.ts.map +0 -1
- package/dist/workflow/session-state.test.js +0 -551
- package/dist/workflow/session-state.test.js.map +0 -1
- package/dist/workflow/sm-subagents.test.d.ts +0 -23
- package/dist/workflow/sm-subagents.test.d.ts.map +0 -1
- package/dist/workflow/sm-subagents.test.js +0 -727
- package/dist/workflow/sm-subagents.test.js.map +0 -1
- package/dist/workflow/step-parser.d.ts +0 -45
- package/dist/workflow/step-parser.d.ts.map +0 -1
- package/dist/workflow/step-parser.js +0 -147
- package/dist/workflow/step-parser.js.map +0 -1
- package/dist/workflow/step-parser.test.d.ts +0 -14
- package/dist/workflow/step-parser.test.d.ts.map +0 -1
- package/dist/workflow/step-parser.test.js +0 -470
- package/dist/workflow/step-parser.test.js.map +0 -1
- package/dist/workflow/story-workflow-routing.test.d.ts +0 -17
- package/dist/workflow/story-workflow-routing.test.d.ts.map +0 -1
- package/dist/workflow/story-workflow-routing.test.js +0 -559
- package/dist/workflow/story-workflow-routing.test.js.map +0 -1
- package/dist/workflow/test-cache.d.ts +0 -131
- package/dist/workflow/test-cache.d.ts.map +0 -1
- package/dist/workflow/test-cache.js +0 -226
- package/dist/workflow/test-cache.js.map +0 -1
- package/dist/workflow/test-cache.test.d.ts +0 -17
- package/dist/workflow/test-cache.test.d.ts.map +0 -1
- package/dist/workflow/test-cache.test.js +0 -438
- package/dist/workflow/test-cache.test.js.map +0 -1
- package/dist/workflow/trimodal.d.ts +0 -86
- package/dist/workflow/trimodal.d.ts.map +0 -1
- package/dist/workflow/trimodal.js +0 -118
- package/dist/workflow/trimodal.js.map +0 -1
- package/dist/workflow/trimodal.test.d.ts +0 -11
- package/dist/workflow/trimodal.test.d.ts.map +0 -1
- package/dist/workflow/trimodal.test.js +0 -395
- package/dist/workflow/trimodal.test.js.map +0 -1
- package/dist/workflow/variable-resolver.d.ts +0 -67
- package/dist/workflow/variable-resolver.d.ts.map +0 -1
- package/dist/workflow/variable-resolver.js +0 -156
- package/dist/workflow/variable-resolver.js.map +0 -1
- package/dist/workflow/variable-resolver.test.d.ts +0 -14
- package/dist/workflow/variable-resolver.test.d.ts.map +0 -1
- package/dist/workflow/variable-resolver.test.js +0 -400
- package/dist/workflow/variable-resolver.test.js.map +0 -1
- package/dist/workflow/workflow-executor.d.ts +0 -163
- package/dist/workflow/workflow-executor.d.ts.map +0 -1
- package/dist/workflow/workflow-executor.js +0 -197
- package/dist/workflow/workflow-executor.js.map +0 -1
- package/dist/workflow/workflow-executor.test.d.ts +0 -8
- package/dist/workflow/workflow-executor.test.d.ts.map +0 -1
- package/dist/workflow/workflow-executor.test.js +0 -444
- package/dist/workflow/workflow-executor.test.js.map +0 -1
- package/dist/workflow/workflow-loader.d.ts.map +0 -1
- package/dist/workflow/workflow-loader.js.map +0 -1
- package/dist/workflow/workflow-loader.test.d.ts +0 -15
- package/dist/workflow/workflow-loader.test.d.ts.map +0 -1
- package/dist/workflow/workflow-loader.test.js +0 -354
- package/dist/workflow/workflow-loader.test.js.map +0 -1
- package/dist/workflow/workflow-migration.test.d.ts +0 -17
- package/dist/workflow/workflow-migration.test.d.ts.map +0 -1
- package/dist/workflow/workflow-migration.test.js +0 -371
- package/dist/workflow/workflow-migration.test.js.map +0 -1
- package/dist/workflow/workflow-permissions.d.ts.map +0 -1
- package/dist/workflow/workflow-permissions.js.map +0 -1
- package/dist/workflow/workflow-permissions.test.d.ts +0 -15
- package/dist/workflow/workflow-permissions.test.d.ts.map +0 -1
- package/dist/workflow/workflow-permissions.test.js +0 -301
- package/dist/workflow/workflow-permissions.test.js.map +0 -1
- package/dist/workflow/workflow-router.d.ts.map +0 -1
- package/dist/workflow/workflow-router.js.map +0 -1
- package/dist/workflow/workflow-router.test.d.ts +0 -20
- package/dist/workflow/workflow-router.test.d.ts.map +0 -1
- package/dist/workflow/workflow-router.test.js +0 -607
- package/dist/workflow/workflow-router.test.js.map +0 -1
- package/dist/workflow/workflow-schema.d.ts.map +0 -1
- package/dist/workflow/workflow-schema.js.map +0 -1
- package/dist/workflow/workflow-schema.test.d.ts +0 -45
- package/dist/workflow/workflow-schema.test.d.ts.map +0 -1
- package/dist/workflow/workflow-schema.test.js +0 -512
- package/dist/workflow/workflow-schema.test.js.map +0 -1
- package/dist/workflow/workflow-stepped-schema.test.d.ts +0 -18
- package/dist/workflow/workflow-stepped-schema.test.d.ts.map +0 -1
- package/dist/workflow/workflow-stepped-schema.test.js +0 -608
- 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 +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
|