@shepai/cli 1.136.0 → 1.136.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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 +1 -1
- package/dist/packages/core/src/application/use-cases/features/create/metadata-generator.d.ts +12 -1
- package/dist/packages/core/src/application/use-cases/features/create/metadata-generator.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/create/metadata-generator.js +61 -4
- 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 +2 -2
- package/web/.next/required-server-files.json +2 -2
- 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.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.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.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.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.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.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.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.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.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.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/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/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__b4102cc7._.js +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]__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]__47ded061._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__47ded061._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__68ce373c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__68ce373c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__718766da._.js +1 -1
- package/web/.next/server/chunks/ssr/[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]__a5f9c6e5._.js +2 -2
- 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]__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]__fdd058b2._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdd058b2._.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/{_e700d6a8._.js → _3a8b11f5._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_e700d6a8._.js.map → _3a8b11f5._.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/_d8575088._.js +1 -1
- package/web/.next/server/chunks/ssr/_d8575088._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_e69a26ba._.js +1 -1
- 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/{_aec44907._.js → _fafd03ec._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_aec44907._.js.map → _fafd03ec._.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_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_d8202508._.js → src_presentation_web_9d7292c4._.js} +2 -2
- package/web/.next/server/chunks/ssr/{src_presentation_web_d8202508._.js.map → src_presentation_web_9d7292c4._.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/{90af5015ea1684d2.js → 1ccea0ca4cca00f7.js} +1 -1
- package/web/.next/static/chunks/{3e571ee5f5afd401.js → 4938159e46498d00.js} +1 -1
- package/web/.next/static/chunks/{75d552e0e611e3f4.js → 5e66bfba061db621.js} +2 -2
- package/web/.next/static/chunks/{07ea878c8d769b40.js → 68351a1fb1e57d86.js} +1 -1
- package/web/.next/static/chunks/73fd16bb130a559c.js +1 -0
- package/web/.next/static/chunks/9f3f53cc48fa1ccf.js +2 -0
- package/web/.next/static/chunks/{4916dcd902d80072.js → a21d883baebd7bdb.js} +1 -1
- package/web/.next/static/chunks/{ff9b5942b2cae4f7.js → c2311839bfa63e4a.js} +1 -1
- package/web/.next/static/chunks/{ae5bf7c402bb02ad.js → d11f1dbba7daafbd.js} +1 -1
- package/web/.next/static/chunks/{00754162862ab75f.js → d44bf63a94fd5d79.js} +1 -1
- package/web/.next/static/chunks/{3d6119fadfa8596f.js → e370f42e84b4ac0d.js} +1 -1
- package/web/.next/static/chunks/{a17edbc379ad2f40.js → e84d2b794f97eb3a.js} +1 -1
- package/web/.next/static/chunks/1693f840144b12bb.js +0 -2
- package/web/.next/static/chunks/98888e44c7c02a19.js +0 -1
- /package/web/.next/static/{PlnxcoPHipclEMFHMWF11 → Ywxn_J9lSl6kCndILP_ke}/_buildManifest.js +0 -0
- /package/web/.next/static/{PlnxcoPHipclEMFHMWF11 → Ywxn_J9lSl6kCndILP_ke}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{PlnxcoPHipclEMFHMWF11 → Ywxn_J9lSl6kCndILP_ke}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/create-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAMtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oEAAoE,CAAC;AAC7G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AACrG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iEAAiE,CAAC;AACnH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gEAAgE,CAAC;AAC1G,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8DAA8D,CAAC;AAC5G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uEAAuE,CAAC;AACnH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4DAA4D,CAAC;AAChG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2DAA2D,CAAC;AAGjG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mEAAmE,CAAC;AAC7G,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE9F,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,cAAc;gBApBd,WAAW,EAAE,kBAAkB,EAE/B,eAAe,EAAE,gBAAgB,EAEjC,YAAY,EAAE,2BAA2B,EAEzC,aAAa,EAAE,mBAAmB,EAElC,eAAe,EAAE,uBAAuB,EAExC,iBAAiB,EAAE,iBAAiB,EAEpC,YAAY,EAAE,YAAY,EAE1B,cAAc,EAAE,qBAAqB,EAErC,YAAY,EAAE,aAAa,EAE3B,iBAAiB,EAAE,wBAAwB,EAE3C,cAAc,EAAE,eAAe;IAGlD;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMtE;;;;OAIG;IACG,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmI1E;;;OAGG;IACG,kBAAkB,CACtB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,kBAAkB,EACzB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"create-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/create-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAMtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oEAAoE,CAAC;AAC7G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AACrG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iEAAiE,CAAC;AACnH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gEAAgE,CAAC;AAC1G,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8DAA8D,CAAC;AAC5G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uEAAuE,CAAC;AACnH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4DAA4D,CAAC;AAChG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2DAA2D,CAAC;AAGjG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mEAAmE,CAAC;AAC7G,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE9F,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,cAAc;gBApBd,WAAW,EAAE,kBAAkB,EAE/B,eAAe,EAAE,gBAAgB,EAEjC,YAAY,EAAE,2BAA2B,EAEzC,aAAa,EAAE,mBAAmB,EAElC,eAAe,EAAE,uBAAuB,EAExC,iBAAiB,EAAE,iBAAiB,EAEpC,YAAY,EAAE,YAAY,EAE1B,cAAc,EAAE,qBAAqB,EAErC,YAAY,EAAE,aAAa,EAE3B,iBAAiB,EAAE,wBAAwB,EAE3C,cAAc,EAAE,eAAe;IAGlD;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMtE;;;;OAIG;IACG,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmI1E;;;OAGG;IACG,kBAAkB,CACtB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,kBAAkB,EACzB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAC;CAiI1D"}
|
package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js
CHANGED
|
@@ -197,7 +197,7 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
|
|
|
197
197
|
const effectiveRepoPath = feature.repositoryPath;
|
|
198
198
|
// Ensure the target directory is a git repository (auto-init if needed)
|
|
199
199
|
await this.worktreeService.ensureGitRepository(effectiveRepoPath);
|
|
200
|
-
const metadata = await this.metadataGenerator.generateMetadata(input.userInput, input.agentType);
|
|
200
|
+
const metadata = await this.metadataGenerator.generateMetadata(input.userInput, input.agentType, effectiveRepoPath);
|
|
201
201
|
const originalSlug = metadata.slug;
|
|
202
202
|
const { slug, branch, warning } = await this.slugResolver.resolveUniqueSlug(originalSlug, effectiveRepoPath);
|
|
203
203
|
// Determine next feature number for this repo
|
package/dist/packages/core/src/application/use-cases/features/create/metadata-generator.d.ts
CHANGED
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generates feature metadata (slug, name, description) from user input
|
|
5
5
|
* via AI call through IStructuredAgentCaller.
|
|
6
|
+
* When the user input references a file (e.g. SPEC.md), the file content
|
|
7
|
+
* is read and included in the prompt so the AI derives metadata from the
|
|
8
|
+
* actual file rather than the bare reference string.
|
|
6
9
|
* Errors are propagated to the caller.
|
|
7
10
|
*/
|
|
8
11
|
import type { AgentType } from '../../../../domain/generated/output.js';
|
|
@@ -17,9 +20,17 @@ export declare class MetadataGenerator {
|
|
|
17
20
|
constructor(structuredCaller: IStructuredAgentCaller);
|
|
18
21
|
/**
|
|
19
22
|
* Generate feature metadata from user input via AI.
|
|
23
|
+
* When repositoryPath is provided, file references in the user input
|
|
24
|
+
* (e.g. "Develop based on the current SPEC.md") are resolved and their
|
|
25
|
+
* content is included in the prompt.
|
|
20
26
|
* Errors are propagated to the caller.
|
|
21
27
|
*/
|
|
22
|
-
generateMetadata(userInput: string, agentType?: AgentType): Promise<FeatureMetadata>;
|
|
28
|
+
generateMetadata(userInput: string, agentType?: AgentType, repositoryPath?: string): Promise<FeatureMetadata>;
|
|
29
|
+
/**
|
|
30
|
+
* Detect a file reference in user input and read the file content.
|
|
31
|
+
* Returns the file content if found and readable, undefined otherwise.
|
|
32
|
+
*/
|
|
33
|
+
resolveFileReference(userInput: string, repositoryPath: string): string | undefined;
|
|
23
34
|
/**
|
|
24
35
|
* Extract metadata locally from user input without AI.
|
|
25
36
|
* Used as fallback when the AI call fails or returns invalid data.
|
package/dist/packages/core/src/application/use-cases/features/create/metadata-generator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-generator.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/metadata-generator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"metadata-generator.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/metadata-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mEAAmE,CAAC;AAEhH,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AA2BD,qBACa,iBAAiB;IAG1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,sBAAsB;IAG3D;;;;;;OAMG;IACG,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,SAAS,EACrB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,eAAe,CAAC;IAoD3B;;;OAGG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IA8BnF;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAU9B;;;OAGG;IACH,OAAO,CAAC,MAAM;CAgBf"}
|
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generates feature metadata (slug, name, description) from user input
|
|
5
5
|
* via AI call through IStructuredAgentCaller.
|
|
6
|
+
* When the user input references a file (e.g. SPEC.md), the file content
|
|
7
|
+
* is read and included in the prompt so the AI derives metadata from the
|
|
8
|
+
* actual file rather than the bare reference string.
|
|
6
9
|
* Errors are propagated to the caller.
|
|
7
10
|
*/
|
|
8
11
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
@@ -18,8 +21,18 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
18
21
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
19
22
|
};
|
|
20
23
|
import { injectable, inject } from 'tsyringe';
|
|
24
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
25
|
+
import { join, isAbsolute } from 'node:path';
|
|
21
26
|
/** Maximum characters of user input sent to the AI for metadata generation. */
|
|
22
27
|
const MAX_INPUT_FOR_AI = 500;
|
|
28
|
+
/** Maximum characters of file content included in the AI prompt. */
|
|
29
|
+
const MAX_FILE_CONTENT_FOR_AI = 4000;
|
|
30
|
+
/**
|
|
31
|
+
* Pattern that matches user input referencing a file for feature definition.
|
|
32
|
+
* Captures the filename in group 1. Case-insensitive.
|
|
33
|
+
* Examples: "Develop based on the current SPEC.md", "based on SPEC.md", "use ./docs/SPEC.md"
|
|
34
|
+
*/
|
|
35
|
+
const FILE_REFERENCE_PATTERN = /(?:based\s+on|from|use|using|see|refer\s+to|according\s+to)[\s]+(?:the\s+)?(?:current\s+)?(\S+\.(?:md|txt|yaml|yml))/i;
|
|
23
36
|
const METADATA_SCHEMA = {
|
|
24
37
|
type: 'object',
|
|
25
38
|
properties: {
|
|
@@ -37,18 +50,30 @@ let MetadataGenerator = class MetadataGenerator {
|
|
|
37
50
|
}
|
|
38
51
|
/**
|
|
39
52
|
* Generate feature metadata from user input via AI.
|
|
53
|
+
* When repositoryPath is provided, file references in the user input
|
|
54
|
+
* (e.g. "Develop based on the current SPEC.md") are resolved and their
|
|
55
|
+
* content is included in the prompt.
|
|
40
56
|
* Errors are propagated to the caller.
|
|
41
57
|
*/
|
|
42
|
-
async generateMetadata(userInput, agentType) {
|
|
43
|
-
const
|
|
44
|
-
?
|
|
58
|
+
async generateMetadata(userInput, agentType, repositoryPath) {
|
|
59
|
+
const fileContent = repositoryPath
|
|
60
|
+
? this.resolveFileReference(userInput, repositoryPath)
|
|
61
|
+
: undefined;
|
|
62
|
+
const effectiveInput = fileContent
|
|
63
|
+
? `${userInput}\n\n--- Referenced file content ---\n${fileContent}`
|
|
45
64
|
: userInput;
|
|
65
|
+
const truncated = effectiveInput.length > MAX_INPUT_FOR_AI + MAX_FILE_CONTENT_FOR_AI
|
|
66
|
+
? `${effectiveInput.slice(0, MAX_INPUT_FOR_AI + MAX_FILE_CONTENT_FOR_AI)}...`
|
|
67
|
+
: effectiveInput;
|
|
68
|
+
const fileHint = fileContent
|
|
69
|
+
? "\nIMPORTANT: The user referenced a file. Derive the feature name, slug, and description from the FILE CONTENT, not from the user's reference instruction."
|
|
70
|
+
: '';
|
|
46
71
|
const prompt = `Analyze this user request and extract the CORE feature intent. Condense to essential concepts.
|
|
47
72
|
|
|
48
73
|
User request:
|
|
49
74
|
"${truncated}"
|
|
50
75
|
|
|
51
|
-
IMPORTANT: Don't use the request as-is. Extract the key feature being requested and improve the wording
|
|
76
|
+
IMPORTANT: Don't use the request as-is. Extract the key feature being requested and improve the wording.${fileHint}
|
|
52
77
|
|
|
53
78
|
Return a JSON object with these fields:
|
|
54
79
|
- slug: kebab-case identifier, 2-4 words MAX. Extract the core feature name (e.g., "github-oauth-login" from "add github oauth")
|
|
@@ -74,6 +99,38 @@ Return a JSON object with these fields:
|
|
|
74
99
|
}
|
|
75
100
|
return this.extractMetadataLocally(userInput);
|
|
76
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* Detect a file reference in user input and read the file content.
|
|
104
|
+
* Returns the file content if found and readable, undefined otherwise.
|
|
105
|
+
*/
|
|
106
|
+
resolveFileReference(userInput, repositoryPath) {
|
|
107
|
+
const match = FILE_REFERENCE_PATTERN.exec(userInput);
|
|
108
|
+
if (!match)
|
|
109
|
+
return undefined;
|
|
110
|
+
const filename = match[1];
|
|
111
|
+
const candidates = [
|
|
112
|
+
// Try the path as-is (handles absolute or relative with ./)
|
|
113
|
+
isAbsolute(filename) ? filename : join(repositoryPath, filename),
|
|
114
|
+
// Also try common locations
|
|
115
|
+
join(repositoryPath, filename.replace(/^\.\//, '')),
|
|
116
|
+
];
|
|
117
|
+
for (const candidate of candidates) {
|
|
118
|
+
try {
|
|
119
|
+
if (existsSync(candidate)) {
|
|
120
|
+
const content = readFileSync(candidate, 'utf-8');
|
|
121
|
+
if (content.trim().length > 0) {
|
|
122
|
+
return content.length > MAX_FILE_CONTENT_FOR_AI
|
|
123
|
+
? `${content.slice(0, MAX_FILE_CONTENT_FOR_AI)}...`
|
|
124
|
+
: content;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// File not readable — try next candidate
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
77
134
|
/**
|
|
78
135
|
* Extract metadata locally from user input without AI.
|
|
79
136
|
* Used as fallback when the AI call fails or returns invalid data.
|