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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (392) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +1 -1
  3. package/cli/dist/commands/doctor.js +21 -3
  4. package/cli/dist/commands/upgrade.js +7 -7
  5. package/cli/dist/generator/extension-fetch.js +16 -9
  6. package/cli/dist/utils/spinner.js +39 -0
  7. package/cli/package.json +1 -2
  8. package/package.json +16 -2
  9. package/.claude/skills/layer-autoresearch/SKILL.md +0 -48
  10. package/.claude/skills/tdk-troubleshoot/SKILL.md +0 -222
  11. package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -40
  12. package/.github/ISSUE_TEMPLATE/config.yml +0 -11
  13. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -18
  14. package/.github/ISSUE_TEMPLATE/premium_license.yml +0 -43
  15. package/.github/dependabot.yml +0 -33
  16. package/.github/pull_request_template.md +0 -5
  17. package/.github/workflows/ci.yml +0 -200
  18. package/.github/workflows/release-binaries.yml +0 -139
  19. package/.github/zizmor.yml +0 -9
  20. package/.pre-commit-config.yaml +0 -57
  21. package/CODE_OF_CONDUCT.md +0 -9
  22. package/CONTRIBUTING.md +0 -42
  23. package/Makefile +0 -92
  24. package/SECURITY.md +0 -17
  25. package/benchmarks/results/container-scale-2026-09-25T20-54-49-736Z.json +0 -45
  26. package/benchmarks/results/container-scale-2026-09-25T21-01-20-540Z.json +0 -150
  27. package/benchmarks/results/container-scale-2026-09-25T21-15-01-441Z.json +0 -73
  28. package/benchmarks/results/container-scale-2026-09-25T22-09-01-630Z.json +0 -77
  29. package/benchmarks/results/container-scale-2026-09-25T22-18-28-371Z.json +0 -202
  30. package/cli/AGENTS.md +0 -390
  31. package/cli/DESIGN.md +0 -735
  32. package/cli/README.md +0 -292
  33. package/cli/biome.json +0 -40
  34. package/cli/dependency-graph.svg +0 -1135
  35. package/cli/dist/cli.d.ts +0 -3
  36. package/cli/dist/cli.d.ts.map +0 -1
  37. package/cli/dist/cli.js.map +0 -1
  38. package/cli/dist/commands/completion.d.ts +0 -3
  39. package/cli/dist/commands/completion.d.ts.map +0 -1
  40. package/cli/dist/commands/completion.js.map +0 -1
  41. package/cli/dist/commands/config.d.ts +0 -3
  42. package/cli/dist/commands/config.d.ts.map +0 -1
  43. package/cli/dist/commands/config.js.map +0 -1
  44. package/cli/dist/commands/doctor.d.ts +0 -19
  45. package/cli/dist/commands/doctor.d.ts.map +0 -1
  46. package/cli/dist/commands/doctor.js.map +0 -1
  47. package/cli/dist/commands/down.d.ts +0 -3
  48. package/cli/dist/commands/down.d.ts.map +0 -1
  49. package/cli/dist/commands/down.js.map +0 -1
  50. package/cli/dist/commands/help.d.ts +0 -2
  51. package/cli/dist/commands/help.d.ts.map +0 -1
  52. package/cli/dist/commands/help.js.map +0 -1
  53. package/cli/dist/commands/networks.d.ts +0 -3
  54. package/cli/dist/commands/networks.d.ts.map +0 -1
  55. package/cli/dist/commands/networks.js.map +0 -1
  56. package/cli/dist/commands/project.d.ts +0 -9
  57. package/cli/dist/commands/project.d.ts.map +0 -1
  58. package/cli/dist/commands/project.js.map +0 -1
  59. package/cli/dist/commands/projects.d.ts +0 -3
  60. package/cli/dist/commands/projects.d.ts.map +0 -1
  61. package/cli/dist/commands/projects.js.map +0 -1
  62. package/cli/dist/commands/resource.d.ts +0 -69
  63. package/cli/dist/commands/resource.d.ts.map +0 -1
  64. package/cli/dist/commands/resource.js.map +0 -1
  65. package/cli/dist/commands/resources.d.ts +0 -3
  66. package/cli/dist/commands/resources.d.ts.map +0 -1
  67. package/cli/dist/commands/resources.js.map +0 -1
  68. package/cli/dist/commands/stack.d.ts +0 -3
  69. package/cli/dist/commands/stack.d.ts.map +0 -1
  70. package/cli/dist/commands/stack.js.map +0 -1
  71. package/cli/dist/commands/stacks.d.ts +0 -3
  72. package/cli/dist/commands/stacks.d.ts.map +0 -1
  73. package/cli/dist/commands/stacks.js.map +0 -1
  74. package/cli/dist/commands/status.d.ts +0 -3
  75. package/cli/dist/commands/status.d.ts.map +0 -1
  76. package/cli/dist/commands/status.js.map +0 -1
  77. package/cli/dist/commands/ui.d.ts +0 -3
  78. package/cli/dist/commands/ui.d.ts.map +0 -1
  79. package/cli/dist/commands/ui.js.map +0 -1
  80. package/cli/dist/commands/up.d.ts +0 -3
  81. package/cli/dist/commands/up.d.ts.map +0 -1
  82. package/cli/dist/commands/up.js.map +0 -1
  83. package/cli/dist/commands/upgrade.d.ts +0 -14
  84. package/cli/dist/commands/upgrade.d.ts.map +0 -1
  85. package/cli/dist/commands/upgrade.js.map +0 -1
  86. package/cli/dist/commands/version.d.ts +0 -3
  87. package/cli/dist/commands/version.d.ts.map +0 -1
  88. package/cli/dist/commands/version.js.map +0 -1
  89. package/cli/dist/components/Accessible.d.ts +0 -8
  90. package/cli/dist/components/Accessible.d.ts.map +0 -1
  91. package/cli/dist/components/Accessible.js.map +0 -1
  92. package/cli/dist/components/BaseTooltip.d.ts +0 -4
  93. package/cli/dist/components/BaseTooltip.d.ts.map +0 -1
  94. package/cli/dist/components/BaseTooltip.js.map +0 -1
  95. package/cli/dist/components/DetailPanel.d.ts +0 -4
  96. package/cli/dist/components/DetailPanel.d.ts.map +0 -1
  97. package/cli/dist/components/DetailPanel.js.map +0 -1
  98. package/cli/dist/components/FileTree.d.ts +0 -4
  99. package/cli/dist/components/FileTree.d.ts.map +0 -1
  100. package/cli/dist/components/FileTree.js.map +0 -1
  101. package/cli/dist/components/ResourceSelectInput.d.ts +0 -4
  102. package/cli/dist/components/ResourceSelectInput.d.ts.map +0 -1
  103. package/cli/dist/components/ResourceSelectInput.js.map +0 -1
  104. package/cli/dist/components/ResourceTable.d.ts +0 -4
  105. package/cli/dist/components/ResourceTable.d.ts.map +0 -1
  106. package/cli/dist/components/ResourceTable.js.map +0 -1
  107. package/cli/dist/components/TabBar.d.ts +0 -4
  108. package/cli/dist/components/TabBar.d.ts.map +0 -1
  109. package/cli/dist/components/TabBar.js.map +0 -1
  110. package/cli/dist/components/Tooltip.d.ts +0 -12
  111. package/cli/dist/components/Tooltip.d.ts.map +0 -1
  112. package/cli/dist/components/Tooltip.js.map +0 -1
  113. package/cli/dist/components/index.d.ts +0 -8
  114. package/cli/dist/components/index.d.ts.map +0 -1
  115. package/cli/dist/components/index.js.map +0 -1
  116. package/cli/dist/config/platform-standards.d.ts +0 -159
  117. package/cli/dist/config/platform-standards.d.ts.map +0 -1
  118. package/cli/dist/config/platform-standards.js.map +0 -1
  119. package/cli/dist/generator/extension-fetch.d.ts +0 -25
  120. package/cli/dist/generator/extension-fetch.d.ts.map +0 -1
  121. package/cli/dist/generator/extension-fetch.js.map +0 -1
  122. package/cli/dist/generator/template-engine.d.ts +0 -62
  123. package/cli/dist/generator/template-engine.d.ts.map +0 -1
  124. package/cli/dist/generator/template-engine.js.map +0 -1
  125. package/cli/dist/index.d.ts +0 -11
  126. package/cli/dist/index.d.ts.map +0 -1
  127. package/cli/dist/index.js.map +0 -1
  128. package/cli/dist/types/index.d.ts +0 -257
  129. package/cli/dist/types/index.d.ts.map +0 -1
  130. package/cli/dist/types/index.js.map +0 -1
  131. package/cli/dist/utils/cache.d.ts +0 -19
  132. package/cli/dist/utils/cache.d.ts.map +0 -1
  133. package/cli/dist/utils/cache.js.map +0 -1
  134. package/cli/dist/utils/command-helpers.d.ts +0 -17
  135. package/cli/dist/utils/command-helpers.d.ts.map +0 -1
  136. package/cli/dist/utils/command-helpers.js.map +0 -1
  137. package/cli/dist/utils/constants.d.ts +0 -53
  138. package/cli/dist/utils/constants.d.ts.map +0 -1
  139. package/cli/dist/utils/constants.js.map +0 -1
  140. package/cli/dist/utils/discovery-context.d.ts +0 -4
  141. package/cli/dist/utils/discovery-context.d.ts.map +0 -1
  142. package/cli/dist/utils/discovery-context.js.map +0 -1
  143. package/cli/dist/utils/docker.d.ts +0 -4
  144. package/cli/dist/utils/docker.d.ts.map +0 -1
  145. package/cli/dist/utils/docker.js.map +0 -1
  146. package/cli/dist/utils/doctor-runtime.d.ts +0 -81
  147. package/cli/dist/utils/doctor-runtime.d.ts.map +0 -1
  148. package/cli/dist/utils/doctor-runtime.js.map +0 -1
  149. package/cli/dist/utils/env-validator.d.ts +0 -15
  150. package/cli/dist/utils/env-validator.d.ts.map +0 -1
  151. package/cli/dist/utils/env-validator.js.map +0 -1
  152. package/cli/dist/utils/errors.d.ts +0 -31
  153. package/cli/dist/utils/errors.d.ts.map +0 -1
  154. package/cli/dist/utils/errors.js.map +0 -1
  155. package/cli/dist/utils/file-helpers.d.ts +0 -14
  156. package/cli/dist/utils/file-helpers.d.ts.map +0 -1
  157. package/cli/dist/utils/file-helpers.js.map +0 -1
  158. package/cli/dist/utils/formatting.d.ts +0 -30
  159. package/cli/dist/utils/formatting.d.ts.map +0 -1
  160. package/cli/dist/utils/formatting.js.map +0 -1
  161. package/cli/dist/utils/paths.d.ts +0 -3
  162. package/cli/dist/utils/paths.d.ts.map +0 -1
  163. package/cli/dist/utils/paths.js.map +0 -1
  164. package/cli/dist/utils/port-assignment.d.ts +0 -6
  165. package/cli/dist/utils/port-assignment.d.ts.map +0 -1
  166. package/cli/dist/utils/port-assignment.js.map +0 -1
  167. package/cli/dist/utils/project-features.d.ts +0 -23
  168. package/cli/dist/utils/project-features.d.ts.map +0 -1
  169. package/cli/dist/utils/project-features.js.map +0 -1
  170. package/cli/dist/utils/project-templates.d.ts +0 -7
  171. package/cli/dist/utils/project-templates.d.ts.map +0 -1
  172. package/cli/dist/utils/project-templates.js.map +0 -1
  173. package/cli/dist/utils/prompt.d.ts +0 -28
  174. package/cli/dist/utils/prompt.d.ts.map +0 -1
  175. package/cli/dist/utils/prompt.js.map +0 -1
  176. package/cli/dist/utils/resource-features.d.ts +0 -29
  177. package/cli/dist/utils/resource-features.d.ts.map +0 -1
  178. package/cli/dist/utils/resource-features.js.map +0 -1
  179. package/cli/dist/utils/service-urls.d.ts +0 -30
  180. package/cli/dist/utils/service-urls.d.ts.map +0 -1
  181. package/cli/dist/utils/service-urls.js.map +0 -1
  182. package/cli/dist/utils/services.d.ts +0 -18
  183. package/cli/dist/utils/services.d.ts.map +0 -1
  184. package/cli/dist/utils/services.js.map +0 -1
  185. package/cli/dist/utils/stack-features.d.ts +0 -22
  186. package/cli/dist/utils/stack-features.d.ts.map +0 -1
  187. package/cli/dist/utils/stack-features.js.map +0 -1
  188. package/cli/dist/utils/tar.d.ts +0 -7
  189. package/cli/dist/utils/tar.d.ts.map +0 -1
  190. package/cli/dist/utils/tar.js.map +0 -1
  191. package/cli/dist/utils/tilt.d.ts +0 -20
  192. package/cli/dist/utils/tilt.d.ts.map +0 -1
  193. package/cli/dist/utils/tilt.js.map +0 -1
  194. package/cli/dist/utils/validation.d.ts +0 -16
  195. package/cli/dist/utils/validation.d.ts.map +0 -1
  196. package/cli/dist/utils/validation.js.map +0 -1
  197. package/cli/knip.json +0 -6
  198. package/cli/pnpm-lock.yaml +0 -2305
  199. package/cli/pnpm-workspace.yaml +0 -2
  200. package/cli/src/cli.ts +0 -72
  201. package/cli/src/commands/__tests__/always-enabled-infra.test.ts +0 -109
  202. package/cli/src/commands/__tests__/config.test.ts +0 -146
  203. package/cli/src/commands/__tests__/doctor.test.ts +0 -730
  204. package/cli/src/commands/__tests__/error-handling.test.ts +0 -78
  205. package/cli/src/commands/__tests__/phases-model.test.ts +0 -161
  206. package/cli/src/commands/__tests__/project-resource-features-e2e.test.ts +0 -187
  207. package/cli/src/commands/__tests__/project.test.ts +0 -68
  208. package/cli/src/commands/__tests__/resource.test.ts +0 -226
  209. package/cli/src/commands/__tests__/saas-starter-integration.test.ts +0 -194
  210. package/cli/src/commands/__tests__/stack-features-e2e.test.ts +0 -135
  211. package/cli/src/commands/__tests__/upgrade.test.ts +0 -198
  212. package/cli/src/commands/completion.ts +0 -300
  213. package/cli/src/commands/config.ts +0 -299
  214. package/cli/src/commands/doctor.ts +0 -926
  215. package/cli/src/commands/down.ts +0 -37
  216. package/cli/src/commands/help.ts +0 -143
  217. package/cli/src/commands/networks-design.md +0 -80
  218. package/cli/src/commands/networks.ts +0 -332
  219. package/cli/src/commands/project.ts +0 -456
  220. package/cli/src/commands/projects.ts +0 -82
  221. package/cli/src/commands/resource.ts +0 -652
  222. package/cli/src/commands/resources.ts +0 -95
  223. package/cli/src/commands/stack.ts +0 -128
  224. package/cli/src/commands/stacks.ts +0 -52
  225. package/cli/src/commands/status.ts +0 -88
  226. package/cli/src/commands/ui.tsx +0 -843
  227. package/cli/src/commands/up.ts +0 -169
  228. package/cli/src/commands/upgrade.ts +0 -628
  229. package/cli/src/commands/version.ts +0 -9
  230. package/cli/src/components/Accessible.tsx +0 -21
  231. package/cli/src/components/BaseTooltip.tsx +0 -66
  232. package/cli/src/components/DetailPanel.tsx +0 -146
  233. package/cli/src/components/FileTree.tsx +0 -89
  234. package/cli/src/components/ResourceSelectInput.tsx +0 -30
  235. package/cli/src/components/ResourceTable.tsx +0 -78
  236. package/cli/src/components/TabBar.tsx +0 -53
  237. package/cli/src/components/Tooltip.tsx +0 -11
  238. package/cli/src/components/index.ts +0 -7
  239. package/cli/src/config/platform-standards.test.ts +0 -11
  240. package/cli/src/config/platform-standards.ts +0 -196
  241. package/cli/src/generator/__tests__/extension-fetch.test.ts +0 -242
  242. package/cli/src/generator/__tests__/template-engine.test.ts +0 -70
  243. package/cli/src/generator/extension-fetch.ts +0 -286
  244. package/cli/src/generator/template-engine.ts +0 -752
  245. package/cli/src/index.ts +0 -86
  246. package/cli/src/templates.d.ts +0 -4
  247. package/cli/src/types/index.ts +0 -353
  248. package/cli/src/utils/__tests__/cache.test.ts +0 -98
  249. package/cli/src/utils/__tests__/formatting.test.ts +0 -170
  250. package/cli/src/utils/__tests__/paths.test.ts +0 -180
  251. package/cli/src/utils/__tests__/port-assignment.test.ts +0 -121
  252. package/cli/src/utils/__tests__/service-urls.test.ts +0 -174
  253. package/cli/src/utils/__tests__/services.test.ts +0 -531
  254. package/cli/src/utils/__tests__/tilt.test.ts +0 -172
  255. package/cli/src/utils/__tests__/validation.test.ts +0 -148
  256. package/cli/src/utils/cache.ts +0 -76
  257. package/cli/src/utils/command-helpers.ts +0 -54
  258. package/cli/src/utils/constants.ts +0 -130
  259. package/cli/src/utils/discovery-context.ts +0 -49
  260. package/cli/src/utils/docker.ts +0 -20
  261. package/cli/src/utils/doctor-runtime.ts +0 -644
  262. package/cli/src/utils/env-validator.ts +0 -139
  263. package/cli/src/utils/errors.ts +0 -168
  264. package/cli/src/utils/file-helpers.ts +0 -62
  265. package/cli/src/utils/formatting.ts +0 -215
  266. package/cli/src/utils/paths.ts +0 -53
  267. package/cli/src/utils/port-assignment.ts +0 -106
  268. package/cli/src/utils/project-features.ts +0 -118
  269. package/cli/src/utils/project-templates.ts +0 -29
  270. package/cli/src/utils/prompt.ts +0 -128
  271. package/cli/src/utils/resource-features.ts +0 -215
  272. package/cli/src/utils/service-urls.ts +0 -124
  273. package/cli/src/utils/services.ts +0 -364
  274. package/cli/src/utils/stack-features.ts +0 -30
  275. package/cli/src/utils/tar.ts +0 -24
  276. package/cli/src/utils/tilt.ts +0 -133
  277. package/cli/src/utils/validation.ts +0 -67
  278. package/cli/tsconfig.json +0 -25
  279. package/cli/tsconfig.typecheck.json +0 -8
  280. package/docs/FEATURES.md +0 -281
  281. package/docs/demo.svg +0 -217
  282. package/engine/docs/AUTODISCOVERY_TEST.md +0 -182
  283. package/engine/docs/C4-ARCHITECTURE-operations.md +0 -396
  284. package/engine/docs/C4-ARCHITECTURE-overview.md +0 -284
  285. package/engine/docs/C4-ARCHITECTURE.md +0 -17
  286. package/engine/docs/GOLDEN_IMAGE_INTEGRATION.md +0 -349
  287. package/engine/docs/MANIFEST_DRIVEN_ARCHITECTURE.md +0 -357
  288. package/engine/docs/README.md +0 -284
  289. package/install.sh +0 -19
  290. package/knip.json +0 -10
  291. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/.openspec.yaml +0 -2
  292. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/design.md +0 -102
  293. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/proposal.md +0 -31
  294. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-notifications/spec.md +0 -48
  295. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-orchestration/spec.md +0 -63
  296. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-troubleshooting/spec.md +0 -56
  297. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/tasks.md +0 -61
  298. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/.openspec.yaml +0 -2
  299. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/design.md +0 -114
  300. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/proposal.md +0 -32
  301. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/manifest-field-migration/spec.md +0 -20
  302. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/resource-terminology-standard/spec.md +0 -20
  303. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/stack-terminology-standard/spec.md +0 -20
  304. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/tasks.md +0 -194
  305. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/.openspec.yaml +0 -2
  306. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/design.md +0 -111
  307. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/proposal.md +0 -33
  308. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/function-naming-alignment/spec.md +0 -12
  309. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/optional-parameter-patterns/spec.md +0 -18
  310. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-documentation/spec.md +0 -16
  311. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-naming-consistency/spec.md +0 -12
  312. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-ordering-standard/spec.md +0 -12
  313. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/tasks.md +0 -194
  314. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/.openspec.yaml +0 -2
  315. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/design.md +0 -84
  316. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/proposal.md +0 -31
  317. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/codebase-audit/spec.md +0 -27
  318. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/dead-code-cleanup/spec.md +0 -27
  319. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/test-gap-fill/spec.md +0 -23
  320. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/todo-resolution/spec.md +0 -27
  321. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/tasks.md +0 -39
  322. package/openspec/changes/archive/2026-06-25-landscape-consolidation/.openspec.yaml +0 -2
  323. package/openspec/changes/archive/2026-06-25-landscape-consolidation/design.md +0 -80
  324. package/openspec/changes/archive/2026-06-25-landscape-consolidation/proposal.md +0 -40
  325. package/openspec/changes/archive/2026-06-25-landscape-consolidation/spec.md +0 -52
  326. package/openspec/changes/archive/2026-06-25-landscape-consolidation/tasks.md +0 -51
  327. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/.openspec.yaml +0 -2
  328. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/design.md +0 -43
  329. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/proposal.md +0 -29
  330. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/specs/self-contained-generated-projects/spec.md +0 -67
  331. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/tasks.md +0 -27
  332. package/openspec/changes/optimize-runtime-docker-layers/.openspec.yaml +0 -3
  333. package/openspec/changes/optimize-runtime-docker-layers/design.md +0 -81
  334. package/openspec/changes/optimize-runtime-docker-layers/proposal.md +0 -44
  335. package/openspec/changes/optimize-runtime-docker-layers/specs/runtime-container-footprint/spec.md +0 -79
  336. package/openspec/changes/optimize-runtime-docker-layers/tasks.md +0 -36
  337. package/openspec/changes/prioritized-cold-start/.openspec.yaml +0 -4
  338. package/openspec/changes/prioritized-cold-start/design.md +0 -137
  339. package/openspec/changes/prioritized-cold-start/proposal.md +0 -41
  340. package/openspec/changes/prioritized-cold-start/specs/on-demand-resource-startup/spec.md +0 -98
  341. package/openspec/changes/prioritized-cold-start/tasks.md +0 -69
  342. package/openspec/config.yaml +0 -1
  343. package/openspec/specs/manifest-field-migration/spec.md +0 -24
  344. package/openspec/specs/resource-terminology-standard/spec.md +0 -24
  345. package/openspec/specs/self-contained-generated-projects/spec.md +0 -67
  346. package/openspec/specs/stack-terminology-standard/spec.md +0 -24
  347. package/platform/services/platform/proxy/service.yaml +0 -14
  348. package/scripts/audit-codebase.sh +0 -213
  349. package/scripts/autoresearch/layer-eval.sh +0 -65
  350. package/scripts/benchmark/README.md +0 -25
  351. package/scripts/benchmark/container-scale.ts +0 -503
  352. package/scripts/benchmark/pre-release-gate.sh +0 -9
  353. package/scripts/install-git-hooks.sh +0 -14
  354. package/scripts/measure-idle-footprint.sh +0 -58
  355. package/scripts/record-demo.sh +0 -43
  356. package/scripts/release-binaries.sh +0 -97
  357. package/scripts/setup-pre-commit.sh +0 -33
  358. package/scripts/stage-npm-engine.sh +0 -36
  359. package/tests/tilt-engine/__init__.py +0 -5
  360. package/tests/tilt-engine/conftest.py +0 -182
  361. package/tests/tilt-engine/fixtures/appointment-frontend-service.json +0 -11
  362. package/tests/tilt-engine/fixtures/identity-backend-service.json +0 -12
  363. package/tests/tilt-engine/fixtures/invalid-service.json +0 -4
  364. package/tests/tilt-engine/test_agents_md_generator.py +0 -341
  365. package/tests/tilt-engine/test_agents_md_integration.py +0 -378
  366. package/tests/tilt-engine/test_cache_operations.py +0 -181
  367. package/tests/tilt-engine/test_cache_persistence.py +0 -142
  368. package/tests/tilt-engine/test_code_executor.py +0 -152
  369. package/tests/tilt-engine/test_code_viewer.py +0 -127
  370. package/tests/tilt-engine/test_compose_port_anchors.py +0 -310
  371. package/tests/tilt-engine/test_config_inspector.py +0 -162
  372. package/tests/tilt-engine/test_daemon_focus_mode.py +0 -89
  373. package/tests/tilt-engine/test_daemon_polling.py +0 -122
  374. package/tests/tilt-engine/test_daemon_registration.py +0 -115
  375. package/tests/tilt-engine/test_daemon_validation.py +0 -107
  376. package/tests/tilt-engine/test_docker_generator_bugs.py +0 -493
  377. package/tests/tilt-engine/test_docker_prune.py +0 -119
  378. package/tests/tilt-engine/test_dockerignore_path_bug.py +0 -82
  379. package/tests/tilt-engine/test_file_browser.py +0 -193
  380. package/tests/tilt-engine/test_frontend_basepath_manifest.py +0 -27
  381. package/tests/tilt-engine/test_health_dependencies.py +0 -130
  382. package/tests/tilt-engine/test_health_endpoints.py +0 -118
  383. package/tests/tilt-engine/test_health_tilt_ui.py +0 -85
  384. package/tests/tilt-engine/test_runtime_container_footprint.py +0 -162
  385. package/tests/tilt-engine/test_sablier_defer_start.py +0 -237
  386. package/tests/tilt-engine/test_safety_aliases.py +0 -84
  387. package/tests/tilt-engine/test_snapshot_diff.py +0 -136
  388. package/tests/tilt-engine/test_snapshot_persistence.py +0 -163
  389. package/tests/tilt-engine/test_snapshot_scanning.py +0 -123
  390. package/tests/tilt-engine/test_standalone_project_boot.py +0 -61
  391. package/tests/tilt-engine/test_standalone_traefik.py +0 -160
  392. package/tests/tilt-engine/test_traefik_static_wake_route.py +0 -187
