@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,628 +0,0 @@
1
- import { execSync } from "node:child_process";
2
- import { createHash } from "node:crypto";
3
- import { accessSync, constants, existsSync, readFileSync, realpathSync } from "node:fs";
4
- import { dirname, join, resolve } from "node:path";
5
- import { fileURLToPath } from "node:url";
6
- import chalk from "chalk";
7
- import { Command } from "commander";
8
- import ora from "ora";
9
- import { getErrorMessage, logVerbose, showErrorAndExit } from "../utils/errors.js";
10
- import { showCancelled } from "../utils/formatting.js";
11
- import { getPackageVersion } from "../utils/paths.js";
12
- import { promptConfirm } from "../utils/prompt.js";
13
-
14
- interface InstallInfo {
15
- method: "npm" | "bun" | "git" | "binary" | "unknown";
16
- path?: string;
17
- version?: string;
18
- }
19
-
20
- function isStandaloneBinary(tdkPath: string): boolean {
21
- try {
22
- const fileInfo = execSync(`file -b ${JSON.stringify(tdkPath)}`, { encoding: "utf-8" });
23
- return /Mach-O|ELF/.test(fileInfo);
24
- } catch (err: unknown) {
25
- logVerbose("Binary detection (file command) error", err);
26
- return false;
27
- }
28
- }
29
-
30
- function detectInstallation(): InstallInfo {
31
- try {
32
- const tdkPath = execSync("which tdk", { encoding: "utf-8" }).trim();
33
-
34
- // `readlink -f` is not available on macOS. Use Node's cross-platform
35
- // realpath implementation so standalone binaries are detected there too.
36
- const realPath = realpathSync(tdkPath);
37
- // If the real path contains tdk-cli and has .git, it's a linked git install
38
- if (realPath.includes("tdk-cli")) {
39
- const possibleGitRoot = resolve(realPath, "..", "..", "..");
40
- if (existsSync(join(possibleGitRoot, ".git"))) {
41
- return { method: "git", path: possibleGitRoot };
42
- }
43
- }
44
-
45
- if (tdkPath.includes("node_modules") || tdkPath.includes(".npm") || tdkPath.includes(".bun")) {
46
- if (tdkPath.includes(".bun")) {
47
- return { method: "bun", path: tdkPath };
48
- }
49
- return { method: "npm", path: tdkPath };
50
- }
51
-
52
- const cliRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..", "..", "..");
53
- if (existsSync(join(cliRoot, ".git"))) {
54
- return { method: "git", path: cliRoot };
55
- }
56
-
57
- // Standalone prebuilt binary from tdk-cli-releases (installed to e.g. /usr/local/bin),
58
- // not a node_modules/.bun link and not sitting inside a git checkout.
59
- if (isStandaloneBinary(realPath)) {
60
- return { method: "binary", path: realPath };
61
- }
62
-
63
- return { method: "unknown", path: tdkPath };
64
- } catch (err: unknown) {
65
- console.warn(chalk.yellow("⚠️ Could not detect installation method"));
66
- logVerbose("Installation detection error", err);
67
- return { method: "unknown" };
68
- }
69
- }
70
-
71
- const BINARY_RELEASE_REPO = "tdk-landscape/tdk-cli-releases";
72
-
73
- function binaryAssetName(): string | null {
74
- const osName =
75
- process.platform === "darwin" ? "darwin" : process.platform === "linux" ? "linux" : null;
76
- const archName = process.arch === "arm64" ? "arm64" : process.arch === "x64" ? "amd64" : null;
77
- if (!osName || !archName) return null;
78
- return `tdk-${osName}-${archName}`;
79
- }
80
-
81
- const ENGINE_ASSET_NAME = "tdk-cli-engine.tar.gz";
82
- const CHECKSUMS_ASSET_NAME = "checksums.txt";
83
-
84
- export interface BinaryRelease {
85
- tag: string;
86
- assetName: string;
87
- downloadUrl: string;
88
- engineDownloadUrl: string;
89
- checksumsUrl: string;
90
- }
91
-
92
- /** Parses `shasum -a 256` / `sha256sum` output ("<hash> <name>" or "<hash> *<name>"). */
93
- export function parseChecksums(text: string): Map<string, string> {
94
- const sums = new Map<string, string>();
95
- for (const line of text.split("\n")) {
96
- const match = line.trim().match(/^([0-9a-f]{64})\s+\*?(.+)$/i);
97
- if (match) sums.set(match[2].trim(), match[1].toLowerCase());
98
- }
99
- return sums;
100
- }
101
-
102
- /**
103
- * Throws unless `filePath` hashes to the checksum listed for `assetName`.
104
- * A missing entry is an error when `required`; otherwise it is skipped, so
105
- * releases published before an asset was added to checksums.txt (older
106
- * releases list only the binaries, not the engine tarball) still install.
107
- */
108
- function verifyChecksum(
109
- filePath: string,
110
- assetName: string,
111
- sums: Map<string, string>,
112
- required: boolean,
113
- ): void {
114
- const expected = sums.get(assetName);
115
- if (!expected) {
116
- if (required) throw new Error(`${CHECKSUMS_ASSET_NAME} has no entry for ${assetName}`);
117
- logVerbose(`${CHECKSUMS_ASSET_NAME} has no entry for ${assetName}; skipping verification`);
118
- return;
119
- }
120
- const actual = createHash("sha256").update(readFileSync(filePath)).digest("hex");
121
- if (actual !== expected) {
122
- throw new Error(`Checksum mismatch for ${assetName} (expected ${expected}, got ${actual})`);
123
- }
124
- }
125
-
126
- async function getLatestBinaryRelease(): Promise<BinaryRelease | null> {
127
- const assetName = binaryAssetName();
128
- if (!assetName) return null;
129
-
130
- try {
131
- const raw = execSync(
132
- `curl -fsSL https://api.github.com/repos/${BINARY_RELEASE_REPO}/releases/latest`,
133
- { encoding: "utf-8", timeout: 10000 },
134
- );
135
- const data = JSON.parse(raw) as { tag_name?: string };
136
- if (!data.tag_name) return null;
137
-
138
- return {
139
- tag: data.tag_name,
140
- assetName,
141
- downloadUrl: `https://github.com/${BINARY_RELEASE_REPO}/releases/download/${data.tag_name}/${assetName}`,
142
- engineDownloadUrl: `https://github.com/${BINARY_RELEASE_REPO}/releases/download/${data.tag_name}/${ENGINE_ASSET_NAME}`,
143
- checksumsUrl: `https://github.com/${BINARY_RELEASE_REPO}/releases/download/${data.tag_name}/${CHECKSUMS_ASSET_NAME}`,
144
- };
145
- } catch (err: unknown) {
146
- logVerbose("Binary release lookup error", err);
147
- return null;
148
- }
149
- }
150
-
151
- export function isWritable(path: string): boolean {
152
- try {
153
- accessSync(path, constants.W_OK);
154
- return true;
155
- } catch {
156
- return false;
157
- }
158
- }
159
-
160
- export async function upgradeViaBinary(tdkPath: string, release: BinaryRelease): Promise<boolean> {
161
- // Never shells out to sudo - if the install dir isn't user-writable, fail
162
- // fast with the manual curl command instead of downloading first and
163
- // elevating automatically. The user runs that curl themselves.
164
- const installDir = dirname(tdkPath);
165
- if (!isWritable(installDir)) {
166
- console.log(chalk.yellow(`\n🔒 ${installDir} isn't writable by your user.`));
167
- console.log(chalk.yellow("💡 Upgrade manually instead:"));
168
- console.log(chalk.cyan(` curl -fsSL -o ${tdkPath} ${release.downloadUrl}`));
169
- console.log(chalk.cyan(` chmod +x ${tdkPath}`));
170
- return false;
171
- }
172
-
173
- const spinner = ora(`Downloading ${release.assetName} (${release.tag})...`).start();
174
- // Download to /tmp first (both the binary and the engine bundle below) so a
175
- // failed network step can't leave a half-written binary at tdkPath.
176
- const tmpPath = `/tmp/tdk-upgrade-${release.assetName}`;
177
- const engineTmpPath = `/tmp/tdk-upgrade-engine-${release.tag}.tar.gz`;
178
- const engineDir = join(installDir, "tdk-cli");
179
-
180
- try {
181
- execSync(`curl -fsSL -o ${JSON.stringify(tmpPath)} ${JSON.stringify(release.downloadUrl)}`, {
182
- stdio: "pipe",
183
- timeout: 120000,
184
- });
185
- execSync(`chmod +x ${JSON.stringify(tmpPath)}`);
186
-
187
- // The compiled binary has no source checkout to find engine/ or
188
- // cli/templates/ in, so it looks for a tdk-cli/ folder next to itself
189
- // (see template-engine.ts loadTemplate() / vendorTdkExtension()).
190
- // `tdk upgrade` only used to swap the binary, leaving that folder
191
- // stale/missing after an upgrade - refresh it here too, every time,
192
- // the same way install.sh does on a fresh install.
193
- spinner.text = `Downloading bundled engine (${release.tag})...`;
194
- execSync(
195
- `curl -fsSL -o ${JSON.stringify(engineTmpPath)} ${JSON.stringify(release.engineDownloadUrl)}`,
196
- { stdio: "pipe", timeout: 120000 },
197
- );
198
-
199
- // Verify both downloads against the release's checksums.txt before
200
- // touching the installed binary or engine.
201
- spinner.text = `Verifying checksums (${release.tag})...`;
202
- const sums = parseChecksums(
203
- execSync(`curl -fsSL ${JSON.stringify(release.checksumsUrl)}`, {
204
- encoding: "utf-8",
205
- stdio: "pipe",
206
- timeout: 30000,
207
- }),
208
- );
209
- verifyChecksum(tmpPath, release.assetName, sums, true);
210
- verifyChecksum(engineTmpPath, ENGINE_ASSET_NAME, sums, false);
211
-
212
- execSync(`mv ${JSON.stringify(tmpPath)} ${JSON.stringify(tdkPath)}`);
213
- execSync(`rm -rf ${JSON.stringify(engineDir)}`);
214
- execSync(`mkdir -p ${JSON.stringify(engineDir)}`);
215
- execSync(
216
- `tar -xzf ${JSON.stringify(engineTmpPath)} -C ${JSON.stringify(engineDir)} --strip-components=1`,
217
- );
218
-
219
- spinner.succeed(`Upgraded to ${release.tag}`);
220
- return true;
221
- } catch (err: unknown) {
222
- spinner.fail(`Binary upgrade failed: ${getErrorMessage(err)}`);
223
- logVerbose("Binary upgrade error", err);
224
- console.log(chalk.yellow("\n💡 If this failed due to permissions, upgrade manually instead:"));
225
- console.log(chalk.cyan(` curl -fsSL -o ${tdkPath} ${release.downloadUrl}`));
226
- console.log(chalk.cyan(` chmod +x ${tdkPath}`));
227
- console.log(chalk.cyan(` rm -rf ${engineDir} && mkdir -p ${engineDir}`));
228
- console.log(
229
- chalk.cyan(
230
- ` curl -fsSL ${release.engineDownloadUrl} | tar -xzf - -C ${engineDir} --strip-components=1`,
231
- ),
232
- );
233
- return false;
234
- } finally {
235
- try {
236
- execSync(`rm -f ${JSON.stringify(tmpPath)} ${JSON.stringify(engineTmpPath)}`);
237
- } catch {
238
- // best-effort cleanup
239
- }
240
- }
241
- }
242
-
243
- function getCurrentVersion(): string {
244
- try {
245
- return getPackageVersion();
246
- } catch (err: unknown) {
247
- logVerbose("Version detection error", err);
248
- return "unknown";
249
- }
250
- }
251
-
252
- async function getLatestVersion(): Promise<string | null> {
253
- const spinner = ora("Checking for latest version...").start();
254
-
255
- try {
256
- const result = execSync("npm view @tdk-landscape/tdk-cli-core version", {
257
- encoding: "utf-8",
258
- timeout: 10000,
259
- }).trim();
260
- spinner.succeed(`Latest version: ${chalk.green(result)}`);
261
- return result;
262
- } catch (_err: unknown) {
263
- // npm registry failed - package not published yet
264
- spinner.warn("Package not yet published to npm registry");
265
- console.log(chalk.yellow("\n💡 For now, please upgrade manually from GitHub:"));
266
- console.log(chalk.cyan(" npm install -g github:tdk-landscape/tdk-cli-core"));
267
- console.log(chalk.cyan(" bun install -g github:tdk-landscape/tdk-cli-core"));
268
- console.log(chalk.gray("\n (npm package will be available soon)"));
269
- return null;
270
- }
271
- }
272
-
273
- async function upgradeViaNpm(): Promise<boolean> {
274
- const spinner = ora("Upgrading via npm...").start();
275
-
276
- try {
277
- execSync("npm install -g @tdk-landscape/tdk-cli-core@latest", {
278
- stdio: "inherit",
279
- timeout: 120000,
280
- });
281
- spinner.succeed("Upgraded successfully via npm");
282
- return true;
283
- } catch (err: unknown) {
284
- // npm registry failed (package may not exist or network issue) - try GitHub fallback
285
- spinner.text = "npm registry failed, trying GitHub...";
286
- logVerbose("npm registry error", err);
287
- try {
288
- execSync("npm install -g github:tdk-landscape/tdk-cli-core", {
289
- stdio: "inherit",
290
- timeout: 120000,
291
- });
292
- spinner.succeed("Upgraded successfully via GitHub");
293
- return true;
294
- } catch (err: unknown) {
295
- spinner.fail(`Upgrade failed: ${getErrorMessage(err)}`);
296
- return false;
297
- }
298
- }
299
- }
300
-
301
- async function upgradeViaBun(): Promise<boolean> {
302
- const spinner = ora("Upgrading via bun...").start();
303
-
304
- try {
305
- execSync("bun install -g @tdk-landscape/tdk-cli-core@latest", {
306
- stdio: "inherit",
307
- timeout: 120000,
308
- });
309
- spinner.succeed("Upgraded successfully via bun");
310
- return true;
311
- } catch (err: unknown) {
312
- // bun registry failed (package may not exist or network issue) - try GitHub fallback
313
- spinner.text = "bun registry failed, trying GitHub...";
314
- logVerbose("bun registry error", err);
315
- try {
316
- execSync("bun install -g github:tdk-landscape/tdk-cli-core", {
317
- stdio: "inherit",
318
- timeout: 120000,
319
- });
320
- spinner.succeed("Upgraded successfully via GitHub");
321
- return true;
322
- } catch (err: unknown) {
323
- spinner.fail(`Upgrade failed: ${getErrorMessage(err)}`);
324
- return false;
325
- }
326
- }
327
- }
328
-
329
- async function upgradeViaGit(path: string): Promise<boolean> {
330
- const spinner = ora("Pulling latest changes from git...").start();
331
-
332
- try {
333
- execSync("git rev-parse --git-dir", {
334
- cwd: path,
335
- stdio: "pipe",
336
- });
337
-
338
- spinner.text = "Fetching from origin...";
339
- execSync("git fetch origin", {
340
- cwd: path,
341
- stdio: "pipe",
342
- timeout: 30000,
343
- });
344
-
345
- const branch = execSync("git rev-parse --abbrev-ref HEAD", {
346
- cwd: path,
347
- encoding: "utf-8",
348
- }).trim();
349
-
350
- spinner.text = `Pulling latest on ${branch}...`;
351
- execSync(`git pull origin ${branch}`, {
352
- cwd: path,
353
- stdio: "pipe",
354
- timeout: 30000,
355
- });
356
-
357
- if (existsSync(join(path, "cli", "package.json"))) {
358
- spinner.text = "Rebuilding CLI...";
359
- execSync("bun install && bun run build", {
360
- cwd: join(path, "cli"),
361
- stdio: "pipe",
362
- timeout: 60000,
363
- });
364
- }
365
-
366
- spinner.text = "Re-linking CLI...";
367
- execSync("bun link --force", {
368
- cwd: join(path, "cli"),
369
- stdio: "pipe",
370
- timeout: 30000,
371
- });
372
-
373
- spinner.succeed("Upgraded successfully via git pull");
374
- return true;
375
- } catch (err: unknown) {
376
- spinner.fail(`Git upgrade failed: ${getErrorMessage(err)}`);
377
- return false;
378
- }
379
- }
380
-
381
- export const upgradeCommand = new Command("upgrade")
382
- .alias("update")
383
- .description("Upgrade TDK CLI to the latest version")
384
- .option("-f, --force", "Force upgrade even if already on latest", false)
385
- .option("--dry-run", "Show what would be upgraded without actually doing it", false)
386
- .option("-y, --yes", "Skip confirmation prompt", false)
387
- .action(async (options) => {
388
- console.log(chalk.cyan("🚀 TDK CLI Upgrade\n"));
389
-
390
- const currentVersion = getCurrentVersion();
391
- console.log(chalk.gray(`Current version: ${currentVersion}`));
392
-
393
- const installInfo = detectInstallation();
394
- console.log(chalk.gray(`Installation method: ${installInfo.method}`));
395
- console.log();
396
-
397
- if (installInfo.method === "unknown") {
398
- console.error(chalk.red("❌ Could not detect installation method"));
399
- console.log(chalk.yellow("\n💡 Manual upgrade (package not on npm yet, use GitHub):"));
400
- console.log(chalk.cyan(" npm: npm install -g github:tdk-landscape/tdk-cli-core"));
401
- console.log(chalk.cyan(" bun: bun install -g github:tdk-landscape/tdk-cli-core"));
402
- console.log(chalk.cyan(" git: cd /path/to/tdk-cli && git pull && bun link --force"));
403
- process.exit(1);
404
- }
405
-
406
- let latestVersion: string | null = null;
407
- let binaryRelease: BinaryRelease | null = null;
408
-
409
- if (installInfo.method === "binary" && installInfo.path) {
410
- console.log(chalk.blue("📦 Standalone binary installation detected"));
411
-
412
- binaryRelease = await getLatestBinaryRelease();
413
-
414
- if (!binaryRelease) {
415
- showErrorAndExit(
416
- `Could not determine latest release for this platform (${process.platform}/${process.arch})`,
417
- );
418
- }
419
-
420
- latestVersion = binaryRelease.tag.replace(/^v/, "").split("-")[0];
421
-
422
- if (latestVersion === currentVersion && !options.force) {
423
- console.log(chalk.green("\n✅ You are already on the latest version!"));
424
- console.log(chalk.gray(` ${currentVersion} (current) = ${latestVersion} (latest)`));
425
- process.exit(0);
426
- }
427
-
428
- if (latestVersion !== currentVersion) {
429
- console.log(chalk.yellow(`\n⬆️ Upgrade available: ${currentVersion} → ${latestVersion}`));
430
- } else if (options.force) {
431
- console.log(chalk.yellow(`\n🔄 Force upgrade requested (currently ${currentVersion})`));
432
- }
433
- } else if (installInfo.method === "git" && installInfo.path) {
434
- console.log(chalk.blue("📦 Git installation detected - will pull latest from origin"));
435
-
436
- try {
437
- execSync("git fetch origin", { cwd: installInfo.path, stdio: "pipe" });
438
- const localHash = execSync("git rev-parse HEAD", {
439
- cwd: installInfo.path,
440
- encoding: "utf-8",
441
- }).trim();
442
- const remoteHash = execSync("git rev-parse origin/main", {
443
- cwd: installInfo.path,
444
- encoding: "utf-8",
445
- }).trim();
446
-
447
- if (localHash === remoteHash && !options.force) {
448
- console.log(chalk.green("\n✅ Already up to date with origin/main!"));
449
- console.log(chalk.gray(` Current: ${localHash.substring(0, 7)}`));
450
- console.log(chalk.gray("\n Tip: Use --force to pull and rebuild anyway"));
451
- process.exit(0);
452
- }
453
-
454
- if (localHash !== remoteHash) {
455
- console.log(chalk.yellow(`\n⬆️ Updates available:`));
456
- console.log(chalk.gray(` Local: ${localHash.substring(0, 7)}`));
457
- console.log(chalk.gray(` Remote: ${remoteHash.substring(0, 7)}`));
458
- } else {
459
- console.log(chalk.yellow(`\n🔄 Force upgrade requested`));
460
- }
461
-
462
- latestVersion = remoteHash.substring(0, 7);
463
- } catch (err: unknown) {
464
- console.warn(chalk.yellow("⚠️ Could not check git remote, will attempt upgrade anyway"));
465
- logVerbose("Git remote check failed", err);
466
- latestVersion = "latest";
467
- }
468
- } else {
469
- latestVersion = await getLatestVersion();
470
-
471
- if (!latestVersion) {
472
- showErrorAndExit("Could not determine latest version");
473
- }
474
-
475
- if (currentVersion === latestVersion && !options.force) {
476
- console.log(chalk.green("\n✅ You are already on the latest version!"));
477
- console.log(chalk.gray(` ${currentVersion} (current) = ${latestVersion} (latest)`));
478
- process.exit(0);
479
- }
480
-
481
- if (currentVersion !== latestVersion) {
482
- console.log(chalk.yellow(`\n⬆️ Upgrade available: ${currentVersion} → ${latestVersion}`));
483
- } else if (options.force) {
484
- console.log(chalk.yellow(`\n🔄 Force upgrade requested (currently ${currentVersion})`));
485
- }
486
- }
487
-
488
- if (options.dryRun) {
489
- console.log(chalk.blue("\n📋 Dry run mode - would perform:"));
490
- console.log(chalk.gray(` Method: ${installInfo.method}`));
491
- if (installInfo.path) {
492
- console.log(chalk.gray(` Path: ${installInfo.path}`));
493
- }
494
- if (installInfo.method === "git") {
495
- console.log(
496
- chalk.gray(" Action: git pull origin main && bun install && bun link --force"),
497
- );
498
- } else if (installInfo.method === "binary" && binaryRelease) {
499
- console.log(
500
- chalk.gray(` Action: Download and replace with ${binaryRelease.downloadUrl}`),
501
- );
502
- console.log(
503
- chalk.gray(` Action: Refresh bundled engine from ${binaryRelease.engineDownloadUrl}`),
504
- );
505
- } else {
506
- console.log(chalk.gray(` Action: Upgrade to ${latestVersion}`));
507
- }
508
- console.log(chalk.yellow("\n (Not actually upgrading due to --dry-run)"));
509
- process.exit(0);
510
- }
511
-
512
- if (!options.yes) {
513
- console.log();
514
- const confirm = await promptConfirm({
515
- message: "Proceed with upgrade?",
516
- initial: true,
517
- });
518
-
519
- if (!confirm) {
520
- showCancelled();
521
- process.exit(0);
522
- }
523
- } else {
524
- console.log(chalk.gray("⚡ Auto-confirming (--yes flag)\n"));
525
- }
526
-
527
- console.log();
528
-
529
- let success = false;
530
-
531
- switch (installInfo.method) {
532
- case "npm":
533
- success = await upgradeViaNpm();
534
- break;
535
- case "bun":
536
- success = await upgradeViaBun();
537
- break;
538
- case "git":
539
- if (installInfo.path) {
540
- success = await upgradeViaGit(installInfo.path);
541
- }
542
- break;
543
- case "binary":
544
- if (installInfo.path && binaryRelease) {
545
- success = await upgradeViaBinary(installInfo.path, binaryRelease);
546
- }
547
- break;
548
- }
549
-
550
- if (!success) {
551
- console.error(chalk.red("\n❌ Upgrade failed"));
552
- console.log(
553
- chalk.yellow("\n💡 Try manual upgrade (use GitHub until npm package is published):"),
554
- );
555
- if (installInfo.method === "npm") {
556
- console.log(chalk.cyan(" npm install -g github:tdk-landscape/tdk-cli-core"));
557
- } else if (installInfo.method === "bun") {
558
- console.log(chalk.cyan(" bun install -g github:tdk-landscape/tdk-cli-core"));
559
- } else if (installInfo.method === "git") {
560
- console.log(chalk.cyan(` cd ${installInfo.path} && git pull && bun link --force`));
561
- } else if (installInfo.method === "binary" && binaryRelease && installInfo.path) {
562
- const engineDir = join(dirname(installInfo.path), "tdk-cli");
563
- console.log(
564
- chalk.cyan(` curl -fsSL -o ${installInfo.path} ${binaryRelease.downloadUrl}`),
565
- );
566
- console.log(chalk.cyan(` chmod +x ${installInfo.path}`));
567
- console.log(chalk.cyan(` rm -rf ${engineDir} && mkdir -p ${engineDir}`));
568
- console.log(
569
- chalk.cyan(
570
- ` curl -fsSL ${binaryRelease.engineDownloadUrl} | tar -xzf - -C ${engineDir} --strip-components=1`,
571
- ),
572
- );
573
- }
574
- process.exit(1);
575
- }
576
-
577
- console.log();
578
- const verifySpinner = ora("Verifying upgrade...").start();
579
-
580
- try {
581
- const newVersion = execSync("tdk version", { encoding: "utf-8" }).trim();
582
- verifySpinner.succeed(`Verified: now running ${chalk.green(newVersion)}`);
583
-
584
- console.log();
585
- console.log(chalk.green.bold("✨ Upgrade complete!"));
586
- console.log(chalk.gray(` Version: ${currentVersion} → ${newVersion}`));
587
-
588
- console.log();
589
- console.log(chalk.cyan.bold("📍 Installation Details:"));
590
- if (installInfo.method === "git" && installInfo.path) {
591
- console.log(chalk.gray(` Location: ${installInfo.path}`));
592
- console.log(chalk.gray(` Method: git clone + bun link`));
593
- } else {
594
- console.log(chalk.gray(` Method: ${installInfo.method}`));
595
- }
596
- console.log(
597
- chalk.gray(` Binary: ${execSync("which tdk", { encoding: "utf-8" }).trim()}`),
598
- );
599
-
600
- console.log();
601
- console.log(chalk.cyan.bold("🚀 Quick Start:"));
602
- console.log(chalk.white(` tdk --help Show all commands`));
603
- console.log(chalk.white(` tdk networks View service URLs`));
604
- console.log(chalk.white(` tdk doctor Check environment`));
605
-
606
- if (newVersion === currentVersion && !options.force) {
607
- console.log();
608
- console.log(
609
- chalk.yellow("💡 Tip: Version appears unchanged. You may need to restart your terminal."),
610
- );
611
- }
612
-
613
- console.log();
614
- console.log(chalk.green("Happy coding! 🎉"));
615
- } catch (err: unknown) {
616
- verifySpinner.warn("Could not verify new version");
617
- console.error(chalk.red(`Verification error: ${getErrorMessage(err)}`));
618
- console.log();
619
- console.log(chalk.yellow("⚠️ Upgrade status unknown - verification failed"));
620
- console.log();
621
- console.log(chalk.yellow("💡 Verify manually:"));
622
- console.log(chalk.white(" 1. Restart your terminal"));
623
- console.log(chalk.white(" 2. Run: tdk version"));
624
- if (installInfo.path) {
625
- console.log(chalk.white(` 3. Compare with: git -C ${installInfo.path} rev-parse HEAD`));
626
- }
627
- }
628
- });
@@ -1,9 +0,0 @@
1
- import { Command } from "commander";
2
- import { getPackageVersion } from "../utils/paths.js";
3
-
4
- export const versionCommand = new Command("version")
5
- .description("Display version number")
6
- .alias("v")
7
- .action(() => {
8
- console.log(getPackageVersion());
9
- });
@@ -1,21 +0,0 @@
1
- import type React from "react";
2
- import type { BaseTooltipProps } from "../types/index.js";
3
- import { BaseTooltip } from "./BaseTooltip.js";
4
-
5
- /**
6
- * Info tooltip variant with predefined accessibility styling.
7
- * Uses ℹ prefix and adds margin for better visibility.
8
- */
9
- export const AccessibleTooltip: React.FC<
10
- Pick<BaseTooltipProps, "content" | "shortcut" | "visible">
11
- > = ({ content, shortcut, visible }) => {
12
- return (
13
- <BaseTooltip
14
- content={content}
15
- shortcut={shortcut}
16
- visible={visible}
17
- prefix="ℹ "
18
- marginTop={1}
19
- />
20
- );
21
- };