@tdk-landscape/tdk-cli-core 1.3.134 → 1.3.136

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 (299) hide show
  1. package/cli/bin/tdk.js +2 -0
  2. package/cli/dist/backend-frameworks/registry.js +2 -0
  3. package/cli/dist/backend-languages/registry.js +2 -0
  4. package/cli/dist/cli.js +2 -0
  5. package/cli/dist/commands/__tests__/project-e2e-helpers.js +2 -0
  6. package/cli/dist/commands/completion.js +2 -0
  7. package/cli/dist/commands/config.js +2 -0
  8. package/cli/dist/commands/doctor.js +4 -2
  9. package/cli/dist/commands/down.js +2 -0
  10. package/cli/dist/commands/eject.js +2 -0
  11. package/cli/dist/commands/help.js +2 -0
  12. package/cli/dist/commands/import.js +2 -0
  13. package/cli/dist/commands/logs.js +2 -0
  14. package/cli/dist/commands/maintainers.js +2 -0
  15. package/cli/dist/commands/mcp.js +2 -0
  16. package/cli/dist/commands/networks.js +2 -0
  17. package/cli/dist/commands/project.js +2 -0
  18. package/cli/dist/commands/projects.js +2 -0
  19. package/cli/dist/commands/resource.js +2 -0
  20. package/cli/dist/commands/resources.js +2 -0
  21. package/cli/dist/commands/runtime.js +2 -0
  22. package/cli/dist/commands/stack.js +2 -0
  23. package/cli/dist/commands/stacks.js +2 -0
  24. package/cli/dist/commands/status.js +2 -0
  25. package/cli/dist/commands/ui.js +2 -0
  26. package/cli/dist/commands/up.js +2 -0
  27. package/cli/dist/commands/upgrade.js +2 -0
  28. package/cli/dist/commands/version.js +2 -0
  29. package/cli/dist/components/BaseTooltip.js +2 -0
  30. package/cli/dist/components/DetailPanel.js +2 -0
  31. package/cli/dist/components/FileTree.js +2 -0
  32. package/cli/dist/components/ResourceSelectInput.js +2 -0
  33. package/cli/dist/components/ResourceTable.js +2 -0
  34. package/cli/dist/components/ServiceIssues.js +2 -0
  35. package/cli/dist/components/TUIHeader.js +2 -0
  36. package/cli/dist/components/TabBar.js +2 -0
  37. package/cli/dist/components/Tooltip.js +2 -0
  38. package/cli/dist/components/index.js +2 -0
  39. package/cli/dist/components/ui-theme.js +2 -0
  40. package/cli/dist/config/platform-standards.js +2 -0
  41. package/cli/dist/frontend-frameworks/registry.js +2 -0
  42. package/cli/dist/generator/__tests__/golden-helpers.js +2 -0
  43. package/cli/dist/generator/extension-fetch.js +2 -0
  44. package/cli/dist/generator/resource-templates.js +2 -0
  45. package/cli/dist/generator/template-engine.js +8 -2
  46. package/cli/dist/mcp/server.js +2 -0
  47. package/cli/dist/mcp/tools.js +2 -0
  48. package/cli/dist/utils/agent-host.js +2 -0
  49. package/cli/dist/utils/atomic-write.js +2 -0
  50. package/cli/dist/utils/bun-floor.js +2 -0
  51. package/cli/dist/utils/cold-preflight.js +2 -0
  52. package/cli/dist/utils/discovery-paths.js +31 -5
  53. package/cli/dist/utils/docker.js +2 -0
  54. package/cli/dist/utils/doctor-runtime.js +8 -3
  55. package/cli/dist/utils/doctor-starlark.js +2 -0
  56. package/cli/dist/utils/doctor-wiring.js +2 -0
  57. package/cli/dist/utils/down-cleanup.js +2 -0
  58. package/cli/dist/utils/env-validator.js +2 -0
  59. package/cli/dist/utils/errors.js +2 -0
  60. package/cli/dist/utils/exec-async.js +2 -0
  61. package/cli/dist/utils/file-helpers.js +2 -0
  62. package/cli/dist/utils/formatting.js +2 -0
  63. package/cli/dist/utils/generated-paths.js +2 -0
  64. package/cli/dist/utils/host-port-config.js +3 -1
  65. package/cli/dist/utils/host-port-plan.js +2 -0
  66. package/cli/dist/utils/json-output.js +2 -0
  67. package/cli/dist/utils/machine-output.js +2 -0
  68. package/cli/dist/utils/paths.js +2 -0
  69. package/cli/dist/utils/platform.js +2 -0
  70. package/cli/dist/utils/port-assignment.js +2 -0
  71. package/cli/dist/utils/port-conflict-fix.js +2 -0
  72. package/cli/dist/utils/port-listener-probe.js +2 -0
  73. package/cli/dist/utils/project-config-defaults.js +2 -0
  74. package/cli/dist/utils/project-features.js +2 -0
  75. package/cli/dist/utils/prompt.js +2 -0
  76. package/cli/dist/utils/resource-features.js +2 -0
  77. package/cli/dist/utils/resource-kind.js +2 -0
  78. package/cli/dist/utils/schema-version-gate.js +2 -0
  79. package/cli/dist/utils/secret-redaction.js +2 -0
  80. package/cli/dist/utils/service-config-checks.js +2 -0
  81. package/cli/dist/utils/service-manifest.js +2 -0
  82. package/cli/dist/utils/service-urls.js +2 -0
  83. package/cli/dist/utils/services.js +2 -0
  84. package/cli/dist/utils/shared-platform-postgres.js +26 -5
  85. package/cli/dist/utils/single-flight.js +2 -0
  86. package/cli/dist/utils/smoke.js +5 -0
  87. package/cli/dist/utils/spinner.js +2 -0
  88. package/cli/dist/utils/startup-report.js +2 -0
  89. package/cli/dist/utils/suggestions.js +2 -0
  90. package/cli/dist/utils/tar.js +2 -0
  91. package/cli/dist/utils/tdk-version.js +2 -0
  92. package/cli/dist/utils/tilt-process.js +2 -0
  93. package/cli/dist/utils/tilt-resource-state.js +2 -0
  94. package/cli/dist/utils/tilt-startup.js +2 -0
  95. package/cli/dist/utils/tilt-unreachable-message.js +2 -0
  96. package/cli/dist/utils/tilt.js +2 -0
  97. package/cli/dist/utils/up-readiness.js +2 -0
  98. package/cli/dist/utils/which.js +2 -0
  99. package/cli/dist/utils/windows-doctor.js +2 -0
  100. package/cli/dist-bundle/{chunk-DLEX3BP5.js → chunk-I63IBPUZ.js} +7 -7
  101. package/cli/dist-bundle/cli.js +4 -4
  102. package/cli/dist-bundle/{cold-preflight-6X67ZFII.js → cold-preflight-NXFER2W6.js} +1 -1
  103. package/cli/package.json +2 -1
  104. package/cli/shared-platform-engineering/docker-templates/bun-hoisted-symlink-fix.sh +2 -0
  105. package/cli/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +2 -0
  106. package/cli/shared-platform-engineering/docker-templates/install-deps.sh +2 -0
  107. package/cli/shared-platform-engineering/docker-templates/prisma-bun-client-link-fix.sh +2 -0
  108. package/cli/shared-platform-engineering/docker-templates/prisma-normalize-client.sh +2 -0
  109. package/discovery/TILT_DISCOVERY.star +2 -0
  110. package/discovery/config.star +2 -0
  111. package/discovery/constants.star +2 -0
  112. package/discovery/deterministic.star +2 -0
  113. package/discovery/discovery_daemon.star +2 -0
  114. package/discovery/discovery_orchestrator.star +2 -0
  115. package/discovery/filtering.star +2 -0
  116. package/discovery/incremental_discovery.star +2 -0
  117. package/discovery/indexing.star +2 -0
  118. package/discovery/json_manifest_scanner.star +2 -0
  119. package/discovery/libraries.star +2 -0
  120. package/discovery/loading.star +2 -0
  121. package/discovery/manifest/constants.star +2 -0
  122. package/discovery/manifest/loading.star +2 -0
  123. package/discovery/manifest/normalize.star +2 -0
  124. package/discovery/manifest/validation.star +2 -0
  125. package/discovery/normalization.star +2 -0
  126. package/discovery/registry.star +2 -0
  127. package/discovery/resource_snapshot.py +2 -0
  128. package/discovery/resource_snapshot.star +2 -0
  129. package/discovery/schemas.star +2 -0
  130. package/discovery/test_resource_snapshot.py +2 -0
  131. package/discovery/validation.star +2 -0
  132. package/discovery/versioning.star +2 -0
  133. package/engine/assets/docker/wake-gateway/decide.test.ts +2 -0
  134. package/engine/assets/docker/wake-gateway/decide.ts +2 -0
  135. package/engine/assets/docker/wake-gateway/server.ts +2 -0
  136. package/engine/assets/scripts/cleanup-completed-migrator-images.sh +2 -0
  137. package/engine/assets/scripts/cleanup-tilt-images.sh +2 -0
  138. package/engine/assets/scripts/mac-m1-resource-monitor.sh +2 -0
  139. package/engine/config.star +2 -0
  140. package/engine/entrypoint.star +2 -0
  141. package/engine/lifecycle/orchestrator.star +2 -0
  142. package/engine/paths.star +2 -0
  143. package/engine/scripts/build-and-publish-lib.sh +2 -0
  144. package/engine/scripts/check-lib-publish.sh +2 -0
  145. package/engine/scripts/debug-container.sh +2 -0
  146. package/engine/scripts/generate-manifest.sh +2 -0
  147. package/engine/topologies/platform/docker/auth/auth.star +2 -0
  148. package/engine/topologies/platform/docker/build/golden_image_dockerfile.star +3 -3
  149. package/engine/topologies/platform/docker/compose/compose.star +2 -0
  150. package/engine/topologies/platform/docker/compose/compose_helpers.star +2 -0
  151. package/engine/topologies/platform/docker/compose/traefik_standalone.star +2 -0
  152. package/engine/topologies/platform/docker/config/bunignore.star +2 -0
  153. package/engine/topologies/platform/docker/config/dockerignore.star +2 -0
  154. package/engine/topologies/platform/docker/config/healthcheck.star +2 -0
  155. package/engine/topologies/platform/docker/constants.star +2 -0
  156. package/engine/topologies/platform/docker/dockerfile/dockerfile.star +2 -0
  157. package/engine/topologies/platform/docker/dockerfile/language_dockerfile.star +11 -8
  158. package/engine/topologies/platform/docker/index.star +2 -0
  159. package/engine/topologies/platform/docker/layers/bun_helpers.star +2 -0
  160. package/engine/topologies/platform/docker/layers/infisical/index.star +2 -0
  161. package/engine/topologies/platform/docker/layers/infisical/infisical_docker.star +2 -0
  162. package/engine/topologies/platform/docker/layers/l1_base_layers.star +2 -0
  163. package/engine/topologies/platform/docker/layers/l2_dependency_layers.star +2 -0
  164. package/engine/topologies/platform/docker/layers/l3_builder_layers.star +2 -0
  165. package/engine/topologies/platform/docker/layers/l4_runtime_layers.star +2 -0
  166. package/engine/topologies/platform/docker/layers/prisma/constants.star +2 -0
  167. package/engine/topologies/platform/docker/layers/prisma/db_readiness.star +2 -0
  168. package/engine/topologies/platform/docker/layers/prisma/filesystem_setup.star +2 -0
  169. package/engine/topologies/platform/docker/layers/prisma/migrate_script.star +2 -0
  170. package/engine/topologies/platform/docker/layers/prisma/prisma_build.star +2 -0
  171. package/engine/topologies/platform/docker/layers/prisma/prisma_runtime.star +2 -0
  172. package/engine/topologies/platform/docker/layers/prisma/secret_resolution.star +2 -0
  173. package/engine/topologies/platform/docker/networking/api_path_constants.star +2 -0
  174. package/engine/topologies/platform/docker/networking/sablier_container_cycle.star +2 -0
  175. package/engine/topologies/platform/docker/networking/traefik.star +2 -0
  176. package/engine/topologies/platform/docker/networking/traefik_constants.star +2 -0
  177. package/engine/topologies/platform/docker/networking/traefik_helpers.star +2 -0
  178. package/engine/topologies/platform/docker/networking/traefik_static_routes.star +2 -0
  179. package/engine/topologies/platform/docker/secrets/env_secrets.star +2 -0
  180. package/engine/topologies/platform/docker/secrets/infisical.star +2 -0
  181. package/engine/topologies/platform/net/proxy.star +2 -0
  182. package/engine/topologies/platform/registries/local.star +2 -0
  183. package/engine/topologies/platform/registries/verdaccio_loader.star +2 -0
  184. package/engine/topologies/platform/security/secrets.star +2 -0
  185. package/engine/topologies/platform/state/relational.star +2 -0
  186. package/engine/topologies/tilt/common/utils.star +2 -0
  187. package/engine/topologies/tilt/common/utils_debug.star +2 -0
  188. package/engine/topologies/tilt/common/utils_deterministic.star +2 -0
  189. package/engine/topologies/tilt/common/utils_docker_networks.star +2 -0
  190. package/engine/topologies/tilt/common/utils_env.star +2 -0
  191. package/engine/topologies/tilt/common/utils_output.star +2 -0
  192. package/engine/topologies/tilt/config/defaults.star +2 -0
  193. package/engine/topologies/tilt/config/feature_flags.star +2 -0
  194. package/engine/topologies/tilt/config/global.star +2 -0
  195. package/engine/topologies/tilt/config/profiles.star +2 -0
  196. package/engine/topologies/tilt/generators/agents_md.star +2 -0
  197. package/engine/topologies/tilt/generators/api_gateway.star +2 -0
  198. package/engine/topologies/tilt/generators/index.star +2 -0
  199. package/engine/topologies/tilt/generators/infisical/examples.star +2 -0
  200. package/engine/topologies/tilt/generators/infisical/index.star +2 -0
  201. package/engine/topologies/tilt/generators/infisical/machine_identity.star +2 -0
  202. package/engine/topologies/tilt/generators/infisical/organization.star +2 -0
  203. package/engine/topologies/tilt/generators/infisical/path_manager.star +2 -0
  204. package/engine/topologies/tilt/generators/infisical/secrets_generator.star +2 -0
  205. package/engine/topologies/tilt/generators/nginx_conf.star +2 -0
  206. package/engine/topologies/tilt/generators/npmrc.star +2 -0
  207. package/engine/topologies/tilt/generators/tsconfig.star +2 -0
  208. package/engine/topologies/tilt/generators/typescript/backend_library_tsconfig.star +2 -0
  209. package/engine/topologies/tilt/generators/typescript/backend_tsconfig.star +2 -0
  210. package/engine/topologies/tilt/generators/typescript/common.star +2 -0
  211. package/engine/topologies/tilt/generators/typescript/frontend_library_tsconfig.star +2 -0
  212. package/engine/topologies/tilt/generators/typescript/frontend_tsconfig.star +2 -0
  213. package/engine/topologies/tilt/generators/typescript/include.star +2 -0
  214. package/engine/topologies/tilt/generators/typescript/playwright_config.star +2 -0
  215. package/engine/topologies/tilt/generators/typescript/prisma_config.star +2 -0
  216. package/engine/topologies/tilt/generators/validators.star +2 -0
  217. package/engine/topologies/tilt/generators/vite/backend.star +2 -0
  218. package/engine/topologies/tilt/generators/vite/frameworks/lit.star +2 -0
  219. package/engine/topologies/tilt/generators/vite/frameworks/preact.star +2 -0
  220. package/engine/topologies/tilt/generators/vite/frameworks/qwik.star +2 -0
  221. package/engine/topologies/tilt/generators/vite/frameworks/react.star +2 -0
  222. package/engine/topologies/tilt/generators/vite/frameworks/solid.star +2 -0
  223. package/engine/topologies/tilt/generators/vite/frameworks/svelte.star +2 -0
  224. package/engine/topologies/tilt/generators/vite/frameworks/vanilla.star +2 -0
  225. package/engine/topologies/tilt/generators/vite/frameworks/vue.star +2 -0
  226. package/engine/topologies/tilt/generators/vite/frontend.star +2 -0
  227. package/engine/topologies/tilt/generators/vite/generators.star +2 -0
  228. package/engine/topologies/tilt/generators/vite/helpers.star +2 -0
  229. package/engine/topologies/tilt/generators/vite/library.star +2 -0
  230. package/engine/topologies/tilt/generators/vite/sdk.star +2 -0
  231. package/engine/topologies/tilt/generators/vite/templates.star +2 -0
  232. package/engine/topologies/tilt/generators/vite_config.star +2 -0
  233. package/engine/topologies/tilt/manifest/__init__.star +2 -0
  234. package/engine/topologies/tilt/manifest/constants.star +2 -0
  235. package/engine/topologies/tilt/manifest/errors.star +2 -0
  236. package/engine/topologies/tilt/manifest/integration.star +2 -0
  237. package/engine/topologies/tilt/manifest/json_to_yaml.py +2 -0
  238. package/engine/topologies/tilt/manifest/loader.star +2 -0
  239. package/engine/topologies/tilt/manifest/mapper.star +2 -0
  240. package/engine/topologies/tilt/manifest/parser.star +2 -0
  241. package/engine/topologies/tilt/manifest/schema.star +2 -0
  242. package/engine/topologies/tilt/manifest/tests/test_integration.star +2 -0
  243. package/engine/topologies/tilt/manifest/tests/test_loader_parser.star +2 -0
  244. package/engine/topologies/tilt/manifest/tests/test_manifest.star +2 -0
  245. package/engine/topologies/tilt/manifest/tests/test_validator.star +2 -0
  246. package/engine/topologies/tilt/manifest/validator.star +2 -0
  247. package/engine/topologies/tilt/manifest/yaml_to_json.py +2 -0
  248. package/engine/topologies/tilt/resources/conditions.star +2 -0
  249. package/engine/topologies/tilt/resources/databases.star +2 -0
  250. package/engine/topologies/tilt/resources/declaration.star +2 -0
  251. package/engine/topologies/tilt/resources/deps.star +2 -0
  252. package/engine/topologies/tilt/resources/infra-loader.star +2 -0
  253. package/engine/topologies/tilt/resources/libs.star +2 -0
  254. package/engine/topologies/tilt/resources/libs_discovery.star +2 -0
  255. package/engine/topologies/tilt/resources/libs_paths.star +2 -0
  256. package/engine/topologies/tilt/resources/libs_resource_definition.star +2 -0
  257. package/engine/topologies/tilt/resources/libs_setup.star +2 -0
  258. package/engine/topologies/tilt/resources/libs_tsconfig.star +2 -0
  259. package/engine/topologies/tilt/resources/orchestrator/apply.star +2 -0
  260. package/engine/topologies/tilt/resources/orchestrator/apply_compose_resource_registration.star +2 -0
  261. package/engine/topologies/tilt/resources/orchestrator/apply_manifest_orchestration.star +2 -0
  262. package/engine/topologies/tilt/resources/orchestrator/apply_migrator_orchestration.star +2 -0
  263. package/engine/topologies/tilt/resources/orchestrator/apply_resource_validation.star +2 -0
  264. package/engine/topologies/tilt/resources/orchestrator/apply_runtime_flags.star +2 -0
  265. package/engine/topologies/tilt/resources/orchestrator/builders/typescript.star +2 -0
  266. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/index.star +2 -0
  267. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/resolver.star +2 -0
  268. package/engine/topologies/tilt/resources/orchestrator/generators/env.star +2 -0
  269. package/engine/topologies/tilt/resources/orchestrator/generators/frontend.star +2 -0
  270. package/engine/topologies/tilt/resources/orchestrator/generators/manifest_resource.star +2 -0
  271. package/engine/topologies/tilt/resources/orchestrator/helpers.star +2 -0
  272. package/engine/topologies/tilt/resources/orchestrator.star +2 -0
  273. package/engine/topologies/tilt/resources/ordering.star +2 -0
  274. package/engine/topologies/tilt/resources/shared-platform-postgres.star +2 -0
  275. package/engine/topologies/tilt/resources/triggers.star +2 -0
  276. package/engine/topologies/tilt/resources/watchers.star +2 -0
  277. package/engine/where-things-live.star +2 -0
  278. package/ext/ide-components/code_viewer/server.py +2 -0
  279. package/ext/ide-components/config_inspector/server.py +2 -0
  280. package/ext/ide-components/file_browser/server.py +2 -0
  281. package/ext/ide-components/shared/config_service.py +2 -0
  282. package/ext/ide-components/shared/file_utils.py +2 -0
  283. package/ext/ide-components/shared/http_utils.py +2 -0
  284. package/ext/ide-components/shared/syntax_highlighter.py +2 -0
  285. package/ext/ide-components/shared/template_engine.py +2 -0
  286. package/ext/ide-components/shared/templates/base.html +4 -0
  287. package/ext/ide-components/shared/test_config_service.py +2 -0
  288. package/ext/ide-components/shared/tilt_integration.py +2 -0
  289. package/ext/ui-enhancements/cron-status-server.sh +2 -0
  290. package/ext/ui-enhancements/cron-status-tracker.sh +2 -0
  291. package/ext/ui-enhancements/tiltfile.py +2 -0
  292. package/package.json +1 -1
  293. package/shared-platform-engineering/docker-templates/bun-hoisted-symlink-fix.sh +2 -0
  294. package/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +2 -0
  295. package/shared-platform-engineering/docker-templates/install-deps.sh +2 -0
  296. package/shared-platform-engineering/docker-templates/prisma-bun-client-link-fix.sh +2 -0
  297. package/shared-platform-engineering/docker-templates/prisma-normalize-client.sh +2 -0
  298. package/specs/specs/TILT_SERVICE_DEFAULTS.star +2 -0
  299. package/specs/specs/TILT_TECH_STACK.star +2 -0
