@tdk-landscape/tdk-cli-core 1.3.49 โ†’ 1.3.50

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 (309) hide show
  1. package/.claude/skills/layer-autoresearch/SKILL.md +48 -0
  2. package/.claude/skills/tdk-troubleshoot/SKILL.md +222 -0
  3. package/.github/ISSUE_TEMPLATE/bug_report.yml +40 -0
  4. package/.github/ISSUE_TEMPLATE/config.yml +8 -0
  5. package/.github/ISSUE_TEMPLATE/feature_request.yml +18 -0
  6. package/.github/dependabot.yml +33 -0
  7. package/.github/pull_request_template.md +5 -0
  8. package/.github/workflows/ci.yml +187 -0
  9. package/.github/workflows/release-binaries.yml +19 -9
  10. package/.github/zizmor.yml +9 -0
  11. package/CODE_OF_CONDUCT.md +9 -0
  12. package/CONTRIBUTING.md +42 -0
  13. package/LICENSE +21 -0
  14. package/README.md +149 -0
  15. package/SECURITY.md +17 -0
  16. package/benchmarks/results/container-scale-2026-09-25T20-54-49-736Z.json +45 -0
  17. package/benchmarks/results/container-scale-2026-09-25T21-01-20-540Z.json +150 -0
  18. package/benchmarks/results/container-scale-2026-09-25T21-15-01-441Z.json +73 -0
  19. package/benchmarks/results/container-scale-2026-09-25T22-09-01-630Z.json +77 -0
  20. package/benchmarks/results/container-scale-2026-09-25T22-18-28-371Z.json +202 -0
  21. package/cli/README.md +25 -0
  22. package/cli/biome.json +1 -1
  23. package/cli/dist/cli.d.ts +3 -0
  24. package/cli/dist/cli.d.ts.map +1 -0
  25. package/cli/dist/cli.js +64 -0
  26. package/cli/dist/cli.js.map +1 -0
  27. package/cli/dist/commands/completion.d.ts +3 -0
  28. package/cli/dist/commands/completion.d.ts.map +1 -0
  29. package/cli/dist/commands/completion.js +294 -0
  30. package/cli/dist/commands/completion.js.map +1 -0
  31. package/cli/dist/commands/config.d.ts +3 -0
  32. package/cli/dist/commands/config.d.ts.map +1 -0
  33. package/cli/dist/commands/config.js +231 -0
  34. package/cli/dist/commands/config.js.map +1 -0
  35. package/cli/dist/commands/doctor.d.ts +19 -0
  36. package/cli/dist/commands/doctor.d.ts.map +1 -0
  37. package/cli/dist/commands/doctor.js +745 -0
  38. package/cli/dist/commands/doctor.js.map +1 -0
  39. package/cli/dist/commands/down.d.ts +3 -0
  40. package/cli/dist/commands/down.d.ts.map +1 -0
  41. package/cli/dist/commands/down.js +32 -0
  42. package/cli/dist/commands/down.js.map +1 -0
  43. package/cli/dist/commands/help.d.ts +2 -0
  44. package/cli/dist/commands/help.d.ts.map +1 -0
  45. package/cli/dist/commands/help.js +138 -0
  46. package/cli/dist/commands/help.js.map +1 -0
  47. package/cli/dist/commands/networks.d.ts +3 -0
  48. package/cli/dist/commands/networks.d.ts.map +1 -0
  49. package/cli/dist/commands/networks.js +260 -0
  50. package/cli/dist/commands/networks.js.map +1 -0
  51. package/cli/dist/commands/project.d.ts +3 -0
  52. package/cli/dist/commands/project.d.ts.map +1 -0
  53. package/cli/dist/commands/project.js +370 -0
  54. package/cli/dist/commands/project.js.map +1 -0
  55. package/cli/dist/commands/projects.d.ts +3 -0
  56. package/cli/dist/commands/projects.d.ts.map +1 -0
  57. package/cli/dist/commands/projects.js +71 -0
  58. package/cli/dist/commands/projects.js.map +1 -0
  59. package/cli/dist/commands/resource.d.ts +69 -0
  60. package/cli/dist/commands/resource.d.ts.map +1 -0
  61. package/cli/dist/commands/resource.js +579 -0
  62. package/cli/dist/commands/resource.js.map +1 -0
  63. package/cli/dist/commands/resources.d.ts +3 -0
  64. package/cli/dist/commands/resources.d.ts.map +1 -0
  65. package/cli/dist/commands/resources.js +73 -0
  66. package/cli/dist/commands/resources.js.map +1 -0
  67. package/cli/dist/commands/stack.d.ts +3 -0
  68. package/cli/dist/commands/stack.d.ts.map +1 -0
  69. package/cli/dist/commands/stack.js +97 -0
  70. package/cli/dist/commands/stack.js.map +1 -0
  71. package/cli/dist/commands/stacks.d.ts +3 -0
  72. package/cli/dist/commands/stacks.d.ts.map +1 -0
  73. package/cli/dist/commands/stacks.js +43 -0
  74. package/cli/dist/commands/stacks.js.map +1 -0
  75. package/cli/dist/commands/status.d.ts +3 -0
  76. package/cli/dist/commands/status.d.ts.map +1 -0
  77. package/cli/dist/commands/status.js +71 -0
  78. package/cli/dist/commands/status.js.map +1 -0
  79. package/cli/dist/commands/ui.d.ts +3 -0
  80. package/cli/dist/commands/ui.d.ts.map +1 -0
  81. package/cli/dist/commands/ui.js +445 -0
  82. package/cli/dist/commands/ui.js.map +1 -0
  83. package/cli/dist/commands/up.d.ts +3 -0
  84. package/cli/dist/commands/up.d.ts.map +1 -0
  85. package/cli/dist/commands/up.js +124 -0
  86. package/cli/dist/commands/up.js.map +1 -0
  87. package/cli/dist/commands/upgrade.d.ts +11 -0
  88. package/cli/dist/commands/upgrade.d.ts.map +1 -0
  89. package/cli/dist/commands/upgrade.js +496 -0
  90. package/cli/dist/commands/upgrade.js.map +1 -0
  91. package/cli/dist/commands/version.d.ts +3 -0
  92. package/cli/dist/commands/version.d.ts.map +1 -0
  93. package/cli/dist/commands/version.js +9 -0
  94. package/cli/dist/commands/version.js.map +1 -0
  95. package/cli/dist/components/Accessible.d.ts +8 -0
  96. package/cli/dist/components/Accessible.d.ts.map +1 -0
  97. package/cli/dist/components/Accessible.js +10 -0
  98. package/cli/dist/components/Accessible.js.map +1 -0
  99. package/cli/dist/components/BaseTooltip.d.ts +4 -0
  100. package/cli/dist/components/BaseTooltip.d.ts.map +1 -0
  101. package/cli/dist/components/BaseTooltip.js +28 -0
  102. package/cli/dist/components/BaseTooltip.js.map +1 -0
  103. package/cli/dist/components/DetailPanel.d.ts +4 -0
  104. package/cli/dist/components/DetailPanel.d.ts.map +1 -0
  105. package/cli/dist/components/DetailPanel.js +18 -0
  106. package/cli/dist/components/DetailPanel.js.map +1 -0
  107. package/cli/dist/components/FileTree.d.ts +4 -0
  108. package/cli/dist/components/FileTree.d.ts.map +1 -0
  109. package/cli/dist/components/FileTree.js +47 -0
  110. package/cli/dist/components/FileTree.js.map +1 -0
  111. package/cli/dist/components/ResourceSelectInput.d.ts +4 -0
  112. package/cli/dist/components/ResourceSelectInput.d.ts.map +1 -0
  113. package/cli/dist/components/ResourceSelectInput.js +7 -0
  114. package/cli/dist/components/ResourceSelectInput.js.map +1 -0
  115. package/cli/dist/components/ResourceTable.d.ts +4 -0
  116. package/cli/dist/components/ResourceTable.d.ts.map +1 -0
  117. package/cli/dist/components/ResourceTable.js +18 -0
  118. package/cli/dist/components/ResourceTable.js.map +1 -0
  119. package/cli/dist/components/TabBar.d.ts +4 -0
  120. package/cli/dist/components/TabBar.d.ts.map +1 -0
  121. package/cli/dist/components/TabBar.js +17 -0
  122. package/cli/dist/components/TabBar.js.map +1 -0
  123. package/cli/dist/components/Tooltip.d.ts +12 -0
  124. package/cli/dist/components/Tooltip.d.ts.map +1 -0
  125. package/cli/dist/components/Tooltip.js +12 -0
  126. package/cli/dist/components/Tooltip.js.map +1 -0
  127. package/cli/dist/components/index.d.ts +8 -0
  128. package/cli/dist/components/index.d.ts.map +1 -0
  129. package/cli/dist/components/index.js +8 -0
  130. package/cli/dist/components/index.js.map +1 -0
  131. package/cli/dist/config/platform-standards.d.ts +159 -0
  132. package/cli/dist/config/platform-standards.d.ts.map +1 -0
  133. package/cli/dist/config/platform-standards.js +181 -0
  134. package/cli/dist/config/platform-standards.js.map +1 -0
  135. package/cli/dist/generator/extension-fetch.d.ts +25 -0
  136. package/cli/dist/generator/extension-fetch.d.ts.map +1 -0
  137. package/cli/dist/generator/extension-fetch.js +259 -0
  138. package/cli/dist/generator/extension-fetch.js.map +1 -0
  139. package/cli/dist/generator/template-engine.d.ts +62 -0
  140. package/cli/dist/generator/template-engine.d.ts.map +1 -0
  141. package/cli/dist/generator/template-engine.js +623 -0
  142. package/cli/dist/generator/template-engine.js.map +1 -0
  143. package/cli/dist/index.d.ts +11 -0
  144. package/cli/dist/index.d.ts.map +1 -0
  145. package/cli/dist/index.js +11 -0
  146. package/cli/dist/index.js.map +1 -0
  147. package/cli/dist/types/index.d.ts +257 -0
  148. package/cli/dist/types/index.d.ts.map +1 -0
  149. package/cli/dist/types/index.js +17 -0
  150. package/cli/dist/types/index.js.map +1 -0
  151. package/cli/dist/utils/cache.d.ts +19 -0
  152. package/cli/dist/utils/cache.d.ts.map +1 -0
  153. package/cli/dist/utils/cache.js +64 -0
  154. package/cli/dist/utils/cache.js.map +1 -0
  155. package/cli/dist/utils/command-helpers.d.ts +17 -0
  156. package/cli/dist/utils/command-helpers.d.ts.map +1 -0
  157. package/cli/dist/utils/command-helpers.js +41 -0
  158. package/cli/dist/utils/command-helpers.js.map +1 -0
  159. package/cli/dist/utils/constants.d.ts +53 -0
  160. package/cli/dist/utils/constants.d.ts.map +1 -0
  161. package/cli/dist/utils/constants.js +115 -0
  162. package/cli/dist/utils/constants.js.map +1 -0
  163. package/cli/dist/utils/discovery-context.d.ts +4 -0
  164. package/cli/dist/utils/discovery-context.d.ts.map +1 -0
  165. package/cli/dist/utils/discovery-context.js +39 -0
  166. package/cli/dist/utils/discovery-context.js.map +1 -0
  167. package/cli/dist/utils/docker.d.ts +4 -0
  168. package/cli/dist/utils/docker.d.ts.map +1 -0
  169. package/cli/dist/utils/docker.js +19 -0
  170. package/cli/dist/utils/docker.js.map +1 -0
  171. package/cli/dist/utils/doctor-runtime.d.ts +81 -0
  172. package/cli/dist/utils/doctor-runtime.d.ts.map +1 -0
  173. package/cli/dist/utils/doctor-runtime.js +498 -0
  174. package/cli/dist/utils/doctor-runtime.js.map +1 -0
  175. package/cli/dist/utils/env-validator.d.ts +15 -0
  176. package/cli/dist/utils/env-validator.d.ts.map +1 -0
  177. package/cli/dist/utils/env-validator.js +109 -0
  178. package/cli/dist/utils/env-validator.js.map +1 -0
  179. package/cli/dist/utils/errors.d.ts +31 -0
  180. package/cli/dist/utils/errors.d.ts.map +1 -0
  181. package/cli/dist/utils/errors.js +140 -0
  182. package/cli/dist/utils/errors.js.map +1 -0
  183. package/cli/dist/utils/file-helpers.d.ts +14 -0
  184. package/cli/dist/utils/file-helpers.d.ts.map +1 -0
  185. package/cli/dist/utils/file-helpers.js +45 -0
  186. package/cli/dist/utils/file-helpers.js.map +1 -0
  187. package/cli/dist/utils/formatting.d.ts +30 -0
  188. package/cli/dist/utils/formatting.d.ts.map +1 -0
  189. package/cli/dist/utils/formatting.js +164 -0
  190. package/cli/dist/utils/formatting.js.map +1 -0
  191. package/cli/dist/utils/paths.d.ts +3 -0
  192. package/cli/dist/utils/paths.d.ts.map +1 -0
  193. package/cli/dist/utils/paths.js +41 -0
  194. package/cli/dist/utils/paths.js.map +1 -0
  195. package/cli/dist/utils/port-assignment.d.ts +6 -0
  196. package/cli/dist/utils/port-assignment.d.ts.map +1 -0
  197. package/cli/dist/utils/port-assignment.js +81 -0
  198. package/cli/dist/utils/port-assignment.js.map +1 -0
  199. package/cli/dist/utils/project-features.d.ts +23 -0
  200. package/cli/dist/utils/project-features.d.ts.map +1 -0
  201. package/cli/dist/utils/project-features.js +98 -0
  202. package/cli/dist/utils/project-features.js.map +1 -0
  203. package/cli/dist/utils/project-templates.d.ts +7 -0
  204. package/cli/dist/utils/project-templates.d.ts.map +1 -0
  205. package/cli/dist/utils/project-templates.js +24 -0
  206. package/cli/dist/utils/project-templates.js.map +1 -0
  207. package/cli/dist/utils/prompt.d.ts +28 -0
  208. package/cli/dist/utils/prompt.d.ts.map +1 -0
  209. package/cli/dist/utils/prompt.js +79 -0
  210. package/cli/dist/utils/prompt.js.map +1 -0
  211. package/cli/dist/utils/resource-features.d.ts +29 -0
  212. package/cli/dist/utils/resource-features.d.ts.map +1 -0
  213. package/cli/dist/utils/resource-features.js +175 -0
  214. package/cli/dist/utils/resource-features.js.map +1 -0
  215. package/cli/dist/utils/service-urls.d.ts +30 -0
  216. package/cli/dist/utils/service-urls.d.ts.map +1 -0
  217. package/cli/dist/utils/service-urls.js +93 -0
  218. package/cli/dist/utils/service-urls.js.map +1 -0
  219. package/cli/dist/utils/services.d.ts +18 -0
  220. package/cli/dist/utils/services.d.ts.map +1 -0
  221. package/cli/dist/utils/services.js +292 -0
  222. package/cli/dist/utils/services.js.map +1 -0
  223. package/cli/dist/utils/stack-features.d.ts +22 -0
  224. package/cli/dist/utils/stack-features.d.ts.map +1 -0
  225. package/cli/dist/utils/stack-features.js +13 -0
  226. package/cli/dist/utils/stack-features.js.map +1 -0
  227. package/cli/dist/utils/tar.d.ts +7 -0
  228. package/cli/dist/utils/tar.d.ts.map +1 -0
  229. package/cli/dist/utils/tar.js +21 -0
  230. package/cli/dist/utils/tar.js.map +1 -0
  231. package/cli/dist/utils/tilt.d.ts +20 -0
  232. package/cli/dist/utils/tilt.d.ts.map +1 -0
  233. package/cli/dist/utils/tilt.js +95 -0
  234. package/cli/dist/utils/tilt.js.map +1 -0
  235. package/cli/dist/utils/validation.d.ts +16 -0
  236. package/cli/dist/utils/validation.d.ts.map +1 -0
  237. package/cli/dist/utils/validation.js +58 -0
  238. package/cli/dist/utils/validation.js.map +1 -0
  239. package/cli/package.json +11 -12
  240. package/cli/src/commands/__tests__/always-enabled-infra.test.ts +2 -8
  241. package/cli/src/commands/__tests__/doctor.test.ts +181 -8
  242. package/cli/src/commands/__tests__/phases-model.test.ts +2 -4
  243. package/cli/src/commands/__tests__/project-resource-features-e2e.test.ts +4 -24
  244. package/cli/src/commands/__tests__/saas-starter-integration.test.ts +8 -10
  245. package/cli/src/commands/__tests__/stack-features-e2e.test.ts +10 -4
  246. package/cli/src/commands/__tests__/upgrade.test.ts +23 -13
  247. package/cli/src/commands/doctor.ts +136 -0
  248. package/cli/src/commands/help.ts +13 -3
  249. package/cli/src/commands/project.ts +11 -14
  250. package/cli/src/commands/projects.ts +2 -2
  251. package/cli/src/commands/up.ts +13 -4
  252. package/cli/src/commands/upgrade.ts +11 -4
  253. package/cli/src/config/platform-standards.test.ts +6 -6
  254. package/cli/src/generator/__tests__/extension-fetch.test.ts +36 -14
  255. package/cli/src/generator/extension-fetch.ts +12 -5
  256. package/cli/src/generator/template-engine.ts +19 -21
  257. package/cli/src/types/index.ts +2 -0
  258. package/cli/src/utils/__tests__/tilt.test.ts +29 -0
  259. package/cli/src/utils/constants.ts +4 -0
  260. package/cli/src/utils/doctor-runtime.ts +67 -27
  261. package/cli/src/utils/env-validator.ts +2 -2
  262. package/cli/src/utils/project-templates.ts +2 -1
  263. package/cli/src/utils/prompt.ts +2 -4
  264. package/cli/src/utils/resource-features.ts +10 -4
  265. package/cli/src/utils/services.ts +2 -1
  266. package/cli/src/utils/tilt.ts +20 -0
  267. package/engine/assets/docker/wake-gateway/Dockerfile +26 -0
  268. package/engine/assets/docker/wake-gateway/decide.test.ts +87 -0
  269. package/engine/assets/docker/wake-gateway/decide.ts +75 -0
  270. package/engine/assets/docker/wake-gateway/server.ts +220 -0
  271. package/engine/topologies/platform/docker/build/golden_image_dockerfile.star +13 -23
  272. package/engine/topologies/platform/docker/compose/compose.star +7 -14
  273. package/engine/topologies/platform/docker/compose/compose_helpers.star +1 -1
  274. package/engine/topologies/platform/docker/compose/traefik_standalone.star +44 -6
  275. package/engine/topologies/platform/docker/config/healthcheck.star +56 -0
  276. package/engine/topologies/platform/docker/constants.star +10 -0
  277. package/engine/topologies/platform/docker/layers/l1_base_layers.star +1 -1
  278. package/engine/topologies/platform/docker/layers/l4_runtime_layers.star +55 -20
  279. package/engine/topologies/platform/docker/networking/traefik_static_routes.star +107 -0
  280. package/engine/topologies/tilt/generators/typescript/backend_tsconfig.star +2 -2
  281. package/engine/topologies/tilt/generators/typescript/frontend_tsconfig.star +1 -1
  282. package/engine/topologies/tilt/manifest/schema.star +6 -0
  283. package/engine/topologies/tilt/manifest/validator.star +16 -0
  284. package/engine/topologies/tilt/resources/orchestrator/apply_compose_resource_registration.star +107 -8
  285. package/engine/topologies/tilt/resources/orchestrator/builders/typescript.star +12 -6
  286. package/engine/topologies/tilt/resources/orchestrator/generators/manifest_resource.star +2 -1
  287. package/knip.json +1 -1
  288. package/openspec/changes/optimize-runtime-docker-layers/.openspec.yaml +3 -0
  289. package/openspec/changes/optimize-runtime-docker-layers/design.md +81 -0
  290. package/openspec/changes/optimize-runtime-docker-layers/proposal.md +44 -0
  291. package/openspec/changes/optimize-runtime-docker-layers/specs/runtime-container-footprint/spec.md +79 -0
  292. package/openspec/changes/optimize-runtime-docker-layers/tasks.md +36 -0
  293. package/openspec/changes/prioritized-cold-start/.openspec.yaml +4 -0
  294. package/openspec/changes/prioritized-cold-start/design.md +113 -0
  295. package/openspec/changes/prioritized-cold-start/proposal.md +40 -0
  296. package/openspec/changes/prioritized-cold-start/specs/on-demand-resource-startup/spec.md +92 -0
  297. package/openspec/changes/prioritized-cold-start/tasks.md +46 -0
  298. package/openspec/config.yaml +1 -0
  299. package/package.json +35 -5
  300. package/scripts/autoresearch/layer-eval.sh +65 -0
  301. package/scripts/benchmark/README.md +25 -0
  302. package/scripts/benchmark/container-scale.ts +503 -0
  303. package/scripts/benchmark/pre-release-gate.sh +9 -0
  304. package/scripts/measure-idle-footprint.sh +58 -0
  305. package/tests/tilt-engine/test_runtime_container_footprint.py +162 -0
  306. package/tests/tilt-engine/test_sablier_defer_start.py +196 -0
  307. package/tests/tilt-engine/test_standalone_traefik.py +38 -0
  308. package/tests/tilt-engine/test_traefik_static_wake_route.py +119 -0
  309. package/bun.lock +0 -538
