@tdk-landscape/tdk-cli-core 1.3.53 → 1.3.55
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/CHANGELOG.md +9 -0
- package/README.md +1 -1
- package/cli/dist/commands/doctor.js +21 -3
- package/cli/dist/commands/upgrade.js +7 -7
- package/cli/dist/generator/extension-fetch.js +16 -9
- package/cli/dist/utils/spinner.js +39 -0
- package/cli/package.json +1 -2
- package/package.json +16 -2
- package/.claude/skills/layer-autoresearch/SKILL.md +0 -48
- package/.claude/skills/tdk-troubleshoot/SKILL.md +0 -222
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -40
- package/.github/ISSUE_TEMPLATE/config.yml +0 -11
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -18
- package/.github/ISSUE_TEMPLATE/premium_license.yml +0 -43
- package/.github/dependabot.yml +0 -33
- package/.github/pull_request_template.md +0 -5
- package/.github/workflows/ci.yml +0 -200
- package/.github/workflows/release-binaries.yml +0 -139
- package/.github/zizmor.yml +0 -9
- package/.pre-commit-config.yaml +0 -57
- package/CODE_OF_CONDUCT.md +0 -9
- package/CONTRIBUTING.md +0 -42
- package/Makefile +0 -92
- package/SECURITY.md +0 -17
- package/benchmarks/results/container-scale-2026-09-25T20-54-49-736Z.json +0 -45
- package/benchmarks/results/container-scale-2026-09-25T21-01-20-540Z.json +0 -150
- package/benchmarks/results/container-scale-2026-09-25T21-15-01-441Z.json +0 -73
- package/benchmarks/results/container-scale-2026-09-25T22-09-01-630Z.json +0 -77
- package/benchmarks/results/container-scale-2026-09-25T22-18-28-371Z.json +0 -202
- package/cli/AGENTS.md +0 -390
- package/cli/DESIGN.md +0 -735
- package/cli/README.md +0 -292
- package/cli/biome.json +0 -40
- package/cli/dependency-graph.svg +0 -1135
- package/cli/dist/cli.d.ts +0 -3
- package/cli/dist/cli.d.ts.map +0 -1
- package/cli/dist/cli.js.map +0 -1
- package/cli/dist/commands/completion.d.ts +0 -3
- package/cli/dist/commands/completion.d.ts.map +0 -1
- package/cli/dist/commands/completion.js.map +0 -1
- package/cli/dist/commands/config.d.ts +0 -3
- package/cli/dist/commands/config.d.ts.map +0 -1
- package/cli/dist/commands/config.js.map +0 -1
- package/cli/dist/commands/doctor.d.ts +0 -19
- package/cli/dist/commands/doctor.d.ts.map +0 -1
- package/cli/dist/commands/doctor.js.map +0 -1
- package/cli/dist/commands/down.d.ts +0 -3
- package/cli/dist/commands/down.d.ts.map +0 -1
- package/cli/dist/commands/down.js.map +0 -1
- package/cli/dist/commands/help.d.ts +0 -2
- package/cli/dist/commands/help.d.ts.map +0 -1
- package/cli/dist/commands/help.js.map +0 -1
- package/cli/dist/commands/networks.d.ts +0 -3
- package/cli/dist/commands/networks.d.ts.map +0 -1
- package/cli/dist/commands/networks.js.map +0 -1
- package/cli/dist/commands/project.d.ts +0 -9
- package/cli/dist/commands/project.d.ts.map +0 -1
- package/cli/dist/commands/project.js.map +0 -1
- package/cli/dist/commands/projects.d.ts +0 -3
- package/cli/dist/commands/projects.d.ts.map +0 -1
- package/cli/dist/commands/projects.js.map +0 -1
- package/cli/dist/commands/resource.d.ts +0 -69
- package/cli/dist/commands/resource.d.ts.map +0 -1
- package/cli/dist/commands/resource.js.map +0 -1
- package/cli/dist/commands/resources.d.ts +0 -3
- package/cli/dist/commands/resources.d.ts.map +0 -1
- package/cli/dist/commands/resources.js.map +0 -1
- package/cli/dist/commands/stack.d.ts +0 -3
- package/cli/dist/commands/stack.d.ts.map +0 -1
- package/cli/dist/commands/stack.js.map +0 -1
- package/cli/dist/commands/stacks.d.ts +0 -3
- package/cli/dist/commands/stacks.d.ts.map +0 -1
- package/cli/dist/commands/stacks.js.map +0 -1
- package/cli/dist/commands/status.d.ts +0 -3
- package/cli/dist/commands/status.d.ts.map +0 -1
- package/cli/dist/commands/status.js.map +0 -1
- package/cli/dist/commands/ui.d.ts +0 -3
- package/cli/dist/commands/ui.d.ts.map +0 -1
- package/cli/dist/commands/ui.js.map +0 -1
- package/cli/dist/commands/up.d.ts +0 -3
- package/cli/dist/commands/up.d.ts.map +0 -1
- package/cli/dist/commands/up.js.map +0 -1
- package/cli/dist/commands/upgrade.d.ts +0 -14
- package/cli/dist/commands/upgrade.d.ts.map +0 -1
- package/cli/dist/commands/upgrade.js.map +0 -1
- package/cli/dist/commands/version.d.ts +0 -3
- package/cli/dist/commands/version.d.ts.map +0 -1
- package/cli/dist/commands/version.js.map +0 -1
- package/cli/dist/components/Accessible.d.ts +0 -8
- package/cli/dist/components/Accessible.d.ts.map +0 -1
- package/cli/dist/components/Accessible.js.map +0 -1
- package/cli/dist/components/BaseTooltip.d.ts +0 -4
- package/cli/dist/components/BaseTooltip.d.ts.map +0 -1
- package/cli/dist/components/BaseTooltip.js.map +0 -1
- package/cli/dist/components/DetailPanel.d.ts +0 -4
- package/cli/dist/components/DetailPanel.d.ts.map +0 -1
- package/cli/dist/components/DetailPanel.js.map +0 -1
- package/cli/dist/components/FileTree.d.ts +0 -4
- package/cli/dist/components/FileTree.d.ts.map +0 -1
- package/cli/dist/components/FileTree.js.map +0 -1
- package/cli/dist/components/ResourceSelectInput.d.ts +0 -4
- package/cli/dist/components/ResourceSelectInput.d.ts.map +0 -1
- package/cli/dist/components/ResourceSelectInput.js.map +0 -1
- package/cli/dist/components/ResourceTable.d.ts +0 -4
- package/cli/dist/components/ResourceTable.d.ts.map +0 -1
- package/cli/dist/components/ResourceTable.js.map +0 -1
- package/cli/dist/components/TabBar.d.ts +0 -4
- package/cli/dist/components/TabBar.d.ts.map +0 -1
- package/cli/dist/components/TabBar.js.map +0 -1
- package/cli/dist/components/Tooltip.d.ts +0 -12
- package/cli/dist/components/Tooltip.d.ts.map +0 -1
- package/cli/dist/components/Tooltip.js.map +0 -1
- package/cli/dist/components/index.d.ts +0 -8
- package/cli/dist/components/index.d.ts.map +0 -1
- package/cli/dist/components/index.js.map +0 -1
- package/cli/dist/config/platform-standards.d.ts +0 -159
- package/cli/dist/config/platform-standards.d.ts.map +0 -1
- package/cli/dist/config/platform-standards.js.map +0 -1
- package/cli/dist/generator/extension-fetch.d.ts +0 -25
- package/cli/dist/generator/extension-fetch.d.ts.map +0 -1
- package/cli/dist/generator/extension-fetch.js.map +0 -1
- package/cli/dist/generator/template-engine.d.ts +0 -62
- package/cli/dist/generator/template-engine.d.ts.map +0 -1
- package/cli/dist/generator/template-engine.js.map +0 -1
- package/cli/dist/index.d.ts +0 -11
- package/cli/dist/index.d.ts.map +0 -1
- package/cli/dist/index.js.map +0 -1
- package/cli/dist/types/index.d.ts +0 -257
- package/cli/dist/types/index.d.ts.map +0 -1
- package/cli/dist/types/index.js.map +0 -1
- package/cli/dist/utils/cache.d.ts +0 -19
- package/cli/dist/utils/cache.d.ts.map +0 -1
- package/cli/dist/utils/cache.js.map +0 -1
- package/cli/dist/utils/command-helpers.d.ts +0 -17
- package/cli/dist/utils/command-helpers.d.ts.map +0 -1
- package/cli/dist/utils/command-helpers.js.map +0 -1
- package/cli/dist/utils/constants.d.ts +0 -53
- package/cli/dist/utils/constants.d.ts.map +0 -1
- package/cli/dist/utils/constants.js.map +0 -1
- package/cli/dist/utils/discovery-context.d.ts +0 -4
- package/cli/dist/utils/discovery-context.d.ts.map +0 -1
- package/cli/dist/utils/discovery-context.js.map +0 -1
- package/cli/dist/utils/docker.d.ts +0 -4
- package/cli/dist/utils/docker.d.ts.map +0 -1
- package/cli/dist/utils/docker.js.map +0 -1
- package/cli/dist/utils/doctor-runtime.d.ts +0 -81
- package/cli/dist/utils/doctor-runtime.d.ts.map +0 -1
- package/cli/dist/utils/doctor-runtime.js.map +0 -1
- package/cli/dist/utils/env-validator.d.ts +0 -15
- package/cli/dist/utils/env-validator.d.ts.map +0 -1
- package/cli/dist/utils/env-validator.js.map +0 -1
- package/cli/dist/utils/errors.d.ts +0 -31
- package/cli/dist/utils/errors.d.ts.map +0 -1
- package/cli/dist/utils/errors.js.map +0 -1
- package/cli/dist/utils/file-helpers.d.ts +0 -14
- package/cli/dist/utils/file-helpers.d.ts.map +0 -1
- package/cli/dist/utils/file-helpers.js.map +0 -1
- package/cli/dist/utils/formatting.d.ts +0 -30
- package/cli/dist/utils/formatting.d.ts.map +0 -1
- package/cli/dist/utils/formatting.js.map +0 -1
- package/cli/dist/utils/paths.d.ts +0 -3
- package/cli/dist/utils/paths.d.ts.map +0 -1
- package/cli/dist/utils/paths.js.map +0 -1
- package/cli/dist/utils/port-assignment.d.ts +0 -6
- package/cli/dist/utils/port-assignment.d.ts.map +0 -1
- package/cli/dist/utils/port-assignment.js.map +0 -1
- package/cli/dist/utils/project-features.d.ts +0 -23
- package/cli/dist/utils/project-features.d.ts.map +0 -1
- package/cli/dist/utils/project-features.js.map +0 -1
- package/cli/dist/utils/project-templates.d.ts +0 -7
- package/cli/dist/utils/project-templates.d.ts.map +0 -1
- package/cli/dist/utils/project-templates.js.map +0 -1
- package/cli/dist/utils/prompt.d.ts +0 -28
- package/cli/dist/utils/prompt.d.ts.map +0 -1
- package/cli/dist/utils/prompt.js.map +0 -1
- package/cli/dist/utils/resource-features.d.ts +0 -29
- package/cli/dist/utils/resource-features.d.ts.map +0 -1
- package/cli/dist/utils/resource-features.js.map +0 -1
- package/cli/dist/utils/service-urls.d.ts +0 -30
- package/cli/dist/utils/service-urls.d.ts.map +0 -1
- package/cli/dist/utils/service-urls.js.map +0 -1
- package/cli/dist/utils/services.d.ts +0 -18
- package/cli/dist/utils/services.d.ts.map +0 -1
- package/cli/dist/utils/services.js.map +0 -1
- package/cli/dist/utils/stack-features.d.ts +0 -22
- package/cli/dist/utils/stack-features.d.ts.map +0 -1
- package/cli/dist/utils/stack-features.js.map +0 -1
- package/cli/dist/utils/tar.d.ts +0 -7
- package/cli/dist/utils/tar.d.ts.map +0 -1
- package/cli/dist/utils/tar.js.map +0 -1
- package/cli/dist/utils/tilt.d.ts +0 -20
- package/cli/dist/utils/tilt.d.ts.map +0 -1
- package/cli/dist/utils/tilt.js.map +0 -1
- package/cli/dist/utils/validation.d.ts +0 -16
- package/cli/dist/utils/validation.d.ts.map +0 -1
- package/cli/dist/utils/validation.js.map +0 -1
- package/cli/knip.json +0 -6
- package/cli/pnpm-lock.yaml +0 -2305
- package/cli/pnpm-workspace.yaml +0 -2
- package/cli/src/cli.ts +0 -72
- package/cli/src/commands/__tests__/always-enabled-infra.test.ts +0 -109
- package/cli/src/commands/__tests__/config.test.ts +0 -146
- package/cli/src/commands/__tests__/doctor.test.ts +0 -730
- package/cli/src/commands/__tests__/error-handling.test.ts +0 -78
- package/cli/src/commands/__tests__/phases-model.test.ts +0 -161
- package/cli/src/commands/__tests__/project-resource-features-e2e.test.ts +0 -187
- package/cli/src/commands/__tests__/project.test.ts +0 -68
- package/cli/src/commands/__tests__/resource.test.ts +0 -226
- package/cli/src/commands/__tests__/saas-starter-integration.test.ts +0 -194
- package/cli/src/commands/__tests__/stack-features-e2e.test.ts +0 -135
- package/cli/src/commands/__tests__/upgrade.test.ts +0 -198
- package/cli/src/commands/completion.ts +0 -300
- package/cli/src/commands/config.ts +0 -299
- package/cli/src/commands/doctor.ts +0 -926
- package/cli/src/commands/down.ts +0 -37
- package/cli/src/commands/help.ts +0 -143
- package/cli/src/commands/networks-design.md +0 -80
- package/cli/src/commands/networks.ts +0 -332
- package/cli/src/commands/project.ts +0 -456
- package/cli/src/commands/projects.ts +0 -82
- package/cli/src/commands/resource.ts +0 -652
- package/cli/src/commands/resources.ts +0 -95
- package/cli/src/commands/stack.ts +0 -128
- package/cli/src/commands/stacks.ts +0 -52
- package/cli/src/commands/status.ts +0 -88
- package/cli/src/commands/ui.tsx +0 -843
- package/cli/src/commands/up.ts +0 -169
- package/cli/src/commands/upgrade.ts +0 -628
- package/cli/src/commands/version.ts +0 -9
- package/cli/src/components/Accessible.tsx +0 -21
- package/cli/src/components/BaseTooltip.tsx +0 -66
- package/cli/src/components/DetailPanel.tsx +0 -146
- package/cli/src/components/FileTree.tsx +0 -89
- package/cli/src/components/ResourceSelectInput.tsx +0 -30
- package/cli/src/components/ResourceTable.tsx +0 -78
- package/cli/src/components/TabBar.tsx +0 -53
- package/cli/src/components/Tooltip.tsx +0 -11
- package/cli/src/components/index.ts +0 -7
- package/cli/src/config/platform-standards.test.ts +0 -11
- package/cli/src/config/platform-standards.ts +0 -196
- package/cli/src/generator/__tests__/extension-fetch.test.ts +0 -242
- package/cli/src/generator/__tests__/template-engine.test.ts +0 -70
- package/cli/src/generator/extension-fetch.ts +0 -286
- package/cli/src/generator/template-engine.ts +0 -752
- package/cli/src/index.ts +0 -86
- package/cli/src/templates.d.ts +0 -4
- package/cli/src/types/index.ts +0 -353
- package/cli/src/utils/__tests__/cache.test.ts +0 -98
- package/cli/src/utils/__tests__/formatting.test.ts +0 -170
- package/cli/src/utils/__tests__/paths.test.ts +0 -180
- package/cli/src/utils/__tests__/port-assignment.test.ts +0 -121
- package/cli/src/utils/__tests__/service-urls.test.ts +0 -174
- package/cli/src/utils/__tests__/services.test.ts +0 -531
- package/cli/src/utils/__tests__/tilt.test.ts +0 -172
- package/cli/src/utils/__tests__/validation.test.ts +0 -148
- package/cli/src/utils/cache.ts +0 -76
- package/cli/src/utils/command-helpers.ts +0 -54
- package/cli/src/utils/constants.ts +0 -130
- package/cli/src/utils/discovery-context.ts +0 -49
- package/cli/src/utils/docker.ts +0 -20
- package/cli/src/utils/doctor-runtime.ts +0 -644
- package/cli/src/utils/env-validator.ts +0 -139
- package/cli/src/utils/errors.ts +0 -168
- package/cli/src/utils/file-helpers.ts +0 -62
- package/cli/src/utils/formatting.ts +0 -215
- package/cli/src/utils/paths.ts +0 -53
- package/cli/src/utils/port-assignment.ts +0 -106
- package/cli/src/utils/project-features.ts +0 -118
- package/cli/src/utils/project-templates.ts +0 -29
- package/cli/src/utils/prompt.ts +0 -128
- package/cli/src/utils/resource-features.ts +0 -215
- package/cli/src/utils/service-urls.ts +0 -124
- package/cli/src/utils/services.ts +0 -364
- package/cli/src/utils/stack-features.ts +0 -30
- package/cli/src/utils/tar.ts +0 -24
- package/cli/src/utils/tilt.ts +0 -133
- package/cli/src/utils/validation.ts +0 -67
- package/cli/tsconfig.json +0 -25
- package/cli/tsconfig.typecheck.json +0 -8
- package/docs/FEATURES.md +0 -281
- package/docs/demo.svg +0 -217
- package/engine/docs/AUTODISCOVERY_TEST.md +0 -182
- package/engine/docs/C4-ARCHITECTURE-operations.md +0 -396
- package/engine/docs/C4-ARCHITECTURE-overview.md +0 -284
- package/engine/docs/C4-ARCHITECTURE.md +0 -17
- package/engine/docs/GOLDEN_IMAGE_INTEGRATION.md +0 -349
- package/engine/docs/MANIFEST_DRIVEN_ARCHITECTURE.md +0 -357
- package/engine/docs/README.md +0 -284
- package/install.sh +0 -19
- package/knip.json +0 -10
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/.openspec.yaml +0 -2
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/design.md +0 -102
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/proposal.md +0 -31
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-notifications/spec.md +0 -48
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-orchestration/spec.md +0 -63
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-troubleshooting/spec.md +0 -56
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/tasks.md +0 -61
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/.openspec.yaml +0 -2
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/design.md +0 -114
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/proposal.md +0 -32
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/manifest-field-migration/spec.md +0 -20
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/resource-terminology-standard/spec.md +0 -20
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/stack-terminology-standard/spec.md +0 -20
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/tasks.md +0 -194
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/.openspec.yaml +0 -2
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/design.md +0 -111
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/proposal.md +0 -33
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/function-naming-alignment/spec.md +0 -12
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/optional-parameter-patterns/spec.md +0 -18
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-documentation/spec.md +0 -16
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-naming-consistency/spec.md +0 -12
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-ordering-standard/spec.md +0 -12
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/tasks.md +0 -194
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/.openspec.yaml +0 -2
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/design.md +0 -84
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/proposal.md +0 -31
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/codebase-audit/spec.md +0 -27
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/dead-code-cleanup/spec.md +0 -27
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/test-gap-fill/spec.md +0 -23
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/todo-resolution/spec.md +0 -27
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/tasks.md +0 -39
- package/openspec/changes/archive/2026-06-25-landscape-consolidation/.openspec.yaml +0 -2
- package/openspec/changes/archive/2026-06-25-landscape-consolidation/design.md +0 -80
- package/openspec/changes/archive/2026-06-25-landscape-consolidation/proposal.md +0 -40
- package/openspec/changes/archive/2026-06-25-landscape-consolidation/spec.md +0 -52
- package/openspec/changes/archive/2026-06-25-landscape-consolidation/tasks.md +0 -51
- package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/.openspec.yaml +0 -2
- package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/design.md +0 -43
- package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/proposal.md +0 -29
- package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/specs/self-contained-generated-projects/spec.md +0 -67
- package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/tasks.md +0 -27
- package/openspec/changes/optimize-runtime-docker-layers/.openspec.yaml +0 -3
- package/openspec/changes/optimize-runtime-docker-layers/design.md +0 -81
- package/openspec/changes/optimize-runtime-docker-layers/proposal.md +0 -44
- package/openspec/changes/optimize-runtime-docker-layers/specs/runtime-container-footprint/spec.md +0 -79
- package/openspec/changes/optimize-runtime-docker-layers/tasks.md +0 -36
- package/openspec/changes/prioritized-cold-start/.openspec.yaml +0 -4
- package/openspec/changes/prioritized-cold-start/design.md +0 -137
- package/openspec/changes/prioritized-cold-start/proposal.md +0 -41
- package/openspec/changes/prioritized-cold-start/specs/on-demand-resource-startup/spec.md +0 -98
- package/openspec/changes/prioritized-cold-start/tasks.md +0 -69
- package/openspec/config.yaml +0 -1
- package/openspec/specs/manifest-field-migration/spec.md +0 -24
- package/openspec/specs/resource-terminology-standard/spec.md +0 -24
- package/openspec/specs/self-contained-generated-projects/spec.md +0 -67
- package/openspec/specs/stack-terminology-standard/spec.md +0 -24
- package/platform/services/platform/proxy/service.yaml +0 -14
- package/scripts/audit-codebase.sh +0 -213
- package/scripts/autoresearch/layer-eval.sh +0 -65
- package/scripts/benchmark/README.md +0 -25
- package/scripts/benchmark/container-scale.ts +0 -503
- package/scripts/benchmark/pre-release-gate.sh +0 -9
- package/scripts/install-git-hooks.sh +0 -14
- package/scripts/measure-idle-footprint.sh +0 -58
- package/scripts/record-demo.sh +0 -43
- package/scripts/release-binaries.sh +0 -97
- package/scripts/setup-pre-commit.sh +0 -33
- package/scripts/stage-npm-engine.sh +0 -36
- package/tests/tilt-engine/__init__.py +0 -5
- package/tests/tilt-engine/conftest.py +0 -182
- package/tests/tilt-engine/fixtures/appointment-frontend-service.json +0 -11
- package/tests/tilt-engine/fixtures/identity-backend-service.json +0 -12
- package/tests/tilt-engine/fixtures/invalid-service.json +0 -4
- package/tests/tilt-engine/test_agents_md_generator.py +0 -341
- package/tests/tilt-engine/test_agents_md_integration.py +0 -378
- package/tests/tilt-engine/test_cache_operations.py +0 -181
- package/tests/tilt-engine/test_cache_persistence.py +0 -142
- package/tests/tilt-engine/test_code_executor.py +0 -152
- package/tests/tilt-engine/test_code_viewer.py +0 -127
- package/tests/tilt-engine/test_compose_port_anchors.py +0 -310
- package/tests/tilt-engine/test_config_inspector.py +0 -162
- package/tests/tilt-engine/test_daemon_focus_mode.py +0 -89
- package/tests/tilt-engine/test_daemon_polling.py +0 -122
- package/tests/tilt-engine/test_daemon_registration.py +0 -115
- package/tests/tilt-engine/test_daemon_validation.py +0 -107
- package/tests/tilt-engine/test_docker_generator_bugs.py +0 -493
- package/tests/tilt-engine/test_docker_prune.py +0 -119
- package/tests/tilt-engine/test_dockerignore_path_bug.py +0 -82
- package/tests/tilt-engine/test_file_browser.py +0 -193
- package/tests/tilt-engine/test_frontend_basepath_manifest.py +0 -27
- package/tests/tilt-engine/test_health_dependencies.py +0 -130
- package/tests/tilt-engine/test_health_endpoints.py +0 -118
- package/tests/tilt-engine/test_health_tilt_ui.py +0 -85
- package/tests/tilt-engine/test_runtime_container_footprint.py +0 -162
- package/tests/tilt-engine/test_sablier_defer_start.py +0 -237
- package/tests/tilt-engine/test_safety_aliases.py +0 -84
- package/tests/tilt-engine/test_snapshot_diff.py +0 -136
- package/tests/tilt-engine/test_snapshot_persistence.py +0 -163
- package/tests/tilt-engine/test_snapshot_scanning.py +0 -123
- package/tests/tilt-engine/test_standalone_project_boot.py +0 -61
- package/tests/tilt-engine/test_standalone_traefik.py +0 -160
- package/tests/tilt-engine/test_traefik_static_wake_route.py +0 -187
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
|
|
3
|
-
// Mock findProjectRoot to return a controlled path for all tests
|
|
4
|
-
vi.mock("../paths.js", () => ({
|
|
5
|
-
findProjectRoot: vi.fn(),
|
|
6
|
-
getPackageVersion: vi.fn(() => "1.1.0"),
|
|
7
|
-
}));
|
|
8
|
-
|
|
9
|
-
import { findProjectRoot } from "../paths.js";
|
|
10
|
-
|
|
11
|
-
describe("getTiltfilePath", () => {
|
|
12
|
-
beforeEach(() => {
|
|
13
|
-
vi.mocked(findProjectRoot).mockReturnValue("/fake/project");
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
afterEach(() => {
|
|
17
|
-
vi.clearAllMocks();
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
it("should return correct tiltfile path for valid project", async () => {
|
|
21
|
-
const { getTiltfilePath } = await import("../tilt.js");
|
|
22
|
-
const tiltfilePath = getTiltfilePath();
|
|
23
|
-
expect(tiltfilePath).toBe("/fake/project/.tdk/.tdk-out/Tiltfile");
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
it("should not have double slashes in path", async () => {
|
|
27
|
-
const { getTiltfilePath } = await import("../tilt.js");
|
|
28
|
-
// Ensure root doesn't have trailing slash
|
|
29
|
-
const tiltfilePath = getTiltfilePath();
|
|
30
|
-
expect(tiltfilePath).not.toContain("//");
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
describe("getTiltfilePath error", () => {
|
|
35
|
-
beforeEach(() => {
|
|
36
|
-
vi.mocked(findProjectRoot).mockReturnValue(null);
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
afterEach(() => {
|
|
40
|
-
vi.clearAllMocks();
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it("should throw when not in a TDK project", async () => {
|
|
44
|
-
const { getTiltfilePath } = await import("../tilt.js");
|
|
45
|
-
expect(() => getTiltfilePath()).toThrow("Not in a TDK project");
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
describe("buildTiltUpArgs", () => {
|
|
50
|
-
beforeEach(() => {
|
|
51
|
-
vi.mocked(findProjectRoot).mockReturnValue("/fake/project");
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
afterEach(() => {
|
|
55
|
-
vi.clearAllMocks();
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
it("should include -f flag with tiltfile path", async () => {
|
|
59
|
-
const { buildTiltUpArgs } = await import("../tilt.js");
|
|
60
|
-
const args = buildTiltUpArgs(["service-a", "service-b"], {});
|
|
61
|
-
expect(args).toContain("-f");
|
|
62
|
-
const fIndex = args.indexOf("-f");
|
|
63
|
-
expect(fIndex).toBeGreaterThanOrEqual(0);
|
|
64
|
-
expect(args[fIndex + 1]).toContain(".tdk/.tdk-out/Tiltfile");
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
it("should include service names in order", async () => {
|
|
68
|
-
const { buildTiltUpArgs } = await import("../tilt.js");
|
|
69
|
-
const args = buildTiltUpArgs(["service-a", "service-b"], {});
|
|
70
|
-
expect(args).toContain("service-a");
|
|
71
|
-
expect(args).toContain("service-b");
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
it("should include --verbose flag when verbose is set", async () => {
|
|
75
|
-
const { buildTiltUpArgs } = await import("../tilt.js");
|
|
76
|
-
const args = buildTiltUpArgs([], { verbose: true });
|
|
77
|
-
expect(args).toContain("--verbose");
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
it("should NOT include --verbose when quiet is set even if verbose is true", async () => {
|
|
81
|
-
const { buildTiltUpArgs } = await import("../tilt.js");
|
|
82
|
-
const args = buildTiltUpArgs([], { verbose: true, quiet: true });
|
|
83
|
-
expect(args).not.toContain("--verbose");
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
it("should include --watch flag when watch is set", async () => {
|
|
87
|
-
const { buildTiltUpArgs } = await import("../tilt.js");
|
|
88
|
-
const args = buildTiltUpArgs([], { watch: true });
|
|
89
|
-
expect(args).toContain("--watch");
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
it("should order args: -f, tiltfile, services, options", async () => {
|
|
93
|
-
const { buildTiltUpArgs } = await import("../tilt.js");
|
|
94
|
-
const args = buildTiltUpArgs(["svc-a", "svc-b"], { verbose: true });
|
|
95
|
-
expect(args[0]).toBe("-f");
|
|
96
|
-
expect(args[1]).toContain("Tiltfile");
|
|
97
|
-
expect(args[2]).toBe("svc-a");
|
|
98
|
-
expect(args[3]).toBe("svc-b");
|
|
99
|
-
expect(args[4]).toBe("--verbose");
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
it("should call findProjectRoot once", async () => {
|
|
103
|
-
const { buildTiltUpArgs } = await import("../tilt.js");
|
|
104
|
-
buildTiltUpArgs([], {});
|
|
105
|
-
expect(findProjectRoot).toHaveBeenCalledTimes(1);
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
it("should include -- --focus=<stack> before service names when focusTargets is set", async () => {
|
|
109
|
-
// Regression test: `tdk up <stack>` used to pass only bare positional service
|
|
110
|
-
// names, which the generated Tiltfile's focus filter never reads (it only reads
|
|
111
|
-
// --focus), so it silently fell back to building every stack instead of the one
|
|
112
|
-
// requested. --focus must be present, carry the stack name, and be preceded by
|
|
113
|
-
// `--` (tilt up rejects "--focus" as an unrecognized top-level flag otherwise -
|
|
114
|
-
// `--` is what routes it to the Tiltfile's own config.parse()).
|
|
115
|
-
const { buildTiltUpArgs } = await import("../tilt.js");
|
|
116
|
-
const args = buildTiltUpArgs(["finance-api", "finance-app"], { focusTargets: ["finance"] });
|
|
117
|
-
const dashDashIndex = args.indexOf("--");
|
|
118
|
-
expect(dashDashIndex).toBeGreaterThanOrEqual(0);
|
|
119
|
-
expect(args[dashDashIndex + 1]).toBe("--focus=finance");
|
|
120
|
-
expect(args.indexOf("--focus=finance")).toBeLessThan(args.indexOf("finance-api"));
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
it("should join multiple focusTargets with commas in a single --focus flag", async () => {
|
|
124
|
-
const { buildTiltUpArgs } = await import("../tilt.js");
|
|
125
|
-
const args = buildTiltUpArgs([], { focusTargets: ["finance", "hr"] });
|
|
126
|
-
expect(args).toContain("--focus=finance,hr");
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
it("should NOT include --focus when focusTargets is empty or omitted", async () => {
|
|
130
|
-
const { buildTiltUpArgs } = await import("../tilt.js");
|
|
131
|
-
const withEmpty = buildTiltUpArgs(["svc"], { focusTargets: [] });
|
|
132
|
-
const withOmitted = buildTiltUpArgs(["svc"], {});
|
|
133
|
-
expect(withEmpty.some((a) => a.startsWith("--focus"))).toBe(false);
|
|
134
|
-
expect(withOmitted.some((a) => a.startsWith("--focus"))).toBe(false);
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
describe("buildTiltDownArgs", () => {
|
|
139
|
-
beforeEach(() => {
|
|
140
|
-
vi.mocked(findProjectRoot).mockReturnValue("/fake/project");
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
afterEach(() => {
|
|
144
|
-
vi.clearAllMocks();
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
it("should include -f flag with tiltfile path", async () => {
|
|
148
|
-
const { buildTiltDownArgs } = await import("../tilt.js");
|
|
149
|
-
const args = buildTiltDownArgs({});
|
|
150
|
-
expect(args).toContain("-f");
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
it("should include --force flag when force is set", async () => {
|
|
154
|
-
const { buildTiltDownArgs } = await import("../tilt.js");
|
|
155
|
-
const args = buildTiltDownArgs({ force: true });
|
|
156
|
-
expect(args).toContain("--force");
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
it("should not include --force flag when force is not set", async () => {
|
|
160
|
-
const { buildTiltDownArgs } = await import("../tilt.js");
|
|
161
|
-
const args = buildTiltDownArgs({});
|
|
162
|
-
expect(args).not.toContain("--force");
|
|
163
|
-
});
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
describe("isTiltAvailable", () => {
|
|
167
|
-
it("should return a boolean", async () => {
|
|
168
|
-
const { isTiltAvailable } = await import("../tilt.js");
|
|
169
|
-
const available = await isTiltAvailable();
|
|
170
|
-
expect(typeof available).toBe("boolean");
|
|
171
|
-
});
|
|
172
|
-
});
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { VALID_RESOURCE_TYPES } from "../constants.js";
|
|
3
|
-
import {
|
|
4
|
-
createKebabCaseValidator,
|
|
5
|
-
isValidPort,
|
|
6
|
-
sanitizeForShell,
|
|
7
|
-
validateOptionalInfraService,
|
|
8
|
-
validateResourceName,
|
|
9
|
-
} from "../validation.js";
|
|
10
|
-
|
|
11
|
-
describe("validateResourceName", () => {
|
|
12
|
-
it("should validate correct kebab-case names", () => {
|
|
13
|
-
expect(validateResourceName("my-service")).toEqual({ valid: true });
|
|
14
|
-
expect(validateResourceName("service123")).toEqual({ valid: true });
|
|
15
|
-
expect(validateResourceName("api-gateway")).toEqual({ valid: true });
|
|
16
|
-
expect(validateResourceName("a")).toEqual({ valid: true });
|
|
17
|
-
expect(validateResourceName("test-123-abc")).toEqual({ valid: true });
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
it("should reject empty names", () => {
|
|
21
|
-
const result = validateResourceName("");
|
|
22
|
-
expect(result.valid).toBe(false);
|
|
23
|
-
expect(result.error).toContain("required");
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
it("should reject whitespace-only names", () => {
|
|
27
|
-
const result = validateResourceName(" ");
|
|
28
|
-
expect(result.valid).toBe(false);
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it("should reject camelCase", () => {
|
|
32
|
-
expect(validateResourceName("myService").valid).toBe(false);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it("should reject underscores", () => {
|
|
36
|
-
expect(validateResourceName("my_service").valid).toBe(false);
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
it("should reject uppercase letters", () => {
|
|
40
|
-
expect(validateResourceName("My-Service").valid).toBe(false);
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it("should reject spaces", () => {
|
|
44
|
-
expect(validateResourceName("my service").valid).toBe(false);
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
it("should reject dots", () => {
|
|
48
|
-
expect(validateResourceName("my.service").valid).toBe(false);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
describe("createKebabCaseValidator", () => {
|
|
53
|
-
it("should return true for valid resource names", () => {
|
|
54
|
-
const validator = createKebabCaseValidator("resource");
|
|
55
|
-
expect(validator("my-resource")).toBe(true);
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
it("should return error for empty resource name", () => {
|
|
59
|
-
const validator = createKebabCaseValidator("resource");
|
|
60
|
-
expect(validator("")).toBe("Resource name is required");
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
it("should return error for invalid resource name", () => {
|
|
64
|
-
const validator = createKebabCaseValidator("resource");
|
|
65
|
-
expect(validator("MyResource")).toBe("Use lowercase letters, numbers, and hyphens only");
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
it("should return error for empty stack name", () => {
|
|
69
|
-
const validator = createKebabCaseValidator("stack");
|
|
70
|
-
expect(validator("")).toBe("Stack name is required");
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
it("should return error for invalid stack name", () => {
|
|
74
|
-
const validator = createKebabCaseValidator("stack");
|
|
75
|
-
expect(validator("MyStack")).toBe("Use kebab-case (lowercase, numbers, hyphens only)");
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
describe("validateOptionalInfraService", () => {
|
|
80
|
-
it("should accept valid infra services", () => {
|
|
81
|
-
expect(validateOptionalInfraService("monitoring").valid).toBe(true);
|
|
82
|
-
expect(validateOptionalInfraService("elk").valid).toBe(true);
|
|
83
|
-
expect(validateOptionalInfraService("debezium").valid).toBe(true);
|
|
84
|
-
expect(validateOptionalInfraService("golden_image").valid).toBe(true);
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it("should reject invalid infra services", () => {
|
|
88
|
-
const result = validateOptionalInfraService("redis");
|
|
89
|
-
expect(result.valid).toBe(false);
|
|
90
|
-
expect(result.error).toContain("Invalid service");
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
it("should reject empty string", () => {
|
|
94
|
-
expect(validateOptionalInfraService("").valid).toBe(false);
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
describe("isValidPort", () => {
|
|
99
|
-
it("should accept valid ports", () => {
|
|
100
|
-
expect(isValidPort(1)).toBe(true);
|
|
101
|
-
expect(isValidPort(1024)).toBe(true);
|
|
102
|
-
expect(isValidPort(3000)).toBe(true);
|
|
103
|
-
expect(isValidPort(8080)).toBe(true);
|
|
104
|
-
expect(isValidPort(65535)).toBe(true);
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
it("should reject port 0", () => {
|
|
108
|
-
expect(isValidPort(0)).toBe(false);
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
it("should reject negative ports", () => {
|
|
112
|
-
expect(isValidPort(-1)).toBe(false);
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
it("should reject ports > 65535", () => {
|
|
116
|
-
expect(isValidPort(65536)).toBe(false);
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
it("should reject NaN", () => {
|
|
120
|
-
expect(isValidPort(NaN)).toBe(false);
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
it("should reject non-integer ports", () => {
|
|
124
|
-
expect(isValidPort(80.5)).toBe(false);
|
|
125
|
-
});
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
describe("sanitizeForShell", () => {
|
|
129
|
-
it("should replace special characters", () => {
|
|
130
|
-
expect(sanitizeForShell("hello$world")).toBe("hello_world");
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
it("should keep alphanumeric and hyphens", () => {
|
|
134
|
-
expect(sanitizeForShell("my-service-123")).toBe("my-service-123");
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
it("should limit output to 100 chars", () => {
|
|
138
|
-
const long = "a".repeat(200);
|
|
139
|
-
expect(sanitizeForShell(long).length).toBe(100);
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
describe("VALID_RESOURCE_TYPES", () => {
|
|
144
|
-
it("should include all expected types", () => {
|
|
145
|
-
const expected = ["backend", "frontend", "library", "sdk", "worker", "migrator"];
|
|
146
|
-
expect(VALID_RESOURCE_TYPES.sort()).toEqual(expected.sort());
|
|
147
|
-
});
|
|
148
|
-
});
|
package/cli/src/utils/cache.ts
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import type { CacheEntry, CacheOptions } from "../types/index.js";
|
|
2
|
-
|
|
3
|
-
export class Cache<T> {
|
|
4
|
-
private data: Map<string, CacheEntry<T>>;
|
|
5
|
-
private options: CacheOptions;
|
|
6
|
-
|
|
7
|
-
constructor(options: CacheOptions) {
|
|
8
|
-
this.data = new Map();
|
|
9
|
-
this.options = options;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
has(key: string): boolean {
|
|
13
|
-
const entry = this.data.get(key);
|
|
14
|
-
if (!entry) return false;
|
|
15
|
-
|
|
16
|
-
const isExpired = Date.now() - entry.timestamp > this.options.ttlMs;
|
|
17
|
-
if (isExpired) {
|
|
18
|
-
this.data.delete(key);
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return true;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
get(key: string): T | undefined {
|
|
26
|
-
if (!this.has(key)) {
|
|
27
|
-
return undefined;
|
|
28
|
-
}
|
|
29
|
-
return this.data.get(key)?.value;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
set(key: string, value: T): void {
|
|
33
|
-
this.data.set(key, {
|
|
34
|
-
value,
|
|
35
|
-
timestamp: Date.now(),
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
delete(key: string): void {
|
|
40
|
-
this.data.delete(key);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
clear(): void {
|
|
44
|
-
this.data.clear();
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
keys(): string[] {
|
|
48
|
-
const validKeys: string[] = [];
|
|
49
|
-
for (const key of this.data.keys()) {
|
|
50
|
-
if (this.has(key)) {
|
|
51
|
-
validKeys.push(key);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return validKeys;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
size(): number {
|
|
58
|
-
return this.keys().length;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export function createCacheValidator(ttlMs: number) {
|
|
63
|
-
let lastUpdated = 0;
|
|
64
|
-
|
|
65
|
-
return {
|
|
66
|
-
isValid(): boolean {
|
|
67
|
-
return Date.now() - lastUpdated < ttlMs;
|
|
68
|
-
},
|
|
69
|
-
markUpdated(): void {
|
|
70
|
-
lastUpdated = Date.now();
|
|
71
|
-
},
|
|
72
|
-
reset(): void {
|
|
73
|
-
lastUpdated = 0;
|
|
74
|
-
},
|
|
75
|
-
};
|
|
76
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import type { ValidationResult } from "../types/index.js";
|
|
2
|
-
import { showErrorAndExit } from "./errors.js";
|
|
3
|
-
import { showCancelled } from "./formatting.js";
|
|
4
|
-
import { promptConfirm } from "./prompt.js";
|
|
5
|
-
|
|
6
|
-
export async function confirmAction(message: string, defaultValue = true): Promise<boolean> {
|
|
7
|
-
const confirm = await promptConfirm({ message, initial: defaultValue });
|
|
8
|
-
|
|
9
|
-
if (!confirm) {
|
|
10
|
-
showCancelled();
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
return confirm;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function assertValid(
|
|
17
|
-
validation: ValidationResult,
|
|
18
|
-
exitCode: number = 1,
|
|
19
|
-
): asserts validation is { valid: true } {
|
|
20
|
-
if (!validation.valid) {
|
|
21
|
-
showErrorAndExit(validation.error ?? "Validation failed", exitCode);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export function handleDryRun(
|
|
26
|
-
options: { dryRun?: boolean },
|
|
27
|
-
description: string,
|
|
28
|
-
command: string,
|
|
29
|
-
): boolean {
|
|
30
|
-
if (options.dryRun) {
|
|
31
|
-
console.log(`Dry run - ${description}`);
|
|
32
|
-
console.log(`Would run: ${command}`);
|
|
33
|
-
return true;
|
|
34
|
-
}
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Prompt for confirmation with cancellation handling.
|
|
40
|
-
* Displays a confirmation prompt and exits/cancels if user declines.
|
|
41
|
-
* @param message - The confirmation message to display
|
|
42
|
-
* @param onCancel - Optional callback when user cancels (defaults to returning false)
|
|
43
|
-
* @returns Promise<boolean> - true if confirmed, false if cancelled (with callback)
|
|
44
|
-
*/
|
|
45
|
-
export async function confirmOrCancel(message: string, onCancel?: () => void): Promise<boolean> {
|
|
46
|
-
const confirmed = await confirmAction(message, true);
|
|
47
|
-
if (!confirmed) {
|
|
48
|
-
if (onCancel) {
|
|
49
|
-
onCancel();
|
|
50
|
-
}
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
return true;
|
|
54
|
-
}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import type { ResourceType } from "../types/index.js";
|
|
2
|
-
|
|
3
|
-
export const MASTER_CONFIG_FILES = [
|
|
4
|
-
"TILT_TECH_STACK.star",
|
|
5
|
-
"TILT_RESOURCE_DEFAULTS.star",
|
|
6
|
-
"spec.master",
|
|
7
|
-
] as const;
|
|
8
|
-
|
|
9
|
-
export const VALID_RESOURCE_TYPES: ResourceType[] = [
|
|
10
|
-
"backend",
|
|
11
|
-
"frontend",
|
|
12
|
-
"library",
|
|
13
|
-
"sdk",
|
|
14
|
-
"worker",
|
|
15
|
-
"migrator",
|
|
16
|
-
] as const;
|
|
17
|
-
|
|
18
|
-
// Frontend/library/sdk services are served statically or consumed as
|
|
19
|
-
// packages, so they never need a "start" script - only backend/worker/
|
|
20
|
-
// migrator processes are run in production via `<runtime> run start`.
|
|
21
|
-
export const REQUIRED_PACKAGE_SCRIPTS: Record<ResourceType, readonly string[]> = {
|
|
22
|
-
backend: ["dev", "build", "start"],
|
|
23
|
-
worker: ["dev", "build", "start"],
|
|
24
|
-
migrator: ["dev", "build", "start"],
|
|
25
|
-
frontend: ["dev", "build"],
|
|
26
|
-
library: ["dev", "build"],
|
|
27
|
-
sdk: ["dev", "build"],
|
|
28
|
-
} as const;
|
|
29
|
-
|
|
30
|
-
// Version specifiers that pin nothing at all - a fresh `bun install`/`npm install`
|
|
31
|
-
// can pull a different (possibly breaking) version on every run.
|
|
32
|
-
export const UNPINNED_DEPENDENCY_VERSIONS = new Set(["latest", "*"]);
|
|
33
|
-
|
|
34
|
-
export const OPTIONAL_INFRA_SERVICES = [
|
|
35
|
-
"monitoring",
|
|
36
|
-
"elk",
|
|
37
|
-
"debezium",
|
|
38
|
-
"golden_image",
|
|
39
|
-
"verdaccio",
|
|
40
|
-
] as const;
|
|
41
|
-
|
|
42
|
-
export const PORT_RANGES = {
|
|
43
|
-
frontend: { base: 3000, min: 3000, max: 3999, range: "3000-3999" as const },
|
|
44
|
-
backend: { base: 4000, min: 4000, max: 4999, range: "4000-4999" as const },
|
|
45
|
-
worker: { base: 6000, min: 6000, max: 6999, range: "6000-6999" as const },
|
|
46
|
-
health: { base: 5000, min: 5000, max: 5999, range: "5000-5999" as const },
|
|
47
|
-
migrator: { base: 7000, min: 7000, max: 7999, range: "7000-7999" as const },
|
|
48
|
-
} as const;
|
|
49
|
-
|
|
50
|
-
export const STANDARD_PORTS = {
|
|
51
|
-
tiltUi: 10350,
|
|
52
|
-
traefik: 8080,
|
|
53
|
-
} as const;
|
|
54
|
-
|
|
55
|
-
export const QUICKSTART_DOCS_URL = "https://tdk-landscape.github.io/tdk-website/docs/quickstart/";
|
|
56
|
-
|
|
57
|
-
export const BASE_DOMAIN_DEFAULT = "tdk-project.localhost";
|
|
58
|
-
export const APP_SUBDOMAIN_PREFIX = "app";
|
|
59
|
-
export const API_SUBDOMAIN_PREFIX = "api";
|
|
60
|
-
|
|
61
|
-
export function getBaseDomain(): string {
|
|
62
|
-
const override = process.env.TDK_SERVICE_BASE_URL ?? process.env.TDK_PUBLIC_HOST;
|
|
63
|
-
if (override) {
|
|
64
|
-
try {
|
|
65
|
-
const u = new URL(override.includes("://") ? override : `http://${override}`);
|
|
66
|
-
return u.hostname;
|
|
67
|
-
} catch {
|
|
68
|
-
return override.replace(/^https?:\/\//, "").split("/")[0];
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return BASE_DOMAIN_DEFAULT;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export function frontendBaseUrl(protocol = "http"): string {
|
|
75
|
-
return `${protocol}://${APP_SUBDOMAIN_PREFIX}.${getBaseDomain()}`;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
export function apiBaseUrl(protocol = "http"): string {
|
|
79
|
-
return `${protocol}://${API_SUBDOMAIN_PREFIX}.${getBaseDomain()}`;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export const SKIP_DIRECTORIES = [
|
|
83
|
-
"node_modules",
|
|
84
|
-
".git",
|
|
85
|
-
".tilt",
|
|
86
|
-
".tilt-engine",
|
|
87
|
-
"dist",
|
|
88
|
-
"build",
|
|
89
|
-
".prisma",
|
|
90
|
-
".turbo",
|
|
91
|
-
"coverage",
|
|
92
|
-
"tmp",
|
|
93
|
-
"temp",
|
|
94
|
-
"__tests__",
|
|
95
|
-
"test",
|
|
96
|
-
"tests",
|
|
97
|
-
".github",
|
|
98
|
-
".vscode",
|
|
99
|
-
"docs",
|
|
100
|
-
] as const;
|
|
101
|
-
|
|
102
|
-
export const AUTOGENERATED_FILE_PATTERNS = [
|
|
103
|
-
"Dockerfile",
|
|
104
|
-
"docker-compose.yml",
|
|
105
|
-
"docker-compose.yaml",
|
|
106
|
-
"Tiltfile",
|
|
107
|
-
"vite.config.ts",
|
|
108
|
-
"tsconfig.json",
|
|
109
|
-
"tsconfig.build.json",
|
|
110
|
-
] as const;
|
|
111
|
-
|
|
112
|
-
// Stack emojis - generic, no hardcoded service names
|
|
113
|
-
// Users can add their own stack emojis via project config
|
|
114
|
-
const STACK_EMOJIS: Record<string, string> = {
|
|
115
|
-
infra: "🏗️",
|
|
116
|
-
core: "🔧",
|
|
117
|
-
api: "⚡",
|
|
118
|
-
app: "🎨",
|
|
119
|
-
orchestrator: "⚙️",
|
|
120
|
-
} as const;
|
|
121
|
-
|
|
122
|
-
export function getStackEmoji(stackName: string): string {
|
|
123
|
-
const lowerName = stackName.toLowerCase();
|
|
124
|
-
for (const [key, emoji] of Object.entries(STACK_EMOJIS)) {
|
|
125
|
-
if (lowerName.includes(key)) {
|
|
126
|
-
return emoji;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
return "📦";
|
|
130
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import type { DiscoveredResource, DiscoveryContext } from "../types/index.js";
|
|
2
|
-
import { createCacheValidator } from "./cache.js";
|
|
3
|
-
import { discoverResources, discoverStacks, getAllStacks } from "./services.js";
|
|
4
|
-
|
|
5
|
-
let cachedContext: DiscoveryContext | null = null;
|
|
6
|
-
const cacheValidator = createCacheValidator(1000);
|
|
7
|
-
|
|
8
|
-
export function clearDiscoveryCache(): void {
|
|
9
|
-
cachedContext = null;
|
|
10
|
-
cacheValidator.reset();
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
function isCacheValid(): boolean {
|
|
14
|
-
return cachedContext !== null && cacheValidator.isValid();
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function createDiscoveryContext(forceRefresh = false): DiscoveryContext {
|
|
18
|
-
if (!forceRefresh && isCacheValid() && cachedContext) {
|
|
19
|
-
return cachedContext;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const resources = discoverResources();
|
|
23
|
-
const stacks = discoverStacks();
|
|
24
|
-
const stackNames = getAllStacks(resources);
|
|
25
|
-
|
|
26
|
-
const unassignedResources = resources.filter((r) => !r.stack);
|
|
27
|
-
|
|
28
|
-
const resourcesByStack = new Map<string, DiscoveredResource[]>();
|
|
29
|
-
for (const resource of resources) {
|
|
30
|
-
if (resource.stack) {
|
|
31
|
-
const stackResources = resourcesByStack.get(resource.stack) || [];
|
|
32
|
-
stackResources.push(resource);
|
|
33
|
-
resourcesByStack.set(resource.stack, stackResources);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const context: DiscoveryContext = {
|
|
38
|
-
resources,
|
|
39
|
-
stacks,
|
|
40
|
-
stackNames,
|
|
41
|
-
unassignedResources,
|
|
42
|
-
resourcesByStack,
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
cachedContext = context;
|
|
46
|
-
cacheValidator.markUpdated();
|
|
47
|
-
|
|
48
|
-
return context;
|
|
49
|
-
}
|
package/cli/src/utils/docker.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { execSync } from "node:child_process";
|
|
2
|
-
|
|
3
|
-
// A wedged daemon makes `docker ps` block forever instead of failing.
|
|
4
|
-
const RUNTIME_CHECK_TIMEOUT_MS = 10_000;
|
|
5
|
-
|
|
6
|
-
export type ContainerRuntimeStatus = "running" | "unresponsive" | "missing";
|
|
7
|
-
|
|
8
|
-
/** Whether Docker, Colima, or Podman is reachable, hung, or absent. */
|
|
9
|
-
export function getContainerRuntimeStatus(): ContainerRuntimeStatus {
|
|
10
|
-
let sawTimeout = false;
|
|
11
|
-
for (const command of ["docker ps", "colima status", "podman ps"]) {
|
|
12
|
-
try {
|
|
13
|
-
execSync(command, { stdio: "ignore", timeout: RUNTIME_CHECK_TIMEOUT_MS });
|
|
14
|
-
return "running";
|
|
15
|
-
} catch (err) {
|
|
16
|
-
if ((err as NodeJS.ErrnoException).code === "ETIMEDOUT") sawTimeout = true;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
return sawTimeout ? "unresponsive" : "missing";
|
|
20
|
-
}
|