@tdk-landscape/tdk-cli-core 1.3.52 → 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 (390) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +1 -1
  3. package/cli/dist/commands/config.js +1 -1
  4. package/cli/dist/commands/resource.js +1 -1
  5. package/cli/dist/generator/extension-fetch.js +16 -9
  6. package/cli/package.json +1 -1
  7. package/package.json +16 -1
  8. package/.claude/skills/layer-autoresearch/SKILL.md +0 -48
  9. package/.claude/skills/tdk-troubleshoot/SKILL.md +0 -222
  10. package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -40
  11. package/.github/ISSUE_TEMPLATE/config.yml +0 -8
  12. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -18
  13. package/.github/dependabot.yml +0 -33
  14. package/.github/pull_request_template.md +0 -5
  15. package/.github/workflows/ci.yml +0 -200
  16. package/.github/workflows/release-binaries.yml +0 -139
  17. package/.github/zizmor.yml +0 -9
  18. package/.pre-commit-config.yaml +0 -57
  19. package/CODE_OF_CONDUCT.md +0 -9
  20. package/CONTRIBUTING.md +0 -42
  21. package/Makefile +0 -92
  22. package/SECURITY.md +0 -17
  23. package/benchmarks/results/container-scale-2026-09-25T20-54-49-736Z.json +0 -45
  24. package/benchmarks/results/container-scale-2026-09-25T21-01-20-540Z.json +0 -150
  25. package/benchmarks/results/container-scale-2026-09-25T21-15-01-441Z.json +0 -73
  26. package/benchmarks/results/container-scale-2026-09-25T22-09-01-630Z.json +0 -77
  27. package/benchmarks/results/container-scale-2026-09-25T22-18-28-371Z.json +0 -202
  28. package/cli/AGENTS.md +0 -390
  29. package/cli/DESIGN.md +0 -735
  30. package/cli/README.md +0 -292
  31. package/cli/biome.json +0 -40
  32. package/cli/dependency-graph.svg +0 -1135
  33. package/cli/dist/cli.d.ts +0 -3
  34. package/cli/dist/cli.d.ts.map +0 -1
  35. package/cli/dist/cli.js.map +0 -1
  36. package/cli/dist/commands/completion.d.ts +0 -3
  37. package/cli/dist/commands/completion.d.ts.map +0 -1
  38. package/cli/dist/commands/completion.js.map +0 -1
  39. package/cli/dist/commands/config.d.ts +0 -3
  40. package/cli/dist/commands/config.d.ts.map +0 -1
  41. package/cli/dist/commands/config.js.map +0 -1
  42. package/cli/dist/commands/doctor.d.ts +0 -19
  43. package/cli/dist/commands/doctor.d.ts.map +0 -1
  44. package/cli/dist/commands/doctor.js.map +0 -1
  45. package/cli/dist/commands/down.d.ts +0 -3
  46. package/cli/dist/commands/down.d.ts.map +0 -1
  47. package/cli/dist/commands/down.js.map +0 -1
  48. package/cli/dist/commands/help.d.ts +0 -2
  49. package/cli/dist/commands/help.d.ts.map +0 -1
  50. package/cli/dist/commands/help.js.map +0 -1
  51. package/cli/dist/commands/networks.d.ts +0 -3
  52. package/cli/dist/commands/networks.d.ts.map +0 -1
  53. package/cli/dist/commands/networks.js.map +0 -1
  54. package/cli/dist/commands/project.d.ts +0 -9
  55. package/cli/dist/commands/project.d.ts.map +0 -1
  56. package/cli/dist/commands/project.js.map +0 -1
  57. package/cli/dist/commands/projects.d.ts +0 -3
  58. package/cli/dist/commands/projects.d.ts.map +0 -1
  59. package/cli/dist/commands/projects.js.map +0 -1
  60. package/cli/dist/commands/resource.d.ts +0 -69
  61. package/cli/dist/commands/resource.d.ts.map +0 -1
  62. package/cli/dist/commands/resource.js.map +0 -1
  63. package/cli/dist/commands/resources.d.ts +0 -3
  64. package/cli/dist/commands/resources.d.ts.map +0 -1
  65. package/cli/dist/commands/resources.js.map +0 -1
  66. package/cli/dist/commands/stack.d.ts +0 -3
  67. package/cli/dist/commands/stack.d.ts.map +0 -1
  68. package/cli/dist/commands/stack.js.map +0 -1
  69. package/cli/dist/commands/stacks.d.ts +0 -3
  70. package/cli/dist/commands/stacks.d.ts.map +0 -1
  71. package/cli/dist/commands/stacks.js.map +0 -1
  72. package/cli/dist/commands/status.d.ts +0 -3
  73. package/cli/dist/commands/status.d.ts.map +0 -1
  74. package/cli/dist/commands/status.js.map +0 -1
  75. package/cli/dist/commands/ui.d.ts +0 -3
  76. package/cli/dist/commands/ui.d.ts.map +0 -1
  77. package/cli/dist/commands/ui.js.map +0 -1
  78. package/cli/dist/commands/up.d.ts +0 -3
  79. package/cli/dist/commands/up.d.ts.map +0 -1
  80. package/cli/dist/commands/up.js.map +0 -1
  81. package/cli/dist/commands/upgrade.d.ts +0 -14
  82. package/cli/dist/commands/upgrade.d.ts.map +0 -1
  83. package/cli/dist/commands/upgrade.js.map +0 -1
  84. package/cli/dist/commands/version.d.ts +0 -3
  85. package/cli/dist/commands/version.d.ts.map +0 -1
  86. package/cli/dist/commands/version.js.map +0 -1
  87. package/cli/dist/components/Accessible.d.ts +0 -8
  88. package/cli/dist/components/Accessible.d.ts.map +0 -1
  89. package/cli/dist/components/Accessible.js.map +0 -1
  90. package/cli/dist/components/BaseTooltip.d.ts +0 -4
  91. package/cli/dist/components/BaseTooltip.d.ts.map +0 -1
  92. package/cli/dist/components/BaseTooltip.js.map +0 -1
  93. package/cli/dist/components/DetailPanel.d.ts +0 -4
  94. package/cli/dist/components/DetailPanel.d.ts.map +0 -1
  95. package/cli/dist/components/DetailPanel.js.map +0 -1
  96. package/cli/dist/components/FileTree.d.ts +0 -4
  97. package/cli/dist/components/FileTree.d.ts.map +0 -1
  98. package/cli/dist/components/FileTree.js.map +0 -1
  99. package/cli/dist/components/ResourceSelectInput.d.ts +0 -4
  100. package/cli/dist/components/ResourceSelectInput.d.ts.map +0 -1
  101. package/cli/dist/components/ResourceSelectInput.js.map +0 -1
  102. package/cli/dist/components/ResourceTable.d.ts +0 -4
  103. package/cli/dist/components/ResourceTable.d.ts.map +0 -1
  104. package/cli/dist/components/ResourceTable.js.map +0 -1
  105. package/cli/dist/components/TabBar.d.ts +0 -4
  106. package/cli/dist/components/TabBar.d.ts.map +0 -1
  107. package/cli/dist/components/TabBar.js.map +0 -1
  108. package/cli/dist/components/Tooltip.d.ts +0 -12
  109. package/cli/dist/components/Tooltip.d.ts.map +0 -1
  110. package/cli/dist/components/Tooltip.js.map +0 -1
  111. package/cli/dist/components/index.d.ts +0 -8
  112. package/cli/dist/components/index.d.ts.map +0 -1
  113. package/cli/dist/components/index.js.map +0 -1
  114. package/cli/dist/config/platform-standards.d.ts +0 -159
  115. package/cli/dist/config/platform-standards.d.ts.map +0 -1
  116. package/cli/dist/config/platform-standards.js.map +0 -1
  117. package/cli/dist/generator/extension-fetch.d.ts +0 -25
  118. package/cli/dist/generator/extension-fetch.d.ts.map +0 -1
  119. package/cli/dist/generator/extension-fetch.js.map +0 -1
  120. package/cli/dist/generator/template-engine.d.ts +0 -62
  121. package/cli/dist/generator/template-engine.d.ts.map +0 -1
  122. package/cli/dist/generator/template-engine.js.map +0 -1
  123. package/cli/dist/index.d.ts +0 -11
  124. package/cli/dist/index.d.ts.map +0 -1
  125. package/cli/dist/index.js.map +0 -1
  126. package/cli/dist/types/index.d.ts +0 -257
  127. package/cli/dist/types/index.d.ts.map +0 -1
  128. package/cli/dist/types/index.js.map +0 -1
  129. package/cli/dist/utils/cache.d.ts +0 -19
  130. package/cli/dist/utils/cache.d.ts.map +0 -1
  131. package/cli/dist/utils/cache.js.map +0 -1
  132. package/cli/dist/utils/command-helpers.d.ts +0 -17
  133. package/cli/dist/utils/command-helpers.d.ts.map +0 -1
  134. package/cli/dist/utils/command-helpers.js.map +0 -1
  135. package/cli/dist/utils/constants.d.ts +0 -53
  136. package/cli/dist/utils/constants.d.ts.map +0 -1
  137. package/cli/dist/utils/constants.js.map +0 -1
  138. package/cli/dist/utils/discovery-context.d.ts +0 -4
  139. package/cli/dist/utils/discovery-context.d.ts.map +0 -1
  140. package/cli/dist/utils/discovery-context.js.map +0 -1
  141. package/cli/dist/utils/docker.d.ts +0 -4
  142. package/cli/dist/utils/docker.d.ts.map +0 -1
  143. package/cli/dist/utils/docker.js.map +0 -1
  144. package/cli/dist/utils/doctor-runtime.d.ts +0 -81
  145. package/cli/dist/utils/doctor-runtime.d.ts.map +0 -1
  146. package/cli/dist/utils/doctor-runtime.js.map +0 -1
  147. package/cli/dist/utils/env-validator.d.ts +0 -15
  148. package/cli/dist/utils/env-validator.d.ts.map +0 -1
  149. package/cli/dist/utils/env-validator.js.map +0 -1
  150. package/cli/dist/utils/errors.d.ts +0 -31
  151. package/cli/dist/utils/errors.d.ts.map +0 -1
  152. package/cli/dist/utils/errors.js.map +0 -1
  153. package/cli/dist/utils/file-helpers.d.ts +0 -14
  154. package/cli/dist/utils/file-helpers.d.ts.map +0 -1
  155. package/cli/dist/utils/file-helpers.js.map +0 -1
  156. package/cli/dist/utils/formatting.d.ts +0 -30
  157. package/cli/dist/utils/formatting.d.ts.map +0 -1
  158. package/cli/dist/utils/formatting.js.map +0 -1
  159. package/cli/dist/utils/paths.d.ts +0 -3
  160. package/cli/dist/utils/paths.d.ts.map +0 -1
  161. package/cli/dist/utils/paths.js.map +0 -1
  162. package/cli/dist/utils/port-assignment.d.ts +0 -6
  163. package/cli/dist/utils/port-assignment.d.ts.map +0 -1
  164. package/cli/dist/utils/port-assignment.js.map +0 -1
  165. package/cli/dist/utils/project-features.d.ts +0 -23
  166. package/cli/dist/utils/project-features.d.ts.map +0 -1
  167. package/cli/dist/utils/project-features.js.map +0 -1
  168. package/cli/dist/utils/project-templates.d.ts +0 -7
  169. package/cli/dist/utils/project-templates.d.ts.map +0 -1
  170. package/cli/dist/utils/project-templates.js.map +0 -1
  171. package/cli/dist/utils/prompt.d.ts +0 -28
  172. package/cli/dist/utils/prompt.d.ts.map +0 -1
  173. package/cli/dist/utils/prompt.js.map +0 -1
  174. package/cli/dist/utils/resource-features.d.ts +0 -29
  175. package/cli/dist/utils/resource-features.d.ts.map +0 -1
  176. package/cli/dist/utils/resource-features.js.map +0 -1
  177. package/cli/dist/utils/service-urls.d.ts +0 -30
  178. package/cli/dist/utils/service-urls.d.ts.map +0 -1
  179. package/cli/dist/utils/service-urls.js.map +0 -1
  180. package/cli/dist/utils/services.d.ts +0 -18
  181. package/cli/dist/utils/services.d.ts.map +0 -1
  182. package/cli/dist/utils/services.js.map +0 -1
  183. package/cli/dist/utils/stack-features.d.ts +0 -22
  184. package/cli/dist/utils/stack-features.d.ts.map +0 -1
  185. package/cli/dist/utils/stack-features.js.map +0 -1
  186. package/cli/dist/utils/tar.d.ts +0 -7
  187. package/cli/dist/utils/tar.d.ts.map +0 -1
  188. package/cli/dist/utils/tar.js.map +0 -1
  189. package/cli/dist/utils/tilt.d.ts +0 -20
  190. package/cli/dist/utils/tilt.d.ts.map +0 -1
  191. package/cli/dist/utils/tilt.js.map +0 -1
  192. package/cli/dist/utils/validation.d.ts +0 -16
  193. package/cli/dist/utils/validation.d.ts.map +0 -1
  194. package/cli/dist/utils/validation.js.map +0 -1
  195. package/cli/knip.json +0 -6
  196. package/cli/pnpm-lock.yaml +0 -2305
  197. package/cli/pnpm-workspace.yaml +0 -2
  198. package/cli/src/cli.ts +0 -72
  199. package/cli/src/commands/__tests__/always-enabled-infra.test.ts +0 -109
  200. package/cli/src/commands/__tests__/config.test.ts +0 -146
  201. package/cli/src/commands/__tests__/doctor.test.ts +0 -730
  202. package/cli/src/commands/__tests__/error-handling.test.ts +0 -78
  203. package/cli/src/commands/__tests__/phases-model.test.ts +0 -161
  204. package/cli/src/commands/__tests__/project-resource-features-e2e.test.ts +0 -187
  205. package/cli/src/commands/__tests__/project.test.ts +0 -68
  206. package/cli/src/commands/__tests__/resource.test.ts +0 -226
  207. package/cli/src/commands/__tests__/saas-starter-integration.test.ts +0 -194
  208. package/cli/src/commands/__tests__/stack-features-e2e.test.ts +0 -135
  209. package/cli/src/commands/__tests__/upgrade.test.ts +0 -198
  210. package/cli/src/commands/completion.ts +0 -300
  211. package/cli/src/commands/config.ts +0 -299
  212. package/cli/src/commands/doctor.ts +0 -926
  213. package/cli/src/commands/down.ts +0 -37
  214. package/cli/src/commands/help.ts +0 -143
  215. package/cli/src/commands/networks-design.md +0 -80
  216. package/cli/src/commands/networks.ts +0 -332
  217. package/cli/src/commands/project.ts +0 -456
  218. package/cli/src/commands/projects.ts +0 -82
  219. package/cli/src/commands/resource.ts +0 -652
  220. package/cli/src/commands/resources.ts +0 -95
  221. package/cli/src/commands/stack.ts +0 -128
  222. package/cli/src/commands/stacks.ts +0 -52
  223. package/cli/src/commands/status.ts +0 -88
  224. package/cli/src/commands/ui.tsx +0 -843
  225. package/cli/src/commands/up.ts +0 -169
  226. package/cli/src/commands/upgrade.ts +0 -628
  227. package/cli/src/commands/version.ts +0 -9
  228. package/cli/src/components/Accessible.tsx +0 -21
  229. package/cli/src/components/BaseTooltip.tsx +0 -66
  230. package/cli/src/components/DetailPanel.tsx +0 -146
  231. package/cli/src/components/FileTree.tsx +0 -89
  232. package/cli/src/components/ResourceSelectInput.tsx +0 -30
  233. package/cli/src/components/ResourceTable.tsx +0 -78
  234. package/cli/src/components/TabBar.tsx +0 -53
  235. package/cli/src/components/Tooltip.tsx +0 -11
  236. package/cli/src/components/index.ts +0 -7
  237. package/cli/src/config/platform-standards.test.ts +0 -11
  238. package/cli/src/config/platform-standards.ts +0 -196
  239. package/cli/src/generator/__tests__/extension-fetch.test.ts +0 -242
  240. package/cli/src/generator/__tests__/template-engine.test.ts +0 -70
  241. package/cli/src/generator/extension-fetch.ts +0 -286
  242. package/cli/src/generator/template-engine.ts +0 -752
  243. package/cli/src/index.ts +0 -86
  244. package/cli/src/templates.d.ts +0 -4
  245. package/cli/src/types/index.ts +0 -353
  246. package/cli/src/utils/__tests__/cache.test.ts +0 -98
  247. package/cli/src/utils/__tests__/formatting.test.ts +0 -170
  248. package/cli/src/utils/__tests__/paths.test.ts +0 -180
  249. package/cli/src/utils/__tests__/port-assignment.test.ts +0 -121
  250. package/cli/src/utils/__tests__/service-urls.test.ts +0 -174
  251. package/cli/src/utils/__tests__/services.test.ts +0 -531
  252. package/cli/src/utils/__tests__/tilt.test.ts +0 -172
  253. package/cli/src/utils/__tests__/validation.test.ts +0 -148
  254. package/cli/src/utils/cache.ts +0 -76
  255. package/cli/src/utils/command-helpers.ts +0 -54
  256. package/cli/src/utils/constants.ts +0 -130
  257. package/cli/src/utils/discovery-context.ts +0 -49
  258. package/cli/src/utils/docker.ts +0 -20
  259. package/cli/src/utils/doctor-runtime.ts +0 -644
  260. package/cli/src/utils/env-validator.ts +0 -139
  261. package/cli/src/utils/errors.ts +0 -168
  262. package/cli/src/utils/file-helpers.ts +0 -62
  263. package/cli/src/utils/formatting.ts +0 -215
  264. package/cli/src/utils/paths.ts +0 -53
  265. package/cli/src/utils/port-assignment.ts +0 -106
  266. package/cli/src/utils/project-features.ts +0 -118
  267. package/cli/src/utils/project-templates.ts +0 -29
  268. package/cli/src/utils/prompt.ts +0 -128
  269. package/cli/src/utils/resource-features.ts +0 -215
  270. package/cli/src/utils/service-urls.ts +0 -124
  271. package/cli/src/utils/services.ts +0 -364
  272. package/cli/src/utils/stack-features.ts +0 -30
  273. package/cli/src/utils/tar.ts +0 -24
  274. package/cli/src/utils/tilt.ts +0 -133
  275. package/cli/src/utils/validation.ts +0 -67
  276. package/cli/tsconfig.json +0 -25
  277. package/cli/tsconfig.typecheck.json +0 -8
  278. package/docs/FEATURES.md +0 -279
  279. package/docs/demo.svg +0 -217
  280. package/engine/docs/AUTODISCOVERY_TEST.md +0 -182
  281. package/engine/docs/C4-ARCHITECTURE-operations.md +0 -396
  282. package/engine/docs/C4-ARCHITECTURE-overview.md +0 -284
  283. package/engine/docs/C4-ARCHITECTURE.md +0 -17
  284. package/engine/docs/GOLDEN_IMAGE_INTEGRATION.md +0 -349
  285. package/engine/docs/MANIFEST_DRIVEN_ARCHITECTURE.md +0 -357
  286. package/engine/docs/README.md +0 -284
  287. package/install.sh +0 -19
  288. package/knip.json +0 -10
  289. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/.openspec.yaml +0 -2
  290. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/design.md +0 -102
  291. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/proposal.md +0 -31
  292. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-notifications/spec.md +0 -48
  293. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-orchestration/spec.md +0 -63
  294. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-troubleshooting/spec.md +0 -56
  295. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/tasks.md +0 -61
  296. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/.openspec.yaml +0 -2
  297. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/design.md +0 -114
  298. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/proposal.md +0 -32
  299. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/manifest-field-migration/spec.md +0 -20
  300. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/resource-terminology-standard/spec.md +0 -20
  301. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/stack-terminology-standard/spec.md +0 -20
  302. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/tasks.md +0 -194
  303. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/.openspec.yaml +0 -2
  304. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/design.md +0 -111
  305. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/proposal.md +0 -33
  306. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/function-naming-alignment/spec.md +0 -12
  307. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/optional-parameter-patterns/spec.md +0 -18
  308. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-documentation/spec.md +0 -16
  309. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-naming-consistency/spec.md +0 -12
  310. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-ordering-standard/spec.md +0 -12
  311. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/tasks.md +0 -194
  312. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/.openspec.yaml +0 -2
  313. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/design.md +0 -84
  314. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/proposal.md +0 -31
  315. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/codebase-audit/spec.md +0 -27
  316. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/dead-code-cleanup/spec.md +0 -27
  317. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/test-gap-fill/spec.md +0 -23
  318. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/todo-resolution/spec.md +0 -27
  319. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/tasks.md +0 -39
  320. package/openspec/changes/archive/2026-06-25-landscape-consolidation/.openspec.yaml +0 -2
  321. package/openspec/changes/archive/2026-06-25-landscape-consolidation/design.md +0 -80
  322. package/openspec/changes/archive/2026-06-25-landscape-consolidation/proposal.md +0 -40
  323. package/openspec/changes/archive/2026-06-25-landscape-consolidation/spec.md +0 -52
  324. package/openspec/changes/archive/2026-06-25-landscape-consolidation/tasks.md +0 -51
  325. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/.openspec.yaml +0 -2
  326. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/design.md +0 -43
  327. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/proposal.md +0 -29
  328. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/specs/self-contained-generated-projects/spec.md +0 -67
  329. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/tasks.md +0 -27
  330. package/openspec/changes/optimize-runtime-docker-layers/.openspec.yaml +0 -3
  331. package/openspec/changes/optimize-runtime-docker-layers/design.md +0 -81
  332. package/openspec/changes/optimize-runtime-docker-layers/proposal.md +0 -44
  333. package/openspec/changes/optimize-runtime-docker-layers/specs/runtime-container-footprint/spec.md +0 -79
  334. package/openspec/changes/optimize-runtime-docker-layers/tasks.md +0 -36
  335. package/openspec/changes/prioritized-cold-start/.openspec.yaml +0 -4
  336. package/openspec/changes/prioritized-cold-start/design.md +0 -137
  337. package/openspec/changes/prioritized-cold-start/proposal.md +0 -41
  338. package/openspec/changes/prioritized-cold-start/specs/on-demand-resource-startup/spec.md +0 -98
  339. package/openspec/changes/prioritized-cold-start/tasks.md +0 -69
  340. package/openspec/config.yaml +0 -1
  341. package/openspec/specs/manifest-field-migration/spec.md +0 -24
  342. package/openspec/specs/resource-terminology-standard/spec.md +0 -24
  343. package/openspec/specs/self-contained-generated-projects/spec.md +0 -67
  344. package/openspec/specs/stack-terminology-standard/spec.md +0 -24
  345. package/platform/services/platform/proxy/service.yaml +0 -14
  346. package/scripts/audit-codebase.sh +0 -213
  347. package/scripts/autoresearch/layer-eval.sh +0 -65
  348. package/scripts/benchmark/README.md +0 -25
  349. package/scripts/benchmark/container-scale.ts +0 -503
  350. package/scripts/benchmark/pre-release-gate.sh +0 -9
  351. package/scripts/install-git-hooks.sh +0 -14
  352. package/scripts/measure-idle-footprint.sh +0 -58
  353. package/scripts/record-demo.sh +0 -43
  354. package/scripts/release-binaries.sh +0 -97
  355. package/scripts/setup-pre-commit.sh +0 -33
  356. package/scripts/stage-npm-engine.sh +0 -36
  357. package/tests/tilt-engine/__init__.py +0 -5
  358. package/tests/tilt-engine/conftest.py +0 -182
  359. package/tests/tilt-engine/fixtures/appointment-frontend-service.json +0 -11
  360. package/tests/tilt-engine/fixtures/identity-backend-service.json +0 -12
  361. package/tests/tilt-engine/fixtures/invalid-service.json +0 -4
  362. package/tests/tilt-engine/test_agents_md_generator.py +0 -341
  363. package/tests/tilt-engine/test_agents_md_integration.py +0 -378
  364. package/tests/tilt-engine/test_cache_operations.py +0 -181
  365. package/tests/tilt-engine/test_cache_persistence.py +0 -142
  366. package/tests/tilt-engine/test_code_executor.py +0 -152
  367. package/tests/tilt-engine/test_code_viewer.py +0 -127
  368. package/tests/tilt-engine/test_compose_port_anchors.py +0 -310
  369. package/tests/tilt-engine/test_config_inspector.py +0 -162
  370. package/tests/tilt-engine/test_daemon_focus_mode.py +0 -89
  371. package/tests/tilt-engine/test_daemon_polling.py +0 -122
  372. package/tests/tilt-engine/test_daemon_registration.py +0 -115
  373. package/tests/tilt-engine/test_daemon_validation.py +0 -107
  374. package/tests/tilt-engine/test_docker_generator_bugs.py +0 -493
  375. package/tests/tilt-engine/test_docker_prune.py +0 -119
  376. package/tests/tilt-engine/test_dockerignore_path_bug.py +0 -82
  377. package/tests/tilt-engine/test_file_browser.py +0 -193
  378. package/tests/tilt-engine/test_frontend_basepath_manifest.py +0 -27
  379. package/tests/tilt-engine/test_health_dependencies.py +0 -130
  380. package/tests/tilt-engine/test_health_endpoints.py +0 -118
  381. package/tests/tilt-engine/test_health_tilt_ui.py +0 -85
  382. package/tests/tilt-engine/test_runtime_container_footprint.py +0 -162
  383. package/tests/tilt-engine/test_sablier_defer_start.py +0 -237
  384. package/tests/tilt-engine/test_safety_aliases.py +0 -84
  385. package/tests/tilt-engine/test_snapshot_diff.py +0 -136
  386. package/tests/tilt-engine/test_snapshot_persistence.py +0 -163
  387. package/tests/tilt-engine/test_snapshot_scanning.py +0 -123
  388. package/tests/tilt-engine/test_standalone_project_boot.py +0 -61
  389. package/tests/tilt-engine/test_standalone_traefik.py +0 -160
  390. 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
- }