@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,543 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for Story MSSCI-12085: Gate detection and approval flow
|
|
3
|
-
*
|
|
4
|
-
* Tests the unified gate detection system that combines 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 tests gate prompt extraction and decision recording in session files.
|
|
10
|
-
*
|
|
11
|
-
* Run with: npm test
|
|
12
|
-
*/
|
|
13
|
-
import { describe, it } from 'node:test';
|
|
14
|
-
import assert from 'node:assert';
|
|
15
|
-
// These imports will fail until implementation exists - confirms RED state
|
|
16
|
-
import { detectGate, extractGatePrompt, recordGateDecision, parseGateDecisions, formatGateDecisions, } from './gate-handler.js';
|
|
17
|
-
// =============================================================================
|
|
18
|
-
// AC1: Gates detected from all three sources
|
|
19
|
-
// =============================================================================
|
|
20
|
-
describe('MSSCI-12085: Gate Detection and Approval Flow', () => {
|
|
21
|
-
describe('AC1: Gates detected from all three sources', () => {
|
|
22
|
-
describe('Workflow YAML gates.after_steps', () => {
|
|
23
|
-
it('should detect gate when step number is in after_steps array', () => {
|
|
24
|
-
const result = detectGate({
|
|
25
|
-
stepNumber: 3,
|
|
26
|
-
afterSteps: [1, 3, 7],
|
|
27
|
-
stepMeta: { gate: false },
|
|
28
|
-
stepContent: 'No marker here.',
|
|
29
|
-
});
|
|
30
|
-
assert.strictEqual(result.isGate, true);
|
|
31
|
-
assert.strictEqual(result.source, 'workflow');
|
|
32
|
-
assert.strictEqual(result.stepNumber, 3);
|
|
33
|
-
});
|
|
34
|
-
it('should not detect gate when step number is not in after_steps', () => {
|
|
35
|
-
const result = detectGate({
|
|
36
|
-
stepNumber: 2,
|
|
37
|
-
afterSteps: [1, 3, 7],
|
|
38
|
-
stepMeta: { gate: false },
|
|
39
|
-
stepContent: 'No marker here.',
|
|
40
|
-
});
|
|
41
|
-
assert.strictEqual(result.isGate, false);
|
|
42
|
-
assert.strictEqual(result.source, null);
|
|
43
|
-
});
|
|
44
|
-
it('should handle empty after_steps array', () => {
|
|
45
|
-
const result = detectGate({
|
|
46
|
-
stepNumber: 1,
|
|
47
|
-
afterSteps: [],
|
|
48
|
-
stepMeta: {},
|
|
49
|
-
stepContent: 'Content.',
|
|
50
|
-
});
|
|
51
|
-
assert.strictEqual(result.isGate, false);
|
|
52
|
-
});
|
|
53
|
-
it('should handle undefined after_steps', () => {
|
|
54
|
-
const result = detectGate({
|
|
55
|
-
stepNumber: 1,
|
|
56
|
-
afterSteps: undefined,
|
|
57
|
-
stepMeta: {},
|
|
58
|
-
stepContent: 'Content.',
|
|
59
|
-
});
|
|
60
|
-
assert.strictEqual(result.isGate, false);
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
describe('Step-meta gate: true', () => {
|
|
64
|
-
it('should detect gate from step-meta gate: true', () => {
|
|
65
|
-
const result = detectGate({
|
|
66
|
-
stepNumber: 2,
|
|
67
|
-
afterSteps: [],
|
|
68
|
-
stepMeta: { gate: true },
|
|
69
|
-
stepContent: 'No marker.',
|
|
70
|
-
});
|
|
71
|
-
assert.strictEqual(result.isGate, true);
|
|
72
|
-
assert.strictEqual(result.source, 'step-meta');
|
|
73
|
-
});
|
|
74
|
-
it('should not detect gate when step-meta gate: false', () => {
|
|
75
|
-
const result = detectGate({
|
|
76
|
-
stepNumber: 2,
|
|
77
|
-
afterSteps: [],
|
|
78
|
-
stepMeta: { gate: false },
|
|
79
|
-
stepContent: 'No marker.',
|
|
80
|
-
});
|
|
81
|
-
assert.strictEqual(result.isGate, false);
|
|
82
|
-
});
|
|
83
|
-
it('should handle missing gate field in step-meta', () => {
|
|
84
|
-
const result = detectGate({
|
|
85
|
-
stepNumber: 2,
|
|
86
|
-
afterSteps: [],
|
|
87
|
-
stepMeta: { name: 'some-step' },
|
|
88
|
-
stepContent: 'No marker.',
|
|
89
|
-
});
|
|
90
|
-
assert.strictEqual(result.isGate, false);
|
|
91
|
-
});
|
|
92
|
-
it('should handle undefined step-meta', () => {
|
|
93
|
-
const result = detectGate({
|
|
94
|
-
stepNumber: 2,
|
|
95
|
-
afterSteps: [],
|
|
96
|
-
stepMeta: undefined,
|
|
97
|
-
stepContent: 'No marker.',
|
|
98
|
-
});
|
|
99
|
-
assert.strictEqual(result.isGate, false);
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
describe('Content marker <!-- GATE -->', () => {
|
|
103
|
-
it('should detect gate from <!-- GATE --> marker in content', () => {
|
|
104
|
-
const result = detectGate({
|
|
105
|
-
stepNumber: 4,
|
|
106
|
-
afterSteps: [],
|
|
107
|
-
stepMeta: {},
|
|
108
|
-
stepContent: `## Instructions
|
|
109
|
-
Do the thing.
|
|
110
|
-
|
|
111
|
-
<!-- GATE -->
|
|
112
|
-
- [C] Continue
|
|
113
|
-
- [R] Revise
|
|
114
|
-
`,
|
|
115
|
-
});
|
|
116
|
-
assert.strictEqual(result.isGate, true);
|
|
117
|
-
assert.strictEqual(result.source, 'marker');
|
|
118
|
-
});
|
|
119
|
-
it('should detect gate from marker at start of content', () => {
|
|
120
|
-
const result = detectGate({
|
|
121
|
-
stepNumber: 1,
|
|
122
|
-
afterSteps: [],
|
|
123
|
-
stepMeta: {},
|
|
124
|
-
stepContent: `<!-- GATE -->
|
|
125
|
-
First line after marker.
|
|
126
|
-
`,
|
|
127
|
-
});
|
|
128
|
-
assert.strictEqual(result.isGate, true);
|
|
129
|
-
assert.strictEqual(result.source, 'marker');
|
|
130
|
-
});
|
|
131
|
-
it('should detect gate from marker at end of content', () => {
|
|
132
|
-
const result = detectGate({
|
|
133
|
-
stepNumber: 1,
|
|
134
|
-
afterSteps: [],
|
|
135
|
-
stepMeta: {},
|
|
136
|
-
stepContent: `Content here.
|
|
137
|
-
<!-- GATE -->`,
|
|
138
|
-
});
|
|
139
|
-
assert.strictEqual(result.isGate, true);
|
|
140
|
-
});
|
|
141
|
-
it('should detect gate from marker with surrounding whitespace', () => {
|
|
142
|
-
const result = detectGate({
|
|
143
|
-
stepNumber: 1,
|
|
144
|
-
afterSteps: [],
|
|
145
|
-
stepMeta: {},
|
|
146
|
-
stepContent: `Content.
|
|
147
|
-
|
|
148
|
-
<!-- GATE -->
|
|
149
|
-
|
|
150
|
-
More content.
|
|
151
|
-
`,
|
|
152
|
-
});
|
|
153
|
-
assert.strictEqual(result.isGate, true);
|
|
154
|
-
});
|
|
155
|
-
it('should not detect gate from similar but incorrect markers', () => {
|
|
156
|
-
const result = detectGate({
|
|
157
|
-
stepNumber: 1,
|
|
158
|
-
afterSteps: [],
|
|
159
|
-
stepMeta: {},
|
|
160
|
-
stepContent: `<!-- NOT A GATE -->
|
|
161
|
-
<!-- GATES -->
|
|
162
|
-
<!-- gate -->
|
|
163
|
-
<!--GATE-->
|
|
164
|
-
`,
|
|
165
|
-
});
|
|
166
|
-
assert.strictEqual(result.isGate, false);
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
|
-
describe('Combined sources (OR logic)', () => {
|
|
170
|
-
it('should detect gate when workflow AND step-meta indicate gate', () => {
|
|
171
|
-
const result = detectGate({
|
|
172
|
-
stepNumber: 3,
|
|
173
|
-
afterSteps: [3],
|
|
174
|
-
stepMeta: { gate: true },
|
|
175
|
-
stepContent: 'No marker.',
|
|
176
|
-
});
|
|
177
|
-
assert.strictEqual(result.isGate, true);
|
|
178
|
-
// Should report first detected source (workflow takes priority)
|
|
179
|
-
assert.strictEqual(result.source, 'workflow');
|
|
180
|
-
});
|
|
181
|
-
it('should detect gate when step-meta AND marker indicate gate', () => {
|
|
182
|
-
const result = detectGate({
|
|
183
|
-
stepNumber: 5,
|
|
184
|
-
afterSteps: [],
|
|
185
|
-
stepMeta: { gate: true },
|
|
186
|
-
stepContent: '<!-- GATE -->',
|
|
187
|
-
});
|
|
188
|
-
assert.strictEqual(result.isGate, true);
|
|
189
|
-
// step-meta takes priority over marker
|
|
190
|
-
assert.strictEqual(result.source, 'step-meta');
|
|
191
|
-
});
|
|
192
|
-
it('should detect gate when all three sources indicate gate', () => {
|
|
193
|
-
const result = detectGate({
|
|
194
|
-
stepNumber: 7,
|
|
195
|
-
afterSteps: [7],
|
|
196
|
-
stepMeta: { gate: true },
|
|
197
|
-
stepContent: '<!-- GATE -->',
|
|
198
|
-
});
|
|
199
|
-
assert.strictEqual(result.isGate, true);
|
|
200
|
-
// Workflow has highest priority
|
|
201
|
-
assert.strictEqual(result.source, 'workflow');
|
|
202
|
-
});
|
|
203
|
-
it('should not detect gate when no sources indicate gate', () => {
|
|
204
|
-
const result = detectGate({
|
|
205
|
-
stepNumber: 2,
|
|
206
|
-
afterSteps: [1, 3],
|
|
207
|
-
stepMeta: { gate: false },
|
|
208
|
-
stepContent: 'Plain content.',
|
|
209
|
-
});
|
|
210
|
-
assert.strictEqual(result.isGate, false);
|
|
211
|
-
assert.strictEqual(result.source, null);
|
|
212
|
-
});
|
|
213
|
-
});
|
|
214
|
-
});
|
|
215
|
-
// =============================================================================
|
|
216
|
-
// AC2: Gate prompt displayed to user
|
|
217
|
-
// =============================================================================
|
|
218
|
-
describe('AC2: Gate prompt displayed to user', () => {
|
|
219
|
-
it('should extract gate prompt from ## Gate Prompt section', () => {
|
|
220
|
-
const content = `# Step 3: Review
|
|
221
|
-
|
|
222
|
-
## Instructions
|
|
223
|
-
Do the review.
|
|
224
|
-
|
|
225
|
-
## Gate Prompt
|
|
226
|
-
Please verify the architecture design is complete and aligns with requirements.
|
|
227
|
-
|
|
228
|
-
## Next Steps
|
|
229
|
-
Continue to implementation.
|
|
230
|
-
`;
|
|
231
|
-
const prompt = extractGatePrompt(content);
|
|
232
|
-
assert.strictEqual(prompt, 'Please verify the architecture design is complete and aligns with requirements.');
|
|
233
|
-
});
|
|
234
|
-
it('should extract gate prompt from step-meta gate_prompt field', () => {
|
|
235
|
-
const content = 'Some content without a Gate Prompt section.';
|
|
236
|
-
const meta = {
|
|
237
|
-
number: 3,
|
|
238
|
-
name: 'review',
|
|
239
|
-
gate: true,
|
|
240
|
-
gate_prompt: 'Confirm the design is ready for implementation.',
|
|
241
|
-
};
|
|
242
|
-
const prompt = extractGatePrompt(content, meta);
|
|
243
|
-
assert.strictEqual(prompt, 'Confirm the design is ready for implementation.');
|
|
244
|
-
});
|
|
245
|
-
it('should prefer ## Gate Prompt section over meta gate_prompt', () => {
|
|
246
|
-
const content = `## Gate Prompt
|
|
247
|
-
Section prompt takes priority.
|
|
248
|
-
`;
|
|
249
|
-
const meta = {
|
|
250
|
-
gate_prompt: 'Meta prompt should be ignored.',
|
|
251
|
-
};
|
|
252
|
-
const prompt = extractGatePrompt(content, meta);
|
|
253
|
-
assert.strictEqual(prompt, 'Section prompt takes priority.');
|
|
254
|
-
});
|
|
255
|
-
it('should return default prompt when neither source present', () => {
|
|
256
|
-
const content = 'Content with no gate prompt section.';
|
|
257
|
-
const meta = { gate: true };
|
|
258
|
-
const prompt = extractGatePrompt(content, meta);
|
|
259
|
-
assert.strictEqual(prompt, 'Review the output above. Continue to next step or revise?');
|
|
260
|
-
});
|
|
261
|
-
it('should handle multi-line gate prompt section', () => {
|
|
262
|
-
const content = `## Gate Prompt
|
|
263
|
-
This is a multi-line prompt.
|
|
264
|
-
It spans several lines.
|
|
265
|
-
All should be included.
|
|
266
|
-
|
|
267
|
-
## Next Section
|
|
268
|
-
`;
|
|
269
|
-
const prompt = extractGatePrompt(content);
|
|
270
|
-
assert.ok(prompt.includes('This is a multi-line prompt.'));
|
|
271
|
-
assert.ok(prompt.includes('It spans several lines.'));
|
|
272
|
-
assert.ok(prompt.includes('All should be included.'));
|
|
273
|
-
// Should not include the next section
|
|
274
|
-
assert.ok(!prompt.includes('Next Section'));
|
|
275
|
-
});
|
|
276
|
-
it('should trim whitespace from extracted prompt', () => {
|
|
277
|
-
const content = `## Gate Prompt
|
|
278
|
-
|
|
279
|
-
Prompt with extra whitespace.
|
|
280
|
-
|
|
281
|
-
## Next Section
|
|
282
|
-
`;
|
|
283
|
-
const prompt = extractGatePrompt(content);
|
|
284
|
-
assert.strictEqual(prompt, 'Prompt with extra whitespace.');
|
|
285
|
-
});
|
|
286
|
-
it('should handle empty Gate Prompt section', () => {
|
|
287
|
-
const content = `## Gate Prompt
|
|
288
|
-
|
|
289
|
-
## Next Section
|
|
290
|
-
`;
|
|
291
|
-
const prompt = extractGatePrompt(content);
|
|
292
|
-
// Should return default since section is empty
|
|
293
|
-
assert.strictEqual(prompt, 'Review the output above. Continue to next step or revise?');
|
|
294
|
-
});
|
|
295
|
-
});
|
|
296
|
-
// =============================================================================
|
|
297
|
-
// AC3: User choice recorded in session
|
|
298
|
-
// =============================================================================
|
|
299
|
-
describe('AC3: User choice recorded in session', () => {
|
|
300
|
-
it('should record continue decision to session content', () => {
|
|
301
|
-
const sessionContent = `# Story Test
|
|
302
|
-
|
|
303
|
-
## Story Overview
|
|
304
|
-
- **Epic:** Test
|
|
305
|
-
|
|
306
|
-
## Workflow State
|
|
307
|
-
- **Current Step:** 3
|
|
308
|
-
|
|
309
|
-
## Acceptance Criteria
|
|
310
|
-
- [ ] AC1
|
|
311
|
-
`;
|
|
312
|
-
const decision = {
|
|
313
|
-
step: 3,
|
|
314
|
-
choice: 'continue',
|
|
315
|
-
timestamp: '2026-01-21T10:30:00.000Z',
|
|
316
|
-
};
|
|
317
|
-
const result = recordGateDecision(sessionContent, decision);
|
|
318
|
-
assert.ok(result.includes('## Gate Decisions'));
|
|
319
|
-
assert.ok(result.includes('| 3 | continue |'));
|
|
320
|
-
assert.ok(result.includes('2026-01-21T10:30:00.000Z'));
|
|
321
|
-
});
|
|
322
|
-
it('should record revise decision with notes', () => {
|
|
323
|
-
const sessionContent = `# Story Test
|
|
324
|
-
|
|
325
|
-
## Workflow State
|
|
326
|
-
- **Current Step:** 5
|
|
327
|
-
`;
|
|
328
|
-
const decision = {
|
|
329
|
-
step: 5,
|
|
330
|
-
choice: 'revise',
|
|
331
|
-
timestamp: '2026-01-21T11:45:00.000Z',
|
|
332
|
-
notes: 'Architecture needs rework',
|
|
333
|
-
};
|
|
334
|
-
const result = recordGateDecision(sessionContent, decision);
|
|
335
|
-
assert.ok(result.includes('| 5 | revise |'));
|
|
336
|
-
assert.ok(result.includes('Architecture needs rework'));
|
|
337
|
-
});
|
|
338
|
-
it('should append to existing Gate Decisions section', () => {
|
|
339
|
-
const sessionContent = `# Story Test
|
|
340
|
-
|
|
341
|
-
## Gate Decisions
|
|
342
|
-
| Step | Choice | Time | Notes |
|
|
343
|
-
|------|--------|------|-------|
|
|
344
|
-
| 3 | continue | 2026-01-21T10:30:00.000Z | - |
|
|
345
|
-
|
|
346
|
-
## Workflow State
|
|
347
|
-
`;
|
|
348
|
-
const decision = {
|
|
349
|
-
step: 7,
|
|
350
|
-
choice: 'continue',
|
|
351
|
-
timestamp: '2026-01-21T14:00:00.000Z',
|
|
352
|
-
};
|
|
353
|
-
const result = recordGateDecision(sessionContent, decision);
|
|
354
|
-
// Should have both decisions
|
|
355
|
-
assert.ok(result.includes('| 3 | continue |'));
|
|
356
|
-
assert.ok(result.includes('| 7 | continue |'));
|
|
357
|
-
});
|
|
358
|
-
it('should create Gate Decisions section if missing', () => {
|
|
359
|
-
const sessionContent = `# Story Test
|
|
360
|
-
|
|
361
|
-
## Workflow State
|
|
362
|
-
- **Current Step:** 1
|
|
363
|
-
`;
|
|
364
|
-
const decision = {
|
|
365
|
-
step: 1,
|
|
366
|
-
choice: 'continue',
|
|
367
|
-
timestamp: '2026-01-21T09:00:00.000Z',
|
|
368
|
-
};
|
|
369
|
-
const result = recordGateDecision(sessionContent, decision);
|
|
370
|
-
assert.ok(result.includes('## Gate Decisions'));
|
|
371
|
-
assert.ok(result.includes('| Step | Choice | Time | Notes |'));
|
|
372
|
-
assert.ok(result.includes('| 1 | continue |'));
|
|
373
|
-
});
|
|
374
|
-
it('should parse existing gate decisions from session', () => {
|
|
375
|
-
const sessionContent = `# Story Test
|
|
376
|
-
|
|
377
|
-
## Gate Decisions
|
|
378
|
-
| Step | Choice | Time | Notes |
|
|
379
|
-
|------|--------|------|-------|
|
|
380
|
-
| 3 | continue | 2026-01-21T10:30:00.000Z | Reviewed and approved |
|
|
381
|
-
| 7 | revise | 2026-01-21T11:45:00.000Z | Needs changes |
|
|
382
|
-
|
|
383
|
-
## Next Section
|
|
384
|
-
`;
|
|
385
|
-
const decisions = parseGateDecisions(sessionContent);
|
|
386
|
-
assert.strictEqual(decisions.length, 2);
|
|
387
|
-
assert.strictEqual(decisions[0].step, 3);
|
|
388
|
-
assert.strictEqual(decisions[0].choice, 'continue');
|
|
389
|
-
assert.strictEqual(decisions[0].notes, 'Reviewed and approved');
|
|
390
|
-
assert.strictEqual(decisions[1].step, 7);
|
|
391
|
-
assert.strictEqual(decisions[1].choice, 'revise');
|
|
392
|
-
});
|
|
393
|
-
it('should return empty array when no Gate Decisions section', () => {
|
|
394
|
-
const sessionContent = `# Story Test
|
|
395
|
-
|
|
396
|
-
## Workflow State
|
|
397
|
-
- **Current Step:** 1
|
|
398
|
-
`;
|
|
399
|
-
const decisions = parseGateDecisions(sessionContent);
|
|
400
|
-
assert.deepStrictEqual(decisions, []);
|
|
401
|
-
});
|
|
402
|
-
it('should handle notes with pipe characters', () => {
|
|
403
|
-
const decision = {
|
|
404
|
-
step: 2,
|
|
405
|
-
choice: 'continue',
|
|
406
|
-
timestamp: '2026-01-21T10:00:00.000Z',
|
|
407
|
-
notes: 'Option A | Option B were considered',
|
|
408
|
-
};
|
|
409
|
-
const formatted = formatGateDecisions([decision]);
|
|
410
|
-
// Pipe in notes should be escaped or handled
|
|
411
|
-
assert.ok(formatted.includes('| 2 | continue |'));
|
|
412
|
-
// The implementation should handle this gracefully
|
|
413
|
-
});
|
|
414
|
-
});
|
|
415
|
-
// =============================================================================
|
|
416
|
-
// AC4: Continue proceeds to next step normally
|
|
417
|
-
// =============================================================================
|
|
418
|
-
describe('AC4: Continue proceeds to next step normally', () => {
|
|
419
|
-
it('should return isGate: false when step has no gate', () => {
|
|
420
|
-
const result = detectGate({
|
|
421
|
-
stepNumber: 2,
|
|
422
|
-
afterSteps: [1, 5],
|
|
423
|
-
stepMeta: { gate: false },
|
|
424
|
-
stepContent: 'No marker.',
|
|
425
|
-
});
|
|
426
|
-
assert.strictEqual(result.isGate, false);
|
|
427
|
-
// No gate means continue normally
|
|
428
|
-
});
|
|
429
|
-
it('should include stepNumber in GateInfo for workflow tracking', () => {
|
|
430
|
-
const result = detectGate({
|
|
431
|
-
stepNumber: 4,
|
|
432
|
-
afterSteps: [4],
|
|
433
|
-
stepMeta: {},
|
|
434
|
-
stepContent: '',
|
|
435
|
-
});
|
|
436
|
-
assert.strictEqual(result.stepNumber, 4);
|
|
437
|
-
});
|
|
438
|
-
it('should include prompt in GateInfo when gate detected', () => {
|
|
439
|
-
const result = detectGate({
|
|
440
|
-
stepNumber: 3,
|
|
441
|
-
afterSteps: [3],
|
|
442
|
-
stepMeta: { gate_prompt: 'Custom prompt here.' },
|
|
443
|
-
stepContent: '',
|
|
444
|
-
});
|
|
445
|
-
assert.strictEqual(result.isGate, true);
|
|
446
|
-
assert.strictEqual(result.prompt, 'Custom prompt here.');
|
|
447
|
-
});
|
|
448
|
-
it('should include default prompt when no custom prompt provided', () => {
|
|
449
|
-
const result = detectGate({
|
|
450
|
-
stepNumber: 3,
|
|
451
|
-
afterSteps: [3],
|
|
452
|
-
stepMeta: {},
|
|
453
|
-
stepContent: 'No gate prompt section.',
|
|
454
|
-
});
|
|
455
|
-
assert.strictEqual(result.isGate, true);
|
|
456
|
-
assert.strictEqual(result.prompt, 'Review the output above. Continue to next step or revise?');
|
|
457
|
-
});
|
|
458
|
-
});
|
|
459
|
-
// =============================================================================
|
|
460
|
-
// Edge Cases
|
|
461
|
-
// =============================================================================
|
|
462
|
-
describe('Edge Cases', () => {
|
|
463
|
-
it('should handle step number 0', () => {
|
|
464
|
-
const result = detectGate({
|
|
465
|
-
stepNumber: 0,
|
|
466
|
-
afterSteps: [0],
|
|
467
|
-
stepMeta: {},
|
|
468
|
-
stepContent: '',
|
|
469
|
-
});
|
|
470
|
-
assert.strictEqual(result.isGate, true);
|
|
471
|
-
assert.strictEqual(result.stepNumber, 0);
|
|
472
|
-
});
|
|
473
|
-
it('should handle large step numbers', () => {
|
|
474
|
-
const result = detectGate({
|
|
475
|
-
stepNumber: 999,
|
|
476
|
-
afterSteps: [999],
|
|
477
|
-
stepMeta: {},
|
|
478
|
-
stepContent: '',
|
|
479
|
-
});
|
|
480
|
-
assert.strictEqual(result.isGate, true);
|
|
481
|
-
assert.strictEqual(result.stepNumber, 999);
|
|
482
|
-
});
|
|
483
|
-
it('should handle empty step content', () => {
|
|
484
|
-
const result = detectGate({
|
|
485
|
-
stepNumber: 1,
|
|
486
|
-
afterSteps: [],
|
|
487
|
-
stepMeta: {},
|
|
488
|
-
stepContent: '',
|
|
489
|
-
});
|
|
490
|
-
assert.strictEqual(result.isGate, false);
|
|
491
|
-
});
|
|
492
|
-
it('should handle null/undefined in meta gracefully', () => {
|
|
493
|
-
const result = detectGate({
|
|
494
|
-
stepNumber: 1,
|
|
495
|
-
afterSteps: [],
|
|
496
|
-
// @ts-expect-error - testing runtime null handling
|
|
497
|
-
stepMeta: null,
|
|
498
|
-
stepContent: 'Content.',
|
|
499
|
-
});
|
|
500
|
-
assert.strictEqual(result.isGate, false);
|
|
501
|
-
});
|
|
502
|
-
it('should handle very long gate prompt', () => {
|
|
503
|
-
const longPrompt = 'A'.repeat(10000);
|
|
504
|
-
const content = `## Gate Prompt
|
|
505
|
-
${longPrompt}
|
|
506
|
-
|
|
507
|
-
## Next
|
|
508
|
-
`;
|
|
509
|
-
const prompt = extractGatePrompt(content);
|
|
510
|
-
assert.strictEqual(prompt.length, 10000);
|
|
511
|
-
});
|
|
512
|
-
it('should handle unicode in gate decisions', () => {
|
|
513
|
-
const decision = {
|
|
514
|
-
step: 1,
|
|
515
|
-
choice: 'continue',
|
|
516
|
-
timestamp: '2026-01-21T10:00:00.000Z',
|
|
517
|
-
notes: '確認完了 ✓',
|
|
518
|
-
};
|
|
519
|
-
const formatted = formatGateDecisions([decision]);
|
|
520
|
-
assert.ok(formatted.includes('確認完了'));
|
|
521
|
-
assert.ok(formatted.includes('✓'));
|
|
522
|
-
});
|
|
523
|
-
it('should handle session content with Windows line endings', () => {
|
|
524
|
-
const sessionContent = `# Story Test\r\n\r\n## Gate Decisions\r\n| Step | Choice | Time | Notes |\r\n|------|--------|------|-------|\r\n| 1 | continue | 2026-01-21T10:00:00.000Z | - |\r\n`;
|
|
525
|
-
const decisions = parseGateDecisions(sessionContent);
|
|
526
|
-
assert.strictEqual(decisions.length, 1);
|
|
527
|
-
assert.strictEqual(decisions[0].step, 1);
|
|
528
|
-
});
|
|
529
|
-
it('should handle multiple Gate Prompt sections (use first)', () => {
|
|
530
|
-
const content = `## Gate Prompt
|
|
531
|
-
First prompt.
|
|
532
|
-
|
|
533
|
-
## Some Section
|
|
534
|
-
|
|
535
|
-
## Gate Prompt
|
|
536
|
-
Second prompt should be ignored.
|
|
537
|
-
`;
|
|
538
|
-
const prompt = extractGatePrompt(content);
|
|
539
|
-
assert.strictEqual(prompt, 'First prompt.');
|
|
540
|
-
});
|
|
541
|
-
});
|
|
542
|
-
});
|
|
543
|
-
//# sourceMappingURL=gate-handler.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gate-handler.test.js","sourceRoot":"","sources":["../../src/workflow/gate-handler.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,2EAA2E;AAC3E,OAAO,EAGL,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,gFAAgF;AAChF,6CAA6C;AAC7C,gFAAgF;AAEhF,QAAQ,CAAC,+CAA+C,EAAE,GAAG,EAAE;IAC7D,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAE1D,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;YAC/C,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;gBACrE,MAAM,MAAM,GAAG,UAAU,CAAC;oBACxB,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACrB,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;oBACzB,WAAW,EAAE,iBAAiB;iBAC/B,CAAC,CAAC;gBAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACxC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBAC9C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;gBACvE,MAAM,MAAM,GAAG,UAAU,CAAC;oBACxB,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACrB,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;oBACzB,WAAW,EAAE,iBAAiB;iBAC/B,CAAC,CAAC;gBAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBACzC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;gBAC/C,MAAM,MAAM,GAAG,UAAU,CAAC;oBACxB,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,EAAE;oBACd,QAAQ,EAAE,EAAE;oBACZ,WAAW,EAAE,UAAU;iBACxB,CAAC,CAAC;gBAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;gBAC7C,MAAM,MAAM,GAAG,UAAU,CAAC;oBACxB,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,SAAS;oBACrB,QAAQ,EAAE,EAAE;oBACZ,WAAW,EAAE,UAAU;iBACxB,CAAC,CAAC;gBAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;YACpC,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;gBACtD,MAAM,MAAM,GAAG,UAAU,CAAC;oBACxB,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,EAAE;oBACd,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;oBACxB,WAAW,EAAE,YAAY;iBAC1B,CAAC,CAAC;gBAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACxC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;gBAC3D,MAAM,MAAM,GAAG,UAAU,CAAC;oBACxB,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,EAAE;oBACd,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;oBACzB,WAAW,EAAE,YAAY;iBAC1B,CAAC,CAAC;gBAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;gBACvD,MAAM,MAAM,GAAG,UAAU,CAAC;oBACxB,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,EAAE;oBACd,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;oBAC/B,WAAW,EAAE,YAAY;iBAC1B,CAAC,CAAC;gBAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;gBAC3C,MAAM,MAAM,GAAG,UAAU,CAAC;oBACxB,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,EAAE;oBACd,QAAQ,EAAE,SAAS;oBACnB,WAAW,EAAE,YAAY;iBAC1B,CAAC,CAAC;gBAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;YAC5C,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;gBACjE,MAAM,MAAM,GAAG,UAAU,CAAC;oBACxB,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,EAAE;oBACd,QAAQ,EAAE,EAAE;oBACZ,WAAW,EAAE;;;;;;CAMtB;iBACQ,CAAC,CAAC;gBAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACxC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;gBAC5D,MAAM,MAAM,GAAG,UAAU,CAAC;oBACxB,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,EAAE;oBACd,QAAQ,EAAE,EAAE;oBACZ,WAAW,EAAE;;CAEtB;iBACQ,CAAC,CAAC;gBAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACxC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;gBAC1D,MAAM,MAAM,GAAG,UAAU,CAAC;oBACxB,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,EAAE;oBACd,QAAQ,EAAE,EAAE;oBACZ,WAAW,EAAE;cACT;iBACL,CAAC,CAAC;gBAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;gBACpE,MAAM,MAAM,GAAG,UAAU,CAAC;oBACxB,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,EAAE;oBACd,QAAQ,EAAE,EAAE;oBACZ,WAAW,EAAE;;;;;CAKtB;iBACQ,CAAC,CAAC;gBAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;gBACnE,MAAM,MAAM,GAAG,UAAU,CAAC;oBACxB,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,EAAE;oBACd,QAAQ,EAAE,EAAE;oBACZ,WAAW,EAAE;;;;CAItB;iBACQ,CAAC,CAAC;gBAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;YAC3C,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;gBACtE,MAAM,MAAM,GAAG,UAAU,CAAC;oBACxB,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,CAAC,CAAC,CAAC;oBACf,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;oBACxB,WAAW,EAAE,YAAY;iBAC1B,CAAC,CAAC;gBAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACxC,gEAAgE;gBAChE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;gBACpE,MAAM,MAAM,GAAG,UAAU,CAAC;oBACxB,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,EAAE;oBACd,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;oBACxB,WAAW,EAAE,eAAe;iBAC7B,CAAC,CAAC;gBAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACxC,uCAAuC;gBACvC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;gBACjE,MAAM,MAAM,GAAG,UAAU,CAAC;oBACxB,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,CAAC,CAAC,CAAC;oBACf,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;oBACxB,WAAW,EAAE,eAAe;iBAC7B,CAAC,CAAC;gBAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACxC,gCAAgC;gBAChC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;gBAC9D,MAAM,MAAM,GAAG,UAAU,CAAC;oBACxB,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;oBAClB,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;oBACzB,WAAW,EAAE,gBAAgB;iBAC9B,CAAC,CAAC;gBAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBACzC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,gFAAgF;IAChF,qCAAqC;IACrC,gFAAgF;IAEhF,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAElD,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,MAAM,OAAO,GAAG;;;;;;;;;;CAUrB,CAAC;YAEI,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAE1C,MAAM,CAAC,WAAW,CAChB,MAAM,EACN,iFAAiF,CAClF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;YACrE,MAAM,OAAO,GAAG,6CAA6C,CAAC;YAC9D,MAAM,IAAI,GAAG;gBACX,MAAM,EAAE,CAAC;gBACT,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,iDAAiD;aAC/D,CAAC;YAEF,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAEhD,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,iDAAiD,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,MAAM,OAAO,GAAG;;CAErB,CAAC;YACI,MAAM,IAAI,GAAG;gBACX,WAAW,EAAE,gCAAgC;aAC9C,CAAC;YAEF,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAEhD,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,MAAM,OAAO,GAAG,sCAAsC,CAAC;YACvD,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAE5B,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAEhD,MAAM,CAAC,WAAW,CAChB,MAAM,EACN,2DAA2D,CAC5D,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,OAAO,GAAG;;;;;;CAMrB,CAAC;YAEI,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAE1C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC,CAAC;YAC3D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACtD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACtD,sCAAsC;YACtC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,OAAO,GAAG;;;;;CAKrB,CAAC;YAEI,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAE1C,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,OAAO,GAAG;;;CAGrB,CAAC;YAEI,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAE1C,+CAA+C;YAC/C,MAAM,CAAC,WAAW,CAChB,MAAM,EACN,2DAA2D,CAC5D,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,gFAAgF;IAChF,uCAAuC;IACvC,gFAAgF;IAEhF,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAEpD,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,cAAc,GAAG;;;;;;;;;;CAU5B,CAAC;YAEI,MAAM,QAAQ,GAAiB;gBAC7B,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,UAAU;gBAClB,SAAS,EAAE,0BAA0B;aACtC,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;YAE5D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAChD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,cAAc,GAAG;;;;CAI5B,CAAC;YAEI,MAAM,QAAQ,GAAiB;gBAC7B,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,QAAQ;gBAChB,SAAS,EAAE,0BAA0B;gBACrC,KAAK,EAAE,2BAA2B;aACnC,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;YAE5D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,cAAc,GAAG;;;;;;;;CAQ5B,CAAC;YAEI,MAAM,QAAQ,GAAiB;gBAC7B,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,UAAU;gBAClB,SAAS,EAAE,0BAA0B;aACtC,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;YAE5D,6BAA6B;YAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,cAAc,GAAG;;;;CAI5B,CAAC;YAEI,MAAM,QAAQ,GAAiB;gBAC7B,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,UAAU;gBAClB,SAAS,EAAE,0BAA0B;aACtC,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;YAE5D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAChD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAC/D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,cAAc,GAAG;;;;;;;;;CAS5B,CAAC;YAEI,MAAM,SAAS,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;YAErD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACpD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;YAChE,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,MAAM,cAAc,GAAG;;;;CAI5B,CAAC;YAEI,MAAM,SAAS,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;YAErD,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,QAAQ,GAAiB;gBAC7B,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,UAAU;gBAClB,SAAS,EAAE,0BAA0B;gBACrC,KAAK,EAAE,qCAAqC;aAC7C,CAAC;YAEF,MAAM,SAAS,GAAG,mBAAmB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAElD,6CAA6C;YAC7C,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAClD,mDAAmD;QACrD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,gFAAgF;IAChF,+CAA+C;IAC/C,gFAAgF;IAEhF,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;QAE5D,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,MAAM,GAAG,UAAU,CAAC;gBACxB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClB,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;gBACzB,WAAW,EAAE,YAAY;aAC1B,CAAC,CAAC;YAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACzC,kCAAkC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;YACrE,MAAM,MAAM,GAAG,UAAU,CAAC;gBACxB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,CAAC,CAAC,CAAC;gBACf,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,EAAE;aAChB,CAAC,CAAC;YAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,MAAM,GAAG,UAAU,CAAC;gBACxB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,CAAC,CAAC,CAAC;gBACf,QAAQ,EAAE,EAAE,WAAW,EAAE,qBAAqB,EAAE;gBAChD,WAAW,EAAE,EAAE;aAChB,CAAC,CAAC;YAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACxC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACtE,MAAM,MAAM,GAAG,UAAU,CAAC;gBACxB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,CAAC,CAAC,CAAC;gBACf,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,yBAAyB;aACvC,CAAC,CAAC;YAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACxC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,MAAM,EACb,2DAA2D,CAC5D,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,gFAAgF;IAChF,aAAa;IACb,gFAAgF;IAEhF,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAE1B,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,MAAM,GAAG,UAAU,CAAC;gBACxB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,CAAC,CAAC,CAAC;gBACf,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,EAAE;aAChB,CAAC,CAAC;YAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACxC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,MAAM,GAAG,UAAU,CAAC;gBACxB,UAAU,EAAE,GAAG;gBACf,UAAU,EAAE,CAAC,GAAG,CAAC;gBACjB,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,EAAE;aAChB,CAAC,CAAC;YAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACxC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,MAAM,GAAG,UAAU,CAAC;gBACxB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,EAAE;aAChB,CAAC,CAAC;YAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,MAAM,GAAG,UAAU,CAAC;gBACxB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,EAAE;gBACd,mDAAmD;gBACnD,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,UAAU;aACxB,CAAC,CAAC;YAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG;EACpB,UAAU;;;CAGX,CAAC;YAEI,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAE1C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,QAAQ,GAAiB;gBAC7B,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,UAAU;gBAClB,SAAS,EAAE,0BAA0B;gBACrC,KAAK,EAAE,QAAQ;aAChB,CAAC;YAEF,MAAM,SAAS,GAAG,mBAAmB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAElD,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,cAAc,GAAG,sKAAsK,CAAC;YAE9L,MAAM,SAAS,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;YAErD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,OAAO,GAAG;;;;;;;CAOrB,CAAC;YAEI,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAE1C,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|