@shepai/cli 1.130.1-pr419.86475da → 1.130.1-pr422.6fc61ea
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/agents/approve-agent-run.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.js +2 -2
- package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.js +2 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/implement.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/implement.node.js +2 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.js +34 -3
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +31 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +48 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/analyze.prompt.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/analyze.prompt.js +13 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/plan.prompt.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/plan.prompt.js +13 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.js +13 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.js +13 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.js +24 -1
- package/dist/src/presentation/cli/ui/output.js +2 -2
- package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
- package/dist/src/presentation/web/app/build-feature-node-data.js +2 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +2 -1
- package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/open-action-menu/config.d.ts +3 -1
- package/dist/src/presentation/web/components/common/open-action-menu/config.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.d.ts +1 -1
- package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.js +2 -2
- package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.d.ts +2 -0
- package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.js +9 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -3
- 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 +24 -24
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +2 -2
- 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 +24 -24
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +2 -2
- 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 +30 -30
- 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 +30 -30
- 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 +22 -22
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +2 -2
- 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 +24 -24
- package/web/.next/server/app/(dashboard)/create/page.js +2 -2
- 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 +30 -30
- 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 +30 -30
- 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 +22 -22
- package/web/.next/server/app/(dashboard)/page.js +2 -2
- 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 +22 -22
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +2 -2
- 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/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 +1 -1
- 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_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]__d1dc8fcd._.js → [root-of-the-server]__c6e32a23._.js} +2 -2
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4e741df2.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4e741df2.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_026fdffa.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_026fdffa.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_8b91e197.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_8b91e197.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2c791c42._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2c791c42._.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]__84f72684._.js → [root-of-the-server]__3ef34e4c._.js} +3 -3
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__84f72684._.js.map → [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]__6bb00d90._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__755cfe02._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__755cfe02._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7894f27f._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7894f27f._.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]__96670392._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__96670392._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__57018345._.js → [root-of-the-server]__9c45d070._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9c45d070._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a628fb91._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a628fb91._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__bfba58e6._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__bfba58e6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c3ab8422._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c3ab8422._.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/_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/{_59831c3c._.js → _ce2cb946._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_59831c3c._.js.map → _ce2cb946._.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/{_cf09a53c._.js → _e9c9c1dd._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_cf09a53c._.js.map → _e9c9c1dd._.js.map} +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/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_8e7fe0d1._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_8e7fe0d1._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ca051134.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ca051134.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_b9023017._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_b9023017._.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_e164bc5b._.js → src_presentation_web_ebc8d3da._.js} +2 -2
- package/web/.next/server/chunks/ssr/{src_presentation_web_e164bc5b._.js.map → src_presentation_web_ebc8d3da._.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 +38 -38
- package/web/.next/static/chunks/{8ebc4fcc77449017.js → 0d4c03df99d24343.js} +1 -1
- package/web/.next/static/chunks/{a1d525f20fc5274a.js → 0d604504bcbd7c60.js} +2 -2
- package/web/.next/static/chunks/{031c5ad2b3cc0fcf.js → 42ff1f533f0bfcdb.js} +1 -1
- package/web/.next/static/chunks/69e44e20eeaba99b.js +1 -0
- package/web/.next/static/chunks/{67dce937a03f61e0.js → 7b60c184682fb725.js} +1 -1
- package/web/.next/static/chunks/{ab2c3c9ca5dd40a8.js → 8d290e430be5a99e.js} +1 -1
- package/web/.next/static/chunks/{512315907ba20e64.js → 90560607865b2918.js} +1 -1
- package/web/.next/static/chunks/{ec9886a3509ecef2.js → b383f4095151afe6.js} +1 -1
- package/web/.next/static/chunks/{ffb939826e7c743f.js → cc3cdfbdafbce196.js} +1 -1
- package/web/.next/static/chunks/{255bf7de35259808.js → e4215c5aa0bc4ff4.js} +1 -1
- package/web/.next/static/chunks/e87508adebf1e1af.js +2 -0
- package/web/.next/static/chunks/{1be2438b5f127e76.js → fe3d5449ff7e3c6d.js} +1 -1
- package/web/next.config.mjs +1 -1
- package/web/package.json +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5142820f._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5142820f._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__57018345._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__99ab2519._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__99ab2519._.js.map +0 -1
- package/web/.next/static/chunks/8e5d3752c2c82dbb.js +0 -1
- package/web/.next/static/chunks/cf791b69763664cf.js +0 -2
- /package/web/.next/server/chunks/{[root-of-the-server]__d1dc8fcd._.js.map → [root-of-the-server]__c6e32a23._.js.map} +0 -0
- /package/web/.next/static/{0np7GuitLHRGDWR1YFoLi → KJMwSPdRwzUDt6oYmhsPT}/_buildManifest.js +0 -0
- /package/web/.next/static/{0np7GuitLHRGDWR1YFoLi → KJMwSPdRwzUDt6oYmhsPT}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{0np7GuitLHRGDWR1YFoLi → KJMwSPdRwzUDt6oYmhsPT}/_ssgManifest.js +0 -0
package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approve-agent-run.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/agents/approve-agent-run.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gEAAgE,CAAC;AAC7G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAE1G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"approve-agent-run.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/agents/approve-agent-run.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gEAAgE,CAAC;AAC7G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAE1G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAO9E,qBACa,sBAAsB;IAG/B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAEnC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBANrB,kBAAkB,EAAE,mBAAmB,EAEvC,cAAc,EAAE,2BAA2B,EAE3C,iBAAiB,EAAE,kBAAkB,EAErC,qBAAqB,EAAE,sBAAsB;IAG1D,OAAO,CACX,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAqGlD"}
|
|
@@ -23,7 +23,7 @@ import yaml from 'js-yaml';
|
|
|
23
23
|
import { readFileSync } from 'node:fs';
|
|
24
24
|
import { join } from 'node:path';
|
|
25
25
|
import { AgentRunStatus } from '../../../domain/generated/output.js';
|
|
26
|
-
import { writeSpecFileAtomic } from '../../../infrastructure/services/agents/feature-agent/nodes/node-helpers.js';
|
|
26
|
+
import { writeSpecFileAtomic, safeYamlDump, } from '../../../infrastructure/services/agents/feature-agent/nodes/node-helpers.js';
|
|
27
27
|
import { computeWorktreePath } from '../../../infrastructure/services/ide-launchers/compute-worktree-path.js';
|
|
28
28
|
let ApproveAgentRunUseCase = class ApproveAgentRunUseCase {
|
|
29
29
|
agentRunRepository;
|
|
@@ -71,7 +71,7 @@ let ApproveAgentRunUseCase = class ApproveAgentRunUseCase {
|
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
|
-
writeSpecFileAtomic(specDir, 'spec.yaml',
|
|
74
|
+
writeSpecFileAtomic(specDir, 'spec.yaml', safeYamlDump(spec));
|
|
75
75
|
}
|
|
76
76
|
catch {
|
|
77
77
|
// Non-fatal: selection update failure should not block approval
|
package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reject-agent-run.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/agents/reject-agent-run.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gEAAgE,CAAC;AAC7G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;
|
|
1
|
+
{"version":3,"file":"reject-agent-run.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/agents/reject-agent-run.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gEAAgE,CAAC;AAC7G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAa1G,qBACa,qBAAqB;IAG9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAEnC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBANrB,kBAAkB,EAAE,mBAAmB,EAEvC,cAAc,EAAE,2BAA2B,EAE3C,iBAAiB,EAAE,kBAAkB,EAErC,qBAAqB,EAAE,sBAAsB;IAG1D,OAAO,CACX,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC;QACT,QAAQ,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,CAAC;CA2HH"}
|
|
@@ -22,7 +22,7 @@ import yaml from 'js-yaml';
|
|
|
22
22
|
import { readFileSync } from 'node:fs';
|
|
23
23
|
import { join } from 'node:path';
|
|
24
24
|
import { AgentRunStatus } from '../../../domain/generated/output.js';
|
|
25
|
-
import { writeSpecFileAtomic } from '../../../infrastructure/services/agents/feature-agent/nodes/node-helpers.js';
|
|
25
|
+
import { writeSpecFileAtomic, safeYamlDump, } from '../../../infrastructure/services/agents/feature-agent/nodes/node-helpers.js';
|
|
26
26
|
import { recordLifecycleEvent } from '../../../infrastructure/services/agents/feature-agent/phase-timing-context.js';
|
|
27
27
|
import { computeWorktreePath } from '../../../infrastructure/services/ide-launchers/compute-worktree-path.js';
|
|
28
28
|
let RejectAgentRunUseCase = class RejectAgentRunUseCase {
|
|
@@ -81,7 +81,7 @@ let RejectAgentRunUseCase = class RejectAgentRunUseCase {
|
|
|
81
81
|
...(attachments && attachments.length > 0 ? { attachments } : {}),
|
|
82
82
|
};
|
|
83
83
|
spec.rejectionFeedback = [...existingFeedback, newEntry];
|
|
84
|
-
writeSpecFileAtomic(specDir, 'spec.yaml',
|
|
84
|
+
writeSpecFileAtomic(specDir, 'spec.yaml', safeYamlDump(spec));
|
|
85
85
|
}
|
|
86
86
|
catch {
|
|
87
87
|
// If spec.yaml can't be read, still proceed with iteration 1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implement.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/implement.node.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"implement.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/implement.node.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAqErD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,IAG5C,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAiQ7E"}
|
package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/implement.node.js
CHANGED
|
@@ -10,7 +10,7 @@ import yaml from 'js-yaml';
|
|
|
10
10
|
import { writeFileSync } from 'node:fs';
|
|
11
11
|
import { join } from 'node:path';
|
|
12
12
|
import { interrupt, isGraphBubbleUp } from '@langchain/langgraph';
|
|
13
|
-
import { createNodeLogger, readSpecFile, buildExecutorOptions, shouldInterrupt, safeYamlLoad, retryExecute, getCompletedPhases, markPhaseComplete, } from './node-helpers.js';
|
|
13
|
+
import { createNodeLogger, readSpecFile, buildExecutorOptions, shouldInterrupt, safeYamlLoad, safeYamlDump, retryExecute, getCompletedPhases, markPhaseComplete, } from './node-helpers.js';
|
|
14
14
|
import { reportNodeStart } from '../heartbeat.js';
|
|
15
15
|
import { recordPhaseStart, recordPhaseEnd, recordApprovalWaitStart, updatePhasePrompt, } from '../phase-timing-context.js';
|
|
16
16
|
import { updateNodeLifecycle } from '../lifecycle-context.js';
|
|
@@ -42,7 +42,7 @@ function updateFeatureProgress(specDir, completedCount, totalCount, currentPhase
|
|
|
42
42
|
lastUpdated: new Date().toISOString(),
|
|
43
43
|
lastUpdatedBy: 'feature-agent:implement',
|
|
44
44
|
};
|
|
45
|
-
writeFileSync(join(specDir, 'feature.yaml'),
|
|
45
|
+
writeFileSync(join(specDir, 'feature.yaml'), safeYamlDump(data), 'utf-8');
|
|
46
46
|
}
|
|
47
47
|
catch (err) {
|
|
48
48
|
log.error(`Failed to update feature.yaml: ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ci-watch-fix-loop.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AACpG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yEAAyE,CAAC;AAClH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iEAAiE,CAAC;AAKrG,OAAO,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+DAA+D,CAAC;AAK3G,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,YAAY,EAAE,aAAa,CAAC;IAC5B,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,qBAAqB,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAEpG,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,WAAW,EAAE,gBAAgB,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"ci-watch-fix-loop.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AACpG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yEAAyE,CAAC;AAClH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iEAAiE,CAAC;AAKrG,OAAO,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+DAA+D,CAAC;AAK3G,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,YAAY,EAAE,aAAa,CAAC;IAC5B,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,qBAAqB,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAEpG,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,WAAW,EAAE,gBAAgB,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAqL3B"}
|
|
@@ -106,9 +106,29 @@ export async function runCiWatchFixLoop(deps, params) {
|
|
|
106
106
|
const failureLogs = await gitPrService.getFailureLogs(cwd, runId, branch, logMaxChars);
|
|
107
107
|
const startedAt = new Date().toISOString();
|
|
108
108
|
log.info(`CI fix attempt ${ciFixAttempts + 1}/${maxAttempts} for run ${runId}`);
|
|
109
|
-
// Invoke fix executor
|
|
109
|
+
// Invoke fix executor — maxAttempts:1 prevents retryExecute's internal
|
|
110
|
+
// retry logic from consuming CI fix attempts behind the outer loop's back.
|
|
111
|
+
// Each CI fix is a unique attempt with distinct failure logs and prompt;
|
|
112
|
+
// the outer loop already handles iteration.
|
|
110
113
|
const fixPrompt = buildCiWatchFixPrompt(failureLogs, ciFixAttempts + 1, maxAttempts, branch);
|
|
111
|
-
|
|
114
|
+
try {
|
|
115
|
+
await retryExecute(executor, fixPrompt, options, { maxAttempts: 1, logger: log });
|
|
116
|
+
}
|
|
117
|
+
catch (execErr) {
|
|
118
|
+
// If the fix executor fails, count it as a failed attempt and continue
|
|
119
|
+
// the loop rather than killing the entire CI fix process.
|
|
120
|
+
const execMsg = execErr instanceof Error ? execErr.message : String(execErr);
|
|
121
|
+
log.info(`CI fix executor failed on attempt ${ciFixAttempts + 1}: ${execMsg}`);
|
|
122
|
+
ciFixAttempts++;
|
|
123
|
+
ciFixHistory.push({
|
|
124
|
+
attempt: ciFixAttempts,
|
|
125
|
+
startedAt,
|
|
126
|
+
failureSummary: `Executor error: ${execMsg.slice(0, 500)}`,
|
|
127
|
+
outcome: 'failed',
|
|
128
|
+
});
|
|
129
|
+
messages.push(`[merge] CI fix attempt ${ciFixAttempts}/${maxAttempts} — executor failed`);
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
112
132
|
ciFixAttempts++;
|
|
113
133
|
// Get updated run URL (new run triggered by push in fix)
|
|
114
134
|
const updatedCiStatus = await gitPrService.getCiStatus(cwd, branch);
|
|
@@ -131,7 +151,18 @@ export async function runCiWatchFixLoop(deps, params) {
|
|
|
131
151
|
ciFixStatus = 'timeout';
|
|
132
152
|
break;
|
|
133
153
|
}
|
|
134
|
-
|
|
154
|
+
// For non-timeout watchCi errors (e.g. GIT_ERROR), treat as a failed
|
|
155
|
+
// attempt and continue the loop instead of killing it.
|
|
156
|
+
const watchMsg = err instanceof Error ? err.message : String(err);
|
|
157
|
+
log.info(`CI watch failed during fix attempt ${ciFixAttempts}: ${watchMsg}`);
|
|
158
|
+
ciFixHistory.push({
|
|
159
|
+
attempt: ciFixAttempts,
|
|
160
|
+
startedAt,
|
|
161
|
+
failureSummary: failureLogs.slice(0, 500),
|
|
162
|
+
outcome: 'failed',
|
|
163
|
+
});
|
|
164
|
+
messages.push(`[merge] CI fix attempt ${ciFixAttempts}/${maxAttempts} — watch failed`);
|
|
165
|
+
continue;
|
|
135
166
|
}
|
|
136
167
|
// Update runUrl to the run that was actually watched (avoids mismatch
|
|
137
168
|
// when multiple workflow runs exist for the same branch).
|
package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts
CHANGED
|
@@ -43,6 +43,37 @@ export declare function buildExecutorOptions(state: FeatureAgentState, overrides
|
|
|
43
43
|
* in list items and retries.
|
|
44
44
|
*/
|
|
45
45
|
export declare function safeYamlLoad(content: string): unknown;
|
|
46
|
+
/**
|
|
47
|
+
* Serialize data to YAML with forced double-quoting for all string values.
|
|
48
|
+
*
|
|
49
|
+
* This helper ensures all YAML output uses consistent quoting to prevent
|
|
50
|
+
* parse failures from unescaped quotes, colons, hashes, and other special
|
|
51
|
+
* characters in AI-generated content.
|
|
52
|
+
*
|
|
53
|
+
* **When to use:**
|
|
54
|
+
* - Use `safeYamlDump` for all YAML serialization in feature-agent nodes,
|
|
55
|
+
* use cases, and CLI output to ensure consistency and reliability.
|
|
56
|
+
* - Do NOT use `yaml.dump` directly unless you have a specific need for
|
|
57
|
+
* unquoted strings (e.g., human-edited configuration files).
|
|
58
|
+
*
|
|
59
|
+
* **Options applied:**
|
|
60
|
+
* - `indent: 2` — 2-space indentation (codebase standard)
|
|
61
|
+
* - `lineWidth: -1` — Disable line wrapping to preserve formatting and reduce diff noise
|
|
62
|
+
* - `quotingType: '"'` — Use double quotes for all quoted strings
|
|
63
|
+
* - `forceQuotes: true` — Quote all string values, even those without special characters
|
|
64
|
+
*
|
|
65
|
+
* @param data - The data to serialize (objects, arrays, primitives)
|
|
66
|
+
* @returns YAML string with all strings double-quoted
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* const yaml = safeYamlDump({ title: "it's working", description: "say \"hello\"" });
|
|
71
|
+
* // Output:
|
|
72
|
+
* // title: "it's working"
|
|
73
|
+
* // description: "say \"hello\""
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export declare function safeYamlDump(data: unknown): string;
|
|
46
77
|
/**
|
|
47
78
|
* Determine whether the current node should trigger an interrupt
|
|
48
79
|
* for human approval given the configured approval gates.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-helpers.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,+DAA+D,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAUrD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM;IAE7C,4DAA4D;gBAChD,IAAI;kBAGF,MAAM,GAAG,IAAI;mBAIZ,MAAM,GAAG,IAAI;EAK/B;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE7D;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMtE;AAoBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO1D;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,iBAAiB,EACxB,SAAS,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,EAC3D,QAAQ,CAAC,EAAE,MAAM,GAChB,qBAAqB,CAUvB;AAeD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAQrD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,OAAO,CAQ3F;AAMD,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,mBAAmB,GAAG,eAAe,GAAG,SAAS,CAAC;AAMhG;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,CAKjE;AAED,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,qBAAqB,EAC9B,SAAS,CAAC,EAAE,YAAY,GACvB,OAAO,CAAC,oBAAoB,CAAC,CA6B/B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAW5D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"node-helpers.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,+DAA+D,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAUrD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM;IAE7C,4DAA4D;gBAChD,IAAI;kBAGF,MAAM,GAAG,IAAI;mBAIZ,MAAM,GAAG,IAAI;EAK/B;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE7D;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMtE;AAoBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO1D;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,iBAAiB,EACxB,SAAS,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,EAC3D,QAAQ,CAAC,EAAE,MAAM,GAChB,qBAAqB,CAUvB;AAeD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAQrD;AAgBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAElD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,OAAO,CAQ3F;AAMD,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,mBAAmB,GAAG,eAAe,GAAG,SAAS,CAAC;AAMhG;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,CAKjE;AAED,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,qBAAqB,EAC9B,SAAS,CAAC,EAAE,YAAY,GACvB,OAAO,CAAC,oBAAoB,CAAC,CA6B/B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAW5D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,IAAI,CAiB5F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAOhG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,IAAI,CAoB1F;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAa5F;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,MAAM,CAiCT;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAa3E;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,UAAU,KAAK,MAAM,GACjE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAqInE"}
|
package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js
CHANGED
|
@@ -119,6 +119,52 @@ export function safeYamlLoad(content) {
|
|
|
119
119
|
return yaml.load(sanitized);
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Serialization options for safeYamlDump.
|
|
124
|
+
* - indent: 2 spaces (consistent with codebase style)
|
|
125
|
+
* - lineWidth: -1 (disable line wrapping to preserve agent-written formatting)
|
|
126
|
+
* - quotingType: '"' (use double quotes for all quoted strings)
|
|
127
|
+
* - forceQuotes: true (quote all string values to prevent YAML parse errors from unescaped special characters)
|
|
128
|
+
*/
|
|
129
|
+
const SAFE_YAML_DUMP_OPTIONS = {
|
|
130
|
+
indent: 2,
|
|
131
|
+
lineWidth: -1,
|
|
132
|
+
quotingType: '"',
|
|
133
|
+
forceQuotes: true,
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Serialize data to YAML with forced double-quoting for all string values.
|
|
137
|
+
*
|
|
138
|
+
* This helper ensures all YAML output uses consistent quoting to prevent
|
|
139
|
+
* parse failures from unescaped quotes, colons, hashes, and other special
|
|
140
|
+
* characters in AI-generated content.
|
|
141
|
+
*
|
|
142
|
+
* **When to use:**
|
|
143
|
+
* - Use `safeYamlDump` for all YAML serialization in feature-agent nodes,
|
|
144
|
+
* use cases, and CLI output to ensure consistency and reliability.
|
|
145
|
+
* - Do NOT use `yaml.dump` directly unless you have a specific need for
|
|
146
|
+
* unquoted strings (e.g., human-edited configuration files).
|
|
147
|
+
*
|
|
148
|
+
* **Options applied:**
|
|
149
|
+
* - `indent: 2` — 2-space indentation (codebase standard)
|
|
150
|
+
* - `lineWidth: -1` — Disable line wrapping to preserve formatting and reduce diff noise
|
|
151
|
+
* - `quotingType: '"'` — Use double quotes for all quoted strings
|
|
152
|
+
* - `forceQuotes: true` — Quote all string values, even those without special characters
|
|
153
|
+
*
|
|
154
|
+
* @param data - The data to serialize (objects, arrays, primitives)
|
|
155
|
+
* @returns YAML string with all strings double-quoted
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```typescript
|
|
159
|
+
* const yaml = safeYamlDump({ title: "it's working", description: "say \"hello\"" });
|
|
160
|
+
* // Output:
|
|
161
|
+
* // title: "it's working"
|
|
162
|
+
* // description: "say \"hello\""
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
export function safeYamlDump(data) {
|
|
166
|
+
return yaml.dump(data, SAFE_YAML_DUMP_OPTIONS);
|
|
167
|
+
}
|
|
122
168
|
/**
|
|
123
169
|
* Determine whether the current node should trigger an interrupt
|
|
124
170
|
* for human approval given the configured approval gates.
|
|
@@ -230,7 +276,7 @@ export function clearCompletedPhase(specDir, phaseId, log) {
|
|
|
230
276
|
? status.completedPhases.filter((p) => p !== phaseId)
|
|
231
277
|
: [];
|
|
232
278
|
data.status = { ...status, completedPhases };
|
|
233
|
-
writeFileSync(join(specDir, 'feature.yaml'),
|
|
279
|
+
writeFileSync(join(specDir, 'feature.yaml'), safeYamlDump(data), 'utf-8');
|
|
234
280
|
}
|
|
235
281
|
catch (err) {
|
|
236
282
|
log?.error(`Failed to clear completed phase: ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -264,7 +310,7 @@ export function markPhaseComplete(specDir, phaseId, log) {
|
|
|
264
310
|
completedPhases.push(phaseId);
|
|
265
311
|
}
|
|
266
312
|
data.status = { ...status, completedPhases };
|
|
267
|
-
writeFileSync(join(specDir, 'feature.yaml'),
|
|
313
|
+
writeFileSync(join(specDir, 'feature.yaml'), safeYamlDump(data), 'utf-8');
|
|
268
314
|
}
|
|
269
315
|
catch (err) {
|
|
270
316
|
log?.error(`Failed to mark phase complete: ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/analyze.prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"analyze.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/analyze.prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CA2GnE"}
|
|
@@ -84,6 +84,19 @@ You MUST write the COMPLETE file (not a partial update). Preserve the existing n
|
|
|
84
84
|
|
|
85
85
|
**(S/M/L/XL)** — (justify your estimate with specific reasoning)
|
|
86
86
|
|
|
87
|
+
## YAML Output Rules
|
|
88
|
+
|
|
89
|
+
**CRITICAL:** When writing YAML files, you MUST follow these rules to ensure valid YAML:
|
|
90
|
+
|
|
91
|
+
1. **Wrap all string values in double quotes** — this prevents YAML parsing errors from special characters
|
|
92
|
+
2. **Escape internal double quotes with backslash** — use \\" inside quoted strings
|
|
93
|
+
3. **Use block scalars (\`|\`) for multi-line text** — this avoids escaping complexity
|
|
94
|
+
|
|
95
|
+
**Example (incorrect → correct):**
|
|
96
|
+
- ❌ \`text: it's broken\` → ✅ \`text: "it's broken"\` or \`text: |\\n it's broken\`
|
|
97
|
+
- ❌ \`message: say "hello"\` → ✅ \`message: "say \\"hello\\""\`
|
|
98
|
+
- ❌ \`description: line1\\nline2\` → ✅ \`description: |\\n line1\\n line2\`
|
|
99
|
+
|
|
87
100
|
## Constraints
|
|
88
101
|
|
|
89
102
|
- Write ONLY to ${state.specDir}/spec.yaml
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/plan.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"plan.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/plan.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAyNhE"}
|
|
@@ -190,6 +190,19 @@ You MUST write TWO files:
|
|
|
190
190
|
Do NOT list individual tasks — the structured tasks array above is the source of truth.
|
|
191
191
|
Instead, summarize the overall flow: "First we set up X, then wire Y, finally integrate Z.")
|
|
192
192
|
|
|
193
|
+
## YAML Output Rules
|
|
194
|
+
|
|
195
|
+
**CRITICAL:** When writing YAML files, you MUST follow these rules to ensure valid YAML:
|
|
196
|
+
|
|
197
|
+
1. **Wrap all string values in double quotes** — this prevents YAML parsing errors from special characters
|
|
198
|
+
2. **Escape internal double quotes with backslash** — use \\" inside quoted strings
|
|
199
|
+
3. **Use block scalars (\`|\`) for multi-line text** — this avoids escaping complexity
|
|
200
|
+
|
|
201
|
+
**Example (incorrect → correct):**
|
|
202
|
+
- ❌ \`description: it's a critical task\` → ✅ \`description: "it's a critical task"\` or \`description: |\\n it's a critical task\`
|
|
203
|
+
- ❌ \`title: Add "strict" validation\` → ✅ \`title: "Add \\"strict\\" validation"\`
|
|
204
|
+
- ❌ \`red: Write test that checks X\\nand Y\` → ✅ \`red: |\\n Write test that checks X\\n and Y\`
|
|
205
|
+
|
|
193
206
|
## Constraints
|
|
194
207
|
|
|
195
208
|
- Write to BOTH ${state.specDir}/plan.yaml AND ${state.specDir}/tasks.yaml
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirements.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"requirements.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAgMxE"}
|
|
@@ -163,6 +163,19 @@ Write the COMPLETE file. Preserve name/number/branch/technologies from analysis
|
|
|
163
163
|
|
|
164
164
|
(keep or update with requirements-informed reasoning)
|
|
165
165
|
|
|
166
|
+
## YAML Output Rules
|
|
167
|
+
|
|
168
|
+
**CRITICAL:** When writing YAML files, you MUST follow these rules to ensure valid YAML:
|
|
169
|
+
|
|
170
|
+
1. **Wrap all string values in double quotes** — this prevents YAML parsing errors from special characters
|
|
171
|
+
2. **Escape internal double quotes with backslash** — use \\" inside quoted strings
|
|
172
|
+
3. **Use block scalars (\`|\`) for multi-line text** — this avoids escaping complexity
|
|
173
|
+
|
|
174
|
+
**Example (incorrect → correct):**
|
|
175
|
+
- ❌ \`description: it's required\` → ✅ \`description: "it's required"\` or \`description: |\\n it's required\`
|
|
176
|
+
- ❌ \`rationale: must be "fast"\` → ✅ \`rationale: "must be \\"fast\\""\`
|
|
177
|
+
- ❌ \`content: line1\\nline2\` → ✅ \`content: |\\n line1\\n line2\`
|
|
178
|
+
|
|
166
179
|
## Constraints
|
|
167
180
|
|
|
168
181
|
- Write ONLY to ${state.specDir}/spec.yaml
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"research.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"research.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAmJpE"}
|
|
@@ -123,6 +123,19 @@ Use this YAML structure:
|
|
|
123
123
|
|
|
124
124
|
(how this fits into the existing codebase architecture)
|
|
125
125
|
|
|
126
|
+
## YAML Output Rules
|
|
127
|
+
|
|
128
|
+
**CRITICAL:** When writing YAML files, you MUST follow these rules to ensure valid YAML:
|
|
129
|
+
|
|
130
|
+
1. **Wrap all string values in double quotes** — this prevents YAML parsing errors from special characters
|
|
131
|
+
2. **Escape internal double quotes with backslash** — use \\" inside quoted strings
|
|
132
|
+
3. **Use block scalars (\`|\`) for multi-line text** — this avoids escaping complexity
|
|
133
|
+
|
|
134
|
+
**Example (incorrect → correct):**
|
|
135
|
+
- ❌ \`rationale: it's the best approach\` → ✅ \`rationale: "it's the best approach"\` or \`rationale: |\\n it's the best approach\`
|
|
136
|
+
- ❌ \`rejected: doesn't scale\` → ✅ \`rejected: "doesn't scale"\`
|
|
137
|
+
- ❌ \`description: use "strict" mode\` → ✅ \`description: "use \\"strict\\" mode"\`
|
|
138
|
+
|
|
126
139
|
## Constraints
|
|
127
140
|
|
|
128
141
|
- Write ONLY to ${state.specDir}/research.yaml
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repair.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAGpG;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAC3B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,MAAM,GACd,MAAM,
|
|
1
|
+
{"version":3,"file":"repair.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAGpG;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAC3B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,MAAM,GACd,MAAM,CAkDR;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAC3B,QAAQ,EAAE,cAAc,GACvB,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAwCnE"}
|
package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.js
CHANGED
|
@@ -31,10 +31,33 @@ export function buildRepairPrompt(filename, content, errors, specDir) {
|
|
|
31
31
|
'### Output Files',
|
|
32
32
|
...filePaths.map((p) => `- Write fixed YAML to: ${p}`),
|
|
33
33
|
'',
|
|
34
|
+
'### YAML Escaping Rules',
|
|
35
|
+
'',
|
|
36
|
+
'**CRITICAL:** Follow these rules to ensure valid YAML:',
|
|
37
|
+
'',
|
|
38
|
+
'1. **Wrap all string values in double quotes** — prevents parsing errors from special characters',
|
|
39
|
+
'2. **Escape internal double quotes with backslash** — use \\\\" inside quoted strings',
|
|
40
|
+
'3. **Use block scalars (|) for multi-line text** — avoids escaping complexity',
|
|
41
|
+
'',
|
|
42
|
+
'### Examples (incorrect → correct):',
|
|
43
|
+
'',
|
|
44
|
+
'**Example 1: Unescaped quote in contraction**',
|
|
45
|
+
"- ❌ Before: text: it's broken",
|
|
46
|
+
'- ✅ After: text: "it\'s broken"',
|
|
47
|
+
'- ✅ Or use: text: | followed by indented text',
|
|
48
|
+
'',
|
|
49
|
+
'**Example 2: Unquoted string with special characters**',
|
|
50
|
+
'- ❌ Before: title: Add "strict" mode',
|
|
51
|
+
'- ✅ After: title: "Add \\\\"strict\\\\" mode"',
|
|
52
|
+
'',
|
|
53
|
+
'**Example 3: Multi-line content on single line**',
|
|
54
|
+
'- ❌ Before: description: First line then Second line',
|
|
55
|
+
'- ✅ After: description: | followed by indented multi-line text',
|
|
56
|
+
'',
|
|
34
57
|
'### Rules',
|
|
35
58
|
'- Fix ONLY the reported errors',
|
|
36
59
|
'- Preserve all existing valid content',
|
|
37
|
-
'- Use proper YAML formatting',
|
|
60
|
+
'- Use proper YAML formatting (apply escaping rules above)',
|
|
38
61
|
'- Do not add fields that were not in the original',
|
|
39
62
|
].join('\n');
|
|
40
63
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @module output
|
|
10
10
|
*/
|
|
11
|
-
import
|
|
11
|
+
import { safeYamlDump } from '../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js';
|
|
12
12
|
import { TableFormatter } from './tables.js';
|
|
13
13
|
/**
|
|
14
14
|
* Output formatter for multiple formats
|
|
@@ -43,6 +43,6 @@ export class OutputFormatter {
|
|
|
43
43
|
* Formats data as YAML
|
|
44
44
|
*/
|
|
45
45
|
static formatAsYAML(data) {
|
|
46
|
-
return
|
|
46
|
+
return safeYamlDump(data);
|
|
47
47
|
}
|
|
48
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-feature-node-data.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/build-feature-node-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"build-feature-node-data.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/build-feature-node-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAS9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAExE,MAAM,WAAW,2BAA2B;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qEAAqE;IACrE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,QAAQ,GAAG,IAAI,EACpB,OAAO,CAAC,EAAE,2BAA2B,GACpC,eAAe,CAmDjB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AgentRunStatus } from '../../../../packages/core/src/domain/generated/output.js';
|
|
2
2
|
import { deriveNodeState, deriveProgress, deriveLifecycle, } from '../components/common/feature-node/derive-feature-state.js';
|
|
3
3
|
import { isProcessAlive } from '../../../../packages/core/src/infrastructure/services/process/is-process-alive.js';
|
|
4
|
+
import { computeWorktreePath } from '../../../../packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.js';
|
|
4
5
|
/**
|
|
5
6
|
* Builds a FeatureNodeData object from a Feature entity and optional AgentRun.
|
|
6
7
|
* This is the single-feature version of the logic in `buildGraphNodes`.
|
|
@@ -16,6 +17,7 @@ export function buildFeatureNodeData(feature, run, options) {
|
|
|
16
17
|
lifecycle: deriveLifecycle(feature, run),
|
|
17
18
|
repositoryPath: feature.repositoryPath,
|
|
18
19
|
branch: feature.branch,
|
|
20
|
+
worktreePath: feature.worktreePath ?? computeWorktreePath(feature.repositoryPath, feature.branch),
|
|
19
21
|
specPath: feature.specPath,
|
|
20
22
|
state: deriveNodeState(feature, run, pidAlive !== undefined ? { isPidAlive: pidAlive } : undefined),
|
|
21
23
|
progress: deriveProgress(feature),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI/D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,UAAU,CAAC;IACjB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"feature-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI/D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,UAAU,CAAC;IACjB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,wBAAwB,2CAgmB1F"}
|
package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js
CHANGED
|
@@ -321,6 +321,7 @@ export function FeatureDrawerClient({ view: initialView, urlTab }) {
|
|
|
321
321
|
? {
|
|
322
322
|
repositoryPath: featureNode.repositoryPath,
|
|
323
323
|
branch: featureNode.branch,
|
|
324
|
+
worktreePath: featureNode.worktreePath,
|
|
324
325
|
specPath: featureNode.specPath,
|
|
325
326
|
}
|
|
326
327
|
: null;
|
|
@@ -352,7 +353,7 @@ export function FeatureDrawerClient({ view: initialView, urlTab }) {
|
|
|
352
353
|
const repoName = featureNode.repositoryName ??
|
|
353
354
|
featureNode.repositoryPath.split('/').filter(Boolean).at(-1) ??
|
|
354
355
|
'';
|
|
355
|
-
header = (_jsxs(_Fragment, { children: [_jsxs("div", { "data-testid": "feature-drawer-header", children: [_jsx(DrawerTitle, { children: featureNode.name }), repoName ? (_jsxs("div", { className: "flex items-center gap-1.5 pt-0.5", children: [_jsx(Code2, { className: "text-muted-foreground size-3.5 shrink-0" }), featureNode.remoteUrl ? (_jsxs("a", { href: featureNode.remoteUrl, target: "_blank", rel: "noopener noreferrer", className: "text-muted-foreground hover:text-foreground inline-flex items-center gap-1 text-xs transition-colors", "data-testid": "feature-drawer-repo-link", children: [repoName, _jsx(ExternalLink, { className: "size-3" })] })) : (_jsx("span", { className: "text-muted-foreground text-xs", children: repoName }))] })) : null, _jsx(DrawerDescription, { className: "sr-only", children: featureNode.name })] }), featureActionsInput ? (_jsxs("div", { className: "flex items-center gap-2 pt-2", "data-testid": "feature-drawer-actions", children: [_jsx(OpenActionMenu, { actions: featureActions, repositoryPath: featureActionsInput.repositoryPath, showSpecs: !!featureActionsInput.specPath }), featureFlags.envDeploy && featureDeployTarget ? (_jsxs(_Fragment, { children: [_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { children: _jsx(ActionButton, { label: isFeatureDeployActive ? 'Stop Dev Server' : 'Start Dev Server', onClick: isFeatureDeployActive ? deployAction.stop : deployAction.deploy, loading: deployAction.deployLoading || deployAction.stopLoading, error: !!deployAction.deployError, icon: isFeatureDeployActive ? Square : Play, iconOnly: true, variant: "outline", size: "icon-sm" }) }) }), _jsx(TooltipContent, { children: isFeatureDeployActive ? 'Stop Dev Server' : 'Start Dev Server' })] }) }), isFeatureDeployActive ? (_jsx(DeploymentStatusBadge, { status: deployAction.status, url: deployAction.url, targetId: featureDeployTarget?.targetId })) : null] })) : null, _jsxs("div", { className: "ml-auto flex items-center gap-1.5", children: [_jsx("code", { className: "bg-muted text-muted-foreground rounded px-1.5 py-0.5 font-mono text-xs", children: shortId }), _jsx("button", { type: "button", onClick: handleCopyId, className: "text-muted-foreground hover:text-foreground inline-flex items-center rounded p-0.5 transition-colors", "aria-label": "Copy feature ID", "data-testid": "feature-drawer-copy-id", children: idCopied ? (_jsx(Check, { className: "size-3.5 text-green-600" })) : (_jsx(Copy, { className: "size-3.5" })) })] }), featureNode.featureId ? (_jsxs(_Fragment, { children: [_jsx(Button, { variant: "ghost", size: "icon-sm", "aria-label": "Delete feature", disabled: isDeleting, className: "text-muted-foreground hover:text-destructive", "data-testid": "feature-drawer-delete", onClick: () => setDeleteDialogOpen(true), children: isDeleting ? (_jsx(Loader2, { className: "size-4 animate-spin" })) : (_jsx(Trash2, { className: "size-4" })) }), _jsx(DeleteFeatureDialog, { open: deleteDialogOpen, onOpenChange: setDeleteDialogOpen, onConfirm: (cleanup, cascadeDelete, closePr) => handleDelete(featureNode.featureId, cleanup, cascadeDelete, closePr), isDeleting: isDeleting, featureName: featureNode.name, featureId: featureNode.featureId, hasChildren: featureNode.hasChildren, hasOpenPr: !!featureNode.pr && featureNode.pr.status === 'Open' })] })) : null] })) : null] }));
|
|
356
|
+
header = (_jsxs(_Fragment, { children: [_jsxs("div", { "data-testid": "feature-drawer-header", children: [_jsx(DrawerTitle, { children: featureNode.name }), repoName ? (_jsxs("div", { className: "flex items-center gap-1.5 pt-0.5", children: [_jsx(Code2, { className: "text-muted-foreground size-3.5 shrink-0" }), featureNode.remoteUrl ? (_jsxs("a", { href: featureNode.remoteUrl, target: "_blank", rel: "noopener noreferrer", className: "text-muted-foreground hover:text-foreground inline-flex items-center gap-1 text-xs transition-colors", "data-testid": "feature-drawer-repo-link", children: [repoName, _jsx(ExternalLink, { className: "size-3" })] })) : (_jsx("span", { className: "text-muted-foreground text-xs", children: repoName }))] })) : null, _jsx(DrawerDescription, { className: "sr-only", children: featureNode.name })] }), featureActionsInput ? (_jsxs("div", { className: "flex items-center gap-2 pt-2", "data-testid": "feature-drawer-actions", children: [_jsx(OpenActionMenu, { actions: featureActions, repositoryPath: featureActionsInput.repositoryPath, worktreePath: featureActionsInput.worktreePath, showSpecs: !!featureActionsInput.specPath }), featureFlags.envDeploy && featureDeployTarget ? (_jsxs(_Fragment, { children: [_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { children: _jsx(ActionButton, { label: isFeatureDeployActive ? 'Stop Dev Server' : 'Start Dev Server', onClick: isFeatureDeployActive ? deployAction.stop : deployAction.deploy, loading: deployAction.deployLoading || deployAction.stopLoading, error: !!deployAction.deployError, icon: isFeatureDeployActive ? Square : Play, iconOnly: true, variant: "outline", size: "icon-sm" }) }) }), _jsx(TooltipContent, { children: isFeatureDeployActive ? 'Stop Dev Server' : 'Start Dev Server' })] }) }), isFeatureDeployActive ? (_jsx(DeploymentStatusBadge, { status: deployAction.status, url: deployAction.url, targetId: featureDeployTarget?.targetId })) : null] })) : null, _jsxs("div", { className: "ml-auto flex items-center gap-1.5", children: [_jsx("code", { className: "bg-muted text-muted-foreground rounded px-1.5 py-0.5 font-mono text-xs", children: shortId }), _jsx("button", { type: "button", onClick: handleCopyId, className: "text-muted-foreground hover:text-foreground inline-flex items-center rounded p-0.5 transition-colors", "aria-label": "Copy feature ID", "data-testid": "feature-drawer-copy-id", children: idCopied ? (_jsx(Check, { className: "size-3.5 text-green-600" })) : (_jsx(Copy, { className: "size-3.5" })) })] }), featureNode.featureId ? (_jsxs(_Fragment, { children: [_jsx(Button, { variant: "ghost", size: "icon-sm", "aria-label": "Delete feature", disabled: isDeleting, className: "text-muted-foreground hover:text-destructive", "data-testid": "feature-drawer-delete", onClick: () => setDeleteDialogOpen(true), children: isDeleting ? (_jsx(Loader2, { className: "size-4 animate-spin" })) : (_jsx(Trash2, { className: "size-4" })) }), _jsx(DeleteFeatureDialog, { open: deleteDialogOpen, onOpenChange: setDeleteDialogOpen, onConfirm: (cleanup, cascadeDelete, closePr) => handleDelete(featureNode.featureId, cleanup, cascadeDelete, closePr), isDeleting: isDeleting, featureName: featureNode.name, featureId: featureNode.featureId, hasChildren: featureNode.hasChildren, hasOpenPr: !!featureNode.pr && featureNode.pr.status === 'Open' })] })) : null] })) : null] }));
|
|
356
357
|
}
|
|
357
358
|
// ── Body ──────────────────────────────────────────────────────────────
|
|
358
359
|
let body = null;
|
package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-feature-actions.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer/use-feature-actions.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAID,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,GAAG,mBAAmB,CA8GxF"}
|
|
1
|
+
{"version":3,"file":"use-feature-actions.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer/use-feature-actions.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAID,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,GAAG,mBAAmB,CA8GxF"}
|
|
@@ -2,8 +2,10 @@ import type { FeatureActionsState } from '../../common/feature-drawer/use-featur
|
|
|
2
2
|
export interface OpenActionMenuProps {
|
|
3
3
|
/** Actions returned by useFeatureActions hook */
|
|
4
4
|
actions: FeatureActionsState;
|
|
5
|
-
/** Absolute path to
|
|
5
|
+
/** Absolute path to the repository */
|
|
6
6
|
repositoryPath: string;
|
|
7
|
+
/** Absolute path to the git worktree for this feature (preferred for copy) */
|
|
8
|
+
worktreePath?: string;
|
|
7
9
|
/** Whether to show the "Open Specs" item */
|
|
8
10
|
showSpecs?: boolean;
|
|
9
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/open-action-menu/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wDAAwD,CAAC;AAElG,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,OAAO,EAAE,mBAAmB,CAAC;IAC7B,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/open-action-menu/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wDAAwD,CAAC;AAElG,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,OAAO,EAAE,mBAAmB,CAAC;IAC7B,sCAAsC;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { OpenActionMenuProps } from './config.js';
|
|
2
|
-
export declare function OpenActionMenu({ actions, repositoryPath, showSpecs }: OpenActionMenuProps): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export declare function OpenActionMenu({ actions, repositoryPath, worktreePath, showSpecs, }: OpenActionMenuProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=open-action-menu.d.ts.map
|
package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-action-menu.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/open-action-menu/open-action-menu.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAIpD,wBAAgB,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"open-action-menu.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/open-action-menu/open-action-menu.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAIpD,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,cAAc,EACd,YAAY,EACZ,SAAS,GACV,EAAE,mBAAmB,2CAoFrB"}
|
|
@@ -5,10 +5,10 @@ import { Code2, Terminal, FolderOpen, ChevronDown, Copy, Check, Loader2, CircleA
|
|
|
5
5
|
import { Button } from '../../ui/button.js';
|
|
6
6
|
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from '../../ui/dropdown-menu.js';
|
|
7
7
|
const COPY_FEEDBACK_DELAY = 2000;
|
|
8
|
-
export function OpenActionMenu({ actions, repositoryPath, showSpecs }) {
|
|
8
|
+
export function OpenActionMenu({ actions, repositoryPath, worktreePath, showSpecs, }) {
|
|
9
9
|
const [copied, setCopied] = useState(false);
|
|
10
10
|
const handleCopyPath = () => {
|
|
11
|
-
void navigator.clipboard.writeText(repositoryPath);
|
|
11
|
+
void navigator.clipboard.writeText(worktreePath ?? repositoryPath);
|
|
12
12
|
setCopied(true);
|
|
13
13
|
setTimeout(() => setCopied(false), COPY_FEEDBACK_DELAY);
|
|
14
14
|
};
|
package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.d.ts
CHANGED
|
@@ -11,4 +11,6 @@ export declare const WithoutSpecs: Story;
|
|
|
11
11
|
export declare const Loading: Story;
|
|
12
12
|
/** Menu with an error on the IDE action. */
|
|
13
13
|
export declare const WithError: Story;
|
|
14
|
+
/** Menu with a worktree path — Copy path copies the worktree path. */
|
|
15
|
+
export declare const WithWorktreePath: Story;
|
|
14
16
|
//# sourceMappingURL=open-action-menu.stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-action-menu.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/open-action-menu/open-action-menu.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAepD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,cAAc,CAOrC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,cAAc,CAAC,CAAC;AAE7C,4DAA4D;AAC5D,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,4CAA4C;AAC5C,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC"}
|
|
1
|
+
{"version":3,"file":"open-action-menu.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/open-action-menu/open-action-menu.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAepD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,cAAc,CAOrC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,cAAc,CAAC,CAAC;AAE7C,4DAA4D;AAC5D,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,4CAA4C;AAC5C,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAEF,sEAAsE;AACtE,eAAO,MAAM,gBAAgB,EAAE,KAO9B,CAAC"}
|
package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.js
CHANGED
|
@@ -52,3 +52,12 @@ export const WithError = {
|
|
|
52
52
|
showSpecs: true,
|
|
53
53
|
},
|
|
54
54
|
};
|
|
55
|
+
/** Menu with a worktree path — Copy path copies the worktree path. */
|
|
56
|
+
export const WithWorktreePath = {
|
|
57
|
+
args: {
|
|
58
|
+
actions: defaultActions,
|
|
59
|
+
repositoryPath: '/Users/dev/my-project',
|
|
60
|
+
worktreePath: '/Users/dev/my-project/.worktrees/feature-add-login',
|
|
61
|
+
showSpecs: true,
|
|
62
|
+
},
|
|
63
|
+
};
|