@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,418 +0,0 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync, symlinkSync, copyFileSync, readdirSync } from 'fs';
|
|
2
|
-
import { join, relative } from 'path';
|
|
3
|
-
import fsExtra from 'fs-extra';
|
|
4
|
-
const { ensureDirSync, removeSync } = fsExtra;
|
|
5
|
-
import { logger } from '../utils/logger.js';
|
|
6
|
-
import { manifestExists, readManifest, writeManifest, createManifest } from '../utils/manifest.js';
|
|
7
|
-
import { pathExists, isDirectory, isSymlink, hashFile } from '../utils/files.js';
|
|
8
|
-
import { getPackageVersion, getAssetsPath } from '../utils/version.js';
|
|
9
|
-
import { computeRelativeSymlink, createCommandsDirectory, createSkillsDirectory, needsCommandsMigration, needsSkillsMigration } from '../utils/symlinks.js';
|
|
10
|
-
import { findNodeModulesPath } from '../utils/node-modules.js';
|
|
11
|
-
import { DIRECTORY_SYMLINKS, CORE_AGENTS } from '../utils/constants.js';
|
|
12
|
-
export async function updateCommand(options) {
|
|
13
|
-
const projectRoot = process.cwd();
|
|
14
|
-
const dryRun = options.dryRun;
|
|
15
|
-
// 1. Check for manifest
|
|
16
|
-
if (!manifestExists(projectRoot)) {
|
|
17
|
-
logger.error('Pennyfarthing not initialized. Run `pennyfarthing init` first.');
|
|
18
|
-
process.exit(1);
|
|
19
|
-
}
|
|
20
|
-
const manifest = readManifest(projectRoot);
|
|
21
|
-
if (!manifest) {
|
|
22
|
-
logger.error('Failed to read manifest');
|
|
23
|
-
process.exit(1);
|
|
24
|
-
}
|
|
25
|
-
// 2. Compare versions
|
|
26
|
-
const packageVersion = getPackageVersion();
|
|
27
|
-
const updateInfo = await checkForUpdates(projectRoot, manifest);
|
|
28
|
-
if (options.check) {
|
|
29
|
-
// Just check and exit
|
|
30
|
-
if (updateInfo.needsUpdate) {
|
|
31
|
-
logger.info(`Update available: ${updateInfo.currentVersion} → ${updateInfo.availableVersion}`);
|
|
32
|
-
process.exit(0);
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
logger.success(`Already up to date (v${updateInfo.currentVersion})`);
|
|
36
|
-
process.exit(0);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
// 3. Show update info
|
|
40
|
-
logger.header('Pennyfarthing Update');
|
|
41
|
-
// Check installation type and node_modules availability
|
|
42
|
-
const nodeModulesPath = findNodeModulesPath(projectRoot);
|
|
43
|
-
const currentInstallType = manifest.installationType || 'copy'; // Default to copy for old manifests
|
|
44
|
-
// Always check and update settings (idempotent - only makes changes if needed)
|
|
45
|
-
const assetsPath = getAssetsPath();
|
|
46
|
-
// Copy mode is no longer supported - require fresh install
|
|
47
|
-
if (currentInstallType === 'copy') {
|
|
48
|
-
logger.error('Copy mode installations are no longer supported.');
|
|
49
|
-
logger.error('');
|
|
50
|
-
logger.error('Please reinstall with npm:');
|
|
51
|
-
logger.error(' npm install pennyfarthing');
|
|
52
|
-
logger.error(' npx pennyfarthing init --force');
|
|
53
|
-
process.exit(1);
|
|
54
|
-
}
|
|
55
|
-
// Must have node_modules for symlink mode
|
|
56
|
-
if (!nodeModulesPath) {
|
|
57
|
-
logger.error('@pennyfarthing/core (or pennyfarthing) not found');
|
|
58
|
-
logger.error('');
|
|
59
|
-
logger.error('Please ensure pennyfarthing is installed:');
|
|
60
|
-
logger.error(' npm install pennyfarthing');
|
|
61
|
-
process.exit(1);
|
|
62
|
-
}
|
|
63
|
-
const settingsUpdated = await mergeSettingsHooks(projectRoot, assetsPath, { dryRun });
|
|
64
|
-
if (!updateInfo.needsUpdate && updateInfo.userModifiedFiles.length === 0 && !settingsUpdated) {
|
|
65
|
-
logger.success(`Already up to date (v${updateInfo.currentVersion})`);
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
if (updateInfo.needsUpdate) {
|
|
69
|
-
logger.info(`Updating ${updateInfo.currentVersion} → ${updateInfo.availableVersion}`);
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
logger.info(`Refreshing files (v${updateInfo.currentVersion})`);
|
|
73
|
-
}
|
|
74
|
-
if (dryRun) {
|
|
75
|
-
logger.info('Dry run mode - no changes will be made');
|
|
76
|
-
}
|
|
77
|
-
// Symlink mode: verify symlinks are correct
|
|
78
|
-
await updateSymlinkMode(projectRoot, nodeModulesPath, manifest, packageVersion, { dryRun });
|
|
79
|
-
// 7. Success
|
|
80
|
-
logger.newline();
|
|
81
|
-
logger.success(`Updated to v${packageVersion}`);
|
|
82
|
-
// 8. Run doctor
|
|
83
|
-
logger.newline();
|
|
84
|
-
logger.info('Running health check...');
|
|
85
|
-
const { doctorCommand } = await import('./doctor.js');
|
|
86
|
-
await doctorCommand({ quiet: true });
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Update in symlink mode - verify symlinks point to correct location
|
|
90
|
-
*/
|
|
91
|
-
async function updateSymlinkMode(projectRoot, nodeModulesPath, manifest, version, options) {
|
|
92
|
-
const dryRun = options.dryRun;
|
|
93
|
-
logger.newline();
|
|
94
|
-
logger.info('Verifying symlinks...');
|
|
95
|
-
// Verify standard symlinks (not commands or skills - handled separately)
|
|
96
|
-
for (const { name, link } of DIRECTORY_SYMLINKS) {
|
|
97
|
-
const linkPath = join(projectRoot, link);
|
|
98
|
-
const targetPath = join(nodeModulesPath, name);
|
|
99
|
-
const expectedRelative = computeRelativeSymlink(linkPath, targetPath);
|
|
100
|
-
if (!isSymlink(linkPath)) {
|
|
101
|
-
// Create missing symlink
|
|
102
|
-
if (!dryRun) {
|
|
103
|
-
try {
|
|
104
|
-
if (pathExists(linkPath)) {
|
|
105
|
-
removeSync(linkPath);
|
|
106
|
-
}
|
|
107
|
-
symlinkSync(expectedRelative, linkPath);
|
|
108
|
-
logger.created(`${link} -> ${expectedRelative}`);
|
|
109
|
-
}
|
|
110
|
-
catch (e) {
|
|
111
|
-
logger.warning(`Could not create symlink ${link}: ${e}`);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
// Verify symlink points to correct location
|
|
117
|
-
logger.info(` ✓ ${link}`);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
// Handle commands directory - migrate from symlink to directory if needed
|
|
121
|
-
const projectCommandsDir = join(projectRoot, '.claude/project/commands');
|
|
122
|
-
if (!pathExists(projectCommandsDir)) {
|
|
123
|
-
if (!dryRun) {
|
|
124
|
-
ensureDirSync(projectCommandsDir);
|
|
125
|
-
}
|
|
126
|
-
logger.created('.claude/project/commands/ (for user custom commands)');
|
|
127
|
-
}
|
|
128
|
-
if (needsCommandsMigration(projectRoot)) {
|
|
129
|
-
logger.info('Migrating commands to new directory structure...');
|
|
130
|
-
const builtInCommandsPath = join(nodeModulesPath, 'commands');
|
|
131
|
-
createCommandsDirectory(projectRoot, builtInCommandsPath, projectCommandsDir, dryRun || false);
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
const commandsDir = join(projectRoot, '.claude/commands');
|
|
135
|
-
if (isDirectory(commandsDir)) {
|
|
136
|
-
logger.info(` ✓ .claude/commands/ (directory with individual symlinks)`);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
// Handle skills directory - migrate from symlink to directory if needed
|
|
140
|
-
const projectSkillsDir = join(projectRoot, '.claude/project/skills');
|
|
141
|
-
if (!pathExists(projectSkillsDir)) {
|
|
142
|
-
if (!dryRun) {
|
|
143
|
-
ensureDirSync(projectSkillsDir);
|
|
144
|
-
}
|
|
145
|
-
logger.created('.claude/project/skills/ (for user custom skills)');
|
|
146
|
-
}
|
|
147
|
-
if (needsSkillsMigration(projectRoot)) {
|
|
148
|
-
logger.info('Migrating skills to new directory structure...');
|
|
149
|
-
const builtInSkillsPath = join(nodeModulesPath, 'skills');
|
|
150
|
-
createSkillsDirectory(projectRoot, builtInSkillsPath, projectSkillsDir, dryRun || false);
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
const skillsDir = join(projectRoot, '.claude/skills');
|
|
154
|
-
if (isDirectory(skillsDir)) {
|
|
155
|
-
logger.info(` ✓ .claude/skills/ (directory with individual symlinks)`);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
// Migrate sidecars from old location to new location
|
|
159
|
-
await migrateSidecars(projectRoot, { dryRun });
|
|
160
|
-
// Update settings
|
|
161
|
-
const assetsPath = getAssetsPath();
|
|
162
|
-
await mergeSettingsHooks(projectRoot, assetsPath, { dryRun });
|
|
163
|
-
// Update manifest version
|
|
164
|
-
logger.newline();
|
|
165
|
-
logger.info('Updating manifest...');
|
|
166
|
-
const nodeModulesRelPath = relative(projectRoot, nodeModulesPath);
|
|
167
|
-
const newManifest = createManifest(manifest?.projectName || 'unknown', version, {
|
|
168
|
-
nodeModulesPath: nodeModulesRelPath
|
|
169
|
-
});
|
|
170
|
-
writeManifest(projectRoot, newManifest, { dryRun });
|
|
171
|
-
logger.updated('.claude/manifest.json');
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Migrate sidecars from .claude/project/agents/{agent}-sidecar/ to .pennyfarthing/sidecars/{agent}/
|
|
175
|
-
* Also migrates from old sprint/sidecars/ location
|
|
176
|
-
* Preserves user content while moving to new location
|
|
177
|
-
*/
|
|
178
|
-
async function migrateSidecars(projectRoot, options) {
|
|
179
|
-
const dryRun = options.dryRun;
|
|
180
|
-
let migrated = 0;
|
|
181
|
-
// Ensure new sidecars directory exists
|
|
182
|
-
const newSidecarsDir = join(projectRoot, '.pennyfarthing/sidecars');
|
|
183
|
-
if (!pathExists(newSidecarsDir)) {
|
|
184
|
-
if (!dryRun) {
|
|
185
|
-
ensureDirSync(newSidecarsDir);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
for (const agent of CORE_AGENTS) {
|
|
189
|
-
// Check both legacy locations
|
|
190
|
-
const legacyDir1 = join(projectRoot, `.claude/project/agents/${agent}-sidecar`);
|
|
191
|
-
const legacyDir2 = join(projectRoot, `sprint/sidecars/${agent}`);
|
|
192
|
-
const oldDir = pathExists(legacyDir1) ? legacyDir1 : (pathExists(legacyDir2) ? legacyDir2 : null);
|
|
193
|
-
const newDir = join(projectRoot, `.pennyfarthing/sidecars/${agent}`);
|
|
194
|
-
// Skip if no legacy directory found
|
|
195
|
-
if (!oldDir) {
|
|
196
|
-
continue;
|
|
197
|
-
}
|
|
198
|
-
// Create new directory if needed
|
|
199
|
-
if (!pathExists(newDir)) {
|
|
200
|
-
if (!dryRun) {
|
|
201
|
-
ensureDirSync(newDir);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
// Copy each .md file from old to new (don't overwrite existing)
|
|
205
|
-
try {
|
|
206
|
-
const files = readdirSync(oldDir);
|
|
207
|
-
for (const file of files) {
|
|
208
|
-
if (!file.endsWith('.md'))
|
|
209
|
-
continue;
|
|
210
|
-
const oldPath = join(oldDir, file);
|
|
211
|
-
const newPath = join(newDir, file);
|
|
212
|
-
// Don't overwrite if new file already exists
|
|
213
|
-
if (pathExists(newPath)) {
|
|
214
|
-
continue;
|
|
215
|
-
}
|
|
216
|
-
if (!dryRun) {
|
|
217
|
-
copyFileSync(oldPath, newPath);
|
|
218
|
-
}
|
|
219
|
-
migrated++;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
catch {
|
|
223
|
-
// Ignore errors reading old directory
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
if (migrated > 0) {
|
|
227
|
-
logger.info(`Migrated ${migrated} sidecar files to .pennyfarthing/sidecars/`);
|
|
228
|
-
}
|
|
229
|
-
// Clean up old sprint/sidecars directory if it exists and is now empty or fully migrated
|
|
230
|
-
const oldSprintSidecars = join(projectRoot, 'sprint/sidecars');
|
|
231
|
-
if (pathExists(oldSprintSidecars)) {
|
|
232
|
-
try {
|
|
233
|
-
const remaining = readdirSync(oldSprintSidecars);
|
|
234
|
-
// Check if all remaining items are agent directories that have been migrated
|
|
235
|
-
const allMigrated = remaining.every(item => {
|
|
236
|
-
const itemPath = join(oldSprintSidecars, item);
|
|
237
|
-
if (!isDirectory(itemPath))
|
|
238
|
-
return false;
|
|
239
|
-
// Check if this agent's sidecar now exists in new location
|
|
240
|
-
const newAgentDir = join(projectRoot, `.pennyfarthing/sidecars/${item}`);
|
|
241
|
-
return pathExists(newAgentDir);
|
|
242
|
-
});
|
|
243
|
-
if (allMigrated && !dryRun) {
|
|
244
|
-
removeSync(oldSprintSidecars);
|
|
245
|
-
logger.info('Removed legacy sprint/sidecars/ directory');
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
catch {
|
|
249
|
-
// Ignore cleanup errors
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
async function checkForUpdates(projectRoot, manifest) {
|
|
254
|
-
const packageVersion = getPackageVersion();
|
|
255
|
-
const assetsPath = getAssetsPath();
|
|
256
|
-
const changedFiles = [];
|
|
257
|
-
const userModifiedFiles = [];
|
|
258
|
-
if (!manifest) {
|
|
259
|
-
return {
|
|
260
|
-
currentVersion: '0.0.0',
|
|
261
|
-
availableVersion: packageVersion,
|
|
262
|
-
needsUpdate: true,
|
|
263
|
-
changedFiles: [],
|
|
264
|
-
userModifiedFiles: []
|
|
265
|
-
};
|
|
266
|
-
}
|
|
267
|
-
// Check each file in manifest
|
|
268
|
-
for (const [filePath, expectedHash] of Object.entries(manifest.fileHashes)) {
|
|
269
|
-
const fullPath = join(projectRoot, filePath);
|
|
270
|
-
if (!pathExists(fullPath)) {
|
|
271
|
-
changedFiles.push(filePath);
|
|
272
|
-
continue;
|
|
273
|
-
}
|
|
274
|
-
const currentHash = hashFile(fullPath);
|
|
275
|
-
if (currentHash !== expectedHash) {
|
|
276
|
-
// File has been modified locally
|
|
277
|
-
userModifiedFiles.push(filePath);
|
|
278
|
-
}
|
|
279
|
-
// Check if package has a newer version
|
|
280
|
-
// Map installed path back to source path
|
|
281
|
-
const assetsFile = filePath
|
|
282
|
-
.replace('.claude/pennyfarthing/', '')
|
|
283
|
-
.replace('scripts/', 'scripts/');
|
|
284
|
-
const assetsFilePath = join(assetsPath, assetsFile);
|
|
285
|
-
if (pathExists(assetsFilePath)) {
|
|
286
|
-
const packageHash = hashFile(assetsFilePath);
|
|
287
|
-
if (packageHash !== expectedHash) {
|
|
288
|
-
changedFiles.push(filePath);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
// Compare versions
|
|
293
|
-
const needsUpdate = compareVersions(packageVersion, manifest.version) > 0;
|
|
294
|
-
return {
|
|
295
|
-
currentVersion: manifest.version,
|
|
296
|
-
availableVersion: packageVersion,
|
|
297
|
-
needsUpdate,
|
|
298
|
-
changedFiles,
|
|
299
|
-
userModifiedFiles
|
|
300
|
-
};
|
|
301
|
-
}
|
|
302
|
-
function compareVersions(a, b) {
|
|
303
|
-
const partsA = a.split('.').map(Number);
|
|
304
|
-
const partsB = b.split('.').map(Number);
|
|
305
|
-
for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
|
|
306
|
-
const numA = partsA[i] || 0;
|
|
307
|
-
const numB = partsB[i] || 0;
|
|
308
|
-
if (numA > numB)
|
|
309
|
-
return 1;
|
|
310
|
-
if (numA < numB)
|
|
311
|
-
return -1;
|
|
312
|
-
}
|
|
313
|
-
return 0;
|
|
314
|
-
}
|
|
315
|
-
/**
|
|
316
|
-
* Merge required hooks into existing settings.local.json
|
|
317
|
-
* This ensures critical hooks like SessionStart are always configured
|
|
318
|
-
* Returns true if any changes were made
|
|
319
|
-
*/
|
|
320
|
-
async function mergeSettingsHooks(projectRoot, assetsPath, options) {
|
|
321
|
-
const settingsPath = join(projectRoot, '.claude/settings.local.json');
|
|
322
|
-
const templatePath = join(assetsPath, 'templates/settings.local.json.template');
|
|
323
|
-
if (!pathExists(templatePath)) {
|
|
324
|
-
return false;
|
|
325
|
-
}
|
|
326
|
-
const templateContent = JSON.parse(readFileSync(templatePath, 'utf8'));
|
|
327
|
-
// If no existing settings, create from template
|
|
328
|
-
if (!pathExists(settingsPath)) {
|
|
329
|
-
if (!options.dryRun) {
|
|
330
|
-
ensureDirSync(join(projectRoot, '.claude'));
|
|
331
|
-
writeFileSync(settingsPath, JSON.stringify(templateContent, null, 2), 'utf8');
|
|
332
|
-
}
|
|
333
|
-
logger.created('.claude/settings.local.json');
|
|
334
|
-
return true;
|
|
335
|
-
}
|
|
336
|
-
// Read existing settings
|
|
337
|
-
let existingSettings;
|
|
338
|
-
try {
|
|
339
|
-
existingSettings = JSON.parse(readFileSync(settingsPath, 'utf8'));
|
|
340
|
-
}
|
|
341
|
-
catch {
|
|
342
|
-
logger.warning('Could not parse existing settings.local.json, skipping merge');
|
|
343
|
-
return false;
|
|
344
|
-
}
|
|
345
|
-
let modified = false;
|
|
346
|
-
// Ensure hooks object exists
|
|
347
|
-
if (!existingSettings.hooks) {
|
|
348
|
-
existingSettings.hooks = {};
|
|
349
|
-
modified = true;
|
|
350
|
-
}
|
|
351
|
-
const hooks = existingSettings.hooks;
|
|
352
|
-
// Merge SessionStart hooks - these are critical for PROJECT_ROOT
|
|
353
|
-
if (!hooks.SessionStart) {
|
|
354
|
-
hooks.SessionStart = templateContent.hooks?.SessionStart || [];
|
|
355
|
-
modified = true;
|
|
356
|
-
logger.info('Added missing SessionStart hooks');
|
|
357
|
-
}
|
|
358
|
-
else if (Array.isArray(hooks.SessionStart)) {
|
|
359
|
-
// Check if session-start.sh hook is configured
|
|
360
|
-
const hasSessionStartHook = hooks.SessionStart.some((entry) => {
|
|
361
|
-
if (typeof entry === 'object' && entry !== null) {
|
|
362
|
-
const hookEntry = entry;
|
|
363
|
-
return hookEntry.hooks?.some(h => h.command?.includes('session-start.sh'));
|
|
364
|
-
}
|
|
365
|
-
return false;
|
|
366
|
-
});
|
|
367
|
-
if (!hasSessionStartHook && templateContent.hooks?.SessionStart) {
|
|
368
|
-
// Prepend the session-start.sh hook entry
|
|
369
|
-
const sessionStartEntry = templateContent.hooks.SessionStart.find((entry) => {
|
|
370
|
-
if (typeof entry === 'object' && entry !== null) {
|
|
371
|
-
const hookEntry = entry;
|
|
372
|
-
return hookEntry.hooks?.some(h => h.command?.includes('session-start.sh'));
|
|
373
|
-
}
|
|
374
|
-
return false;
|
|
375
|
-
});
|
|
376
|
-
if (sessionStartEntry) {
|
|
377
|
-
hooks.SessionStart = [sessionStartEntry, ...hooks.SessionStart];
|
|
378
|
-
modified = true;
|
|
379
|
-
logger.info('Added missing session-start.sh hook');
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
// Merge SessionEnd hooks if missing
|
|
384
|
-
if (!hooks.SessionEnd && templateContent.hooks?.SessionEnd) {
|
|
385
|
-
hooks.SessionEnd = templateContent.hooks.SessionEnd;
|
|
386
|
-
modified = true;
|
|
387
|
-
logger.info('Added missing SessionEnd hooks');
|
|
388
|
-
}
|
|
389
|
-
// Ensure statusLine is configured and points to new location
|
|
390
|
-
const statusLine = existingSettings.statusLine;
|
|
391
|
-
if (!statusLine) {
|
|
392
|
-
existingSettings.statusLine = templateContent.statusLine;
|
|
393
|
-
modified = true;
|
|
394
|
-
logger.info('Added missing statusLine configuration');
|
|
395
|
-
}
|
|
396
|
-
else if (statusLine.command && typeof statusLine.command === 'string') {
|
|
397
|
-
// Migrate from any legacy path to new path (.claude/scripts/statusline.sh)
|
|
398
|
-
const legacyPaths = [
|
|
399
|
-
'.claude/core/statusline.sh',
|
|
400
|
-
'.claude/statusline.sh',
|
|
401
|
-
'.claude/pennyfarthing/statusline.sh' // Also migrate from old copy-mode path
|
|
402
|
-
];
|
|
403
|
-
for (const legacyPath of legacyPaths) {
|
|
404
|
-
if (statusLine.command.includes(legacyPath)) {
|
|
405
|
-
statusLine.command = statusLine.command.replace(legacyPath, '.claude/scripts/statusline.sh');
|
|
406
|
-
modified = true;
|
|
407
|
-
logger.info(`Updated statusLine path from ${legacyPath} to new location`);
|
|
408
|
-
break;
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
if (modified && !options.dryRun) {
|
|
413
|
-
writeFileSync(settingsPath, JSON.stringify(existingSettings, null, 2), 'utf8');
|
|
414
|
-
logger.updated('.claude/settings.local.json');
|
|
415
|
-
}
|
|
416
|
-
return modified;
|
|
417
|
-
}
|
|
418
|
-
//# sourceMappingURL=update.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/version.ts"],"names":[],"mappings":"AAGA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA2BpD"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { getPackageVersion } from '../utils/version.js';
|
|
2
|
-
import { manifestExists, readManifest } from '../utils/manifest.js';
|
|
3
|
-
export async function versionCommand() {
|
|
4
|
-
const projectRoot = process.cwd();
|
|
5
|
-
const packageVersion = getPackageVersion();
|
|
6
|
-
console.log(`Pennyfarthing v${packageVersion}`);
|
|
7
|
-
// Check if installed in current project
|
|
8
|
-
if (manifestExists(projectRoot)) {
|
|
9
|
-
const manifest = readManifest(projectRoot);
|
|
10
|
-
if (manifest) {
|
|
11
|
-
console.log();
|
|
12
|
-
console.log(`Installed: v${manifest.version} (${manifest.updatedAt.split('T')[0]})`);
|
|
13
|
-
// Check for update
|
|
14
|
-
if (manifest.version !== packageVersion) {
|
|
15
|
-
console.log(`Latest: v${packageVersion} (update available)`);
|
|
16
|
-
}
|
|
17
|
-
if (manifest.migrationSource) {
|
|
18
|
-
console.log(`Migrated from: ${manifest.migrationSource}`);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
console.log();
|
|
24
|
-
console.log('Not installed in current project.');
|
|
25
|
-
console.log('Run `pennyfarthing init` to install.');
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=version.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/cli/commands/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAE3C,OAAO,CAAC,GAAG,CAAC,kBAAkB,cAAc,EAAE,CAAC,CAAC;IAEhD,wCAAwC;IACxC,IAAI,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAErF,mBAAmB;YACnB,IAAI,QAAQ,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,eAAe,cAAc,qBAAqB,CAAC,CAAC;YAClE,CAAC;YAED,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,kBAAkB,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;AACH,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for Story 2-7: User-Customizable Output Styles and Preferences
|
|
3
|
-
*
|
|
4
|
-
* These tests verify:
|
|
5
|
-
* - Output style files exist in pennyfarthing-dist/output-styles/
|
|
6
|
-
* - Preferences template exists with required fields
|
|
7
|
-
* - CLI init creates preferences file
|
|
8
|
-
*
|
|
9
|
-
* Run with: npm test
|
|
10
|
-
*/
|
|
11
|
-
export {};
|
|
12
|
-
//# sourceMappingURL=customization.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"customization.test.d.ts","sourceRoot":"","sources":["../../src/cli/customization.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for Story 2-7: User-Customizable Output Styles and Preferences
|
|
3
|
-
*
|
|
4
|
-
* These tests verify:
|
|
5
|
-
* - Output style files exist in pennyfarthing-dist/output-styles/
|
|
6
|
-
* - Preferences template exists with required fields
|
|
7
|
-
* - CLI init creates preferences file
|
|
8
|
-
*
|
|
9
|
-
* Run with: npm test
|
|
10
|
-
*/
|
|
11
|
-
import { describe, it } from 'node:test';
|
|
12
|
-
import assert from 'node:assert';
|
|
13
|
-
import { existsSync, readFileSync } from 'fs';
|
|
14
|
-
import { join, dirname } from 'path';
|
|
15
|
-
import { fileURLToPath } from 'url';
|
|
16
|
-
import { parse as parseYaml } from 'yaml';
|
|
17
|
-
import { findMonorepoRoot } from './utils/files.js';
|
|
18
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
19
|
-
const __dirname = dirname(__filename);
|
|
20
|
-
// Find monorepo root by walking up from current directory
|
|
21
|
-
const projectRoot = findMonorepoRoot(__dirname);
|
|
22
|
-
const distDir = join(projectRoot, 'pennyfarthing-dist');
|
|
23
|
-
describe('Output Styles', () => {
|
|
24
|
-
const outputStylesDir = join(distDir, 'output-styles');
|
|
25
|
-
it('should have output-styles directory', () => {
|
|
26
|
-
assert.ok(existsSync(outputStylesDir), `Missing directory: ${outputStylesDir}`);
|
|
27
|
-
});
|
|
28
|
-
it('should have verbose.md output style', () => {
|
|
29
|
-
const filePath = join(outputStylesDir, 'verbose.md');
|
|
30
|
-
assert.ok(existsSync(filePath), `Missing file: ${filePath}`);
|
|
31
|
-
const content = readFileSync(filePath, 'utf-8');
|
|
32
|
-
assert.ok(content.length > 100, 'verbose.md should have substantial content');
|
|
33
|
-
assert.ok(content.toLowerCase().includes('detail') || content.toLowerCase().includes('explain'), 'verbose.md should mention detailed explanations');
|
|
34
|
-
});
|
|
35
|
-
it('should have terse.md output style', () => {
|
|
36
|
-
const filePath = join(outputStylesDir, 'terse.md');
|
|
37
|
-
assert.ok(existsSync(filePath), `Missing file: ${filePath}`);
|
|
38
|
-
const content = readFileSync(filePath, 'utf-8');
|
|
39
|
-
assert.ok(content.length > 50, 'terse.md should have content');
|
|
40
|
-
assert.ok(content.toLowerCase().includes('minimal') || content.toLowerCase().includes('brief') || content.toLowerCase().includes('concise'), 'terse.md should mention minimal/brief output');
|
|
41
|
-
});
|
|
42
|
-
it('should have teaching.md output style', () => {
|
|
43
|
-
const filePath = join(outputStylesDir, 'teaching.md');
|
|
44
|
-
assert.ok(existsSync(filePath), `Missing file: ${filePath}`);
|
|
45
|
-
const content = readFileSync(filePath, 'utf-8');
|
|
46
|
-
assert.ok(content.length > 100, 'teaching.md should have substantial content');
|
|
47
|
-
assert.ok(content.toLowerCase().includes('explain') || content.toLowerCase().includes('teach') || content.toLowerCase().includes('reason'), 'teaching.md should mention explaining or teaching');
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
describe('Preferences Template', () => {
|
|
51
|
-
const templatesDir = join(distDir, 'templates');
|
|
52
|
-
const prefsTemplatePath = join(templatesDir, 'preferences.yaml.template');
|
|
53
|
-
it('should have preferences.yaml.template', () => {
|
|
54
|
-
assert.ok(existsSync(prefsTemplatePath), `Missing file: ${prefsTemplatePath}`);
|
|
55
|
-
});
|
|
56
|
-
it('should have valid YAML structure', () => {
|
|
57
|
-
const content = readFileSync(prefsTemplatePath, 'utf-8');
|
|
58
|
-
const parsed = parseYaml(content);
|
|
59
|
-
assert.ok(typeof parsed === 'object', 'Should parse as YAML object');
|
|
60
|
-
});
|
|
61
|
-
it('should have character_voice preference', () => {
|
|
62
|
-
const content = readFileSync(prefsTemplatePath, 'utf-8');
|
|
63
|
-
const parsed = parseYaml(content);
|
|
64
|
-
assert.ok('character_voice' in parsed, 'preferences.yaml.template should have character_voice field');
|
|
65
|
-
assert.ok(typeof parsed.character_voice === 'boolean', 'character_voice should be a boolean');
|
|
66
|
-
});
|
|
67
|
-
it('should have explain_decisions preference', () => {
|
|
68
|
-
const content = readFileSync(prefsTemplatePath, 'utf-8');
|
|
69
|
-
const parsed = parseYaml(content);
|
|
70
|
-
assert.ok('explain_decisions' in parsed, 'preferences.yaml.template should have explain_decisions field');
|
|
71
|
-
assert.ok(typeof parsed.explain_decisions === 'boolean', 'explain_decisions should be a boolean');
|
|
72
|
-
});
|
|
73
|
-
it('should have auto_commit preference', () => {
|
|
74
|
-
const content = readFileSync(prefsTemplatePath, 'utf-8');
|
|
75
|
-
const parsed = parseYaml(content);
|
|
76
|
-
assert.ok('auto_commit' in parsed, 'preferences.yaml.template should have auto_commit field');
|
|
77
|
-
assert.ok(typeof parsed.auto_commit === 'boolean', 'auto_commit should be a boolean');
|
|
78
|
-
});
|
|
79
|
-
it('should have documentation comments', () => {
|
|
80
|
-
const content = readFileSync(prefsTemplatePath, 'utf-8');
|
|
81
|
-
assert.ok(content.includes('#'), 'Template should have YAML comments documenting options');
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
//# sourceMappingURL=customization.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"customization.test.js","sourceRoot":"","sources":["../../src/cli/customization.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Story 11-3: Cyclist Migration Tests
|
|
3
|
-
*
|
|
4
|
-
* These tests verify the Cyclist Electron GUI is correctly migrated
|
|
5
|
-
* into the pnpm workspace as @pennyfarthing/cyclist.
|
|
6
|
-
* Tests are designed to FAIL until the migration is complete.
|
|
7
|
-
*
|
|
8
|
-
* Acceptance Criteria:
|
|
9
|
-
* 1. packages/cyclist/ contains Cyclist source
|
|
10
|
-
* 2. Dependencies use workspace:* for internal packages
|
|
11
|
-
* 3. Portrait resolution uses @pennyfarthing/shared
|
|
12
|
-
* 4. Electron app starts and shows portraits
|
|
13
|
-
* 5. Dogfooding scenario works (portraits load from pennyfarthing-dist/)
|
|
14
|
-
*/
|
|
15
|
-
export {};
|
|
16
|
-
//# sourceMappingURL=cyclist-migration.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cyclist-migration.test.d.ts","sourceRoot":"","sources":["../../src/cli/cyclist-migration.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|