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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (390) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +1 -1
  3. package/cli/dist/commands/config.js +1 -1
  4. package/cli/dist/commands/resource.js +1 -1
  5. package/cli/dist/generator/extension-fetch.js +16 -9
  6. package/cli/package.json +1 -1
  7. package/package.json +16 -1
  8. package/.claude/skills/layer-autoresearch/SKILL.md +0 -48
  9. package/.claude/skills/tdk-troubleshoot/SKILL.md +0 -222
  10. package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -40
  11. package/.github/ISSUE_TEMPLATE/config.yml +0 -8
  12. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -18
  13. package/.github/dependabot.yml +0 -33
  14. package/.github/pull_request_template.md +0 -5
  15. package/.github/workflows/ci.yml +0 -200
  16. package/.github/workflows/release-binaries.yml +0 -139
  17. package/.github/zizmor.yml +0 -9
  18. package/.pre-commit-config.yaml +0 -57
  19. package/CODE_OF_CONDUCT.md +0 -9
  20. package/CONTRIBUTING.md +0 -42
  21. package/Makefile +0 -92
  22. package/SECURITY.md +0 -17
  23. package/benchmarks/results/container-scale-2026-09-25T20-54-49-736Z.json +0 -45
  24. package/benchmarks/results/container-scale-2026-09-25T21-01-20-540Z.json +0 -150
  25. package/benchmarks/results/container-scale-2026-09-25T21-15-01-441Z.json +0 -73
  26. package/benchmarks/results/container-scale-2026-09-25T22-09-01-630Z.json +0 -77
  27. package/benchmarks/results/container-scale-2026-09-25T22-18-28-371Z.json +0 -202
  28. package/cli/AGENTS.md +0 -390
  29. package/cli/DESIGN.md +0 -735
  30. package/cli/README.md +0 -292
  31. package/cli/biome.json +0 -40
  32. package/cli/dependency-graph.svg +0 -1135
  33. package/cli/dist/cli.d.ts +0 -3
  34. package/cli/dist/cli.d.ts.map +0 -1
  35. package/cli/dist/cli.js.map +0 -1
  36. package/cli/dist/commands/completion.d.ts +0 -3
  37. package/cli/dist/commands/completion.d.ts.map +0 -1
  38. package/cli/dist/commands/completion.js.map +0 -1
  39. package/cli/dist/commands/config.d.ts +0 -3
  40. package/cli/dist/commands/config.d.ts.map +0 -1
  41. package/cli/dist/commands/config.js.map +0 -1
  42. package/cli/dist/commands/doctor.d.ts +0 -19
  43. package/cli/dist/commands/doctor.d.ts.map +0 -1
  44. package/cli/dist/commands/doctor.js.map +0 -1
  45. package/cli/dist/commands/down.d.ts +0 -3
  46. package/cli/dist/commands/down.d.ts.map +0 -1
  47. package/cli/dist/commands/down.js.map +0 -1
  48. package/cli/dist/commands/help.d.ts +0 -2
  49. package/cli/dist/commands/help.d.ts.map +0 -1
  50. package/cli/dist/commands/help.js.map +0 -1
  51. package/cli/dist/commands/networks.d.ts +0 -3
  52. package/cli/dist/commands/networks.d.ts.map +0 -1
  53. package/cli/dist/commands/networks.js.map +0 -1
  54. package/cli/dist/commands/project.d.ts +0 -9
  55. package/cli/dist/commands/project.d.ts.map +0 -1
  56. package/cli/dist/commands/project.js.map +0 -1
  57. package/cli/dist/commands/projects.d.ts +0 -3
  58. package/cli/dist/commands/projects.d.ts.map +0 -1
  59. package/cli/dist/commands/projects.js.map +0 -1
  60. package/cli/dist/commands/resource.d.ts +0 -69
  61. package/cli/dist/commands/resource.d.ts.map +0 -1
  62. package/cli/dist/commands/resource.js.map +0 -1
  63. package/cli/dist/commands/resources.d.ts +0 -3
  64. package/cli/dist/commands/resources.d.ts.map +0 -1
  65. package/cli/dist/commands/resources.js.map +0 -1
  66. package/cli/dist/commands/stack.d.ts +0 -3
  67. package/cli/dist/commands/stack.d.ts.map +0 -1
  68. package/cli/dist/commands/stack.js.map +0 -1
  69. package/cli/dist/commands/stacks.d.ts +0 -3
  70. package/cli/dist/commands/stacks.d.ts.map +0 -1
  71. package/cli/dist/commands/stacks.js.map +0 -1
  72. package/cli/dist/commands/status.d.ts +0 -3
  73. package/cli/dist/commands/status.d.ts.map +0 -1
  74. package/cli/dist/commands/status.js.map +0 -1
  75. package/cli/dist/commands/ui.d.ts +0 -3
  76. package/cli/dist/commands/ui.d.ts.map +0 -1
  77. package/cli/dist/commands/ui.js.map +0 -1
  78. package/cli/dist/commands/up.d.ts +0 -3
  79. package/cli/dist/commands/up.d.ts.map +0 -1
  80. package/cli/dist/commands/up.js.map +0 -1
  81. package/cli/dist/commands/upgrade.d.ts +0 -14
  82. package/cli/dist/commands/upgrade.d.ts.map +0 -1
  83. package/cli/dist/commands/upgrade.js.map +0 -1
  84. package/cli/dist/commands/version.d.ts +0 -3
  85. package/cli/dist/commands/version.d.ts.map +0 -1
  86. package/cli/dist/commands/version.js.map +0 -1
  87. package/cli/dist/components/Accessible.d.ts +0 -8
  88. package/cli/dist/components/Accessible.d.ts.map +0 -1
  89. package/cli/dist/components/Accessible.js.map +0 -1
  90. package/cli/dist/components/BaseTooltip.d.ts +0 -4
  91. package/cli/dist/components/BaseTooltip.d.ts.map +0 -1
  92. package/cli/dist/components/BaseTooltip.js.map +0 -1
  93. package/cli/dist/components/DetailPanel.d.ts +0 -4
  94. package/cli/dist/components/DetailPanel.d.ts.map +0 -1
  95. package/cli/dist/components/DetailPanel.js.map +0 -1
  96. package/cli/dist/components/FileTree.d.ts +0 -4
  97. package/cli/dist/components/FileTree.d.ts.map +0 -1
  98. package/cli/dist/components/FileTree.js.map +0 -1
  99. package/cli/dist/components/ResourceSelectInput.d.ts +0 -4
  100. package/cli/dist/components/ResourceSelectInput.d.ts.map +0 -1
  101. package/cli/dist/components/ResourceSelectInput.js.map +0 -1
  102. package/cli/dist/components/ResourceTable.d.ts +0 -4
  103. package/cli/dist/components/ResourceTable.d.ts.map +0 -1
  104. package/cli/dist/components/ResourceTable.js.map +0 -1
  105. package/cli/dist/components/TabBar.d.ts +0 -4
  106. package/cli/dist/components/TabBar.d.ts.map +0 -1
  107. package/cli/dist/components/TabBar.js.map +0 -1
  108. package/cli/dist/components/Tooltip.d.ts +0 -12
  109. package/cli/dist/components/Tooltip.d.ts.map +0 -1
  110. package/cli/dist/components/Tooltip.js.map +0 -1
  111. package/cli/dist/components/index.d.ts +0 -8
  112. package/cli/dist/components/index.d.ts.map +0 -1
  113. package/cli/dist/components/index.js.map +0 -1
  114. package/cli/dist/config/platform-standards.d.ts +0 -159
  115. package/cli/dist/config/platform-standards.d.ts.map +0 -1
  116. package/cli/dist/config/platform-standards.js.map +0 -1
  117. package/cli/dist/generator/extension-fetch.d.ts +0 -25
  118. package/cli/dist/generator/extension-fetch.d.ts.map +0 -1
  119. package/cli/dist/generator/extension-fetch.js.map +0 -1
  120. package/cli/dist/generator/template-engine.d.ts +0 -62
  121. package/cli/dist/generator/template-engine.d.ts.map +0 -1
  122. package/cli/dist/generator/template-engine.js.map +0 -1
  123. package/cli/dist/index.d.ts +0 -11
  124. package/cli/dist/index.d.ts.map +0 -1
  125. package/cli/dist/index.js.map +0 -1
  126. package/cli/dist/types/index.d.ts +0 -257
  127. package/cli/dist/types/index.d.ts.map +0 -1
  128. package/cli/dist/types/index.js.map +0 -1
  129. package/cli/dist/utils/cache.d.ts +0 -19
  130. package/cli/dist/utils/cache.d.ts.map +0 -1
  131. package/cli/dist/utils/cache.js.map +0 -1
  132. package/cli/dist/utils/command-helpers.d.ts +0 -17
  133. package/cli/dist/utils/command-helpers.d.ts.map +0 -1
  134. package/cli/dist/utils/command-helpers.js.map +0 -1
  135. package/cli/dist/utils/constants.d.ts +0 -53
  136. package/cli/dist/utils/constants.d.ts.map +0 -1
  137. package/cli/dist/utils/constants.js.map +0 -1
  138. package/cli/dist/utils/discovery-context.d.ts +0 -4
  139. package/cli/dist/utils/discovery-context.d.ts.map +0 -1
  140. package/cli/dist/utils/discovery-context.js.map +0 -1
  141. package/cli/dist/utils/docker.d.ts +0 -4
  142. package/cli/dist/utils/docker.d.ts.map +0 -1
  143. package/cli/dist/utils/docker.js.map +0 -1
  144. package/cli/dist/utils/doctor-runtime.d.ts +0 -81
  145. package/cli/dist/utils/doctor-runtime.d.ts.map +0 -1
  146. package/cli/dist/utils/doctor-runtime.js.map +0 -1
  147. package/cli/dist/utils/env-validator.d.ts +0 -15
  148. package/cli/dist/utils/env-validator.d.ts.map +0 -1
  149. package/cli/dist/utils/env-validator.js.map +0 -1
  150. package/cli/dist/utils/errors.d.ts +0 -31
  151. package/cli/dist/utils/errors.d.ts.map +0 -1
  152. package/cli/dist/utils/errors.js.map +0 -1
  153. package/cli/dist/utils/file-helpers.d.ts +0 -14
  154. package/cli/dist/utils/file-helpers.d.ts.map +0 -1
  155. package/cli/dist/utils/file-helpers.js.map +0 -1
  156. package/cli/dist/utils/formatting.d.ts +0 -30
  157. package/cli/dist/utils/formatting.d.ts.map +0 -1
  158. package/cli/dist/utils/formatting.js.map +0 -1
  159. package/cli/dist/utils/paths.d.ts +0 -3
  160. package/cli/dist/utils/paths.d.ts.map +0 -1
  161. package/cli/dist/utils/paths.js.map +0 -1
  162. package/cli/dist/utils/port-assignment.d.ts +0 -6
  163. package/cli/dist/utils/port-assignment.d.ts.map +0 -1
  164. package/cli/dist/utils/port-assignment.js.map +0 -1
  165. package/cli/dist/utils/project-features.d.ts +0 -23
  166. package/cli/dist/utils/project-features.d.ts.map +0 -1
  167. package/cli/dist/utils/project-features.js.map +0 -1
  168. package/cli/dist/utils/project-templates.d.ts +0 -7
  169. package/cli/dist/utils/project-templates.d.ts.map +0 -1
  170. package/cli/dist/utils/project-templates.js.map +0 -1
  171. package/cli/dist/utils/prompt.d.ts +0 -28
  172. package/cli/dist/utils/prompt.d.ts.map +0 -1
  173. package/cli/dist/utils/prompt.js.map +0 -1
  174. package/cli/dist/utils/resource-features.d.ts +0 -29
  175. package/cli/dist/utils/resource-features.d.ts.map +0 -1
  176. package/cli/dist/utils/resource-features.js.map +0 -1
  177. package/cli/dist/utils/service-urls.d.ts +0 -30
  178. package/cli/dist/utils/service-urls.d.ts.map +0 -1
  179. package/cli/dist/utils/service-urls.js.map +0 -1
  180. package/cli/dist/utils/services.d.ts +0 -18
  181. package/cli/dist/utils/services.d.ts.map +0 -1
  182. package/cli/dist/utils/services.js.map +0 -1
  183. package/cli/dist/utils/stack-features.d.ts +0 -22
  184. package/cli/dist/utils/stack-features.d.ts.map +0 -1
  185. package/cli/dist/utils/stack-features.js.map +0 -1
  186. package/cli/dist/utils/tar.d.ts +0 -7
  187. package/cli/dist/utils/tar.d.ts.map +0 -1
  188. package/cli/dist/utils/tar.js.map +0 -1
  189. package/cli/dist/utils/tilt.d.ts +0 -20
  190. package/cli/dist/utils/tilt.d.ts.map +0 -1
  191. package/cli/dist/utils/tilt.js.map +0 -1
  192. package/cli/dist/utils/validation.d.ts +0 -16
  193. package/cli/dist/utils/validation.d.ts.map +0 -1
  194. package/cli/dist/utils/validation.js.map +0 -1
  195. package/cli/knip.json +0 -6
  196. package/cli/pnpm-lock.yaml +0 -2305
  197. package/cli/pnpm-workspace.yaml +0 -2
  198. package/cli/src/cli.ts +0 -72
  199. package/cli/src/commands/__tests__/always-enabled-infra.test.ts +0 -109
  200. package/cli/src/commands/__tests__/config.test.ts +0 -146
  201. package/cli/src/commands/__tests__/doctor.test.ts +0 -730
  202. package/cli/src/commands/__tests__/error-handling.test.ts +0 -78
  203. package/cli/src/commands/__tests__/phases-model.test.ts +0 -161
  204. package/cli/src/commands/__tests__/project-resource-features-e2e.test.ts +0 -187
  205. package/cli/src/commands/__tests__/project.test.ts +0 -68
  206. package/cli/src/commands/__tests__/resource.test.ts +0 -226
  207. package/cli/src/commands/__tests__/saas-starter-integration.test.ts +0 -194
  208. package/cli/src/commands/__tests__/stack-features-e2e.test.ts +0 -135
  209. package/cli/src/commands/__tests__/upgrade.test.ts +0 -198
  210. package/cli/src/commands/completion.ts +0 -300
  211. package/cli/src/commands/config.ts +0 -299
  212. package/cli/src/commands/doctor.ts +0 -926
  213. package/cli/src/commands/down.ts +0 -37
  214. package/cli/src/commands/help.ts +0 -143
  215. package/cli/src/commands/networks-design.md +0 -80
  216. package/cli/src/commands/networks.ts +0 -332
  217. package/cli/src/commands/project.ts +0 -456
  218. package/cli/src/commands/projects.ts +0 -82
  219. package/cli/src/commands/resource.ts +0 -652
  220. package/cli/src/commands/resources.ts +0 -95
  221. package/cli/src/commands/stack.ts +0 -128
  222. package/cli/src/commands/stacks.ts +0 -52
  223. package/cli/src/commands/status.ts +0 -88
  224. package/cli/src/commands/ui.tsx +0 -843
  225. package/cli/src/commands/up.ts +0 -169
  226. package/cli/src/commands/upgrade.ts +0 -628
  227. package/cli/src/commands/version.ts +0 -9
  228. package/cli/src/components/Accessible.tsx +0 -21
  229. package/cli/src/components/BaseTooltip.tsx +0 -66
  230. package/cli/src/components/DetailPanel.tsx +0 -146
  231. package/cli/src/components/FileTree.tsx +0 -89
  232. package/cli/src/components/ResourceSelectInput.tsx +0 -30
  233. package/cli/src/components/ResourceTable.tsx +0 -78
  234. package/cli/src/components/TabBar.tsx +0 -53
  235. package/cli/src/components/Tooltip.tsx +0 -11
  236. package/cli/src/components/index.ts +0 -7
  237. package/cli/src/config/platform-standards.test.ts +0 -11
  238. package/cli/src/config/platform-standards.ts +0 -196
  239. package/cli/src/generator/__tests__/extension-fetch.test.ts +0 -242
  240. package/cli/src/generator/__tests__/template-engine.test.ts +0 -70
  241. package/cli/src/generator/extension-fetch.ts +0 -286
  242. package/cli/src/generator/template-engine.ts +0 -752
  243. package/cli/src/index.ts +0 -86
  244. package/cli/src/templates.d.ts +0 -4
  245. package/cli/src/types/index.ts +0 -353
  246. package/cli/src/utils/__tests__/cache.test.ts +0 -98
  247. package/cli/src/utils/__tests__/formatting.test.ts +0 -170
  248. package/cli/src/utils/__tests__/paths.test.ts +0 -180
  249. package/cli/src/utils/__tests__/port-assignment.test.ts +0 -121
  250. package/cli/src/utils/__tests__/service-urls.test.ts +0 -174
  251. package/cli/src/utils/__tests__/services.test.ts +0 -531
  252. package/cli/src/utils/__tests__/tilt.test.ts +0 -172
  253. package/cli/src/utils/__tests__/validation.test.ts +0 -148
  254. package/cli/src/utils/cache.ts +0 -76
  255. package/cli/src/utils/command-helpers.ts +0 -54
  256. package/cli/src/utils/constants.ts +0 -130
  257. package/cli/src/utils/discovery-context.ts +0 -49
  258. package/cli/src/utils/docker.ts +0 -20
  259. package/cli/src/utils/doctor-runtime.ts +0 -644
  260. package/cli/src/utils/env-validator.ts +0 -139
  261. package/cli/src/utils/errors.ts +0 -168
  262. package/cli/src/utils/file-helpers.ts +0 -62
  263. package/cli/src/utils/formatting.ts +0 -215
  264. package/cli/src/utils/paths.ts +0 -53
  265. package/cli/src/utils/port-assignment.ts +0 -106
  266. package/cli/src/utils/project-features.ts +0 -118
  267. package/cli/src/utils/project-templates.ts +0 -29
  268. package/cli/src/utils/prompt.ts +0 -128
  269. package/cli/src/utils/resource-features.ts +0 -215
  270. package/cli/src/utils/service-urls.ts +0 -124
  271. package/cli/src/utils/services.ts +0 -364
  272. package/cli/src/utils/stack-features.ts +0 -30
  273. package/cli/src/utils/tar.ts +0 -24
  274. package/cli/src/utils/tilt.ts +0 -133
  275. package/cli/src/utils/validation.ts +0 -67
  276. package/cli/tsconfig.json +0 -25
  277. package/cli/tsconfig.typecheck.json +0 -8
  278. package/docs/FEATURES.md +0 -279
  279. package/docs/demo.svg +0 -217
  280. package/engine/docs/AUTODISCOVERY_TEST.md +0 -182
  281. package/engine/docs/C4-ARCHITECTURE-operations.md +0 -396
  282. package/engine/docs/C4-ARCHITECTURE-overview.md +0 -284
  283. package/engine/docs/C4-ARCHITECTURE.md +0 -17
  284. package/engine/docs/GOLDEN_IMAGE_INTEGRATION.md +0 -349
  285. package/engine/docs/MANIFEST_DRIVEN_ARCHITECTURE.md +0 -357
  286. package/engine/docs/README.md +0 -284
  287. package/install.sh +0 -19
  288. package/knip.json +0 -10
  289. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/.openspec.yaml +0 -2
  290. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/design.md +0 -102
  291. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/proposal.md +0 -31
  292. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-notifications/spec.md +0 -48
  293. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-orchestration/spec.md +0 -63
  294. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-troubleshooting/spec.md +0 -56
  295. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/tasks.md +0 -61
  296. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/.openspec.yaml +0 -2
  297. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/design.md +0 -114
  298. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/proposal.md +0 -32
  299. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/manifest-field-migration/spec.md +0 -20
  300. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/resource-terminology-standard/spec.md +0 -20
  301. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/stack-terminology-standard/spec.md +0 -20
  302. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/tasks.md +0 -194
  303. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/.openspec.yaml +0 -2
  304. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/design.md +0 -111
  305. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/proposal.md +0 -33
  306. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/function-naming-alignment/spec.md +0 -12
  307. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/optional-parameter-patterns/spec.md +0 -18
  308. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-documentation/spec.md +0 -16
  309. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-naming-consistency/spec.md +0 -12
  310. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-ordering-standard/spec.md +0 -12
  311. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/tasks.md +0 -194
  312. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/.openspec.yaml +0 -2
  313. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/design.md +0 -84
  314. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/proposal.md +0 -31
  315. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/codebase-audit/spec.md +0 -27
  316. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/dead-code-cleanup/spec.md +0 -27
  317. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/test-gap-fill/spec.md +0 -23
  318. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/todo-resolution/spec.md +0 -27
  319. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/tasks.md +0 -39
  320. package/openspec/changes/archive/2026-06-25-landscape-consolidation/.openspec.yaml +0 -2
  321. package/openspec/changes/archive/2026-06-25-landscape-consolidation/design.md +0 -80
  322. package/openspec/changes/archive/2026-06-25-landscape-consolidation/proposal.md +0 -40
  323. package/openspec/changes/archive/2026-06-25-landscape-consolidation/spec.md +0 -52
  324. package/openspec/changes/archive/2026-06-25-landscape-consolidation/tasks.md +0 -51
  325. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/.openspec.yaml +0 -2
  326. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/design.md +0 -43
  327. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/proposal.md +0 -29
  328. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/specs/self-contained-generated-projects/spec.md +0 -67
  329. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/tasks.md +0 -27
  330. package/openspec/changes/optimize-runtime-docker-layers/.openspec.yaml +0 -3
  331. package/openspec/changes/optimize-runtime-docker-layers/design.md +0 -81
  332. package/openspec/changes/optimize-runtime-docker-layers/proposal.md +0 -44
  333. package/openspec/changes/optimize-runtime-docker-layers/specs/runtime-container-footprint/spec.md +0 -79
  334. package/openspec/changes/optimize-runtime-docker-layers/tasks.md +0 -36
  335. package/openspec/changes/prioritized-cold-start/.openspec.yaml +0 -4
  336. package/openspec/changes/prioritized-cold-start/design.md +0 -137
  337. package/openspec/changes/prioritized-cold-start/proposal.md +0 -41
  338. package/openspec/changes/prioritized-cold-start/specs/on-demand-resource-startup/spec.md +0 -98
  339. package/openspec/changes/prioritized-cold-start/tasks.md +0 -69
  340. package/openspec/config.yaml +0 -1
  341. package/openspec/specs/manifest-field-migration/spec.md +0 -24
  342. package/openspec/specs/resource-terminology-standard/spec.md +0 -24
  343. package/openspec/specs/self-contained-generated-projects/spec.md +0 -67
  344. package/openspec/specs/stack-terminology-standard/spec.md +0 -24
  345. package/platform/services/platform/proxy/service.yaml +0 -14
  346. package/scripts/audit-codebase.sh +0 -213
  347. package/scripts/autoresearch/layer-eval.sh +0 -65
  348. package/scripts/benchmark/README.md +0 -25
  349. package/scripts/benchmark/container-scale.ts +0 -503
  350. package/scripts/benchmark/pre-release-gate.sh +0 -9
  351. package/scripts/install-git-hooks.sh +0 -14
  352. package/scripts/measure-idle-footprint.sh +0 -58
  353. package/scripts/record-demo.sh +0 -43
  354. package/scripts/release-binaries.sh +0 -97
  355. package/scripts/setup-pre-commit.sh +0 -33
  356. package/scripts/stage-npm-engine.sh +0 -36
  357. package/tests/tilt-engine/__init__.py +0 -5
  358. package/tests/tilt-engine/conftest.py +0 -182
  359. package/tests/tilt-engine/fixtures/appointment-frontend-service.json +0 -11
  360. package/tests/tilt-engine/fixtures/identity-backend-service.json +0 -12
  361. package/tests/tilt-engine/fixtures/invalid-service.json +0 -4
  362. package/tests/tilt-engine/test_agents_md_generator.py +0 -341
  363. package/tests/tilt-engine/test_agents_md_integration.py +0 -378
  364. package/tests/tilt-engine/test_cache_operations.py +0 -181
  365. package/tests/tilt-engine/test_cache_persistence.py +0 -142
  366. package/tests/tilt-engine/test_code_executor.py +0 -152
  367. package/tests/tilt-engine/test_code_viewer.py +0 -127
  368. package/tests/tilt-engine/test_compose_port_anchors.py +0 -310
  369. package/tests/tilt-engine/test_config_inspector.py +0 -162
  370. package/tests/tilt-engine/test_daemon_focus_mode.py +0 -89
  371. package/tests/tilt-engine/test_daemon_polling.py +0 -122
  372. package/tests/tilt-engine/test_daemon_registration.py +0 -115
  373. package/tests/tilt-engine/test_daemon_validation.py +0 -107
  374. package/tests/tilt-engine/test_docker_generator_bugs.py +0 -493
  375. package/tests/tilt-engine/test_docker_prune.py +0 -119
  376. package/tests/tilt-engine/test_dockerignore_path_bug.py +0 -82
  377. package/tests/tilt-engine/test_file_browser.py +0 -193
  378. package/tests/tilt-engine/test_frontend_basepath_manifest.py +0 -27
  379. package/tests/tilt-engine/test_health_dependencies.py +0 -130
  380. package/tests/tilt-engine/test_health_endpoints.py +0 -118
  381. package/tests/tilt-engine/test_health_tilt_ui.py +0 -85
  382. package/tests/tilt-engine/test_runtime_container_footprint.py +0 -162
  383. package/tests/tilt-engine/test_sablier_defer_start.py +0 -237
  384. package/tests/tilt-engine/test_safety_aliases.py +0 -84
  385. package/tests/tilt-engine/test_snapshot_diff.py +0 -136
  386. package/tests/tilt-engine/test_snapshot_persistence.py +0 -163
  387. package/tests/tilt-engine/test_snapshot_scanning.py +0 -123
  388. package/tests/tilt-engine/test_standalone_project_boot.py +0 -61
  389. package/tests/tilt-engine/test_standalone_traefik.py +0 -160
  390. package/tests/tilt-engine/test_traefik_static_wake_route.py +0 -187
