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

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