package/cli/bin/tdk.js CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env node
2
+ // Copyright (c) 2026 TDK Landscape contributors
3
+ // SPDX-License-Identifier: MIT
2
4
 
3
5
  import { existsSync } from "node:fs";
4
6
  import { dirname, join } from "node:path";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { getBackendIndexTemplate } from "../backend-languages/bun.js";
2
4
  import { TdkError } from "../utils/errors.js";
3
5
  import { elysiaBackendProvider } from "./elysia.js";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { TdkError } from "../utils/errors.js";
2
4
  import { bunBackendProvider } from "./bun.js";
3
5
  import { goBackendProvider } from "./go.js";
package/cli/dist/cli.js CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env node
2
+ // Copyright (c) 2026 TDK Landscape contributors
3
+ // SPDX-License-Identifier: MIT
2
4
  import chalk from "chalk";
3
5
  import { Command } from "commander";
4
6
  import pkg from "../package.json" with { type: "json" };
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { execFileSync, spawnSync } from "node:child_process";
2
4
  import { dirname, join, resolve } from "node:path";
3
5
  import { fileURLToPath } from "node:url";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
4
  import { homedir } from "node:os";
3
5
  import { basename, join } from "node:path";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { spawnSync } from "node:child_process";
2
4
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
3
5
  import { join } from "node:path";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { execFileSync, execSync } from "node:child_process";
