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

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