@shepai/cli 1.136.0-pr439.2a7af41 → 1.136.0-pr441.5eaafd1
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/apis/json-schema/FeatureFlags.yaml +5 -0
- package/apis/json-schema/NotificationEventConfig.yaml +15 -0
- package/apis/json-schema/NotificationEventType.yaml +3 -0
- package/apis/json-schema/Repository.yaml +0 -3
- package/apis/json-schema/ScheduledWorkflow.yaml +46 -0
- package/apis/json-schema/WorkflowExecution.yaml +38 -0
- package/apis/json-schema/WorkflowExecutionStatus.yaml +10 -0
- package/apis/json-schema/WorkflowTriggerType.yaml +7 -0
- package/dist/packages/core/src/application/index.d.ts +1 -1
- package/dist/packages/core/src/application/index.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/index.d.ts +1 -1
- package/dist/packages/core/src/application/ports/output/index.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/repositories/index.d.ts +2 -0
- package/dist/packages/core/src/application/ports/output/repositories/index.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/repositories/repository-repository.interface.d.ts +1 -1
- package/dist/packages/core/src/application/ports/output/repositories/repository-repository.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/repositories/workflow-execution-repository.interface.d.ts +66 -0
- package/dist/packages/core/src/application/ports/output/repositories/workflow-execution-repository.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/repositories/workflow-execution-repository.interface.js +11 -0
- package/dist/packages/core/src/application/ports/output/repositories/workflow-repository.interface.d.ts +81 -0
- package/dist/packages/core/src/application/ports/output/repositories/workflow-repository.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/repositories/workflow-repository.interface.js +11 -0
- package/dist/packages/core/src/application/ports/output/services/clock.interface.d.ts +28 -0
- package/dist/packages/core/src/application/ports/output/services/clock.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/clock.interface.js +13 -0
- package/dist/packages/core/src/application/ports/output/services/index.d.ts +2 -1
- package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts +5 -21
- package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts +1 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +2 -8
- package/dist/packages/core/src/application/use-cases/workflows/create-workflow.use-case.d.ts +28 -0
- package/dist/packages/core/src/application/use-cases/workflows/create-workflow.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/workflows/create-workflow.use-case.js +72 -0
- package/dist/packages/core/src/application/use-cases/workflows/cron-helpers.d.ts +27 -0
- package/dist/packages/core/src/application/use-cases/workflows/cron-helpers.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/workflows/cron-helpers.js +43 -0
- package/dist/packages/core/src/application/use-cases/workflows/delete-workflow.use-case.d.ts +18 -0
- package/dist/packages/core/src/application/use-cases/workflows/delete-workflow.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/workflows/delete-workflow.use-case.js +64 -0
- package/dist/packages/core/src/application/use-cases/workflows/get-workflow-history.use-case.d.ts +16 -0
- package/dist/packages/core/src/application/use-cases/workflows/get-workflow-history.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/workflows/get-workflow-history.use-case.js +46 -0
- package/dist/packages/core/src/application/use-cases/workflows/get-workflow.use-case.d.ts +13 -0
- package/dist/packages/core/src/application/use-cases/workflows/get-workflow.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/workflows/get-workflow.use-case.js +42 -0
- package/dist/packages/core/src/application/use-cases/workflows/list-workflows.use-case.d.ts +13 -0
- package/dist/packages/core/src/application/use-cases/workflows/list-workflows.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/workflows/list-workflows.use-case.js +33 -0
- package/dist/packages/core/src/application/use-cases/workflows/run-workflow.use-case.d.ts +19 -0
- package/dist/packages/core/src/application/use-cases/workflows/run-workflow.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/workflows/run-workflow.use-case.js +62 -0
- package/dist/packages/core/src/application/use-cases/workflows/schedule-workflow.use-case.d.ts +22 -0
- package/dist/packages/core/src/application/use-cases/workflows/schedule-workflow.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/workflows/schedule-workflow.use-case.js +73 -0
- package/dist/packages/core/src/application/use-cases/workflows/templates/branch-rebase.template.d.ts +9 -0
- package/dist/packages/core/src/application/use-cases/workflows/templates/branch-rebase.template.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/workflows/templates/branch-rebase.template.js +27 -0
- package/dist/packages/core/src/application/use-cases/workflows/templates/issue-triage.template.d.ts +11 -0
- package/dist/packages/core/src/application/use-cases/workflows/templates/issue-triage.template.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/workflows/templates/issue-triage.template.js +27 -0
- package/dist/packages/core/src/application/use-cases/workflows/toggle-workflow.use-case.d.ts +16 -0
- package/dist/packages/core/src/application/use-cases/workflows/toggle-workflow.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/workflows/toggle-workflow.use-case.js +60 -0
- package/dist/packages/core/src/application/use-cases/workflows/update-workflow.use-case.d.ts +25 -0
- package/dist/packages/core/src/application/use-cases/workflows/update-workflow.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/workflows/update-workflow.use-case.js +83 -0
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +4 -0
- package/dist/packages/core/src/domain/generated/output.d.ts +112 -3
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/domain/generated/output.js +16 -0
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +66 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/repository.mapper.d.ts +0 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/repository.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/repository.mapper.js +0 -2
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +4 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +8 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/workflow-execution.mapper.d.ts +46 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/workflow-execution.mapper.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/workflow-execution.mapper.js +57 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/workflow.mapper.d.ts +51 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/workflow.mapper.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/workflow.mapper.js +71 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-workflow-notification-events.d.ts +12 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-workflow-notification-events.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-workflow-notification-events.js +22 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-create-scheduled-workflows.d.ts +14 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-create-scheduled-workflows.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-create-scheduled-workflows.js +65 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-feature-flag-scheduled-workflows.d.ts +11 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-feature-flag-scheduled-workflows.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-feature-flag-scheduled-workflows.js +17 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.js +2 -6
- package/dist/packages/core/src/infrastructure/repositories/sqlite-workflow-execution.repository.d.ts +24 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-workflow-execution.repository.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-workflow-execution.repository.js +92 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-workflow.repository.d.ts +26 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-workflow.repository.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-workflow.repository.js +117 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.d.ts +2 -4
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.js +8 -15
- package/dist/packages/core/src/infrastructure/services/clock.d.ts +11 -0
- package/dist/packages/core/src/infrastructure/services/clock.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/clock.js +22 -0
- package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/worktree.service.js +4 -2
- package/dist/packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.js +4 -2
- package/dist/packages/core/src/infrastructure/services/notifications/notification.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/notifications/notification.service.js +3 -0
- package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts +3 -17
- package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.js +13 -49
- package/dist/packages/core/src/infrastructure/services/workflow-scheduler/workflow-scheduler.service.d.ts +69 -0
- package/dist/packages/core/src/infrastructure/services/workflow-scheduler/workflow-scheduler.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/workflow-scheduler/workflow-scheduler.service.js +270 -0
- package/dist/src/presentation/cli/commands/_serve.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/_serve.command.js +14 -0
- package/dist/src/presentation/cli/commands/workflow/create.command.d.ts +13 -0
- package/dist/src/presentation/cli/commands/workflow/create.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/workflow/create.command.js +83 -0
- package/dist/src/presentation/cli/commands/workflow/delete.command.d.ts +13 -0
- package/dist/src/presentation/cli/commands/workflow/delete.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/workflow/delete.command.js +50 -0
- package/dist/src/presentation/cli/commands/workflow/disable.command.d.ts +11 -0
- package/dist/src/presentation/cli/commands/workflow/disable.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/workflow/disable.command.js +32 -0
- package/dist/src/presentation/cli/commands/workflow/enable.command.d.ts +11 -0
- package/dist/src/presentation/cli/commands/workflow/enable.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/workflow/enable.command.js +35 -0
- package/dist/src/presentation/cli/commands/workflow/format-helpers.d.ts +35 -0
- package/dist/src/presentation/cli/commands/workflow/format-helpers.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/workflow/format-helpers.js +89 -0
- package/dist/src/presentation/cli/commands/workflow/history.command.d.ts +12 -0
- package/dist/src/presentation/cli/commands/workflow/history.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/workflow/history.command.js +46 -0
- package/dist/src/presentation/cli/commands/workflow/index.d.ts +26 -0
- package/dist/src/presentation/cli/commands/workflow/index.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/workflow/index.js +48 -0
- package/dist/src/presentation/cli/commands/workflow/list.command.d.ts +11 -0
- package/dist/src/presentation/cli/commands/workflow/list.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/workflow/list.command.js +52 -0
- package/dist/src/presentation/cli/commands/workflow/run.command.d.ts +11 -0
- package/dist/src/presentation/cli/commands/workflow/run.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/workflow/run.command.js +37 -0
- package/dist/src/presentation/cli/commands/workflow/schedule.command.d.ts +13 -0
- package/dist/src/presentation/cli/commands/workflow/schedule.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/workflow/schedule.command.js +76 -0
- package/dist/src/presentation/cli/commands/workflow/show.command.d.ts +11 -0
- package/dist/src/presentation/cli/commands/workflow/show.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/workflow/show.command.js +93 -0
- package/dist/src/presentation/cli/commands/workflow/update.command.d.ts +13 -0
- package/dist/src/presentation/cli/commands/workflow/update.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/workflow/update.command.js +67 -0
- package/dist/src/presentation/cli/index.js +2 -0
- package/dist/src/presentation/web/app/actions/get-workflow-history.d.ts +7 -0
- package/dist/src/presentation/web/app/actions/get-workflow-history.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/get-workflow-history.js +17 -0
- package/dist/src/presentation/web/app/actions/list-workflows.d.ts +7 -0
- package/dist/src/presentation/web/app/actions/list-workflows.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/list-workflows.js +17 -0
- package/dist/src/presentation/web/app/actions/toggle-workflow.d.ts +8 -0
- package/dist/src/presentation/web/app/actions/toggle-workflow.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/toggle-workflow.js +19 -0
- package/dist/src/presentation/web/app/actions/trigger-workflow.d.ts +8 -0
- package/dist/src/presentation/web/app/actions/trigger-workflow.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/trigger-workflow.js +19 -0
- package/dist/src/presentation/web/app/workflows/page.d.ts +4 -0
- package/dist/src/presentation/web/app/workflows/page.d.ts.map +1 -0
- package/dist/src/presentation/web/app/workflows/page.js +18 -0
- package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +4 -0
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +3 -0
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +3 -0
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.js +6 -1
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.js +6 -0
- package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.js +19 -2
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +1 -0
- package/dist/src/presentation/web/components/features/workflows/workflow-execution-history.d.ts +7 -0
- package/dist/src/presentation/web/components/features/workflows/workflow-execution-history.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/workflows/workflow-execution-history.js +84 -0
- package/dist/src/presentation/web/components/features/workflows/workflow-execution-history.stories.d.ts +11 -0
- package/dist/src/presentation/web/components/features/workflows/workflow-execution-history.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/workflows/workflow-execution-history.stories.js +104 -0
- package/dist/src/presentation/web/components/features/workflows/workflow-list-item.d.ts +8 -0
- package/dist/src/presentation/web/components/features/workflows/workflow-list-item.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/workflows/workflow-list-item.js +68 -0
- package/dist/src/presentation/web/components/features/workflows/workflow-list-item.stories.d.ts +11 -0
- package/dist/src/presentation/web/components/features/workflows/workflow-list-item.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/workflows/workflow-list-item.stories.js +89 -0
- package/dist/src/presentation/web/components/features/workflows/workflow-list.d.ts +8 -0
- package/dist/src/presentation/web/components/features/workflows/workflow-list.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/workflows/workflow-list.js +10 -0
- package/dist/src/presentation/web/components/features/workflows/workflow-list.stories.d.ts +11 -0
- package/dist/src/presentation/web/components/features/workflows/workflow-list.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/workflows/workflow-list.stories.js +90 -0
- package/dist/src/presentation/web/components/features/workflows/workflows-page-client.d.ts +6 -0
- package/dist/src/presentation/web/components/features/workflows/workflows-page-client.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/workflows/workflows-page-client.js +14 -0
- package/dist/src/presentation/web/components/features/workflows/workflows-page-client.stories.d.ts +10 -0
- package/dist/src/presentation/web/components/features/workflows/workflows-page-client.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/workflows/workflows-page-client.stories.js +70 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +1 -0
- package/dist/src/presentation/web/hooks/feature-flags-context.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/feature-flags-context.js +1 -0
- package/dist/src/presentation/web/lib/feature-flags.d.ts +2 -0
- package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -1
- package/dist/src/presentation/web/lib/feature-flags.js +5 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +2 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +1 -1
- package/web/.next/required-server-files.json +1 -1
- package/web/.next/routes-manifest.json +6 -0
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +25 -25
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +25 -25
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +31 -31
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +31 -31
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +23 -23
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +25 -25
- package/web/.next/server/app/(dashboard)/create/page.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +31 -31
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -2
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +31 -31
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -2
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +23 -23
- package/web/.next/server/app/(dashboard)/page.js +1 -1
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +23 -23
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +3 -3
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/feature-logs/route.js +1 -1
- package/web/.next/server/app/api/feature-logs/route.js.nft.json +1 -1
- package/web/.next/server/app/api/graph-data/route.js +1 -1
- package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
- package/web/.next/server/app/settings/page.js +2 -2
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +8 -8
- package/web/.next/server/app/skills/page.js +1 -1
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +8 -8
- package/web/.next/server/app/tools/page.js +1 -1
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +3 -3
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/workflows/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/workflows/page/build-manifest.json +18 -0
- package/web/.next/server/app/workflows/page/next-font-manifest.json +6 -0
- package/web/.next/server/app/workflows/page/react-loadable-manifest.json +8 -0
- package/web/.next/server/app/workflows/page/server-reference-manifest.json +110 -0
- package/web/.next/server/app/workflows/page.js +18 -0
- package/web/.next/server/app/workflows/page.js.map +5 -0
- package/web/.next/server/app/workflows/page.js.nft.json +1 -0
- package/web/.next/server/app/workflows/page_client-reference-manifest.js +2 -0
- package/web/.next/server/app-paths-manifest.json +2 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js.map +1 -1
- package/web/.next/server/chunks/{[root-of-the-server]__2b1074db._.js → [root-of-the-server]__c7d52490._.js} +2 -2
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_02ec1aea._.js → 403f9_next_53742624._.js} +2 -2
- package/web/.next/server/chunks/ssr/403f9_next_53742624._.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_b49d9c97.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_b49d9c97.js.map +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_0c7787d0._.js +3 -0
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_0c7787d0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_28632197.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_28632197.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_10695d37.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_10695d37.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__a5f9c6e5._.js → [root-of-the-server]__07f12984._.js} +3 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__07f12984._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__082758f6._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__082758f6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__32cd6108._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__32cd6108._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__33ac1a70._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__33ac1a70._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__44358910._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__44358910._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__f4e193d3._.js → [root-of-the-server]__47ded061._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__f4e193d3._.js.map → [root-of-the-server]__47ded061._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__3ef34e4c._.js → [root-of-the-server]__57e0ee34._.js} +3 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__57e0ee34._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__d68f61dd._.js → [root-of-the-server]__68ce373c._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__d68f61dd._.js.map → [root-of-the-server]__68ce373c._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6e93b49c._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__b3dbadca._.js.map → [root-of-the-server]__6e93b49c._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__b1670307._.js → [root-of-the-server]__718766da._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__b1670307._.js.map → [root-of-the-server]__718766da._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__785e8499._.js → [root-of-the-server]__fdd058b2._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__785e8499._.js.map → [root-of-the-server]__fdd058b2._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_20a4a0d5._.js +3 -0
- package/web/.next/server/chunks/ssr/_20a4a0d5._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_25555eb5._.js +3 -0
- package/web/.next/server/chunks/ssr/_25555eb5._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_b5fc318a._.js → _277acdde._.js} +2 -2
- package/web/.next/server/chunks/ssr/_277acdde._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_4711e8cf._.js +3 -0
- package/web/.next/server/chunks/ssr/_4711e8cf._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_a9f57758._.js → _6701ee41._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_a9f57758._.js.map → _6701ee41._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_89a36303._.js +3 -0
- package/web/.next/server/chunks/ssr/_89a36303._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_32961561._.js → _8e8cd7e1._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_32961561._.js.map → _8e8cd7e1._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_9869d3da._.js +3 -0
- package/web/.next/server/chunks/ssr/_9869d3da._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_0020fddd._.js → _a3721140._.js} +2 -2
- package/web/.next/server/chunks/ssr/_a3721140._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_a37f5f18._.js +1 -1
- package/web/.next/server/chunks/ssr/_a37f5f18._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_cc1243e6._.js +3 -0
- package/web/.next/server/chunks/ssr/_cc1243e6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_d8575088._.js +1 -1
- package/web/.next/server/chunks/ssr/_d8575088._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_e3411387._.js +9 -0
- package/web/.next/server/chunks/ssr/_e3411387._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_e69a26ba._.js +1 -1
- package/web/.next/server/chunks/ssr/_f64ffec0._.js +4 -0
- package/web/.next/server/chunks/ssr/_f64ffec0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_1b7dae9a._.js → f7870_sonner_dist_index_mjs_dbf63824._.js} +2 -2
- package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_28388798._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_28388798._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_ae1705ef._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_ae1705ef._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_53666118._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_53666118._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_53fa3010._.js +3 -0
- package/web/.next/server/chunks/ssr/{src_presentation_web_06ffd221._.js.map → src_presentation_web_53fa3010._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_d95e128d.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_d95e128d.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e4df6dd7._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_e4df6dd7._.js.map +1 -1
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +123 -42
- package/web/.next/static/chunks/{d0be9b22c3b9bce8.js → 196650f8cd7fb06a.js} +1 -1
- package/web/.next/static/chunks/{92cd6f523639a6fa.css → 2002f5eec5ffec42.css} +1 -1
- package/web/.next/static/chunks/2c1ff62df9b34313.js +1 -0
- package/web/.next/static/chunks/3005583e819fc4fc.js +1 -0
- package/web/.next/static/chunks/333c7873f6b17ef1.js +1 -0
- package/web/.next/static/chunks/3b3f8c4f6c36a7ba.js +1 -0
- package/web/.next/static/chunks/{672e3da3ad26005b.js → 42c9564e375717ed.js} +1 -1
- package/web/.next/static/chunks/43e0eea352eb5106.js +5 -0
- package/web/.next/static/chunks/5420560352333486.js +1 -0
- package/web/.next/static/chunks/62fa33876b0964a4.js +1 -0
- package/web/.next/static/chunks/6db2addb5e13e372.js +1 -0
- package/web/.next/static/chunks/886d0385ca1d4484.js +1 -0
- package/web/.next/static/chunks/8e52a649c3f6bdf4.js +1 -0
- package/web/.next/static/chunks/a02fc9467a585a1f.js +2 -0
- package/web/.next/static/chunks/{796bb98fb3f35b71.js → bee578019062e7f9.js} +1 -1
- package/web/.next/static/chunks/cdb51cfd682387d2.js +1 -0
- package/web/.next/static/chunks/ed35b4293a81c861.js +9 -0
- package/web/.next/static/chunks/ed7fbcdf0b48e735.js +1 -0
- package/web/.next/static/chunks/f75142a1b75f1c32.js +1 -0
- package/web/.next/static/chunks/fabcd29d488281fa.js +1 -0
- package/web/.next/static/chunks/fd925f996c3fa318.js +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-spec-storage-mode.d.ts +0 -12
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-spec-storage-mode.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-spec-storage-mode.js +0 -19
- package/dist/packages/core/src/infrastructure/services/filesystem/repo-hash.d.ts +0 -17
- package/dist/packages/core/src/infrastructure/services/filesystem/repo-hash.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/filesystem/repo-hash.js +0 -21
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_8b618f7d._.js +0 -3
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_8b618f7d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6ec59045._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6ec59045._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a5f9c6e5._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b3dbadca._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0020fddd._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_01046927._.js +0 -9
- package/web/.next/server/chunks/ssr/_01046927._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_02ec1aea._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_1b7dae9a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_503680be._.js +0 -3
- package/web/.next/server/chunks/ssr/_503680be._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_67104d9e._.js +0 -3
- package/web/.next/server/chunks/ssr/_67104d9e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_7dca1882._.js +0 -3
- package/web/.next/server/chunks/ssr/_7dca1882._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_b5fc318a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_d4b20e29._.js +0 -3
- package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_f39a1adb._.js +0 -3
- package/web/.next/server/chunks/ssr/_f39a1adb._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules__pnpm_55c7a131._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules__pnpm_55c7a131._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_06ffd221._.js +0 -3
- package/web/.next/static/chunks/0b7fe2ac4f078f54.js +0 -13
- package/web/.next/static/chunks/2bbb31a39a80d011.js +0 -1
- package/web/.next/static/chunks/5466ac7c8d7c6b2b.js +0 -1
- package/web/.next/static/chunks/601d93593f5f664f.js +0 -1
- package/web/.next/static/chunks/688971d5bad5dc7c.js +0 -1
- package/web/.next/static/chunks/6daf875725c43e2c.js +0 -2
- package/web/.next/static/chunks/991f2fcba923f3ed.js +0 -1
- package/web/.next/static/chunks/af4d1051b6fa73d5.js +0 -1
- package/web/.next/static/chunks/b70dd4985a814b27.js +0 -1
- package/web/.next/static/chunks/c317cd6a6f76361d.js +0 -1
- package/web/.next/static/chunks/d0dff217a94d4ee1.js +0 -1
- package/web/.next/static/chunks/db862617e62ba1f9.js +0 -1
- package/web/.next/static/chunks/e15904973d49ff89.js +0 -1
- package/web/.next/static/chunks/e6cff1dacc561fa0.js +0 -1
- package/web/.next/static/chunks/e8d49a8e1274cb49.js +0 -1
- /package/web/.next/server/chunks/{[root-of-the-server]__2b1074db._.js.map → [root-of-the-server]__c7d52490._.js.map} +0 -0
- /package/web/.next/static/{xpAWvEAtoYdP3klvh5Yyo → w0YQoUPySQy1O9cN91KEk}/_buildManifest.js +0 -0
- /package/web/.next/static/{xpAWvEAtoYdP3klvh5Yyo → w0YQoUPySQy1O9cN91KEk}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{xpAWvEAtoYdP3klvh5Yyo → w0YQoUPySQy1O9cN91KEk}/_ssgManifest.js +0 -0
package/dist/packages/core/src/infrastructure/repositories/sqlite-workflow-execution.repository.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite Workflow Execution Repository Implementation
|
|
3
|
+
*
|
|
4
|
+
* Implements IWorkflowExecutionRepository using SQLite database.
|
|
5
|
+
* Uses prepared statements to prevent SQL injection.
|
|
6
|
+
*/
|
|
7
|
+
import type Database from 'better-sqlite3';
|
|
8
|
+
import type { IWorkflowExecutionRepository } from '../../application/ports/output/repositories/workflow-execution-repository.interface.js';
|
|
9
|
+
import type { WorkflowExecution, WorkflowExecutionStatus } from '../../domain/generated/output.js';
|
|
10
|
+
/**
|
|
11
|
+
* SQLite implementation of IWorkflowExecutionRepository.
|
|
12
|
+
* Manages WorkflowExecution persistence with CRUD and retention cleanup.
|
|
13
|
+
*/
|
|
14
|
+
export declare class SQLiteWorkflowExecutionRepository implements IWorkflowExecutionRepository {
|
|
15
|
+
private readonly db;
|
|
16
|
+
constructor(db: Database.Database);
|
|
17
|
+
create(execution: WorkflowExecution): Promise<void>;
|
|
18
|
+
findById(id: string): Promise<WorkflowExecution | null>;
|
|
19
|
+
findByWorkflowId(workflowId: string, limit?: number): Promise<WorkflowExecution[]>;
|
|
20
|
+
findByStatus(status: WorkflowExecutionStatus): Promise<WorkflowExecution[]>;
|
|
21
|
+
update(execution: WorkflowExecution): Promise<void>;
|
|
22
|
+
deleteOlderThan(date: Date): Promise<number>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=sqlite-workflow-execution.repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-workflow-execution.repository.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/repositories/sqlite-workflow-execution.repository.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wFAAwF,CAAC;AAC3I,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAOnG;;;GAGG;AACH,qBACa,iCAAkC,YAAW,4BAA4B;IACxE,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAE5C,MAAM,CAAC,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBnD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAWvD,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAalF,YAAY,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAS3E,MAAM,CAAC,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBnD,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;CAKnD"}
|
package/dist/packages/core/src/infrastructure/repositories/sqlite-workflow-execution.repository.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite Workflow Execution Repository Implementation
|
|
3
|
+
*
|
|
4
|
+
* Implements IWorkflowExecutionRepository using SQLite database.
|
|
5
|
+
* Uses prepared statements to prevent SQL injection.
|
|
6
|
+
*/
|
|
7
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
8
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
10
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
11
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
12
|
+
};
|
|
13
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
14
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
15
|
+
};
|
|
16
|
+
import { injectable } from 'tsyringe';
|
|
17
|
+
import { toDatabase, fromDatabase, } from '../persistence/sqlite/mappers/workflow-execution.mapper.js';
|
|
18
|
+
/**
|
|
19
|
+
* SQLite implementation of IWorkflowExecutionRepository.
|
|
20
|
+
* Manages WorkflowExecution persistence with CRUD and retention cleanup.
|
|
21
|
+
*/
|
|
22
|
+
let SQLiteWorkflowExecutionRepository = class SQLiteWorkflowExecutionRepository {
|
|
23
|
+
db;
|
|
24
|
+
constructor(db) {
|
|
25
|
+
this.db = db;
|
|
26
|
+
}
|
|
27
|
+
async create(execution) {
|
|
28
|
+
const row = toDatabase(execution);
|
|
29
|
+
const stmt = this.db.prepare(`
|
|
30
|
+
INSERT INTO workflow_executions (
|
|
31
|
+
id, workflow_id, trigger_type, status,
|
|
32
|
+
started_at, completed_at, duration_ms,
|
|
33
|
+
output_summary, error_message,
|
|
34
|
+
created_at, updated_at
|
|
35
|
+
) VALUES (
|
|
36
|
+
@id, @workflow_id, @trigger_type, @status,
|
|
37
|
+
@started_at, @completed_at, @duration_ms,
|
|
38
|
+
@output_summary, @error_message,
|
|
39
|
+
@created_at, @updated_at
|
|
40
|
+
)
|
|
41
|
+
`);
|
|
42
|
+
stmt.run(row);
|
|
43
|
+
}
|
|
44
|
+
async findById(id) {
|
|
45
|
+
const stmt = this.db.prepare('SELECT * FROM workflow_executions WHERE id = ?');
|
|
46
|
+
const row = stmt.get(id);
|
|
47
|
+
if (!row) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
return fromDatabase(row);
|
|
51
|
+
}
|
|
52
|
+
async findByWorkflowId(workflowId, limit) {
|
|
53
|
+
const sql = limit
|
|
54
|
+
? 'SELECT * FROM workflow_executions WHERE workflow_id = ? ORDER BY started_at DESC LIMIT ?'
|
|
55
|
+
: 'SELECT * FROM workflow_executions WHERE workflow_id = ? ORDER BY started_at DESC';
|
|
56
|
+
const stmt = this.db.prepare(sql);
|
|
57
|
+
const rows = (limit ? stmt.all(workflowId, limit) : stmt.all(workflowId));
|
|
58
|
+
return rows.map(fromDatabase);
|
|
59
|
+
}
|
|
60
|
+
async findByStatus(status) {
|
|
61
|
+
const stmt = this.db.prepare('SELECT * FROM workflow_executions WHERE status = ? ORDER BY started_at ASC');
|
|
62
|
+
const rows = stmt.all(status);
|
|
63
|
+
return rows.map(fromDatabase);
|
|
64
|
+
}
|
|
65
|
+
async update(execution) {
|
|
66
|
+
const row = toDatabase(execution);
|
|
67
|
+
const stmt = this.db.prepare(`
|
|
68
|
+
UPDATE workflow_executions SET
|
|
69
|
+
workflow_id = @workflow_id,
|
|
70
|
+
trigger_type = @trigger_type,
|
|
71
|
+
status = @status,
|
|
72
|
+
started_at = @started_at,
|
|
73
|
+
completed_at = @completed_at,
|
|
74
|
+
duration_ms = @duration_ms,
|
|
75
|
+
output_summary = @output_summary,
|
|
76
|
+
error_message = @error_message,
|
|
77
|
+
updated_at = @updated_at
|
|
78
|
+
WHERE id = @id
|
|
79
|
+
`);
|
|
80
|
+
stmt.run(row);
|
|
81
|
+
}
|
|
82
|
+
async deleteOlderThan(date) {
|
|
83
|
+
const stmt = this.db.prepare('DELETE FROM workflow_executions WHERE started_at < ?');
|
|
84
|
+
const result = stmt.run(date.getTime());
|
|
85
|
+
return result.changes;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
SQLiteWorkflowExecutionRepository = __decorate([
|
|
89
|
+
injectable(),
|
|
90
|
+
__metadata("design:paramtypes", [Object])
|
|
91
|
+
], SQLiteWorkflowExecutionRepository);
|
|
92
|
+
export { SQLiteWorkflowExecutionRepository };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite Workflow Repository Implementation
|
|
3
|
+
*
|
|
4
|
+
* Implements IWorkflowRepository using SQLite database.
|
|
5
|
+
* Uses prepared statements to prevent SQL injection.
|
|
6
|
+
* Excludes soft-deleted workflows (deleted_at IS NOT NULL) from queries by default.
|
|
7
|
+
*/
|
|
8
|
+
import type Database from 'better-sqlite3';
|
|
9
|
+
import type { IWorkflowRepository, WorkflowListFilters } from '../../application/ports/output/repositories/workflow-repository.interface.js';
|
|
10
|
+
import type { ScheduledWorkflow } from '../../domain/generated/output.js';
|
|
11
|
+
/**
|
|
12
|
+
* SQLite implementation of IWorkflowRepository.
|
|
13
|
+
* Manages ScheduledWorkflow persistence with CRUD operations.
|
|
14
|
+
*/
|
|
15
|
+
export declare class SQLiteWorkflowRepository implements IWorkflowRepository {
|
|
16
|
+
private readonly db;
|
|
17
|
+
constructor(db: Database.Database);
|
|
18
|
+
create(workflow: ScheduledWorkflow): Promise<void>;
|
|
19
|
+
findById(id: string): Promise<ScheduledWorkflow | null>;
|
|
20
|
+
findByName(name: string, repositoryPath: string): Promise<ScheduledWorkflow | null>;
|
|
21
|
+
findEnabled(): Promise<ScheduledWorkflow[]>;
|
|
22
|
+
list(filters?: WorkflowListFilters): Promise<ScheduledWorkflow[]>;
|
|
23
|
+
update(workflow: ScheduledWorkflow): Promise<void>;
|
|
24
|
+
softDelete(id: string): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=sqlite-workflow.repository.d.ts.map
|
package/dist/packages/core/src/infrastructure/repositories/sqlite-workflow.repository.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-workflow.repository.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/repositories/sqlite-workflow.repository.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,8EAA8E,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAO1E;;;GAGG;AACH,qBACa,wBAAyB,YAAW,mBAAmB;IACtD,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAE5C,MAAM,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBlD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAavD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAenF,WAAW,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAS3C,IAAI,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IA2BjE,MAAM,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBlD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAO5C"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite Workflow Repository Implementation
|
|
3
|
+
*
|
|
4
|
+
* Implements IWorkflowRepository using SQLite database.
|
|
5
|
+
* Uses prepared statements to prevent SQL injection.
|
|
6
|
+
* Excludes soft-deleted workflows (deleted_at IS NOT NULL) from queries by default.
|
|
7
|
+
*/
|
|
8
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
9
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
10
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
11
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
12
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
13
|
+
};
|
|
14
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
15
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
16
|
+
};
|
|
17
|
+
import { injectable } from 'tsyringe';
|
|
18
|
+
import { toDatabase, fromDatabase, } from '../persistence/sqlite/mappers/workflow.mapper.js';
|
|
19
|
+
/**
|
|
20
|
+
* SQLite implementation of IWorkflowRepository.
|
|
21
|
+
* Manages ScheduledWorkflow persistence with CRUD operations.
|
|
22
|
+
*/
|
|
23
|
+
let SQLiteWorkflowRepository = class SQLiteWorkflowRepository {
|
|
24
|
+
db;
|
|
25
|
+
constructor(db) {
|
|
26
|
+
this.db = db;
|
|
27
|
+
}
|
|
28
|
+
async create(workflow) {
|
|
29
|
+
const row = toDatabase(workflow);
|
|
30
|
+
const stmt = this.db.prepare(`
|
|
31
|
+
INSERT INTO scheduled_workflows (
|
|
32
|
+
id, name, description, prompt, tool_constraints,
|
|
33
|
+
cron_expression, timezone, enabled,
|
|
34
|
+
last_run_at, next_run_at,
|
|
35
|
+
repository_path, deleted_at,
|
|
36
|
+
created_at, updated_at
|
|
37
|
+
) VALUES (
|
|
38
|
+
@id, @name, @description, @prompt, @tool_constraints,
|
|
39
|
+
@cron_expression, @timezone, @enabled,
|
|
40
|
+
@last_run_at, @next_run_at,
|
|
41
|
+
@repository_path, @deleted_at,
|
|
42
|
+
@created_at, @updated_at
|
|
43
|
+
)
|
|
44
|
+
`);
|
|
45
|
+
stmt.run(row);
|
|
46
|
+
}
|
|
47
|
+
async findById(id) {
|
|
48
|
+
const stmt = this.db.prepare('SELECT * FROM scheduled_workflows WHERE id = ? AND deleted_at IS NULL');
|
|
49
|
+
const row = stmt.get(id);
|
|
50
|
+
if (!row) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return fromDatabase(row);
|
|
54
|
+
}
|
|
55
|
+
async findByName(name, repositoryPath) {
|
|
56
|
+
const stmt = this.db.prepare("SELECT * FROM scheduled_workflows WHERE name = ? AND REPLACE(repository_path, '\\', '/') = ? AND deleted_at IS NULL");
|
|
57
|
+
const row = stmt.get(name, repositoryPath.replace(/\\/g, '/'));
|
|
58
|
+
if (!row) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
return fromDatabase(row);
|
|
62
|
+
}
|
|
63
|
+
async findEnabled() {
|
|
64
|
+
const stmt = this.db.prepare('SELECT * FROM scheduled_workflows WHERE enabled = 1 AND deleted_at IS NULL ORDER BY created_at ASC');
|
|
65
|
+
const rows = stmt.all();
|
|
66
|
+
return rows.map(fromDatabase);
|
|
67
|
+
}
|
|
68
|
+
async list(filters) {
|
|
69
|
+
const conditions = [];
|
|
70
|
+
const params = [];
|
|
71
|
+
if (!filters?.includeDeleted) {
|
|
72
|
+
conditions.push('deleted_at IS NULL');
|
|
73
|
+
}
|
|
74
|
+
if (filters?.repositoryPath) {
|
|
75
|
+
conditions.push("REPLACE(repository_path, '\\', '/') = ?");
|
|
76
|
+
params.push(filters.repositoryPath.replace(/\\/g, '/'));
|
|
77
|
+
}
|
|
78
|
+
if (filters?.enabled !== undefined) {
|
|
79
|
+
conditions.push('enabled = ?');
|
|
80
|
+
params.push(filters.enabled ? 1 : 0);
|
|
81
|
+
}
|
|
82
|
+
const where = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';
|
|
83
|
+
const stmt = this.db.prepare(`SELECT * FROM scheduled_workflows${where} ORDER BY created_at ASC`);
|
|
84
|
+
const rows = stmt.all(...params);
|
|
85
|
+
return rows.map(fromDatabase);
|
|
86
|
+
}
|
|
87
|
+
async update(workflow) {
|
|
88
|
+
const row = toDatabase(workflow);
|
|
89
|
+
const stmt = this.db.prepare(`
|
|
90
|
+
UPDATE scheduled_workflows SET
|
|
91
|
+
name = @name,
|
|
92
|
+
description = @description,
|
|
93
|
+
prompt = @prompt,
|
|
94
|
+
tool_constraints = @tool_constraints,
|
|
95
|
+
cron_expression = @cron_expression,
|
|
96
|
+
timezone = @timezone,
|
|
97
|
+
enabled = @enabled,
|
|
98
|
+
last_run_at = @last_run_at,
|
|
99
|
+
next_run_at = @next_run_at,
|
|
100
|
+
repository_path = @repository_path,
|
|
101
|
+
deleted_at = @deleted_at,
|
|
102
|
+
updated_at = @updated_at
|
|
103
|
+
WHERE id = @id
|
|
104
|
+
`);
|
|
105
|
+
stmt.run(row);
|
|
106
|
+
}
|
|
107
|
+
async softDelete(id) {
|
|
108
|
+
const now = Date.now();
|
|
109
|
+
const stmt = this.db.prepare('UPDATE scheduled_workflows SET deleted_at = ?, updated_at = ? WHERE id = ?');
|
|
110
|
+
stmt.run(now, now, id);
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
SQLiteWorkflowRepository = __decorate([
|
|
114
|
+
injectable(),
|
|
115
|
+
__metadata("design:paramtypes", [Object])
|
|
116
|
+
], SQLiteWorkflowRepository);
|
|
117
|
+
export { SQLiteWorkflowRepository };
|
|
@@ -5,10 +5,8 @@
|
|
|
5
5
|
* (screenshots, test outputs, terminal recordings) proving that
|
|
6
6
|
* completed tasks work as expected. Evidence files are saved to the
|
|
7
7
|
* shep home folder (~/.shep/repos/<hash>/evidence/). When commitEvidence
|
|
8
|
-
* is enabled, files are also committed to
|
|
9
|
-
* in the worktree.
|
|
10
|
-
* (shep-managed mode), commitEvidence is forced to false since git
|
|
11
|
-
* cannot track files outside the worktree. The agent outputs a structured JSON manifest of
|
|
8
|
+
* is enabled, files are also committed to specs/<NNN>-<feature>/evidence/
|
|
9
|
+
* in the worktree. The agent outputs a structured JSON manifest of
|
|
12
10
|
* evidence records that the evidence-output-parser extracts for the
|
|
13
11
|
* graph state.
|
|
14
12
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evidence-prompts.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"evidence-prompts.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,MAAM,WAAW,qBAAqB;IACpC,kEAAkE;IAClE,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,iBAAiB,EACxB,OAAO,GAAE,qBAAiD,GACzD,MAAM,CAoNR;AAgCD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,eAAe,EAAE,EACzB,OAAO,GAAE,qBAAiD,GACzD,MAAM,CAsBR"}
|
|
@@ -5,10 +5,8 @@
|
|
|
5
5
|
* (screenshots, test outputs, terminal recordings) proving that
|
|
6
6
|
* completed tasks work as expected. Evidence files are saved to the
|
|
7
7
|
* shep home folder (~/.shep/repos/<hash>/evidence/). When commitEvidence
|
|
8
|
-
* is enabled, files are also committed to
|
|
9
|
-
* in the worktree.
|
|
10
|
-
* (shep-managed mode), commitEvidence is forced to false since git
|
|
11
|
-
* cannot track files outside the worktree. The agent outputs a structured JSON manifest of
|
|
8
|
+
* is enabled, files are also committed to specs/<NNN>-<feature>/evidence/
|
|
9
|
+
* in the worktree. The agent outputs a structured JSON manifest of
|
|
12
10
|
* evidence records that the evidence-output-parser extracts for the
|
|
13
11
|
* graph state.
|
|
14
12
|
*/
|
|
@@ -47,12 +45,7 @@ ${tasksContent}
|
|
|
47
45
|
const relativeSpecDir = relative(cwd, state.specDir).replaceAll('\\', '/');
|
|
48
46
|
const specEvidenceRelPath = `${relativeSpecDir}/evidence`;
|
|
49
47
|
const specEvidenceAbsPath = join(state.specDir, 'evidence').replaceAll('\\', '/');
|
|
50
|
-
|
|
51
|
-
// In shep-managed mode, relative() produces paths starting with '..' which escape
|
|
52
|
-
// the worktree boundary, making git operations invalid.
|
|
53
|
-
const isSpecDirOutsideWorktree = relativeSpecDir.startsWith('..');
|
|
54
|
-
const effectiveCommitEvidence = isSpecDirOutsideWorktree ? false : options.commitEvidence;
|
|
55
|
-
const storageSection = effectiveCommitEvidence
|
|
48
|
+
const storageSection = options.commitEvidence
|
|
56
49
|
? `## Evidence Storage
|
|
57
50
|
|
|
58
51
|
Save all evidence files to BOTH locations:
|
|
@@ -74,7 +67,7 @@ Save all evidence files to the shep home folder:
|
|
|
74
67
|
1. Create the directory if it does not exist: \`mkdir -p ${shepEvidenceDir}/\`
|
|
75
68
|
2. Save each evidence file with a descriptive name (e.g., \`homepage-screenshot.png\`, \`unit-test-results.txt\`)
|
|
76
69
|
3. In the output JSON, set relativePath to the absolute path in the shep home folder (e.g., \`${shepEvidenceDir}/homepage-screenshot.png\`)`;
|
|
77
|
-
const commitSection =
|
|
70
|
+
const commitSection = options.commitEvidence
|
|
78
71
|
? `\n${buildCommitPushBlock({
|
|
79
72
|
push: state.push,
|
|
80
73
|
files: [`${specEvidenceRelPath}/`],
|
|
@@ -86,7 +79,7 @@ Do NOT commit or push any evidence files. Evidence is stored locally only.
|
|
|
86
79
|
However, if you make code fixes during evidence collection, those fixes MUST be committed (see "Handling Code Fixes" above).`;
|
|
87
80
|
return `You are a senior software engineer performing the EVIDENCE COLLECTION phase of feature development.
|
|
88
81
|
|
|
89
|
-
Your goal is to capture visual and textual evidence proving that the implemented tasks work as expected.${
|
|
82
|
+
Your goal is to capture visual and textual evidence proving that the implemented tasks work as expected.${options.commitEvidence ? ' This evidence will be embedded in the pull request body for reviewer verification.' : ' This evidence will be available for review locally.'}
|
|
90
83
|
|
|
91
84
|
${specSection}
|
|
92
85
|
${tasksSection}
|
|
@@ -182,14 +175,14 @@ After capturing all evidence, output a JSON array of evidence records in a fence
|
|
|
182
175
|
"type": "Screenshot",
|
|
183
176
|
"capturedAt": "2026-01-01T12:00:00Z",
|
|
184
177
|
"description": "Homepage showing new feature banner",
|
|
185
|
-
"relativePath": "${
|
|
178
|
+
"relativePath": "${options.commitEvidence ? `${specEvidenceRelPath}/homepage-banner.png` : `${shepEvidenceDir}/homepage-banner.png`}",
|
|
186
179
|
"taskRef": "task-1"
|
|
187
180
|
},
|
|
188
181
|
{
|
|
189
182
|
"type": "TestOutput",
|
|
190
183
|
"capturedAt": "2026-01-01T12:01:00Z",
|
|
191
184
|
"description": "Unit test results — all 42 tests passing",
|
|
192
|
-
"relativePath": "${
|
|
185
|
+
"relativePath": "${options.commitEvidence ? `${specEvidenceRelPath}/unit-test-results.txt` : `${shepEvidenceDir}/unit-test-results.txt`}",
|
|
193
186
|
"taskRef": "task-2"
|
|
194
187
|
}
|
|
195
188
|
]
|
|
@@ -199,7 +192,7 @@ Each evidence record must have:
|
|
|
199
192
|
- **type**: One of Screenshot, Video, TestOutput, TerminalRecording
|
|
200
193
|
- **capturedAt**: ISO 8601 timestamp of when the evidence was captured
|
|
201
194
|
- **description**: Human-readable description of what this evidence proves
|
|
202
|
-
- **relativePath**: ${
|
|
195
|
+
- **relativePath**: ${options.commitEvidence ? `Path relative to the repo root (must start with \`${specEvidenceRelPath}/\`)` : `Absolute path in the shep home evidence folder (must start with \`${shepEvidenceDir}/\`)`}
|
|
203
196
|
- **taskRef**: (optional) Reference to the task ID this evidence proves
|
|
204
197
|
|
|
205
198
|
If no evidence can be captured (e.g., no UI to screenshot, no tests to run), output an empty JSON array:
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Real Clock Service
|
|
3
|
+
*
|
|
4
|
+
* Infrastructure implementation of IClock that returns the actual system time.
|
|
5
|
+
* Used in production; tests substitute a MockClock for deterministic behavior.
|
|
6
|
+
*/
|
|
7
|
+
import type { IClock } from '../../application/ports/output/services/clock.interface.js';
|
|
8
|
+
export declare class RealClock implements IClock {
|
|
9
|
+
now(): Date;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=clock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/services/clock.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4DAA4D,CAAC;AAEzF,qBACa,SAAU,YAAW,MAAM;IACtC,GAAG,IAAI,IAAI;CAGZ"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Real Clock Service
|
|
3
|
+
*
|
|
4
|
+
* Infrastructure implementation of IClock that returns the actual system time.
|
|
5
|
+
* Used in production; tests substitute a MockClock for deterministic behavior.
|
|
6
|
+
*/
|
|
7
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
8
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
10
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
11
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
12
|
+
};
|
|
13
|
+
import { injectable } from 'tsyringe';
|
|
14
|
+
let RealClock = class RealClock {
|
|
15
|
+
now() {
|
|
16
|
+
return new Date();
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
RealClock = __decorate([
|
|
20
|
+
injectable()
|
|
21
|
+
], RealClock);
|
|
22
|
+
export { RealClock };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/git/worktree.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,0EAA0E,CAAC;AAQlF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEjD,qBACa,eAAgB,YAAW,gBAAgB;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,YAAY;IAErE,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC;IAuBlB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAoB1F,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAW9E,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAO/C,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWhE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWtE,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAuBjD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwC1D,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"worktree.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/git/worktree.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,0EAA0E,CAAC;AAQlF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEjD,qBACa,eAAgB,YAAW,gBAAgB;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,YAAY;IAErE,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC;IAuBlB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAoB1F,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAW9E,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAO/C,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWhE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWtE,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAuBjD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwC1D,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAQzD,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,aAAa;IAgCrB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,qBAAqB;CAsB9B"}
|
|
@@ -17,10 +17,10 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
17
17
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
18
18
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
19
19
|
};
|
|
20
|
+
import { createHash } from 'node:crypto';
|
|
20
21
|
import { mkdirSync, realpathSync } from 'node:fs';
|
|
21
22
|
import path from 'node:path';
|
|
22
23
|
import { injectable, inject } from 'tsyringe';
|
|
23
|
-
import { computeRepoHash } from '../filesystem/repo-hash.js';
|
|
24
24
|
const GIT_AUTO_INIT_USER = 'shep-ai[bot]';
|
|
25
25
|
const GIT_AUTO_INIT_EMAIL = 'bot@shep.bot';
|
|
26
26
|
import { WorktreeError, WorktreeErrorCode, } from '../../../application/ports/output/services/worktree-service.interface.js';
|
|
@@ -178,7 +178,9 @@ let WorktreeService = class WorktreeService {
|
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
180
|
getWorktreePath(repoPath, branch) {
|
|
181
|
-
|
|
181
|
+
// Normalize separators before hashing so C:\foo and C:/foo produce the same hash
|
|
182
|
+
const normalizedRepoPath = repoPath.replace(/\\/g, '/');
|
|
183
|
+
const repoHash = createHash('sha256').update(normalizedRepoPath).digest('hex').slice(0, 16);
|
|
182
184
|
const slug = branch.replace(/\//g, '-');
|
|
183
185
|
return path.join(getShepHomeDir(), 'repos', repoHash, 'wt', slug).replace(/\\/g, '/');
|
|
184
186
|
}
|
package/dist/packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compute-worktree-path.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"compute-worktree-path.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAM5E"}
|
package/dist/packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.js
CHANGED
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Path format: ~/.shep/repos/<sha256-hash-prefix>/wt/<branch-slug>
|
|
8
8
|
*/
|
|
9
|
+
import { createHash } from 'node:crypto';
|
|
9
10
|
import { join } from 'node:path';
|
|
10
11
|
import { getShepHomeDir } from '../filesystem/shep-directory.service.js';
|
|
11
|
-
import { computeRepoHash } from '../filesystem/repo-hash.js';
|
|
12
12
|
/**
|
|
13
13
|
* Compute the worktree path for a given repository and branch.
|
|
14
14
|
*
|
|
@@ -17,7 +17,9 @@ import { computeRepoHash } from '../filesystem/repo-hash.js';
|
|
|
17
17
|
* @returns Absolute path to the worktree directory under ~/.shep/repos/
|
|
18
18
|
*/
|
|
19
19
|
export function computeWorktreePath(repoPath, branch) {
|
|
20
|
-
|
|
20
|
+
// Normalize separators before hashing so C:\foo and C:/foo produce the same hash
|
|
21
|
+
const normalizedRepoPath = repoPath.replace(/\\/g, '/');
|
|
22
|
+
const repoHash = createHash('sha256').update(normalizedRepoPath).digest('hex').slice(0, 16);
|
|
21
23
|
const slug = branch.replace(/\//g, '-');
|
|
22
24
|
return join(getShepHomeDir(), 'repos', repoHash, 'wt', slug).replace(/\\/g, '/');
|
|
23
25
|
}
|
package/dist/packages/core/src/infrastructure/services/notifications/notification.service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/notifications/notification.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,iBAAiB,EAElB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8EAA8E,CAAC;AAEzH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"notification.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/notifications/notification.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,iBAAiB,EAElB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8EAA8E,CAAC;AAEzH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAmB7D,qBAAa,mBAAoB,YAAW,oBAAoB;IAC9D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAEtC,GAAG,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe;IAKlE,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;CAiBvC"}
|
package/dist/packages/core/src/infrastructure/services/notifications/notification.service.js
CHANGED
|
@@ -22,6 +22,9 @@ const EVENT_TYPE_TO_CONFIG_KEY = {
|
|
|
22
22
|
[NotificationEventType.PrChecksFailed]: 'prChecksFailed',
|
|
23
23
|
[NotificationEventType.PrBlocked]: 'prBlocked',
|
|
24
24
|
[NotificationEventType.MergeReviewReady]: 'mergeReviewReady',
|
|
25
|
+
[NotificationEventType.WorkflowStarted]: 'workflowStarted',
|
|
26
|
+
[NotificationEventType.WorkflowCompleted]: 'workflowCompleted',
|
|
27
|
+
[NotificationEventType.WorkflowFailed]: 'workflowFailed',
|
|
25
28
|
};
|
|
26
29
|
export class NotificationService {
|
|
27
30
|
bus;
|
|
@@ -5,27 +5,13 @@
|
|
|
5
5
|
* Templates match exactly what /shep-kit:new-feature produces,
|
|
6
6
|
* enabling dogfooding — the CLI and the skill use the same spec format.
|
|
7
7
|
*/
|
|
8
|
-
import type { ISpecInitializerService,
|
|
8
|
+
import type { ISpecInitializerService, SpecInitializerResult } from '../../../application/ports/output/services/spec-initializer.interface.js';
|
|
9
9
|
export declare class SpecInitializerService implements ISpecInitializerService {
|
|
10
|
-
initialize(basePath: string, slug: string, featureNumber: number, description: string, mode?: 'fast'
|
|
10
|
+
initialize(basePath: string, slug: string, featureNumber: number, description: string, mode?: 'fast'): Promise<SpecInitializerResult>;
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
*/
|
|
14
|
-
private computeSpecDir;
|
|
15
|
-
/**
|
|
16
|
-
* Scan spec directories for existing NNN-* entries and return the next available number.
|
|
17
|
-
* Scans up to 3 locations to prevent collisions during the transition period:
|
|
18
|
-
* 1. specs/ (legacy location)
|
|
19
|
-
* 2. .shep/specs/ (new in-repo location)
|
|
20
|
-
* 3. ~/.shep/repos/<hash>/specs/ (shep-managed location, when repositoryPath provided)
|
|
21
|
-
*
|
|
12
|
+
* Scan specs/ for existing NNN-* directories and return the next available number.
|
|
22
13
|
* Uses the DB-derived hint as a minimum, but always respects filesystem state.
|
|
23
14
|
*/
|
|
24
15
|
private resolveNextNumber;
|
|
25
|
-
/**
|
|
26
|
-
* Scan a single directory for NNN-* prefixed entries and return the max number found.
|
|
27
|
-
* Returns 0 if the directory does not exist or is empty.
|
|
28
|
-
*/
|
|
29
|
-
private scanDirForMaxNumber;
|
|
30
16
|
}
|
|
31
17
|
//# sourceMappingURL=spec-initializer.service.d.ts.map
|
package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-initializer.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/spec/spec-initializer.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,uBAAuB,EACvB,
|
|
1
|
+
{"version":3,"file":"spec-initializer.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/spec/spec-initializer.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,mEAAmE,CAAC;AA8P3E,qBAAa,sBAAuB,YAAW,uBAAuB;IAC9D,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,qBAAqB,CAAC;IAqCjC;;;OAGG;YACW,iBAAiB;CAoBhC"}
|
|
@@ -7,8 +7,6 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { mkdir, readdir, writeFile } from 'node:fs/promises';
|
|
9
9
|
import { join } from 'node:path';
|
|
10
|
-
import { computeRepoHash } from '../../services/filesystem/repo-hash.js';
|
|
11
|
-
import { getShepHomeDir } from '../../services/filesystem/shep-directory.service.js';
|
|
12
10
|
/**
|
|
13
11
|
* Pad a number to 3 digits with leading zeros.
|
|
14
12
|
*/
|
|
@@ -242,14 +240,13 @@ const TEMPLATES = [
|
|
|
242
240
|
{ filename: 'feature.yaml', content: FEATURE_YAML },
|
|
243
241
|
];
|
|
244
242
|
export class SpecInitializerService {
|
|
245
|
-
async initialize(basePath, slug, featureNumber, description, mode
|
|
246
|
-
|
|
247
|
-
// Scan existing spec directories for highest NNN prefix to avoid collisions
|
|
243
|
+
async initialize(basePath, slug, featureNumber, description, mode) {
|
|
244
|
+
// Scan existing specs/ directory for highest NNN prefix to avoid collisions
|
|
248
245
|
// (specs may have been created outside the DB, e.g., via /shep-kit:new-feature)
|
|
249
|
-
const resolvedNumber = await this.resolveNextNumber(basePath, featureNumber
|
|
246
|
+
const resolvedNumber = await this.resolveNextNumber(basePath, featureNumber);
|
|
250
247
|
const nnn = padNumber(resolvedNumber);
|
|
251
248
|
const specDirName = `${nnn}-${slug}`;
|
|
252
|
-
const specDir =
|
|
249
|
+
const specDir = join(basePath, 'specs', specDirName);
|
|
253
250
|
// Create the spec directory
|
|
254
251
|
await mkdir(specDir, { recursive: true });
|
|
255
252
|
const now = new Date();
|
|
@@ -266,59 +263,26 @@ export class SpecInitializerService {
|
|
|
266
263
|
return { specDir, featureNumber: nnn };
|
|
267
264
|
}
|
|
268
265
|
/**
|
|
269
|
-
*
|
|
270
|
-
*/
|
|
271
|
-
computeSpecDir(basePath, specDirName, storageMode, repositoryPath) {
|
|
272
|
-
if (storageMode === 'shep-managed') {
|
|
273
|
-
if (!repositoryPath) {
|
|
274
|
-
throw new Error('repositoryPath is required when storageMode is shep-managed');
|
|
275
|
-
}
|
|
276
|
-
const repoHash = computeRepoHash(repositoryPath);
|
|
277
|
-
return join(getShepHomeDir(), 'repos', repoHash, 'specs', specDirName);
|
|
278
|
-
}
|
|
279
|
-
return join(basePath, '.shep', 'specs', specDirName);
|
|
280
|
-
}
|
|
281
|
-
/**
|
|
282
|
-
* Scan spec directories for existing NNN-* entries and return the next available number.
|
|
283
|
-
* Scans up to 3 locations to prevent collisions during the transition period:
|
|
284
|
-
* 1. specs/ (legacy location)
|
|
285
|
-
* 2. .shep/specs/ (new in-repo location)
|
|
286
|
-
* 3. ~/.shep/repos/<hash>/specs/ (shep-managed location, when repositoryPath provided)
|
|
287
|
-
*
|
|
266
|
+
* Scan specs/ for existing NNN-* directories and return the next available number.
|
|
288
267
|
* Uses the DB-derived hint as a minimum, but always respects filesystem state.
|
|
289
268
|
*/
|
|
290
|
-
async resolveNextNumber(basePath, hint
|
|
291
|
-
const
|
|
292
|
-
if (repositoryPath) {
|
|
293
|
-
const repoHash = computeRepoHash(repositoryPath);
|
|
294
|
-
dirsToScan.push(join(getShepHomeDir(), 'repos', repoHash, 'specs'));
|
|
295
|
-
}
|
|
296
|
-
let maxExisting = 0;
|
|
297
|
-
for (const dir of dirsToScan) {
|
|
298
|
-
const max = await this.scanDirForMaxNumber(dir);
|
|
299
|
-
maxExisting = Math.max(maxExisting, max);
|
|
300
|
-
}
|
|
301
|
-
return Math.max(maxExisting + 1, hint);
|
|
302
|
-
}
|
|
303
|
-
/**
|
|
304
|
-
* Scan a single directory for NNN-* prefixed entries and return the max number found.
|
|
305
|
-
* Returns 0 if the directory does not exist or is empty.
|
|
306
|
-
*/
|
|
307
|
-
async scanDirForMaxNumber(dirPath) {
|
|
269
|
+
async resolveNextNumber(basePath, hint) {
|
|
270
|
+
const specsDir = join(basePath, 'specs');
|
|
308
271
|
let entries;
|
|
309
272
|
try {
|
|
310
|
-
entries = await readdir(
|
|
273
|
+
entries = await readdir(specsDir);
|
|
311
274
|
}
|
|
312
275
|
catch {
|
|
313
|
-
|
|
276
|
+
// specs/ doesn't exist yet — use hint
|
|
277
|
+
return hint;
|
|
314
278
|
}
|
|
315
|
-
let
|
|
279
|
+
let maxExisting = 0;
|
|
316
280
|
for (const entry of entries) {
|
|
317
281
|
const match = entry.match(/^(\d{3})-/);
|
|
318
282
|
if (match) {
|
|
319
|
-
|
|
283
|
+
maxExisting = Math.max(maxExisting, parseInt(match[1], 10));
|
|
320
284
|
}
|
|
321
285
|
}
|
|
322
|
-
return max;
|
|
286
|
+
return Math.max(maxExisting + 1, hint);
|
|
323
287
|
}
|
|
324
288
|
}
|