@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,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tri-Modal Support Tests for MSSCI-12086
|
|
3
|
-
*
|
|
4
|
-
* Tests for tri-modal workflow execution in BikePaths:
|
|
5
|
-
* - Mode selection via --mode flag
|
|
6
|
-
* - Steps path resolution based on mode
|
|
7
|
-
* - Session state mode tracking
|
|
8
|
-
* - Default mode behavior
|
|
9
|
-
*/
|
|
10
|
-
export {};
|
|
11
|
-
//# sourceMappingURL=trimodal.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trimodal.test.d.ts","sourceRoot":"","sources":["../../src/workflow/trimodal.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -1,395 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tri-Modal Support Tests for MSSCI-12086
|
|
3
|
-
*
|
|
4
|
-
* Tests for tri-modal workflow execution in BikePaths:
|
|
5
|
-
* - Mode selection via --mode flag
|
|
6
|
-
* - Steps path resolution based on mode
|
|
7
|
-
* - Session state mode tracking
|
|
8
|
-
* - Default mode behavior
|
|
9
|
-
*/
|
|
10
|
-
import { describe, it } from 'node:test';
|
|
11
|
-
import assert from 'node:assert';
|
|
12
|
-
import { parseTrimodalFlag, resolveStepsPath, validateMode, getDefaultMode, } from './trimodal.js';
|
|
13
|
-
import { initWorkflowState, parseSessionState, formatWorkflowState, updateSessionContent } from './session-state.js';
|
|
14
|
-
// ============================================================================
|
|
15
|
-
// AC1: Mode selectable via --mode create|validate|edit flag
|
|
16
|
-
// ============================================================================
|
|
17
|
-
describe('AC1: Mode flag parsing', () => {
|
|
18
|
-
describe('parseTrimodalFlag', () => {
|
|
19
|
-
it('should parse --mode create flag', () => {
|
|
20
|
-
const result = parseTrimodalFlag(['--mode', 'create']);
|
|
21
|
-
assert.strictEqual(result.success, true);
|
|
22
|
-
assert.strictEqual(result.mode, 'create');
|
|
23
|
-
});
|
|
24
|
-
it('should parse --mode validate flag', () => {
|
|
25
|
-
const result = parseTrimodalFlag(['--mode', 'validate']);
|
|
26
|
-
assert.strictEqual(result.success, true);
|
|
27
|
-
assert.strictEqual(result.mode, 'validate');
|
|
28
|
-
});
|
|
29
|
-
it('should parse --mode edit flag', () => {
|
|
30
|
-
const result = parseTrimodalFlag(['--mode', 'edit']);
|
|
31
|
-
assert.strictEqual(result.success, true);
|
|
32
|
-
assert.strictEqual(result.mode, 'edit');
|
|
33
|
-
});
|
|
34
|
-
it('should handle --mode=create syntax', () => {
|
|
35
|
-
const result = parseTrimodalFlag(['--mode=create']);
|
|
36
|
-
assert.strictEqual(result.success, true);
|
|
37
|
-
assert.strictEqual(result.mode, 'create');
|
|
38
|
-
});
|
|
39
|
-
it('should handle -m shorthand flag', () => {
|
|
40
|
-
const result = parseTrimodalFlag(['-m', 'validate']);
|
|
41
|
-
assert.strictEqual(result.success, true);
|
|
42
|
-
assert.strictEqual(result.mode, 'validate');
|
|
43
|
-
});
|
|
44
|
-
it('should return undefined mode when no flag provided', () => {
|
|
45
|
-
const result = parseTrimodalFlag([]);
|
|
46
|
-
assert.strictEqual(result.success, true);
|
|
47
|
-
assert.strictEqual(result.mode, undefined);
|
|
48
|
-
});
|
|
49
|
-
it('should return error for invalid mode value', () => {
|
|
50
|
-
const result = parseTrimodalFlag(['--mode', 'invalid']);
|
|
51
|
-
assert.strictEqual(result.success, false);
|
|
52
|
-
assert.ok(result.error?.includes('invalid'));
|
|
53
|
-
});
|
|
54
|
-
it('should return error for --mode without value', () => {
|
|
55
|
-
const result = parseTrimodalFlag(['--mode']);
|
|
56
|
-
assert.strictEqual(result.success, false);
|
|
57
|
-
assert.ok(result.error?.includes('requires'));
|
|
58
|
-
});
|
|
59
|
-
it('should handle mode flag among other arguments', () => {
|
|
60
|
-
const result = parseTrimodalFlag(['workflow', 'start', 'architecture', '--mode', 'edit', '--verbose']);
|
|
61
|
-
assert.strictEqual(result.success, true);
|
|
62
|
-
assert.strictEqual(result.mode, 'edit');
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
describe('validateMode', () => {
|
|
66
|
-
const workflowWithAllModes = {
|
|
67
|
-
name: 'test-workflow',
|
|
68
|
-
type: 'stepped',
|
|
69
|
-
steps: { path: './steps/', pattern: 'step-{nn}-*.md' },
|
|
70
|
-
modes: {
|
|
71
|
-
default: 'create',
|
|
72
|
-
create: './steps/',
|
|
73
|
-
validate: './steps-validate/',
|
|
74
|
-
edit: './steps-edit/',
|
|
75
|
-
},
|
|
76
|
-
};
|
|
77
|
-
const workflowWithPartialModes = {
|
|
78
|
-
name: 'partial-workflow',
|
|
79
|
-
type: 'stepped',
|
|
80
|
-
steps: { path: './steps/', pattern: 'step-{nn}-*.md' },
|
|
81
|
-
modes: {
|
|
82
|
-
default: 'create',
|
|
83
|
-
create: './steps/',
|
|
84
|
-
// validate and edit not defined
|
|
85
|
-
},
|
|
86
|
-
};
|
|
87
|
-
it('should accept create mode when workflow supports it', () => {
|
|
88
|
-
const result = validateMode('create', workflowWithAllModes);
|
|
89
|
-
assert.strictEqual(result.valid, true);
|
|
90
|
-
});
|
|
91
|
-
it('should accept validate mode when workflow supports it', () => {
|
|
92
|
-
const result = validateMode('validate', workflowWithAllModes);
|
|
93
|
-
assert.strictEqual(result.valid, true);
|
|
94
|
-
});
|
|
95
|
-
it('should accept edit mode when workflow supports it', () => {
|
|
96
|
-
const result = validateMode('edit', workflowWithAllModes);
|
|
97
|
-
assert.strictEqual(result.valid, true);
|
|
98
|
-
});
|
|
99
|
-
it('should reject mode not defined in workflow', () => {
|
|
100
|
-
const result = validateMode('validate', workflowWithPartialModes);
|
|
101
|
-
assert.strictEqual(result.valid, false);
|
|
102
|
-
assert.ok(result.error?.includes('validate'));
|
|
103
|
-
});
|
|
104
|
-
it('should accept any mode for workflow without modes config', () => {
|
|
105
|
-
const workflowNoModes = {
|
|
106
|
-
name: 'no-modes',
|
|
107
|
-
type: 'stepped',
|
|
108
|
-
steps: { path: './steps/', pattern: 'step-{nn}-*.md' },
|
|
109
|
-
};
|
|
110
|
-
// When workflow has no modes config, any mode should work (uses steps.path)
|
|
111
|
-
const result = validateMode('create', workflowNoModes);
|
|
112
|
-
assert.strictEqual(result.valid, true);
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
// ============================================================================
|
|
117
|
-
// AC2: Steps loaded from mode-specific directory
|
|
118
|
-
// ============================================================================
|
|
119
|
-
describe('AC2: Mode-specific steps path resolution', () => {
|
|
120
|
-
describe('resolveStepsPath', () => {
|
|
121
|
-
const trimodalWorkflow = {
|
|
122
|
-
name: 'architecture',
|
|
123
|
-
type: 'stepped',
|
|
124
|
-
steps: { path: './steps/', pattern: 'step-{nn}-*.md' },
|
|
125
|
-
modes: {
|
|
126
|
-
default: 'create',
|
|
127
|
-
create: './steps/',
|
|
128
|
-
validate: './steps-validate/',
|
|
129
|
-
edit: './steps-edit/',
|
|
130
|
-
},
|
|
131
|
-
};
|
|
132
|
-
it('should resolve create mode to create path', () => {
|
|
133
|
-
const result = resolveStepsPath(trimodalWorkflow, 'create');
|
|
134
|
-
assert.strictEqual(result.success, true);
|
|
135
|
-
assert.strictEqual(result.path, './steps/');
|
|
136
|
-
});
|
|
137
|
-
it('should resolve validate mode to validate path', () => {
|
|
138
|
-
const result = resolveStepsPath(trimodalWorkflow, 'validate');
|
|
139
|
-
assert.strictEqual(result.success, true);
|
|
140
|
-
assert.strictEqual(result.path, './steps-validate/');
|
|
141
|
-
});
|
|
142
|
-
it('should resolve edit mode to edit path', () => {
|
|
143
|
-
const result = resolveStepsPath(trimodalWorkflow, 'edit');
|
|
144
|
-
assert.strictEqual(result.success, true);
|
|
145
|
-
assert.strictEqual(result.path, './steps-edit/');
|
|
146
|
-
});
|
|
147
|
-
it('should fall back to steps.path when no modes config', () => {
|
|
148
|
-
const workflowNoModes = {
|
|
149
|
-
name: 'simple',
|
|
150
|
-
type: 'stepped',
|
|
151
|
-
steps: { path: './default-steps/', pattern: 'step-{nn}-*.md' },
|
|
152
|
-
};
|
|
153
|
-
const result = resolveStepsPath(workflowNoModes, 'create');
|
|
154
|
-
assert.strictEqual(result.success, true);
|
|
155
|
-
assert.strictEqual(result.path, './default-steps/');
|
|
156
|
-
});
|
|
157
|
-
it('should fall back to steps.path when mode path not defined', () => {
|
|
158
|
-
const partialModes = {
|
|
159
|
-
name: 'partial',
|
|
160
|
-
type: 'stepped',
|
|
161
|
-
steps: { path: './fallback/', pattern: 'step-{nn}-*.md' },
|
|
162
|
-
modes: {
|
|
163
|
-
default: 'create',
|
|
164
|
-
create: './create-steps/',
|
|
165
|
-
// validate not defined
|
|
166
|
-
},
|
|
167
|
-
};
|
|
168
|
-
const result = resolveStepsPath(partialModes, 'validate');
|
|
169
|
-
assert.strictEqual(result.success, true);
|
|
170
|
-
assert.strictEqual(result.path, './fallback/');
|
|
171
|
-
});
|
|
172
|
-
it('should return error for phased workflow (no steps)', () => {
|
|
173
|
-
const phasedWorkflow = {
|
|
174
|
-
name: 'tdd',
|
|
175
|
-
type: 'phased',
|
|
176
|
-
phases: [{ name: 'setup', agent: 'sm' }],
|
|
177
|
-
};
|
|
178
|
-
const result = resolveStepsPath(phasedWorkflow, 'create');
|
|
179
|
-
assert.strictEqual(result.success, false);
|
|
180
|
-
assert.ok(result.error?.includes('stepped'));
|
|
181
|
-
});
|
|
182
|
-
it('should preserve pattern from workflow definition', () => {
|
|
183
|
-
const result = resolveStepsPath(trimodalWorkflow, 'create');
|
|
184
|
-
assert.strictEqual(result.success, true);
|
|
185
|
-
assert.strictEqual(result.pattern, 'step-{nn}-*.md');
|
|
186
|
-
});
|
|
187
|
-
});
|
|
188
|
-
});
|
|
189
|
-
// ============================================================================
|
|
190
|
-
// AC3: Mode tracked in session state
|
|
191
|
-
// ============================================================================
|
|
192
|
-
describe('AC3: Session state mode tracking', () => {
|
|
193
|
-
describe('initWorkflowState with mode', () => {
|
|
194
|
-
it('should initialize state with create mode', () => {
|
|
195
|
-
const state = initWorkflowState('architecture', 'stepped', 'create');
|
|
196
|
-
assert.strictEqual(state.name, 'architecture');
|
|
197
|
-
assert.strictEqual(state.type, 'stepped');
|
|
198
|
-
assert.strictEqual(state.mode, 'create');
|
|
199
|
-
});
|
|
200
|
-
it('should initialize state with validate mode', () => {
|
|
201
|
-
const state = initWorkflowState('architecture', 'stepped', 'validate');
|
|
202
|
-
assert.strictEqual(state.mode, 'validate');
|
|
203
|
-
});
|
|
204
|
-
it('should initialize state with edit mode', () => {
|
|
205
|
-
const state = initWorkflowState('architecture', 'stepped', 'edit');
|
|
206
|
-
assert.strictEqual(state.mode, 'edit');
|
|
207
|
-
});
|
|
208
|
-
it('should allow undefined mode for workflows without tri-modal', () => {
|
|
209
|
-
const state = initWorkflowState('simple', 'stepped');
|
|
210
|
-
assert.strictEqual(state.mode, undefined);
|
|
211
|
-
});
|
|
212
|
-
});
|
|
213
|
-
describe('formatWorkflowState with mode', () => {
|
|
214
|
-
it('should include mode in formatted output', () => {
|
|
215
|
-
const state = initWorkflowState('architecture', 'stepped', 'validate');
|
|
216
|
-
const formatted = formatWorkflowState(state);
|
|
217
|
-
assert.ok(formatted.includes('**Mode:** validate'));
|
|
218
|
-
});
|
|
219
|
-
it('should omit mode line when mode is undefined', () => {
|
|
220
|
-
const state = initWorkflowState('simple', 'stepped');
|
|
221
|
-
const formatted = formatWorkflowState(state);
|
|
222
|
-
assert.ok(!formatted.includes('**Mode:**'));
|
|
223
|
-
});
|
|
224
|
-
});
|
|
225
|
-
describe('parseSessionState with mode', () => {
|
|
226
|
-
it('should parse mode from session content', () => {
|
|
227
|
-
const content = `
|
|
228
|
-
# Story
|
|
229
|
-
|
|
230
|
-
## Workflow State
|
|
231
|
-
- **Workflow Name:** architecture
|
|
232
|
-
- **Type:** stepped
|
|
233
|
-
- **Mode:** edit
|
|
234
|
-
- **Started:** 2026-01-21T10:00:00Z
|
|
235
|
-
- **Last Updated:** 2026-01-21T10:30:00Z
|
|
236
|
-
- **Current Step:** 3
|
|
237
|
-
- **Steps Completed:** [1, 2]
|
|
238
|
-
- **Status:** in_progress
|
|
239
|
-
`;
|
|
240
|
-
const result = parseSessionState(content);
|
|
241
|
-
assert.strictEqual(result.success, true);
|
|
242
|
-
assert.strictEqual(result.state?.mode, 'edit');
|
|
243
|
-
});
|
|
244
|
-
it('should handle session without mode field', () => {
|
|
245
|
-
const content = `
|
|
246
|
-
# Story
|
|
247
|
-
|
|
248
|
-
## Workflow State
|
|
249
|
-
- **Workflow Name:** simple
|
|
250
|
-
- **Type:** stepped
|
|
251
|
-
- **Started:** 2026-01-21T10:00:00Z
|
|
252
|
-
- **Last Updated:** 2026-01-21T10:30:00Z
|
|
253
|
-
- **Current Step:** 1
|
|
254
|
-
- **Steps Completed:** []
|
|
255
|
-
- **Status:** in_progress
|
|
256
|
-
`;
|
|
257
|
-
const result = parseSessionState(content);
|
|
258
|
-
assert.strictEqual(result.success, true);
|
|
259
|
-
assert.strictEqual(result.state?.mode, undefined);
|
|
260
|
-
});
|
|
261
|
-
});
|
|
262
|
-
describe('updateSessionContent preserves mode', () => {
|
|
263
|
-
it('should preserve mode when updating session state', () => {
|
|
264
|
-
const state = initWorkflowState('architecture', 'stepped', 'validate');
|
|
265
|
-
state.currentStep = 2;
|
|
266
|
-
state.stepsCompleted = [1];
|
|
267
|
-
const content = '# Story\n\n## Overview\nSome content\n';
|
|
268
|
-
const result = updateSessionContent(content, state);
|
|
269
|
-
assert.strictEqual(result.success, true);
|
|
270
|
-
assert.ok(result.content?.includes('**Mode:** validate'));
|
|
271
|
-
});
|
|
272
|
-
});
|
|
273
|
-
});
|
|
274
|
-
// ============================================================================
|
|
275
|
-
// AC4: Defaults to create mode when --mode not specified
|
|
276
|
-
// ============================================================================
|
|
277
|
-
describe('AC4: Default mode behavior', () => {
|
|
278
|
-
describe('getDefaultMode', () => {
|
|
279
|
-
it('should return workflow modes.default when defined', () => {
|
|
280
|
-
const workflow = {
|
|
281
|
-
name: 'test',
|
|
282
|
-
type: 'stepped',
|
|
283
|
-
steps: { path: './steps/', pattern: 'step-{nn}-*.md' },
|
|
284
|
-
modes: {
|
|
285
|
-
default: 'validate',
|
|
286
|
-
create: './create/',
|
|
287
|
-
validate: './validate/',
|
|
288
|
-
},
|
|
289
|
-
};
|
|
290
|
-
const mode = getDefaultMode(workflow);
|
|
291
|
-
assert.strictEqual(mode, 'validate');
|
|
292
|
-
});
|
|
293
|
-
it('should return create when modes.default is create', () => {
|
|
294
|
-
const workflow = {
|
|
295
|
-
name: 'test',
|
|
296
|
-
type: 'stepped',
|
|
297
|
-
steps: { path: './steps/', pattern: 'step-{nn}-*.md' },
|
|
298
|
-
modes: {
|
|
299
|
-
default: 'create',
|
|
300
|
-
create: './create/',
|
|
301
|
-
},
|
|
302
|
-
};
|
|
303
|
-
const mode = getDefaultMode(workflow);
|
|
304
|
-
assert.strictEqual(mode, 'create');
|
|
305
|
-
});
|
|
306
|
-
it('should return create when no modes config exists', () => {
|
|
307
|
-
const workflow = {
|
|
308
|
-
name: 'simple',
|
|
309
|
-
type: 'stepped',
|
|
310
|
-
steps: { path: './steps/', pattern: 'step-{nn}-*.md' },
|
|
311
|
-
};
|
|
312
|
-
const mode = getDefaultMode(workflow);
|
|
313
|
-
assert.strictEqual(mode, 'create');
|
|
314
|
-
});
|
|
315
|
-
it('should return undefined for phased workflows', () => {
|
|
316
|
-
const workflow = {
|
|
317
|
-
name: 'tdd',
|
|
318
|
-
type: 'phased',
|
|
319
|
-
phases: [{ name: 'setup', agent: 'sm' }],
|
|
320
|
-
};
|
|
321
|
-
const mode = getDefaultMode(workflow);
|
|
322
|
-
assert.strictEqual(mode, undefined);
|
|
323
|
-
});
|
|
324
|
-
});
|
|
325
|
-
describe('Integration: flag parsing with defaults', () => {
|
|
326
|
-
const trimodalWorkflow = {
|
|
327
|
-
name: 'architecture',
|
|
328
|
-
type: 'stepped',
|
|
329
|
-
steps: { path: './steps/', pattern: 'step-{nn}-*.md' },
|
|
330
|
-
modes: {
|
|
331
|
-
default: 'create',
|
|
332
|
-
create: './steps/',
|
|
333
|
-
validate: './steps-validate/',
|
|
334
|
-
edit: './steps-edit/',
|
|
335
|
-
},
|
|
336
|
-
};
|
|
337
|
-
it('should use create mode when no --mode flag and workflow defaults to create', () => {
|
|
338
|
-
const parseResult = parseTrimodalFlag([]);
|
|
339
|
-
const effectiveMode = parseResult.mode ?? getDefaultMode(trimodalWorkflow);
|
|
340
|
-
assert.strictEqual(effectiveMode, 'create');
|
|
341
|
-
});
|
|
342
|
-
it('should use explicit mode when --mode flag provided', () => {
|
|
343
|
-
const parseResult = parseTrimodalFlag(['--mode', 'edit']);
|
|
344
|
-
const effectiveMode = parseResult.mode ?? getDefaultMode(trimodalWorkflow);
|
|
345
|
-
assert.strictEqual(effectiveMode, 'edit');
|
|
346
|
-
});
|
|
347
|
-
it('should use workflow default mode when no flag and default is not create', () => {
|
|
348
|
-
const validateDefaultWorkflow = {
|
|
349
|
-
...trimodalWorkflow,
|
|
350
|
-
modes: { ...trimodalWorkflow.modes, default: 'validate' },
|
|
351
|
-
};
|
|
352
|
-
const parseResult = parseTrimodalFlag([]);
|
|
353
|
-
const effectiveMode = parseResult.mode ?? getDefaultMode(validateDefaultWorkflow);
|
|
354
|
-
assert.strictEqual(effectiveMode, 'validate');
|
|
355
|
-
});
|
|
356
|
-
});
|
|
357
|
-
});
|
|
358
|
-
// ============================================================================
|
|
359
|
-
// Edge cases and error handling
|
|
360
|
-
// ============================================================================
|
|
361
|
-
describe('Edge cases', () => {
|
|
362
|
-
it('should handle empty workflow modes object', () => {
|
|
363
|
-
const workflow = {
|
|
364
|
-
name: 'test',
|
|
365
|
-
type: 'stepped',
|
|
366
|
-
steps: { path: './steps/', pattern: 'step-{nn}-*.md' },
|
|
367
|
-
modes: {}, // Empty modes object (technically invalid but defensive)
|
|
368
|
-
};
|
|
369
|
-
const result = resolveStepsPath(workflow, 'create');
|
|
370
|
-
// Should fall back to steps.path
|
|
371
|
-
assert.strictEqual(result.success, true);
|
|
372
|
-
assert.strictEqual(result.path, './steps/');
|
|
373
|
-
});
|
|
374
|
-
it('should handle case-sensitive mode values', () => {
|
|
375
|
-
// Modes should be lowercase
|
|
376
|
-
const result = parseTrimodalFlag(['--mode', 'Create']);
|
|
377
|
-
assert.strictEqual(result.success, false);
|
|
378
|
-
assert.ok(result.error?.includes('Create'));
|
|
379
|
-
});
|
|
380
|
-
it('should preserve mode across session state round-trip', () => {
|
|
381
|
-
// Create state with mode
|
|
382
|
-
const original = initWorkflowState('arch', 'stepped', 'validate');
|
|
383
|
-
// Format to markdown
|
|
384
|
-
const formatted = formatWorkflowState(original);
|
|
385
|
-
// Create session content
|
|
386
|
-
const sessionContent = `# Story\n\n${formatted}\n`;
|
|
387
|
-
// Parse it back
|
|
388
|
-
const parsed = parseSessionState(sessionContent);
|
|
389
|
-
assert.strictEqual(parsed.success, true);
|
|
390
|
-
assert.strictEqual(parsed.state?.mode, 'validate');
|
|
391
|
-
assert.strictEqual(parsed.state?.name, 'arch');
|
|
392
|
-
assert.strictEqual(parsed.state?.type, 'stepped');
|
|
393
|
-
});
|
|
394
|
-
});
|
|
395
|
-
//# sourceMappingURL=trimodal.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trimodal.test.js","sourceRoot":"","sources":["../../src/workflow/trimodal.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Variable Resolver for MSSCI-12081
|
|
3
|
-
*
|
|
4
|
-
* Resolves {variable} placeholders in step file content from multiple sources
|
|
5
|
-
* with priority-based fallback chain.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Represents a source of variable values
|
|
9
|
-
*/
|
|
10
|
-
export interface VariableSource {
|
|
11
|
-
/** Name of this source (e.g., 'workflow', 'session', 'environment') */
|
|
12
|
-
name: string;
|
|
13
|
-
/** Priority level (lower number = higher priority) */
|
|
14
|
-
priority: number;
|
|
15
|
-
/** Map of variable names to their values */
|
|
16
|
-
values: Record<string, string>;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Result of variable resolution
|
|
20
|
-
*/
|
|
21
|
-
export interface ResolveResult {
|
|
22
|
-
/** Content with variables resolved (unresolved variables left as-is) */
|
|
23
|
-
content: string;
|
|
24
|
-
/** List of variables that were successfully resolved */
|
|
25
|
-
resolved: string[];
|
|
26
|
-
/** List of variables that could not be resolved */
|
|
27
|
-
unresolved: string[];
|
|
28
|
-
/** Map of variable name to source name that provided the value */
|
|
29
|
-
sources: Record<string, string>;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Options for the convenience resolveStepVariables function
|
|
33
|
-
*/
|
|
34
|
-
export interface ResolveStepOptions {
|
|
35
|
-
/** Variables from workflow YAML (highest priority) */
|
|
36
|
-
workflowVars?: Record<string, unknown>;
|
|
37
|
-
/** Variables from session file */
|
|
38
|
-
sessionVars?: Record<string, string>;
|
|
39
|
-
/** Path to config file */
|
|
40
|
-
configPath?: string;
|
|
41
|
-
/** Project root path (for {project_root} variable) */
|
|
42
|
-
projectRoot?: string;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Resolve variables in content from prioritized sources
|
|
46
|
-
*
|
|
47
|
-
* @param content - The content containing {variable} placeholders
|
|
48
|
-
* @param sources - Array of variable sources, sorted by priority
|
|
49
|
-
* @returns ResolveResult with resolved content and metadata
|
|
50
|
-
*/
|
|
51
|
-
export declare function resolveVariables(content: string, sources: VariableSource[]): ResolveResult;
|
|
52
|
-
/**
|
|
53
|
-
* Convenience function to resolve variables in step file content
|
|
54
|
-
*
|
|
55
|
-
* Automatically builds sources from:
|
|
56
|
-
* 1. Workflow variables (priority 1)
|
|
57
|
-
* 2. Session variables (priority 2)
|
|
58
|
-
* 3. Config file values (priority 3)
|
|
59
|
-
* 4. Environment/system variables (priority 4)
|
|
60
|
-
* 5. Default values (priority 5)
|
|
61
|
-
*
|
|
62
|
-
* @param stepContent - The step file content to process
|
|
63
|
-
* @param options - Optional configuration for variable sources
|
|
64
|
-
* @returns ResolveResult with resolved content and metadata
|
|
65
|
-
*/
|
|
66
|
-
export declare function resolveStepVariables(stepContent: string, options?: ResolveStepOptions): ResolveResult;
|
|
67
|
-
//# sourceMappingURL=variable-resolver.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"variable-resolver.d.ts","sourceRoot":"","sources":["../../src/workflow/variable-resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,mDAAmD;IACnD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,0BAA0B;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA0CD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,EAAE,GACxB,aAAa,CAyCf;AAaD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,aAAa,CAmDf"}
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Variable Resolver for MSSCI-12081
|
|
3
|
-
*
|
|
4
|
-
* Resolves {variable} placeholders in step file content from multiple sources
|
|
5
|
-
* with priority-based fallback chain.
|
|
6
|
-
*/
|
|
7
|
-
// Regex to match valid variable names: {name} where name starts with letter or underscore
|
|
8
|
-
// followed by letters, numbers, or underscores.
|
|
9
|
-
// Uses negative lookbehind to avoid matching inside nested braces like {outer_{inner}}
|
|
10
|
-
const VARIABLE_REGEX = /(?<!\{[^}]*)\{([a-zA-Z_][a-zA-Z0-9_]*)\}/g;
|
|
11
|
-
/**
|
|
12
|
-
* Convert a value to string, handling various types
|
|
13
|
-
*/
|
|
14
|
-
function valueToString(value) {
|
|
15
|
-
if (value === null || value === undefined) {
|
|
16
|
-
return null;
|
|
17
|
-
}
|
|
18
|
-
if (typeof value === 'string') {
|
|
19
|
-
return value;
|
|
20
|
-
}
|
|
21
|
-
if (typeof value === 'number' || typeof value === 'boolean') {
|
|
22
|
-
return String(value);
|
|
23
|
-
}
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Look up a variable in sources by priority
|
|
28
|
-
*/
|
|
29
|
-
function lookupVariable(varName, sortedSources) {
|
|
30
|
-
for (const source of sortedSources) {
|
|
31
|
-
if (varName in source.values) {
|
|
32
|
-
const rawValue = source.values[varName];
|
|
33
|
-
const value = valueToString(rawValue);
|
|
34
|
-
if (value !== null) {
|
|
35
|
-
return { value, sourceName: source.name };
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Resolve variables in content from prioritized sources
|
|
43
|
-
*
|
|
44
|
-
* @param content - The content containing {variable} placeholders
|
|
45
|
-
* @param sources - Array of variable sources, sorted by priority
|
|
46
|
-
* @returns ResolveResult with resolved content and metadata
|
|
47
|
-
*/
|
|
48
|
-
export function resolveVariables(content, sources) {
|
|
49
|
-
const resolved = [];
|
|
50
|
-
const unresolved = [];
|
|
51
|
-
const sourceMap = {};
|
|
52
|
-
// Sort sources by priority (lower number = higher priority)
|
|
53
|
-
// Stable sort preserves array order for same priority
|
|
54
|
-
const sortedSources = [...sources].sort((a, b) => a.priority - b.priority);
|
|
55
|
-
// Find all variable references in content
|
|
56
|
-
const matches = content.matchAll(VARIABLE_REGEX);
|
|
57
|
-
const seenVars = new Set();
|
|
58
|
-
for (const match of matches) {
|
|
59
|
-
const varName = match[1];
|
|
60
|
-
if (seenVars.has(varName)) {
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
|
-
seenVars.add(varName);
|
|
64
|
-
const lookup = lookupVariable(varName, sortedSources);
|
|
65
|
-
if (lookup) {
|
|
66
|
-
resolved.push(varName);
|
|
67
|
-
sourceMap[varName] = lookup.sourceName;
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
unresolved.push(varName);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
// Replace variables in content
|
|
74
|
-
const resolvedContent = content.replace(VARIABLE_REGEX, (match, varName) => {
|
|
75
|
-
const lookup = lookupVariable(varName, sortedSources);
|
|
76
|
-
return lookup ? lookup.value : match;
|
|
77
|
-
});
|
|
78
|
-
return {
|
|
79
|
-
content: resolvedContent,
|
|
80
|
-
resolved,
|
|
81
|
-
unresolved,
|
|
82
|
-
sources: sourceMap,
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Get current date in YYYY-MM-DD format
|
|
87
|
-
*/
|
|
88
|
-
function getCurrentDate() {
|
|
89
|
-
const now = new Date();
|
|
90
|
-
const year = now.getFullYear();
|
|
91
|
-
const month = String(now.getMonth() + 1).padStart(2, '0');
|
|
92
|
-
const day = String(now.getDate()).padStart(2, '0');
|
|
93
|
-
return `${year}-${month}-${day}`;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Convenience function to resolve variables in step file content
|
|
97
|
-
*
|
|
98
|
-
* Automatically builds sources from:
|
|
99
|
-
* 1. Workflow variables (priority 1)
|
|
100
|
-
* 2. Session variables (priority 2)
|
|
101
|
-
* 3. Config file values (priority 3)
|
|
102
|
-
* 4. Environment/system variables (priority 4)
|
|
103
|
-
* 5. Default values (priority 5)
|
|
104
|
-
*
|
|
105
|
-
* @param stepContent - The step file content to process
|
|
106
|
-
* @param options - Optional configuration for variable sources
|
|
107
|
-
* @returns ResolveResult with resolved content and metadata
|
|
108
|
-
*/
|
|
109
|
-
export function resolveStepVariables(stepContent, options) {
|
|
110
|
-
const sources = [];
|
|
111
|
-
// Priority 1: Workflow variables
|
|
112
|
-
if (options?.workflowVars) {
|
|
113
|
-
const workflowValues = {};
|
|
114
|
-
for (const [key, value] of Object.entries(options.workflowVars)) {
|
|
115
|
-
const strValue = valueToString(value);
|
|
116
|
-
if (strValue !== null) {
|
|
117
|
-
workflowValues[key] = strValue;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
sources.push({
|
|
121
|
-
name: 'workflow',
|
|
122
|
-
priority: 1,
|
|
123
|
-
values: workflowValues,
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
// Priority 2: Session variables
|
|
127
|
-
if (options?.sessionVars) {
|
|
128
|
-
sources.push({
|
|
129
|
-
name: 'session',
|
|
130
|
-
priority: 2,
|
|
131
|
-
values: options.sessionVars,
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
// Priority 4: Environment/system variables
|
|
135
|
-
const envValues = {
|
|
136
|
-
date: getCurrentDate(),
|
|
137
|
-
};
|
|
138
|
-
if (options?.projectRoot) {
|
|
139
|
-
envValues.project_root = options.projectRoot;
|
|
140
|
-
}
|
|
141
|
-
sources.push({
|
|
142
|
-
name: 'environment',
|
|
143
|
-
priority: 4,
|
|
144
|
-
values: envValues,
|
|
145
|
-
});
|
|
146
|
-
// Priority 5: Default values
|
|
147
|
-
sources.push({
|
|
148
|
-
name: 'defaults',
|
|
149
|
-
priority: 5,
|
|
150
|
-
values: {
|
|
151
|
-
planning_artifacts: 'planning-artifacts/',
|
|
152
|
-
},
|
|
153
|
-
});
|
|
154
|
-
return resolveVariables(stepContent, sources);
|
|
155
|
-
}
|
|
156
|
-
//# sourceMappingURL=variable-resolver.js.map
|