2
4
  import { existsSync, readdirSync, readFileSync } from "node:fs";
3
5
  import { join, normalize, relative } from "node:path";
@@ -829,8 +831,8 @@ function parseDockerStats(raw) {
829
831
  const [name, memPctRaw, cpuPctRaw] = line.split(",");
830
832
  return {
831
833
  name: name ?? "unknown",
832
- memPct: Number.parseFloat((memPctRaw ?? "").replace("%", "")),
833
- cpuPct: Number.parseFloat((cpuPctRaw ?? "").replace("%", "")),
834
+ memPct: Number.parseFloat((memPctRaw ?? "").replace(/%/g, "")),
835
+ cpuPct: Number.parseFloat((cpuPctRaw ?? "").replace(/%/g, "")),
834
836
  };
835
837
  })
836
838
  .filter((stat) => Number.isFinite(stat.memPct) && Number.isFinite(stat.cpuPct));
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import chalk from "chalk";
2
4
  import { Command } from "commander";
3
5
  import { readProjectConfig } from "../generator/template-engine.js";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { existsSync, readdirSync, statSync, writeFileSync } from "node:fs";
2
4
  import { join } from "node:path";
3
5
  import chalk from "chalk";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import chalk from "chalk";
2
4
  import pkg from "../../package.json" with { type: "json" };
