@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,172 +0,0 @@
1
- import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
-
3
- // Mock findProjectRoot to return a controlled path for all tests
4
- vi.mock("../paths.js", () => ({
5
- findProjectRoot: vi.fn(),
6
- getPackageVersion: vi.fn(() => "1.1.0"),
7
- }));
8
-
9
- import { findProjectRoot } from "../paths.js";
10
-
11
- describe("getTiltfilePath", () => {
12
- beforeEach(() => {
13
- vi.mocked(findProjectRoot).mockReturnValue("/fake/project");
14
- });
15
-
16
- afterEach(() => {
17
- vi.clearAllMocks();
18
- });
19
-
20
- it("should return correct tiltfile path for valid project", async () => {
21
- const { getTiltfilePath } = await import("../tilt.js");
22
- const tiltfilePath = getTiltfilePath();
23
- expect(tiltfilePath).toBe("/fake/project/.tdk/.tdk-out/Tiltfile");
24
- });
25
-
26
- it("should not have double slashes in path", async () => {
27
- const { getTiltfilePath } = await import("../tilt.js");
28
- // Ensure root doesn't have trailing slash
29
- const tiltfilePath = getTiltfilePath();
30
- expect(tiltfilePath).not.toContain("//");
31
- });
32
- });
33
-
34
- describe("getTiltfilePath error", () => {
35
- beforeEach(() => {
36
- vi.mocked(findProjectRoot).mockReturnValue(null);
37
- });
38
-
39
- afterEach(() => {
40
- vi.clearAllMocks();
41
- });
42
-
43
- it("should throw when not in a TDK project", async () => {
44
- const { getTiltfilePath } = await import("../tilt.js");
45
- expect(() => getTiltfilePath()).toThrow("Not in a TDK project");
46
- });
47
- });
48
-
49
- describe("buildTiltUpArgs", () => {
50
- beforeEach(() => {
51
- vi.mocked(findProjectRoot).mockReturnValue("/fake/project");
52
- });
53
-
54
- afterEach(() => {
55
- vi.clearAllMocks();
56
- });
57
-
58
- it("should include -f flag with tiltfile path", async () => {
59
- const { buildTiltUpArgs } = await import("../tilt.js");
60
- const args = buildTiltUpArgs(["service-a", "service-b"], {});
61
- expect(args).toContain("-f");
62
- const fIndex = args.indexOf("-f");
63
- expect(fIndex).toBeGreaterThanOrEqual(0);
64
- expect(args[fIndex + 1]).toContain(".tdk/.tdk-out/Tiltfile");
65
- });
66
-
67
- it("should include service names in order", async () => {
68
- const { buildTiltUpArgs } = await import("../tilt.js");
69
- const args = buildTiltUpArgs(["service-a", "service-b"], {});
70
- expect(args).toContain("service-a");
71
- expect(args).toContain("service-b");
72
- });
73
-
74
- it("should include --verbose flag when verbose is set", async () => {
75
- const { buildTiltUpArgs } = await import("../tilt.js");
76
- const args = buildTiltUpArgs([], { verbose: true });
77
- expect(args).toContain("--verbose");
78
- });
79
-
80
- it("should NOT include --verbose when quiet is set even if verbose is true", async () => {
81
- const { buildTiltUpArgs } = await import("../tilt.js");
82
- const args = buildTiltUpArgs([], { verbose: true, quiet: true });
83
- expect(args).not.toContain("--verbose");
84
- });
85
-
86
- it("should include --watch flag when watch is set", async () => {
87
- const { buildTiltUpArgs } = await import("../tilt.js");
88
- const args = buildTiltUpArgs([], { watch: true });
89
- expect(args).toContain("--watch");
90
- });
91
-
92
- it("should order args: -f, tiltfile, services, options", async () => {
93
- const { buildTiltUpArgs } = await import("../tilt.js");
94
- const args = buildTiltUpArgs(["svc-a", "svc-b"], { verbose: true });
95
- expect(args[0]).toBe("-f");
96
- expect(args[1]).toContain("Tiltfile");
97
- expect(args[2]).toBe("svc-a");
98
- expect(args[3]).toBe("svc-b");
99
- expect(args[4]).toBe("--verbose");
100
- });
101
-
102
- it("should call findProjectRoot once", async () => {
103
- const { buildTiltUpArgs } = await import("../tilt.js");
104
- buildTiltUpArgs([], {});
105
- expect(findProjectRoot).toHaveBeenCalledTimes(1);
106
- });
107
-
108
- it("should include -- --focus=<stack> before service names when focusTargets is set", async () => {
109
- // Regression test: `tdk up <stack>` used to pass only bare positional service
110
- // names, which the generated Tiltfile's focus filter never reads (it only reads
111
- // --focus), so it silently fell back to building every stack instead of the one
112
- // requested. --focus must be present, carry the stack name, and be preceded by
113
- // `--` (tilt up rejects "--focus" as an unrecognized top-level flag otherwise -
114
- // `--` is what routes it to the Tiltfile's own config.parse()).
115
- const { buildTiltUpArgs } = await import("../tilt.js");
116
- const args = buildTiltUpArgs(["finance-api", "finance-app"], { focusTargets: ["finance"] });
117
- const dashDashIndex = args.indexOf("--");
118
- expect(dashDashIndex).toBeGreaterThanOrEqual(0);
119
- expect(args[dashDashIndex + 1]).toBe("--focus=finance");
120
- expect(args.indexOf("--focus=finance")).toBeLessThan(args.indexOf("finance-api"));
121
- });
122
-
123
- it("should join multiple focusTargets with commas in a single --focus flag", async () => {
124
- const { buildTiltUpArgs } = await import("../tilt.js");
125
- const args = buildTiltUpArgs([], { focusTargets: ["finance", "hr"] });
126
- expect(args).toContain("--focus=finance,hr");
127
- });
128
-
129
- it("should NOT include --focus when focusTargets is empty or omitted", async () => {
130
- const { buildTiltUpArgs } = await import("../tilt.js");
131
- const withEmpty = buildTiltUpArgs(["svc"], { focusTargets: [] });
132
- const withOmitted = buildTiltUpArgs(["svc"], {});
133
- expect(withEmpty.some((a) => a.startsWith("--focus"))).toBe(false);
134
- expect(withOmitted.some((a) => a.startsWith("--focus"))).toBe(false);
135
- });
136
- });
137
-
138
- describe("buildTiltDownArgs", () => {
139
- beforeEach(() => {
140
- vi.mocked(findProjectRoot).mockReturnValue("/fake/project");
141
- });
142
-
143
- afterEach(() => {
144
- vi.clearAllMocks();
145
- });
146
-
147
- it("should include -f flag with tiltfile path", async () => {
148
- const { buildTiltDownArgs } = await import("../tilt.js");
149
- const args = buildTiltDownArgs({});
150
- expect(args).toContain("-f");
151
- });
152
-
153
- it("should include --force flag when force is set", async () => {
154
- const { buildTiltDownArgs } = await import("../tilt.js");
155
- const args = buildTiltDownArgs({ force: true });
156
- expect(args).toContain("--force");
157
- });
158
-
159
- it("should not include --force flag when force is not set", async () => {
160
- const { buildTiltDownArgs } = await import("../tilt.js");
161
- const args = buildTiltDownArgs({});
162
- expect(args).not.toContain("--force");
163
- });
164
- });
165
-
166
- describe("isTiltAvailable", () => {
167
- it("should return a boolean", async () => {
168
- const { isTiltAvailable } = await import("../tilt.js");
169
- const available = await isTiltAvailable();
170
- expect(typeof available).toBe("boolean");
171
- });
172
- });
@@ -1,148 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { VALID_RESOURCE_TYPES } from "../constants.js";
3
- import {
4
- createKebabCaseValidator,
5
- isValidPort,
6
- sanitizeForShell,
7
- validateOptionalInfraService,
8
- validateResourceName,
9
- } from "../validation.js";
10
-
11
- describe("validateResourceName", () => {
12
- it("should validate correct kebab-case names", () => {
13
- expect(validateResourceName("my-service")).toEqual({ valid: true });
14
- expect(validateResourceName("service123")).toEqual({ valid: true });
15
- expect(validateResourceName("api-gateway")).toEqual({ valid: true });
16
- expect(validateResourceName("a")).toEqual({ valid: true });
17
- expect(validateResourceName("test-123-abc")).toEqual({ valid: true });
18
- });
19
-
20
- it("should reject empty names", () => {
21
- const result = validateResourceName("");
22
- expect(result.valid).toBe(false);
23
- expect(result.error).toContain("required");
24
- });
25
-
26
- it("should reject whitespace-only names", () => {
27
- const result = validateResourceName(" ");
28
- expect(result.valid).toBe(false);
29
- });
30
-
31
- it("should reject camelCase", () => {
32
- expect(validateResourceName("myService").valid).toBe(false);
33
- });
34
-
35
- it("should reject underscores", () => {
36
- expect(validateResourceName("my_service").valid).toBe(false);
37
- });
38
-
39
- it("should reject uppercase letters", () => {
40
- expect(validateResourceName("My-Service").valid).toBe(false);
41
- });
42
-
43
- it("should reject spaces", () => {
44
- expect(validateResourceName("my service").valid).toBe(false);
45
- });
46
-
47
- it("should reject dots", () => {
48
- expect(validateResourceName("my.service").valid).toBe(false);
49
- });
50
- });
51
-
52
- describe("createKebabCaseValidator", () => {
53
- it("should return true for valid resource names", () => {
54
- const validator = createKebabCaseValidator("resource");
55
- expect(validator("my-resource")).toBe(true);
56
- });
57
-
58
- it("should return error for empty resource name", () => {
59
- const validator = createKebabCaseValidator("resource");
60
- expect(validator("")).toBe("Resource name is required");
61
- });
62
-
63
- it("should return error for invalid resource name", () => {
64
- const validator = createKebabCaseValidator("resource");
65
- expect(validator("MyResource")).toBe("Use lowercase letters, numbers, and hyphens only");
66
- });
67
-
68
- it("should return error for empty stack name", () => {
69
- const validator = createKebabCaseValidator("stack");
70
- expect(validator("")).toBe("Stack name is required");
71
- });
72
-
73
- it("should return error for invalid stack name", () => {
74
- const validator = createKebabCaseValidator("stack");
75
- expect(validator("MyStack")).toBe("Use kebab-case (lowercase, numbers, hyphens only)");
76
- });
77
- });
78
-
79
- describe("validateOptionalInfraService", () => {
80
- it("should accept valid infra services", () => {
81
- expect(validateOptionalInfraService("monitoring").valid).toBe(true);
82
- expect(validateOptionalInfraService("elk").valid).toBe(true);
83
- expect(validateOptionalInfraService("debezium").valid).toBe(true);
84
- expect(validateOptionalInfraService("golden_image").valid).toBe(true);
85
- });
86
-
87
- it("should reject invalid infra services", () => {
88
- const result = validateOptionalInfraService("redis");
89
- expect(result.valid).toBe(false);
90
- expect(result.error).toContain("Invalid service");
91
- });
92
-
93
- it("should reject empty string", () => {
94
- expect(validateOptionalInfraService("").valid).toBe(false);
95
- });
96
- });
97
-
98
- describe("isValidPort", () => {
99
- it("should accept valid ports", () => {
100
- expect(isValidPort(1)).toBe(true);
101
- expect(isValidPort(1024)).toBe(true);
102
- expect(isValidPort(3000)).toBe(true);
103
- expect(isValidPort(8080)).toBe(true);
104
- expect(isValidPort(65535)).toBe(true);
105
- });
106
-
107
- it("should reject port 0", () => {
108
- expect(isValidPort(0)).toBe(false);
109
- });
110
-
111
- it("should reject negative ports", () => {
112
- expect(isValidPort(-1)).toBe(false);
113
- });
114
-
115
- it("should reject ports > 65535", () => {
116
- expect(isValidPort(65536)).toBe(false);
117
- });
118
-
119
- it("should reject NaN", () => {
120
- expect(isValidPort(NaN)).toBe(false);
121
- });
122
-
123
- it("should reject non-integer ports", () => {
124
- expect(isValidPort(80.5)).toBe(false);
125
- });
126
- });
127
-
128
- describe("sanitizeForShell", () => {
129
- it("should replace special characters", () => {
130
- expect(sanitizeForShell("hello$world")).toBe("hello_world");
131
- });
132
-
133
- it("should keep alphanumeric and hyphens", () => {
134
- expect(sanitizeForShell("my-service-123")).toBe("my-service-123");
135
- });
136
-
137
- it("should limit output to 100 chars", () => {
138
- const long = "a".repeat(200);
139
- expect(sanitizeForShell(long).length).toBe(100);
140
- });
141
- });
142
-
143
- describe("VALID_RESOURCE_TYPES", () => {
144
- it("should include all expected types", () => {
145
- const expected = ["backend", "frontend", "library", "sdk", "worker", "migrator"];
146
- expect(VALID_RESOURCE_TYPES.sort()).toEqual(expected.sort());
147
- });
148
- });
@@ -1,76 +0,0 @@
1
- import type { CacheEntry, CacheOptions } from "../types/index.js";
2
-
3
- export class Cache<T> {
4
- private data: Map<string, CacheEntry<T>>;
5
- private options: CacheOptions;
6
-
7
- constructor(options: CacheOptions) {
8
- this.data = new Map();
9
- this.options = options;
10
- }
11
-
12
- has(key: string): boolean {
13
- const entry = this.data.get(key);
14
- if (!entry) return false;
15
-
16
- const isExpired = Date.now() - entry.timestamp > this.options.ttlMs;
17
- if (isExpired) {
18
- this.data.delete(key);
19
- return false;
20
- }
21
-
22
- return true;
23
- }
24
-
25
- get(key: string): T | undefined {
26
- if (!this.has(key)) {
27
- return undefined;
28
- }
29
- return this.data.get(key)?.value;
30
- }
31
-
32
- set(key: string, value: T): void {
33
- this.data.set(key, {
34
- value,
35
- timestamp: Date.now(),
36
- });
37
- }
38
-
39
- delete(key: string): void {
40
- this.data.delete(key);
41
- }
42
-
43
- clear(): void {
44
- this.data.clear();
45
- }
46
-
47
- keys(): string[] {
48
- const validKeys: string[] = [];
49
- for (const key of this.data.keys()) {
50
- if (this.has(key)) {
51
- validKeys.push(key);
52
- }
53
- }
54
- return validKeys;
55
- }
56
-
57
- size(): number {
58
- return this.keys().length;
59
- }
60
- }
61
-
62
- export function createCacheValidator(ttlMs: number) {
63
- let lastUpdated = 0;
64
-
65
- return {
66
- isValid(): boolean {
67
- return Date.now() - lastUpdated < ttlMs;
68
- },
69
- markUpdated(): void {
70
- lastUpdated = Date.now();
71
- },
72
- reset(): void {
73
- lastUpdated = 0;
74
- },
75
- };
76
- }
@@ -1,54 +0,0 @@
1
- import type { ValidationResult } from "../types/index.js";
2
- import { showErrorAndExit } from "./errors.js";
3
- import { showCancelled } from "./formatting.js";
4
- import { promptConfirm } from "./prompt.js";
5
-
6
- export async function confirmAction(message: string, defaultValue = true): Promise<boolean> {
7
- const confirm = await promptConfirm({ message, initial: defaultValue });
8
-
9
- if (!confirm) {
10
- showCancelled();
11
- }
12
-
13
- return confirm;
14
- }
15
-
16
- export function assertValid(
17
- validation: ValidationResult,
18
- exitCode: number = 1,
19
- ): asserts validation is { valid: true } {
20
- if (!validation.valid) {
21
- showErrorAndExit(validation.error ?? "Validation failed", exitCode);
22
- }
23
- }
24
-
25
- export function handleDryRun(
26
- options: { dryRun?: boolean },
27
- description: string,
28
- command: string,
29
- ): boolean {
30
- if (options.dryRun) {
31
- console.log(`Dry run - ${description}`);
32
- console.log(`Would run: ${command}`);
33
- return true;
34
- }
35
- return false;
36
- }
37
-
38
- /**
39
- * Prompt for confirmation with cancellation handling.
40
- * Displays a confirmation prompt and exits/cancels if user declines.
41
- * @param message - The confirmation message to display
42
- * @param onCancel - Optional callback when user cancels (defaults to returning false)
43
- * @returns Promise<boolean> - true if confirmed, false if cancelled (with callback)
44
- */
45
- export async function confirmOrCancel(message: string, onCancel?: () => void): Promise<boolean> {
46
- const confirmed = await confirmAction(message, true);
47
- if (!confirmed) {
48
- if (onCancel) {
49
- onCancel();
50
- }
51
- return false;
52
- }
53
- return true;
54
- }
@@ -1,130 +0,0 @@
1
- import type { ResourceType } from "../types/index.js";
2
-
3
- export const MASTER_CONFIG_FILES = [
4
- "TILT_TECH_STACK.star",
5
- "TILT_RESOURCE_DEFAULTS.star",
6
- "spec.master",
7
- ] as const;
8
-
9
- export const VALID_RESOURCE_TYPES: ResourceType[] = [
10
- "backend",
11
- "frontend",
12
- "library",
13
- "sdk",
14
- "worker",
15
- "migrator",
16
- ] as const;
17
-
18
- // Frontend/library/sdk services are served statically or consumed as
19
- // packages, so they never need a "start" script - only backend/worker/
20
- // migrator processes are run in production via `<runtime> run start`.
21
- export const REQUIRED_PACKAGE_SCRIPTS: Record<ResourceType, readonly string[]> = {
22
- backend: ["dev", "build", "start"],
23
- worker: ["dev", "build", "start"],
24
- migrator: ["dev", "build", "start"],
25
- frontend: ["dev", "build"],
26
- library: ["dev", "build"],
27
- sdk: ["dev", "build"],
28
- } as const;
29
-
30
- // Version specifiers that pin nothing at all - a fresh `bun install`/`npm install`
31
- // can pull a different (possibly breaking) version on every run.
32
- export const UNPINNED_DEPENDENCY_VERSIONS = new Set(["latest", "*"]);
33
-
34
- export const OPTIONAL_INFRA_SERVICES = [
35
- "monitoring",
36
- "elk",
37
- "debezium",
38
- "golden_image",
39
- "verdaccio",
40
- ] as const;
41
-
42
- export const PORT_RANGES = {
43
- frontend: { base: 3000, min: 3000, max: 3999, range: "3000-3999" as const },
44
- backend: { base: 4000, min: 4000, max: 4999, range: "4000-4999" as const },
45
- worker: { base: 6000, min: 6000, max: 6999, range: "6000-6999" as const },
46
- health: { base: 5000, min: 5000, max: 5999, range: "5000-5999" as const },
47
- migrator: { base: 7000, min: 7000, max: 7999, range: "7000-7999" as const },
48
- } as const;
49
-
50
- export const STANDARD_PORTS = {
51
- tiltUi: 10350,
52
- traefik: 8080,
53
- } as const;
54
-
55
- export const QUICKSTART_DOCS_URL = "https://tdk-landscape.github.io/tdk-website/docs/quickstart/";
56
-
57
- export const BASE_DOMAIN_DEFAULT = "tdk-project.localhost";
58
- export const APP_SUBDOMAIN_PREFIX = "app";
59
- export const API_SUBDOMAIN_PREFIX = "api";
60
-
61
- export function getBaseDomain(): string {
62
- const override = process.env.TDK_SERVICE_BASE_URL ?? process.env.TDK_PUBLIC_HOST;
63
- if (override) {
64
- try {
65
- const u = new URL(override.includes("://") ? override : `http://${override}`);
66
- return u.hostname;
67
- } catch {
68
- return override.replace(/^https?:\/\//, "").split("/")[0];
69
- }
70
- }
71
- return BASE_DOMAIN_DEFAULT;
72
- }
73
-
74
- export function frontendBaseUrl(protocol = "http"): string {
75
- return `${protocol}://${APP_SUBDOMAIN_PREFIX}.${getBaseDomain()}`;
76
- }
77
-
78
- export function apiBaseUrl(protocol = "http"): string {
79
- return `${protocol}://${API_SUBDOMAIN_PREFIX}.${getBaseDomain()}`;
80
- }
81
-
82
- export const SKIP_DIRECTORIES = [
83
- "node_modules",
84
- ".git",
85
- ".tilt",
86
- ".tilt-engine",
87
- "dist",
88
- "build",
89
- ".prisma",
90
- ".turbo",
91
- "coverage",
92
- "tmp",
93
- "temp",
94
- "__tests__",
95
- "test",
96
- "tests",
97
- ".github",
98
- ".vscode",
99
- "docs",
100
- ] as const;
101
-
102
- export const AUTOGENERATED_FILE_PATTERNS = [
103
- "Dockerfile",
104
- "docker-compose.yml",
105
- "docker-compose.yaml",
106
- "Tiltfile",
107
- "vite.config.ts",
108
- "tsconfig.json",
109
- "tsconfig.build.json",
110
- ] as const;
111
-
112
- // Stack emojis - generic, no hardcoded service names
113
- // Users can add their own stack emojis via project config
114
- const STACK_EMOJIS: Record<string, string> = {
115
- infra: "🏗️",
116
- core: "🔧",
117
- api: "⚡",
118
- app: "🎨",
119
- orchestrator: "⚙️",
120
- } as const;
121
-
122
- export function getStackEmoji(stackName: string): string {
123
- const lowerName = stackName.toLowerCase();
124
- for (const [key, emoji] of Object.entries(STACK_EMOJIS)) {
125
- if (lowerName.includes(key)) {
126
- return emoji;
127
- }
128
- }
129
- return "📦";
130
- }
@@ -1,49 +0,0 @@
1
- import type { DiscoveredResource, DiscoveryContext } from "../types/index.js";
2
- import { createCacheValidator } from "./cache.js";
3
- import { discoverResources, discoverStacks, getAllStacks } from "./services.js";
4
-
5
- let cachedContext: DiscoveryContext | null = null;
6
- const cacheValidator = createCacheValidator(1000);
7
-
8
- export function clearDiscoveryCache(): void {
9
- cachedContext = null;
10
- cacheValidator.reset();
11
- }
12
-
13
- function isCacheValid(): boolean {
14
- return cachedContext !== null && cacheValidator.isValid();
15
- }
16
-
17
- export function createDiscoveryContext(forceRefresh = false): DiscoveryContext {
18
- if (!forceRefresh && isCacheValid() && cachedContext) {
19
- return cachedContext;
20
- }
21
-
22
- const resources = discoverResources();
23
- const stacks = discoverStacks();
24
- const stackNames = getAllStacks(resources);
25
-
26
- const unassignedResources = resources.filter((r) => !r.stack);
27
-
28
- const resourcesByStack = new Map<string, DiscoveredResource[]>();
29
- for (const resource of resources) {
30
- if (resource.stack) {
31
- const stackResources = resourcesByStack.get(resource.stack) || [];
32
- stackResources.push(resource);
33
- resourcesByStack.set(resource.stack, stackResources);
34
- }
35
- }
36
-
37
- const context: DiscoveryContext = {
38
- resources,
39
- stacks,
40
- stackNames,
41
- unassignedResources,
42
- resourcesByStack,
43
- };
44
-
45
- cachedContext = context;
46
- cacheValidator.markUpdated();
47
-
48
- return context;
49
- }
@@ -1,20 +0,0 @@
1
- import { execSync } from "node:child_process";
2
-
3
- // A wedged daemon makes `docker ps` block forever instead of failing.
4
- const RUNTIME_CHECK_TIMEOUT_MS = 10_000;
5
-
6
- export type ContainerRuntimeStatus = "running" | "unresponsive" | "missing";
7
-
8
- /** Whether Docker, Colima, or Podman is reachable, hung, or absent. */
9
- export function getContainerRuntimeStatus(): ContainerRuntimeStatus {
10
- let sawTimeout = false;
11
- for (const command of ["docker ps", "colima status", "podman ps"]) {
12
- try {
13
- execSync(command, { stdio: "ignore", timeout: RUNTIME_CHECK_TIMEOUT_MS });
14
- return "running";
15
- } catch (err) {
16
- if ((err as NodeJS.ErrnoException).code === "ETIMEDOUT") sawTimeout = true;
17
- }
18
- }
19
- return sawTimeout ? "unresponsive" : "missing";
20
- }