@tdk-landscape/tdk-cli-core 1.3.53 → 1.3.54

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 (388) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/cli/dist/generator/extension-fetch.js +16 -9
  3. package/cli/package.json +1 -1
  4. package/package.json +16 -1
  5. package/.claude/skills/layer-autoresearch/SKILL.md +0 -48
  6. package/.claude/skills/tdk-troubleshoot/SKILL.md +0 -222
  7. package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -40
  8. package/.github/ISSUE_TEMPLATE/config.yml +0 -11
  9. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -18
  10. package/.github/ISSUE_TEMPLATE/premium_license.yml +0 -43
  11. package/.github/dependabot.yml +0 -33
  12. package/.github/pull_request_template.md +0 -5
  13. package/.github/workflows/ci.yml +0 -200
  14. package/.github/workflows/release-binaries.yml +0 -139
  15. package/.github/zizmor.yml +0 -9
  16. package/.pre-commit-config.yaml +0 -57
  17. package/CODE_OF_CONDUCT.md +0 -9
  18. package/CONTRIBUTING.md +0 -42
  19. package/Makefile +0 -92
  20. package/SECURITY.md +0 -17
  21. package/benchmarks/results/container-scale-2026-09-25T20-54-49-736Z.json +0 -45
  22. package/benchmarks/results/container-scale-2026-09-25T21-01-20-540Z.json +0 -150
  23. package/benchmarks/results/container-scale-2026-09-25T21-15-01-441Z.json +0 -73
  24. package/benchmarks/results/container-scale-2026-09-25T22-09-01-630Z.json +0 -77
  25. package/benchmarks/results/container-scale-2026-09-25T22-18-28-371Z.json +0 -202
  26. package/cli/AGENTS.md +0 -390
  27. package/cli/DESIGN.md +0 -735
  28. package/cli/README.md +0 -292
  29. package/cli/biome.json +0 -40
  30. package/cli/dependency-graph.svg +0 -1135
  31. package/cli/dist/cli.d.ts +0 -3
  32. package/cli/dist/cli.d.ts.map +0 -1
  33. package/cli/dist/cli.js.map +0 -1
  34. package/cli/dist/commands/completion.d.ts +0 -3
  35. package/cli/dist/commands/completion.d.ts.map +0 -1
  36. package/cli/dist/commands/completion.js.map +0 -1
  37. package/cli/dist/commands/config.d.ts +0 -3
  38. package/cli/dist/commands/config.d.ts.map +0 -1
  39. package/cli/dist/commands/config.js.map +0 -1
  40. package/cli/dist/commands/doctor.d.ts +0 -19
  41. package/cli/dist/commands/doctor.d.ts.map +0 -1
  42. package/cli/dist/commands/doctor.js.map +0 -1
  43. package/cli/dist/commands/down.d.ts +0 -3
  44. package/cli/dist/commands/down.d.ts.map +0 -1
  45. package/cli/dist/commands/down.js.map +0 -1
  46. package/cli/dist/commands/help.d.ts +0 -2
  47. package/cli/dist/commands/help.d.ts.map +0 -1
  48. package/cli/dist/commands/help.js.map +0 -1
  49. package/cli/dist/commands/networks.d.ts +0 -3
  50. package/cli/dist/commands/networks.d.ts.map +0 -1
  51. package/cli/dist/commands/networks.js.map +0 -1
  52. package/cli/dist/commands/project.d.ts +0 -9
  53. package/cli/dist/commands/project.d.ts.map +0 -1
  54. package/cli/dist/commands/project.js.map +0 -1
  55. package/cli/dist/commands/projects.d.ts +0 -3
  56. package/cli/dist/commands/projects.d.ts.map +0 -1
  57. package/cli/dist/commands/projects.js.map +0 -1
  58. package/cli/dist/commands/resource.d.ts +0 -69
  59. package/cli/dist/commands/resource.d.ts.map +0 -1
  60. package/cli/dist/commands/resource.js.map +0 -1
  61. package/cli/dist/commands/resources.d.ts +0 -3
  62. package/cli/dist/commands/resources.d.ts.map +0 -1
  63. package/cli/dist/commands/resources.js.map +0 -1
  64. package/cli/dist/commands/stack.d.ts +0 -3
  65. package/cli/dist/commands/stack.d.ts.map +0 -1
  66. package/cli/dist/commands/stack.js.map +0 -1
  67. package/cli/dist/commands/stacks.d.ts +0 -3
  68. package/cli/dist/commands/stacks.d.ts.map +0 -1
  69. package/cli/dist/commands/stacks.js.map +0 -1
  70. package/cli/dist/commands/status.d.ts +0 -3
  71. package/cli/dist/commands/status.d.ts.map +0 -1
  72. package/cli/dist/commands/status.js.map +0 -1
  73. package/cli/dist/commands/ui.d.ts +0 -3
  74. package/cli/dist/commands/ui.d.ts.map +0 -1
  75. package/cli/dist/commands/ui.js.map +0 -1
  76. package/cli/dist/commands/up.d.ts +0 -3
  77. package/cli/dist/commands/up.d.ts.map +0 -1
  78. package/cli/dist/commands/up.js.map +0 -1
  79. package/cli/dist/commands/upgrade.d.ts +0 -14
  80. package/cli/dist/commands/upgrade.d.ts.map +0 -1
  81. package/cli/dist/commands/upgrade.js.map +0 -1
  82. package/cli/dist/commands/version.d.ts +0 -3
  83. package/cli/dist/commands/version.d.ts.map +0 -1
  84. package/cli/dist/commands/version.js.map +0 -1
  85. package/cli/dist/components/Accessible.d.ts +0 -8
  86. package/cli/dist/components/Accessible.d.ts.map +0 -1
  87. package/cli/dist/components/Accessible.js.map +0 -1
  88. package/cli/dist/components/BaseTooltip.d.ts +0 -4
  89. package/cli/dist/components/BaseTooltip.d.ts.map +0 -1
  90. package/cli/dist/components/BaseTooltip.js.map +0 -1
  91. package/cli/dist/components/DetailPanel.d.ts +0 -4
  92. package/cli/dist/components/DetailPanel.d.ts.map +0 -1
  93. package/cli/dist/components/DetailPanel.js.map +0 -1
  94. package/cli/dist/components/FileTree.d.ts +0 -4
  95. package/cli/dist/components/FileTree.d.ts.map +0 -1
  96. package/cli/dist/components/FileTree.js.map +0 -1
  97. package/cli/dist/components/ResourceSelectInput.d.ts +0 -4
  98. package/cli/dist/components/ResourceSelectInput.d.ts.map +0 -1
  99. package/cli/dist/components/ResourceSelectInput.js.map +0 -1
  100. package/cli/dist/components/ResourceTable.d.ts +0 -4
  101. package/cli/dist/components/ResourceTable.d.ts.map +0 -1
  102. package/cli/dist/components/ResourceTable.js.map +0 -1
  103. package/cli/dist/components/TabBar.d.ts +0 -4
  104. package/cli/dist/components/TabBar.d.ts.map +0 -1
  105. package/cli/dist/components/TabBar.js.map +0 -1
  106. package/cli/dist/components/Tooltip.d.ts +0 -12
  107. package/cli/dist/components/Tooltip.d.ts.map +0 -1
  108. package/cli/dist/components/Tooltip.js.map +0 -1
  109. package/cli/dist/components/index.d.ts +0 -8
  110. package/cli/dist/components/index.d.ts.map +0 -1
  111. package/cli/dist/components/index.js.map +0 -1
  112. package/cli/dist/config/platform-standards.d.ts +0 -159
  113. package/cli/dist/config/platform-standards.d.ts.map +0 -1
  114. package/cli/dist/config/platform-standards.js.map +0 -1
  115. package/cli/dist/generator/extension-fetch.d.ts +0 -25
  116. package/cli/dist/generator/extension-fetch.d.ts.map +0 -1
  117. package/cli/dist/generator/extension-fetch.js.map +0 -1
  118. package/cli/dist/generator/template-engine.d.ts +0 -62
  119. package/cli/dist/generator/template-engine.d.ts.map +0 -1
  120. package/cli/dist/generator/template-engine.js.map +0 -1
  121. package/cli/dist/index.d.ts +0 -11
  122. package/cli/dist/index.d.ts.map +0 -1
  123. package/cli/dist/index.js.map +0 -1
  124. package/cli/dist/types/index.d.ts +0 -257
  125. package/cli/dist/types/index.d.ts.map +0 -1
  126. package/cli/dist/types/index.js.map +0 -1
  127. package/cli/dist/utils/cache.d.ts +0 -19
  128. package/cli/dist/utils/cache.d.ts.map +0 -1
  129. package/cli/dist/utils/cache.js.map +0 -1
  130. package/cli/dist/utils/command-helpers.d.ts +0 -17
  131. package/cli/dist/utils/command-helpers.d.ts.map +0 -1
  132. package/cli/dist/utils/command-helpers.js.map +0 -1
  133. package/cli/dist/utils/constants.d.ts +0 -53
  134. package/cli/dist/utils/constants.d.ts.map +0 -1
  135. package/cli/dist/utils/constants.js.map +0 -1
  136. package/cli/dist/utils/discovery-context.d.ts +0 -4
  137. package/cli/dist/utils/discovery-context.d.ts.map +0 -1
  138. package/cli/dist/utils/discovery-context.js.map +0 -1
  139. package/cli/dist/utils/docker.d.ts +0 -4
  140. package/cli/dist/utils/docker.d.ts.map +0 -1
  141. package/cli/dist/utils/docker.js.map +0 -1
  142. package/cli/dist/utils/doctor-runtime.d.ts +0 -81
  143. package/cli/dist/utils/doctor-runtime.d.ts.map +0 -1
  144. package/cli/dist/utils/doctor-runtime.js.map +0 -1
  145. package/cli/dist/utils/env-validator.d.ts +0 -15
  146. package/cli/dist/utils/env-validator.d.ts.map +0 -1
  147. package/cli/dist/utils/env-validator.js.map +0 -1
  148. package/cli/dist/utils/errors.d.ts +0 -31
  149. package/cli/dist/utils/errors.d.ts.map +0 -1
  150. package/cli/dist/utils/errors.js.map +0 -1
  151. package/cli/dist/utils/file-helpers.d.ts +0 -14
  152. package/cli/dist/utils/file-helpers.d.ts.map +0 -1
  153. package/cli/dist/utils/file-helpers.js.map +0 -1
  154. package/cli/dist/utils/formatting.d.ts +0 -30
  155. package/cli/dist/utils/formatting.d.ts.map +0 -1
  156. package/cli/dist/utils/formatting.js.map +0 -1
  157. package/cli/dist/utils/paths.d.ts +0 -3
  158. package/cli/dist/utils/paths.d.ts.map +0 -1
  159. package/cli/dist/utils/paths.js.map +0 -1
  160. package/cli/dist/utils/port-assignment.d.ts +0 -6
  161. package/cli/dist/utils/port-assignment.d.ts.map +0 -1
  162. package/cli/dist/utils/port-assignment.js.map +0 -1
  163. package/cli/dist/utils/project-features.d.ts +0 -23
  164. package/cli/dist/utils/project-features.d.ts.map +0 -1
  165. package/cli/dist/utils/project-features.js.map +0 -1
  166. package/cli/dist/utils/project-templates.d.ts +0 -7
  167. package/cli/dist/utils/project-templates.d.ts.map +0 -1
  168. package/cli/dist/utils/project-templates.js.map +0 -1
  169. package/cli/dist/utils/prompt.d.ts +0 -28
  170. package/cli/dist/utils/prompt.d.ts.map +0 -1
  171. package/cli/dist/utils/prompt.js.map +0 -1
  172. package/cli/dist/utils/resource-features.d.ts +0 -29
  173. package/cli/dist/utils/resource-features.d.ts.map +0 -1
  174. package/cli/dist/utils/resource-features.js.map +0 -1
  175. package/cli/dist/utils/service-urls.d.ts +0 -30
  176. package/cli/dist/utils/service-urls.d.ts.map +0 -1
  177. package/cli/dist/utils/service-urls.js.map +0 -1
  178. package/cli/dist/utils/services.d.ts +0 -18
  179. package/cli/dist/utils/services.d.ts.map +0 -1
  180. package/cli/dist/utils/services.js.map +0 -1
  181. package/cli/dist/utils/stack-features.d.ts +0 -22
  182. package/cli/dist/utils/stack-features.d.ts.map +0 -1
  183. package/cli/dist/utils/stack-features.js.map +0 -1
  184. package/cli/dist/utils/tar.d.ts +0 -7
  185. package/cli/dist/utils/tar.d.ts.map +0 -1
  186. package/cli/dist/utils/tar.js.map +0 -1
  187. package/cli/dist/utils/tilt.d.ts +0 -20
  188. package/cli/dist/utils/tilt.d.ts.map +0 -1
  189. package/cli/dist/utils/tilt.js.map +0 -1
  190. package/cli/dist/utils/validation.d.ts +0 -16
  191. package/cli/dist/utils/validation.d.ts.map +0 -1
  192. package/cli/dist/utils/validation.js.map +0 -1
  193. package/cli/knip.json +0 -6
  194. package/cli/pnpm-lock.yaml +0 -2305
  195. package/cli/pnpm-workspace.yaml +0 -2
  196. package/cli/src/cli.ts +0 -72
  197. package/cli/src/commands/__tests__/always-enabled-infra.test.ts +0 -109
  198. package/cli/src/commands/__tests__/config.test.ts +0 -146
  199. package/cli/src/commands/__tests__/doctor.test.ts +0 -730
  200. package/cli/src/commands/__tests__/error-handling.test.ts +0 -78
  201. package/cli/src/commands/__tests__/phases-model.test.ts +0 -161
  202. package/cli/src/commands/__tests__/project-resource-features-e2e.test.ts +0 -187
  203. package/cli/src/commands/__tests__/project.test.ts +0 -68
  204. package/cli/src/commands/__tests__/resource.test.ts +0 -226
  205. package/cli/src/commands/__tests__/saas-starter-integration.test.ts +0 -194
  206. package/cli/src/commands/__tests__/stack-features-e2e.test.ts +0 -135
  207. package/cli/src/commands/__tests__/upgrade.test.ts +0 -198
  208. package/cli/src/commands/completion.ts +0 -300
  209. package/cli/src/commands/config.ts +0 -299
  210. package/cli/src/commands/doctor.ts +0 -926
  211. package/cli/src/commands/down.ts +0 -37
  212. package/cli/src/commands/help.ts +0 -143
  213. package/cli/src/commands/networks-design.md +0 -80
  214. package/cli/src/commands/networks.ts +0 -332
  215. package/cli/src/commands/project.ts +0 -456
  216. package/cli/src/commands/projects.ts +0 -82
  217. package/cli/src/commands/resource.ts +0 -652
  218. package/cli/src/commands/resources.ts +0 -95
  219. package/cli/src/commands/stack.ts +0 -128
  220. package/cli/src/commands/stacks.ts +0 -52
  221. package/cli/src/commands/status.ts +0 -88
  222. package/cli/src/commands/ui.tsx +0 -843
  223. package/cli/src/commands/up.ts +0 -169
  224. package/cli/src/commands/upgrade.ts +0 -628
  225. package/cli/src/commands/version.ts +0 -9
  226. package/cli/src/components/Accessible.tsx +0 -21
  227. package/cli/src/components/BaseTooltip.tsx +0 -66
  228. package/cli/src/components/DetailPanel.tsx +0 -146
  229. package/cli/src/components/FileTree.tsx +0 -89
  230. package/cli/src/components/ResourceSelectInput.tsx +0 -30
  231. package/cli/src/components/ResourceTable.tsx +0 -78
  232. package/cli/src/components/TabBar.tsx +0 -53
  233. package/cli/src/components/Tooltip.tsx +0 -11
  234. package/cli/src/components/index.ts +0 -7
  235. package/cli/src/config/platform-standards.test.ts +0 -11
  236. package/cli/src/config/platform-standards.ts +0 -196
  237. package/cli/src/generator/__tests__/extension-fetch.test.ts +0 -242
  238. package/cli/src/generator/__tests__/template-engine.test.ts +0 -70
  239. package/cli/src/generator/extension-fetch.ts +0 -286
  240. package/cli/src/generator/template-engine.ts +0 -752
  241. package/cli/src/index.ts +0 -86
  242. package/cli/src/templates.d.ts +0 -4
  243. package/cli/src/types/index.ts +0 -353
  244. package/cli/src/utils/__tests__/cache.test.ts +0 -98
  245. package/cli/src/utils/__tests__/formatting.test.ts +0 -170
  246. package/cli/src/utils/__tests__/paths.test.ts +0 -180
  247. package/cli/src/utils/__tests__/port-assignment.test.ts +0 -121
  248. package/cli/src/utils/__tests__/service-urls.test.ts +0 -174
  249. package/cli/src/utils/__tests__/services.test.ts +0 -531
  250. package/cli/src/utils/__tests__/tilt.test.ts +0 -172
  251. package/cli/src/utils/__tests__/validation.test.ts +0 -148
  252. package/cli/src/utils/cache.ts +0 -76
  253. package/cli/src/utils/command-helpers.ts +0 -54
  254. package/cli/src/utils/constants.ts +0 -130
  255. package/cli/src/utils/discovery-context.ts +0 -49
  256. package/cli/src/utils/docker.ts +0 -20
  257. package/cli/src/utils/doctor-runtime.ts +0 -644
  258. package/cli/src/utils/env-validator.ts +0 -139
  259. package/cli/src/utils/errors.ts +0 -168
  260. package/cli/src/utils/file-helpers.ts +0 -62
  261. package/cli/src/utils/formatting.ts +0 -215
  262. package/cli/src/utils/paths.ts +0 -53
  263. package/cli/src/utils/port-assignment.ts +0 -106
  264. package/cli/src/utils/project-features.ts +0 -118
  265. package/cli/src/utils/project-templates.ts +0 -29
  266. package/cli/src/utils/prompt.ts +0 -128
  267. package/cli/src/utils/resource-features.ts +0 -215
  268. package/cli/src/utils/service-urls.ts +0 -124
  269. package/cli/src/utils/services.ts +0 -364
  270. package/cli/src/utils/stack-features.ts +0 -30
  271. package/cli/src/utils/tar.ts +0 -24
  272. package/cli/src/utils/tilt.ts +0 -133
  273. package/cli/src/utils/validation.ts +0 -67
  274. package/cli/tsconfig.json +0 -25
  275. package/cli/tsconfig.typecheck.json +0 -8
  276. package/docs/FEATURES.md +0 -281
  277. package/docs/demo.svg +0 -217
  278. package/engine/docs/AUTODISCOVERY_TEST.md +0 -182
  279. package/engine/docs/C4-ARCHITECTURE-operations.md +0 -396
  280. package/engine/docs/C4-ARCHITECTURE-overview.md +0 -284
  281. package/engine/docs/C4-ARCHITECTURE.md +0 -17
  282. package/engine/docs/GOLDEN_IMAGE_INTEGRATION.md +0 -349
  283. package/engine/docs/MANIFEST_DRIVEN_ARCHITECTURE.md +0 -357
  284. package/engine/docs/README.md +0 -284
  285. package/install.sh +0 -19
  286. package/knip.json +0 -10
  287. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/.openspec.yaml +0 -2
  288. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/design.md +0 -102
  289. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/proposal.md +0 -31
  290. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-notifications/spec.md +0 -48
  291. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-orchestration/spec.md +0 -63
  292. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-troubleshooting/spec.md +0 -56
  293. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/tasks.md +0 -61
  294. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/.openspec.yaml +0 -2
  295. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/design.md +0 -114
  296. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/proposal.md +0 -32
  297. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/manifest-field-migration/spec.md +0 -20
  298. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/resource-terminology-standard/spec.md +0 -20
  299. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/stack-terminology-standard/spec.md +0 -20
  300. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/tasks.md +0 -194
  301. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/.openspec.yaml +0 -2
  302. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/design.md +0 -111
  303. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/proposal.md +0 -33
  304. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/function-naming-alignment/spec.md +0 -12
  305. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/optional-parameter-patterns/spec.md +0 -18
  306. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-documentation/spec.md +0 -16
  307. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-naming-consistency/spec.md +0 -12
  308. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-ordering-standard/spec.md +0 -12
  309. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/tasks.md +0 -194
  310. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/.openspec.yaml +0 -2
  311. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/design.md +0 -84
  312. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/proposal.md +0 -31
  313. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/codebase-audit/spec.md +0 -27
  314. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/dead-code-cleanup/spec.md +0 -27
  315. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/test-gap-fill/spec.md +0 -23
  316. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/todo-resolution/spec.md +0 -27
  317. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/tasks.md +0 -39
  318. package/openspec/changes/archive/2026-06-25-landscape-consolidation/.openspec.yaml +0 -2
  319. package/openspec/changes/archive/2026-06-25-landscape-consolidation/design.md +0 -80
  320. package/openspec/changes/archive/2026-06-25-landscape-consolidation/proposal.md +0 -40
  321. package/openspec/changes/archive/2026-06-25-landscape-consolidation/spec.md +0 -52
  322. package/openspec/changes/archive/2026-06-25-landscape-consolidation/tasks.md +0 -51
  323. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/.openspec.yaml +0 -2
  324. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/design.md +0 -43
  325. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/proposal.md +0 -29
  326. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/specs/self-contained-generated-projects/spec.md +0 -67
  327. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/tasks.md +0 -27
  328. package/openspec/changes/optimize-runtime-docker-layers/.openspec.yaml +0 -3
  329. package/openspec/changes/optimize-runtime-docker-layers/design.md +0 -81
  330. package/openspec/changes/optimize-runtime-docker-layers/proposal.md +0 -44
  331. package/openspec/changes/optimize-runtime-docker-layers/specs/runtime-container-footprint/spec.md +0 -79
  332. package/openspec/changes/optimize-runtime-docker-layers/tasks.md +0 -36
  333. package/openspec/changes/prioritized-cold-start/.openspec.yaml +0 -4
  334. package/openspec/changes/prioritized-cold-start/design.md +0 -137
  335. package/openspec/changes/prioritized-cold-start/proposal.md +0 -41
  336. package/openspec/changes/prioritized-cold-start/specs/on-demand-resource-startup/spec.md +0 -98
  337. package/openspec/changes/prioritized-cold-start/tasks.md +0 -69
  338. package/openspec/config.yaml +0 -1
  339. package/openspec/specs/manifest-field-migration/spec.md +0 -24
  340. package/openspec/specs/resource-terminology-standard/spec.md +0 -24
  341. package/openspec/specs/self-contained-generated-projects/spec.md +0 -67
  342. package/openspec/specs/stack-terminology-standard/spec.md +0 -24
  343. package/platform/services/platform/proxy/service.yaml +0 -14
  344. package/scripts/audit-codebase.sh +0 -213
  345. package/scripts/autoresearch/layer-eval.sh +0 -65
  346. package/scripts/benchmark/README.md +0 -25
  347. package/scripts/benchmark/container-scale.ts +0 -503
  348. package/scripts/benchmark/pre-release-gate.sh +0 -9
  349. package/scripts/install-git-hooks.sh +0 -14
  350. package/scripts/measure-idle-footprint.sh +0 -58
  351. package/scripts/record-demo.sh +0 -43
  352. package/scripts/release-binaries.sh +0 -97
  353. package/scripts/setup-pre-commit.sh +0 -33
  354. package/scripts/stage-npm-engine.sh +0 -36
  355. package/tests/tilt-engine/__init__.py +0 -5
  356. package/tests/tilt-engine/conftest.py +0 -182
  357. package/tests/tilt-engine/fixtures/appointment-frontend-service.json +0 -11
  358. package/tests/tilt-engine/fixtures/identity-backend-service.json +0 -12
  359. package/tests/tilt-engine/fixtures/invalid-service.json +0 -4
  360. package/tests/tilt-engine/test_agents_md_generator.py +0 -341
  361. package/tests/tilt-engine/test_agents_md_integration.py +0 -378
  362. package/tests/tilt-engine/test_cache_operations.py +0 -181
  363. package/tests/tilt-engine/test_cache_persistence.py +0 -142
  364. package/tests/tilt-engine/test_code_executor.py +0 -152
  365. package/tests/tilt-engine/test_code_viewer.py +0 -127
  366. package/tests/tilt-engine/test_compose_port_anchors.py +0 -310
  367. package/tests/tilt-engine/test_config_inspector.py +0 -162
  368. package/tests/tilt-engine/test_daemon_focus_mode.py +0 -89
  369. package/tests/tilt-engine/test_daemon_polling.py +0 -122
  370. package/tests/tilt-engine/test_daemon_registration.py +0 -115
  371. package/tests/tilt-engine/test_daemon_validation.py +0 -107
  372. package/tests/tilt-engine/test_docker_generator_bugs.py +0 -493
  373. package/tests/tilt-engine/test_docker_prune.py +0 -119
  374. package/tests/tilt-engine/test_dockerignore_path_bug.py +0 -82
  375. package/tests/tilt-engine/test_file_browser.py +0 -193
  376. package/tests/tilt-engine/test_frontend_basepath_manifest.py +0 -27
  377. package/tests/tilt-engine/test_health_dependencies.py +0 -130
  378. package/tests/tilt-engine/test_health_endpoints.py +0 -118
  379. package/tests/tilt-engine/test_health_tilt_ui.py +0 -85
  380. package/tests/tilt-engine/test_runtime_container_footprint.py +0 -162
  381. package/tests/tilt-engine/test_sablier_defer_start.py +0 -237
  382. package/tests/tilt-engine/test_safety_aliases.py +0 -84
  383. package/tests/tilt-engine/test_snapshot_diff.py +0 -136
  384. package/tests/tilt-engine/test_snapshot_persistence.py +0 -163
  385. package/tests/tilt-engine/test_snapshot_scanning.py +0 -123
  386. package/tests/tilt-engine/test_standalone_project_boot.py +0 -61
  387. package/tests/tilt-engine/test_standalone_traefik.py +0 -160
  388. package/tests/tilt-engine/test_traefik_static_wake_route.py +0 -187
