@shepai/cli 1.15.0 → 1.16.0
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/README.md +168 -22
- package/dist/src/application/ports/output/{agent-executor-factory.interface.d.ts → agents/agent-executor-factory.interface.d.ts} +1 -1
- package/dist/src/application/ports/output/agents/agent-executor-factory.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/{agent-executor.interface.d.ts → agents/agent-executor.interface.d.ts} +3 -1
- package/dist/src/application/ports/output/agents/agent-executor.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/{agent-registry.interface.d.ts → agents/agent-registry.interface.d.ts} +1 -1
- package/dist/src/application/ports/output/agents/agent-registry.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/{agent-run-repository.interface.d.ts → agents/agent-run-repository.interface.d.ts} +1 -1
- package/dist/src/application/ports/output/agents/agent-run-repository.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/{agent-runner.interface.d.ts → agents/agent-runner.interface.d.ts} +1 -1
- package/dist/src/application/ports/output/agents/agent-runner.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/{agent-validator.interface.d.ts → agents/agent-validator.interface.d.ts} +1 -1
- package/dist/src/application/ports/output/agents/agent-validator.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/agents/index.d.ts +13 -0
- package/dist/src/application/ports/output/agents/index.d.ts.map +1 -0
- package/dist/src/application/ports/output/agents/index.js +6 -0
- package/dist/src/application/ports/output/index.d.ts +8 -14
- package/dist/src/application/ports/output/index.d.ts.map +1 -1
- package/dist/src/application/ports/output/index.js +5 -3
- package/dist/src/application/ports/output/{feature-repository.interface.d.ts → repositories/feature-repository.interface.d.ts} +1 -1
- package/dist/src/application/ports/output/repositories/feature-repository.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/repositories/index.d.ts +8 -0
- package/dist/src/application/ports/output/repositories/index.d.ts.map +1 -0
- package/dist/src/application/ports/output/repositories/index.js +6 -0
- package/dist/src/application/ports/output/{settings.repository.interface.d.ts → repositories/settings.repository.interface.d.ts} +1 -1
- package/dist/src/application/ports/output/repositories/settings.repository.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/services/external-issue-fetcher.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/services/index.d.ts +13 -0
- package/dist/src/application/ports/output/services/index.d.ts.map +1 -0
- package/dist/src/application/ports/output/services/index.js +7 -0
- package/dist/src/application/ports/output/services/spec-initializer.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/{version-service.interface.d.ts → services/version-service.interface.d.ts} +1 -1
- package/dist/src/application/ports/output/services/version-service.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/services/web-server-service.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/services/worktree-service.interface.d.ts.map +1 -0
- package/dist/src/application/use-cases/agents/approve-agent-run.use-case.d.ts +4 -4
- package/dist/src/application/use-cases/agents/approve-agent-run.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/agents/configure-agent.use-case.d.ts +2 -2
- package/dist/src/application/use-cases/agents/configure-agent.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/agents/delete-agent-run.use-case.d.ts +1 -1
- package/dist/src/application/use-cases/agents/delete-agent-run.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/agents/get-agent-run.use-case.d.ts +1 -1
- package/dist/src/application/use-cases/agents/get-agent-run.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/agents/list-agent-runs.use-case.d.ts +1 -1
- package/dist/src/application/use-cases/agents/list-agent-runs.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/agents/reject-agent-run.use-case.d.ts +1 -1
- package/dist/src/application/use-cases/agents/reject-agent-run.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/agents/run-agent.use-case.d.ts +2 -2
- package/dist/src/application/use-cases/agents/run-agent.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/agents/show-agent-run.use-case.d.ts +2 -2
- package/dist/src/application/use-cases/agents/show-agent-run.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/agents/stop-agent-run.use-case.d.ts +1 -1
- package/dist/src/application/use-cases/agents/stop-agent-run.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/agents/validate-agent-auth.use-case.d.ts +1 -1
- package/dist/src/application/use-cases/agents/validate-agent-auth.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/features/create-feature.use-case.d.ts +6 -6
- package/dist/src/application/use-cases/features/create-feature.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/features/create-feature.use-case.js +1 -0
- package/dist/src/application/use-cases/features/delete-feature.use-case.d.ts +4 -4
- package/dist/src/application/use-cases/features/delete-feature.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/features/list-features.use-case.d.ts +1 -1
- package/dist/src/application/use-cases/features/list-features.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/features/resume-feature.use-case.d.ts +4 -4
- package/dist/src/application/use-cases/features/resume-feature.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/features/show-feature.use-case.d.ts +1 -1
- package/dist/src/application/use-cases/features/show-feature.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/settings/initialize-settings.use-case.d.ts +1 -1
- package/dist/src/application/use-cases/settings/initialize-settings.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/settings/load-settings.use-case.d.ts +1 -1
- package/dist/src/application/use-cases/settings/load-settings.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/settings/update-settings.use-case.d.ts +1 -1
- package/dist/src/application/use-cases/settings/update-settings.use-case.d.ts.map +1 -1
- package/dist/src/infrastructure/repositories/agent-run.repository.d.ts +1 -1
- package/dist/src/infrastructure/repositories/agent-run.repository.d.ts.map +1 -1
- package/dist/src/infrastructure/repositories/sqlite-feature.repository.d.ts +1 -1
- package/dist/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -1
- package/dist/src/infrastructure/repositories/sqlite-settings.repository.d.ts +1 -1
- package/dist/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/analyze-repo/analyze-repository-graph.d.ts +1 -1
- package/dist/src/infrastructure/services/agents/analyze-repo/analyze-repository-graph.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts +2 -2
- package/dist/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/common/agent-registry.service.d.ts +1 -1
- package/dist/src/infrastructure/services/agents/common/agent-registry.service.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/common/agent-runner.service.d.ts +4 -4
- package/dist/src/infrastructure/services/agents/common/agent-runner.service.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/common/agent-validator.service.d.ts +1 -1
- package/dist/src/infrastructure/services/agents/common/agent-validator.service.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts +3 -1
- package/dist/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/common/executors/claude-code-executor.service.js +5 -0
- package/dist/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.d.ts +2 -2
- package/dist/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/common/executors/mock-executor.service.d.ts +1 -1
- package/dist/src/infrastructure/services/agents/common/executors/mock-executor.service.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +1 -1
- package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +2 -2
- package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/feature-agent/heartbeat.d.ts +1 -1
- package/dist/src/infrastructure/services/agents/feature-agent/heartbeat.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/analyze.node.d.ts +1 -1
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/analyze.node.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/implement.node.d.ts +8 -7
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/implement.node.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/implement.node.js +140 -16
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +1 -1
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/plan.node.d.ts +1 -1
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/plan.node.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.d.ts +44 -4
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.js +86 -14
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/requirements.node.d.ts +1 -1
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/requirements.node.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/research.node.d.ts +1 -1
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/research.node.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/streaming/streaming-executor-proxy.d.ts +1 -1
- package/dist/src/infrastructure/services/agents/streaming/streaming-executor-proxy.d.ts.map +1 -1
- package/dist/src/infrastructure/services/external/github-issue.service.d.ts +1 -1
- package/dist/src/infrastructure/services/external/github-issue.service.d.ts.map +1 -1
- package/dist/src/infrastructure/services/external/github-issue.service.js +1 -1
- package/dist/src/infrastructure/services/external/jira-ticket.service.d.ts +1 -1
- package/dist/src/infrastructure/services/external/jira-ticket.service.d.ts.map +1 -1
- package/dist/src/infrastructure/services/external/jira-ticket.service.js +1 -1
- package/dist/src/infrastructure/services/git/worktree.service.d.ts +1 -1
- package/dist/src/infrastructure/services/git/worktree.service.d.ts.map +1 -1
- package/dist/src/infrastructure/services/git/worktree.service.js +1 -1
- package/dist/src/infrastructure/services/spec/spec-initializer.service.d.ts +1 -1
- package/dist/src/infrastructure/services/spec/spec-initializer.service.d.ts.map +1 -1
- package/dist/src/infrastructure/services/web-server.service.d.ts +1 -1
- package/dist/src/infrastructure/services/web-server.service.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/new.command.js +3 -3
- package/dist/src/presentation/cli/ui/index.d.ts +1 -0
- package/dist/src/presentation/cli/ui/index.d.ts.map +1 -1
- package/dist/src/presentation/cli/ui/index.js +1 -0
- package/dist/src/presentation/cli/ui/spinner.d.ts +21 -0
- package/dist/src/presentation/cli/ui/spinner.d.ts.map +1 -0
- package/dist/src/presentation/cli/ui/spinner.js +45 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/cache/.previewinfo +1 -1
- package/web/.next/cache/.rscinfo +1 -1
- package/web/.next/cache/config.json +3 -3
- 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/_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.html +2 -2
- package/web/.next/server/app/_not-found.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/index.html +2 -2
- package/web/.next/server/app/index.rsc +1 -1
- package/web/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/version.html +2 -2
- package/web/.next/server/app/version.rsc +1 -1
- package/web/.next/server/app/version.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/version.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/version.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/version.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/version.segments/version/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/version.segments/version.segment.rsc +1 -1
- package/web/.next/server/chunks/ssr/_19be0743._.js +1 -1
- package/web/.next/server/pages/404.html +2 -2
- 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 +1 -1
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/dist/src/application/ports/output/agent-executor-factory.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/agent-executor.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/agent-registry.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/agent-run-repository.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/agent-runner.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/agent-validator.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/external-issue-fetcher.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/feature-agent-process.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/feature-repository.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/settings.repository.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/spec-initializer.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/version-service.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/web-server-service.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/worktree-service.interface.d.ts.map +0 -1
- /package/dist/src/application/ports/output/{agent-executor-factory.interface.js → agents/agent-executor-factory.interface.js} +0 -0
- /package/dist/src/application/ports/output/{agent-executor.interface.js → agents/agent-executor.interface.js} +0 -0
- /package/dist/src/application/ports/output/{agent-registry.interface.js → agents/agent-registry.interface.js} +0 -0
- /package/dist/src/application/ports/output/{agent-run-repository.interface.js → agents/agent-run-repository.interface.js} +0 -0
- /package/dist/src/application/ports/output/{agent-runner.interface.js → agents/agent-runner.interface.js} +0 -0
- /package/dist/src/application/ports/output/{agent-validator.interface.js → agents/agent-validator.interface.js} +0 -0
- /package/dist/src/application/ports/output/{feature-agent-process.interface.d.ts → agents/feature-agent-process.interface.d.ts} +0 -0
- /package/dist/src/application/ports/output/{feature-agent-process.interface.js → agents/feature-agent-process.interface.js} +0 -0
- /package/dist/src/application/ports/output/{feature-repository.interface.js → repositories/feature-repository.interface.js} +0 -0
- /package/dist/src/application/ports/output/{settings.repository.interface.js → repositories/settings.repository.interface.js} +0 -0
- /package/dist/src/application/ports/output/{external-issue-fetcher.interface.d.ts → services/external-issue-fetcher.interface.d.ts} +0 -0
- /package/dist/src/application/ports/output/{external-issue-fetcher.interface.js → services/external-issue-fetcher.interface.js} +0 -0
- /package/dist/src/application/ports/output/{spec-initializer.interface.d.ts → services/spec-initializer.interface.d.ts} +0 -0
- /package/dist/src/application/ports/output/{spec-initializer.interface.js → services/spec-initializer.interface.js} +0 -0
- /package/dist/src/application/ports/output/{version-service.interface.js → services/version-service.interface.js} +0 -0
- /package/dist/src/application/ports/output/{web-server-service.interface.d.ts → services/web-server-service.interface.d.ts} +0 -0
- /package/dist/src/application/ports/output/{web-server-service.interface.js → services/web-server-service.interface.js} +0 -0
- /package/dist/src/application/ports/output/{worktree-service.interface.d.ts → services/worktree-service.interface.d.ts} +0 -0
- /package/dist/src/application/ports/output/{worktree-service.interface.js → services/worktree-service.interface.js} +0 -0
- /package/web/.next/static/{XV-wYY85Xk9ANCuQDQ6_H → KqMr5DLdrvbaA-agLuHP1}/_buildManifest.js +0 -0
- /package/web/.next/static/{XV-wYY85Xk9ANCuQDQ6_H → KqMr5DLdrvbaA-agLuHP1}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{XV-wYY85Xk9ANCuQDQ6_H → KqMr5DLdrvbaA-agLuHP1}/_ssgManifest.js +0 -0
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import type { IAgentExecutor } from '../../../../../application/ports/output/agent-executor.interface.js';
|
|
2
|
-
import type { FeatureAgentState } from '../state.js';
|
|
3
1
|
/**
|
|
4
|
-
*
|
|
2
|
+
* Implement Node — Phase-Level Orchestrator
|
|
5
3
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* Reads plan.yaml and tasks.yaml, then executes each phase by building
|
|
5
|
+
* a focused implementation prompt and calling the executor. Parallel
|
|
6
|
+
* phases spawn concurrent executor calls. Progress is tracked in
|
|
7
|
+
* feature.yaml between phases.
|
|
9
8
|
*/
|
|
10
|
-
|
|
9
|
+
import type { IAgentExecutor } from '../../../../../application/ports/output/agents/agent-executor.interface.js';
|
|
10
|
+
import type { FeatureAgentState } from '../state.js';
|
|
11
|
+
export declare function createImplementNode(executor: IAgentExecutor): (state: FeatureAgentState) => Promise<Partial<FeatureAgentState>>;
|
|
11
12
|
//# sourceMappingURL=implement.node.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implement.node.d.ts","sourceRoot":"","sources":["../../../../../../../src/infrastructure/services/agents/feature-agent/nodes/implement.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"implement.node.d.ts","sourceRoot":"","sources":["../../../../../../../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;AA2DrD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,IAG5C,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAqJ7E"}
|
|
@@ -1,23 +1,147 @@
|
|
|
1
|
-
import { createNodeLogger } from './node-helpers.js';
|
|
2
|
-
import { reportNodeStart } from '../heartbeat.js';
|
|
3
|
-
import { getImplementPlaceholderJoke } from './prompts/implement.prompt.js';
|
|
4
1
|
/**
|
|
5
|
-
*
|
|
2
|
+
* Implement Node — Phase-Level Orchestrator
|
|
6
3
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
4
|
+
* Reads plan.yaml and tasks.yaml, then executes each phase by building
|
|
5
|
+
* a focused implementation prompt and calling the executor. Parallel
|
|
6
|
+
* phases spawn concurrent executor calls. Progress is tracked in
|
|
7
|
+
* feature.yaml between phases.
|
|
8
|
+
*/
|
|
9
|
+
import yaml from 'js-yaml';
|
|
10
|
+
import { writeFileSync } from 'node:fs';
|
|
11
|
+
import { join } from 'node:path';
|
|
12
|
+
import { interrupt, isGraphBubbleUp } from '@langchain/langgraph';
|
|
13
|
+
import { createNodeLogger, readSpecFile, buildExecutorOptions, shouldInterrupt, } from './node-helpers.js';
|
|
14
|
+
import { reportNodeStart } from '../heartbeat.js';
|
|
15
|
+
import { buildImplementPhasePrompt, } from './prompts/implement.prompt.js';
|
|
16
|
+
/**
|
|
17
|
+
* Update feature.yaml with current implementation progress.
|
|
18
|
+
* Silently no-ops if the file is missing or unparseable.
|
|
10
19
|
*/
|
|
11
|
-
|
|
20
|
+
function updateFeatureProgress(specDir, completedCount, totalCount, currentPhase, currentTaskId, log) {
|
|
21
|
+
try {
|
|
22
|
+
const content = readSpecFile(specDir, 'feature.yaml');
|
|
23
|
+
if (!content)
|
|
24
|
+
return;
|
|
25
|
+
const data = yaml.load(content);
|
|
26
|
+
if (!data || typeof data !== 'object')
|
|
27
|
+
return;
|
|
28
|
+
const status = (data.status ?? {});
|
|
29
|
+
data.status = {
|
|
30
|
+
...status,
|
|
31
|
+
phase: currentPhase,
|
|
32
|
+
progress: {
|
|
33
|
+
completed: completedCount,
|
|
34
|
+
total: totalCount,
|
|
35
|
+
percentage: totalCount > 0 ? Math.round((completedCount / totalCount) * 100) : 0,
|
|
36
|
+
},
|
|
37
|
+
currentTask: currentTaskId,
|
|
38
|
+
lastUpdated: new Date().toISOString(),
|
|
39
|
+
lastUpdatedBy: 'feature-agent:implement',
|
|
40
|
+
};
|
|
41
|
+
writeFileSync(join(specDir, 'feature.yaml'), yaml.dump(data, { indent: 2, lineWidth: -1 }), 'utf-8');
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
log.error(`Failed to update feature.yaml: ${err instanceof Error ? err.message : String(err)}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export function createImplementNode(executor) {
|
|
12
48
|
const log = createNodeLogger('implement');
|
|
13
|
-
return async (
|
|
14
|
-
log.info('Starting
|
|
49
|
+
return async (state) => {
|
|
50
|
+
log.info('Starting implementation phase orchestration');
|
|
15
51
|
reportNodeStart('implement');
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
52
|
+
const startTime = Date.now();
|
|
53
|
+
const messages = [];
|
|
54
|
+
try {
|
|
55
|
+
// --- Parse plan & tasks ---
|
|
56
|
+
const planContent = readSpecFile(state.specDir, 'plan.yaml');
|
|
57
|
+
const tasksContent = readSpecFile(state.specDir, 'tasks.yaml');
|
|
58
|
+
if (!planContent || !tasksContent) {
|
|
59
|
+
const msg = 'Missing plan.yaml or tasks.yaml — cannot implement';
|
|
60
|
+
log.error(msg);
|
|
61
|
+
return { currentNode: 'implement', error: msg, messages: [`[implement] Error: ${msg}`] };
|
|
62
|
+
}
|
|
63
|
+
const planData = yaml.load(planContent);
|
|
64
|
+
const tasksData = yaml.load(tasksContent);
|
|
65
|
+
if (!planData?.phases?.length || !tasksData?.tasks?.length) {
|
|
66
|
+
const msg = 'Empty phases or tasks — nothing to implement';
|
|
67
|
+
log.error(msg);
|
|
68
|
+
return { currentNode: 'implement', error: msg, messages: [`[implement] Error: ${msg}`] };
|
|
69
|
+
}
|
|
70
|
+
const taskMap = new Map(tasksData.tasks.map((t) => [t.id, t]));
|
|
71
|
+
const totalTasks = tasksData.tasks.length;
|
|
72
|
+
let completedTasks = 0;
|
|
73
|
+
const totalPhases = planData.phases.length;
|
|
74
|
+
// --- Execute phases in order ---
|
|
75
|
+
for (let i = 0; i < totalPhases; i++) {
|
|
76
|
+
const phase = planData.phases[i];
|
|
77
|
+
const isLastPhase = i === totalPhases - 1;
|
|
78
|
+
// Resolve tasks: use explicit taskIds if present, otherwise match by phaseId
|
|
79
|
+
const phaseTasks = phase.taskIds?.length
|
|
80
|
+
? phase.taskIds
|
|
81
|
+
.map((id) => taskMap.get(id))
|
|
82
|
+
.filter((t) => t !== undefined)
|
|
83
|
+
: tasksData.tasks.filter((t) => t.phaseId === phase.id);
|
|
84
|
+
if (phaseTasks.length === 0) {
|
|
85
|
+
log.info(`Phase ${phase.id} "${phase.name}" — no tasks, skipping`);
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
log.info(`Phase ${phase.id} "${phase.name}" — ${phaseTasks.length} task(s), parallel: ${phase.parallel}`);
|
|
89
|
+
updateFeatureProgress(state.specDir, completedTasks, totalTasks, `implementing-${phase.id}`, phaseTasks[0].id, log);
|
|
90
|
+
const options = buildExecutorOptions(state);
|
|
91
|
+
const promptContext = { isLastPhase, phaseIndex: i, totalPhases };
|
|
92
|
+
if (phase.parallel && phaseTasks.length > 1) {
|
|
93
|
+
// Parallel: one executor call per task
|
|
94
|
+
log.info(`Spawning ${phaseTasks.length} parallel executor calls`);
|
|
95
|
+
const results = await Promise.all(phaseTasks.map((task) => {
|
|
96
|
+
const singleTaskPhase = {
|
|
97
|
+
...phase,
|
|
98
|
+
taskIds: [task.id],
|
|
99
|
+
};
|
|
100
|
+
const prompt = buildImplementPhasePrompt(state, singleTaskPhase, [task], promptContext);
|
|
101
|
+
log.info(` [parallel] Task ${task.id}: "${task.title}" — ${prompt.length} chars`);
|
|
102
|
+
return executor.execute(prompt, options);
|
|
103
|
+
}));
|
|
104
|
+
for (let j = 0; j < results.length; j++) {
|
|
105
|
+
log.info(` [parallel] Task ${phaseTasks[j].id} complete (${results[j].result.length} chars)`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
// Sequential: single executor call with all phase tasks
|
|
110
|
+
const prompt = buildImplementPhasePrompt(state, phase, phaseTasks, promptContext);
|
|
111
|
+
log.info(`Executing phase prompt — ${prompt.length} chars`);
|
|
112
|
+
const result = await executor.execute(prompt, options);
|
|
113
|
+
log.info(`Phase complete (${result.result.length} chars)`);
|
|
114
|
+
}
|
|
115
|
+
completedTasks += phaseTasks.length;
|
|
116
|
+
const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
117
|
+
messages.push(`[implement] Phase ${phase.id} "${phase.name}" — ${phaseTasks.length} task(s) done (${elapsed}s)`);
|
|
118
|
+
updateFeatureProgress(state.specDir, completedTasks, totalTasks, `implementing-${phase.id}`, null, log);
|
|
119
|
+
}
|
|
120
|
+
// --- Final ---
|
|
121
|
+
const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
122
|
+
log.info(`All phases complete — ${completedTasks}/${totalTasks} tasks (${elapsed}s)`);
|
|
123
|
+
updateFeatureProgress(state.specDir, totalTasks, totalTasks, 'implementation-complete', null, log);
|
|
124
|
+
messages.push(`[implement] Complete: ${totalTasks} tasks across ${totalPhases} phases (${elapsed}s)`);
|
|
125
|
+
if (shouldInterrupt('implement', state.approvalMode)) {
|
|
126
|
+
log.info('Interrupting for human approval');
|
|
127
|
+
interrupt({
|
|
128
|
+
node: 'implement',
|
|
129
|
+
message: `Implementation complete: ${totalTasks} tasks across ${totalPhases} phases. Approve to finish.`,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
return { currentNode: 'implement', messages };
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
if (isGraphBubbleUp(err))
|
|
136
|
+
throw err;
|
|
137
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
138
|
+
const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
139
|
+
log.error(`${message} (after ${elapsed}s)`);
|
|
140
|
+
return {
|
|
141
|
+
currentNode: 'implement',
|
|
142
|
+
error: message,
|
|
143
|
+
messages: [...messages, `[implement] Error: ${message}`],
|
|
144
|
+
};
|
|
145
|
+
}
|
|
22
146
|
};
|
|
23
147
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Provides consistent logging, spec file reading, executor invocation,
|
|
5
5
|
* and error handling so every node follows the same patterns.
|
|
6
6
|
*/
|
|
7
|
-
import type { IAgentExecutor, AgentExecutionOptions } from '../../../../../application/ports/output/agent-executor.interface.js';
|
|
7
|
+
import type { IAgentExecutor, AgentExecutionOptions } from '../../../../../application/ports/output/agents/agent-executor.interface.js';
|
|
8
8
|
import type { FeatureAgentState } from '../state.js';
|
|
9
9
|
/**
|
|
10
10
|
* Create a scoped logger that prefixes messages with the node name.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-helpers.d.ts","sourceRoot":"","sources":["../../../../../../../src/infrastructure/services/agents/feature-agent/nodes/node-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACtB,MAAM,
|
|
1
|
+
{"version":3,"file":"node-helpers.d.ts","sourceRoot":"","sources":["../../../../../../../src/infrastructure/services/agents/feature-agent/nodes/node-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACtB,MAAM,+DAA+D,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM;kBAE/B,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;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,GAAG,qBAAqB,CAIpF;AAUD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAI3F;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,CAiDnE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IAgentExecutor } from '../../../../../application/ports/output/agent-executor.interface.js';
|
|
1
|
+
import type { IAgentExecutor } from '../../../../../application/ports/output/agents/agent-executor.interface.js';
|
|
2
2
|
/**
|
|
3
3
|
* Creates the plan node that generates an implementation plan (plan.yaml)
|
|
4
4
|
* and task breakdown with TDD cycles (tasks.yaml) from spec and research.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.node.d.ts","sourceRoot":"","sources":["../../../../../../../src/infrastructure/services/agents/feature-agent/nodes/plan.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"plan.node.d.ts","sourceRoot":"","sources":["../../../../../../../src/infrastructure/services/agents/feature-agent/nodes/plan.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAIpG;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,iHAEtD"}
|
package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.d.ts
CHANGED
|
@@ -1,8 +1,48 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Implement Phase Prompt
|
|
2
|
+
* Implement Phase Prompt
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Builds per-phase implementation prompts that include full spec/research/plan
|
|
5
|
+
* context plus the specific tasks for the current phase, with TDD guidance
|
|
6
|
+
* and verification instructions.
|
|
6
7
|
*/
|
|
7
|
-
|
|
8
|
+
import type { FeatureAgentState } from '../../state.js';
|
|
9
|
+
export interface PhaseTask {
|
|
10
|
+
id: string;
|
|
11
|
+
phaseId?: string;
|
|
12
|
+
title: string;
|
|
13
|
+
description: string;
|
|
14
|
+
state: string;
|
|
15
|
+
dependencies: string[];
|
|
16
|
+
acceptanceCriteria: string[];
|
|
17
|
+
tdd: {
|
|
18
|
+
red: string[];
|
|
19
|
+
green: string[];
|
|
20
|
+
refactor: string[];
|
|
21
|
+
} | null;
|
|
22
|
+
estimatedEffort: string;
|
|
23
|
+
}
|
|
24
|
+
export interface PlanPhase {
|
|
25
|
+
id: string;
|
|
26
|
+
name: string;
|
|
27
|
+
description?: string;
|
|
28
|
+
parallel: boolean;
|
|
29
|
+
/** Optional — if absent, tasks are matched via their phaseId field */
|
|
30
|
+
taskIds?: string[];
|
|
31
|
+
}
|
|
32
|
+
export interface PlanYaml {
|
|
33
|
+
phases: PlanPhase[];
|
|
34
|
+
}
|
|
35
|
+
export interface TasksYaml {
|
|
36
|
+
tasks: PhaseTask[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Build the implementation prompt for a single phase (or a single task
|
|
40
|
+
* within a parallel phase). Includes full project context so each
|
|
41
|
+
* executor session is self-contained.
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildImplementPhasePrompt(state: FeatureAgentState, phase: PlanPhase, tasks: PhaseTask[], context: {
|
|
44
|
+
isLastPhase: boolean;
|
|
45
|
+
phaseIndex: number;
|
|
46
|
+
totalPhases: number;
|
|
47
|
+
}): string;
|
|
8
48
|
//# sourceMappingURL=implement.prompt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implement.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"implement.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IACnE,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAwBD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,iBAAiB,EACxB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,EAAE;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACzE,MAAM,CA8DR"}
|
package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.js
CHANGED
|
@@ -1,18 +1,90 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Implement Phase Prompt
|
|
2
|
+
* Implement Phase Prompt
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Builds per-phase implementation prompts that include full spec/research/plan
|
|
5
|
+
* context plus the specific tasks for the current phase, with TDD guidance
|
|
6
|
+
* and verification instructions.
|
|
6
7
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
8
|
+
import { readSpecFile } from '../node-helpers.js';
|
|
9
|
+
function formatTaskSection(task) {
|
|
10
|
+
let section = `### Task ${task.id}: ${task.title}\n${task.description}\n`;
|
|
11
|
+
section += `\n**Acceptance Criteria:**\n`;
|
|
12
|
+
for (const criterion of task.acceptanceCriteria) {
|
|
13
|
+
section += `- ${criterion}\n`;
|
|
14
|
+
}
|
|
15
|
+
if (task.tdd) {
|
|
16
|
+
section += `\n**TDD Guidance:**\n`;
|
|
17
|
+
section += `- Write tests for: ${task.tdd.red.join('; ')}\n`;
|
|
18
|
+
section += `- Implement: ${task.tdd.green.join('; ')}\n`;
|
|
19
|
+
section += `- Then consider: ${task.tdd.refactor.join('; ')}\n`;
|
|
20
|
+
}
|
|
21
|
+
if (task.dependencies.length > 0) {
|
|
22
|
+
section += `\nDepends on: ${task.dependencies.join(', ')}\n`;
|
|
23
|
+
}
|
|
24
|
+
return section;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Build the implementation prompt for a single phase (or a single task
|
|
28
|
+
* within a parallel phase). Includes full project context so each
|
|
29
|
+
* executor session is self-contained.
|
|
30
|
+
*/
|
|
31
|
+
export function buildImplementPhasePrompt(state, phase, tasks, context) {
|
|
32
|
+
const specContent = readSpecFile(state.specDir, 'spec.yaml');
|
|
33
|
+
const researchContent = readSpecFile(state.specDir, 'research.yaml');
|
|
34
|
+
const planContent = readSpecFile(state.specDir, 'plan.yaml');
|
|
35
|
+
const cwd = state.worktreePath || state.repositoryPath;
|
|
36
|
+
const taskSections = tasks.map(formatTaskSection).join('\n');
|
|
37
|
+
const verificationBlock = context.isLastPhase
|
|
38
|
+
? `4. Run full project validation:
|
|
39
|
+
- \`pnpm test\` (all tests must pass)
|
|
40
|
+
- \`pnpm lint\` (no lint errors)
|
|
41
|
+
- \`pnpm typecheck\` (no type errors)
|
|
42
|
+
- Fix any issues before finishing`
|
|
43
|
+
: `4. Run tests relevant to what you changed:
|
|
44
|
+
- Run targeted tests for modified files (e.g. \`pnpm test:single <test-file>\`)
|
|
45
|
+
- Fix any test failures before moving on`;
|
|
46
|
+
return `You are a senior software engineer performing autonomous implementation.
|
|
47
|
+
You are executing phase ${context.phaseIndex + 1} of ${context.totalPhases}: "${phase.name}".
|
|
48
|
+
|
|
49
|
+
## Feature Specification
|
|
50
|
+
|
|
51
|
+
\`\`\`yaml
|
|
52
|
+
${specContent}
|
|
53
|
+
\`\`\`
|
|
54
|
+
|
|
55
|
+
## Research Decisions
|
|
56
|
+
|
|
57
|
+
\`\`\`yaml
|
|
58
|
+
${researchContent}
|
|
59
|
+
\`\`\`
|
|
60
|
+
|
|
61
|
+
## Implementation Plan
|
|
62
|
+
|
|
63
|
+
\`\`\`yaml
|
|
64
|
+
${planContent}
|
|
65
|
+
\`\`\`
|
|
66
|
+
|
|
67
|
+
## Your Tasks for This Phase: "${phase.name}"
|
|
68
|
+
|
|
69
|
+
${taskSections}
|
|
70
|
+
|
|
71
|
+
## Implementation Instructions
|
|
72
|
+
|
|
73
|
+
1. Work through each task in dependency order
|
|
74
|
+
2. For tasks with TDD guidance: write tests alongside implementation following the hints provided — use them as guidance, not rigid steps
|
|
75
|
+
3. Follow existing codebase conventions for file placement, naming patterns, and architecture layers
|
|
76
|
+
${verificationBlock}
|
|
77
|
+
5. Commit your work with descriptive conventional commit messages (e.g. \`feat(scope): description\`)
|
|
78
|
+
|
|
79
|
+
## Working Directory
|
|
80
|
+
|
|
81
|
+
${cwd}
|
|
82
|
+
|
|
83
|
+
## Constraints
|
|
84
|
+
|
|
85
|
+
- Implement ONLY the tasks listed above — do not work ahead to future phases
|
|
86
|
+
- Follow existing codebase conventions and architecture patterns
|
|
87
|
+
- Do NOT modify any spec YAML files (spec.yaml, research.yaml, plan.yaml, tasks.yaml, feature.yaml)
|
|
88
|
+
- Do NOT skip writing tests for tasks that have TDD guidance
|
|
89
|
+
- Keep changes focused and minimal — avoid unnecessary refactoring beyond what the tasks specify`;
|
|
18
90
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IAgentExecutor } from '../../../../../application/ports/output/agent-executor.interface.js';
|
|
1
|
+
import type { IAgentExecutor } from '../../../../../application/ports/output/agents/agent-executor.interface.js';
|
|
2
2
|
/**
|
|
3
3
|
* Creates the requirements node that builds comprehensive requirements
|
|
4
4
|
* with product questions and AI-recommended defaults, writing to spec.yaml.
|
package/dist/src/infrastructure/services/agents/feature-agent/nodes/requirements.node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirements.node.d.ts","sourceRoot":"","sources":["../../../../../../../src/infrastructure/services/agents/feature-agent/nodes/requirements.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"requirements.node.d.ts","sourceRoot":"","sources":["../../../../../../../src/infrastructure/services/agents/feature-agent/nodes/requirements.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAIpG;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,cAAc,iHAE9D"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IAgentExecutor } from '../../../../../application/ports/output/agent-executor.interface.js';
|
|
1
|
+
import type { IAgentExecutor } from '../../../../../application/ports/output/agents/agent-executor.interface.js';
|
|
2
2
|
/**
|
|
3
3
|
* Creates the research node that evaluates technical approaches,
|
|
4
4
|
* libraries, and architecture decisions, writing to research.yaml.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"research.node.d.ts","sourceRoot":"","sources":["../../../../../../../src/infrastructure/services/agents/feature-agent/nodes/research.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"research.node.d.ts","sourceRoot":"","sources":["../../../../../../../src/infrastructure/services/agents/feature-agent/nodes/research.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAIpG;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,iHAE1D"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* the EventChannel receive real-time events.
|
|
12
12
|
*/
|
|
13
13
|
import type { AgentType, AgentFeature } from '../../../../domain/generated/output.js';
|
|
14
|
-
import type { IAgentExecutor, AgentExecutionOptions, AgentExecutionResult, AgentExecutionStreamEvent } from '../../../../application/ports/output/agent-executor.interface.js';
|
|
14
|
+
import type { IAgentExecutor, AgentExecutionOptions, AgentExecutionResult, AgentExecutionStreamEvent } from '../../../../application/ports/output/agents/agent-executor.interface.js';
|
|
15
15
|
import type { EventChannel } from './event-channel.js';
|
|
16
16
|
export declare class StreamingExecutorProxy implements IAgentExecutor {
|
|
17
17
|
private readonly inner;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streaming-executor-proxy.d.ts","sourceRoot":"","sources":["../../../../../../src/infrastructure/services/agents/streaming/streaming-executor-proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,
|
|
1
|
+
{"version":3,"file":"streaming-executor-proxy.d.ts","sourceRoot":"","sources":["../../../../../../src/infrastructure/services/agents/streaming/streaming-executor-proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,+DAA+D,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,qBAAa,sBAAuB,YAAW,cAAc;IAMzD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,IAAI,SAAS,IAAI,SAAS,CAEzB;gBAGkB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,YAAY,CAAC,yBAAyB,CAAC;IAG7D,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAyBtF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IAI3C,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;CAGhD"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Fetches GitHub issues using the gh CLI subprocess.
|
|
5
5
|
* Supports owner/repo#number and #number (current repo) formats.
|
|
6
6
|
*/
|
|
7
|
-
import type { IExternalIssueFetcher, ExternalIssue } from '../../../application/ports/output/external-issue-fetcher.interface.js';
|
|
7
|
+
import type { IExternalIssueFetcher, ExternalIssue } from '../../../application/ports/output/services/external-issue-fetcher.interface.js';
|
|
8
8
|
type ExecFileFn = (cmd: string, args: string[], options?: object) => Promise<{
|
|
9
9
|
stdout: string;
|
|
10
10
|
stderr?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-issue.service.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/services/external/github-issue.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,aAAa,EACd,MAAM,
|
|
1
|
+
{"version":3,"file":"github-issue.service.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/services/external/github-issue.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,aAAa,EACd,MAAM,yEAAyE,CAAC;AAMjF,KAAK,UAAU,GAAG,CAChB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAElD,qBAAa,kBAAmB,YAAW,IAAI,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;IAC5E,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,UAAU;IAE3C,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAyC3D,OAAO,CAAC,QAAQ;CAoBjB"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Fetches GitHub issues using the gh CLI subprocess.
|
|
5
5
|
* Supports owner/repo#number and #number (current repo) formats.
|
|
6
6
|
*/
|
|
7
|
-
import { IssueNotFoundError, IssueServiceUnavailableError, } from '../../../application/ports/output/external-issue-fetcher.interface.js';
|
|
7
|
+
import { IssueNotFoundError, IssueServiceUnavailableError, } from '../../../application/ports/output/services/external-issue-fetcher.interface.js';
|
|
8
8
|
export class GitHubIssueFetcher {
|
|
9
9
|
execFile;
|
|
10
10
|
constructor(execFile) {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Fetches Jira tickets using the Jira REST API v3 via fetch.
|
|
5
5
|
* Requires baseUrl, email, and API token for authentication.
|
|
6
6
|
*/
|
|
7
|
-
import type { IExternalIssueFetcher, ExternalIssue } from '../../../application/ports/output/external-issue-fetcher.interface.js';
|
|
7
|
+
import type { IExternalIssueFetcher, ExternalIssue } from '../../../application/ports/output/services/external-issue-fetcher.interface.js';
|
|
8
8
|
type FetchFn = (url: string, init?: RequestInit) => Promise<Response>;
|
|
9
9
|
export interface JiraConfig {
|
|
10
10
|
baseUrl: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jira-ticket.service.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/services/external/jira-ticket.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,aAAa,EACd,MAAM,
|
|
1
|
+
{"version":3,"file":"jira-ticket.service.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/services/external/jira-ticket.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,aAAa,EACd,MAAM,yEAAyE,CAAC;AAOjF,KAAK,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEtE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,iBAAkB,YAAW,IAAI,CAAC,qBAAqB,EAAE,iBAAiB,CAAC;IACtF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAEtB,MAAM,EAAE,UAAU;IAYxB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CAqD3D"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Fetches Jira tickets using the Jira REST API v3 via fetch.
|
|
5
5
|
* Requires baseUrl, email, and API token for authentication.
|
|
6
6
|
*/
|
|
7
|
-
import { IssueNotFoundError, IssueAuthenticationError, IssueServiceUnavailableError, } from '../../../application/ports/output/external-issue-fetcher.interface.js';
|
|
7
|
+
import { IssueNotFoundError, IssueAuthenticationError, IssueServiceUnavailableError, } from '../../../application/ports/output/services/external-issue-fetcher.interface.js';
|
|
8
8
|
export class JiraTicketFetcher {
|
|
9
9
|
baseUrl;
|
|
10
10
|
authHeader;
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Uses constructor dependency injection for the command executor
|
|
6
6
|
* to enable testability without mocking node:child_process directly.
|
|
7
7
|
*/
|
|
8
|
-
import type { IWorktreeService, WorktreeInfo } from '../../../application/ports/output/worktree-service.interface.js';
|
|
8
|
+
import type { IWorktreeService, WorktreeInfo } from '../../../application/ports/output/services/worktree-service.interface.js';
|
|
9
9
|
/**
|
|
10
10
|
* Type for the command executor dependency.
|
|
11
11
|
* Matches the promisified signature of child_process.execFile.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.service.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/services/git/worktree.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,
|
|
1
|
+
{"version":3,"file":"worktree.service.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/services/git/worktree.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,0EAA0E,CAAC;AAOlF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEjD,qBACa,eAAgB,YAAW,gBAAgB;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,YAAY;IAErE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAqBrF,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3C,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAO/C,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKhE,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAMzD,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,aAAa;CA+BtB"}
|
|
@@ -20,7 +20,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
20
20
|
import { createHash } from 'node:crypto';
|
|
21
21
|
import path from 'node:path';
|
|
22
22
|
import { injectable, inject } from 'tsyringe';
|
|
23
|
-
import { WorktreeError, WorktreeErrorCode, } from '../../../application/ports/output/worktree-service.interface.js';
|
|
23
|
+
import { WorktreeError, WorktreeErrorCode, } from '../../../application/ports/output/services/worktree-service.interface.js';
|
|
24
24
|
import { SHEP_HOME_DIR } from '../filesystem/shep-directory.service.js';
|
|
25
25
|
let WorktreeService = class WorktreeService {
|
|
26
26
|
execFile;
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Templates match exactly what /shep-kit:new-feature produces,
|
|
6
6
|
* enabling dogfooding — the CLI and the skill use the same spec format.
|
|
7
7
|
*/
|
|
8
|
-
import type { ISpecInitializerService, SpecInitializerResult } from '../../../application/ports/output/spec-initializer.interface.js';
|
|
8
|
+
import type { ISpecInitializerService, SpecInitializerResult } from '../../../application/ports/output/services/spec-initializer.interface.js';
|
|
9
9
|
export declare class SpecInitializerService implements ISpecInitializerService {
|
|
10
10
|
initialize(basePath: string, slug: string, featureNumber: number, description: string): Promise<SpecInitializerResult>;
|
|
11
11
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-initializer.service.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/services/spec/spec-initializer.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,
|
|
1
|
+
{"version":3,"file":"spec-initializer.service.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/services/spec/spec-initializer.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,mEAAmE,CAAC;AA4P3E,qBAAa,sBAAuB,YAAW,uBAAuB;IAC9D,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,CAAC;IA4BjC;;;OAGG;YACW,iBAAiB;CAoBhC"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import next from 'next';
|
|
12
12
|
import http from 'node:http';
|
|
13
|
-
import type { IWebServerService } from '../../application/ports/output/web-server-service.interface.js';
|
|
13
|
+
import type { IWebServerService } from '../../application/ports/output/services/web-server-service.interface.js';
|
|
14
14
|
export interface WebServerDeps {
|
|
15
15
|
createNextApp: typeof next;
|
|
16
16
|
createHttpServer: typeof http.createServer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-server.service.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/services/web-server.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"web-server.service.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/services/web-server.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yEAAyE,CAAC;AAIjH,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,OAAO,IAAI,CAAC;IAC3B,gBAAgB,EAAE,OAAO,IAAI,CAAC,YAAY,CAAC;CAC5C;AAOD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,IAAI;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAqB7D;AAED,qBACa,gBAAiB,YAAW,iBAAiB;IACxD,OAAO,CAAC,GAAG,CAAwB;IACnC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgB;gBAEzB,IAAI,GAAE,OAAO,CAAC,aAAa,CAAM;IAI7C;;;;;OAKG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BjE;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAoB5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/new.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"new.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/new.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CA+C1C"}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
import { Command } from 'commander';
|
|
13
13
|
import { container } from '../../../../infrastructure/di/container.js';
|
|
14
14
|
import { CreateFeatureUseCase } from '../../../../application/use-cases/features/create-feature.use-case.js';
|
|
15
|
-
import { colors, messages } from '../../ui/index.js';
|
|
15
|
+
import { colors, messages, spinner } from '../../ui/index.js';
|
|
16
16
|
/**
|
|
17
17
|
* Create the feat new command
|
|
18
18
|
*/
|
|
@@ -39,11 +39,11 @@ export function createNewCommand() {
|
|
|
39
39
|
approvalMode = 'allow-plan';
|
|
40
40
|
if (options.allowAll)
|
|
41
41
|
approvalMode = 'allow-all';
|
|
42
|
-
const feature = await useCase.execute({
|
|
42
|
+
const feature = await spinner('Thinking', () => useCase.execute({
|
|
43
43
|
userInput: description,
|
|
44
44
|
repositoryPath: repoPath,
|
|
45
45
|
approvalMode,
|
|
46
|
-
});
|
|
46
|
+
}));
|
|
47
47
|
messages.newline();
|
|
48
48
|
messages.success('Feature created');
|
|
49
49
|
console.log(` ${colors.muted('ID:')} ${colors.accent(feature.id)}`);
|
|
@@ -19,4 +19,5 @@ export { TableFormatter, type DatabaseMeta } from './tables.js';
|
|
|
19
19
|
export { OutputFormatter, type OutputFormat } from './output.js';
|
|
20
20
|
export { renderDetailView, type DetailViewConfig, type DetailSection, type DetailField, type DetailTextBlock, } from './detail-view.js';
|
|
21
21
|
export { renderListView, type ListViewConfig, type ListColumn } from './list-view.js';
|
|
22
|
+
export { spinner } from './spinner.js';
|
|
22
23
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/cli/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/cli/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
|