@shepai/cli 1.136.0-pr438.9e52ee5 → 1.136.0-pr439.2a7af41
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/Repository.yaml +3 -0
- package/apis/json-schema/WorkflowConfig.yaml +0 -5
- 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/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/services/git-pr-service.interface.d.ts +0 -28
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts +0 -37
- package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.js +0 -12
- package/dist/packages/core/src/application/ports/output/services/index.d.ts +4 -6
- package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/index.js +1 -2
- package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts +21 -5
- 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 +8 -2
- package/dist/packages/core/src/domain/generated/output.d.ts +4 -75
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +0 -4
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/repository.mapper.d.ts +1 -0
- 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 +2 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-spec-storage-mode.d.ts +12 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-spec-storage-mode.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-spec-storage-mode.js +19 -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 +6 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.d.ts +4 -2
- 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 +15 -8
- package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts +1 -3
- package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/external/github-repository.service.js +1 -37
- package/dist/packages/core/src/infrastructure/services/filesystem/repo-hash.d.ts +17 -0
- package/dist/packages/core/src/infrastructure/services/filesystem/repo-hash.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/filesystem/repo-hash.js +21 -0
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +1 -2
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +0 -21
- 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 +2 -4
- 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 +2 -4
- package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts +17 -3
- 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 +49 -13
- package/dist/src/presentation/cli/index.js +0 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -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/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_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/graph-data/route.js +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
- 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_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_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_client-reference-manifest.js +1 -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.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
- 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/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]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js.map +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]__6ec59045._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6ec59045._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__fdd058b2._.js → [root-of-the-server]__785e8499._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__fdd058b2._.js.map → [root-of-the-server]__785e8499._.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]__a5f9c6e5._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a5f9c6e5._.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]__718766da._.js → [root-of-the-server]__b1670307._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__718766da._.js.map → [root-of-the-server]__b1670307._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__68ce373c._.js → [root-of-the-server]__d68f61dd._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__68ce373c._.js.map → [root-of-the-server]__d68f61dd._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__47ded061._.js → [root-of-the-server]__f4e193d3._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__47ded061._.js.map → [root-of-the-server]__f4e193d3._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_02ec1aea._.js +1 -1
- package/web/.next/server/chunks/ssr/_02ec1aea._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_4dfa8bc3._.js → _32961561._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_4dfa8bc3._.js.map → _32961561._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_503680be._.js +3 -0
- package/web/.next/server/chunks/ssr/{_501af15d._.js.map → _503680be._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_7dca1882._.js +1 -1
- package/web/.next/server/chunks/ssr/_7dca1882._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_a9f57758._.js +1 -1
- package/web/.next/server/chunks/ssr/_a9f57758._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +1 -1
- 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/_e69a26ba._.js +4 -0
- package/web/.next/server/chunks/ssr/_e69a26ba._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_f39a1adb._.js +1 -1
- package/web/.next/server/chunks/ssr/_f39a1adb._.js.map +1 -1
- 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/src_presentation_web_06ffd221._.js +3 -0
- package/web/.next/server/chunks/ssr/{src_presentation_web_5c40524e._.js.map → src_presentation_web_06ffd221._.js.map} +1 -1
- 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__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 +39 -39
- package/web/.next/static/chunks/{5074c99e4cbb0b4c.js → 2bbb31a39a80d011.js} +1 -1
- package/web/.next/static/chunks/{29cefe3a2fa5573c.js → 5466ac7c8d7c6b2b.js} +1 -1
- package/web/.next/static/chunks/{fee7ef7b7b194025.js → 6daf875725c43e2c.js} +2 -2
- package/web/.next/static/chunks/{d03d87ed71050c43.js → 796bb98fb3f35b71.js} +1 -1
- package/web/.next/static/chunks/{a18c3f33018082cb.js → 991f2fcba923f3ed.js} +1 -1
- package/web/.next/static/chunks/{f86e433dbea0ca20.js → af4d1051b6fa73d5.js} +1 -1
- package/web/.next/static/chunks/{bb15bf7fcedc3a8d.js → c317cd6a6f76361d.js} +1 -1
- package/web/.next/static/chunks/{10d405c1707bb323.js → d0be9b22c3b9bce8.js} +1 -1
- package/web/.next/static/chunks/db862617e62ba1f9.js +1 -0
- package/web/.next/static/chunks/{3de3ea3b101bf406.js → e15904973d49ff89.js} +1 -1
- package/web/.next/static/chunks/{5a7a5794e1ece049.js → e6cff1dacc561fa0.js} +1 -1
- package/web/.next/static/chunks/{546a7dc733f92913.js → e8d49a8e1274cb49.js} +1 -1
- package/apis/json-schema/DoctorDiagnosticReport.yaml +0 -30
- package/apis/json-schema/FailedRunSummary.yaml +0 -22
- package/apis/json-schema/SystemInfo.yaml +0 -22
- package/dist/packages/core/src/application/ports/output/services/github-issue-service.interface.d.ts +0 -57
- package/dist/packages/core/src/application/ports/output/services/github-issue-service.interface.d.ts.map +0 -1
- package/dist/packages/core/src/application/ports/output/services/github-issue-service.interface.js +0 -39
- package/dist/packages/core/src/application/use-cases/doctor/doctor-diagnose.use-case.d.ts +0 -56
- package/dist/packages/core/src/application/use-cases/doctor/doctor-diagnose.use-case.d.ts.map +0 -1
- package/dist/packages/core/src/application/use-cases/doctor/doctor-diagnose.use-case.js +0 -294
- package/dist/packages/core/src/infrastructure/services/external/github-issue-creator.service.d.ts +0 -17
- package/dist/packages/core/src/infrastructure/services/external/github-issue-creator.service.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/external/github-issue-creator.service.js +0 -69
- package/dist/src/presentation/cli/commands/doctor.command.d.ts +0 -20
- package/dist/src/presentation/cli/commands/doctor.command.d.ts.map +0 -1
- package/dist/src/presentation/cli/commands/doctor.command.js +0 -129
- package/web/.next/server/chunks/ssr/_501af15d._.js +0 -3
- package/web/.next/server/chunks/ssr/_75d1e2c9._.js +0 -4
- package/web/.next/server/chunks/ssr/_75d1e2c9._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_5c40524e._.js +0 -3
- package/web/.next/static/chunks/499c19f1bac689cf.js +0 -1
- /package/web/.next/static/{u2GE3dKD5GVgXCtUA64to → xpAWvEAtoYdP3klvh5Yyo}/_buildManifest.js +0 -0
- /package/web/.next/static/{u2GE3dKD5GVgXCtUA64to → xpAWvEAtoYdP3klvh5Yyo}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{u2GE3dKD5GVgXCtUA64to → xpAWvEAtoYdP3klvh5Yyo}/_ssgManifest.js +0 -0
|
@@ -7,6 +7,8 @@
|
|
|
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';
|
|
10
12
|
/**
|
|
11
13
|
* Pad a number to 3 digits with leading zeros.
|
|
12
14
|
*/
|
|
@@ -240,13 +242,14 @@ const TEMPLATES = [
|
|
|
240
242
|
{ filename: 'feature.yaml', content: FEATURE_YAML },
|
|
241
243
|
];
|
|
242
244
|
export class SpecInitializerService {
|
|
243
|
-
async initialize(basePath, slug, featureNumber, description, mode) {
|
|
244
|
-
|
|
245
|
+
async initialize(basePath, slug, featureNumber, description, mode, options) {
|
|
246
|
+
const storageMode = options?.storageMode ?? 'in-repo';
|
|
247
|
+
// Scan existing spec directories for highest NNN prefix to avoid collisions
|
|
245
248
|
// (specs may have been created outside the DB, e.g., via /shep-kit:new-feature)
|
|
246
|
-
const resolvedNumber = await this.resolveNextNumber(basePath, featureNumber);
|
|
249
|
+
const resolvedNumber = await this.resolveNextNumber(basePath, featureNumber, options?.repositoryPath);
|
|
247
250
|
const nnn = padNumber(resolvedNumber);
|
|
248
251
|
const specDirName = `${nnn}-${slug}`;
|
|
249
|
-
const specDir =
|
|
252
|
+
const specDir = this.computeSpecDir(basePath, specDirName, storageMode, options?.repositoryPath);
|
|
250
253
|
// Create the spec directory
|
|
251
254
|
await mkdir(specDir, { recursive: true });
|
|
252
255
|
const now = new Date();
|
|
@@ -263,26 +266,59 @@ export class SpecInitializerService {
|
|
|
263
266
|
return { specDir, featureNumber: nnn };
|
|
264
267
|
}
|
|
265
268
|
/**
|
|
266
|
-
*
|
|
269
|
+
* Compute the spec directory path based on storage mode.
|
|
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
|
+
*
|
|
267
288
|
* Uses the DB-derived hint as a minimum, but always respects filesystem state.
|
|
268
289
|
*/
|
|
269
|
-
async resolveNextNumber(basePath, hint) {
|
|
270
|
-
const
|
|
290
|
+
async resolveNextNumber(basePath, hint, repositoryPath) {
|
|
291
|
+
const dirsToScan = [join(basePath, 'specs'), join(basePath, '.shep', 'specs')];
|
|
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) {
|
|
271
308
|
let entries;
|
|
272
309
|
try {
|
|
273
|
-
entries = await readdir(
|
|
310
|
+
entries = await readdir(dirPath);
|
|
274
311
|
}
|
|
275
312
|
catch {
|
|
276
|
-
|
|
277
|
-
return hint;
|
|
313
|
+
return 0;
|
|
278
314
|
}
|
|
279
|
-
let
|
|
315
|
+
let max = 0;
|
|
280
316
|
for (const entry of entries) {
|
|
281
317
|
const match = entry.match(/^(\d{3})-/);
|
|
282
318
|
if (match) {
|
|
283
|
-
|
|
319
|
+
max = Math.max(max, parseInt(match[1], 10));
|
|
284
320
|
}
|
|
285
321
|
}
|
|
286
|
-
return
|
|
322
|
+
return max;
|
|
287
323
|
}
|
|
288
324
|
}
|
|
@@ -42,7 +42,6 @@ import { createIdeOpenCommand } from './commands/ide-open.command.js';
|
|
|
42
42
|
import { createInstallCommand } from './commands/install.command.js';
|
|
43
43
|
import { createUpgradeCommand } from './commands/upgrade.command.js';
|
|
44
44
|
import { createToolsCommand } from './commands/tools.command.js';
|
|
45
|
-
import { createDoctorCommand } from './commands/doctor.command.js';
|
|
46
45
|
import { messages } from './ui/index.js';
|
|
47
46
|
// Daemon lifecycle commands
|
|
48
47
|
import { createStartCommand } from './commands/start.command.js';
|
|
@@ -111,7 +110,6 @@ async function bootstrap() {
|
|
|
111
110
|
program.addCommand(createInstallCommand());
|
|
112
111
|
program.addCommand(createToolsCommand());
|
|
113
112
|
program.addCommand(createUpgradeCommand());
|
|
114
|
-
program.addCommand(createDoctorCommand());
|
|
115
113
|
// Daemon lifecycle commands (task-9)
|
|
116
114
|
program.addCommand(createStartCommand());
|
|
117
115
|
program.addCommand(createStopCommand());
|