@@ -1,531 +0,0 @@
1
- import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
2
- import { tmpdir } from "node:os";
3
- import { join } from "node:path";
4
- import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
5
-
6
- // Mock findProjectRoot to control project root detection
7
- vi.mock("../paths.js", () => ({
8
- findProjectRoot: vi.fn(),
9
- getPackageVersion: vi.fn(() => "1.1.0"),
10
- }));
11
-
12
- import { AUTOGENERATED_FILE_PATTERNS, SKIP_DIRECTORIES } from "../constants.js";
13
- import { findProjectRoot } from "../paths.js";
14
- import { includes } from "../validation.js";
15
-
16
- describe("SKIP_DIRECTORIES", () => {
17
- it("should skip node_modules", () => {
18
- expect(includes(SKIP_DIRECTORIES, "node_modules")).toBe(true);
19
- });
20
-
21
- it("should skip .git", () => {
22
- expect(includes(SKIP_DIRECTORIES, ".git")).toBe(true);
23
- });
24
-
25
- it("should skip dist", () => {
26
- expect(includes(SKIP_DIRECTORIES, "dist")).toBe(true);
27
- });
28
-
29
- it("should NOT skip regular project directories", () => {
30
- expect(includes(SKIP_DIRECTORIES, "services")).toBe(false);
31
- expect(includes(SKIP_DIRECTORIES, "shared")).toBe(false);
32
- expect(includes(SKIP_DIRECTORIES, "backend")).toBe(false);
33
- expect(includes(SKIP_DIRECTORIES, "frontend")).toBe(false);
34
- });
35
-
36
- it("should skip coverage", () => {
37
- expect(includes(SKIP_DIRECTORIES, "coverage")).toBe(true);
38
- });
39
-
40
- it("should skip test directories", () => {
41
- expect(includes(SKIP_DIRECTORIES, "__tests__")).toBe(true);
42
- expect(includes(SKIP_DIRECTORIES, "test")).toBe(true);
43
- expect(includes(SKIP_DIRECTORIES, "tests")).toBe(true);
44
- });
45
-
46
- it("should have consistent skip list", () => {
47
- // These directories should always be skipped
48
- const mandatorySkips = ["node_modules", ".git", "dist", "build", "coverage"];
49
- for (const dir of mandatorySkips) {
50
- expect(includes(SKIP_DIRECTORIES, dir)).toBe(true);
51
- }
52
- });
53
- });
54
-
55
- describe("AUTOGENERATED_FILE_PATTERNS", () => {
56
- it("should include standard generated files", () => {
57
- expect(AUTOGENERATED_FILE_PATTERNS).toContain("Dockerfile");
58
- expect(AUTOGENERATED_FILE_PATTERNS).toContain("vite.config.ts");
59
- expect(AUTOGENERATED_FILE_PATTERNS).toContain("tsconfig.json");
60
- });
61
-
62
- it("should include docker-compose patterns", () => {
63
- expect(AUTOGENERATED_FILE_PATTERNS).toContain("docker-compose.yml");
64
- expect(AUTOGENERATED_FILE_PATTERNS).toContain("docker-compose.yaml");
65
- });
66
-
67
- it("should include Tiltfile as autogenerated", () => {
68
- expect(AUTOGENERATED_FILE_PATTERNS).toContain("Tiltfile");
69
- });
70
-
71
- it("should include build configs", () => {
72
- expect(AUTOGENERATED_FILE_PATTERNS).toContain("tsconfig.build.json");
73
- });
74
- });
75
-
76
- describe("includes type guard", () => {
77
- it("should return true for values in readonly array", () => {
78
- const arr = ["a", "b", "c"] as const;
79
- expect(includes(arr, "a")).toBe(true);
80
- expect(includes(arr, "b")).toBe(true);
81
- expect(includes(arr, "c")).toBe(true);
82
- });
83
-
84
- it("should return false for values not in readonly array", () => {
85
- const arr = ["a", "b", "c"] as const;
86
- expect(includes(arr, "d")).toBe(false);
87
- expect(includes(arr, "")).toBe(false);
88
- });
89
-
90
- it("should narrow type correctly", () => {
91
- const arr = ["node_modules", ".git", "dist"] as const;
92
- const value: string = "node_modules";
93
- if (includes(arr, value)) {
94
- expect(value).toBe("node_modules");
95
- }
96
- });
97
- });
98
-
99
- describe("discoverResources", () => {
100
- beforeEach(() => {
101
- vi.mocked(findProjectRoot).mockReturnValue("/fake/project");
102
- });
103
-
104
- afterEach(() => {
105
- vi.clearAllMocks();
106
- });
107
-
108
- it("should throw descriptive error when project root not found", async () => {
109
- vi.mocked(findProjectRoot).mockReturnValue(null);
110
- const { discoverResources } = await import("../services.js");
111
- expect(() => discoverResources()).toThrow("Could not find project root");
112
- });
113
-
114
- it("should error mention Tiltfile in message", async () => {
115
- vi.mocked(findProjectRoot).mockReturnValue(null);
116
- const { discoverResources } = await import("../services.js");
117
- try {
118
- discoverResources();
119
- expect.unreachable("Should have thrown");
120
- } catch (err) {
121
- expect((err as Error).message).toContain("project root");
122
- expect((err as Error).message).toContain("Tiltfile");
123
- }
124
- });
125
- });
126
-
127
- describe("getAllStacks", () => {
128
- it("should extract unique stack names from resources", async () => {
129
- const { getAllStacks } = await import("../services.js");
130
- const resources = [
131
- {
132
- name: "svc-a",
133
- stack: "alpha",
134
- path: "/tmp",
135
- configPath: "/tmp/svc-a/service.json",
136
- config: { appName: "svc-a", appType: "backend" as const },
137
- },
138
- {
139
- name: "svc-b",
140
- stack: "alpha",
141
- path: "/tmp",
142
- configPath: "/tmp/svc-b/service.json",
143
- config: { appName: "svc-b", appType: "backend" as const },
144
- },
145
- {
146
- name: "svc-c",
147
- stack: "beta",
148
- path: "/tmp",
149
- configPath: "/tmp/svc-c/service.json",
150
- config: { appName: "svc-c", appType: "frontend" as const },
151
- },
152
- { name: "svc-d", path: "/tmp", configPath: "/tmp/svc-d/service.json" },
153
- ];
154
-
155
- // biome-ignore lint: suspicious/noExplicitAny -- test resource fixture
156
- const stacks = getAllStacks(resources as any);
157
- expect(stacks).toEqual(["alpha", "beta"]);
158
- });
159
-
160
- it("should return empty array when no stacks", async () => {
161
- const { getAllStacks } = await import("../services.js");
162
- const stacks = getAllStacks([]);
163
- expect(stacks).toEqual([]);
164
- });
165
-
166
- it("should return sorted stack names", async () => {
167
- const { getAllStacks } = await import("../services.js");
168
- const resources = [
169
- {
170
- name: "svc-a",
171
- stack: "zeta",
172
- path: "/tmp",
173
- configPath: "/tmp/svc-a/service.json",
174
- config: { appName: "svc-a", appType: "backend" as const },
175
- },
176
- {
177
- name: "svc-b",
178
- stack: "alpha",
179
- path: "/tmp",
180
- configPath: "/tmp/svc-b/service.json",
181
- config: { appName: "svc-b", appType: "backend" as const },
182
- },
183
- {
184
- name: "svc-c",
185
- stack: "beta",
186
- path: "/tmp",
187
- configPath: "/tmp/svc-c/service.json",
188
- config: { appName: "svc-c", appType: "frontend" as const },
189
- },
190
- ];
191
-
192
- // biome-ignore lint: suspicious/noExplicitAny -- test resource fixture
193
- const stacks = getAllStacks(resources as any);
194
- expect(stacks).toEqual(["alpha", "beta", "zeta"]);
195
- });
196
-
197
- it("should handle resources without stack property", async () => {
198
- const { getAllStacks } = await import("../services.js");
199
- const resources = [
200
- {
201
- name: "svc-a",
202
- stack: "alpha",
203
- path: "/tmp",
204
- configPath: "/tmp/svc-a/service.json",
205
- config: { appName: "svc-a", appType: "backend" as const },
206
- },
207
- { name: "svc-b", path: "/tmp", configPath: "/tmp/svc-b/service.json" },
208
- {
209
- name: "svc-c",
210
- stack: undefined,
211
- path: "/tmp",
212
- configPath: "/tmp/svc-c/service.json",
213
- config: { appName: "svc-c", appType: "frontend" as const },
214
- },
215
- ];
216
-
217
- // biome-ignore lint: suspicious/noExplicitAny -- test resource fixture
218
- const stacks = getAllStacks(resources as any);
219
- expect(stacks).toEqual(["alpha"]);
220
- });
221
- });
222
-
223
- describe("discoverStacks with real temp dir", () => {
224
- let tmpDir: string;
225
-
226
- beforeEach(() => {
227
- tmpDir = mkdtempSync(join(tmpdir(), "tdk-stacks-"));
228
- vi.mocked(findProjectRoot).mockReturnValue(tmpDir);
229
- });
230
-
231
- afterEach(() => {
232
- vi.clearAllMocks();
233
- rmSync(tmpDir, { recursive: true, force: true });
234
- });
235
-
236
- it("should return empty stacks when no resources", async () => {
237
- mkdirSync(join(tmpDir, ".tdk"), { recursive: true });
238
- writeFileSync(join(tmpDir, ".tdk", "project.json"), JSON.stringify({ version: "2" }));
239
- const { discoverStacks } = await import("../services.js");
240
- const stacks = discoverStacks();
241
- expect(stacks).toEqual([]);
242
- });
243
-
244
- it("should group resources by stack", async () => {
245
- mkdirSync(join(tmpDir, ".tdk"), { recursive: true });
246
- writeFileSync(join(tmpDir, ".tdk", "project.json"), JSON.stringify({ version: "2" }));
247
- mkdirSync(join(tmpDir, "services", "product", "svc-a", "backend"), { recursive: true });
248
- mkdirSync(join(tmpDir, "services", "product", "svc-b", "backend"), { recursive: true });
249
- writeFileSync(
250
- join(tmpDir, "services", "product", "svc-a", "service.json"),
251
- JSON.stringify({ appName: "svc-a", runtime: "bun", stack: "alpha" }),
252
- );
253
- writeFileSync(
254
- join(tmpDir, "services", "product", "svc-b", "service.json"),
255
- JSON.stringify({ appName: "svc-b", runtime: "bun", stack: "alpha" }),
256
- );
257
-
258
- const { discoverStacks } = await import("../services.js");
259
- const stacks = discoverStacks();
260
- expect(stacks).toHaveLength(1);
261
- expect(stacks[0].name).toBe("alpha");
262
- expect(stacks[0].resourceCount).toBe(2);
263
- });
264
- });
265
-
266
- describe("getResourcesForStack with real temp dir", () => {
267
- let tmpDir: string;
268
-
269
- beforeEach(() => {
270
- tmpDir = mkdtempSync(join(tmpdir(), "tdk-res-stack-"));
271
- vi.mocked(findProjectRoot).mockReturnValue(tmpDir);
272
- });
273
-
274
- afterEach(() => {
275
- vi.clearAllMocks();
276
- rmSync(tmpDir, { recursive: true, force: true });
277
- });
278
-
279
- it("should return empty array for nonexistent stack", async () => {
280
- mkdirSync(join(tmpDir, ".tdk"), { recursive: true });
281
- writeFileSync(join(tmpDir, ".tdk", "project.json"), JSON.stringify({ version: "2" }));
282
- const { getResourcesForStack } = await import("../services.js");
283
- const resources = getResourcesForStack("nonexistent");
284
- expect(resources).toEqual([]);
285
- });
286
-
287
- it("should return resources for existing stack", async () => {
288
- mkdirSync(join(tmpDir, ".tdk"), { recursive: true });
289
- writeFileSync(join(tmpDir, ".tdk", "project.json"), JSON.stringify({ version: "2" }));
290
- mkdirSync(join(tmpDir, "services", "product", "svc-a", "backend"), { recursive: true });
291
- writeFileSync(
292
- join(tmpDir, "services", "product", "svc-a", "service.json"),
293
- JSON.stringify({ appName: "svc-a", runtime: "bun", stack: "alpha" }),
294
- );
295
-
296
- const { getResourcesForStack } = await import("../services.js");
297
- const resources = getResourcesForStack("alpha");
298
- expect(resources).toHaveLength(1);
299
- expect(resources[0].name).toBe("svc-a");
300
- });
301
- });
302
-
303
- describe("stackExists with real temp dir", () => {
304
- let tmpDir: string;
305
-
306
- beforeEach(() => {
307
- tmpDir = mkdtempSync(join(tmpdir(), "tdk-exists-"));
308
- vi.mocked(findProjectRoot).mockReturnValue(tmpDir);
309
- });
310
-
311
- afterEach(() => {
312
- vi.clearAllMocks();
313
- rmSync(tmpDir, { recursive: true, force: true });
314
- });
315
-
316
- it("should return false for nonexistent stack", async () => {
317
- mkdirSync(join(tmpDir, ".tdk"), { recursive: true });
318
- writeFileSync(join(tmpDir, ".tdk", "project.json"), JSON.stringify({ version: "2" }));
319
- const { stackExists } = await import("../services.js");
320
- expect(stackExists("nonexistent")).toBe(false);
321
- });
322
-
323
- it("should return true for existing stack", async () => {
324
- mkdirSync(join(tmpDir, ".tdk"), { recursive: true });
325
- writeFileSync(join(tmpDir, ".tdk", "project.json"), JSON.stringify({ version: "2" }));
326
- mkdirSync(join(tmpDir, "services", "product", "svc-a", "backend"), { recursive: true });
327
- writeFileSync(
328
- join(tmpDir, "services", "product", "svc-a", "service.json"),
329
- JSON.stringify({ appName: "svc-a", runtime: "bun", stack: "alpha" }),
330
- );
331
-
332
- const { stackExists } = await import("../services.js");
333
- expect(stackExists("alpha")).toBe(true);
334
- });
335
- });
336
-
337
- describe("clearMetadataCache", () => {
338
- beforeEach(() => {
339
- vi.mocked(findProjectRoot).mockReturnValue("/fake/project");
340
- });
341
-
342
- afterEach(() => {
343
- vi.clearAllMocks();
344
- });
345
-
346
- it("should be callable without error", async () => {
347
- const { clearMetadataCache } = await import("../services.js");
348
- expect(() => clearMetadataCache()).not.toThrow();
349
- });
350
- });
351
-
352
- describe("error message consistency between services and tilt", () => {
353
- it("should have distinct error messages for missing project root", async () => {
354
- vi.mocked(findProjectRoot).mockReturnValue(null);
355
- const { discoverResources } = await import("../services.js");
356
- const { getTiltfilePath } = await import("../tilt.js");
357
-
358
- try {
359
- discoverResources();
360
- } catch (err) {
361
- expect((err as Error).message).toMatch(/project root/i);
362
- }
363
-
364
- try {
365
- getTiltfilePath();
366
- } catch (err) {
367
- expect((err as Error).message).toMatch(/TDK project/i);
368
- }
369
- });
370
- });
371
-
372
- describe("findServiceJsonFiles discovery (temp dir integration)", () => {
373
- let tmpDir: string;
374
-
375
- beforeEach(() => {
376
- tmpDir = mkdtempSync(join(tmpdir(), "tdk-svc-json-"));
377
- // Mock findProjectRoot to return our temp dir
378
- vi.mocked(findProjectRoot).mockReturnValue(tmpDir);
379
- });
380
-
381
- afterEach(() => {
382
- vi.clearAllMocks();
383
- rmSync(tmpDir, { recursive: true, force: true });
384
- });
385
-
386
- it("should discover service.json files recursively", async () => {
387
- mkdirSync(join(tmpDir, ".tdk"), { recursive: true });
388
- writeFileSync(join(tmpDir, ".tdk", "project.json"), JSON.stringify({ version: "2" }));
389
- mkdirSync(join(tmpDir, "services", "product", "svc-a", "backend"), { recursive: true });
390
- mkdirSync(join(tmpDir, "services", "product", "svc-b", "backend"), { recursive: true });
391
- writeFileSync(
392
- join(tmpDir, "services", "product", "svc-a", "service.json"),
393
- JSON.stringify({ appName: "svc-a", runtime: "bun" }),
394
- );
395
- writeFileSync(
396
- join(tmpDir, "services", "product", "svc-b", "service.json"),
397
- JSON.stringify({ appName: "svc-b", runtime: "bun" }),
398
- );
399
-
400
- const { discoverResources } = await import("../services.js");
401
- const resources = discoverResources();
402
- expect(resources).toHaveLength(2);
403
- const names = resources.map((r) => r.name).sort();
404
- expect(names).toEqual(["svc-a", "svc-b"]);
405
- });
406
-
407
- it("should skip node_modules directories", async () => {
408
- mkdirSync(join(tmpDir, ".tdk"), { recursive: true });
409
- writeFileSync(join(tmpDir, ".tdk", "project.json"), JSON.stringify({ version: "2" }));
410
- mkdirSync(join(tmpDir, "node_modules", "some-pkg"), { recursive: true });
411
- writeFileSync(
412
- join(tmpDir, "node_modules", "some-pkg", "service.json"),
413
- JSON.stringify({ appName: "should-skip", runtime: "bun" }),
414
- );
415
- mkdirSync(join(tmpDir, "services", "product", "svc-a", "backend"), { recursive: true });
416
- writeFileSync(
417
- join(tmpDir, "services", "product", "svc-a", "service.json"),
418
- JSON.stringify({ appName: "svc-a", runtime: "bun" }),
419
- );
420
-
421
- const { discoverResources } = await import("../services.js");
422
- const resources = discoverResources();
423
- expect(resources).toHaveLength(1);
424
- expect(resources[0].name).toBe("svc-a");
425
- });
426
-
427
- it("should skip dot-directories", async () => {
428
- mkdirSync(join(tmpDir, ".tdk"), { recursive: true });
429
- writeFileSync(join(tmpDir, ".tdk", "project.json"), JSON.stringify({ version: "2" }));
430
- mkdirSync(join(tmpDir, ".hidden"), { recursive: true });
431
- writeFileSync(
432
- join(tmpDir, ".hidden", "service.json"),
433
- JSON.stringify({ appName: "should-skip", runtime: "bun" }),
434
- );
435
- mkdirSync(join(tmpDir, "services", "product", "svc-a", "backend"), { recursive: true });
436
- writeFileSync(
437
- join(tmpDir, "services", "product", "svc-a", "service.json"),
438
- JSON.stringify({ appName: "svc-a", runtime: "bun" }),
439
- );
440
-
441
- const { discoverResources } = await import("../services.js");
442
- const resources = discoverResources();
443
- expect(resources).toHaveLength(1);
444
- expect(resources[0].name).toBe("svc-a");
445
- });
446
-
447
- it("should skip dist directories", async () => {
448
- mkdirSync(join(tmpDir, ".tdk"), { recursive: true });
449
- writeFileSync(join(tmpDir, ".tdk", "project.json"), JSON.stringify({ version: "2" }));
450
- mkdirSync(join(tmpDir, "services", "product", "svc-a", "backend"), { recursive: true });
451
- writeFileSync(
452
- join(tmpDir, "services", "product", "svc-a", "service.json"),
453
- JSON.stringify({ appName: "svc-a", runtime: "bun" }),
454
- );
455
- mkdirSync(join(tmpDir, "dist"), { recursive: true });
456
- writeFileSync(
457
- join(tmpDir, "dist", "service.json"),
458
- JSON.stringify({ appName: "should-skip-dist", runtime: "bun" }),
459
- );
460
-
461
- const { discoverResources } = await import("../services.js");
462
- const resources = discoverResources();
463
- expect(resources).toHaveLength(1);
464
- expect(resources[0].name).toBe("svc-a");
465
- });
466
-
467
- it("should skip build directories", async () => {
468
- mkdirSync(join(tmpDir, ".tdk"), { recursive: true });
469
- writeFileSync(join(tmpDir, ".tdk", "project.json"), JSON.stringify({ version: "2" }));
470
- mkdirSync(join(tmpDir, "services", "product", "svc-a", "backend"), { recursive: true });
471
- writeFileSync(
472
- join(tmpDir, "services", "product", "svc-a", "service.json"),
473
- JSON.stringify({ appName: "svc-a", runtime: "bun" }),
474
- );
475
- mkdirSync(join(tmpDir, "build"), { recursive: true });
476
- writeFileSync(
477
- join(tmpDir, "build", "service.json"),
478
- JSON.stringify({ appName: "should-skip-build", runtime: "bun" }),
479
- );
480
-
481
- const { discoverResources } = await import("../services.js");
482
- const resources = discoverResources();
483
- expect(resources).toHaveLength(1);
484
- expect(resources[0].name).toBe("svc-a");
485
- });
486
-
487
- it("should handle service.json with missing required fields", async () => {
488
- mkdirSync(join(tmpDir, ".tdk"), { recursive: true });
489
- writeFileSync(join(tmpDir, ".tdk", "project.json"), JSON.stringify({ version: "2" }));
490
- mkdirSync(join(tmpDir, "services", "product", "svc-bad", "backend"), { recursive: true });
491
- writeFileSync(
492
- join(tmpDir, "services", "product", "svc-bad", "service.json"),
493
- JSON.stringify({ name: "svc-bad" }),
494
- );
495
-
496
- const { discoverResources } = await import("../services.js");
497
- expect(() => discoverResources()).toThrow("Invalid service.json");
498
- });
499
-
500
- it("should handle service.json with appType instead of runtime", async () => {
501
- mkdirSync(join(tmpDir, ".tdk"), { recursive: true });
502
- writeFileSync(join(tmpDir, ".tdk", "project.json"), JSON.stringify({ version: "2" }));
503
- mkdirSync(join(tmpDir, "services", "product", "svc-front", "frontend"), { recursive: true });
504
- writeFileSync(
505
- join(tmpDir, "services", "product", "svc-front", "service.json"),
506
- JSON.stringify({ appName: "svc-front", appType: "frontend" }),
507
- );
508
-
509
- const { discoverResources } = await import("../services.js");
510
- const resources = discoverResources();
511
- expect(resources).toHaveLength(1);
512
- expect(resources[0].config?.appType).toBe("frontend");
513
- });
514
-
515
- it("should resolve resource paths relative to project root", async () => {
516
- mkdirSync(join(tmpDir, ".tdk"), { recursive: true });
517
- writeFileSync(join(tmpDir, ".tdk", "project.json"), JSON.stringify({ version: "2" }));
518
- mkdirSync(join(tmpDir, "services", "product", "svc-a", "backend"), { recursive: true });
519
- writeFileSync(
520
- join(tmpDir, "services", "product", "svc-a", "service.json"),
521
- JSON.stringify({ appName: "svc-a", runtime: "bun" }),
522
- );
523
-
524
- const { discoverResources } = await import("../services.js");
525
- const resources = discoverResources();
526
- expect(resources[0].path).toBe(join(tmpDir, "services", "product", "svc-a"));
527
- expect(resources[0].configPath).toBe(
528
- join(tmpDir, "services", "product", "svc-a", "service.json"),
529
- );
530
- });
531
- });