@@ -1,139 +0,0 @@
1
- import { randomBytes } from "node:crypto";
2
- import { existsSync, readFileSync, writeFileSync } from "node:fs";
3
- import { join } from "node:path";
4
-
5
- export interface EnvVariable {
6
- name: string;
7
- description: string;
8
- required: boolean;
9
- default?: string;
10
- example?: string;
11
- }
12
-
13
- const REQUIRED_ENV_VARS: EnvVariable[] = [
14
- {
15
- name: "VERDACCIO_URL_DOCKER",
16
- description: "Docker-internal URL for npm registry",
17
- required: true,
18
- default: "http://verdaccio:4873",
19
- example: "http://verdaccio:4873",
20
- },
21
- {
22
- name: "VERDACCIO_URL",
23
- description: "Local development URL for npm registry",
24
- required: false,
25
- default: "http://localhost:4873",
26
- },
27
- {
28
- name: "TILT_ENV",
29
- description: "Tilt environment name",
30
- required: true,
31
- default: "dev",
32
- example: "dev",
33
- },
34
- {
35
- name: "DATABASE_URL",
36
- description: "PostgreSQL connection string",
37
- required: false,
38
- default: "postgresql://postgres:postgres@postgres:5432/app_dev",
39
- },
40
- {
41
- name: "DB_PASSWORD",
42
- description: "PostgreSQL superuser password (docker-compose POSTGRES_PASSWORD)",
43
- required: true,
44
- // No static default: a shared password across every generated project is a
45
- // credential leak waiting to happen. generateEnvFile() fills this one in with
46
- // a fresh random value per project instead.
47
- example: "postgres",
48
- },
49
- ];
50
-
51
- function generateDbPassword(): string {
52
- return randomBytes(16).toString("hex");
53
- }
54
-
55
- export function generateEnvFile(_projectRoot: string): string {
56
- const lines: string[] = [
57
- "# 🔧 TDK Environment Configuration",
58
- "# Auto-generated by TDK CLI - edit as needed",
59
- "# These variables are required for services to run",
60
- "#",
61
- "# After editing, run: tdk config regenerate && tdk up",
62
- "",
63
- ];
64
-
65
- for (const envVar of REQUIRED_ENV_VARS) {
66
- lines.push(`# ${envVar.description}`);
67
-
68
- if (envVar.required) {
69
- lines.push(`# ⚠️ REQUIRED - set this or services will fail`);
70
- }
71
-
72
- if (envVar.example) {
73
- lines.push(`# Example: ${envVar.example}`);
74
- }
75
-
76
- const value = envVar.name === "DB_PASSWORD" ? generateDbPassword() : envVar.default || "";
77
- lines.push(`${envVar.name}=${value}`);
78
- lines.push("");
79
- }
80
-
81
- return lines.join("\n");
82
- }
83
-
84
- export function validateEnvFile(projectRoot: string): {
85
- missing: string[];
86
- invalid: string[];
87
- warnings: string[];
88
- } {
89
- const envPath = join(projectRoot, ".env");
90
- const result = {
91
- missing: [] as string[],
92
- invalid: [] as string[],
93
- warnings: [] as string[],
94
- };
95
-
96
- if (!existsSync(envPath)) {
97
- return {
98
- missing: REQUIRED_ENV_VARS.filter((v) => v.required).map((v) => v.name),
99
- invalid: [],
100
- warnings: [".env file not found - will be auto-generated"],
101
- };
102
- }
103
-
104
- const envContent = readFileSync(envPath, "utf-8");
105
- const envVars = new Set(
106
- envContent
107
- .split("\n")
108
- .filter((line) => !line.startsWith("#") && line.includes("="))
109
- .map((line) => line.split("=")[0])
110
- .filter((name) => name.length > 0),
111
- );
112
-
113
- for (const envVar of REQUIRED_ENV_VARS) {
114
- if (envVar.required && !envVars.has(envVar.name)) {
115
- result.missing.push(envVar.name);
116
- }
117
-
118
- if (envVars.has(envVar.name)) {
119
- const match = envContent.match(new RegExp(`^${envVar.name}=(.*)$`, "m"));
120
- const value = match ? match[1] : "";
121
- if (!value.trim()) {
122
- result.invalid.push(`${envVar.name} is set but empty`);
123
- }
124
- }
125
- }
126
-
127
- return result;
128
- }
129
-
130
- export function ensureEnvFile(projectRoot: string): boolean {
131
- const envPath = join(projectRoot, ".env");
132
-
133
- if (!existsSync(envPath)) {
134
- writeFileSync(envPath, generateEnvFile(projectRoot));
135
- return true;
136
- }
137
-
138
- return false;
139
- }
@@ -1,168 +0,0 @@
1
- import chalk from "chalk";
2
- import { QUICKSTART_DOCS_URL } from "./constants.js";
3
- import { getContainerRuntimeStatus } from "./docker.js";
4
- import { findProjectRoot } from "./paths.js";
5
- import { isTiltAvailable } from "./tilt.js";
6
-
7
- export function getErrorMessage(err: unknown): string {
8
- return err instanceof Error ? err.message : String(err);
9
- }
10
-
11
- export function logVerbose(message: string, err?: unknown): void {
12
- if (process.env.TDK_VERBOSE) {
13
- const errMsg = err !== undefined ? `: ${getErrorMessage(err)}` : "";
14
- console.warn(chalk.gray(`${message}${errMsg}`));
15
- }
16
- }
17
-
18
- class TdkError extends Error {
19
- public suggestions: string[];
20
- public exitCode: number;
21
-
22
- constructor(message: string, suggestions: string[] = [], exitCode: number = 1) {
23
- super(message);
24
- this.name = "TdkError";
25
- this.suggestions = suggestions;
26
- this.exitCode = exitCode;
27
- }
28
-
29
- display(): void {
30
- showError(this.message, undefined, this.suggestions);
31
- }
32
-
33
- /** Display this error and exit the process with its exit code. */
34
- exit(): never {
35
- this.display();
36
- process.exit(this.exitCode);
37
- }
38
- }
39
-
40
- export const errorFactories = {
41
- tiltNotInstalled: () =>
42
- new TdkError("Tilt CLI is not installed", [
43
- "Install Tilt: `brew install tilt` (macOS)",
44
- "Or download from: https://docs.tilt.dev/install.html",
45
- "Verify with: `tilt version`",
46
- `Setup guide: ${QUICKSTART_DOCS_URL}`,
47
- ]),
48
- dockerNotAvailable: () =>
49
- new TdkError("Docker (or a compatible container runtime) is not running", [
50
- "Start Docker Desktop, then verify with: `docker ps`",
51
- "Or start Colima: `colima start`",
52
- "Or start the Docker service on Linux: `sudo systemctl start docker`",
53
- `Setup guide: ${QUICKSTART_DOCS_URL}`,
54
- ]),
55
- dockerNotResponding: () =>
56
- new TdkError("Docker is running but not responding (`docker ps` hung for 10s)", [
57
- "Quit and reopen Docker Desktop, or run `colima restart`",
58
- "Then verify with: `docker ps`",
59
- ]),
60
- stackNotFound: (name: string) =>
61
- new TdkError(`Stack "${name}" not found`, [
62
- "Run `tdk stacks` to see available stacks",
63
- "Run `tdk stack` to assign resources to a stack",
64
- ]),
65
- resourceNotFound: (name: string) =>
66
- new TdkError(`Resource "${name}" not found`, [
67
- "Run `tdk resources` to list all resources",
68
- "Check the resource name spelling",
69
- ]),
70
- directoryExists: (path: string) =>
71
- new TdkError(`Directory already exists: ${path}`, [
72
- "Use `--path` to specify a different location",
73
- "Remove the existing directory if no longer needed",
74
- ]),
75
- invalidPath: (path: string) =>
76
- new TdkError(`Invalid path: ${path}`, [
77
- "Path must be within the project directory",
78
- 'Path cannot contain special characters like <>:"|?*',
79
- ]),
80
- notInProject: () =>
81
- new TdkError("Could not find project root (no Tiltfile found)", [
82
- "Run this from within a project that has a Tiltfile",
83
- "Run `tdk project` to initialize a new project",
84
- ]),
85
- };
86
-
87
- export function requireProjectRoot(): string {
88
- const projectRoot = findProjectRoot();
89
- if (!projectRoot) {
90
- console.error(chalk.red("Error: Could not find project root (no Tiltfile found)."));
91
- console.error(chalk.gray("Run this from within a project that has a Tiltfile."));
92
- process.exit(1);
93
- }
94
- return projectRoot;
95
- }
96
-
97
- function handleCommandError(err: unknown): never {
98
- console.error(chalk.red(`Error: ${getErrorMessage(err)}`));
99
- process.exit(1);
100
- }
101
-
102
- export async function runCommand<T>(
103
- action: () => Promise<T>,
104
- options?: { verbose?: boolean },
105
- ): Promise<T | never> {
106
- try {
107
- return await action();
108
- } catch (err: unknown) {
109
- if (options?.verbose && err instanceof Error && err.stack) {
110
- console.error(chalk.gray(err.stack));
111
- }
112
- return handleCommandError(err);
113
- }
114
- }
115
-
116
- export async function withTiltCheck<T>(
117
- action: () => Promise<T>,
118
- options?: { verbose?: boolean },
119
- ): Promise<T | never> {
120
- const problems: TdkError[] = [];
121
- const runtime = getContainerRuntimeStatus();
122
- if (runtime === "unresponsive") {
123
- problems.push(errorFactories.dockerNotResponding());
124
- } else if (runtime === "missing") {
125
- problems.push(errorFactories.dockerNotAvailable());
126
- }
127
- if (!(await isTiltAvailable())) {
128
- problems.push(errorFactories.tiltNotInstalled());
129
- }
130
-
131
- if (problems.length > 0) {
132
- console.error(chalk.red(`\nTDK can't start - missing prerequisites:\n`));
133
- problems.forEach((problem, i) => {
134
- if (i > 0) console.error("");
135
- problem.display();
136
- });
137
- console.error(chalk.gray(`\nRun \`tdk doctor\` for a full environment check.`));
138
- process.exit(1);
139
- }
140
-
141
- return runCommand(action, options);
142
- }
143
-
144
- export function showErrorAndExit(message: string, exitCode: number = 1): never {
145
- console.error(chalk.red(`Error: ${message}`));
146
- process.exit(exitCode);
147
- }
148
-
149
- /** Display a formatted error message. Does NOT exit. */
150
- function showError(message: string, context?: string, suggestions?: string[]): void {
151
- console.error(chalk.red(`❌ ${message}`));
152
-
153
- if (context) {
154
- console.error(chalk.gray(` ${context}`));
155
- }
156
-
157
- if (suggestions && suggestions.length > 0) {
158
- console.error(chalk.yellow("\n💡 Suggestions:"));
159
- suggestions.forEach((s) => {
160
- console.error(chalk.cyan(` → ${s}`));
161
- });
162
- }
163
- }
164
-
165
- export function handleTiltFailure(command: "up" | "down", exitCode: number): never {
166
- console.error(chalk.red(`\ntilt ${command} failed with exit code ${exitCode}`));
167
- process.exit(exitCode);
168
- }
@@ -1,62 +0,0 @@
1
- import { existsSync, mkdirSync, writeFileSync } from "node:fs";
2
- import { resolve } from "node:path";
3
- import chalk from "chalk";
4
- import type { FileGenerationTask } from "../types/index.js";
5
-
6
- export function writeFilesWithProgress(
7
- basePath: string,
8
- tasks: FileGenerationTask[],
9
- onProgress?: (task: FileGenerationTask, index: number, total: number) => void,
10
- ): void {
11
- for (let i = 0; i < tasks.length; i++) {
12
- const task = tasks[i];
13
-
14
- console.log(chalk.blue(`${task.emoji} ${task.description}...`));
15
-
16
- if (task.type === "json") {
17
- writeJsonFileInDir(basePath, task.filename, task.content);
18
- } else {
19
- writeTextFileInDir(basePath, task.filename, String(task.content));
20
- }
21
-
22
- if (onProgress) {
23
- onProgress(task, i, tasks.length);
24
- }
25
- }
26
- }
27
-
28
- /**
29
- * Write JSON data to a file.
30
- * @param filePath - Path to the file
31
- * @param data - JSON-serializable data
32
- * @param space - Number of spaces for indentation (default: 2)
33
- */
34
- export function writeJsonFile(filePath: string, data: unknown, space: number = 2): void {
35
- const content = `${JSON.stringify(data, null, space)}\n`;
36
- writeFileSync(filePath, content, "utf-8");
37
- }
38
-
39
- export function writeJsonFileInDir(
40
- dir: string,
41
- filename: string,
42
- data: unknown,
43
- space: number = 2,
44
- ): void {
45
- const filePath = resolve(dir, filename);
46
- writeJsonFile(filePath, data, space);
47
- }
48
-
49
- export function writeTextFile(filePath: string, content: string): void {
50
- writeFileSync(filePath, content, "utf-8");
51
- }
52
-
53
- export function writeTextFileInDir(dir: string, filename: string, content: string): void {
54
- const filePath = resolve(dir, filename);
55
- writeTextFile(filePath, content);
56
- }
57
-
58
- export function ensureDirectory(dirPath: string): void {
59
- if (!existsSync(dirPath)) {
60
- mkdirSync(dirPath, { recursive: true });
61
- }
62
- }
@@ -1,215 +0,0 @@
1
- import chalk from "chalk";
2
- import type { StatusCategory, StatusValue } from "../types/index.js";
3
-
4
- function pluralize(count: number, singular: string, plural?: string): string {
5
- return count === 1 ? singular : plural || `${singular}s`;
6
- }
7
-
8
- export function formatCount(count: number, singular: string, plural?: string): string {
9
- return `${count} ${pluralize(count, singular, plural)}`;
10
- }
11
-
12
- const DATE_FORMAT_OPTIONS: Intl.DateTimeFormatOptions = {
13
- month: "short",
14
- day: "numeric",
15
- hour: "2-digit",
16
- minute: "2-digit",
17
- };
18
-
19
- export function formatDate(timestamp: string): string {
20
- const date = new Date(timestamp);
21
- return date.toLocaleString("en-US", DATE_FORMAT_OPTIONS);
22
- }
23
-
24
- export function formatShortDate(timestamp: string): string {
25
- const date = new Date(timestamp);
26
- return date.toLocaleDateString("en-US", { month: "short", day: "numeric" });
27
- }
28
-
29
- const STATUS_CATEGORY_CONFIG: Record<
30
- StatusCategory,
31
- { color: string; icon: string; chalkFn: (text: string) => string }
32
- > = {
33
- success: { color: "green", icon: "✓", chalkFn: chalk.green },
34
- error: { color: "red", icon: "✗", chalkFn: chalk.red },
35
- warning: { color: "yellow", icon: "○", chalkFn: chalk.yellow },
36
- unknown: { color: "gray", icon: "?", chalkFn: chalk.gray },
37
- };
38
-
39
- function getStatusCategory(status: StatusValue): StatusCategory {
40
- if (!status) return "unknown";
41
- const lowerStatus = status.toLowerCase();
42
-
43
- if (
44
- lowerStatus === "ready" ||
45
- lowerStatus === "healthy" ||
46
- lowerStatus === "active" ||
47
- lowerStatus === "running"
48
- ) {
49
- return "success";
50
- }
51
-
52
- if (
53
- lowerStatus === "error" ||
54
- lowerStatus === "failed" ||
55
- lowerStatus === "critical" ||
56
- lowerStatus === "stopped"
57
- ) {
58
- return "error";
59
- }
60
-
61
- if (
62
- lowerStatus === "pending" ||
63
- lowerStatus === "starting" ||
64
- lowerStatus === "building" ||
65
- lowerStatus === "degraded"
66
- ) {
67
- return "warning";
68
- }
69
-
70
- return "unknown";
71
- }
72
-
73
- export function getStatusColor(status: StatusValue): string {
74
- return STATUS_CATEGORY_CONFIG[getStatusCategory(status)].color;
75
- }
76
-
77
- export function getStatusIcon(status: StatusValue): string {
78
- return STATUS_CATEGORY_CONFIG[getStatusCategory(status)].icon;
79
- }
80
-
81
- export function colorizeByStatus(text: string, status: StatusValue): string {
82
- return STATUS_CATEGORY_CONFIG[getStatusCategory(status)].chalkFn(text);
83
- }
84
-
85
- const EMPTY_STATE_CONFIG: Record<string, { singular: string; command: string; context?: string }> =
86
- {
87
- resources: {
88
- singular: "resource",
89
- command: "tdk resource <name>",
90
- context: "\nTo create a resource:",
91
- },
92
- stacks: {
93
- singular: "stack",
94
- command: "tdk stack <stack-name>",
95
- context: "\nTo create a stack, use:",
96
- },
97
- services: {
98
- singular: "service",
99
- command: "tdk resource <name>",
100
- context: "\nTo create a service:",
101
- },
102
- "stack-services": {
103
- singular: "service",
104
- command: "tdk resource <name> --stack <stack-name>",
105
- context: "\nTo add services to this stack:",
106
- },
107
- };
108
-
109
- export function showEmptyState(
110
- itemType: "resources" | "stacks" | "services" | "stack-services",
111
- filterContext?: string,
112
- ): void {
113
- const config = EMPTY_STATE_CONFIG[itemType];
114
-
115
- if (filterContext) {
116
- console.log(chalk.yellow(`No ${config.singular}s found${filterContext}.`));
117
- } else {
118
- console.log(chalk.yellow(`No ${config.singular}s found.`));
119
- }
120
-
121
- console.log(chalk.gray(config.context));
122
- console.log(chalk.gray(` ${config.command}`));
123
-
124
- if (itemType === "stacks") {
125
- console.log(chalk.gray("\nOr create a new resource with a stack:"));
126
- console.log(chalk.gray(" tdk resource <name> --stack <stack-name>"));
127
- }
128
- }
129
-
130
- export function showCancelled(message?: string): void {
131
- console.log(chalk.yellow(message || "Cancelled."));
132
- }
133
-
134
- export function showCommandHeader(title: string): void {
135
- console.log(chalk.blue(`TDK ${title}\n`));
136
- }
137
-
138
- export function showAllSatisfyCondition(items: string, condition: string): void {
139
- console.log(chalk.green(`All ${items} are ${condition}!`));
140
- }
141
-
142
- /** Default width for ASCII boxes */
143
- export const DEFAULT_BOX_WIDTH = 62;
144
-
145
- export function formatBoxLine(char: string = "─", width: number = DEFAULT_BOX_WIDTH): string {
146
- return char.repeat(width);
147
- }
148
-
149
- export function formatCentered(text: string, width: number = DEFAULT_BOX_WIDTH - 2): string {
150
- const padding = Math.max(0, width - text.length);
151
- const left = Math.floor(padding / 2);
152
- const right = padding - left;
153
- return " ".repeat(left) + text + " ".repeat(right);
154
- }
155
-
156
- export function formatPadded(text: string, width: number): string {
157
- if (text.length > width) {
158
- return `${text.slice(0, width - 1)}…`;
159
- }
160
- return text.padEnd(width);
161
- }
162
-
163
- export function truncate(str: string, maxLength: number): string {
164
- if (str.length <= maxLength) return str;
165
- return `${str.slice(0, maxLength - 3)}...`;
166
- }
167
-
168
- export function showSuccess(message: string): void {
169
- console.log(chalk.green(`✓ ${message}`));
170
- }
171
-
172
- export function showStep(message: string): void {
173
- console.log(chalk.blue(message));
174
- }
175
-
176
- export function showDetail(message: string, indent = 2): void {
177
- console.log(chalk.gray(`${" ".repeat(indent)}${message}`));
178
- }
179
-
180
- export function formatBytes(bytes: number): string {
181
- if (bytes < 1024) return `${bytes} B`;
182
- if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
183
- return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
184
- }
185
-
186
- /**
187
- * Print a boxed header with title and optional subtitle.
188
- * Consolidates common box formatting patterns from networks.ts and other commands.
189
- * @param title - The main title to display
190
- * @param subtitle - Optional subtitle (e.g., domain info)
191
- * @param width - Box width (defaults to DEFAULT_BOX_WIDTH)
192
- */
193
- export function printBoxedHeader(
194
- title: string,
195
- subtitle?: string,
196
- width: number = DEFAULT_BOX_WIDTH,
197
- ): void {
198
- const innerWidth = width - 2;
199
- const line = "─".repeat(innerWidth);
200
-
201
- console.log();
202
- console.log(chalk.cyan(`╭${line}╮`));
203
- console.log(
204
- chalk.cyan("│") + chalk.bold.white(formatCentered(title, innerWidth)) + chalk.cyan("│"),
205
- );
206
-
207
- if (subtitle) {
208
- console.log(chalk.cyan(`├${line}┤`));
209
- console.log(
210
- chalk.cyan("│") + chalk.gray(formatCentered(subtitle, innerWidth)) + chalk.cyan("│"),
211
- );
212
- }
213
-
214
- console.log(chalk.cyan(`╰${line}╯`));
215
- }
@@ -1,53 +0,0 @@
1
- import { existsSync } from "node:fs";
2
- import { dirname, join, resolve } from "node:path";
3
- import { cwd } from "node:process";
4
- import packageJson from "../../package.json" with { type: "json" };
5
- import type { JsonObject, PackageInfo } from "../types/index.js";
6
-
7
- export function findProjectRoot(startDir: string = cwd()): string | null {
8
- let currentDir = resolve(startDir);
9
- const root = resolve("/");
10
-
11
- while (currentDir !== root) {
12
- if (existsSync(join(currentDir, ".tdk", "project.json"))) {
13
- return currentDir;
14
- }
15
-
16
- const parentDir = dirname(currentDir);
17
- if (parentDir === currentDir) {
18
- break;
19
- }
20
- currentDir = parentDir;
21
- }
22
-
23
- return null;
24
- }
25
-
26
- let packageCache: PackageInfo | null = null;
27
-
28
- function getPackageInfo(): PackageInfo {
29
- if (packageCache) {
30
- return packageCache;
31
- }
32
-
33
- // Imported JSON is bundled by Bun compile, unlike a runtime fs lookup from $bunfs.
34
- const parsed: unknown = packageJson;
35
-
36
- if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
37
- throw new Error("Invalid package.json: expected object");
38
- }
39
-
40
- const packageInfo = parsed as JsonObject;
41
-
42
- packageCache = {
43
- name: String(packageInfo.name ?? "@tdk-landscape/tdk-cli-core"),
44
- version: String(packageInfo.version ?? "0.0.0"),
45
- fullPackage: packageInfo,
46
- };
47
-
48
- return packageCache;
49
- }
50
-
51
- export function getPackageVersion(): string {
52
- return getPackageInfo().version;
53
- }