3
5
  const TDK_BANNER = `
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { spawn } from "node:child_process";
2
4
  import { Command } from "commander";
3
5
  /**
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { Command } from "commander";
2
4
  import { STANDARD_PORTS } from "../utils/constants.js";
3
5
  import { errorFactories, runCommand, showErrorAndExit, TdkError } from "../utils/errors.js";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { existsSync, readFileSync } from "node:fs";
2
4
  import { resolve } from "node:path";
3
5
  import { Command } from "commander";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { createInterface } from "node:readline";
2
4
  import { Command } from "commander";
3
5
  import { createMcpServer } from "../mcp/server.js";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { execFileSync, spawn } from "node:child_process";
2
4
  import chalk from "chalk";
3
5
  import { Command } from "commander";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { execFileSync } from "node:child_process";
2
4
  import { cpSync, existsSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
3
5
  import { basename, dirname, join, resolve } from "node:path";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { existsSync } from "node:fs";
2
4
  import { join } from "node:path";
3
5
  import chalk from "chalk";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { existsSync, mkdirSync } from "node:fs";
2
4
  import { isAbsolute, relative, resolve } from "node:path";
3
5
  import chalk from "chalk";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import chalk from "chalk";
2
4
  import { Command } from "commander";
3
5
  import { VALID_RESOURCE_TYPES } from "../utils/constants.js";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { statSync } from "node:fs";
2
4
  import { join, resolve } from "node:path";
3
5
  import { Command } from "commander";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { readFileSync } from "node:fs";
2
4
  import chalk from "chalk";
3
5
  import { Command } from "commander";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import chalk from "chalk";
2
4
  import { Command } from "commander";
3
5
  import { createDiscoveryContext } from "../utils/discovery-context.js";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import chalk from "chalk";
2
4
  import { Command } from "commander";
3
5
  import { createDiscoveryContext } from "../utils/discovery-context.js";
@@ -1,4 +1,6 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright (c) 2026 TDK Landscape contributors
3
+ // SPDX-License-Identifier: MIT
2
4
  import { Command } from "commander";
3
5
  import { Box, render, Text, useApp, useInput, useStdin, useStdout } from "ink";
4
6
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { connect } from "node:net";
2
4
  import { join } from "node:path";
3
5
  import chalk from "chalk";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { execFileSync, execSync } from "node:child_process";
2
4
  import { createHash } from "node:crypto";
3
5
  import { accessSync, chmodSync, constants, existsSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync, } from "node:fs";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { Command } from "commander";
2
4
  import { getPackageVersion } from "../utils/paths.js";
3
5
  export const versionCommand = new Command("version")
@@ -1,4 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright (c) 2026 TDK Landscape contributors
3
+ // SPDX-License-Identifier: MIT
2
4
  import { Box, Text } from "ink";
3
5
  import { useTUITheme } from "./ui-theme.js";
4
6
  export const BaseTooltip = ({ content, shortcut, visible, maxWidth = 40, wrapText = false, prefix = "", marginTop = 0, }) => {
@@ -1,4 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright (c) 2026 TDK Landscape contributors
3
+ // SPDX-License-Identifier: MIT
2
4
  import { Box, Text } from "ink";
3
5
  import { formatDate, getStatusColor, getStatusIcon } from "../utils/formatting.js";
4
6
  import { getTUIStatusColor, getTUIStatusIcon, useTUITheme } from "./ui-theme.js";
@@ -1,4 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright (c) 2026 TDK Landscape contributors
3
+ // SPDX-License-Identifier: MIT
2
4
  import { Box, Text } from "ink";
3
5
  import { useState } from "react";
4
6
  import { formatBytes } from "../utils/formatting.js";
@@ -1,4 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright (c) 2026 TDK Landscape contributors
3
+ // SPDX-License-Identifier: MIT
2
4
  import { Box, measureElement, Text, useInput } from "ink";
3
5
  import { useEffect, useLayoutEffect, useRef, useState } from "react";
4
6
  import { useTUITheme } from "./ui-theme.js";
@@ -1,4 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright (c) 2026 TDK Landscape contributors
3
+ // SPDX-License-Identifier: MIT
2
4
  import { Box, Text } from "ink";
3
5
  import { formatShortDate, getStatusColor, getStatusIcon, truncate } from "../utils/formatting.js";
4
6
  import { getTUIStatusColor, getTUIStatusIcon, useTUITheme } from "./ui-theme.js";
@@ -1,4 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright (c) 2026 TDK Landscape contributors
3
+ // SPDX-License-Identifier: MIT
2
4
  import { Box, Text } from "ink";
3
5
  import { useTUITheme } from "./ui-theme.js";
4
6
  /** One line per service that is not ready and has a reason, so a failed dependency is named on screen. */
@@ -1,4 +1,6 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright (c) 2026 TDK Landscape contributors
3
+ // SPDX-License-Identifier: MIT
2
4
  import { Box, Text } from "ink";
3
5
  import { useTUITheme } from "./ui-theme.js";
4
6
  export const TUIHeader = ({ projectRoot, resourceCount, terminalWidth, version, }) => {
@@ -1,4 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright (c) 2026 TDK Landscape contributors
3
+ // SPDX-License-Identifier: MIT
2
4
  import { Box, Text } from "ink";
3
5
  import { getTabBarDensity, getTerminalRuleWidth } from "../utils/terminal-layout.js";
4
6
  import { TABS } from "../utils/ui-keymap.js";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  export const TOOLTIPS = {
2
4
  overviewTab: "View all stacks and their resources",
3
5
  resourcesTab: "Detailed resource list with metadata",
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  export { AccessibleTooltip } from "./Accessible.js";
2
4
  export { DetailPanel } from "./DetailPanel.js";
3
5
  export { FileTree } from "./FileTree.js";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { createContext, useContext } from "react";
2
4
  const FILE_TYPES = ["docker", "tilt", "config", "prisma", "generated", "unknown"];
3
5
  const DEFAULT_FILE_COLORS = {
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { PORT_RANGES, STANDARD_PORTS } from "../utils/constants.js";
2
4
  const PLATFORM_VERSION = "1.0.0";
3
5
  const TECH_STACK = {
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { TdkError } from "../utils/errors.js";
2
4
  import { litFrontendProvider } from "./lit.js";
3
5
  import { preactFrontendProvider } from "./preact.js";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
2
4
  import { dirname, join } from "node:path";
3
5
  const normalize = (text) => text.replace(/\r\n/g, "\n");
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  // Fetches the paid-tier "premium" resource bundle (playwright, c4-diagram,
2
4
  // logging, agents-md, sablier, verdaccio, and a few other extras - see
3
5
  // tdk-cli-extensions/premium/) from the gated distribution worker, when a
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  /**
2
4
  * The plain `Dockerfile` written next to service.json. `tdk up` does not build it: for generated
3
5
  * resources the engine builds `.autogenerated/Dockerfile.app.autogenerated`. It is a starting point
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import * as fs from "node:fs";
2
4
  import * as path from "node:path";
3
5
  import { fileURLToPath } from "node:url";
@@ -91,12 +93,16 @@ export class TemplateEngine {
91
93
  this.templatesDir = templatesDir || path.join(currentDir, "..", "..", "templates");
92
94
  this.registerHelpers();
93
95
  }
96
+ // Backslashes must be escaped before quotes, or a value ending in a backslash escapes the closing quote.
97
+ quoteStarlarkString(s) {
98
+ return `"${s.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
99
+ }
94
100
  formatStarlarkValue(val) {
95
101
  if (val === null || val === undefined) {
96
102
  return "None";
97
103
  }
98
104
  if (typeof val === "string") {
99
- return `"${val.replace(/"/g, '\\"')}"`;
105
+ return this.quoteStarlarkString(val);
100
106
  }
101
107
  if (typeof val === "boolean") {
102
108
  return val ? "True" : "False";
@@ -110,7 +116,7 @@ export class TemplateEngine {
110
116
  }
111
117
  if (typeof val === "object") {
112
118
  const entries = Object.entries(val).map(([key, v]) => {
113
- return `"${key}": ${this.formatStarlarkValue(v)}`;
119
+ return `${this.quoteStarlarkString(key)}: ${this.formatStarlarkValue(v)}`;
114
120
  });
115
121
  return `{${entries.join(", ")}}`;
116
122
  }
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  /**
2
4
  * A minimal Model Context Protocol server over newline-delimited JSON-RPC 2.0 (the stdio transport). It implements only
3
5
  * what a tools-only server needs: initialize, ping, tools/list and tools/call. Keeping it dependency-free keeps the
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { spawn } from "node:child_process";
2
4
  import { closeSync, existsSync, openSync, readFileSync } from "node:fs";
3
5
  import { tmpdir } from "node:os";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { existsSync } from "node:fs";
2
4
  export const WEBCONTAINER_DOCS = "docs/agent-hosts.md";
3
5
  export const WEBCONTAINER_UP_MESSAGE = `WebContainers cannot run TDK: there is no Docker daemon or Tilt. Run \`tdk up\` on a machine with Docker. See ${WEBCONTAINER_DOCS}.`;
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { randomBytes } from "node:crypto";
2
4
  import { closeSync, fchmodSync, fsyncSync, openSync, renameSync, rmSync, statSync, writeFileSync, } from "node:fs";
3
5
  import { basename, dirname, join } from "node:path";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { MIN_BUN_VERSION, versionMeetsMinimum } from "../commands/doctor.js";
2
4
  /** The Bun floor `tdk doctor` enforces, so `tdk up` cannot drift from it. */
3
5
  export function bunMeetsFloor(version) {
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { execFileSync } from "node:child_process";
2
4
  import { readFileSync } from "node:fs";
3
5
  import { join } from "node:path";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { existsSync, readFileSync } from "node:fs";
2
4
  import { join, relative, resolve, sep } from "node:path";
3
5
  // Mirrors discovery/json_manifest_scanner.star: every `discovery.paths` entry is a shell
@@ -9,12 +11,36 @@ const DEFAULT_DISCOVERY_PATHS = ["services/*/*"];
9
11
  function segments(path) {
10
12
  return path.split(sep).filter(Boolean);
11
13
  }
14
+ // Wildcard match without building a RegExp: `*` matches any run of characters, `?` one character,
15
+ // everything else is literal. Greedy with a single backtrack point, so it stays linear-ish on
16
+ // hostile patterns such as "a*a*a*b".
12
17
  function segmentMatches(pattern, name) {
13
- const source = pattern
14
- .replace(/[.+^${}()|[\]\\]/g, "\\$&")
15
- .replace(/\*/g, "[^/]*")
16
- .replace(/\?/g, "[^/]");
17
- return new RegExp(`^${source}$`).test(name);
18
+ let p = 0;
19
+ let n = 0;
20
+ let starP = -1;
21
+ let starN = 0;
22
+ while (n < name.length) {
23
+ if (p < pattern.length &&
24
+ pattern[p] !== "*" &&
25
+ (pattern[p] === "?" || pattern[p] === name[n])) {
26
+ p++;
27
+ n++;
28
+ }
29
+ else if (p < pattern.length && pattern[p] === "*") {
30
+ starP = p++;
31
+ starN = n;
32
+ }
33
+ else if (starP !== -1) {
34
+ p = starP + 1;
35
+ n = ++starN;
36
+ }
37
+ else {
38
+ return false;
39
+ }
40
+ }
41
+ while (p < pattern.length && pattern[p] === "*")
42
+ p++;
43
+ return p === pattern.length;
18
44
  }
19
45
  function globMatchesDir(patternSegments, dirSegments) {
20
46
  return (patternSegments.length === dirSegments.length &&
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { execFileSync, execSync } from "node:child_process";
2
4
  import { findOnPath } from "./which.js";
3
5
  // A wedged daemon makes `docker ps` block forever instead of failing.
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { execFileSync, execSync } from "node:child_process";
2
4
  import { existsSync, readdirSync, readFileSync } from "node:fs";
3
5
  import { createServer } from "node:net";
@@ -54,9 +56,12 @@ export function parsePublishedPortHolders(dockerPsOutput, ports) {
54
56
  const portsField = tab >= 0 ? trimmed.slice(tab + 1) : "";
55
57
  const publishedPorts = [];
56
58
  for (const port of wanted) {
57
- // Matches 0.0.0.0:80->, :::80->, 127.0.0.1:80->
58
- const pattern = new RegExp(`(?:^|[\\s,])(?:\\d[\\d.]*:|\\[::\\]:|::)?${port}->`);
59
- if (pattern.test(portsField) || portsField.includes(`:${port}->`)) {
59
+ // Each mapping is "[ip:]hostPort->containerPort/proto"; match the host port exactly
60
+ // (80-> or 0.0.0.0:80->, :::80->, 127.0.0.1:80->), never a longer number such as 1080->.
61
+ const published = portsField
62
+ .split(/[\s,]+/)
63
+ .some((mapping) => mapping.startsWith(`${port}->`) || mapping.includes(`:${port}->`));
64
+ if (published) {
60
65
  publishedPorts.push(port);
61
66
  }
62
67
  }
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { existsSync, readFileSync } from "node:fs";
2
4
  import { dirname, join, normalize } from "node:path";
3
5
  import { formatCount } from "./formatting.js";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { execFileSync, execSync } from "node:child_process";
2
4
  import { existsSync, readdirSync, readFileSync } from "node:fs";
3
5
  import { basename, dirname, join, relative } from "node:path";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { execFileSync } from "node:child_process";
2
4
  const run = (command, args) => execFileSync(command, args, { encoding: "utf-8", stdio: "pipe", windowsHide: true });
3
5
  /** Network names the engine creates per project (see engine/.../docker/constants.star and init-networks). */
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { randomBytes } from "node:crypto";
2
4
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
3
5
  import { join } from "node:path";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import chalk from "chalk";
2
4
  import { QUICKSTART_DOCS_URL } from "./constants.js";
3
5
  import { getContainerRuntimeStatus } from "./docker.js";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { exec, execFile } from "node:child_process";
2
4
  import { promisify } from "node:util";
3
5
  import { findOnPath } from "./which.js";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { appendFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
4
  import { resolve } from "node:path";
3
5
  import chalk from "chalk";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import chalk from "chalk";
2
4
  function pluralize(count, singular, plural) {
3
5
  return count === 1 ? singular : plural || `${singular}s`;
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { existsSync, lstatSync } from "node:fs";
2
4
  import { isAbsolute, normalize, relative, sep } from "node:path";
3
5
  /** Reviewed TDK-owned destinations written by `tdk config regenerate` or Tilt generation. */
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { execFileSync } from "node:child_process";
2
4
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
5
  import { join } from "node:path";
@@ -9,7 +11,7 @@ export function isDockerPortOwnedByProject(dockerPs, projectPrefix, port) {
9
11
  const containerName = name.toLowerCase();
10
12
  const prefix = projectPrefix.toLowerCase();
11
13
  return ((containerName.startsWith(`${prefix}_`) || containerName.startsWith(`${prefix}-`)) &&
12
- new RegExp(`:${port}->`).test(ports));
14
+ ports.includes(`:${port}->`));
13
15
  });
14
16
  }
15
17
  export function readSavedHostPortPlan(projectRoot) {
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { createServer } from "node:net";
2
4
  import { hasLocalListener } from "./port-listener-probe.js";
3
5
  export const DEFAULT_HOST_PORT_RANGES = {
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { writeSync } from "node:fs";
2
4
  /**
3
5
  * Returns an emitter that writes at most one `{schemaVersion, data, errors}` object to stdout. If the process
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { TdkError } from "./errors.js";
2
4
  export function createMachineEnvelope(data, errors = []) {
3
5
  return { schemaVersion: 1, data, errors };
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { existsSync } from "node:fs";
2
4
  import { dirname, join, resolve } from "node:path";
3
5
  import { cwd } from "node:process";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { delimiter, extname } from "node:path";
2
4
  export function isWindows() {
3
5
  return process.platform === "win32";
@@ -1,3 +1,5 @@
1
+ // Copyright (c) 2026 TDK Landscape contributors
2
+ // SPDX-License-Identifier: MIT
1
3
  import { createConnection, createServer } from "node:net";
2
4
  import { PORT_RANGES } from "./constants.js";
3
5
  function isPortAvailable(port) {