@tdk-landscape/tdk-cli-core 1.3.45 → 1.3.49

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.
Files changed (431) hide show
  1. package/.github/workflows/release-binaries.yml +54 -0
  2. package/.pre-commit-config.yaml +57 -0
  3. package/Makefile +92 -0
  4. package/bun.lock +538 -0
  5. package/cli/AGENTS.md +390 -0
  6. package/cli/DESIGN.md +735 -0
  7. package/cli/biome.json +44 -0
  8. package/cli/dependency-graph.svg +1135 -0
  9. package/cli/knip.json +6 -0
  10. package/cli/package.json +77 -0
  11. package/cli/pnpm-lock.yaml +2305 -0
  12. package/cli/pnpm-workspace.yaml +2 -0
  13. package/cli/shared-platform-engineering/docker-templates/bun-hoisted-symlink-fix.sh +23 -0
  14. package/cli/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +464 -0
  15. package/cli/shared-platform-engineering/docker-templates/install-deps.sh +152 -0
  16. package/cli/shared-platform-engineering/docker-templates/prisma-bun-client-link-fix.sh +12 -0
  17. package/cli/shared-platform-engineering/docker-templates/prisma-normalize-client.sh +56 -0
  18. package/{dist/cli.js → cli/src/cli.ts} +21 -13
  19. package/cli/src/commands/__tests__/always-enabled-infra.test.ts +115 -0
  20. package/cli/src/commands/__tests__/config.test.ts +146 -0
  21. package/cli/src/commands/__tests__/doctor.test.ts +557 -0
  22. package/cli/src/commands/__tests__/error-handling.test.ts +78 -0
  23. package/cli/src/commands/__tests__/phases-model.test.ts +163 -0
  24. package/cli/src/commands/__tests__/project-resource-features-e2e.test.ts +207 -0
  25. package/cli/src/commands/__tests__/project.test.ts +68 -0
  26. package/cli/src/commands/__tests__/resource.test.ts +226 -0
  27. package/cli/src/commands/__tests__/saas-starter-integration.test.ts +196 -0
  28. package/cli/src/commands/__tests__/stack-features-e2e.test.ts +129 -0
  29. package/cli/src/commands/__tests__/upgrade.test.ts +101 -0
  30. package/{dist/commands/completion.js → cli/src/commands/completion.ts} +78 -72
  31. package/cli/src/commands/config.ts +299 -0
  32. package/cli/src/commands/doctor.ts +790 -0
  33. package/cli/src/commands/down.ts +37 -0
  34. package/cli/src/commands/help.ts +150 -0
  35. package/cli/src/commands/networks-design.md +80 -0
  36. package/cli/src/commands/networks.ts +332 -0
  37. package/cli/src/commands/project.ts +439 -0
  38. package/cli/src/commands/projects.ts +82 -0
  39. package/cli/src/commands/resource.ts +652 -0
  40. package/cli/src/commands/resources.ts +95 -0
  41. package/cli/src/commands/stack.ts +128 -0
  42. package/cli/src/commands/stacks.ts +52 -0
  43. package/cli/src/commands/status.ts +88 -0
  44. package/cli/src/commands/ui.tsx +843 -0
  45. package/cli/src/commands/up.ts +150 -0
  46. package/cli/src/commands/upgrade.ts +570 -0
  47. package/{dist/commands/version.js → cli/src/commands/version.ts} +5 -5
  48. package/cli/src/components/Accessible.tsx +21 -0
  49. package/cli/src/components/BaseTooltip.tsx +66 -0
  50. package/cli/src/components/DetailPanel.tsx +146 -0
  51. package/cli/src/components/FileTree.tsx +89 -0
  52. package/cli/src/components/ResourceSelectInput.tsx +30 -0
  53. package/cli/src/components/ResourceTable.tsx +78 -0
  54. package/cli/src/components/TabBar.tsx +53 -0
  55. package/cli/src/components/Tooltip.tsx +11 -0
  56. package/{dist/components/index.js → cli/src/components/index.ts} +0 -1
  57. package/cli/src/config/platform-standards.test.ts +11 -0
  58. package/cli/src/config/platform-standards.ts +196 -0
  59. package/cli/src/generator/__tests__/extension-fetch.test.ts +220 -0
  60. package/cli/src/generator/__tests__/template-engine.test.ts +70 -0
  61. package/cli/src/generator/extension-fetch.ts +279 -0
  62. package/cli/src/generator/template-engine.ts +754 -0
  63. package/cli/src/index.ts +86 -0
  64. package/cli/src/templates.d.ts +4 -0
  65. package/cli/src/types/index.ts +351 -0
  66. package/cli/src/utils/__tests__/cache.test.ts +98 -0
  67. package/cli/src/utils/__tests__/formatting.test.ts +170 -0
  68. package/cli/src/utils/__tests__/paths.test.ts +180 -0
  69. package/cli/src/utils/__tests__/port-assignment.test.ts +121 -0
  70. package/cli/src/utils/__tests__/service-urls.test.ts +174 -0
  71. package/cli/src/utils/__tests__/services.test.ts +531 -0
  72. package/cli/src/utils/__tests__/tilt.test.ts +143 -0
  73. package/cli/src/utils/__tests__/validation.test.ts +148 -0
  74. package/cli/src/utils/cache.ts +76 -0
  75. package/cli/src/utils/command-helpers.ts +54 -0
  76. package/cli/src/utils/constants.ts +126 -0
  77. package/cli/src/utils/discovery-context.ts +49 -0
  78. package/cli/src/utils/docker.ts +20 -0
  79. package/cli/src/utils/doctor-runtime.ts +604 -0
  80. package/cli/src/utils/env-validator.ts +139 -0
  81. package/cli/src/utils/errors.ts +168 -0
  82. package/cli/src/utils/file-helpers.ts +62 -0
  83. package/cli/src/utils/formatting.ts +215 -0
  84. package/cli/src/utils/paths.ts +53 -0
  85. package/cli/src/utils/port-assignment.ts +106 -0
  86. package/cli/src/utils/project-features.ts +118 -0
  87. package/cli/src/utils/project-templates.ts +28 -0
  88. package/cli/src/utils/prompt.ts +123 -0
  89. package/cli/src/utils/resource-features.ts +209 -0
  90. package/cli/src/utils/service-urls.ts +124 -0
  91. package/cli/src/utils/services.ts +363 -0
  92. package/cli/src/utils/stack-features.ts +30 -0
  93. package/cli/src/utils/tar.ts +24 -0
  94. package/cli/src/utils/tilt.ts +113 -0
  95. package/cli/src/utils/validation.ts +67 -0
  96. package/{templates → cli/templates}/Tiltfile.hbs +1 -1
  97. package/cli/tsconfig.json +25 -0
  98. package/cli/tsconfig.typecheck.json +8 -0
  99. package/docs/FEATURES.md +279 -0
  100. package/engine/topologies/platform/docker/dockerfile/dockerfile.star +3 -3
  101. package/engine/topologies/platform/docker/generators/golden_docker_generator_v2.star +1 -1
  102. package/engine/topologies/platform/docker/layers/l2_dependency_layers.star +0 -3
  103. package/engine/topologies/platform/docker/layers/l3_builder_layers.star +1 -1
  104. package/engine/topologies/platform/docker/layers/l4_runtime_layers.star +1 -1
  105. package/engine/topologies/platform/docker/secrets/infisical.star +19 -47
  106. package/engine/topologies/tilt/resources/orchestrator/apply_migrator_orchestration.star +1 -1
  107. package/install.sh +242 -0
  108. package/knip.json +10 -0
  109. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/.openspec.yaml +2 -0
  110. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/design.md +102 -0
  111. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/proposal.md +31 -0
  112. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-notifications/spec.md +48 -0
  113. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-orchestration/spec.md +63 -0
  114. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-troubleshooting/spec.md +56 -0
  115. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/tasks.md +61 -0
  116. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/.openspec.yaml +2 -0
  117. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/design.md +114 -0
  118. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/proposal.md +32 -0
  119. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/manifest-field-migration/spec.md +20 -0
  120. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/resource-terminology-standard/spec.md +20 -0
  121. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/stack-terminology-standard/spec.md +20 -0
  122. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/tasks.md +194 -0
  123. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/.openspec.yaml +2 -0
  124. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/design.md +111 -0
  125. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/proposal.md +33 -0
  126. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/function-naming-alignment/spec.md +12 -0
  127. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/optional-parameter-patterns/spec.md +18 -0
  128. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-documentation/spec.md +16 -0
  129. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-naming-consistency/spec.md +12 -0
  130. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-ordering-standard/spec.md +12 -0
  131. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/tasks.md +194 -0
  132. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/.openspec.yaml +2 -0
  133. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/codebase-audit-report.md +62 -0
  134. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/design.md +84 -0
  135. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/proposal.md +31 -0
  136. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/codebase-audit/spec.md +27 -0
  137. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/dead-code-cleanup/spec.md +27 -0
  138. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/test-gap-fill/spec.md +23 -0
  139. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/todo-resolution/spec.md +27 -0
  140. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/tasks.md +39 -0
  141. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/.openspec.yaml +5 -0
  142. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/design.md +94 -0
  143. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/proposal.md +46 -0
  144. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/ai-slop-cleanup/CLEANUP_REPORT_8.md +174 -0
  145. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/ai-slop-cleanup/CRITICAL_ASSESSMENT_8.md +160 -0
  146. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/circular-deps/CRITICAL_ASSESSMENT_4.md +381 -0
  147. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/dead-code/CRITICAL_ASSESSMENT_3.md +316 -0
  148. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/deduplication/CRITICAL_ASSESSMENT_1.md +290 -0
  149. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/deduplication/IMPLEMENTATION_SUMMARY_1.md +233 -0
  150. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/defensive-cleanup/CRITICAL_ASSESSMENT_6.md +835 -0
  151. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/legacy-cleanup/CRITICAL_ASSESSMENT_7.md +254 -0
  152. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/legacy-cleanup/IMPLEMENTATION_SUMMARY_7.md +187 -0
  153. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/strong-typing/CRITICAL_ASSESSMENT_5.md +269 -0
  154. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/type-consolidation/CRITICAL_ASSESSMENT_2.md +312 -0
  155. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/type-consolidation/IMPLEMENTATION_SUMMARY.md +170 -0
  156. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/tasks.md +137 -0
  157. package/openspec/changes/archive/2026-06-25-landscape-consolidation/.openspec.yaml +2 -0
  158. package/openspec/changes/archive/2026-06-25-landscape-consolidation/design.md +80 -0
  159. package/openspec/changes/archive/2026-06-25-landscape-consolidation/proposal.md +40 -0
  160. package/openspec/changes/archive/2026-06-25-landscape-consolidation/spec.md +52 -0
  161. package/openspec/changes/archive/2026-06-25-landscape-consolidation/tasks.md +51 -0
  162. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/.openspec.yaml +2 -0
  163. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/design.md +43 -0
  164. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/proposal.md +29 -0
  165. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/specs/self-contained-generated-projects/spec.md +67 -0
  166. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/tasks.md +27 -0
  167. package/openspec/specs/manifest-field-migration/spec.md +24 -0
  168. package/openspec/specs/resource-terminology-standard/spec.md +24 -0
  169. package/openspec/specs/self-contained-generated-projects/spec.md +67 -0
  170. package/openspec/specs/stack-terminology-standard/spec.md +24 -0
  171. package/package.json +27 -64
  172. package/platform/services/platform/proxy/service.yaml +14 -0
  173. package/scripts/audit-codebase.sh +213 -0
  174. package/scripts/install-git-hooks.sh +14 -0
  175. package/scripts/release-binaries.sh +94 -0
  176. package/scripts/setup-pre-commit.sh +33 -0
  177. package/scripts/stage-npm-engine.sh +36 -0
  178. package/shared-platform-engineering/docker-templates/bun-hoisted-symlink-fix.sh +23 -0
  179. package/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +464 -0
  180. package/shared-platform-engineering/docker-templates/install-deps.sh +152 -0
  181. package/shared-platform-engineering/docker-templates/prisma-bun-client-link-fix.sh +12 -0
  182. package/shared-platform-engineering/docker-templates/prisma-normalize-client.sh +56 -0
  183. package/tests/tilt-engine/__init__.py +5 -0
  184. package/tests/tilt-engine/conftest.py +182 -0
  185. package/tests/tilt-engine/fixtures/appointment-frontend-service.json +11 -0
  186. package/tests/tilt-engine/fixtures/identity-backend-service.json +12 -0
  187. package/tests/tilt-engine/fixtures/invalid-service.json +4 -0
  188. package/tests/tilt-engine/test_agents_md_generator.py +341 -0
  189. package/tests/tilt-engine/test_agents_md_integration.py +378 -0
  190. package/tests/tilt-engine/test_cache_operations.py +181 -0
  191. package/tests/tilt-engine/test_cache_persistence.py +142 -0
  192. package/tests/tilt-engine/test_code_executor.py +152 -0
  193. package/tests/tilt-engine/test_code_viewer.py +127 -0
  194. package/tests/tilt-engine/test_compose_port_anchors.py +310 -0
  195. package/tests/tilt-engine/test_config_inspector.py +162 -0
  196. package/tests/tilt-engine/test_daemon_focus_mode.py +89 -0
  197. package/tests/tilt-engine/test_daemon_polling.py +122 -0
  198. package/tests/tilt-engine/test_daemon_registration.py +115 -0
  199. package/tests/tilt-engine/test_daemon_validation.py +107 -0
  200. package/tests/tilt-engine/test_docker_generator_bugs.py +493 -0
  201. package/tests/tilt-engine/test_docker_prune.py +119 -0
  202. package/tests/tilt-engine/test_dockerignore_path_bug.py +82 -0
  203. package/tests/tilt-engine/test_file_browser.py +193 -0
  204. package/tests/tilt-engine/test_frontend_basepath_manifest.py +27 -0
  205. package/tests/tilt-engine/test_health_dependencies.py +130 -0
  206. package/tests/tilt-engine/test_health_endpoints.py +118 -0
  207. package/tests/tilt-engine/test_health_tilt_ui.py +85 -0
  208. package/tests/tilt-engine/test_safety_aliases.py +84 -0
  209. package/tests/tilt-engine/test_snapshot_diff.py +136 -0
  210. package/tests/tilt-engine/test_snapshot_persistence.py +163 -0
  211. package/tests/tilt-engine/test_snapshot_scanning.py +123 -0
  212. package/tests/tilt-engine/test_standalone_project_boot.py +61 -0
  213. package/tests/tilt-engine/test_standalone_traefik.py +108 -0
  214. package/dist/cli.d.ts +0 -3
  215. package/dist/cli.d.ts.map +0 -1
  216. package/dist/cli.js.map +0 -1
  217. package/dist/commands/completion.d.ts +0 -3
  218. package/dist/commands/completion.d.ts.map +0 -1
  219. package/dist/commands/completion.js.map +0 -1
  220. package/dist/commands/config.d.ts +0 -3
  221. package/dist/commands/config.d.ts.map +0 -1
  222. package/dist/commands/config.js +0 -231
  223. package/dist/commands/config.js.map +0 -1
  224. package/dist/commands/doctor.d.ts +0 -7
  225. package/dist/commands/doctor.d.ts.map +0 -1
  226. package/dist/commands/doctor.js +0 -597
  227. package/dist/commands/doctor.js.map +0 -1
  228. package/dist/commands/down.d.ts +0 -3
  229. package/dist/commands/down.d.ts.map +0 -1
  230. package/dist/commands/down.js +0 -32
  231. package/dist/commands/down.js.map +0 -1
  232. package/dist/commands/help.d.ts +0 -2
  233. package/dist/commands/help.d.ts.map +0 -1
  234. package/dist/commands/help.js +0 -130
  235. package/dist/commands/help.js.map +0 -1
  236. package/dist/commands/networks.d.ts +0 -3
  237. package/dist/commands/networks.d.ts.map +0 -1
  238. package/dist/commands/networks.js +0 -260
  239. package/dist/commands/networks.js.map +0 -1
  240. package/dist/commands/project.d.ts +0 -3
  241. package/dist/commands/project.d.ts.map +0 -1
  242. package/dist/commands/project.js +0 -373
  243. package/dist/commands/project.js.map +0 -1
  244. package/dist/commands/projects.d.ts +0 -3
  245. package/dist/commands/projects.d.ts.map +0 -1
  246. package/dist/commands/projects.js +0 -71
  247. package/dist/commands/projects.js.map +0 -1
  248. package/dist/commands/resource.d.ts +0 -69
  249. package/dist/commands/resource.d.ts.map +0 -1
  250. package/dist/commands/resource.js +0 -579
  251. package/dist/commands/resource.js.map +0 -1
  252. package/dist/commands/resources.d.ts +0 -3
  253. package/dist/commands/resources.d.ts.map +0 -1
  254. package/dist/commands/resources.js +0 -73
  255. package/dist/commands/resources.js.map +0 -1
  256. package/dist/commands/stack.d.ts +0 -3
  257. package/dist/commands/stack.d.ts.map +0 -1
  258. package/dist/commands/stack.js +0 -97
  259. package/dist/commands/stack.js.map +0 -1
  260. package/dist/commands/stacks.d.ts +0 -3
  261. package/dist/commands/stacks.d.ts.map +0 -1
  262. package/dist/commands/stacks.js +0 -43
  263. package/dist/commands/stacks.js.map +0 -1
  264. package/dist/commands/status.d.ts +0 -3
  265. package/dist/commands/status.d.ts.map +0 -1
  266. package/dist/commands/status.js +0 -71
  267. package/dist/commands/status.js.map +0 -1
  268. package/dist/commands/ui.d.ts +0 -3
  269. package/dist/commands/ui.d.ts.map +0 -1
  270. package/dist/commands/ui.js +0 -445
  271. package/dist/commands/ui.js.map +0 -1
  272. package/dist/commands/up.d.ts +0 -3
  273. package/dist/commands/up.d.ts.map +0 -1
  274. package/dist/commands/up.js +0 -110
  275. package/dist/commands/up.js.map +0 -1
  276. package/dist/commands/upgrade.d.ts +0 -11
  277. package/dist/commands/upgrade.d.ts.map +0 -1
  278. package/dist/commands/upgrade.js +0 -496
  279. package/dist/commands/upgrade.js.map +0 -1
  280. package/dist/commands/version.d.ts +0 -3
  281. package/dist/commands/version.d.ts.map +0 -1
  282. package/dist/commands/version.js.map +0 -1
  283. package/dist/components/Accessible.d.ts +0 -8
  284. package/dist/components/Accessible.d.ts.map +0 -1
  285. package/dist/components/Accessible.js +0 -10
  286. package/dist/components/Accessible.js.map +0 -1
  287. package/dist/components/BaseTooltip.d.ts +0 -4
  288. package/dist/components/BaseTooltip.d.ts.map +0 -1
  289. package/dist/components/BaseTooltip.js +0 -28
  290. package/dist/components/BaseTooltip.js.map +0 -1
  291. package/dist/components/DetailPanel.d.ts +0 -4
  292. package/dist/components/DetailPanel.d.ts.map +0 -1
  293. package/dist/components/DetailPanel.js +0 -18
  294. package/dist/components/DetailPanel.js.map +0 -1
  295. package/dist/components/FileTree.d.ts +0 -4
  296. package/dist/components/FileTree.d.ts.map +0 -1
  297. package/dist/components/FileTree.js +0 -47
  298. package/dist/components/FileTree.js.map +0 -1
  299. package/dist/components/ResourceSelectInput.d.ts +0 -4
  300. package/dist/components/ResourceSelectInput.d.ts.map +0 -1
  301. package/dist/components/ResourceSelectInput.js +0 -7
  302. package/dist/components/ResourceSelectInput.js.map +0 -1
  303. package/dist/components/ResourceTable.d.ts +0 -4
  304. package/dist/components/ResourceTable.d.ts.map +0 -1
  305. package/dist/components/ResourceTable.js +0 -18
  306. package/dist/components/ResourceTable.js.map +0 -1
  307. package/dist/components/TabBar.d.ts +0 -4
  308. package/dist/components/TabBar.d.ts.map +0 -1
  309. package/dist/components/TabBar.js +0 -17
  310. package/dist/components/TabBar.js.map +0 -1
  311. package/dist/components/Tooltip.d.ts +0 -12
  312. package/dist/components/Tooltip.d.ts.map +0 -1
  313. package/dist/components/Tooltip.js +0 -12
  314. package/dist/components/Tooltip.js.map +0 -1
  315. package/dist/components/index.d.ts +0 -8
  316. package/dist/components/index.d.ts.map +0 -1
  317. package/dist/components/index.js.map +0 -1
  318. package/dist/config/platform-standards.d.ts +0 -159
  319. package/dist/config/platform-standards.d.ts.map +0 -1
  320. package/dist/config/platform-standards.js +0 -181
  321. package/dist/config/platform-standards.js.map +0 -1
  322. package/dist/generator/extension-fetch.d.ts +0 -25
  323. package/dist/generator/extension-fetch.d.ts.map +0 -1
  324. package/dist/generator/extension-fetch.js +0 -252
  325. package/dist/generator/extension-fetch.js.map +0 -1
  326. package/dist/generator/template-engine.d.ts +0 -61
  327. package/dist/generator/template-engine.d.ts.map +0 -1
  328. package/dist/generator/template-engine.js +0 -557
  329. package/dist/generator/template-engine.js.map +0 -1
  330. package/dist/index.d.ts +0 -11
  331. package/dist/index.d.ts.map +0 -1
  332. package/dist/index.js +0 -11
  333. package/dist/index.js.map +0 -1
  334. package/dist/types/index.d.ts +0 -255
  335. package/dist/types/index.d.ts.map +0 -1
  336. package/dist/types/index.js +0 -17
  337. package/dist/types/index.js.map +0 -1
  338. package/dist/utils/cache.d.ts +0 -19
  339. package/dist/utils/cache.d.ts.map +0 -1
  340. package/dist/utils/cache.js +0 -64
  341. package/dist/utils/cache.js.map +0 -1
  342. package/dist/utils/command-helpers.d.ts +0 -17
  343. package/dist/utils/command-helpers.d.ts.map +0 -1
  344. package/dist/utils/command-helpers.js +0 -41
  345. package/dist/utils/command-helpers.js.map +0 -1
  346. package/dist/utils/constants.d.ts +0 -52
  347. package/dist/utils/constants.d.ts.map +0 -1
  348. package/dist/utils/constants.js +0 -112
  349. package/dist/utils/constants.js.map +0 -1
  350. package/dist/utils/discovery-context.d.ts +0 -4
  351. package/dist/utils/discovery-context.d.ts.map +0 -1
  352. package/dist/utils/discovery-context.js +0 -39
  353. package/dist/utils/discovery-context.js.map +0 -1
  354. package/dist/utils/docker.d.ts +0 -4
  355. package/dist/utils/docker.d.ts.map +0 -1
  356. package/dist/utils/docker.js +0 -19
  357. package/dist/utils/docker.js.map +0 -1
  358. package/dist/utils/doctor-runtime.d.ts +0 -66
  359. package/dist/utils/doctor-runtime.d.ts.map +0 -1
  360. package/dist/utils/doctor-runtime.js +0 -469
  361. package/dist/utils/doctor-runtime.js.map +0 -1
  362. package/dist/utils/env-validator.d.ts +0 -15
  363. package/dist/utils/env-validator.d.ts.map +0 -1
  364. package/dist/utils/env-validator.js +0 -109
  365. package/dist/utils/env-validator.js.map +0 -1
  366. package/dist/utils/errors.d.ts +0 -31
  367. package/dist/utils/errors.d.ts.map +0 -1
  368. package/dist/utils/errors.js +0 -140
  369. package/dist/utils/errors.js.map +0 -1
  370. package/dist/utils/file-helpers.d.ts +0 -14
  371. package/dist/utils/file-helpers.d.ts.map +0 -1
  372. package/dist/utils/file-helpers.js +0 -45
  373. package/dist/utils/file-helpers.js.map +0 -1
  374. package/dist/utils/formatting.d.ts +0 -30
  375. package/dist/utils/formatting.d.ts.map +0 -1
  376. package/dist/utils/formatting.js +0 -164
  377. package/dist/utils/formatting.js.map +0 -1
  378. package/dist/utils/paths.d.ts +0 -3
  379. package/dist/utils/paths.d.ts.map +0 -1
  380. package/dist/utils/paths.js +0 -41
  381. package/dist/utils/paths.js.map +0 -1
  382. package/dist/utils/port-assignment.d.ts +0 -6
  383. package/dist/utils/port-assignment.d.ts.map +0 -1
  384. package/dist/utils/port-assignment.js +0 -81
  385. package/dist/utils/port-assignment.js.map +0 -1
  386. package/dist/utils/project-features.d.ts +0 -23
  387. package/dist/utils/project-features.d.ts.map +0 -1
  388. package/dist/utils/project-features.js +0 -98
  389. package/dist/utils/project-features.js.map +0 -1
  390. package/dist/utils/project-templates.d.ts +0 -7
  391. package/dist/utils/project-templates.d.ts.map +0 -1
  392. package/dist/utils/project-templates.js +0 -24
  393. package/dist/utils/project-templates.js.map +0 -1
  394. package/dist/utils/prompt.d.ts +0 -28
  395. package/dist/utils/prompt.d.ts.map +0 -1
  396. package/dist/utils/prompt.js +0 -79
  397. package/dist/utils/prompt.js.map +0 -1
  398. package/dist/utils/resource-features.d.ts +0 -29
  399. package/dist/utils/resource-features.d.ts.map +0 -1
  400. package/dist/utils/resource-features.js +0 -171
  401. package/dist/utils/resource-features.js.map +0 -1
  402. package/dist/utils/service-urls.d.ts +0 -30
  403. package/dist/utils/service-urls.d.ts.map +0 -1
  404. package/dist/utils/service-urls.js +0 -93
  405. package/dist/utils/service-urls.js.map +0 -1
  406. package/dist/utils/services.d.ts +0 -18
  407. package/dist/utils/services.d.ts.map +0 -1
  408. package/dist/utils/services.js +0 -291
  409. package/dist/utils/services.js.map +0 -1
  410. package/dist/utils/stack-features.d.ts +0 -22
  411. package/dist/utils/stack-features.d.ts.map +0 -1
  412. package/dist/utils/stack-features.js +0 -13
  413. package/dist/utils/stack-features.js.map +0 -1
  414. package/dist/utils/tar.d.ts +0 -7
  415. package/dist/utils/tar.d.ts.map +0 -1
  416. package/dist/utils/tar.js +0 -21
  417. package/dist/utils/tar.js.map +0 -1
  418. package/dist/utils/tilt.d.ts +0 -19
  419. package/dist/utils/tilt.d.ts.map +0 -1
  420. package/dist/utils/tilt.js +0 -78
  421. package/dist/utils/tilt.js.map +0 -1
  422. package/dist/utils/validation.d.ts +0 -16
  423. package/dist/utils/validation.d.ts.map +0 -1
  424. package/dist/utils/validation.js +0 -58
  425. package/dist/utils/validation.js.map +0 -1
  426. /package/{README.md → cli/README.md} +0 -0
  427. /package/{bin → cli/bin}/tdk.js +0 -0
  428. /package/{templates → cli/templates}/.tiltignore.hbs +0 -0
  429. /package/{templates → cli/templates}/TILT_RESOURCE_DEFAULTS.star.hbs +0 -0
  430. /package/{templates → cli/templates}/TILT_TECH_STACK.star.hbs +0 -0
  431. /package/{templates → cli/templates}/spec.master.hbs +0 -0