@@ -0,0 +1,579 @@
1
+ import { existsSync, mkdirSync } from "node:fs";
2
+ import { isAbsolute, relative, resolve } from "node:path";
3
+ import chalk from "chalk";
4
+ import { Command } from "commander";
5
+ import { hasDddLicense } from "../generator/extension-fetch.js";
6
+ import { CREATABLE_RESOURCE_TYPES } from "../types/index.js";
7
+ import { assertValid, confirmOrCancel } from "../utils/command-helpers.js";
8
+ import { errorFactories, requireProjectRoot, runCommand } from "../utils/errors.js";
9
+ import { writeFilesWithProgress } from "../utils/file-helpers.js";
10
+ import { showCommandHeader } from "../utils/formatting.js";
11
+ import { assignPort } from "../utils/port-assignment.js";
12
+ import { promptSelect, promptText } from "../utils/prompt.js";
13
+ import { getDefaultFeaturesForResourceType } from "../utils/resource-features.js";
14
+ import { discoverResources } from "../utils/services.js";
15
+ import { createKebabCaseValidator, isPathSafe, validateResourceName } from "../utils/validation.js";
16
+ export const BASE_TEMPLATE = {
17
+ port: 0, // Will be assigned
18
+ dependencies: [],
19
+ build: {
20
+ dockerfile: "Dockerfile",
21
+ context: ".",
22
+ },
23
+ dev: {
24
+ command: "bun run dev",
25
+ watch: ["src/**/*"],
26
+ },
27
+ };
28
+ export const TYPE_SPECIFIC = {
29
+ backend: {
30
+ healthCheck: "/health",
31
+ },
32
+ frontend: {
33
+ dev: {
34
+ command: "bun run dev",
35
+ watch: ["src/**/*", "public/**/*"],
36
+ },
37
+ },
38
+ worker: {
39
+ dev: {
40
+ command: "bun run worker",
41
+ watch: ["src/**/*"],
42
+ },
43
+ },
44
+ };
45
+ export function createServiceJson(name, type, stack, port, extraFeatures = []) {
46
+ const typeSpecific = TYPE_SPECIFIC[type];
47
+ const base = JSON.parse(JSON.stringify(BASE_TEMPLATE));
48
+ for (const [key, value] of Object.entries(typeSpecific)) {
49
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
50
+ base[key] = { ...base[key], ...value };
51
+ }
52
+ else {
53
+ base[key] = value;
54
+ }
55
+ }
56
+ return {
57
+ ...base,
58
+ appName: name,
59
+ appType: type,
60
+ featuresEnabled: [...getDefaultFeaturesForResourceType(type), ...extraFeatures],
61
+ name,
62
+ type,
63
+ stack,
64
+ port,
65
+ };
66
+ }
67
+ export function createPackageJson(name, type) {
68
+ const isFrontend = type === "frontend";
69
+ return {
70
+ name: `@project/${name}`,
71
+ version: "0.0.1",
72
+ type: "module",
73
+ scripts: {
74
+ dev: isFrontend ? "vite" : "bun run --watch src/index.ts",
75
+ build: isFrontend ? "tsc && vite build" : "tsc",
76
+ test: "vitest",
77
+ lint: "biome check .",
78
+ "lint:fix": "biome check . --write",
79
+ },
80
+ dependencies: {
81
+ ...(isFrontend ? {} : { hono: "^4.0.0" }),
82
+ },
83
+ devDependencies: {
84
+ "@types/bun": "latest",
85
+ typescript: "^7.0.2",
86
+ vitest: "^5.0.0",
87
+ "@biomejs/biome": "^2.5.13",
88
+ ...(isFrontend ? { vite: "^5.0.0" } : {}),
89
+ },
90
+ };
91
+ }
92
+ export const TSCONFIG_TEMPLATE = {
93
+ compilerOptions: {
94
+ target: "ES2022",
95
+ module: "ESNext",
96
+ moduleResolution: "bundler",
97
+ strict: true,
98
+ esModuleInterop: true,
99
+ skipLibCheck: true,
100
+ forceConsistentCasingInFileNames: true,
101
+ outDir: "./dist",
102
+ rootDir: "./src",
103
+ declaration: true,
104
+ declarationMap: true,
105
+ sourceMap: true,
106
+ },
107
+ include: ["src/**/*"],
108
+ exclude: ["node_modules", "dist"],
109
+ };
110
+ export const DOCKERFILE_TEMPLATE = `FROM oven/bun:1.2
111
+
112
+ WORKDIR /app
113
+
114
+ # Copy package files
115
+ COPY package.json bun.lock ./
116
+
117
+ # Install dependencies
118
+ RUN bun install --frozen-lockfile
119
+
120
+ # Copy source
121
+ COPY . .
122
+
123
+ # Build if needed
124
+ RUN bun run build
125
+
126
+ # Health check
127
+ HEALTHCHECK --interval=10s --timeout=5s --retries=3 \\
128
+ CMD curl -f http://localhost:3000/health || exit 1
129
+
130
+ EXPOSE 3000
131
+
132
+ CMD ["bun", "run", "start"]
133
+ `;
134
+ export function getBackendIndexTemplate(name) {
135
+ return `import { Hono } from 'hono';
136
+
137
+ const app = new Hono();
138
+
139
+ // Health check endpoint (required by TILT_RESOURCE_DEFAULTS.star)
140
+ app.get('/health', (c) => {
141
+ return c.json({ status: 'ok', service: '${name}' });
142
+ });
143
+
144
+ app.get('/health/live', (c) => {
145
+ return c.json({ status: 'alive', timestamp: Date.now() });
146
+ });
147
+
148
+ app.get('/health/ready', async (c) => {
149
+ const dependencies: Record<string, string> = {};
150
+ let allReady = true;
151
+
152
+ // Add dependency checks here (database, cache, etc.)
153
+ // Mark allReady = false if any dependency is unhealthy
154
+
155
+ const status = allReady ? 'ready' : 'not_ready';
156
+ return c.json({ status, dependencies }, allReady ? 200 : 503);
157
+ });
158
+
159
+ app.get('/', (c) => {
160
+ return c.json({
161
+ service: '${name}',
162
+ version: '1.0.0',
163
+ endpoints: ['/health', '/health/live', '/health/ready']
164
+ });
165
+ });
166
+
167
+ const port = process.env.PORT || 3000;
168
+ console.log('\\n๐Ÿš€ ${name} running on http://localhost:' + port);
169
+ console.log('๐Ÿ“Š Health check: http://localhost:' + port + '/health\\n');
170
+
171
+ export default {
172
+ port,
173
+ fetch: app.fetch,
174
+ };
175
+ `;
176
+ }
177
+ function getFrontendIndexTemplate(name) {
178
+ return `<!DOCTYPE html>
179
+ <html lang="en">
180
+ <head>
181
+ <meta charset="UTF-8" />
182
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
183
+ <title>${name}</title>
184
+ </head>
185
+ <body>
186
+ <div id="root"></div>
187
+ <script type="module" src="/src/main.tsx"></script>
188
+ </body>
189
+ </html>
190
+ `;
191
+ }
192
+ const FRONTEND_MAIN_TEMPLATE = `import React from 'react';
193
+ import ReactDOM from 'react-dom/client';
194
+ import App from './App';
195
+
196
+ ReactDOM.createRoot(document.getElementById('root')!).render(
197
+ <React.StrictMode>
198
+ <App />
199
+ </React.StrictMode>,
200
+ );
201
+ `;
202
+ function getFrontendAppTemplate(name) {
203
+ return `function App() {
204
+ return (
205
+ <div style={{ padding: '2rem', fontFamily: 'system-ui' }}>
206
+ <h1>${name}</h1>
207
+ <p>Frontend resource created with TDK</p>
208
+ </div>
209
+ );
210
+ }
211
+
212
+ export default App;
213
+ `;
214
+ }
215
+ function getShutdownHandlerTemplate(signal) {
216
+ return `process.on('${signal}', () => {
217
+ console.log('[Worker] ${signal} received, shutting down gracefully...');
218
+ process.exit(0);
219
+ });`;
220
+ }
221
+ export function getWorkerIndexTemplate(name) {
222
+ return `console.log('๐Ÿš€ ${name} worker started');
223
+
224
+ interface Job {
225
+ id: string;
226
+ type: string;
227
+ payload: Record<string, JsonValue>;
228
+ priority?: number;
229
+ timestamp?: string;
230
+ }
231
+
232
+ const CONFIG = {
233
+ pollIntervalMs: parseInt(process.env.WORKER_POLL_INTERVAL || '5000'),
234
+ maxRetries: parseInt(process.env.WORKER_MAX_RETRIES || '3'),
235
+ batchSize: parseInt(process.env.WORKER_BATCH_SIZE || '10'),
236
+ };
237
+
238
+ async function processJob(job: Job): Promise<void> {
239
+ console.log('[Worker] Processing job:', job.id, 'type:', job.type);
240
+
241
+ // Add job processing logic here using job.payload
242
+
243
+ await new Promise(resolve => setTimeout(resolve, 1000));
244
+ console.log('[Worker] Job completed:', job.id);
245
+ }
246
+
247
+ async function fetchJobs(): Promise<Job[]> {
248
+ // Connect to your queue (Redis, RabbitMQ, etc.) and fetch jobs
249
+ return [];
250
+ }
251
+
252
+ async function main() {
253
+ console.log('[Worker] Configuration:', CONFIG);
254
+
255
+ while (true) {
256
+ try {
257
+ const jobs = await fetchJobs();
258
+
259
+ if (jobs.length === 0) {
260
+ await new Promise(resolve => setTimeout(resolve, CONFIG.pollIntervalMs));
261
+ continue;
262
+ }
263
+
264
+ console.log('[Worker] Fetched \${jobs.length} jobs');
265
+
266
+ for (const job of jobs) {
267
+ try {
268
+ await processJob(job);
269
+ } catch (error: unknown) {
270
+ console.error('[Worker] Job failed:', error);
271
+ }
272
+ }
273
+ } catch (error: unknown) {
274
+ console.error('[Worker] Error in main loop:', error);
275
+ // Wait before retrying to avoid tight error loops
276
+ await new Promise(resolve => setTimeout(resolve, CONFIG.pollIntervalMs));
277
+ }
278
+ }
279
+ }
280
+
281
+ ${getShutdownHandlerTemplate("SIGTERM")}
282
+
283
+ ${getShutdownHandlerTemplate("SIGINT")}
284
+
285
+ main().catch((err) => {
286
+ console.error('[Worker] Fatal error:', err);
287
+ process.exit(1);
288
+ });
289
+ `;
290
+ }
291
+ function getTestTemplate(name) {
292
+ return `import { describe, it, expect } from 'vitest';
293
+
294
+ describe('${name}', () => {
295
+ it('should pass a basic test', () => {
296
+ expect(true).toBe(true);
297
+ });
298
+ });
299
+ `;
300
+ }
301
+ export const resourceCommand = new Command("resource")
302
+ .description("Create a new resource (service) from scratch, or register an existing one")
303
+ .argument("[name]", "Resource name (kebab-case)")
304
+ .option("-t, --type <type>", "Resource type: backend, frontend, worker, sdk", "backend")
305
+ .option("-s, --stack <stack>", "Stack to assign resource to", "default")
306
+ .option("-p, --path <path>", "Custom path for resource directory")
307
+ .option("--resource-path <path>", "Alias for --path (for backward compatibility)")
308
+ .option("--register-existing", "Register an existing resource without creating templates")
309
+ .option("--ddd", "Scaffold DDD (domain-driven design) folders + path aliases (Premium - requires TDK_LICENSE_KEY)")
310
+ .action(async (name, options) => {
311
+ await runCommand(async () => {
312
+ const projectRoot = requireProjectRoot();
313
+ // Support --resource-path as alias for --path
314
+ const resourcePath = options.resourcePath || options.path;
315
+ showCommandHeader("Resource Creation");
316
+ const allResources = discoverResources();
317
+ let resourceName = name;
318
+ if (!resourceName) {
319
+ const inputName = await promptText({
320
+ message: "Resource name (kebab-case):",
321
+ validate: (input) => {
322
+ const validation = createKebabCaseValidator("resource")(input);
323
+ return validation === true || validation;
324
+ },
325
+ });
326
+ resourceName = inputName;
327
+ }
328
+ else {
329
+ assertValid(validateResourceName(resourceName));
330
+ }
331
+ // Support sdk type for registering existing SDKs
332
+ let resourceType;
333
+ const validTypes = [...CREATABLE_RESOURCE_TYPES, "sdk"];
334
+ if (!validTypes.includes(options.type)) {
335
+ const selectedType = await promptSelect({
336
+ message: "Resource type:",
337
+ choices: [
338
+ { title: "backend - API service with HTTP endpoints", value: "backend" },
339
+ { title: "frontend - Web application/UI", value: "frontend" },
340
+ { title: "worker - Background job processor", value: "worker" },
341
+ { title: "sdk - Library/SDK (register existing)", value: "sdk" },
342
+ ],
343
+ });
344
+ resourceType = selectedType;
345
+ }
346
+ else {
347
+ resourceType = options.type;
348
+ }
349
+ let dddEnabled = false;
350
+ if (options.ddd) {
351
+ if (resourceType !== "backend" && resourceType !== "worker") {
352
+ console.log(chalk.yellow(`\nโš ๏ธ --ddd only applies to backend/worker resources, ignoring for type "${resourceType}"`));
353
+ }
354
+ else {
355
+ const granted = await hasDddLicense(projectRoot);
356
+ if (!granted) {
357
+ throw new Error("DDD scaffolding is a Premium feature and requires a license key that grants it. " +
358
+ "Set export TDK_LICENSE_KEY=<key> (request a Premium license at https://tdk-landscape.github.io/#waitlist) and try again.");
359
+ }
360
+ dddEnabled = true;
361
+ }
362
+ }
363
+ let stackName = options.stack;
364
+ if (stackName === "default") {
365
+ const existingResources = allResources;
366
+ const stackSet = new Set();
367
+ for (const r of existingResources) {
368
+ if (r.stack)
369
+ stackSet.add(r.stack);
370
+ }
371
+ const existingStacks = Array.from(stackSet);
372
+ if (existingStacks.length > 0) {
373
+ const selectedStack = await promptSelect({
374
+ message: "Assign to stack:",
375
+ choices: [
376
+ ...existingStacks.map((s) => ({ title: s, value: s })),
377
+ { title: "Create new stack", value: "__new__" },
378
+ ],
379
+ });
380
+ if (selectedStack === "__new__") {
381
+ const newStack = await promptText({
382
+ message: "New stack name:",
383
+ validate: (input) => {
384
+ const validation = createKebabCaseValidator("stack")(input);
385
+ return validation === true || validation;
386
+ },
387
+ });
388
+ stackName = newStack;
389
+ }
390
+ else {
391
+ stackName = selectedStack;
392
+ }
393
+ }
394
+ else {
395
+ const newStack = await promptText({
396
+ message: "Stack name (first resource):",
397
+ initial: "main",
398
+ validate: (input) => {
399
+ const validation = createKebabCaseValidator("stack")(input);
400
+ return validation === true || validation;
401
+ },
402
+ });
403
+ stackName = newStack;
404
+ }
405
+ }
406
+ let finalResourcePath = resourcePath;
407
+ if (!finalResourcePath) {
408
+ const defaultPaths = {
409
+ backend: `services/${stackName}/${resourceName}`,
410
+ frontend: `apps/${resourceName}`,
411
+ worker: `workers/${resourceName}`,
412
+ sdk: `packages/${resourceName}`,
413
+ };
414
+ finalResourcePath = defaultPaths[resourceType];
415
+ }
416
+ const fullPath = resolve(projectRoot, finalResourcePath);
417
+ // Prevent path traversal attacks
418
+ const relativePathResult = relative(projectRoot, fullPath);
419
+ if (relativePathResult.startsWith("..") || isAbsolute(relativePathResult)) {
420
+ errorFactories.invalidPath(fullPath).exit();
421
+ }
422
+ if (!isPathSafe(finalResourcePath)) {
423
+ errorFactories.invalidPath(finalResourcePath).exit();
424
+ }
425
+ // Check if resource already exists
426
+ const isExistingResource = existsSync(fullPath);
427
+ const hasServiceJson = existsSync(resolve(fullPath, "service.json"));
428
+ const shouldRegisterExisting = options.registerExisting ||
429
+ resourceType === "sdk" ||
430
+ (isExistingResource && hasServiceJson);
431
+ if (isExistingResource && !shouldRegisterExisting) {
432
+ errorFactories.directoryExists(fullPath).exit();
433
+ }
434
+ const assignedPort = resourceType === "sdk"
435
+ ? 0
436
+ : assignPort(resourceType, allResources);
437
+ console.log(chalk.gray("\nResource details:"));
438
+ console.log(chalk.gray(` Name: ${resourceName}`));
439
+ console.log(chalk.gray(` Type: ${resourceType}`));
440
+ console.log(chalk.gray(` Stack: ${stackName}`));
441
+ console.log(chalk.gray(` Port: ${assignedPort || "N/A (SDK)"}`));
442
+ console.log(chalk.gray(` Path: ${finalResourcePath}`));
443
+ if (shouldRegisterExisting && hasServiceJson) {
444
+ console.log(chalk.yellow("\nโš ๏ธ Existing resource detected - will update service.json only"));
445
+ }
446
+ const confirmed = await confirmOrCancel(shouldRegisterExisting && hasServiceJson
447
+ ? "\nRegister existing resource?"
448
+ : "\nCreate resource?");
449
+ if (!confirmed)
450
+ return;
451
+ // Handle existing resource registration
452
+ if (shouldRegisterExisting && hasServiceJson) {
453
+ // Read existing service.json
454
+ const { readFileSync } = await import("node:fs");
455
+ const existingServiceJsonPath = resolve(fullPath, "service.json");
456
+ const existingContent = readFileSync(existingServiceJsonPath, "utf-8");
457
+ const existingServiceJson = JSON.parse(existingContent);
458
+ // Update with new values while preserving existing fields
459
+ const updatedServiceJson = {
460
+ ...existingServiceJson,
461
+ appName: resourceName,
462
+ appType: resourceType === "sdk" ? "sdk" : existingServiceJson.appType || resourceType,
463
+ stack: stackName,
464
+ ...(assignedPort > 0 && { port: assignedPort }),
465
+ };
466
+ // Write updated service.json
467
+ const { writeFileSync } = await import("node:fs");
468
+ writeFileSync(existingServiceJsonPath, JSON.stringify(updatedServiceJson, null, 2));
469
+ console.log(chalk.green("\nโœ… Existing resource registered successfully!"));
470
+ console.log(chalk.gray(`\nLocation: ${fullPath}`));
471
+ console.log(chalk.gray(`\nNext steps:`));
472
+ console.log(chalk.gray(` tdk up ${stackName}`));
473
+ return;
474
+ }
475
+ // Create directory structure for new resources
476
+ console.log(chalk.blue("\n๐Ÿ“ Creating directory structure..."));
477
+ mkdirSync(fullPath, { recursive: true });
478
+ mkdirSync(resolve(fullPath, "src"), { recursive: true });
479
+ mkdirSync(resolve(fullPath, "tests"), { recursive: true });
480
+ if (dddEnabled) {
481
+ for (const layer of ["domain", "application", "infrastructure", "presentation"]) {
482
+ mkdirSync(resolve(fullPath, "src", layer), { recursive: true });
483
+ }
484
+ }
485
+ // Prepare file generation tasks
486
+ const serviceJson = createServiceJson(resourceName, resourceType, stackName, assignedPort, dddEnabled ? ["ddd"] : []);
487
+ const packageJson = createPackageJson(resourceName, resourceType);
488
+ const tasks = [
489
+ {
490
+ type: "json",
491
+ filename: "service.json",
492
+ content: serviceJson,
493
+ description: "Generating service.json",
494
+ emoji: "๐Ÿ“",
495
+ },
496
+ {
497
+ type: "json",
498
+ filename: "package.json",
499
+ content: packageJson,
500
+ description: "Generating package.json",
501
+ emoji: "๐Ÿ“ฆ",
502
+ },
503
+ {
504
+ type: "json",
505
+ filename: "tsconfig.json",
506
+ content: TSCONFIG_TEMPLATE,
507
+ description: "Generating tsconfig.json",
508
+ emoji: "โš™๏ธ",
509
+ },
510
+ {
511
+ type: "text",
512
+ filename: "Dockerfile",
513
+ content: DOCKERFILE_TEMPLATE,
514
+ description: "Generating Dockerfile",
515
+ emoji: "๐Ÿณ",
516
+ },
517
+ ];
518
+ // Add source files based on resource type
519
+ if (resourceType === "backend") {
520
+ tasks.push({
521
+ type: "text",
522
+ filename: "src/index.ts",
523
+ content: getBackendIndexTemplate(resourceName),
524
+ description: "Generating backend source",
525
+ emoji: "๐Ÿ’ป",
526
+ });
527
+ }
528
+ else if (resourceType === "frontend") {
529
+ tasks.push({
530
+ type: "text",
531
+ filename: "index.html",
532
+ content: getFrontendIndexTemplate(resourceName),
533
+ description: "Generating HTML template",
534
+ emoji: "๐Ÿ’ป",
535
+ });
536
+ tasks.push({
537
+ type: "text",
538
+ filename: "src/main.tsx",
539
+ content: FRONTEND_MAIN_TEMPLATE,
540
+ description: "Generating React entry",
541
+ emoji: "๐Ÿ’ป",
542
+ });
543
+ tasks.push({
544
+ type: "text",
545
+ filename: "src/App.tsx",
546
+ content: getFrontendAppTemplate(resourceName),
547
+ description: "Generating React app",
548
+ emoji: "๐Ÿ’ป",
549
+ });
550
+ }
551
+ else if (resourceType === "worker") {
552
+ tasks.push({
553
+ type: "text",
554
+ filename: "src/index.ts",
555
+ content: getWorkerIndexTemplate(resourceName),
556
+ description: "Generating worker source",
557
+ emoji: "๐Ÿ’ป",
558
+ });
559
+ }
560
+ // Add test file
561
+ tasks.push({
562
+ type: "text",
563
+ filename: `tests/${resourceName}.test.ts`,
564
+ content: getTestTemplate(resourceName),
565
+ description: "Generating test file",
566
+ emoji: "๐Ÿงช",
567
+ });
568
+ // Execute all file writes with progress
569
+ console.log(chalk.blue("๐Ÿ’ป Generating source files..."));
570
+ writeFilesWithProgress(fullPath, tasks);
571
+ console.log(chalk.green("\nโœ… Resource created successfully!"));
572
+ console.log(chalk.gray(`\nLocation: ${fullPath}`));
573
+ console.log(chalk.gray(`\nNext steps:`));
574
+ console.log(chalk.gray(` cd ${finalResourcePath}`));
575
+ console.log(chalk.gray(` bun install`));
576
+ console.log(chalk.gray(` tdk up ${stackName}`));
577
+ });
578
+ });
579
+ //# sourceMappingURL=resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.js","sourceRoot":"","sources":["../../src/commands/resource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const resourcesCommand: Command;
3
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/commands/resources.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,gBAAgB,SAkFzB,CAAC"}