package/cli/src/index.ts DELETED
@@ -1,86 +0,0 @@
1
- export type {
2
- AutogeneratedFile,
3
- BaseTooltipProps,
4
- CheckResult,
5
- CreatableResourceType,
6
- DetailPanelProps,
7
- DiscoveredResource,
8
- DiscoveredStack,
9
- DiscoveryContext,
10
- ErrorScreenProps,
11
- FileGenerationTask,
12
- FileNode,
13
- FileTreeProps,
14
- FileType,
15
- HelpPanelProps,
16
- JsonArray,
17
- JsonObject,
18
- JsonValue,
19
- LoadingScreenProps,
20
- ProjectConfig,
21
- ProjectDiscovery,
22
- ProjectOptionalInfra,
23
- ProjectPhaseDefinition,
24
- ResourceConfig,
25
- ResourceFileType,
26
- ResourceMetadata,
27
- ResourceSelectInputProps,
28
- ResourceStatus,
29
- ResourceTableProps,
30
- ResourceType,
31
- SelectItem,
32
- ServiceUrl,
33
- StackHealthStatus,
34
- StackMetadata,
35
- StatusCategory,
36
- StatusValue,
37
- Tab,
38
- TabBarProps,
39
- TabId,
40
- TiltBuildStatus,
41
- TiltCommandResult,
42
- TiltResourceStatus,
43
- TiltRuntimeStatus,
44
- TooltipProps,
45
- ValidationResult,
46
- } from "./types/index.js";
47
-
48
- export {
49
- CREATABLE_RESOURCE_TYPES,
50
- isCreatableResourceType,
51
- } from "./types/index.js";
52
- export {
53
- Cache,
54
- createCacheValidator,
55
- } from "./utils/cache.js";
56
- export {
57
- assertValid,
58
- confirmAction,
59
- confirmOrCancel,
60
- handleDryRun,
61
- } from "./utils/command-helpers.js";
62
- // Re-export discovery-context functions for resources-by-stack operations
63
- export { createDiscoveryContext } from "./utils/discovery-context.js";
64
- export { writeFilesWithProgress } from "./utils/file-helpers.js";
65
- export { findProjectRoot } from "./utils/paths.js";
66
- export {
67
- checkPortStatus,
68
- findAvailablePort,
69
- } from "./utils/port-assignment.js";
70
- export {
71
- clearMetadataCache,
72
- discoverResources,
73
- discoverStacks,
74
- getAllStacks,
75
- getResourceMetadata,
76
- getResourcesForStack,
77
- getStackMetadata,
78
- stackExists,
79
- } from "./utils/services.js";
80
- export {
81
- buildTiltDownArgs,
82
- buildTiltUpArgs,
83
- getTiltfilePath,
84
- isTiltAvailable,
85
- runTilt,
86
- } from "./utils/tilt.js";
@@ -1,4 +0,0 @@
1
- declare module "*.hbs" {
2
- const content: string;
3
- export default content;
4
- }
@@ -1,353 +0,0 @@
1
- export interface DiscoveredResource {
2
- name: string;
3
- path: string;
4
- configPath: string;
5
- config?: ResourceConfig;
6
- stack?: string;
7
- port?: number;
8
- type?: ResourceType;
9
- }
10
-
11
- export interface ResourceConfig {
12
- appName: string;
13
- appType: "backend" | "frontend" | "library" | "sdk" | "worker" | "migrator";
14
- stack?: string;
15
- port?: number;
16
- replicas?: number;
17
- runtime?: string;
18
- featuresEnabled?: string[];
19
- dependsOn?: string[];
20
- enabled?: boolean;
21
- basePath?: string;
22
- backendName?: string;
23
- apiPath?: string;
24
- /** On-demand scaling via Sablier (Premium - requires TDK_LICENSE_KEY). See hasSablierLicense() in extension-fetch.ts. */
25
- sablier?: {
26
- enable?: boolean;
27
- group?: string;
28
- sessionDuration?: string;
29
- /** Skip this resource during `tdk up` entirely; a Traefik static route wakes it on first request. Requires enable: true. */
30
- deferStart?: boolean;
31
- };
32
- }
33
-
34
- export interface DiscoveredStack {
35
- name: string;
36
- description?: string;
37
- resources: DiscoveredResource[];
38
- resourceCount: number;
39
- }
40
-
41
- export interface TiltCommandResult {
42
- exitCode: number;
43
- stdout: string;
44
- stderr: string;
45
- }
46
-
47
- export type FileType = "docker" | "tilt" | "config" | "prisma" | "generated" | "unknown";
48
-
49
- export interface AutogeneratedFile {
50
- name: string;
51
- path: string;
52
- type: FileType;
53
- size: number;
54
- lastModified: string;
55
- }
56
-
57
- export type ResourceFileType = "json" | "text";
58
-
59
- export interface FileGenerationTask {
60
- type: ResourceFileType;
61
- filename: string;
62
- content: JsonValue;
63
- description: string;
64
- emoji: string;
65
- }
66
-
67
- export type ResourceType = "frontend" | "backend" | "library" | "sdk" | "worker" | "migrator";
68
-
69
- export const CREATABLE_RESOURCE_TYPES = ["backend", "frontend", "worker"] as const;
70
-
71
- export type CreatableResourceType = Extract<
72
- ResourceType,
73
- (typeof CREATABLE_RESOURCE_TYPES)[number]
74
- >;
75
-
76
- export function isCreatableResourceType(value: unknown): value is CreatableResourceType {
77
- return (
78
- typeof value === "string" && (CREATABLE_RESOURCE_TYPES as readonly string[]).includes(value)
79
- );
80
- }
81
-
82
- export type ResourceStatus = "ready" | "pending" | "error" | "unknown";
83
-
84
- export interface ResourceMetadata {
85
- name: string;
86
- stack?: string;
87
- type: ResourceType;
88
- port?: number;
89
- createdAt: string;
90
- lastModified: string;
91
- dependencies: string[];
92
- hasDockerfile: boolean;
93
- hasTiltfile: boolean;
94
- hasDockerCompose: boolean;
95
- autogeneratedFiles: AutogeneratedFile[];
96
- status: ResourceStatus;
97
- }
98
-
99
- export type StackHealthStatus = "healthy" | "degraded" | "error" | "unknown";
100
-
101
- export interface StackMetadata {
102
- name: string;
103
- resourceCount: number;
104
- createdAt: string;
105
- lastModified: string;
106
- resources: ResourceMetadata[];
107
- overallStatus: StackHealthStatus;
108
- }
109
-
110
- export type TiltRuntimeStatus = "running" | "pending" | "error" | "unknown";
111
-
112
- export type TiltBuildStatus = "ok" | "error" | "in_progress" | "unknown";
113
-
114
- export interface TiltResourceStatus {
115
- runtimeStatus: TiltRuntimeStatus;
116
- buildStatus: TiltBuildStatus;
117
- lastBuildTime: string | null;
118
- currentBuildTime: string | null;
119
- available: boolean;
120
- }
121
-
122
- export type JsonValue = string | number | boolean | null | JsonArray | JsonObject;
123
-
124
- export interface JsonArray extends Array<JsonValue> {}
125
- export interface JsonObject extends Record<string, JsonValue> {}
126
-
127
- export interface ProjectPhaseDefinition {
128
- name: string;
129
- description: string;
130
- enabledStacks: string[];
131
- }
132
-
133
- export interface LegacyProjectStackDefinition {
134
- name: string;
135
- description: string;
136
- services: string[];
137
- }
138
-
139
- export interface ProjectOptionalInfra {
140
- monitoring: boolean;
141
- elk: boolean;
142
- debezium: boolean;
143
- golden_image: boolean;
144
- verdaccio: boolean;
145
- }
146
-
147
- export interface ProjectDiscovery {
148
- paths: string[];
149
- }
150
-
151
- export interface ProjectConfig {
152
- version: string;
153
- project: {
154
- name: string;
155
- version: string;
156
- };
157
- phases: {
158
- pre_alpha: ProjectPhaseDefinition;
159
- alpha: ProjectPhaseDefinition;
160
- beta: ProjectPhaseDefinition;
161
- out_of_scope: ProjectPhaseDefinition;
162
- };
163
- stacks?: {
164
- pre_alpha: LegacyProjectStackDefinition;
165
- alpha: LegacyProjectStackDefinition;
166
- beta: LegacyProjectStackDefinition;
167
- out_of_scope: LegacyProjectStackDefinition;
168
- };
169
- always_enabled_infra?: string[];
170
- optional_infra: ProjectOptionalInfra;
171
- discovery: ProjectDiscovery;
172
- overrides?: Record<string, JsonValue>;
173
- }
174
-
175
- export type TabId = "overview" | "resources" | "events" | "files" | "config";
176
-
177
- export interface Tab {
178
- id: TabId;
179
- label: string;
180
- shortcut: string;
181
- }
182
-
183
- export interface TabBarProps {
184
- activeTab: TabId;
185
- onTabChange: (tab: TabId) => void;
186
- compact?: boolean;
187
- }
188
-
189
- // Reuse BaseTooltipProps instead of duplicating
190
- export type TooltipProps = BaseTooltipProps;
191
-
192
- export interface DetailPanelProps {
193
- stack: DiscoveredStack | null;
194
- service: DiscoveredResource | null;
195
- stackMetadata?: StackMetadata | null;
196
- visible: boolean;
197
- }
198
-
199
- export interface ResourceTableProps {
200
- resources: ResourceMetadata[];
201
- maxWidth?: number;
202
- }
203
-
204
- export interface ResourceSelectInputProps {
205
- items: SelectItem[];
206
- onSelect: (item: SelectItem) => void;
207
- highlightedIndex: number;
208
- }
209
-
210
- export interface FileNode {
211
- name: string;
212
- path: string;
213
- type: "directory" | "file";
214
- fileType?: FileType;
215
- children?: FileNode[];
216
- size?: number;
217
- lastModified?: string;
218
- }
219
-
220
- export interface ValidationResult {
221
- valid: boolean;
222
- error?: string;
223
- }
224
-
225
- export interface CheckResult {
226
- name: string;
227
- didPass: boolean;
228
- message: string;
229
- fix?: string;
230
- /** Check could not run meaningfully (e.g. nothing started yet); not a failure. */
231
- isSkipped?: boolean;
232
- }
233
-
234
- export interface ServiceUrl {
235
- name: string;
236
- stack?: string;
237
- basePath: string;
238
- url: string;
239
- port?: number;
240
- status: "running" | "stopped" | "unknown";
241
- }
242
-
243
- export interface SelectItem {
244
- label: string;
245
- value: string;
246
- }
247
-
248
- export type StatusValue =
249
- | ResourceStatus
250
- | StackHealthStatus
251
- | TiltRuntimeStatus
252
- | ServiceUrl["status"]
253
- | "active"
254
- | "failed"
255
- | "critical"
256
- | "stopped"
257
- | "starting"
258
- | "building"
259
- | undefined;
260
-
261
- export type StatusCategory = "success" | "error" | "warning" | "unknown";
262
-
263
- export interface DiscoveryContext {
264
- resources: DiscoveredResource[];
265
- stacks: DiscoveredStack[];
266
- stackNames: string[];
267
- unassignedResources: DiscoveredResource[];
268
- resourcesByStack: Map<string, DiscoveredResource[]>;
269
- }
270
-
271
- export interface FileTreeProps {
272
- nodes: FileNode[];
273
- onSelect?: (node: FileNode) => void;
274
- selectedPath?: string;
275
- }
276
-
277
- export interface BaseTooltipProps {
278
- content: string;
279
- shortcut?: string;
280
- visible: boolean;
281
- maxWidth?: number;
282
- wrapText?: boolean;
283
- prefix?: string;
284
- marginTop?: number;
285
- }
286
-
287
- export interface LoadingScreenProps {
288
- progress: number;
289
- message: string;
290
- }
291
-
292
- export interface ErrorScreenProps {
293
- error: string;
294
- onRetry: () => void;
295
- }
296
-
297
- export interface HelpPanelProps {
298
- onClose: () => void;
299
- }
300
-
301
- // ============================================================================
302
- // Cache Types (consolidated from utils/cache.ts)
303
- // ============================================================================
304
-
305
- export interface CacheEntry<T> {
306
- value: T;
307
- timestamp: number;
308
- }
309
-
310
- export interface CacheOptions {
311
- ttlMs: number;
312
- }
313
-
314
- // ============================================================================
315
- // Package Types (consolidated from utils/paths.ts)
316
- // ============================================================================
317
-
318
- export interface PackageInfo {
319
- name: string;
320
- version: string;
321
- fullPackage: JsonObject;
322
- }
323
-
324
- // ============================================================================
325
- // Port Assignment Types (consolidated from utils/port-assignment.ts)
326
- // ============================================================================
327
-
328
- export type PortAssignableResourceType = Extract<
329
- CreatableResourceType,
330
- "backend" | "frontend" | "worker" | "migrator"
331
- >;
332
-
333
- // ============================================================================
334
- // Config Types (consolidated from commands/config.ts)
335
- // ============================================================================
336
-
337
- export type MasterConfigFileName =
338
- | "TILT_TECH_STACK.star"
339
- | "TILT_RESOURCE_DEFAULTS.star"
340
- | "spec.master";
341
-
342
- /**
343
- * Type guard to validate filename is a known master config file.
344
- * Eliminates the need for 'as MasterConfigFileName' assertion.
345
- */
346
- export function isMasterConfigFileName(filename: string): filename is MasterConfigFileName {
347
- const validNames: readonly string[] = [
348
- "TILT_TECH_STACK.star",
349
- "TILT_RESOURCE_DEFAULTS.star",
350
- "spec.master",
351
- ];
352
- return validNames.includes(filename);
353
- }
@@ -1,98 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { Cache, createCacheValidator } from "../cache.js";
3
-
4
- describe("Cache", () => {
5
- it("should store and retrieve values", () => {
6
- const cache = new Cache<string>({ ttlMs: 5000 });
7
- cache.set("key1", "value1");
8
- expect(cache.get("key1")).toBe("value1");
9
- });
10
-
11
- it("should return undefined for missing keys", () => {
12
- const cache = new Cache<string>({ ttlMs: 5000 });
13
- expect(cache.get("nonexistent")).toBeUndefined();
14
- });
15
-
16
- it("should report has() correctly", () => {
17
- const cache = new Cache<string>({ ttlMs: 5000 });
18
- cache.set("key1", "value1");
19
- expect(cache.has("key1")).toBe(true);
20
- expect(cache.has("nonexistent")).toBe(false);
21
- });
22
-
23
- it("should delete values", () => {
24
- const cache = new Cache<string>({ ttlMs: 5000 });
25
- cache.set("key1", "value1");
26
- cache.delete("key1");
27
- expect(cache.get("key1")).toBeUndefined();
28
- });
29
-
30
- it("should clear all values", () => {
31
- const cache = new Cache<string>({ ttlMs: 5000 });
32
- cache.set("key1", "value1");
33
- cache.set("key2", "value2");
34
- cache.clear();
35
- expect(cache.size()).toBe(0);
36
- });
37
-
38
- it("should expire entries after TTL", async () => {
39
- const cache = new Cache<string>({ ttlMs: 10 });
40
- cache.set("key1", "value1");
41
- expect(cache.has("key1")).toBe(true);
42
- await new Promise((resolve) => setTimeout(resolve, 20));
43
- expect(cache.has("key1")).toBe(false);
44
- expect(cache.get("key1")).toBeUndefined();
45
- });
46
-
47
- it("should return correct size", () => {
48
- const cache = new Cache<string>({ ttlMs: 5000 });
49
- expect(cache.size()).toBe(0);
50
- cache.set("a", "1");
51
- expect(cache.size()).toBe(1);
52
- cache.set("b", "2");
53
- expect(cache.size()).toBe(2);
54
- });
55
-
56
- it("should return all valid keys", () => {
57
- const cache = new Cache<string>({ ttlMs: 5000 });
58
- cache.set("a", "1");
59
- cache.set("b", "2");
60
- cache.set("c", "3");
61
- expect(cache.keys().sort()).toEqual(["a", "b", "c"]);
62
- });
63
-
64
- it("should not include expired keys in keys()", async () => {
65
- const cache = new Cache<string>({ ttlMs: 10 });
66
- cache.set("a", "1");
67
- cache.set("b", "2");
68
- await new Promise((resolve) => setTimeout(resolve, 20));
69
- expect(cache.keys()).toEqual([]);
70
- });
71
- });
72
-
73
- describe("createCacheValidator", () => {
74
- it("should start as invalid", () => {
75
- const validator = createCacheValidator(1000);
76
- expect(validator.isValid()).toBe(false);
77
- });
78
-
79
- it("should be valid after markUpdated", () => {
80
- const validator = createCacheValidator(1000);
81
- validator.markUpdated();
82
- expect(validator.isValid()).toBe(true);
83
- });
84
-
85
- it("should expire after TTL", async () => {
86
- const validator = createCacheValidator(10);
87
- validator.markUpdated();
88
- await new Promise((resolve) => setTimeout(resolve, 20));
89
- expect(validator.isValid()).toBe(false);
90
- });
91
-
92
- it("should reset to invalid", () => {
93
- const validator = createCacheValidator(1000);
94
- validator.markUpdated();
95
- validator.reset();
96
- expect(validator.isValid()).toBe(false);
97
- });
98
- });
@@ -1,170 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import {
3
- formatBoxLine,
4
- formatBytes,
5
- formatCentered,
6
- formatCount,
7
- formatDate,
8
- formatPadded,
9
- formatShortDate,
10
- getStatusColor,
11
- getStatusIcon,
12
- truncate,
13
- } from "../formatting.js";
14
-
15
- describe("formatCount", () => {
16
- it("should format singular", () => {
17
- expect(formatCount(1, "resource")).toBe("1 resource");
18
- });
19
-
20
- it("should format plural with default suffix", () => {
21
- expect(formatCount(3, "resource")).toBe("3 resources");
22
- });
23
-
24
- it("should format plural with custom plural", () => {
25
- expect(formatCount(2, "index", "indices")).toBe("2 indices");
26
- });
27
-
28
- it("should handle zero as plural", () => {
29
- expect(formatCount(0, "service")).toBe("0 services");
30
- });
31
- });
32
-
33
- describe("formatDate", () => {
34
- it("should return a string", () => {
35
- const result = formatDate(new Date().toISOString());
36
- expect(typeof result).toBe("string");
37
- expect(result.length).toBeGreaterThan(0);
38
- });
39
-
40
- it("should handle ISO date strings", () => {
41
- const date = new Date("2024-01-15T10:30:00Z");
42
- expect(formatDate(date.toISOString())).toBeTruthy();
43
- });
44
- });
45
-
46
- describe("formatShortDate", () => {
47
- it("should return a short date string", () => {
48
- const result = formatShortDate(new Date().toISOString());
49
- expect(typeof result).toBe("string");
50
- expect(result.length).toBeGreaterThan(0);
51
- });
52
- });
53
-
54
- describe("getStatusColor", () => {
55
- it("should return green for ready status", () => {
56
- expect(getStatusColor("ready")).toBe("green");
57
- });
58
-
59
- it("should return green for healthy status", () => {
60
- expect(getStatusColor("healthy")).toBe("green");
61
- });
62
-
63
- it("should return red for error status", () => {
64
- expect(getStatusColor("error")).toBe("red");
65
- });
66
-
67
- it("should return yellow for pending status", () => {
68
- expect(getStatusColor("pending")).toBe("yellow");
69
- });
70
-
71
- it("should return gray for unknown status", () => {
72
- expect(getStatusColor("unknown")).toBe("gray");
73
- });
74
-
75
- it("should handle undefined status", () => {
76
- expect(getStatusColor(undefined)).toBe("gray");
77
- });
78
- });
79
-
80
- describe("getStatusIcon", () => {
81
- it("should return ✓ for ready", () => {
82
- expect(getStatusIcon("ready")).toBe("✓");
83
- });
84
-
85
- it("should return ✗ for error", () => {
86
- expect(getStatusIcon("error")).toBe("✗");
87
- });
88
-
89
- it("should return ? for unknown", () => {
90
- expect(getStatusIcon("unknown")).toBe("?");
91
- });
92
- });
93
-
94
- describe("truncate", () => {
95
- it("should not truncate short strings", () => {
96
- expect(truncate("hello", 10)).toBe("hello");
97
- });
98
-
99
- it("should truncate long strings with ellipsis", () => {
100
- const result = truncate("hello world this is long", 10);
101
- expect(result).toBe("hello w...");
102
- expect(result.length).toBe(10);
103
- });
104
-
105
- it("should handle empty string", () => {
106
- expect(truncate("", 5)).toBe("");
107
- });
108
-
109
- it("should handle exactly max length", () => {
110
- expect(truncate("hello", 5)).toBe("hello");
111
- });
112
- });
113
-
114
- describe("formatBytes", () => {
115
- it("should format bytes", () => {
116
- expect(formatBytes(500)).toBe("500 B");
117
- });
118
-
119
- it("should format kilobytes", () => {
120
- expect(formatBytes(2048)).toBe("2.0 KB");
121
- });
122
-
123
- it("should format megabytes", () => {
124
- expect(formatBytes(1048576)).toBe("1.0 MB");
125
- });
126
-
127
- it("should handle zero", () => {
128
- expect(formatBytes(0)).toBe("0 B");
129
- });
130
- });
131
-
132
- describe("formatCentered", () => {
133
- it("should center text within width", () => {
134
- const result = formatCentered("hi", 10);
135
- expect(result.length).toBe(10);
136
- expect(result).toContain("hi");
137
- });
138
-
139
- it("should handle text longer than width (returns as-is, no truncation)", () => {
140
- const result = formatCentered("hello world", 5);
141
- expect(result).toBe("hello world");
142
- });
143
- });
144
-
145
- describe("formatPadded", () => {
146
- it("should pad short text to width", () => {
147
- const result = formatPadded("hi", 10);
148
- expect(result.length).toBe(10);
149
- expect(result).toMatch(/^hi\s+$/);
150
- });
151
-
152
- it("should truncate long text with ellipsis", () => {
153
- const result = formatPadded("hello world", 6);
154
- expect(result).toBe("hello…");
155
- expect(result.length).toBe(6);
156
- });
157
- });
158
-
159
- describe("formatBoxLine", () => {
160
- it("should return default width line", () => {
161
- const result = formatBoxLine();
162
- expect(result.length).toBe(62);
163
- expect(result).toBe("─".repeat(62));
164
- });
165
-
166
- it("should accept custom char and width", () => {
167
- const result = formatBoxLine("=", 10);
168
- expect(result).toBe("=".repeat(10));
169
- });
170
- });