@@ -0,0 +1,148 @@
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
+ });
@@ -0,0 +1,76 @@
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
+ }
@@ -0,0 +1,54 @@
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
+ }
@@ -0,0 +1,126 @@
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
+ export const OPTIONAL_INFRA_SERVICES = [
31
+ "monitoring",
32
+ "elk",
33
+ "debezium",
34
+ "golden_image",
35
+ "verdaccio",
36
+ ] as const;
37
+
38
+ export const PORT_RANGES = {
39
+ frontend: { base: 3000, min: 3000, max: 3999, range: "3000-3999" as const },
40
+ backend: { base: 4000, min: 4000, max: 4999, range: "4000-4999" as const },
41
+ worker: { base: 6000, min: 6000, max: 6999, range: "6000-6999" as const },
42
+ health: { base: 5000, min: 5000, max: 5999, range: "5000-5999" as const },
43
+ migrator: { base: 7000, min: 7000, max: 7999, range: "7000-7999" as const },
44
+ } as const;
45
+
46
+ export const STANDARD_PORTS = {
47
+ tiltUi: 10350,
48
+ traefik: 8080,
49
+ } as const;
50
+
51
+ export const QUICKSTART_DOCS_URL = "https://tdk-landscape.github.io/tdk-website/docs/quickstart/";
52
+
53
+ export const BASE_DOMAIN_DEFAULT = "beauty-crm.localhost";
54
+ export const APP_SUBDOMAIN_PREFIX = "app";
55
+ export const API_SUBDOMAIN_PREFIX = "api";
56
+
57
+ export function getBaseDomain(): string {
58
+ const override = process.env.TDK_SERVICE_BASE_URL ?? process.env.TDK_PUBLIC_HOST;
59
+ if (override) {
60
+ try {
61
+ const u = new URL(override.includes("://") ? override : `http://${override}`);
62
+ return u.hostname;
63
+ } catch {
64
+ return override.replace(/^https?:\/\//, "").split("/")[0];
65
+ }
66
+ }
67
+ return BASE_DOMAIN_DEFAULT;
68
+ }
69
+
70
+ export function frontendBaseUrl(protocol = "http"): string {
71
+ return `${protocol}://${APP_SUBDOMAIN_PREFIX}.${getBaseDomain()}`;
72
+ }
73
+
74
+ export function apiBaseUrl(protocol = "http"): string {
75
+ return `${protocol}://${API_SUBDOMAIN_PREFIX}.${getBaseDomain()}`;
76
+ }
77
+
78
+ export const SKIP_DIRECTORIES = [
79
+ "node_modules",
80
+ ".git",
81
+ ".tilt",
82
+ ".tilt-engine",
83
+ "dist",
84
+ "build",
85
+ ".prisma",
86
+ ".turbo",
87
+ "coverage",
88
+ "tmp",
89
+ "temp",
90
+ "__tests__",
91
+ "test",
92
+ "tests",
93
+ ".github",
94
+ ".vscode",
95
+ "docs",
96
+ ] as const;
97
+
98
+ export const AUTOGENERATED_FILE_PATTERNS = [
99
+ "Dockerfile",
100
+ "docker-compose.yml",
101
+ "docker-compose.yaml",
102
+ "Tiltfile",
103
+ "vite.config.ts",
104
+ "tsconfig.json",
105
+ "tsconfig.build.json",
106
+ ] as const;
107
+
108
+ // Stack emojis - generic, no hardcoded service names
109
+ // Users can add their own stack emojis via project config
110
+ const STACK_EMOJIS: Record<string, string> = {
111
+ infra: "🏗️",
112
+ core: "🔧",
113
+ api: "⚡",
114
+ app: "🎨",
115
+ orchestrator: "⚙️",
116
+ } as const;
117
+
118
+ export function getStackEmoji(stackName: string): string {
119
+ const lowerName = stackName.toLowerCase();
120
+ for (const [key, emoji] of Object.entries(STACK_EMOJIS)) {
121
+ if (lowerName.includes(key)) {
122
+ return emoji;
123
+ }
124
+ }
125
+ return "📦";
126
+ }
@@ -0,0 +1,49 @@
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
+ }
@@ -0,0 +1,20 @@
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
+ }