agentic-dev 0.2.11 → 0.2.13
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 +72 -54
- package/bin/agentic-dev.mjs +162 -11
- package/lib/github.mjs +246 -0
- package/lib/orchestration-assets.mjs +249 -0
- package/lib/scaffold.mjs +89 -0
- package/package.json +8 -19
- package/.dockerignore +0 -8
- package/.env.example +0 -50
- package/.gitignore +0 -16
- package/AGENTS.md +0 -86
- package/SDD_SKILL.md +0 -589
- package/compose.yml +0 -206
- package/infra/compose/.env.dev.example +0 -28
- package/infra/compose/.env.prod.example +0 -29
- package/infra/compose/README.md +0 -35
- package/infra/compose/dev.yml +0 -125
- package/infra/compose/prod.yml +0 -126
- package/infra/terraform/README.md +0 -34
- package/infra/terraform/aws/data/.terraform.lock.hcl +0 -25
- package/infra/terraform/aws/data/README.md +0 -18
- package/infra/terraform/aws/data/main.tf +0 -147
- package/infra/terraform/aws/data/outputs.tf +0 -14
- package/infra/terraform/aws/data/variables.tf +0 -57
- package/infra/terraform/aws/data/versions.tf +0 -10
- package/infra/terraform/aws/domain/.terraform.lock.hcl +0 -25
- package/infra/terraform/aws/domain/README.md +0 -20
- package/infra/terraform/aws/domain/env/dev.tfvars.example +0 -6
- package/infra/terraform/aws/domain/env/prod.tfvars.example +0 -7
- package/infra/terraform/aws/domain/main.tf +0 -149
- package/infra/terraform/aws/domain/outputs.tf +0 -29
- package/infra/terraform/aws/domain/variables.tf +0 -58
- package/infra/terraform/aws/domain/versions.tf +0 -10
- package/infra/terraform/openstack/README.md +0 -38
- package/infra/terraform/openstack/dev/.terraform.lock.hcl +0 -24
- package/infra/terraform/openstack/dev/README.md +0 -18
- package/infra/terraform/openstack/dev/main.tf +0 -49
- package/infra/terraform/openstack/dev/providers.tf +0 -15
- package/infra/terraform/openstack/dev/terraform.tfvars.example +0 -54
- package/infra/terraform/openstack/dev/variables.tf +0 -210
- package/infra/terraform/openstack/dev/versions.tf +0 -10
- package/infra/terraform/openstack/modules/environment_host/main.tf +0 -143
- package/infra/terraform/openstack/modules/environment_host/outputs.tf +0 -25
- package/infra/terraform/openstack/modules/environment_host/templates/docker-host-user-data.sh.tftpl +0 -40
- package/infra/terraform/openstack/modules/environment_host/variables.tf +0 -145
- package/infra/terraform/openstack/modules/environment_host/versions.tf +0 -7
- package/infra/terraform/openstack/prod/.terraform.lock.hcl +0 -24
- package/infra/terraform/openstack/prod/README.md +0 -18
- package/infra/terraform/openstack/prod/main.tf +0 -49
- package/infra/terraform/openstack/prod/providers.tf +0 -15
- package/infra/terraform/openstack/prod/terraform.tfvars.example +0 -55
- package/infra/terraform/openstack/prod/variables.tf +0 -210
- package/infra/terraform/openstack/prod/versions.tf +0 -10
- package/infra/terraform/openstack/server/.terraform.lock.hcl +0 -45
- package/infra/terraform/openstack/server/README.md +0 -47
- package/infra/terraform/openstack/server/main.tf +0 -161
- package/infra/terraform/openstack/server/outputs.tf +0 -30
- package/infra/terraform/openstack/server/providers.tf +0 -30
- package/infra/terraform/openstack/server/templates/server-user-data.sh.tftpl +0 -50
- package/infra/terraform/openstack/server/variables.tf +0 -233
- package/infra/terraform/openstack/server/zz_aspace.auto.tfvars.example.json +0 -29
- package/pnpm-workspace.yaml +0 -2
- package/scripts/dev/audit_sdd_build_ast.py +0 -277
- package/sdd/01_planning/01_feature/INDEX.md +0 -16
- package/sdd/01_planning/01_feature/README.md +0 -76
- package/sdd/01_planning/01_feature/alerts_feature_spec.md +0 -55
- package/sdd/01_planning/01_feature/auth_feature_spec.md +0 -57
- package/sdd/01_planning/01_feature/catalog_feature_spec.md +0 -61
- package/sdd/01_planning/01_feature/fulfillment_feature_spec.md +0 -58
- package/sdd/01_planning/01_feature/health_feature_spec.md +0 -52
- package/sdd/01_planning/01_feature/inventory_feature_spec.md +0 -60
- package/sdd/01_planning/01_feature/order_feature_spec.md +0 -63
- package/sdd/01_planning/01_feature/shipping_feature_spec.md +0 -55
- package/sdd/01_planning/01_feature/support_feature_spec.md +0 -53
- package/sdd/01_planning/01_feature/user_feature_spec.md +0 -54
- package/sdd/01_planning/02_screen/INDEX.md +0 -13
- package/sdd/01_planning/02_screen/README.md +0 -41
- package/sdd/01_planning/02_screen/admin_screen_spec.pdf +0 -0
- package/sdd/01_planning/02_screen/assets/README.md +0 -16
- package/sdd/01_planning/02_screen/assets/example/README.md +0 -13
- package/sdd/01_planning/02_screen/landing_screen_spec.pdf +0 -0
- package/sdd/01_planning/02_screen/mobile_screen_spec.pdf +0 -0
- package/sdd/01_planning/02_screen/web_screen_spec.pdf +0 -0
- package/sdd/01_planning/03_architecture/INDEX.md +0 -9
- package/sdd/01_planning/03_architecture/README.md +0 -25
- package/sdd/01_planning/03_architecture/architecture_document_structure.md +0 -77
- package/sdd/01_planning/03_architecture/backend/README.md +0 -10
- package/sdd/01_planning/03_architecture/frontend/README.md +0 -12
- package/sdd/01_planning/03_architecture/infra/README.md +0 -10
- package/sdd/01_planning/03_architecture/tech-research/README.md +0 -4
- package/sdd/01_planning/03_architecture/templates_system_architecture.md +0 -84
- package/sdd/01_planning/04_data/INDEX.md +0 -4
- package/sdd/01_planning/04_data/README.md +0 -10
- package/sdd/01_planning/04_data/templates_data_modeling.md +0 -119
- package/sdd/01_planning/05_api/README.md +0 -12
- package/sdd/01_planning/05_api/templates_api_contract.md +0 -90
- package/sdd/01_planning/06_iac/README.md +0 -11
- package/sdd/01_planning/06_iac/templates_runtime_and_cicd_baseline.md +0 -46
- package/sdd/01_planning/07_integration/README.md +0 -11
- package/sdd/01_planning/07_integration/templates_frontend_api_integration.md +0 -46
- package/sdd/01_planning/08_nonfunctional/README.md +0 -7
- package/sdd/01_planning/09_security/README.md +0 -7
- package/sdd/01_planning/10_test/README.md +0 -12
- package/sdd/01_planning/10_test/templates_test_strategy.md +0 -60
- package/sdd/01_planning/INDEX.md +0 -19
- package/sdd/01_planning/README.md +0 -17
- package/sdd/02_plan/01_feature/README.md +0 -34
- package/sdd/02_plan/01_feature/_feature_todo_template.md +0 -29
- package/sdd/02_plan/02_screen/INDEX.md +0 -19
- package/sdd/02_plan/02_screen/README.md +0 -39
- package/sdd/02_plan/02_screen/_screen_todo_template.md +0 -60
- package/sdd/02_plan/03_architecture/README.md +0 -23
- package/sdd/02_plan/03_architecture/architecture_document_governance.md +0 -40
- package/sdd/02_plan/03_architecture/build_ast_runtime_tree_governance.md +0 -53
- package/sdd/02_plan/03_architecture/repository_governance.md +0 -39
- package/sdd/02_plan/03_architecture/runtime_and_structure_governance.md +0 -38
- package/sdd/02_plan/03_architecture/templates-hexagonal-template-architecture.md +0 -9
- package/sdd/02_plan/03_architecture/toolchain_governance.md +0 -98
- package/sdd/02_plan/04_data/README.md +0 -5
- package/sdd/02_plan/05_api/README.md +0 -5
- package/sdd/02_plan/06_iac/README.md +0 -11
- package/sdd/02_plan/06_iac/dev_runtime_delivery.md +0 -36
- package/sdd/02_plan/06_iac/template_runtime_delivery.md +0 -50
- package/sdd/02_plan/07_integration/README.md +0 -5
- package/sdd/02_plan/07_integration/frontend_live_integration.md +0 -31
- package/sdd/02_plan/08_nonfunctional/README.md +0 -5
- package/sdd/02_plan/08_nonfunctional/repository_hygiene.md +0 -26
- package/sdd/02_plan/09_security/README.md +0 -5
- package/sdd/02_plan/10_test/README.md +0 -11
- package/sdd/02_plan/10_test/regression_verification.md +0 -39
- package/sdd/02_plan/10_test/templates/README.md +0 -8
- package/sdd/02_plan/10_test/templates/ui_parity_web_contract.template.yaml +0 -23
- package/sdd/02_plan/10_test/verification_strategy.md +0 -43
- package/sdd/02_plan/99_generated/from_planning/ui_parity/.gitkeep +0 -1
- package/sdd/02_plan/README.md +0 -40
- package/sdd/03_build/01_feature/README.md +0 -20
- package/sdd/03_build/01_feature/domain/README.md +0 -3
- package/sdd/03_build/01_feature/domain/account_and_access.md +0 -20
- package/sdd/03_build/01_feature/domain/catalog_and_inventory.md +0 -20
- package/sdd/03_build/01_feature/domain/ordering_and_fulfillment.md +0 -21
- package/sdd/03_build/01_feature/domain/support_and_observability.md +0 -21
- package/sdd/03_build/01_feature/domain_surfaces.md +0 -28
- package/sdd/03_build/01_feature/service/README.md +0 -3
- package/sdd/03_build/01_feature/service/admin_surface.md +0 -15
- package/sdd/03_build/01_feature/service/landing_surface.md +0 -13
- package/sdd/03_build/01_feature/service/mobile_surface.md +0 -14
- package/sdd/03_build/01_feature/service/web_surface.md +0 -14
- package/sdd/03_build/02_screen/README.md +0 -25
- package/sdd/03_build/02_screen/_screen_build_template.md +0 -26
- package/sdd/03_build/02_screen/admin/README.md +0 -5
- package/sdd/03_build/02_screen/landing/README.md +0 -5
- package/sdd/03_build/02_screen/mobile/README.md +0 -5
- package/sdd/03_build/02_screen/web/README.md +0 -5
- package/sdd/03_build/03_architecture/README.md +0 -10
- package/sdd/03_build/03_architecture/architecture_document_governance.md +0 -30
- package/sdd/03_build/03_architecture/build_ast_runtime_tree_governance.md +0 -24
- package/sdd/03_build/03_architecture/repository_governance.md +0 -18
- package/sdd/03_build/03_architecture/toolchain_governance.md +0 -36
- package/sdd/03_build/06_iac/README.md +0 -3
- package/sdd/03_build/06_iac/dev_runtime_delivery.md +0 -10
- package/sdd/03_build/06_iac/template_runtime_delivery.md +0 -49
- package/sdd/03_build/07_integration/README.md +0 -3
- package/sdd/03_build/07_integration/frontend_live_integration.md +0 -11
- package/sdd/03_build/08_nonfunctional/README.md +0 -3
- package/sdd/03_build/08_nonfunctional/repository_hygiene.md +0 -10
- package/sdd/03_build/10_test/README.md +0 -9
- package/sdd/03_build/10_test/regression_verification.md +0 -16
- package/sdd/03_build/10_test/verification_harness.md +0 -11
- package/sdd/03_build/README.md +0 -35
- package/sdd/03_verify/01_feature/README.md +0 -5
- package/sdd/03_verify/01_feature/domain_verification.md +0 -14
- package/sdd/03_verify/01_feature/service_verification.md +0 -22
- package/sdd/03_verify/02_screen/README.md +0 -6
- package/sdd/03_verify/02_screen/_screen_verify_template.md +0 -20
- package/sdd/03_verify/02_screen/admin/README.md +0 -4
- package/sdd/03_verify/02_screen/landing/README.md +0 -4
- package/sdd/03_verify/02_screen/mobile/README.md +0 -4
- package/sdd/03_verify/02_screen/web/README.md +0 -4
- package/sdd/03_verify/03_architecture/README.md +0 -10
- package/sdd/03_verify/03_architecture/architecture_document_governance.md +0 -15
- package/sdd/03_verify/03_architecture/build_ast_runtime_tree_governance.md +0 -28
- package/sdd/03_verify/03_architecture/repository_governance.md +0 -16
- package/sdd/03_verify/03_architecture/toolchain_governance.md +0 -58
- package/sdd/03_verify/06_iac/README.md +0 -3
- package/sdd/03_verify/06_iac/dev_runtime_delivery.md +0 -10
- package/sdd/03_verify/06_iac/template_runtime_delivery.md +0 -42
- package/sdd/03_verify/07_integration/README.md +0 -3
- package/sdd/03_verify/07_integration/frontend_live_integration.md +0 -16
- package/sdd/03_verify/08_nonfunctional/README.md +0 -3
- package/sdd/03_verify/08_nonfunctional/repository_hygiene.md +0 -14
- package/sdd/03_verify/10_test/README.md +0 -9
- package/sdd/03_verify/10_test/regression_verification.md +0 -16
- package/sdd/03_verify/10_test/ui_parity/README.md +0 -4
- package/sdd/03_verify/10_test/ui_parity/loop_runs/.gitkeep +0 -0
- package/sdd/03_verify/10_test/ui_parity/reference/.gitkeep +0 -0
- package/sdd/03_verify/10_test/ui_parity/staged_runs/.gitkeep +0 -0
- package/sdd/03_verify/10_test/verification_harness.md +0 -17
- package/sdd/03_verify/README.md +0 -22
- package/sdd/05_operate/01_runbooks/.gitkeep +0 -1
- package/sdd/05_operate/01_runbooks/README.md +0 -4
- package/sdd/05_operate/02_delivery_status/README.md +0 -4
- package/sdd/05_operate/02_delivery_status/service_status.md +0 -16
- package/sdd/05_operate/README.md +0 -12
- package/sdd/99_toolchain/01_automation/.gitkeep +0 -1
- package/sdd/99_toolchain/01_automation/README.md +0 -76
- package/sdd/99_toolchain/01_automation/agentic-dev/analyze_proof_results.py +0 -132
- package/sdd/99_toolchain/01_automation/agentic-dev/analyze_route_gap.py +0 -85
- package/sdd/99_toolchain/01_automation/agentic-dev/assets/repo-contract.template.json +0 -75
- package/sdd/99_toolchain/01_automation/agentic-dev/bootstrap_frontend_parity.sh +0 -84
- package/sdd/99_toolchain/01_automation/agentic-dev/init_frontend_parity.sh +0 -33
- package/sdd/99_toolchain/01_automation/agentic-dev/init_repo_contract.sh +0 -51
- package/sdd/99_toolchain/01_automation/agentic-dev/repo-contract.json +0 -76
- package/sdd/99_toolchain/01_automation/agentic-dev/resolve_frontend_target.py +0 -52
- package/sdd/99_toolchain/01_automation/agentic-dev/resolve_repo_contract.py +0 -56
- package/sdd/99_toolchain/01_automation/agentic-dev/run_frontend_target.sh +0 -100
- package/sdd/99_toolchain/01_automation/agentic-dev/run_repo_phase.sh +0 -140
- package/sdd/99_toolchain/01_automation/agentic-dev/validate_json_schema.py +0 -39
- package/sdd/99_toolchain/01_automation/agentic-parity-harness-design.md +0 -291
- package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/dashboard.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/login.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/queue.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/support.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/landing_screen_capture/home.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/landing_screen_capture/login.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/landing_screen_capture/workspace.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/mobile_screen_capture/dashboard.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/mobile_screen_capture/fulfillment.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/mobile_screen_capture/login.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/web_screen_capture/dashboard.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/web_screen_capture/login.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/web_screen_capture/orders.png +0 -0
- package/sdd/99_toolchain/01_automation/build_asset_recipes.py +0 -10
- package/sdd/99_toolchain/01_automation/build_screen_spec_pdf.py +0 -427
- package/sdd/99_toolchain/01_automation/capture_screen_assets.mjs +0 -148
- package/sdd/99_toolchain/01_automation/harness-layout.md +0 -34
- package/sdd/99_toolchain/01_automation/parity-execution-tooling-design.md +0 -319
- package/sdd/99_toolchain/01_automation/playwright_exactness_manifest.py +0 -21
- package/sdd/99_toolchain/01_automation/run_playwright_exactness.py +0 -87
- package/sdd/99_toolchain/01_automation/screen_spec_manifest.py +0 -321
- package/sdd/99_toolchain/01_automation/spec_asset_builder.py +0 -274
- package/sdd/99_toolchain/01_automation/ui-contract-projection.md +0 -79
- package/sdd/99_toolchain/01_automation/ui-parity/README.md +0 -60
- package/sdd/99_toolchain/01_automation/ui-parity/cli/extract-reference-pages.mjs +0 -2
- package/sdd/99_toolchain/01_automation/ui-parity/cli/materialize-reference-assets.mjs +0 -58
- package/sdd/99_toolchain/01_automation/ui-parity/cli/normalize-reference-assets.mjs +0 -2
- package/sdd/99_toolchain/01_automation/ui-parity/cli/route-gap-report.mjs +0 -187
- package/sdd/99_toolchain/01_automation/ui-parity/cli/run-proof.mjs +0 -50
- package/sdd/99_toolchain/01_automation/ui-parity/cli/scaffold-contract.mjs +0 -62
- package/sdd/99_toolchain/01_automation/ui-parity/cli/upload-parity1.mjs +0 -2
- package/sdd/99_toolchain/01_automation/ui-parity/contracts/collector-metadata.schema.json +0 -33
- package/sdd/99_toolchain/01_automation/ui-parity/contracts/proof-result.schema.json +0 -76
- package/sdd/99_toolchain/01_automation/ui-parity/contracts/route-gap-report.schema.json +0 -95
- package/sdd/99_toolchain/01_automation/ui-parity/core/capture-runner.mjs +0 -55
- package/sdd/99_toolchain/01_automation/ui-parity/core/load-adapter.mjs +0 -25
- package/sdd/99_toolchain/01_automation/ui-parity/core/load-contract.mjs +0 -81
- package/sdd/99_toolchain/01_automation/ui-parity/core/paths.mjs +0 -23
- package/sdd/99_toolchain/01_automation/ui-parity/core/proof-runner.mjs +0 -255
- package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-artifact-layout.md +0 -23
- package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-proof-interface.md +0 -60
- package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-route-gap-interface.md +0 -82
- package/sdd/99_toolchain/01_automation/ui-parity/runtime/playwright-runtime.mjs +0 -16
- package/sdd/99_toolchain/01_automation/ui-parity/runtime/static-runtime.mjs +0 -6
- package/sdd/99_toolchain/02_policies/.gitkeep +0 -1
- package/sdd/99_toolchain/02_policies/build-ast-governance-policy.md +0 -22
- package/sdd/99_toolchain/02_policies/compose-runtime-baseline-policy.md +0 -24
- package/sdd/99_toolchain/02_policies/convention-storage-policy.md +0 -26
- package/sdd/99_toolchain/02_policies/main-push-before-dev-deploy-policy.md +0 -27
- package/sdd/99_toolchain/02_policies/regression-verification-policy.md +0 -22
- package/sdd/99_toolchain/03_templates/.gitkeep +0 -1
- package/sdd/99_toolchain/03_templates/asset_recipe_manifest.example.py +0 -38
- package/sdd/99_toolchain/03_templates/generated_assets/README.md +0 -11
- package/sdd/99_toolchain/03_templates/generated_assets/example-brand-lockup.svg +0 -3
- package/sdd/99_toolchain/03_templates/generated_assets/example-brand-mark.svg +0 -3
- package/sdd/99_toolchain/03_templates/generated_assets/example-brand-wordmark.svg +0 -3
- package/sdd/99_toolchain/03_templates/playwright_exactness_manifest.example.py +0 -21
- package/sdd/99_toolchain/README.md +0 -23
- package/sdd/README.md +0 -21
package/README.md
CHANGED
|
@@ -1,69 +1,87 @@
|
|
|
1
1
|
# agentic-dev
|
|
2
2
|
|
|
3
|
-
`agentic-dev`는 `say828
|
|
3
|
+
`agentic-dev`는 `say828/template-*` 레포를 조회해 설치하고, GitHub Project 기반 멀티에이전트 개발 환경까지 같이 구성하는 installer/orchestrator CLI다.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 역할
|
|
6
|
+
|
|
7
|
+
이 저장소는 runtime app 자체를 들고 있는 template monorepo가 아니다.
|
|
8
|
+
|
|
9
|
+
- template app/runtime payload: `say828/template-*`
|
|
10
|
+
- installer/orchestration logic: `agentic-dev`
|
|
11
|
+
- shared sub-agent assets: `.agent`, `.claude`, `.codex`
|
|
12
|
+
- target repo workflow/runtime automation: install 시 target repo에 주입
|
|
13
|
+
|
|
14
|
+
## Interactive Flow
|
|
6
15
|
|
|
7
16
|
```bash
|
|
8
17
|
npx agentic-dev
|
|
9
18
|
```
|
|
10
19
|
|
|
11
|
-
|
|
20
|
+
wizard는 아래 정보를 모두 먼저 받는다.
|
|
12
21
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
22
|
+
- project directory
|
|
23
|
+
- project name
|
|
24
|
+
- GitHub repository
|
|
25
|
+
- GitHub auth mode
|
|
26
|
+
- GitHub project mode
|
|
27
|
+
- GitHub project title
|
|
28
|
+
- template repo
|
|
29
|
+
- app mode
|
|
30
|
+
- AI runtime profiles
|
|
31
|
+
- workspace agent surfaces
|
|
32
|
+
- non-empty directory 진행 여부
|
|
33
|
+
- final confirmation
|
|
17
34
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
1. GitHub에서 공개 `say828/template-*` 레포 목록을 조회한다.
|
|
21
|
-
2. interactive TTY에서는 wizard 화면을 순서대로 보여준다.
|
|
22
|
-
- `←/→`: 이전/다음 화면 이동
|
|
23
|
-
- `↑/↓`: 고정 선택지 이동
|
|
24
|
-
- `Space`: AI providers 다중 선택 토글
|
|
25
|
-
- `Enter`: 현재 화면 값 확정
|
|
26
|
-
3. wizard는 최소한 아래 정보를 모두 먼저 받는다.
|
|
27
|
-
- project directory
|
|
28
|
-
- project name
|
|
29
|
-
- GitHub auth mode
|
|
30
|
-
- GitHub PAT (`auth mode = pat`일 때만)
|
|
31
|
-
- template repo
|
|
32
|
-
- app mode
|
|
33
|
-
- AI providers
|
|
34
|
-
- non-empty directory 진행 여부가 필요하면 그 확인
|
|
35
|
-
4. 모든 입력이 끝나면 실행 계획 요약과 최종 확인 화면을 보여준다.
|
|
36
|
-
5. 최종 확인 전에는 clone, install, bootstrap을 시작하지 않는다.
|
|
37
|
-
6. 확인 후에만 선택한 레포를 새 디렉터리로 복제한다.
|
|
38
|
-
7. `.env.example`이 있으면 `.env`를 자동 생성한다.
|
|
39
|
-
8. `pnpm install`을 자동 실행한다.
|
|
40
|
-
9. 템플릿의 `repo-contract.json`에서 `frontend.default_target`을 읽는다.
|
|
41
|
-
10. `app mode != backend`이면 그 target에 대해 `playwright install chromium`과 parity bootstrap을 실행한다.
|
|
42
|
-
11. `AI providers` 선택에 따라 `.codex`, `.claude` 디렉터리를 정리하고 `.agentic-dev/setup.json`에 wizard 입력값을 기록한다.
|
|
43
|
-
|
|
44
|
-
`frontend.default_target`이 있으면 multi-surface 템플릿도 그대로 지원한다. 예를 들어 `template-fullstack-mono`는 `client/web`과 `client/admin`을 함께 포함하지만 기본 bootstrap 대상은 `web`이다.
|
|
45
|
-
|
|
46
|
-
## 예시
|
|
35
|
+
조작:
|
|
47
36
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
37
|
+
- `←/→`: 이전/다음 화면 이동
|
|
38
|
+
- `↑/↓`: 선택 이동
|
|
39
|
+
- `Space`: multi-select toggle
|
|
40
|
+
- `Enter`: 현재 화면 확정
|
|
41
|
+
|
|
42
|
+
중요:
|
|
53
43
|
|
|
54
|
-
|
|
44
|
+
- 모든 입력이 끝나기 전에는 clone/install/bootstrap을 실행하지 않는다.
|
|
45
|
+
- 최종 확인 뒤에만 GitHub repo/project, template install, workflow wiring을 실행한다.
|
|
55
46
|
|
|
56
|
-
|
|
57
|
-
- `pnpm install`
|
|
58
|
-
- `pnpm --dir client/web exec playwright install chromium`
|
|
59
|
-
- `bash sdd/99_toolchain/01_automation/agentic-dev/bootstrap_frontend_parity.sh . web`
|
|
60
|
-
- `.agentic-dev/setup.json` 생성
|
|
47
|
+
## After Confirm
|
|
61
48
|
|
|
62
|
-
|
|
49
|
+
CLI는 이 순서로 동작한다.
|
|
63
50
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
-
|
|
51
|
+
1. GitHub repository create-or-use
|
|
52
|
+
2. GitHub Project create-or-use
|
|
53
|
+
3. selected `template-*` repo clone
|
|
54
|
+
4. shared `.agent`, `.claude`, `.codex` asset install
|
|
55
|
+
5. `.agentic-dev/orchestration.json` / `.agentic-dev/setup.json` write
|
|
56
|
+
6. `.github/workflows/agentic-orchestration.yml` install
|
|
57
|
+
7. `.agentic-dev/runtime/*.mjs` install
|
|
58
|
+
8. `.env.example -> .env`
|
|
59
|
+
9. `pnpm install`
|
|
60
|
+
10. `app mode != backend`이면 Playwright/bootstrap
|
|
61
|
+
|
|
62
|
+
## Workflow Contract
|
|
63
|
+
|
|
64
|
+
설치된 repo는 아래 orchestration surface를 가진다.
|
|
65
|
+
|
|
66
|
+
- `sdd/02_plan/**` push
|
|
67
|
+
- `.agentic-dev/runtime/sdd_to_ir.mjs`
|
|
68
|
+
- `.agentic-dev/runtime/sync_project_tasks.mjs`
|
|
69
|
+
- `.agentic-dev/runtime/run_multi_agent_queue.mjs`
|
|
70
|
+
- `.agentic-dev/runtime/close_completed_tasks.mjs`
|
|
71
|
+
- `.github/workflows/agentic-orchestration.yml`
|
|
72
|
+
|
|
73
|
+
즉 SDD planning 산출물이 push되면 workflow가 task IR를 만들고, GitHub task mirror와 multi-agent queue를 갱신하는 구조다.
|
|
74
|
+
|
|
75
|
+
## Non-interactive Example
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
npx agentic-dev init my-app \
|
|
79
|
+
--template template-fullstack-mono \
|
|
80
|
+
--project-name my-app \
|
|
81
|
+
--github-repo say828/my-app \
|
|
82
|
+
--github-project-title "My App Delivery" \
|
|
83
|
+
--github-project-mode create-if-missing \
|
|
84
|
+
--provider-profiles codex-subscription,openai-api \
|
|
85
|
+
--providers codex,claude \
|
|
86
|
+
--yes
|
|
87
|
+
```
|
package/bin/agentic-dev.mjs
CHANGED
|
@@ -8,15 +8,18 @@ import {
|
|
|
8
8
|
DEFAULT_TEMPLATE_OWNER,
|
|
9
9
|
ensureTargetDir,
|
|
10
10
|
fetchTemplateRepos,
|
|
11
|
+
finalizeRepositoryGit,
|
|
11
12
|
installTemplateRepo,
|
|
12
13
|
parseArgs,
|
|
13
14
|
resolveTemplateRepo,
|
|
15
|
+
resolveGitHubOrchestration,
|
|
14
16
|
usage,
|
|
15
17
|
} from "../lib/scaffold.mjs";
|
|
16
18
|
|
|
17
19
|
const DEFAULT_TARGET_DIR = ".";
|
|
18
20
|
const DEFAULT_APP_MODE = "fullstack";
|
|
19
21
|
const DEFAULT_AI_PROVIDERS = ["codex", "claude"];
|
|
22
|
+
const DEFAULT_PROVIDER_PROFILES = ["codex-subscription", "claude-subscription"];
|
|
20
23
|
|
|
21
24
|
const GITHUB_AUTH_CHOICES = [
|
|
22
25
|
{
|
|
@@ -72,6 +75,28 @@ const AI_PROVIDER_CHOICES = [
|
|
|
72
75
|
},
|
|
73
76
|
];
|
|
74
77
|
|
|
78
|
+
const PROVIDER_PROFILE_CHOICES = [
|
|
79
|
+
{ label: "codex-subscription", value: "codex-subscription", description: "Codex subscription/runtime access" },
|
|
80
|
+
{ label: "codex-api", value: "codex-api", description: "Codex API access" },
|
|
81
|
+
{ label: "claude-subscription", value: "claude-subscription", description: "Claude subscription/runtime access" },
|
|
82
|
+
{ label: "claude-api", value: "claude-api", description: "Claude API access" },
|
|
83
|
+
{ label: "openai-api", value: "openai-api", description: "OpenAI API access" },
|
|
84
|
+
{ label: "ollama-self-hosted", value: "ollama-self-hosted", description: "Local Ollama runtime" },
|
|
85
|
+
];
|
|
86
|
+
|
|
87
|
+
const GITHUB_PROJECT_MODE_CHOICES = [
|
|
88
|
+
{
|
|
89
|
+
label: "create-if-missing",
|
|
90
|
+
value: "create-if-missing",
|
|
91
|
+
description: "Use an existing GitHub Project with the same title, otherwise create it",
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
label: "use-existing",
|
|
95
|
+
value: "use-existing",
|
|
96
|
+
description: "Require an existing GitHub Project and fail if it does not exist",
|
|
97
|
+
},
|
|
98
|
+
];
|
|
99
|
+
|
|
75
100
|
const CONFIRM_CHOICES = [
|
|
76
101
|
{
|
|
77
102
|
label: "Proceed",
|
|
@@ -128,6 +153,16 @@ function uniqueProviders(providers) {
|
|
|
128
153
|
: [];
|
|
129
154
|
}
|
|
130
155
|
|
|
156
|
+
function normalizeProviderProfiles(providerProfiles) {
|
|
157
|
+
const normalized = Array.isArray(providerProfiles)
|
|
158
|
+
? providerProfiles.map((profile) => profile.trim()).filter(Boolean)
|
|
159
|
+
: [];
|
|
160
|
+
if (normalized.length > 0) {
|
|
161
|
+
return [...new Set(normalized)];
|
|
162
|
+
}
|
|
163
|
+
return [...DEFAULT_PROVIDER_PROFILES];
|
|
164
|
+
}
|
|
165
|
+
|
|
131
166
|
function hydrateOptions(options) {
|
|
132
167
|
const state = {
|
|
133
168
|
targetDir: (options.targetDir || DEFAULT_TARGET_DIR).trim() || DEFAULT_TARGET_DIR,
|
|
@@ -137,6 +172,10 @@ function hydrateOptions(options) {
|
|
|
137
172
|
githubPat: options.githubPat || "",
|
|
138
173
|
appMode: (options.appMode || DEFAULT_APP_MODE).trim() || DEFAULT_APP_MODE,
|
|
139
174
|
aiProviders: normalizeProviders(options.aiProviders),
|
|
175
|
+
providerProfiles: normalizeProviderProfiles(options.providerProfiles),
|
|
176
|
+
githubRepositoryInput: (options.githubRepositoryInput || "").trim(),
|
|
177
|
+
githubProjectMode: (options.githubProjectMode || "create-if-missing").trim() || "create-if-missing",
|
|
178
|
+
githubProjectTitle: (options.githubProjectTitle || "").trim(),
|
|
140
179
|
force: Boolean(options.force),
|
|
141
180
|
skipBootstrap: Boolean(options.skipBootstrap),
|
|
142
181
|
owner: options.owner || DEFAULT_TEMPLATE_OWNER,
|
|
@@ -145,6 +184,12 @@ function hydrateOptions(options) {
|
|
|
145
184
|
if (!state.projectName) {
|
|
146
185
|
state.projectName = inferProjectName(state.targetDir);
|
|
147
186
|
}
|
|
187
|
+
if (!state.githubRepositoryInput) {
|
|
188
|
+
state.githubRepositoryInput = state.projectName;
|
|
189
|
+
}
|
|
190
|
+
if (!state.githubProjectTitle) {
|
|
191
|
+
state.githubProjectTitle = `${state.projectName} Delivery`;
|
|
192
|
+
}
|
|
148
193
|
|
|
149
194
|
return state;
|
|
150
195
|
}
|
|
@@ -166,6 +211,7 @@ function sanitizeStateForInstall(state) {
|
|
|
166
211
|
targetDir: (state.targetDir || DEFAULT_TARGET_DIR).trim() || DEFAULT_TARGET_DIR,
|
|
167
212
|
projectName: (state.projectName || inferProjectName(state.targetDir)).trim(),
|
|
168
213
|
aiProviders: normalizeProviders(state.aiProviders),
|
|
214
|
+
providerProfiles: normalizeProviderProfiles(state.providerProfiles),
|
|
169
215
|
};
|
|
170
216
|
}
|
|
171
217
|
|
|
@@ -193,6 +239,13 @@ function buildSteps(state, repos) {
|
|
|
193
239
|
description: "Written into scaffold metadata and Claude workspace nickname.",
|
|
194
240
|
placeholder: inferProjectName(state.targetDir),
|
|
195
241
|
},
|
|
242
|
+
{
|
|
243
|
+
key: "githubRepositoryInput",
|
|
244
|
+
type: "text",
|
|
245
|
+
label: "GitHub repository",
|
|
246
|
+
description: "Use owner/name, a GitHub URL, or just a repo name to create/use the repository.",
|
|
247
|
+
placeholder: state.projectName,
|
|
248
|
+
},
|
|
196
249
|
{
|
|
197
250
|
key: "githubAuthMode",
|
|
198
251
|
type: "single",
|
|
@@ -213,6 +266,20 @@ function buildSteps(state, repos) {
|
|
|
213
266
|
}
|
|
214
267
|
|
|
215
268
|
steps.push(
|
|
269
|
+
{
|
|
270
|
+
key: "githubProjectMode",
|
|
271
|
+
type: "single",
|
|
272
|
+
label: "GitHub project mode",
|
|
273
|
+
description: "Choose whether the orchestration must reuse an existing GitHub Project or create one if needed.",
|
|
274
|
+
choices: GITHUB_PROJECT_MODE_CHOICES,
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
key: "githubProjectTitle",
|
|
278
|
+
type: "text",
|
|
279
|
+
label: "GitHub project title",
|
|
280
|
+
description: "This project is used for SDD task orchestration.",
|
|
281
|
+
placeholder: `${state.projectName} Delivery`,
|
|
282
|
+
},
|
|
216
283
|
{
|
|
217
284
|
key: "template",
|
|
218
285
|
type: "single",
|
|
@@ -227,11 +294,18 @@ function buildSteps(state, repos) {
|
|
|
227
294
|
description: "Choose how much of the bootstrap flow should run after clone.",
|
|
228
295
|
choices: APP_MODE_CHOICES,
|
|
229
296
|
},
|
|
297
|
+
{
|
|
298
|
+
key: "providerProfiles",
|
|
299
|
+
type: "multi",
|
|
300
|
+
label: "AI runtime profiles",
|
|
301
|
+
description: "Use Space to toggle provider/runtime profiles.",
|
|
302
|
+
choices: PROVIDER_PROFILE_CHOICES,
|
|
303
|
+
},
|
|
230
304
|
{
|
|
231
305
|
key: "aiProviders",
|
|
232
306
|
type: "multi",
|
|
233
|
-
label: "
|
|
234
|
-
description: "Use Space to toggle
|
|
307
|
+
label: "Workspace agent surfaces",
|
|
308
|
+
description: "Use Space to toggle Codex/Claude workspace assets.",
|
|
235
309
|
choices: AI_PROVIDER_CHOICES,
|
|
236
310
|
},
|
|
237
311
|
);
|
|
@@ -275,6 +349,12 @@ function stepValue(state, step) {
|
|
|
275
349
|
if (step.key === "projectName") {
|
|
276
350
|
return state.projectName || step.placeholder || inferProjectName(state.targetDir);
|
|
277
351
|
}
|
|
352
|
+
if (step.key === "githubRepositoryInput") {
|
|
353
|
+
return state.githubRepositoryInput || step.placeholder || state.projectName;
|
|
354
|
+
}
|
|
355
|
+
if (step.key === "githubProjectTitle") {
|
|
356
|
+
return state.githubProjectTitle || step.placeholder || `${state.projectName} Delivery`;
|
|
357
|
+
}
|
|
278
358
|
if (step.key === "githubPat") {
|
|
279
359
|
return state.githubPat || "";
|
|
280
360
|
}
|
|
@@ -356,10 +436,14 @@ function executionPreview(state, selectedRepo) {
|
|
|
356
436
|
const lines = [
|
|
357
437
|
`Project directory: ${path.resolve(process.cwd(), state.targetDir)}`,
|
|
358
438
|
`Project name: ${state.projectName}`,
|
|
439
|
+
`GitHub repository: ${state.githubRepositoryInput}`,
|
|
440
|
+
`GitHub project mode: ${state.githubProjectMode}`,
|
|
441
|
+
`GitHub project title: ${state.githubProjectTitle}`,
|
|
359
442
|
`GitHub auth mode: ${state.githubAuthMode}`,
|
|
360
443
|
`Template repo: ${selectedRepo?.name || state.template}`,
|
|
361
444
|
`App mode: ${state.appMode}`,
|
|
362
445
|
`AI providers: ${state.aiProviders.join(", ")}`,
|
|
446
|
+
`Provider profiles: ${state.providerProfiles.join(", ")}`,
|
|
363
447
|
`Allow non-empty directory: ${state.force ? "yes" : "no"}`,
|
|
364
448
|
];
|
|
365
449
|
|
|
@@ -368,14 +452,17 @@ function executionPreview(state, selectedRepo) {
|
|
|
368
452
|
}
|
|
369
453
|
|
|
370
454
|
lines.push("Run plan:");
|
|
371
|
-
lines.push(` 1.
|
|
372
|
-
lines.push(
|
|
373
|
-
lines.push(
|
|
455
|
+
lines.push(` 1. Ensure GitHub repo ${state.githubRepositoryInput}`);
|
|
456
|
+
lines.push(` 2. Ensure GitHub Project ${state.githubProjectTitle}`);
|
|
457
|
+
lines.push(` 3. Clone ${selectedRepo?.name || state.template}`);
|
|
458
|
+
lines.push(" 4. Install shared sub-agent assets and orchestration workflow");
|
|
459
|
+
lines.push(" 5. Copy .env.example to .env if needed");
|
|
460
|
+
lines.push(" 6. Run pnpm install");
|
|
374
461
|
if (state.appMode === "backend") {
|
|
375
|
-
lines.push("
|
|
462
|
+
lines.push(" 7. Skip browser install and parity bootstrap");
|
|
376
463
|
} else {
|
|
377
|
-
lines.push("
|
|
378
|
-
lines.push("
|
|
464
|
+
lines.push(" 7. Install Playwright Chromium for the default frontend target");
|
|
465
|
+
lines.push(" 8. Run frontend parity bootstrap");
|
|
379
466
|
}
|
|
380
467
|
|
|
381
468
|
return lines;
|
|
@@ -464,6 +551,22 @@ function validateStepValue(step, state, value) {
|
|
|
464
551
|
return trimmed;
|
|
465
552
|
}
|
|
466
553
|
|
|
554
|
+
if (step.key === "githubRepositoryInput") {
|
|
555
|
+
const trimmed = value.trim();
|
|
556
|
+
if (!trimmed) {
|
|
557
|
+
throw new Error("GitHub repository cannot be empty.");
|
|
558
|
+
}
|
|
559
|
+
return trimmed;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
if (step.key === "githubProjectTitle") {
|
|
563
|
+
const trimmed = value.trim();
|
|
564
|
+
if (!trimmed) {
|
|
565
|
+
throw new Error("GitHub project title cannot be empty.");
|
|
566
|
+
}
|
|
567
|
+
return trimmed;
|
|
568
|
+
}
|
|
569
|
+
|
|
467
570
|
if (step.key === "githubPat") {
|
|
468
571
|
const trimmed = value.trim();
|
|
469
572
|
if (!trimmed) {
|
|
@@ -480,6 +583,14 @@ function validateStepValue(step, state, value) {
|
|
|
480
583
|
return providers;
|
|
481
584
|
}
|
|
482
585
|
|
|
586
|
+
if (step.key === "providerProfiles") {
|
|
587
|
+
const profiles = normalizeProviderProfiles(value);
|
|
588
|
+
if (profiles.length === 0) {
|
|
589
|
+
throw new Error("Select at least one provider profile.");
|
|
590
|
+
}
|
|
591
|
+
return profiles;
|
|
592
|
+
}
|
|
593
|
+
|
|
483
594
|
if (step.key === "force" && value === false) {
|
|
484
595
|
throw new Error("Prompt cancelled");
|
|
485
596
|
}
|
|
@@ -603,14 +714,22 @@ async function runWizard(initialState, repos) {
|
|
|
603
714
|
}
|
|
604
715
|
|
|
605
716
|
if (step.type === "multi" && chunk === " ") {
|
|
606
|
-
const selected = new Set(
|
|
717
|
+
const selected = new Set(
|
|
718
|
+
step.key === "providerProfiles"
|
|
719
|
+
? normalizeProviderProfiles(state.providerProfiles)
|
|
720
|
+
: uniqueProviders(state.aiProviders),
|
|
721
|
+
);
|
|
607
722
|
const currentChoice = step.choices[cursors.get(step.key)];
|
|
608
723
|
if (selected.has(currentChoice.value)) {
|
|
609
724
|
selected.delete(currentChoice.value);
|
|
610
725
|
} else {
|
|
611
726
|
selected.add(currentChoice.value);
|
|
612
727
|
}
|
|
613
|
-
|
|
728
|
+
if (step.key === "providerProfiles") {
|
|
729
|
+
state.providerProfiles = [...selected];
|
|
730
|
+
} else {
|
|
731
|
+
state.aiProviders = [...selected];
|
|
732
|
+
}
|
|
614
733
|
rerender();
|
|
615
734
|
return undefined;
|
|
616
735
|
}
|
|
@@ -698,6 +817,10 @@ async function promptForMultiChoice(rl, label, choices, defaults) {
|
|
|
698
817
|
}
|
|
699
818
|
}
|
|
700
819
|
|
|
820
|
+
async function promptMultiProfiles(rl, label, choices, defaults) {
|
|
821
|
+
return promptForMultiChoice(rl, label, choices, defaults);
|
|
822
|
+
}
|
|
823
|
+
|
|
701
824
|
function printFallbackPlan(state, repos) {
|
|
702
825
|
const selectedRepo = resolveTemplateRepo(state.template, repos);
|
|
703
826
|
console.log("");
|
|
@@ -719,6 +842,9 @@ async function promptLinearly(initialState, repos) {
|
|
|
719
842
|
const projectNameAnswer = await rl.question(`Project name [${state.projectName || defaultProjectName}]: `);
|
|
720
843
|
state.projectName = projectNameAnswer.trim() || state.projectName || defaultProjectName;
|
|
721
844
|
|
|
845
|
+
const repoAnswer = await rl.question(`GitHub repository [${state.githubRepositoryInput || state.projectName}]: `);
|
|
846
|
+
state.githubRepositoryInput = repoAnswer.trim() || state.githubRepositoryInput || state.projectName;
|
|
847
|
+
|
|
722
848
|
state.githubAuthMode = await promptForChoice(rl, "GitHub auth mode", GITHUB_AUTH_CHOICES);
|
|
723
849
|
if (state.githubAuthMode === "pat") {
|
|
724
850
|
state.githubPat = (await rl.question("GitHub PAT: ")).trim();
|
|
@@ -727,8 +853,19 @@ async function promptLinearly(initialState, repos) {
|
|
|
727
853
|
}
|
|
728
854
|
}
|
|
729
855
|
|
|
856
|
+
state.githubProjectMode = await promptForChoice(rl, "GitHub project mode", GITHUB_PROJECT_MODE_CHOICES);
|
|
857
|
+
const projectTitleAnswer = await rl.question(`GitHub project title [${state.githubProjectTitle || `${state.projectName} Delivery`}]: `);
|
|
858
|
+
state.githubProjectTitle =
|
|
859
|
+
projectTitleAnswer.trim() || state.githubProjectTitle || `${state.projectName} Delivery`;
|
|
860
|
+
|
|
730
861
|
state.template = await promptForChoice(rl, `Template repo from ${state.owner}`, buildTemplateChoices(repos));
|
|
731
862
|
state.appMode = await promptForChoice(rl, "App mode", APP_MODE_CHOICES);
|
|
863
|
+
state.providerProfiles = await promptMultiProfiles(
|
|
864
|
+
rl,
|
|
865
|
+
"AI runtime profiles",
|
|
866
|
+
PROVIDER_PROFILE_CHOICES,
|
|
867
|
+
state.providerProfiles,
|
|
868
|
+
);
|
|
732
869
|
state.aiProviders = await promptForMultiChoice(rl, "AI providers", AI_PROVIDER_CHOICES, state.aiProviders);
|
|
733
870
|
|
|
734
871
|
if (!state.force && directoryHasUserFiles(state.targetDir)) {
|
|
@@ -789,6 +926,12 @@ function validateNonInteractiveState(state) {
|
|
|
789
926
|
if (!state.projectName) {
|
|
790
927
|
state.projectName = inferProjectName(state.targetDir);
|
|
791
928
|
}
|
|
929
|
+
if (!state.githubRepositoryInput) {
|
|
930
|
+
state.githubRepositoryInput = state.projectName;
|
|
931
|
+
}
|
|
932
|
+
if (!state.githubProjectTitle) {
|
|
933
|
+
state.githubProjectTitle = `${state.projectName} Delivery`;
|
|
934
|
+
}
|
|
792
935
|
if (state.githubAuthMode === "pat" && !state.githubPat) {
|
|
793
936
|
throw new Error("`--github-auth pat` requires `--github-pat`.");
|
|
794
937
|
}
|
|
@@ -843,6 +986,7 @@ async function main() {
|
|
|
843
986
|
: await promptLinearly(state, repos);
|
|
844
987
|
|
|
845
988
|
applyRuntimeGitHubAuth(resolvedState);
|
|
989
|
+
const orchestration = await resolveGitHubOrchestration(resolvedState);
|
|
846
990
|
const selectedRepo = resolveTemplateRepo(resolvedState.template, repos);
|
|
847
991
|
const destinationRoot = ensureTargetDir(resolvedState.targetDir, {
|
|
848
992
|
force: resolvedState.force,
|
|
@@ -850,9 +994,16 @@ async function main() {
|
|
|
850
994
|
const result = installTemplateRepo({
|
|
851
995
|
destinationRoot: path.resolve(destinationRoot),
|
|
852
996
|
templateRepo: selectedRepo,
|
|
853
|
-
setupSelections:
|
|
997
|
+
setupSelections: {
|
|
998
|
+
...resolvedState,
|
|
999
|
+
...orchestration,
|
|
1000
|
+
},
|
|
854
1001
|
skipBootstrap: resolvedState.skipBootstrap,
|
|
855
1002
|
});
|
|
1003
|
+
finalizeRepositoryGit(path.resolve(destinationRoot), {
|
|
1004
|
+
...resolvedState,
|
|
1005
|
+
...orchestration,
|
|
1006
|
+
});
|
|
856
1007
|
printSuccess(result);
|
|
857
1008
|
} catch (error) {
|
|
858
1009
|
console.error(error.message);
|