@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
package/dist/cli/utils/themes.js
DELETED
|
@@ -1,373 +0,0 @@
|
|
|
1
|
-
import { readFileSync, readdirSync, existsSync, writeFileSync, mkdirSync } from 'fs';
|
|
2
|
-
import { join, dirname, basename } from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
import { homedir } from 'os';
|
|
5
|
-
import YAML from 'yaml';
|
|
6
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
7
|
-
const __dirname = dirname(__filename);
|
|
8
|
-
/**
|
|
9
|
-
* Get the path to the themes directory
|
|
10
|
-
*/
|
|
11
|
-
export function getThemesDir() {
|
|
12
|
-
// In installed package: dist/cli/utils/themes.ts -> need to go to pennyfarthing-dist
|
|
13
|
-
// Try relative to package root first
|
|
14
|
-
const packageRoot = join(__dirname, '../../..');
|
|
15
|
-
const distThemes = join(packageRoot, 'pennyfarthing-dist/personas/themes');
|
|
16
|
-
if (existsSync(distThemes)) {
|
|
17
|
-
return distThemes;
|
|
18
|
-
}
|
|
19
|
-
// Fallback: try from project's .claude/pennyfarthing symlink
|
|
20
|
-
const projectRoot = process.cwd();
|
|
21
|
-
const claudeThemes = join(projectRoot, '.claude/pennyfarthing/personas/themes');
|
|
22
|
-
if (existsSync(claudeThemes)) {
|
|
23
|
-
return claudeThemes;
|
|
24
|
-
}
|
|
25
|
-
throw new Error('Could not find themes directory');
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Get the project-level custom themes directory
|
|
29
|
-
*/
|
|
30
|
-
export function getProjectCustomThemesDir(projectRoot) {
|
|
31
|
-
return join(projectRoot, '.claude/pennyfarthing/themes');
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Get the user-level custom themes directory
|
|
35
|
-
*/
|
|
36
|
-
export function getUserCustomThemesDir() {
|
|
37
|
-
return join(homedir(), '.claude/pennyfarthing/themes');
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Get the path to the .pennyfarthing local config (preferred for dogfooding)
|
|
41
|
-
*/
|
|
42
|
-
export function getPennyfarthingConfigPath(projectRoot) {
|
|
43
|
-
return join(projectRoot, '.pennyfarthing/config.local.yaml');
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Get the current theme from config files
|
|
47
|
-
* Priority: .pennyfarthing/config.local.yaml > .claude/persona-config.yaml
|
|
48
|
-
*/
|
|
49
|
-
export function getCurrentTheme(projectRoot) {
|
|
50
|
-
const root = projectRoot || process.cwd();
|
|
51
|
-
// Priority 1: .pennyfarthing/config.local.yaml (dogfooding/agent-writable)
|
|
52
|
-
const pennyfarthingConfigPath = getPennyfarthingConfigPath(root);
|
|
53
|
-
if (existsSync(pennyfarthingConfigPath)) {
|
|
54
|
-
try {
|
|
55
|
-
const content = readFileSync(pennyfarthingConfigPath, 'utf8');
|
|
56
|
-
const config = YAML.parse(content);
|
|
57
|
-
if (config?.theme) {
|
|
58
|
-
return config.theme;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
// Fall through to next option
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
// Priority 2: .claude/persona-config.yaml (project default)
|
|
66
|
-
const sharedConfigPath = join(root, '.claude/persona-config.yaml');
|
|
67
|
-
if (existsSync(sharedConfigPath)) {
|
|
68
|
-
try {
|
|
69
|
-
const content = readFileSync(sharedConfigPath, 'utf8');
|
|
70
|
-
const config = YAML.parse(content);
|
|
71
|
-
return config?.theme || null;
|
|
72
|
-
}
|
|
73
|
-
catch {
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Parse a theme YAML file and extract theme info
|
|
81
|
-
*/
|
|
82
|
-
export function parseThemeFile(filePath, isCustom = false) {
|
|
83
|
-
try {
|
|
84
|
-
const content = readFileSync(filePath, 'utf8');
|
|
85
|
-
const data = YAML.parse(content);
|
|
86
|
-
if (!data?.theme?.name) {
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
const id = basename(filePath, '.yaml');
|
|
90
|
-
return {
|
|
91
|
-
id,
|
|
92
|
-
name: data.theme.name,
|
|
93
|
-
description: data.theme.description || '',
|
|
94
|
-
isCustom,
|
|
95
|
-
agents: data.agents || {}
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
catch {
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Load themes from a directory
|
|
104
|
-
*/
|
|
105
|
-
function loadThemesFromDir(dir, isCustom) {
|
|
106
|
-
const themes = [];
|
|
107
|
-
if (!existsSync(dir)) {
|
|
108
|
-
return themes;
|
|
109
|
-
}
|
|
110
|
-
const files = readdirSync(dir).filter(f => f.endsWith('.yaml'));
|
|
111
|
-
for (const file of files) {
|
|
112
|
-
const theme = parseThemeFile(join(dir, file), isCustom);
|
|
113
|
-
if (theme) {
|
|
114
|
-
themes.push(theme);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
return themes;
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Get all available themes (built-in + custom)
|
|
121
|
-
*/
|
|
122
|
-
export function getThemes(projectRoot) {
|
|
123
|
-
const themes = [];
|
|
124
|
-
const seenIds = new Set();
|
|
125
|
-
// 1. Load built-in themes
|
|
126
|
-
try {
|
|
127
|
-
const builtInDir = getThemesDir();
|
|
128
|
-
for (const theme of loadThemesFromDir(builtInDir, false)) {
|
|
129
|
-
if (!seenIds.has(theme.id)) {
|
|
130
|
-
themes.push(theme);
|
|
131
|
-
seenIds.add(theme.id);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
catch {
|
|
136
|
-
// Built-in themes not found - continue with custom themes
|
|
137
|
-
}
|
|
138
|
-
// 2. Load project-level custom themes
|
|
139
|
-
const root = projectRoot || process.cwd();
|
|
140
|
-
const projectDir = getProjectCustomThemesDir(root);
|
|
141
|
-
for (const theme of loadThemesFromDir(projectDir, true)) {
|
|
142
|
-
if (!seenIds.has(theme.id)) {
|
|
143
|
-
themes.push(theme);
|
|
144
|
-
seenIds.add(theme.id);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
// 3. Load user-level custom themes
|
|
148
|
-
const userDir = getUserCustomThemesDir();
|
|
149
|
-
for (const theme of loadThemesFromDir(userDir, true)) {
|
|
150
|
-
if (!seenIds.has(theme.id)) {
|
|
151
|
-
themes.push(theme);
|
|
152
|
-
seenIds.add(theme.id);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
// Sort alphabetically by name
|
|
156
|
-
return themes.sort((a, b) => a.name.localeCompare(b.name));
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Get sample agent characters for display
|
|
160
|
-
*/
|
|
161
|
-
export function getAgentSamples(theme) {
|
|
162
|
-
const samples = [];
|
|
163
|
-
if (theme.agents.sm?.character) {
|
|
164
|
-
samples.push(`SM: ${theme.agents.sm.character}`);
|
|
165
|
-
}
|
|
166
|
-
if (theme.agents.tea?.character) {
|
|
167
|
-
samples.push(`TEA: ${theme.agents.tea.character}`);
|
|
168
|
-
}
|
|
169
|
-
if (theme.agents.dev?.character) {
|
|
170
|
-
samples.push(`Dev: ${theme.agents.dev.character}`);
|
|
171
|
-
}
|
|
172
|
-
return samples.join(' | ');
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Set the active theme
|
|
176
|
-
* By default writes to .pennyfarthing/config.local.yaml (agent-writable, dogfooding-friendly)
|
|
177
|
-
* Use { global: true } to write to .claude/persona-config.yaml (project default)
|
|
178
|
-
* Returns the ThemeInfo if successful, throws if theme not found
|
|
179
|
-
*/
|
|
180
|
-
export function setTheme(themeName, projectRoot, options = {}) {
|
|
181
|
-
const themes = getThemes(projectRoot);
|
|
182
|
-
const theme = themes.find(t => t.id === themeName);
|
|
183
|
-
if (!theme) {
|
|
184
|
-
const available = themes.map(t => t.id).join(', ');
|
|
185
|
-
throw new Error(`Theme '${themeName}' not found. Available themes: ${available}`);
|
|
186
|
-
}
|
|
187
|
-
let configPath;
|
|
188
|
-
let header;
|
|
189
|
-
if (options.global) {
|
|
190
|
-
// Project default - shared with team
|
|
191
|
-
configPath = join(projectRoot, '.claude/persona-config.yaml');
|
|
192
|
-
header = '# Pennyfarthing Persona Configuration (Project Default)\n\n';
|
|
193
|
-
}
|
|
194
|
-
else {
|
|
195
|
-
// Default: .pennyfarthing/ directory (agent-writable, dogfooding-friendly)
|
|
196
|
-
configPath = getPennyfarthingConfigPath(projectRoot);
|
|
197
|
-
header = '# Pennyfarthing Local Configuration\n# This file is gitignored - your personal preferences\n# Agents can write to this file during dogfooding\n\n';
|
|
198
|
-
}
|
|
199
|
-
// Ensure parent directory exists
|
|
200
|
-
const configDir = dirname(configPath);
|
|
201
|
-
if (!existsSync(configDir)) {
|
|
202
|
-
mkdirSync(configDir, { recursive: true });
|
|
203
|
-
}
|
|
204
|
-
// Read existing config or create new one
|
|
205
|
-
let config = {};
|
|
206
|
-
if (existsSync(configPath)) {
|
|
207
|
-
try {
|
|
208
|
-
const content = readFileSync(configPath, 'utf8');
|
|
209
|
-
config = YAML.parse(content) || {};
|
|
210
|
-
}
|
|
211
|
-
catch {
|
|
212
|
-
// If parse fails, start fresh
|
|
213
|
-
config = {};
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
// Update theme
|
|
217
|
-
config.theme = themeName;
|
|
218
|
-
// Write back with comment header
|
|
219
|
-
const yamlContent = YAML.stringify(config);
|
|
220
|
-
writeFileSync(configPath, header + yamlContent, 'utf8');
|
|
221
|
-
return theme;
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Validate a theme name
|
|
225
|
-
*/
|
|
226
|
-
export function validateThemeName(name) {
|
|
227
|
-
if (!name) {
|
|
228
|
-
return { valid: false, error: 'Theme name is required' };
|
|
229
|
-
}
|
|
230
|
-
if (name !== name.toLowerCase()) {
|
|
231
|
-
return { valid: false, error: 'Theme name must be lowercase' };
|
|
232
|
-
}
|
|
233
|
-
if (/\s/.test(name)) {
|
|
234
|
-
return { valid: false, error: 'Theme name cannot contain spaces (use hyphens instead)' };
|
|
235
|
-
}
|
|
236
|
-
if (!/^[a-z][a-z0-9-]*$/.test(name)) {
|
|
237
|
-
return { valid: false, error: 'Theme name must start with a letter and contain only lowercase letters, numbers, and hyphens' };
|
|
238
|
-
}
|
|
239
|
-
return { valid: true };
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Get the path to a theme file (built-in or custom)
|
|
243
|
-
*/
|
|
244
|
-
export function getThemeFilePath(themeId) {
|
|
245
|
-
// Check built-in themes first
|
|
246
|
-
try {
|
|
247
|
-
const builtInPath = join(getThemesDir(), `${themeId}.yaml`);
|
|
248
|
-
if (existsSync(builtInPath)) {
|
|
249
|
-
return builtInPath;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
catch {
|
|
253
|
-
// Built-in dir not found
|
|
254
|
-
}
|
|
255
|
-
// Check project-level
|
|
256
|
-
const projectPath = join(getProjectCustomThemesDir(process.cwd()), `${themeId}.yaml`);
|
|
257
|
-
if (existsSync(projectPath)) {
|
|
258
|
-
return projectPath;
|
|
259
|
-
}
|
|
260
|
-
// Check user-level
|
|
261
|
-
const userPath = join(getUserCustomThemesDir(), `${themeId}.yaml`);
|
|
262
|
-
if (existsSync(userPath)) {
|
|
263
|
-
return userPath;
|
|
264
|
-
}
|
|
265
|
-
return null;
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Create a new custom theme
|
|
269
|
-
* Returns the path to the created theme file
|
|
270
|
-
*/
|
|
271
|
-
export function createTheme(themeName, projectRoot, options = {}) {
|
|
272
|
-
const { baseTheme = 'minimalist', userLevel = false } = options;
|
|
273
|
-
// Validate theme name
|
|
274
|
-
const validation = validateThemeName(themeName);
|
|
275
|
-
if (!validation.valid) {
|
|
276
|
-
throw new Error(validation.error);
|
|
277
|
-
}
|
|
278
|
-
// Check if theme already exists
|
|
279
|
-
const existingThemes = getThemes(projectRoot);
|
|
280
|
-
if (existingThemes.some(t => t.id === themeName)) {
|
|
281
|
-
throw new Error(`Theme '${themeName}' already exists`);
|
|
282
|
-
}
|
|
283
|
-
// Find base theme file
|
|
284
|
-
const baseThemePath = getThemeFilePath(baseTheme);
|
|
285
|
-
if (!baseThemePath) {
|
|
286
|
-
const available = existingThemes.map(t => t.id).join(', ');
|
|
287
|
-
throw new Error(`Base theme '${baseTheme}' not found. Available themes: ${available}`);
|
|
288
|
-
}
|
|
289
|
-
// Determine target directory
|
|
290
|
-
const targetDir = userLevel
|
|
291
|
-
? getUserCustomThemesDir()
|
|
292
|
-
: getProjectCustomThemesDir(projectRoot);
|
|
293
|
-
// Create directory if needed
|
|
294
|
-
if (!existsSync(targetDir)) {
|
|
295
|
-
mkdirSync(targetDir, { recursive: true });
|
|
296
|
-
}
|
|
297
|
-
// Read base theme content
|
|
298
|
-
const baseContent = readFileSync(baseThemePath, 'utf8');
|
|
299
|
-
const baseData = YAML.parse(baseContent);
|
|
300
|
-
// Update theme metadata
|
|
301
|
-
baseData.theme.name = themeName.charAt(0).toUpperCase() + themeName.slice(1).replace(/-/g, ' ');
|
|
302
|
-
baseData.theme.description = `Custom theme based on ${baseTheme}`;
|
|
303
|
-
// Write new theme file
|
|
304
|
-
const targetPath = join(targetDir, `${themeName}.yaml`);
|
|
305
|
-
const header = `# Custom Theme: ${themeName}\n# Based on: ${baseTheme}\n# Edit this file to customize your agent personas\n\n`;
|
|
306
|
-
const yamlContent = YAML.stringify(baseData);
|
|
307
|
-
writeFileSync(targetPath, header + yamlContent, 'utf8');
|
|
308
|
-
return targetPath;
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* All 10 required agent types for a complete theme
|
|
312
|
-
*/
|
|
313
|
-
const REQUIRED_AGENTS = [
|
|
314
|
-
'orchestrator',
|
|
315
|
-
'sm',
|
|
316
|
-
'tea',
|
|
317
|
-
'dev',
|
|
318
|
-
'reviewer',
|
|
319
|
-
'architect',
|
|
320
|
-
'pm',
|
|
321
|
-
'tech-writer',
|
|
322
|
-
'ux-designer',
|
|
323
|
-
'devops'
|
|
324
|
-
];
|
|
325
|
-
/**
|
|
326
|
-
* Validate a theme object has all required fields and agents
|
|
327
|
-
* Used to validate AI-generated themes before writing to file
|
|
328
|
-
*/
|
|
329
|
-
export function validateThemeSchema(themeData) {
|
|
330
|
-
const errors = [];
|
|
331
|
-
// Check if themeData is an object
|
|
332
|
-
if (!themeData || typeof themeData !== 'object') {
|
|
333
|
-
return { valid: false, errors: ['Theme data must be an object'] };
|
|
334
|
-
}
|
|
335
|
-
const data = themeData;
|
|
336
|
-
// Check theme section
|
|
337
|
-
if (!data.theme || typeof data.theme !== 'object') {
|
|
338
|
-
errors.push('Missing theme section');
|
|
339
|
-
}
|
|
340
|
-
else {
|
|
341
|
-
const theme = data.theme;
|
|
342
|
-
if (!theme.name) {
|
|
343
|
-
errors.push('Missing theme.name');
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
// Check agents section
|
|
347
|
-
if (!data.agents || typeof data.agents !== 'object') {
|
|
348
|
-
errors.push('Missing agents section');
|
|
349
|
-
return { valid: false, errors };
|
|
350
|
-
}
|
|
351
|
-
const agents = data.agents;
|
|
352
|
-
// Check all required agents are present with required fields
|
|
353
|
-
for (const agentType of REQUIRED_AGENTS) {
|
|
354
|
-
const agent = agents[agentType];
|
|
355
|
-
if (!agent || typeof agent !== 'object') {
|
|
356
|
-
errors.push(`Missing required agent: ${agentType}`);
|
|
357
|
-
continue;
|
|
358
|
-
}
|
|
359
|
-
const agentData = agent;
|
|
360
|
-
// Check required fields for each agent
|
|
361
|
-
if (!agentData.character) {
|
|
362
|
-
errors.push(`Agent ${agentType} missing required field: character`);
|
|
363
|
-
}
|
|
364
|
-
if (!agentData.style) {
|
|
365
|
-
errors.push(`Agent ${agentType} missing required field: style`);
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
if (errors.length > 0) {
|
|
369
|
-
return { valid: false, errors };
|
|
370
|
-
}
|
|
371
|
-
return { valid: true };
|
|
372
|
-
}
|
|
373
|
-
//# sourceMappingURL=themes.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"themes.js","sourceRoot":"","sources":["../../../src/cli/utils/themes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for theme configuration
|
|
3
|
-
*
|
|
4
|
-
* These tests verify:
|
|
5
|
-
* - getCurrentTheme() checks .pennyfarthing/config.local.yaml first, falls back to shared
|
|
6
|
-
* - setTheme() writes to .pennyfarthing/config.local.yaml by default
|
|
7
|
-
* - setTheme() with global option writes to shared config
|
|
8
|
-
*
|
|
9
|
-
* Run with: npm test
|
|
10
|
-
*/
|
|
11
|
-
export {};
|
|
12
|
-
//# sourceMappingURL=themes.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"themes.test.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/themes.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for theme configuration
|
|
3
|
-
*
|
|
4
|
-
* These tests verify:
|
|
5
|
-
* - getCurrentTheme() checks .pennyfarthing/config.local.yaml first, falls back to shared
|
|
6
|
-
* - setTheme() writes to .pennyfarthing/config.local.yaml by default
|
|
7
|
-
* - setTheme() with global option writes to shared config
|
|
8
|
-
*
|
|
9
|
-
* Run with: npm test
|
|
10
|
-
*/
|
|
11
|
-
import { describe, it, beforeEach, afterEach } from 'node:test';
|
|
12
|
-
import assert from 'node:assert';
|
|
13
|
-
import { existsSync, mkdirSync, writeFileSync, rmSync, readFileSync } from 'fs';
|
|
14
|
-
import { join } from 'path';
|
|
15
|
-
import { tmpdir } from 'os';
|
|
16
|
-
import { stringify as yamlStringify, parse as yamlParse } from 'yaml';
|
|
17
|
-
// Import functions to test
|
|
18
|
-
import { getCurrentTheme, setTheme } from './themes.js';
|
|
19
|
-
describe('Theme Configuration', () => {
|
|
20
|
-
let testDir;
|
|
21
|
-
let claudeDir;
|
|
22
|
-
let pennyfarthingDir;
|
|
23
|
-
let themesDir;
|
|
24
|
-
// Minimal valid theme for testing
|
|
25
|
-
const testTheme = {
|
|
26
|
-
theme: { name: 'Test Theme', description: 'Test theme for unit tests' },
|
|
27
|
-
agents: {
|
|
28
|
-
orchestrator: { character: 'Test Orchestrator', style: 'test' },
|
|
29
|
-
sm: { character: 'Test SM', style: 'test' },
|
|
30
|
-
tea: { character: 'Test TEA', style: 'test' },
|
|
31
|
-
dev: { character: 'Test Dev', style: 'test' },
|
|
32
|
-
reviewer: { character: 'Test Reviewer', style: 'test' },
|
|
33
|
-
architect: { character: 'Test Architect', style: 'test' },
|
|
34
|
-
pm: { character: 'Test PM', style: 'test' },
|
|
35
|
-
'tech-writer': { character: 'Test Writer', style: 'test' },
|
|
36
|
-
'ux-designer': { character: 'Test UX', style: 'test' },
|
|
37
|
-
devops: { character: 'Test DevOps', style: 'test' }
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
beforeEach(() => {
|
|
41
|
-
// Create a temporary project directory for each test
|
|
42
|
-
testDir = join(tmpdir(), `pennyfarthing-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
43
|
-
claudeDir = join(testDir, '.claude');
|
|
44
|
-
pennyfarthingDir = join(testDir, '.pennyfarthing');
|
|
45
|
-
themesDir = join(claudeDir, 'pennyfarthing/themes');
|
|
46
|
-
mkdirSync(themesDir, { recursive: true });
|
|
47
|
-
mkdirSync(pennyfarthingDir, { recursive: true });
|
|
48
|
-
// Create a test theme so setTheme can find it
|
|
49
|
-
writeFileSync(join(themesDir, 'test-theme.yaml'), yamlStringify(testTheme));
|
|
50
|
-
});
|
|
51
|
-
afterEach(() => {
|
|
52
|
-
// Clean up test directory
|
|
53
|
-
if (existsSync(testDir)) {
|
|
54
|
-
rmSync(testDir, { recursive: true, force: true });
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
describe('getCurrentTheme() precedence', () => {
|
|
58
|
-
it('should return local theme when both local and shared exist', () => {
|
|
59
|
-
// Setup: local config with "star-trek", shared config with "discworld"
|
|
60
|
-
const localConfig = { theme: 'star-trek' };
|
|
61
|
-
const sharedConfig = { theme: 'discworld' };
|
|
62
|
-
writeFileSync(join(pennyfarthingDir, 'config.local.yaml'), yamlStringify(localConfig));
|
|
63
|
-
writeFileSync(join(claudeDir, 'persona-config.yaml'), yamlStringify(sharedConfig));
|
|
64
|
-
// Act
|
|
65
|
-
const result = getCurrentTheme(testDir);
|
|
66
|
-
// Assert: should prefer .pennyfarthing/ over .claude/
|
|
67
|
-
assert.strictEqual(result, 'star-trek', 'Should return local theme when both exist');
|
|
68
|
-
});
|
|
69
|
-
it('should fall back to shared theme when local does not exist', () => {
|
|
70
|
-
// Setup: only shared config
|
|
71
|
-
const sharedConfig = { theme: 'discworld' };
|
|
72
|
-
writeFileSync(join(claudeDir, 'persona-config.yaml'), yamlStringify(sharedConfig));
|
|
73
|
-
// Act
|
|
74
|
-
const result = getCurrentTheme(testDir);
|
|
75
|
-
// Assert: should use shared config
|
|
76
|
-
assert.strictEqual(result, 'discworld', 'Should fall back to shared theme');
|
|
77
|
-
});
|
|
78
|
-
it('should return null when neither local nor shared exist', () => {
|
|
79
|
-
// Setup: no config files (just empty directories)
|
|
80
|
-
// Act
|
|
81
|
-
const result = getCurrentTheme(testDir);
|
|
82
|
-
// Assert
|
|
83
|
-
assert.strictEqual(result, null, 'Should return null when no config exists');
|
|
84
|
-
});
|
|
85
|
-
it('should prefer local even when local theme is different', () => {
|
|
86
|
-
// Setup: local explicitly set to minimalist, shared is elaborate theme
|
|
87
|
-
const localConfig = { theme: 'minimalist' };
|
|
88
|
-
const sharedConfig = { theme: 'shakespeare' };
|
|
89
|
-
writeFileSync(join(pennyfarthingDir, 'config.local.yaml'), yamlStringify(localConfig));
|
|
90
|
-
writeFileSync(join(claudeDir, 'persona-config.yaml'), yamlStringify(sharedConfig));
|
|
91
|
-
// Act
|
|
92
|
-
const result = getCurrentTheme(testDir);
|
|
93
|
-
// Assert
|
|
94
|
-
assert.strictEqual(result, 'minimalist', 'Should always prefer local config');
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
describe('setTheme() writes to local config', () => {
|
|
98
|
-
it('should write to .pennyfarthing/config.local.yaml by default', () => {
|
|
99
|
-
// Setup: create shared config with a different theme
|
|
100
|
-
const sharedConfig = { theme: 'other-theme' };
|
|
101
|
-
writeFileSync(join(claudeDir, 'persona-config.yaml'), yamlStringify(sharedConfig));
|
|
102
|
-
// Act: set theme using our test theme
|
|
103
|
-
setTheme('test-theme', testDir);
|
|
104
|
-
// Assert: local config should exist with the new theme
|
|
105
|
-
const localPath = join(pennyfarthingDir, 'config.local.yaml');
|
|
106
|
-
assert.ok(existsSync(localPath), 'setTheme should write to .pennyfarthing/config.local.yaml');
|
|
107
|
-
const localContent = yamlParse(readFileSync(localPath, 'utf-8'));
|
|
108
|
-
assert.strictEqual(localContent.theme, 'test-theme', 'Local config should have the theme');
|
|
109
|
-
});
|
|
110
|
-
it('should not modify shared config when setting theme locally', () => {
|
|
111
|
-
// Setup: shared config with original theme
|
|
112
|
-
const originalSharedConfig = { theme: 'original-theme' };
|
|
113
|
-
writeFileSync(join(claudeDir, 'persona-config.yaml'), yamlStringify(originalSharedConfig));
|
|
114
|
-
// Act: set theme locally
|
|
115
|
-
setTheme('test-theme', testDir);
|
|
116
|
-
// Assert: shared config should be unchanged
|
|
117
|
-
const sharedContent = yamlParse(readFileSync(join(claudeDir, 'persona-config.yaml'), 'utf-8'));
|
|
118
|
-
assert.strictEqual(sharedContent.theme, 'original-theme', 'Shared config should remain unchanged when setting local theme');
|
|
119
|
-
});
|
|
120
|
-
it('should write to shared config when global option is true', () => {
|
|
121
|
-
// Setup: shared config with original theme
|
|
122
|
-
const sharedConfig = { theme: 'original-theme' };
|
|
123
|
-
writeFileSync(join(claudeDir, 'persona-config.yaml'), yamlStringify(sharedConfig));
|
|
124
|
-
// Act: set theme with global option
|
|
125
|
-
setTheme('test-theme', testDir, { global: true });
|
|
126
|
-
// Assert: shared config should be updated
|
|
127
|
-
const sharedContent = yamlParse(readFileSync(join(claudeDir, 'persona-config.yaml'), 'utf-8'));
|
|
128
|
-
assert.strictEqual(sharedContent.theme, 'test-theme', 'Global option should update shared config');
|
|
129
|
-
});
|
|
130
|
-
});
|
|
131
|
-
describe('Theme precedence integration', () => {
|
|
132
|
-
it('should allow multiple users to have different themes', () => {
|
|
133
|
-
// This test simulates the scenario where:
|
|
134
|
-
// - Shared config has team default "discworld"
|
|
135
|
-
// - User A sets local to "star-trek"
|
|
136
|
-
// - getCurrentTheme should return "star-trek" for User A
|
|
137
|
-
// Setup: shared team default
|
|
138
|
-
writeFileSync(join(claudeDir, 'persona-config.yaml'), yamlStringify({ theme: 'discworld' }));
|
|
139
|
-
// User A sets their local preference
|
|
140
|
-
writeFileSync(join(pennyfarthingDir, 'config.local.yaml'), yamlStringify({ theme: 'star-trek' }));
|
|
141
|
-
// Assert: User A sees their local theme
|
|
142
|
-
const result = getCurrentTheme(testDir);
|
|
143
|
-
assert.strictEqual(result, 'star-trek', 'User should see their local theme preference');
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
//# sourceMappingURL=themes.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"themes.test.js","sourceRoot":"","sources":["../../../src/cli/utils/themes.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAEtE,2BAA2B;AAC3B,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAExD,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,IAAI,OAAe,CAAC;IACpB,IAAI,SAAiB,CAAC;IACtB,IAAI,gBAAwB,CAAC;IAC7B,IAAI,SAAiB,CAAC;IAEtB,kCAAkC;IAClC,MAAM,SAAS,GAAG;QAChB,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,2BAA2B,EAAE;QACvE,MAAM,EAAE;YACN,YAAY,EAAE,EAAE,SAAS,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,EAAE;YAC/D,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;YAC3C,GAAG,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE;YAC7C,GAAG,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE;YAC7C,QAAQ,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE;YACvD,SAAS,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE;YACzD,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;YAC3C,aAAa,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE;YAC1D,aAAa,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;YACtD,MAAM,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE;SACpD;KACF,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,qDAAqD;QACrD,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,sBAAsB,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpG,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACrC,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACnD,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;QACpD,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,SAAS,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEjD,8CAA8C;QAC9C,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,0BAA0B;QAC1B,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC5C,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,uEAAuE;YACvE,MAAM,WAAW,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;YAC3C,MAAM,YAAY,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;YAE5C,aAAa,CACX,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,EAC3C,aAAa,CAAC,WAAW,CAAC,CAC3B,CAAC;YACF,aAAa,CACX,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,EACtC,aAAa,CAAC,YAAY,CAAC,CAC5B,CAAC;YAEF,MAAM;YACN,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAExC,sDAAsD;YACtD,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,2CAA2C,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,4BAA4B;YAC5B,MAAM,YAAY,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;YAE5C,aAAa,CACX,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,EACtC,aAAa,CAAC,YAAY,CAAC,CAC5B,CAAC;YAEF,MAAM;YACN,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAExC,mCAAmC;YACnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,kCAAkC,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,kDAAkD;YAElD,MAAM;YACN,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAExC,SAAS;YACT,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,0CAA0C,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,uEAAuE;YACvE,MAAM,WAAW,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;YAC5C,MAAM,YAAY,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;YAE9C,aAAa,CACX,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,EAC3C,aAAa,CAAC,WAAW,CAAC,CAC3B,CAAC;YACF,aAAa,CACX,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,EACtC,aAAa,CAAC,YAAY,CAAC,CAC5B,CAAC;YAEF,MAAM;YACN,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAExC,SAAS;YACT,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,mCAAmC,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACjD,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;YACrE,qDAAqD;YACrD,MAAM,YAAY,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;YAC9C,aAAa,CACX,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,EACtC,aAAa,CAAC,YAAY,CAAC,CAC5B,CAAC;YAEF,sCAAsC;YACtC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAEhC,uDAAuD;YACvD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;YAE9D,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,2DAA2D,CAAC,CAAC;YAC9F,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YACjE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,oCAAoC,CAAC,CAAC;QAC7F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,2CAA2C;YAC3C,MAAM,oBAAoB,GAAG,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;YACzD,aAAa,CACX,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,EACtC,aAAa,CAAC,oBAAoB,CAAC,CACpC,CAAC;YAEF,yBAAyB;YACzB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAEhC,4CAA4C;YAC5C,MAAM,aAAa,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAC/F,MAAM,CAAC,WAAW,CAChB,aAAa,CAAC,KAAK,EACnB,gBAAgB,EAChB,gEAAgE,CACjE,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,2CAA2C;YAC3C,MAAM,YAAY,GAAG,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;YACjD,aAAa,CACX,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,EACtC,aAAa,CAAC,YAAY,CAAC,CAC5B,CAAC;YAEF,oCAAoC;YACpC,QAAQ,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAElD,0CAA0C;YAC1C,MAAM,aAAa,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAC/F,MAAM,CAAC,WAAW,CAChB,aAAa,CAAC,KAAK,EACnB,YAAY,EACZ,2CAA2C,CAC5C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC5C,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,0CAA0C;YAC1C,+CAA+C;YAC/C,qCAAqC;YACrC,yDAAyD;YAEzD,6BAA6B;YAC7B,aAAa,CACX,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,EACtC,aAAa,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CACtC,CAAC;YAEF,qCAAqC;YACrC,aAAa,CACX,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,EAC3C,aAAa,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CACtC,CAAC;YAEF,wCAAwC;YACxC,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,8CAA8C,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/version.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAqC1C;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAgBtC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/cli/utils/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,gEAAgE;IAChE,MAAM,YAAY,GAAG;QACnB,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAG,uBAAuB;QAC7D,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EAAO,WAAW;QAClD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAS,+BAA+B;KACvE,CAAC;IAEF,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,OAAO,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,MAAM,YAAY,GAAG;QACnB,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC,EAAG,oDAAoD;QACrG,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,EAAS,oCAAoC;QACrF,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC;KACtC,CAAC;IAEF,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC1D,OAAO,GAAG,CAAC,OAAO,CAAC;YACrB,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,WAAW,GAAG;QAClB,IAAI,CAAC,SAAS,EAAE,mCAAmC,CAAC,EAAG,qDAAqD;QAC5G,IAAI,CAAC,SAAS,EAAE,gCAAgC,CAAC;QACjD,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC;QAC9C,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,oBAAoB,CAAC;KAC1C,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;AAClF,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Story 11-2: pnpm Workspace Structure Tests
|
|
3
|
-
*
|
|
4
|
-
* These tests verify the monorepo workspace structure is correctly configured.
|
|
5
|
-
* Tests are designed to FAIL until the workspace conversion is complete.
|
|
6
|
-
*/
|
|
7
|
-
export {};
|
|
8
|
-
//# sourceMappingURL=workspace.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.test.d.ts","sourceRoot":"","sources":["../../src/cli/workspace.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|