@shepai/cli 1.145.0 → 1.146.0-pr437.aa23c1e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apis/json-schema/Feature.yaml +25 -0
- package/apis/json-schema/FeatureFlags.yaml +5 -0
- package/apis/json-schema/PullRequest.yaml +11 -0
- package/apis/json-schema/SdlcLifecycle.yaml +1 -0
- package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts +5 -0
- package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/coasts-service.interface.d.ts +132 -0
- package/dist/packages/core/src/application/ports/output/services/coasts-service.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/coasts-service.interface.js +12 -0
- package/dist/packages/core/src/application/ports/output/services/git-fork-service.interface.d.ts +79 -0
- package/dist/packages/core/src/application/ports/output/services/git-fork-service.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/git-fork-service.interface.js +31 -0
- package/dist/packages/core/src/application/ports/output/services/index.d.ts +1 -0
- package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +5 -0
- 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 +10 -0
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +10 -0
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/poll-upstream-pr.use-case.d.ts +23 -0
- package/dist/packages/core/src/application/use-cases/features/poll-upstream-pr.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/features/poll-upstream-pr.use-case.js +84 -0
- package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +2 -0
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +1 -0
- package/dist/packages/core/src/domain/generated/output.d.ts +37 -0
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/domain/generated/output.js +1 -0
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +12 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +8 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +18 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +2 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-feature-flag-coasts-dev-server.d.ts +11 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-feature-flag-coasts-dev-server.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-feature-flag-coasts-dev-server.js +17 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-add-fork-and-pr-columns.d.ts +13 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-add-fork-and-pr-columns.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-add-fork-and-pr-columns.js +30 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-per-feature-workflow-columns.d.ts +12 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-per-feature-workflow-columns.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-per-feature-workflow-columns.js +23 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +23 -4
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts +25 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +85 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +5 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +15 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +5 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +23 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts +2 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +50 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +8 -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 +40 -1
- 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 +11 -9
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.js +5 -1
- 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 +8 -6
- 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 +11 -9
- 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 +8 -6
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/spec.schema.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/spec.schema.js +3 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/validation.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/validation.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/validation.js +9 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +5 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.js +20 -0
- package/dist/packages/core/src/infrastructure/services/coasts.service.d.ts +42 -0
- package/dist/packages/core/src/infrastructure/services/coasts.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/coasts.service.js +185 -0
- package/dist/packages/core/src/infrastructure/services/git/git-fork.service.d.ts +25 -0
- package/dist/packages/core/src/infrastructure/services/git/git-fork.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/git/git-fork.service.js +145 -0
- package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.d.ts +17 -3
- package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.js +98 -15
- package/dist/src/presentation/cli/commands/coasts/index.d.ts +3 -0
- package/dist/src/presentation/cli/commands/coasts/index.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/coasts/index.js +7 -0
- package/dist/src/presentation/cli/commands/coasts/init.command.d.ts +3 -0
- package/dist/src/presentation/cli/commands/coasts/init.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/coasts/init.command.js +40 -0
- package/dist/src/presentation/cli/commands/ui.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/ui.command.js +2 -1
- package/dist/src/presentation/cli/index.js +2 -0
- package/dist/src/presentation/web/app/actions/check-coastfile.d.ts +5 -0
- package/dist/src/presentation/web/app/actions/check-coastfile.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/check-coastfile.js +16 -0
- package/dist/src/presentation/web/app/actions/create-feature.d.ts +10 -0
- package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/create-feature.js +8 -1
- package/dist/src/presentation/web/app/actions/generate-coastfile.d.ts +7 -0
- package/dist/src/presentation/web/app/actions/generate-coastfile.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/generate-coastfile.js +22 -0
- package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/agent-events/route.js +1 -0
- 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 +5 -3
- package/dist/src/presentation/web/app/build-graph-nodes.js +5 -3
- package/dist/src/presentation/web/coasts-dev-server.d.ts +34 -0
- package/dist/src/presentation/web/coasts-dev-server.d.ts.map +1 -0
- package/dist/src/presentation/web/coasts-dev-server.js +69 -0
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +4 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +24 -7
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +12 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +35 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +7 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +5 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +12 -0
- package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +1 -0
- package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.js +1 -0
- package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-node.js +9 -2
- package/dist/src/presentation/web/components/common/repository-node/use-coasts-actions.d.ts +12 -0
- package/dist/src/presentation/web/components/common/repository-node/use-coasts-actions.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/repository-node/use-coasts-actions.js +76 -0
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +3 -0
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +3 -0
- package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.js +5 -0
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +1 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +1 -0
- package/dist/src/presentation/web/dev-server.js +64 -2
- package/dist/src/presentation/web/hooks/feature-flags-context.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/feature-flags-context.js +1 -0
- package/dist/src/presentation/web/lib/feature-flags.d.ts +2 -0
- package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -1
- package/dist/src/presentation/web/lib/feature-flags.js +5 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/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 +3 -3
- package/web/.next/required-server-files.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +86 -56
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +86 -56
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +102 -72
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -1
- 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 +102 -72
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
- 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 +82 -52
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +86 -56
- package/web/.next/server/app/(dashboard)/create/page.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +102 -72
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -1
- 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 +102 -72
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
- 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 +82 -52
- package/web/.next/server/app/(dashboard)/page.js +1 -1
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +82 -52
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +3 -3
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
- package/web/.next/server/app/api/sessions/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.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.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.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/403f9_next_567de315._.js +2 -2
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.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/[root-of-the-server]__0b150ddf._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0b150ddf._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2138fa7e._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2138fa7e._.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]__581769f7._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__581769f7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6df523d1._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6df523d1._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8004c676._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8004c676._.js.map +1 -0
- 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]__815f85e7._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__815f85e7._.js.map +1 -0
- 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]__df7c1cd3._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__df7c1cd3._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0020fddd._.js +1 -1
- package/web/.next/server/chunks/ssr/_0020fddd._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_0c5f56e3._.js → _45117016._.js} +3 -3
- package/web/.next/server/chunks/ssr/{_0c5f56e3._.js.map → _45117016._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_4b432739._.js +1 -1
- package/web/.next/server/chunks/ssr/_4b432739._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_6256a985._.js +1 -1
- package/web/.next/server/chunks/ssr/_6256a985._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_1fa6f5f0._.js → _7b12d338._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_1fa6f5f0._.js.map → _7b12d338._.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/_8fcc39d4._.js +3 -0
- package/web/.next/server/chunks/ssr/_8fcc39d4._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_b71645b4._.js → _9133ca98._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_b71645b4._.js.map → _9133ca98._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_1b719e7f._.js → _913a6589._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_1b719e7f._.js.map → _913a6589._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_a93b44aa._.js +3 -0
- package/web/.next/server/chunks/ssr/{_2a415784._.js.map → _a93b44aa._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_64bdfc6f._.js → _c7d0d381._.js} +3 -3
- package/web/.next/server/chunks/ssr/{_64bdfc6f._.js.map → _c7d0d381._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_d8575088._.js +1 -1
- package/web/.next/server/chunks/ssr/_d8575088._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_55d763e2._.js → _e816b997._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_37e8548b._.js.map → _e816b997._.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/{_37e8548b._.js → _f483d14b._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_55d763e2._.js.map → _f483d14b._.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_0c3330d7._.js +3 -0
- package/web/.next/server/chunks/ssr/{src_presentation_web_721fb773._.js.map → src_presentation_web_0c3330d7._.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_app_actions_open-ide_ts_baaca5d5._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.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/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +506 -350
- package/web/.next/static/chunks/{74ee98538b63a4b2.css → 080d853d319c5cc5.css} +1 -1
- package/web/.next/static/chunks/{41667f7f505952e6.js → 179c3052fd19c46d.js} +1 -1
- package/web/.next/static/chunks/{18c49ba954b15750.js → 1f4814c4adb31418.js} +1 -1
- package/web/.next/static/chunks/{149c88eadafaf835.js → 47d12705199052e7.js} +1 -1
- package/web/.next/static/chunks/{7559d0ac9e155de8.js → 524add4103e8a3b9.js} +2 -2
- package/web/.next/static/chunks/{c0fd9ae3d7b3ebe3.js → 6b7a1e5e9f1b014a.js} +1 -1
- package/web/.next/static/chunks/{08baac5434d9528e.js → 7d5e500fab64cfb5.js} +7 -7
- package/web/.next/static/chunks/816b98cd7e8330b5.js +1 -0
- package/web/.next/static/chunks/{f2a6406394a41d3c.js → 8e26be828072d7f6.js} +1 -1
- package/web/.next/static/chunks/9d6689f6cc4f825f.js +1 -0
- package/web/.next/static/chunks/{e2e3d8a7d339c110.js → a511514839eda467.js} +1 -1
- package/web/.next/static/chunks/{266fe61224d14058.js → d540d45e05b43599.js} +1 -1
- package/web/.next/static/chunks/{ed43f5ec24322234.js → ee3fb116e420b158.js} +1 -1
- package/web/.next/static/chunks/{37b065777853153c.js → f5a7f4c2313fad01.js} +2 -2
- package/web/.next/static/chunks/fa556c575c788679.js +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__29580090._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__29580090._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c094882b._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c094882b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__cb850066._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__cb850066._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dac5dbf1._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dac5dbf1._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fae8b355._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fae8b355._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_2a415784._.js +0 -3
- package/web/.next/server/chunks/ssr/_a9f57758._.js +0 -3
- package/web/.next/server/chunks/ssr/_a9f57758._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_721fb773._.js +0 -3
- package/web/.next/static/chunks/6a370f2709c81d83.js +0 -1
- package/web/.next/static/chunks/a6f8230f1756f318.js +0 -1
- package/web/.next/static/chunks/d1c52a649f1c7704.js +0 -1
- /package/web/.next/static/{CrBDjRQwzIQuEXTobFPfK → MsLpLuZsb_IZtZfJuzG81}/_buildManifest.js +0 -0
- /package/web/.next/static/{CrBDjRQwzIQuEXTobFPfK → MsLpLuZsb_IZtZfJuzG81}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{CrBDjRQwzIQuEXTobFPfK → MsLpLuZsb_IZtZfJuzG81}/_ssgManifest.js +0 -0
|
@@ -36,9 +36,9 @@ Write your analysis to: ${state.specDir}/spec.yaml
|
|
|
36
36
|
|
|
37
37
|
You MUST write the COMPLETE file (not a partial update). Preserve the existing name/number/branch fields and update everything else. Use this YAML structure:
|
|
38
38
|
|
|
39
|
-
name: (keep existing)
|
|
40
|
-
number: (keep existing)
|
|
41
|
-
branch: (keep existing)
|
|
39
|
+
name: (keep existing — string)
|
|
40
|
+
number: (keep existing — MUST be a bare integer, e.g. 2, NOT "002" or "2")
|
|
41
|
+
branch: (keep existing — string)
|
|
42
42
|
oneLiner: (concise one-line description of the feature)
|
|
43
43
|
summary: >
|
|
44
44
|
(2-3 sentence summary of what this feature involves based on your analysis)
|
|
@@ -107,10 +107,12 @@ You MUST write the COMPLETE file (not a partial update). Preserve the existing n
|
|
|
107
107
|
- Do NOT start implementing the feature
|
|
108
108
|
- Keep your analysis thorough but concise
|
|
109
109
|
|
|
110
|
-
${
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
110
|
+
${state.commitSpecs
|
|
111
|
+
? buildCommitPushBlock({
|
|
112
|
+
push: state.push,
|
|
113
|
+
files: [`${state.specDir}/spec.yaml`],
|
|
114
|
+
commitHint: 'docs(specs): analyze repository and define spec',
|
|
115
|
+
skipVerification: true,
|
|
116
|
+
})
|
|
117
|
+
: `## Git Operations\n\nDo NOT commit or push any spec files. Spec files are managed locally only.`}`;
|
|
116
118
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-prompts.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAE3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAwCxD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAU9F;AAuCD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,QAAQ,EAAE,EACpB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAUR;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,
|
|
1
|
+
{"version":3,"file":"merge-prompts.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAE3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAwCxD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAU9F;AAuCD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,QAAQ,EAAE,EACpB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAUR;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAyER;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,MAAM,CA0BR;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAqDzD"}
|
|
@@ -128,8 +128,11 @@ export function buildCommitPushPrPrompt(state, branch, baseBranch, repoUrl) {
|
|
|
128
128
|
: '';
|
|
129
129
|
const steps = [];
|
|
130
130
|
// Step 1: Commit (always)
|
|
131
|
+
const stageCmd = state.commitSpecs
|
|
132
|
+
? '`git add -A`'
|
|
133
|
+
: '`git add -A` then `git reset -- specs/` (do NOT commit the specs/ directory)';
|
|
131
134
|
steps.push(`1. Review the current changes using \`git diff\` and \`git status\`
|
|
132
|
-
2. Stage
|
|
135
|
+
2. Stage changes with ${stageCmd}
|
|
133
136
|
3. Write a conventional commit message based on the actual diff content
|
|
134
137
|
- Use the format: \`feat(<scope>): <description>\` or \`fix(<scope>): <description>\`
|
|
135
138
|
- The commit message should summarize what actually changed, not be generic
|
|
@@ -177,6 +180,7 @@ ${evidenceSection}
|
|
|
177
180
|
|
|
178
181
|
- Write a meaningful conventional commit message derived from the actual diff — do NOT use generic messages
|
|
179
182
|
${rejectionSection ? '- You MUST modify source code files to address the rejection feedback above BEFORE committing' : '- Do NOT modify any source code files — only perform git operations'}
|
|
183
|
+
${!state.commitSpecs ? '- Do NOT commit the `specs/` directory — it must stay untracked. If you accidentally staged it, run `git reset -- specs/` before committing' : ''}
|
|
180
184
|
- Do NOT amend existing commits
|
|
181
185
|
- Do NOT run \`git pull\`, \`git rebase\`, or \`git merge\` — this is a fresh branch, push it directly
|
|
182
186
|
- If there are no changes to commit, skip the commit step and report that no changes were found`;
|
|
@@ -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,CAiOhE"}
|
|
@@ -219,10 +219,12 @@ You MUST write TWO files:
|
|
|
219
219
|
- Do NOT modify any source code
|
|
220
220
|
- Do NOT start implementing — planning only
|
|
221
221
|
|
|
222
|
-
${
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
222
|
+
${state.commitSpecs
|
|
223
|
+
? buildCommitPushBlock({
|
|
224
|
+
push: state.push,
|
|
225
|
+
files: [`${state.specDir}/plan.yaml`, `${state.specDir}/tasks.yaml`],
|
|
226
|
+
commitHint: 'docs(specs): create implementation plan and task breakdown',
|
|
227
|
+
skipVerification: true,
|
|
228
|
+
})
|
|
229
|
+
: `## Git Operations\n\nDo NOT commit or push any spec files. Spec files are managed locally only.`}`;
|
|
228
230
|
}
|
|
@@ -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,CAoMxE"}
|
|
@@ -84,9 +84,9 @@ Update the file at: ${state.specDir}/spec.yaml
|
|
|
84
84
|
|
|
85
85
|
Write the COMPLETE file. Preserve name/number/branch/technologies from analysis and update:
|
|
86
86
|
|
|
87
|
-
name: (keep)
|
|
88
|
-
number: (keep)
|
|
89
|
-
branch: (keep)
|
|
87
|
+
name: (keep — string)
|
|
88
|
+
number: (keep — MUST be a bare integer, e.g. 2, NOT "002" or "2")
|
|
89
|
+
branch: (keep — string)
|
|
90
90
|
oneLiner: (keep or refine)
|
|
91
91
|
summary: >
|
|
92
92
|
(keep or refine based on requirements)
|
|
@@ -185,10 +185,12 @@ Write the COMPLETE file. Preserve name/number/branch/technologies from analysis
|
|
|
185
185
|
- Do NOT create any other files
|
|
186
186
|
- Do NOT modify any source code
|
|
187
187
|
|
|
188
|
-
${
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
188
|
+
${state.commitSpecs
|
|
189
|
+
? buildCommitPushBlock({
|
|
190
|
+
push: state.push,
|
|
191
|
+
files: [`${state.specDir}/spec.yaml`],
|
|
192
|
+
commitHint: 'docs(specs): define requirements and product questions',
|
|
193
|
+
skipVerification: true,
|
|
194
|
+
})
|
|
195
|
+
: `## Git Operations\n\nDo NOT commit or push any spec files. Spec files are managed locally only.`}`;
|
|
194
196
|
}
|
|
@@ -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,CAuJpE"}
|
|
@@ -146,10 +146,12 @@ Use this YAML structure:
|
|
|
146
146
|
- Do NOT create any other files
|
|
147
147
|
- Do NOT modify any source code
|
|
148
148
|
|
|
149
|
-
${
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
149
|
+
${state.commitSpecs
|
|
150
|
+
? buildCommitPushBlock({
|
|
151
|
+
push: state.push,
|
|
152
|
+
files: [`${state.specDir}/research.yaml`],
|
|
153
|
+
commitHint: 'docs(specs): research technical decisions and library choices',
|
|
154
|
+
skipVerification: true,
|
|
155
|
+
})
|
|
156
|
+
: `## Git Operations\n\nDo NOT commit or push any spec files. Spec files are managed locally only.`}`;
|
|
155
157
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec.schema.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/spec.schema.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"spec.schema.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/spec.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,iBAAiB,CAAC;AA8BzB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAYnE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAqBxE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { requireString, requireNonEmptyArray } from './validation.js';
|
|
1
|
+
import { requireString, requireInteger, requireNonEmptyArray, } from './validation.js';
|
|
2
2
|
const VALID_SIZE_ESTIMATES = ['S', 'M', 'L', 'XL'];
|
|
3
3
|
function validateBaseSpec(data, errors) {
|
|
4
4
|
if (!data || typeof data !== 'object') {
|
|
@@ -7,6 +7,8 @@ function validateBaseSpec(data, errors) {
|
|
|
7
7
|
}
|
|
8
8
|
const d = data;
|
|
9
9
|
requireString(d, 'name', errors);
|
|
10
|
+
requireInteger(d, 'number', errors);
|
|
11
|
+
requireString(d, 'branch', errors);
|
|
10
12
|
requireString(d, 'oneLiner', errors);
|
|
11
13
|
requireString(d, 'summary', errors);
|
|
12
14
|
requireString(d, 'phase', errors);
|
|
@@ -3,6 +3,7 @@ export interface ValidationResult {
|
|
|
3
3
|
errors: string[];
|
|
4
4
|
}
|
|
5
5
|
export declare function requireString(data: Record<string, unknown>, field: string, errors: string[], prefix?: string): void;
|
|
6
|
+
export declare function requireInteger(data: Record<string, unknown>, field: string, errors: string[], prefix?: string): void;
|
|
6
7
|
export declare function requireNonEmptyArray(data: Record<string, unknown>, field: string, errors: string[], prefix?: string): unknown[] | null;
|
|
7
8
|
export declare function requireArrayOfShape(data: Record<string, unknown>, field: string, errors: string[], itemChecker: (item: unknown, index: number, errors: string[]) => void, prefix?: string): void;
|
|
8
9
|
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/validation.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,SAAK,GACV,IAAI,CASN;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,SAAK,GACV,OAAO,EAAE,GAAG,IAAI,CAelB;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,EAChB,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,EACrE,MAAM,SAAK,GACV,IAAI,CAMN"}
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/validation.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,SAAK,GACV,IAAI,CASN;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,SAAK,GACV,IAAI,CASN;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,SAAK,GACV,OAAO,EAAE,GAAG,IAAI,CAelB;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,EAChB,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,EACrE,MAAM,SAAK,GACV,IAAI,CAMN"}
|
|
@@ -10,6 +10,15 @@ export function requireString(data, field, errors, prefix = '') {
|
|
|
10
10
|
errors.push(`Field '${prefix}${field}' must not be empty`);
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
+
export function requireInteger(data, field, errors, prefix = '') {
|
|
14
|
+
const val = data[field];
|
|
15
|
+
if (val === undefined || val === null) {
|
|
16
|
+
errors.push(`Missing required integer field '${prefix}${field}'`);
|
|
17
|
+
}
|
|
18
|
+
else if (typeof val !== 'number' || !Number.isInteger(val)) {
|
|
19
|
+
errors.push(`Field '${prefix}${field}' must be an integer, got ${typeof val === 'number' ? val : typeof val}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
13
22
|
export function requireNonEmptyArray(data, field, errors, prefix = '') {
|
|
14
23
|
const val = data[field];
|
|
15
24
|
if (val === undefined || val === null) {
|
|
@@ -48,6 +48,11 @@ export declare const FeatureAgentAnnotation: import("@langchain/langgraph").Anno
|
|
|
48
48
|
ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
49
49
|
push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
|
|
50
50
|
openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
|
|
51
|
+
forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
|
|
52
|
+
commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
|
|
53
|
+
ciWatchEnabled: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
|
|
54
|
+
enableEvidence: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
|
|
55
|
+
commitEvidence: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
|
|
51
56
|
evidence: import("@langchain/langgraph").BinaryOperatorAggregate<Evidence[], Evidence[]>;
|
|
52
57
|
evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
|
|
53
58
|
resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAEzF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAEzF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwHjC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,OAAO,sBAAsB,CAAC,KAAK,CAAC"}
|
|
@@ -79,6 +79,26 @@ export const FeatureAgentAnnotation = Annotation.Root({
|
|
|
79
79
|
reducer: (_prev, next) => next,
|
|
80
80
|
default: () => false,
|
|
81
81
|
}),
|
|
82
|
+
forkAndPr: Annotation({
|
|
83
|
+
reducer: (_prev, next) => next,
|
|
84
|
+
default: () => false,
|
|
85
|
+
}),
|
|
86
|
+
commitSpecs: Annotation({
|
|
87
|
+
reducer: (_prev, next) => next,
|
|
88
|
+
default: () => true,
|
|
89
|
+
}),
|
|
90
|
+
ciWatchEnabled: Annotation({
|
|
91
|
+
reducer: (_prev, next) => next,
|
|
92
|
+
default: () => true,
|
|
93
|
+
}),
|
|
94
|
+
enableEvidence: Annotation({
|
|
95
|
+
reducer: (_prev, next) => next,
|
|
96
|
+
default: () => false,
|
|
97
|
+
}),
|
|
98
|
+
commitEvidence: Annotation({
|
|
99
|
+
reducer: (_prev, next) => next,
|
|
100
|
+
default: () => false,
|
|
101
|
+
}),
|
|
82
102
|
// --- Evidence state ---
|
|
83
103
|
evidence: Annotation({
|
|
84
104
|
reducer: (prev, next) => [...prev, ...next],
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coasts Service Implementation
|
|
3
|
+
*
|
|
4
|
+
* Infrastructure adapter wrapping the coast CLI binary for containerized
|
|
5
|
+
* runtime isolation. Uses constructor-injected ExecFunction for subprocess
|
|
6
|
+
* invocation and IStructuredAgentCaller for AI-powered Coastfile generation.
|
|
7
|
+
*
|
|
8
|
+
* Following Clean Architecture:
|
|
9
|
+
* - Implements the ICoastsService application port
|
|
10
|
+
* - Lives in the infrastructure layer
|
|
11
|
+
* - No direct child_process imports (injected via ExecFunction)
|
|
12
|
+
*/
|
|
13
|
+
import type { ICoastsService, PrerequisiteCheckResult, CoastInstance } from '../../application/ports/output/services/coasts-service.interface.js';
|
|
14
|
+
import type { IStructuredAgentCaller } from '../../application/ports/output/agents/structured-agent-caller.interface.js';
|
|
15
|
+
import type { ExecFunction } from './git/worktree.service.js';
|
|
16
|
+
export declare class CoastsService implements ICoastsService {
|
|
17
|
+
private readonly execFile;
|
|
18
|
+
private readonly structuredCaller;
|
|
19
|
+
private cachedInstallationPrompt;
|
|
20
|
+
private readonly isWindows;
|
|
21
|
+
constructor(execFile: ExecFunction, structuredCaller: IStructuredAgentCaller, isWindows?: boolean);
|
|
22
|
+
checkPrerequisites(workDir: string): Promise<PrerequisiteCheckResult>;
|
|
23
|
+
build(workDir: string): Promise<void>;
|
|
24
|
+
run(workDir: string): Promise<CoastInstance>;
|
|
25
|
+
stop(workDir: string): Promise<void>;
|
|
26
|
+
lookup(workDir: string): Promise<CoastInstance | null>;
|
|
27
|
+
isRunning(workDir: string): Promise<boolean>;
|
|
28
|
+
checkout(workDir: string): Promise<void>;
|
|
29
|
+
getInstallationPrompt(): Promise<string>;
|
|
30
|
+
generateCoastfile(workDir: string): Promise<string>;
|
|
31
|
+
hasCoastfile(workDir: string): Promise<boolean>;
|
|
32
|
+
private checkCoastBinary;
|
|
33
|
+
private checkDocker;
|
|
34
|
+
private checkCoastdRunning;
|
|
35
|
+
private execCoast;
|
|
36
|
+
/**
|
|
37
|
+
* Parse coast CLI output to extract port and URL from stdout.
|
|
38
|
+
* Looks for patterns like "port 3000" and "http://localhost:3000".
|
|
39
|
+
*/
|
|
40
|
+
private parseCoastInstance;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=coasts.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coasts.service.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/services/coasts.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EACV,cAAc,EACd,uBAAuB,EACvB,aAAa,EACd,MAAM,qEAAqE,CAAC;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4EAA4E,CAAC;AACzH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAgC9D,qBACa,aAAc,YAAW,cAAc;IAKxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACf,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IALrE,OAAO,CAAC,wBAAwB,CAAuB;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;gBAGO,QAAQ,EAAE,YAAY,EACZ,gBAAgB,EAAE,sBAAsB,EAC3F,SAAS,CAAC,EAAE,OAAO;IAKf,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAiDrE,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAK5C,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAStD,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK5C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;IAaxC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBnD,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAMvC,gBAAgB;YAIhB,WAAW;YAIX,kBAAkB;YAIlB,SAAS;IAQvB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAS3B"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coasts Service Implementation
|
|
3
|
+
*
|
|
4
|
+
* Infrastructure adapter wrapping the coast CLI binary for containerized
|
|
5
|
+
* runtime isolation. Uses constructor-injected ExecFunction for subprocess
|
|
6
|
+
* invocation and IStructuredAgentCaller for AI-powered Coastfile generation.
|
|
7
|
+
*
|
|
8
|
+
* Following Clean Architecture:
|
|
9
|
+
* - Implements the ICoastsService application port
|
|
10
|
+
* - Lives in the infrastructure layer
|
|
11
|
+
* - No direct child_process imports (injected via ExecFunction)
|
|
12
|
+
*/
|
|
13
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
14
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
15
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
16
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
17
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
18
|
+
};
|
|
19
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
21
|
+
};
|
|
22
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
23
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
24
|
+
};
|
|
25
|
+
import { existsSync, writeFileSync } from 'node:fs';
|
|
26
|
+
import path from 'node:path';
|
|
27
|
+
import { injectable, inject } from 'tsyringe';
|
|
28
|
+
import { IS_WINDOWS } from '../platform.js';
|
|
29
|
+
/** Timeout for coast build (may need to pull Docker images). */
|
|
30
|
+
const BUILD_TIMEOUT_MS = 30_000;
|
|
31
|
+
/** Timeout for all other coast CLI commands. */
|
|
32
|
+
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
33
|
+
/** JSON schema for Coastfile generation via structured agent caller. */
|
|
34
|
+
const COASTFILE_SCHEMA = {
|
|
35
|
+
type: 'object',
|
|
36
|
+
properties: {
|
|
37
|
+
content: {
|
|
38
|
+
type: 'string',
|
|
39
|
+
description: 'The complete Coastfile content in TOML format',
|
|
40
|
+
},
|
|
41
|
+
warnings: {
|
|
42
|
+
type: 'array',
|
|
43
|
+
items: { type: 'string' },
|
|
44
|
+
description: 'Any warnings or notes about the generated Coastfile',
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
required: ['content'],
|
|
48
|
+
additionalProperties: false,
|
|
49
|
+
};
|
|
50
|
+
let CoastsService = class CoastsService {
|
|
51
|
+
execFile;
|
|
52
|
+
structuredCaller;
|
|
53
|
+
cachedInstallationPrompt = null;
|
|
54
|
+
isWindows;
|
|
55
|
+
constructor(execFile, structuredCaller, isWindows) {
|
|
56
|
+
this.execFile = execFile;
|
|
57
|
+
this.structuredCaller = structuredCaller;
|
|
58
|
+
this.isWindows = isWindows ?? IS_WINDOWS;
|
|
59
|
+
}
|
|
60
|
+
async checkPrerequisites(workDir) {
|
|
61
|
+
if (this.isWindows) {
|
|
62
|
+
return {
|
|
63
|
+
coastBinary: false,
|
|
64
|
+
docker: false,
|
|
65
|
+
coastdRunning: false,
|
|
66
|
+
allMet: false,
|
|
67
|
+
missingMessages: [
|
|
68
|
+
'Coasts dev server is not supported on Windows. See https://coasts.dev/docs for platform support.',
|
|
69
|
+
],
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
const [coastResult, dockerResult, coastdResult] = await Promise.allSettled([
|
|
73
|
+
this.checkCoastBinary(),
|
|
74
|
+
this.checkDocker(),
|
|
75
|
+
this.checkCoastdRunning(workDir),
|
|
76
|
+
]);
|
|
77
|
+
const coastBinary = coastResult.status === 'fulfilled';
|
|
78
|
+
const docker = dockerResult.status === 'fulfilled';
|
|
79
|
+
const coastdRunning = coastdResult.status === 'fulfilled';
|
|
80
|
+
const missingMessages = [];
|
|
81
|
+
if (!coastBinary) {
|
|
82
|
+
missingMessages.push('coast binary not found on PATH. Install it with: curl -fsSL https://coasts.dev/install | sh. See https://coasts.dev/docs');
|
|
83
|
+
}
|
|
84
|
+
if (!docker) {
|
|
85
|
+
missingMessages.push('Docker daemon is not reachable. Start Docker Desktop or run: sudo systemctl start docker');
|
|
86
|
+
}
|
|
87
|
+
if (!coastdRunning) {
|
|
88
|
+
missingMessages.push('coastd daemon is not running. Start it with: coastd &. See https://coasts.dev/docs/daemon');
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
coastBinary,
|
|
92
|
+
docker,
|
|
93
|
+
coastdRunning,
|
|
94
|
+
allMet: coastBinary && docker && coastdRunning,
|
|
95
|
+
missingMessages,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
async build(workDir) {
|
|
99
|
+
await this.execCoast(['build'], workDir, BUILD_TIMEOUT_MS);
|
|
100
|
+
}
|
|
101
|
+
async run(workDir) {
|
|
102
|
+
const { stdout } = await this.execCoast(['run'], workDir);
|
|
103
|
+
return this.parseCoastInstance(stdout);
|
|
104
|
+
}
|
|
105
|
+
async stop(workDir) {
|
|
106
|
+
try {
|
|
107
|
+
await this.execCoast(['stop'], workDir);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// No-op if no instance is running
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async lookup(workDir) {
|
|
114
|
+
try {
|
|
115
|
+
const { stdout } = await this.execCoast(['lookup'], workDir);
|
|
116
|
+
return this.parseCoastInstance(stdout);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
async isRunning(workDir) {
|
|
123
|
+
const instance = await this.lookup(workDir);
|
|
124
|
+
return instance !== null;
|
|
125
|
+
}
|
|
126
|
+
async checkout(workDir) {
|
|
127
|
+
await this.execCoast(['checkout'], workDir);
|
|
128
|
+
}
|
|
129
|
+
async getInstallationPrompt() {
|
|
130
|
+
if (this.cachedInstallationPrompt !== null) {
|
|
131
|
+
return this.cachedInstallationPrompt;
|
|
132
|
+
}
|
|
133
|
+
const { stdout } = await this.execFile('coast', ['installation-prompt'], {
|
|
134
|
+
timeout: DEFAULT_TIMEOUT_MS,
|
|
135
|
+
});
|
|
136
|
+
this.cachedInstallationPrompt = stdout;
|
|
137
|
+
return stdout;
|
|
138
|
+
}
|
|
139
|
+
async generateCoastfile(workDir) {
|
|
140
|
+
const installationPrompt = await this.getInstallationPrompt();
|
|
141
|
+
const prompt = `${installationPrompt}\n\nAnalyze the project at the working directory and generate a Coastfile.\nReturn the complete Coastfile content as valid TOML in the "content" field.`;
|
|
142
|
+
const result = await this.structuredCaller.call(prompt, COASTFILE_SCHEMA, {
|
|
143
|
+
allowedTools: [],
|
|
144
|
+
silent: true,
|
|
145
|
+
maxTurns: 10,
|
|
146
|
+
});
|
|
147
|
+
const coastfilePath = path.join(workDir, 'Coastfile');
|
|
148
|
+
writeFileSync(coastfilePath, result.content, 'utf-8');
|
|
149
|
+
return coastfilePath;
|
|
150
|
+
}
|
|
151
|
+
async hasCoastfile(workDir) {
|
|
152
|
+
return existsSync(path.join(workDir, 'Coastfile'));
|
|
153
|
+
}
|
|
154
|
+
// --- Private helpers ---
|
|
155
|
+
async checkCoastBinary() {
|
|
156
|
+
await this.execFile('coast', ['--version'], { timeout: 500 });
|
|
157
|
+
}
|
|
158
|
+
async checkDocker() {
|
|
159
|
+
await this.execFile('docker', ['info'], { timeout: 500 });
|
|
160
|
+
}
|
|
161
|
+
async checkCoastdRunning(workDir) {
|
|
162
|
+
await this.execFile('coast', ['ls'], { cwd: workDir, timeout: 500 });
|
|
163
|
+
}
|
|
164
|
+
async execCoast(args, workDir, timeout = DEFAULT_TIMEOUT_MS) {
|
|
165
|
+
return this.execFile('coast', args, { cwd: workDir, timeout });
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Parse coast CLI output to extract port and URL from stdout.
|
|
169
|
+
* Looks for patterns like "port 3000" and "http://localhost:3000".
|
|
170
|
+
*/
|
|
171
|
+
parseCoastInstance(stdout) {
|
|
172
|
+
const portMatch = stdout.match(/port\s+(\d+)/i);
|
|
173
|
+
const urlMatch = stdout.match(/(https?:\/\/[^\s]+)/i);
|
|
174
|
+
const port = portMatch ? parseInt(portMatch[1], 10) : 3000;
|
|
175
|
+
const url = urlMatch ? urlMatch[1] : `http://localhost:${port}`;
|
|
176
|
+
return { port, url };
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
CoastsService = __decorate([
|
|
180
|
+
injectable(),
|
|
181
|
+
__param(0, inject('ExecFunction')),
|
|
182
|
+
__param(1, inject('IStructuredAgentCaller')),
|
|
183
|
+
__metadata("design:paramtypes", [Function, Object, Boolean])
|
|
184
|
+
], CoastsService);
|
|
185
|
+
export { CoastsService };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Fork Service Implementation
|
|
3
|
+
*
|
|
4
|
+
* Manages GitHub fork operations: forking repos, pushing to forks,
|
|
5
|
+
* creating upstream PRs, and polling upstream PR status.
|
|
6
|
+
* Uses `gh` CLI for all GitHub API interactions.
|
|
7
|
+
*/
|
|
8
|
+
import type { IGitForkService } from '../../../application/ports/output/services/git-fork-service.interface.js';
|
|
9
|
+
import type { UpstreamPrResult } from '../../../application/ports/output/services/git-fork-service.interface.js';
|
|
10
|
+
import { PrStatus } from '../../../domain/generated/output.js';
|
|
11
|
+
import type { ExecFunction } from './worktree.service.js';
|
|
12
|
+
export declare class GitForkService implements IGitForkService {
|
|
13
|
+
private readonly execFile;
|
|
14
|
+
constructor(execFile: ExecFunction);
|
|
15
|
+
forkRepository(cwd: string): Promise<void>;
|
|
16
|
+
pushToFork(cwd: string, branch: string): Promise<void>;
|
|
17
|
+
createUpstreamPr(cwd: string, title: string, body: string, head: string, base: string): Promise<UpstreamPrResult>;
|
|
18
|
+
getUpstreamPrStatus(upstreamRepo: string, prNumber: number): Promise<PrStatus>;
|
|
19
|
+
/**
|
|
20
|
+
* Extract owner/repo from a git remote URL.
|
|
21
|
+
* Handles both HTTPS and SSH formats.
|
|
22
|
+
*/
|
|
23
|
+
private extractRepoFromUrl;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=git-fork.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-fork.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/git/git-fork.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0EAA0E,CAAC;AAChH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0EAA0E,CAAC;AAKjH,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,qBACa,cAAe,YAAW,eAAe;IAChB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,YAAY;IAErE,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0C1C,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAatD,gBAAgB,CACpB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,gBAAgB,CAAC;IAiDtB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsBpF;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAU3B"}
|