@tdk-landscape/tdk-cli-core 1.3.15 → 1.3.22

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 (274) hide show
  1. package/Tiltfile +144 -0
  2. package/discovery/AGENTS.md +362 -0
  3. package/discovery/TILT_DISCOVERY.star +424 -0
  4. package/discovery/Tiltfile +58 -0
  5. package/discovery/config.star +258 -0
  6. package/discovery/constants.star +127 -0
  7. package/discovery/deterministic.star +211 -0
  8. package/discovery/discovery_daemon.star +191 -0
  9. package/discovery/discovery_orchestrator.star +460 -0
  10. package/discovery/filtering.star +5 -0
  11. package/discovery/identity-management-backend/service.yaml +26 -0
  12. package/discovery/identity-management-frontend/service.yaml +29 -0
  13. package/discovery/identity-sdk/service.yaml +9 -0
  14. package/discovery/incremental_discovery.star +213 -0
  15. package/discovery/indexing.star +7 -0
  16. package/discovery/json_manifest_scanner.star +51 -0
  17. package/discovery/libraries.star +46 -0
  18. package/discovery/loading.star +23 -0
  19. package/discovery/manifest/constants.star +104 -0
  20. package/discovery/manifest/loading.star +386 -0
  21. package/discovery/manifest/normalize.star +281 -0
  22. package/discovery/manifest/validation.star +108 -0
  23. package/discovery/normalization.star +11 -0
  24. package/discovery/registry.star +544 -0
  25. package/discovery/resource_snapshot.py +382 -0
  26. package/discovery/resource_snapshot.star +143 -0
  27. package/discovery/schemas.star +1 -0
  28. package/discovery/services/platform/cdc/debezium/nats-connector/service.yaml +9 -0
  29. package/discovery/services/platform/cdc/nats-http-bridge/service.yaml +9 -0
  30. package/discovery/services/platform/orchestrator/orchestrator-glue-backend/service.yaml +26 -0
  31. package/discovery/services/platform/synthetic-monitor/service.yaml +9 -0
  32. package/discovery/test_resource_snapshot.py +251 -0
  33. package/discovery/validation.star +78 -0
  34. package/discovery/versioning.star +1 -0
  35. package/dist/commands/config.d.ts.map +1 -1
  36. package/dist/commands/config.js +11 -0
  37. package/dist/commands/config.js.map +1 -1
  38. package/dist/commands/doctor.d.ts.map +1 -1
  39. package/dist/commands/doctor.js +1 -2
  40. package/dist/commands/doctor.js.map +1 -1
  41. package/dist/commands/project.d.ts.map +1 -1
  42. package/dist/commands/project.js +36 -41
  43. package/dist/commands/project.js.map +1 -1
  44. package/dist/commands/resource.d.ts.map +1 -1
  45. package/dist/commands/resource.js +51 -55
  46. package/dist/commands/resource.js.map +1 -1
  47. package/dist/commands/stack.d.ts.map +1 -1
  48. package/dist/commands/stack.js +22 -24
  49. package/dist/commands/stack.js.map +1 -1
  50. package/dist/commands/ui.d.ts.map +1 -1
  51. package/dist/commands/ui.js +1 -2
  52. package/dist/commands/ui.js.map +1 -1
  53. package/dist/commands/up.d.ts.map +1 -1
  54. package/dist/commands/up.js +1 -2
  55. package/dist/commands/up.js.map +1 -1
  56. package/dist/commands/upgrade.d.ts +8 -0
  57. package/dist/commands/upgrade.d.ts.map +1 -1
  58. package/dist/commands/upgrade.js +59 -18
  59. package/dist/commands/upgrade.js.map +1 -1
  60. package/dist/generator/extension-fetch.d.ts +19 -0
  61. package/dist/generator/extension-fetch.d.ts.map +1 -1
  62. package/dist/generator/extension-fetch.js +71 -5
  63. package/dist/generator/extension-fetch.js.map +1 -1
  64. package/dist/generator/template-engine.d.ts +1 -0
  65. package/dist/generator/template-engine.d.ts.map +1 -1
  66. package/dist/generator/template-engine.js +50 -6
  67. package/dist/generator/template-engine.js.map +1 -1
  68. package/dist/utils/command-helpers.d.ts.map +1 -1
  69. package/dist/utils/command-helpers.js +7 -9
  70. package/dist/utils/command-helpers.js.map +1 -1
  71. package/dist/utils/constants.d.ts +1 -0
  72. package/dist/utils/constants.d.ts.map +1 -1
  73. package/dist/utils/constants.js +1 -0
  74. package/dist/utils/constants.js.map +1 -1
  75. package/dist/utils/errors.d.ts +2 -0
  76. package/dist/utils/errors.d.ts.map +1 -1
  77. package/dist/utils/errors.js +6 -1
  78. package/dist/utils/errors.js.map +1 -1
  79. package/dist/utils/project-features.d.ts.map +1 -1
  80. package/dist/utils/project-features.js +1 -1
  81. package/dist/utils/project-features.js.map +1 -1
  82. package/dist/utils/resource-features.d.ts.map +1 -1
  83. package/dist/utils/resource-features.js +2 -2
  84. package/dist/utils/resource-features.js.map +1 -1
  85. package/dist/utils/tar.js +4 -4
  86. package/dist/utils/tar.js.map +1 -1
  87. package/dist/utils/validation.d.ts +7 -0
  88. package/dist/utils/validation.d.ts.map +1 -1
  89. package/dist/utils/validation.js +9 -0
  90. package/dist/utils/validation.js.map +1 -1
  91. package/engine/AGENTS.md +705 -0
  92. package/engine/README.md +29 -0
  93. package/engine/REFACTORING_MANIFEST_SYSTEM.md +974 -0
  94. package/engine/Tiltfile +80 -0
  95. package/engine/assets/docker/golden-layers.Dockerfile +221 -0
  96. package/engine/assets/scripts/cleanup-completed-migrator-images.sh +37 -0
  97. package/engine/assets/scripts/cleanup-tilt-images.sh +120 -0
  98. package/engine/assets/scripts/mac-m1-resource-monitor.sh +121 -0
  99. package/engine/config.star +3 -0
  100. package/engine/docs/AUTODISCOVERY_TEST.md +182 -0
  101. package/engine/docs/C4-ARCHITECTURE-operations.md +396 -0
  102. package/engine/docs/C4-ARCHITECTURE-overview.md +284 -0
  103. package/engine/docs/C4-ARCHITECTURE.md +17 -0
  104. package/engine/docs/GOLDEN_IMAGE_INTEGRATION.md +349 -0
  105. package/engine/docs/MANIFEST_DRIVEN_ARCHITECTURE.md +357 -0
  106. package/engine/docs/README.md +284 -0
  107. package/engine/entrypoint.star +97 -0
  108. package/engine/lifecycle/orchestrator.star +260 -0
  109. package/engine/paths.star +717 -0
  110. package/engine/schemas/manifest-schema.json +301 -0
  111. package/engine/schemas/service-schema.json +301 -0
  112. package/engine/scripts/README.md +89 -0
  113. package/engine/scripts/build-and-publish-lib.sh +205 -0
  114. package/engine/scripts/check-lib-publish.sh +85 -0
  115. package/engine/scripts/debug-container.sh +258 -0
  116. package/engine/scripts/generate-manifest.sh +197 -0
  117. package/engine/spec.master +702 -0
  118. package/engine/spec.master.example +341 -0
  119. package/engine/topologies/README.md +34 -0
  120. package/engine/topologies/platform/docker/AGENTS.md +59 -0
  121. package/engine/topologies/platform/docker/auth/auth.star +167 -0
  122. package/engine/topologies/platform/docker/build/golden_image.star +37 -0
  123. package/engine/topologies/platform/docker/build/golden_image_build.star +82 -0
  124. package/engine/topologies/platform/docker/build/golden_image_constants.star +93 -0
  125. package/engine/topologies/platform/docker/build/golden_image_dockerfile.star +291 -0
  126. package/engine/topologies/platform/docker/compose/compose.star +636 -0
  127. package/engine/topologies/platform/docker/compose/compose_helpers.star +52 -0
  128. package/engine/topologies/platform/docker/compose/traefik_standalone.star +53 -0
  129. package/engine/topologies/platform/docker/config/bunignore.star +142 -0
  130. package/engine/topologies/platform/docker/config/dockerignore.star +150 -0
  131. package/engine/topologies/platform/docker/constants.star +170 -0
  132. package/engine/topologies/platform/docker/dockerfile/dockerfile.star +54 -0
  133. package/engine/topologies/platform/docker/generators/golden_docker_generator_v2.star +73 -0
  134. package/engine/topologies/platform/docker/index.star +27 -0
  135. package/engine/topologies/platform/docker/layers/bun_helpers.star +23 -0
  136. package/engine/topologies/platform/docker/layers/infisical/index.star +40 -0
  137. package/engine/topologies/platform/docker/layers/infisical/infisical_docker.star +262 -0
  138. package/engine/topologies/platform/docker/layers/l1_base_layers.star +87 -0
  139. package/engine/topologies/platform/docker/layers/l2_dependency_layers.star +125 -0
  140. package/engine/topologies/platform/docker/layers/l3_builder_layers.star +209 -0
  141. package/engine/topologies/platform/docker/layers/l4_runtime_layers.star +214 -0
  142. package/engine/topologies/platform/docker/layers/prisma/constants.star +135 -0
  143. package/engine/topologies/platform/docker/layers/prisma/db_readiness.star +96 -0
  144. package/engine/topologies/platform/docker/layers/prisma/filesystem_setup.star +109 -0
  145. package/engine/topologies/platform/docker/layers/prisma/migrate_script.star +98 -0
  146. package/engine/topologies/platform/docker/layers/prisma/prisma_build.star +126 -0
  147. package/engine/topologies/platform/docker/layers/prisma/prisma_runtime.star +161 -0
  148. package/engine/topologies/platform/docker/layers/prisma/secret_resolution.star +119 -0
  149. package/engine/topologies/platform/docker/networking/api_path_constants.star +230 -0
  150. package/engine/topologies/platform/docker/networking/sablier_container_cycle.star +27 -0
  151. package/engine/topologies/platform/docker/networking/traefik.star +232 -0
  152. package/engine/topologies/platform/docker/networking/traefik_constants.star +146 -0
  153. package/engine/topologies/platform/docker/networking/traefik_helpers.star +160 -0
  154. package/engine/topologies/platform/docker/secrets/infisical.star +135 -0
  155. package/engine/topologies/platform/net/proxy.star +4 -0
  156. package/engine/topologies/platform/registries/local.star +4 -0
  157. package/engine/topologies/platform/security/secrets.star +239 -0
  158. package/engine/topologies/platform/state/relational.star +4 -0
  159. package/engine/topologies/tilt/common/AGENTS.md +59 -0
  160. package/engine/topologies/tilt/common/utils.star +364 -0
  161. package/engine/topologies/tilt/common/utils_debug.star +69 -0
  162. package/engine/topologies/tilt/common/utils_deterministic.star +168 -0
  163. package/engine/topologies/tilt/common/utils_docker_networks.star +46 -0
  164. package/engine/topologies/tilt/common/utils_env.star +43 -0
  165. package/engine/topologies/tilt/common/utils_output.star +97 -0
  166. package/engine/topologies/tilt/config/AGENTS.md +68 -0
  167. package/engine/topologies/tilt/config/defaults.star +3 -0
  168. package/engine/topologies/tilt/config/feature_flags.star +10 -0
  169. package/engine/topologies/tilt/config/global.star +55 -0
  170. package/engine/topologies/tilt/config/profiles.star +382 -0
  171. package/engine/topologies/tilt/generators/agents_md.star +62 -0
  172. package/engine/topologies/tilt/generators/api_gateway.star +145 -0
  173. package/engine/topologies/tilt/generators/index.star +124 -0
  174. package/engine/topologies/tilt/generators/infisical/README.md +424 -0
  175. package/engine/topologies/tilt/generators/infisical/examples.star +312 -0
  176. package/engine/topologies/tilt/generators/infisical/index.star +57 -0
  177. package/engine/topologies/tilt/generators/infisical/machine_identity.star +420 -0
  178. package/engine/topologies/tilt/generators/infisical/organization.star +534 -0
  179. package/engine/topologies/tilt/generators/infisical/path_manager.star +476 -0
  180. package/engine/topologies/tilt/generators/infisical/secrets_generator.star +420 -0
  181. package/engine/topologies/tilt/generators/nginx_conf.star +143 -0
  182. package/engine/topologies/tilt/generators/npmrc.star +111 -0
  183. package/engine/topologies/tilt/generators/tsconfig.star +23 -0
  184. package/engine/topologies/tilt/generators/typescript/backend_library_tsconfig.star +71 -0
  185. package/engine/topologies/tilt/generators/typescript/backend_tsconfig.star +124 -0
  186. package/engine/topologies/tilt/generators/typescript/common.star +7 -0
  187. package/engine/topologies/tilt/generators/typescript/frontend_library_tsconfig.star +76 -0
  188. package/engine/topologies/tilt/generators/typescript/frontend_tsconfig.star +110 -0
  189. package/engine/topologies/tilt/generators/typescript/include.star +23 -0
  190. package/engine/topologies/tilt/generators/typescript/playwright_config.star +40 -0
  191. package/engine/topologies/tilt/generators/typescript/prisma_config.star +49 -0
  192. package/engine/topologies/tilt/generators/validators.star +853 -0
  193. package/engine/topologies/tilt/generators/vite/backend.star +78 -0
  194. package/engine/topologies/tilt/generators/vite/frontend.star +98 -0
  195. package/engine/topologies/tilt/generators/vite/generators.star +43 -0
  196. package/engine/topologies/tilt/generators/vite/helpers.star +244 -0
  197. package/engine/topologies/tilt/generators/vite/library.star +65 -0
  198. package/engine/topologies/tilt/generators/vite/sdk.star +73 -0
  199. package/engine/topologies/tilt/generators/vite/templates.star +737 -0
  200. package/engine/topologies/tilt/generators/vite_config.star +22 -0
  201. package/engine/topologies/tilt/manifest/AGENTS.md +61 -0
  202. package/engine/topologies/tilt/manifest/README.md +693 -0
  203. package/engine/topologies/tilt/manifest/__init__.star +218 -0
  204. package/engine/topologies/tilt/manifest/constants.star +252 -0
  205. package/engine/topologies/tilt/manifest/errors.star +266 -0
  206. package/engine/topologies/tilt/manifest/integration.star +339 -0
  207. package/engine/topologies/tilt/manifest/json_to_yaml.py +54 -0
  208. package/engine/topologies/tilt/manifest/loader.star +214 -0
  209. package/engine/topologies/tilt/manifest/mapper.star +227 -0
  210. package/engine/topologies/tilt/manifest/parser.star +400 -0
  211. package/engine/topologies/tilt/manifest/schema.star +462 -0
  212. package/engine/topologies/tilt/manifest/tests/test_integration.star +276 -0
  213. package/engine/topologies/tilt/manifest/tests/test_loader_parser.star +397 -0
  214. package/engine/topologies/tilt/manifest/tests/test_manifest.star +316 -0
  215. package/engine/topologies/tilt/manifest/tests/test_validator.star +470 -0
  216. package/engine/topologies/tilt/manifest/validator.star +717 -0
  217. package/engine/topologies/tilt/manifest/yaml_to_json.py +18 -0
  218. package/engine/topologies/tilt/resources/AGENTS.md +71 -0
  219. package/engine/topologies/tilt/resources/conditions.star +3 -0
  220. package/engine/topologies/tilt/resources/databases.star +244 -0
  221. package/engine/topologies/tilt/resources/declaration.star +3 -0
  222. package/engine/topologies/tilt/resources/deps.star +3 -0
  223. package/engine/topologies/tilt/resources/infra-loader.star +437 -0
  224. package/engine/topologies/tilt/resources/libs.star +30 -0
  225. package/engine/topologies/tilt/resources/libs_discovery.star +102 -0
  226. package/engine/topologies/tilt/resources/libs_paths.star +79 -0
  227. package/engine/topologies/tilt/resources/libs_resource_definition.star +151 -0
  228. package/engine/topologies/tilt/resources/libs_setup.star +164 -0
  229. package/engine/topologies/tilt/resources/libs_tsconfig.star +37 -0
  230. package/engine/topologies/tilt/resources/orchestrator/apply.star +77 -0
  231. package/engine/topologies/tilt/resources/orchestrator/apply_compose_resource_registration.star +431 -0
  232. package/engine/topologies/tilt/resources/orchestrator/apply_manifest_orchestration.star +81 -0
  233. package/engine/topologies/tilt/resources/orchestrator/apply_migrator_orchestration.star +148 -0
  234. package/engine/topologies/tilt/resources/orchestrator/apply_resource_validation.star +36 -0
  235. package/engine/topologies/tilt/resources/orchestrator/apply_runtime_flags.star +44 -0
  236. package/engine/topologies/tilt/resources/orchestrator/builders/typescript.star +164 -0
  237. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/AGENTS.md +75 -0
  238. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/index.star +21 -0
  239. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/resolver.star +134 -0
  240. package/engine/topologies/tilt/resources/orchestrator/generators/env.star +258 -0
  241. package/engine/topologies/tilt/resources/orchestrator/generators/frontend.star +169 -0
  242. package/engine/topologies/tilt/resources/orchestrator/generators/manifest_resource.star +524 -0
  243. package/engine/topologies/tilt/resources/orchestrator/helpers.star +33 -0
  244. package/engine/topologies/tilt/resources/orchestrator.star +54 -0
  245. package/engine/topologies/tilt/resources/ordering.star +3 -0
  246. package/engine/topologies/tilt/resources/triggers.star +3 -0
  247. package/engine/topologies/tilt/resources/watchers.star +299 -0
  248. package/engine/where-things-live.star +717 -0
  249. package/ext/Tiltfile +66 -0
  250. package/ext/ide-components/README.md +219 -0
  251. package/ext/ide-components/code_executor/server.py +268 -0
  252. package/ext/ide-components/code_viewer/server.py +206 -0
  253. package/ext/ide-components/config_inspector/server.py +1050 -0
  254. package/ext/ide-components/file_browser/server.py +285 -0
  255. package/ext/ide-components/shared/config_service.py +469 -0
  256. package/ext/ide-components/shared/file_utils.py +298 -0
  257. package/ext/ide-components/shared/http_utils.py +232 -0
  258. package/ext/ide-components/shared/static/styles.css +1334 -0
  259. package/ext/ide-components/shared/syntax_highlighter.py +140 -0
  260. package/ext/ide-components/shared/template_engine.py +123 -0
  261. package/ext/ide-components/shared/templates/base.html +121 -0
  262. package/ext/ide-components/shared/test_config_service.py +326 -0
  263. package/ext/ide-components/shared/tilt_integration.py +158 -0
  264. package/ext/ui-enhancements/cron-status-server.sh +49 -0
  265. package/ext/ui-enhancements/cron-status-tracker.sh +146 -0
  266. package/ext/ui-enhancements/extension.yaml +36 -0
  267. package/ext/ui-enhancements/tiltfile.py +99 -0
  268. package/ext/ui-enhancements/ui/cron-jobs-tab.css +396 -0
  269. package/ext/ui-enhancements/ui/help-panel.css +279 -0
  270. package/ext/ui-enhancements/ui/icons.css +125 -0
  271. package/ext/ui-enhancements/ui/tooltips.css +114 -0
  272. package/package.json +13 -9
  273. package/specs/specs/TILT_SERVICE_DEFAULTS.star +205 -0
  274. package/specs/specs/TILT_TECH_STACK.star +159 -0
@@ -0,0 +1,341 @@
1
+ #!/usr/bin/env starlark
2
+ # BEFORE/AFTER: Making Tilt Obvious (Zig-Style Explicitness)
3
+ #
4
+ # This file demonstrates how the new spec.master makes the system
5
+ # completely explicit - addressing the Zig developer's critique about
6
+ # "hidden control flow" and "no hidden allocations"
7
+
8
+ # =============================================================================
9
+ # ❌ BEFORE: Implicit, Hidden, Magic
10
+ # =============================================================================
11
+
12
+ # Magic load - where does this file live? Who knows.
13
+ # load("./discovery/registry.star", "get_app_resources")
14
+
15
+ # Magic context - what's inside ctx? Runtime mystery.
16
+ # ctx = Context.build(full_graph, manifest)
17
+
18
+ # Magic path construction - where does this write?
19
+ # output_path = path.join(resource_path, "tsconfig.json")
20
+
21
+ # Magic feature check - is this enabled? Where defined?
22
+ # if features.is_enabled("istio"):
23
+
24
+ # Magic port allocation - algorithm hidden
25
+ # port = allocate_port(resource_name)
26
+
27
+ # Magic dependency resolution - how does this work?
28
+ # deps = resolve_dependencies(manifest)
29
+
30
+ # =============================================================================
31
+ # ✅ AFTER: Explicit, Obvious, No Magic
32
+ # =============================================================================
33
+
34
+ # Load the master spec - ALL paths are explicit constants
35
+ load("{PROJECT_ROOT}/.tilt/spec.master", "SPEC", "CONSTANTS", "VALIDATION", "FEATURES", "OUTPUT", "DEBUG")
36
+
37
+ # 💡 ALTERNATIVE: Use the easier-to-remember alias names
38
+ # Both work identically - use whichever you prefer!
39
+ #
40
+ # load("{PROJECT_ROOT}/.tilt/paths.star", "SPEC", "CONSTANTS", "DEBUG")
41
+ # load("{PROJECT_ROOT}/.tilt/where-things-live.star", "SPEC", "CONSTANTS", "DEBUG")
42
+ #
43
+ # Why aliases? Because "paths" is easier to remember than "spec.master" 😊
44
+
45
+ # Explicit imports - you SEE exactly what files are loaded
46
+ load(SPEC.DISCOVERY.REGISTRY, "get_app_resources", "get_resource_by_name")
47
+ load(SPEC.DISCOVERY.LOADING, "load_manifest")
48
+ load(SPEC.GENERATORS.VITE, "generate_vite_config")
49
+ load(SPEC.GENERATORS.TSCONFIG, "generate_tsconfig")
50
+ load(SPEC.GENERATORS.DOCKERFILE, "generate_dockerfile")
51
+ load(SPEC.GENERATORS.MANIFEST_RESOURCE, "ManifestResource")
52
+
53
+ # EXPLICIT path construction - no hidden logic
54
+ def get_resource_path(resource_name):
55
+ """Build service path EXPLICITLY from constants."""
56
+ return SPEC.RESOURCES_DIR + "/product/" + resource_name
57
+
58
+ def get_manifest_path(resource_path):
59
+ """Manifest path is EXPLICIT, not discovered."""
60
+ return resource_path + "/" + RESOURCE_PATTERNS.MANIFEST_FILE
61
+
62
+ def get_output_path(resource_name, filename):
63
+ """Output path is EXPLICIT, constructed from constants."""
64
+ return OUTPUT.CONFIGS + "/" + resource_name + "/" + filename
65
+
66
+ # =============================================================================
67
+ # EXPLICIT CONFIGURATION GENERATION
68
+ # =============================================================================
69
+
70
+ def generate_resource_configs(resource_name, manifest):
71
+ """
72
+ Generate configs with EXPLICIT paths and constraints.
73
+ No hidden allocations. No magic context.
74
+ """
75
+
76
+ # EXPLICIT: Validate inputs (Zig-style defensive programming)
77
+ if not resource_name:
78
+ fail("resource_name is empty - explicit validation")
79
+
80
+ if not manifest:
81
+ fail("manifest is empty - explicit validation")
82
+
83
+ # EXPLICIT: Port validation with visible constraints
84
+ port = manifest.get("port")
85
+ if port < VALIDATION.MIN_PORT or port > VALIDATION.MAX_PORT:
86
+ fail("port {} outside valid range [{}-{}]".format(
87
+ port, VALIDATION.MIN_PORT, VALIDATION.MAX_PORT
88
+ ))
89
+
90
+ if port in VALIDATION.RESERVED_PORTS:
91
+ fail("port {} is in RESERVED_PORTS list".format(port))
92
+
93
+ # EXPLICIT: Feature check - visible toggle
94
+ if FEATURES.ISTIO_INTEGRATION:
95
+ # 🗓️ ROADMAP: Will generate Istio configs when implemented
96
+ istio_config = generate_istio_config(manifest)
97
+ else:
98
+ # EXPLICIT: Currently using Traefik
99
+ istio_config = None
100
+
101
+ # EXPLICIT: Path construction - you SEE where files go
102
+ resource_path = get_resource_path(resource_name)
103
+ output_dir = get_output_path(resource_name, "")
104
+
105
+ configs = {
106
+ "tsconfig": {
107
+ "input": get_manifest_path(resource_path),
108
+ "output": output_dir + RESOURCE_PATTERNS.GENERATED_TSCONFIG,
109
+ "generator": SPEC.GENERATORS.TSCONFIG,
110
+ },
111
+ "vite": {
112
+ "input": get_manifest_path(resource_path),
113
+ "output": output_dir + RESOURCE_PATTERNS.GENERATED_VITE_CONFIG,
114
+ "generator": SPEC.GENERATORS.VITE,
115
+ },
116
+ "dockerfile": {
117
+ "input": get_manifest_path(resource_path),
118
+ "output": resource_path + "/" + RESOURCE_PATTERNS.DOCKERFILE,
119
+ "generator": SPEC.GENERATORS.DOCKERFILE,
120
+ },
121
+ }
122
+
123
+ # EXPLICIT: Debug output (visible when DEBUG.DUMP_GENERATED_CONFIGS)
124
+ if DEBUG.DUMP_GENERATED_CONFIGS:
125
+ print("[DEBUG] Generated configs for {}:".format(resource_name))
126
+ for name, cfg in configs.items():
127
+ print(" {}: {}".format(name, cfg["output"]))
128
+
129
+ return configs
130
+
131
+ # =============================================================================
132
+ # EXPLICIT SERVICE DISCOVERY (No Magic Globbing)
133
+ # =============================================================================
134
+
135
+ def discover_services_explicit():
136
+ """
137
+ Discover services with EXPLICIT search paths.
138
+ No hidden glob patterns. Everything visible.
139
+ """
140
+ discovered = []
141
+
142
+ # EXPLICIT: Iterate declared search paths
143
+ for search_path in DISCOVERY.RESOURCE_SEARCH_PATHS:
144
+ # EXPLICIT: Glob pattern is declared in spec.master
145
+ pattern = search_path + "/" + DISCOVERY.MANIFEST_PATTERNS[0] # service.json
146
+
147
+ # EXPLICIT: Check exclusions
148
+ matches = glob([pattern], exclude=DISCOVERY.EXCLUDE_PATTERNS)
149
+
150
+ for match in matches:
151
+ # EXPLICIT: Construct service info from path
152
+ resource_dir = os.path.dirname(match)
153
+ resource_name = os.path.basename(resource_dir)
154
+
155
+ discovered.append({
156
+ "name": resource_name,
157
+ "path": resource_dir,
158
+ "manifest_path": match,
159
+ })
160
+
161
+ return discovered
162
+
163
+ # =============================================================================
164
+ # EXPLICIT CONTEXT BUILDING (No Black Box)
165
+ # =============================================================================
166
+
167
+ def build_explicit_context(resource_manifest, all_services):
168
+ """
169
+ Build context EXPLICITLY - every field is visible.
170
+ No mystery black box.
171
+ """
172
+ ctx = struct(
173
+ # EXPLICIT: Source data
174
+ manifest = resource_manifest,
175
+ all_services = all_services,
176
+
177
+ # EXPLICIT: Computed values (transparent logic)
178
+ resource_name = resource_manifest.get("appName"),
179
+ resource_path = get_resource_path(resource_manifest.get("appName")),
180
+ port = resource_manifest.get("port"),
181
+
182
+ # EXPLICIT: Dependencies (resolved, not hidden)
183
+ dependencies = resolve_explicit_dependencies(
184
+ resource_manifest.get("dependsOn", []),
185
+ all_services
186
+ ),
187
+
188
+ # EXPLICIT: System constants
189
+ constants = CONSTANTS,
190
+ validation = VALIDATION,
191
+ features = FEATURES,
192
+ )
193
+
194
+ # EXPLICIT: Debug inspection
195
+ if DEBUG.DUMP_CONTEXT_ON_GENERATION:
196
+ print("[DEBUG] Context for {}:".format(ctx.resource_name))
197
+ print(" port: {}".format(ctx.port))
198
+ print(" dependencies: {}".format([d["name"] for d in ctx.dependencies]))
199
+ print(" features enabled: {}".format([f for f in dir(FEATURES) if not f.startswith("_")]))
200
+
201
+ return ctx
202
+
203
+ def resolve_explicit_dependencies(dep_names, all_services):
204
+ """
205
+ Resolve dependencies EXPLICITLY.
206
+ No hidden graph traversal.
207
+ """
208
+ resolved = []
209
+
210
+ for dep_name in dep_names:
211
+ # EXPLICIT: Lookup in explicit list
212
+ found = None
213
+ for svc in all_services:
214
+ if svc["name"] == dep_name:
215
+ found = svc
216
+ break
217
+
218
+ if not found:
219
+ fail("Dependency '{}' not found in explicit service list".format(dep_name))
220
+
221
+ # EXPLICIT: Check for circular dependencies
222
+ if dep_name in resolved:
223
+ fail("Circular dependency detected involving '{}'".format(dep_name))
224
+
225
+ resolved.append(found)
226
+
227
+ return resolved
228
+
229
+ # =============================================================================
230
+ # EXPLICIT GENERATION ENTRY POINT
231
+ # =============================================================================
232
+
233
+ def generate_all_explicit():
234
+ """
235
+ Main generation with EXPLICIT flow.
236
+ Every step is visible. No magic.
237
+ """
238
+
239
+ print("=" * 60)
240
+ print("TILT GENERATION - EXPLICIT MODE")
241
+ print("=" * 60)
242
+
243
+ # EXPLICIT: Step 1 - Discovery
244
+ print("\n[1/5] DISCOVERY")
245
+ print(" Search paths: {}".format(DISCOVERY.RESOURCE_SEARCH_PATHS))
246
+ services = discover_services_explicit()
247
+ print(" Found {} services".format(len(services)))
248
+ for svc in services:
249
+ print(" - {} at {}".format(svc["name"], svc["path"]))
250
+
251
+ # EXPLICIT: Step 2 - Validation
252
+ print("\n[2/5] VALIDATION")
253
+ for svc in services:
254
+ port = svc.get("port", 0)
255
+ if port < VALIDATION.MIN_PORT:
256
+ fail(" ❌ {}: port {} below minimum {}".format(
257
+ svc["name"], port, VALIDATION.MIN_PORT
258
+ ))
259
+ print(" ✅ {}: port {} valid".format(svc["name"], port))
260
+
261
+ # EXPLICIT: Step 3 - Context Building
262
+ print("\n[3/5] CONTEXT BUILDING")
263
+ contexts = {}
264
+ for svc in services:
265
+ ctx = build_explicit_context(svc, services)
266
+ contexts[svc["name"]] = ctx
267
+ print(" ✅ {}: context built".format(svc["name"]))
268
+
269
+ # EXPLICIT: Step 4 - Generation
270
+ print("\n[4/5] GENERATION")
271
+ generated = {}
272
+ for svc in services:
273
+ configs = generate_resource_configs(svc["name"], svc)
274
+ generated[svc["name"]] = configs
275
+ print(" ✅ {}: {} configs generated".format(svc["name"], len(configs)))
276
+
277
+ # EXPLICIT: Step 5 - Output
278
+ print("\n[5/5] OUTPUT")
279
+ print(" Output directory: {}".format(OUTPUT.CONFIGS))
280
+ for svc_name, configs in generated.items():
281
+ for cfg_name, cfg in configs.items():
282
+ print(" Writing: {}".format(cfg["output"]))
283
+ # write_file(cfg["output"], cfg["content"])
284
+
285
+ print("\n" + "=" * 60)
286
+ print("GENERATION COMPLETE")
287
+ print(" Services: {}".format(len(services)))
288
+ print(" Configs: {}".format(sum(len(c) for c in generated.values())))
289
+ print(" Output: {}".format(OUTPUT.CONFIGS))
290
+ print("=" * 60)
291
+
292
+ # =============================================================================
293
+ # ZIG-STYLE MANIFESTO APPLIED
294
+ # =============================================================================
295
+
296
+ """
297
+ WHAT CHANGED:
298
+
299
+ BEFORE (Implicit):
300
+ - Paths discovered at runtime
301
+ - Features checked magically
302
+ - Context is black box
303
+ - Errors at runtime
304
+
305
+ AFTER (Explicit - Zig-style):
306
+ - Paths are CONSTANTS in spec.master
307
+ - Features are EXPLICIT STRUCT toggles
308
+ - Context is EXPLICIT STRUCT (every field visible)
309
+ - Errors at "compile time" (Tiltfile load)
310
+
311
+ PRINCIPLES APPLIED:
312
+ ✅ No hidden control flow
313
+ ✅ No hidden allocations (paths explicit)
314
+ ✅ No magic (everything declared in spec.master)
315
+ ✅ Explicit is better than implicit
316
+ ✅ Fail fast with clear messages
317
+
318
+ ANSWER TO ZIG DEVELOPER:
319
+ "You wanted obvious. Now it's obvious."
320
+ "Every path is a constant."
321
+ "Every feature is a toggle."
322
+ "Every context field is visible."
323
+ "No magic. No surprises."
324
+ """
325
+
326
+ # =============================================================================
327
+ # USAGE EXAMPLE
328
+ # =============================================================================
329
+
330
+ # To use in your Tiltfile:
331
+ #
332
+ # load("{}/.tilt/spec.master".format(PROJECT_ROOT), "SPEC", "CONSTANTS")
333
+ #
334
+ # # Now EVERYTHING is explicit and obvious
335
+ # print("Registry path: {}".format(SPEC.DISCOVERY.REGISTRY))
336
+ # print("Max port: {}".format(VALIDATION.MAX_PORT))
337
+ # print("Istio enabled: {}".format(FEATURES.ISTIO_INTEGRATION))
338
+ #
339
+ # # No more guessing where files live
340
+ # # No more wondering what ctx contains
341
+ # # No more hidden feature flags
@@ -0,0 +1,34 @@
1
+ ---
2
+ title: Topologies (Incremental Migration)
3
+ status: backlog
4
+ created: 2026-03-31
5
+ updated: 2026-03-31
6
+ ---
7
+
8
+ # Topologies (Incremental Migration)
9
+
10
+ This folder is the new destination for Tilt topology modules.
11
+
12
+ Current migrated modules (only currently needed runtime pieces):
13
+ - `platform/docker/*` (native compose/dockerfile/dockerignore/golden-layer generators + layers)
14
+ - `platform/net/proxy.star`
15
+ - `platform/state/relational.star`
16
+ - `platform/security/secrets.star`
17
+ - `platform/registries/local.star`
18
+ - `platform/observability/logging.star`
19
+ - `tilt/common/utils.star` (shared runtime utilities)
20
+ - `tilt/discovery/*` (native registry + native manifest scanner/grouping/dependency graph)
21
+ - `tilt/discovery/manifest/*` (native manifest constants/loading/normalize/validation)
22
+ - `tilt/config/{global,defaults,profiles,feature_flags}.star` (native config + native focus profile logic)
23
+ - `tilt/generators/*` (native vite/typescript/npmrc/nginx modules)
24
+ - `tilt/resources/*` (native libs/databases/infra-loader/watchers/orchestrator modules)
25
+ - `product_autogenerated_services_list/services.star`
26
+ - `product_autogenerated_resource_manifests/*`
27
+
28
+ Explicitly not created yet (not needed by current runtime):
29
+ - `platform/net/firewall.star`
30
+ - Most unreferenced files from the full target map.
31
+
32
+ Migration strategy:
33
+ - Keep behavior stable while moving runtime code out of `compat/`.
34
+ - Keep `compat/` as fallback shims during incremental cleanup.
@@ -0,0 +1,59 @@
1
+ # AGENTS.md - Docker Platform Infrastructure
2
+
3
+ ## Purpose
4
+
5
+ Docker image building, golden image layers, and Dockerfile generation for all services.
6
+
7
+ ## Key Concepts
8
+
9
+ ### Golden Image Architecture (L1-L4)
10
+ ```
11
+ L1: Base (Bun, Node, essential tools)
12
+ L2: Dependencies (cached node_modules)
13
+ L3: Builder (build tools)
14
+ L4: Runtime (minimal production image)
15
+ ```
16
+
17
+ ## Key Files
18
+
19
+ ### Golden Images
20
+ - **`golden_image.star`** - GoldenImage struct with L1-L4 builders
21
+ - **`dockerfile.star`** - Dockerfile generation for apps
22
+ - **`constants.star`** - Docker constants, image names
23
+
24
+ ### Layer Building
25
+ - **`layers/l1_base_layers.star`** - Base image with Bun/Node
26
+ - **`layers/l2_dependency_layers.star`** - Dependency installation
27
+ - **`layers/l3_builder_layers.star`** - Build stage
28
+ - **`layers/l4_runtime_layers.star`** - Minimal runtime
29
+
30
+ ### Specialized
31
+ - **`layers/prisma/`** - Prisma-specific Docker layers
32
+ - **`generators/golden_docker_generator.star`** - Old generator (v1)
33
+ - **`generators/golden_docker_generator_v2.star`** - Current generator (v2)
34
+
35
+ ## Common Tasks
36
+
37
+ ### Generate Dockerfile for service
38
+ ```starlark
39
+ load("./dockerfile.star", "generate_app_dockerfile")
40
+ dockerfile = generate_app_dockerfile(path, resource_name, start_command)
41
+ ```
42
+
43
+ ### Get golden image
44
+ ```starlark
45
+ load("./golden_image.star", "GoldenImage")
46
+ digest = GoldenImage.get_digest("l2")
47
+ ```
48
+
49
+ ## Integration
50
+
51
+ - Called by `generators/manifest_resource.star` - when building service resources
52
+ - Used by discovery - to determine Dockerfile paths
53
+ - Outputs to services' `autogenerated/Dockerfile.*.autogenerated`
54
+
55
+ ## Important Notes
56
+
57
+ - Golden images use digests for cache invalidation
58
+ - L2 layer caches `node_modules` for faster rebuilds
59
+ - Each service's Dockerfile starts `FROM {project}/golden-image-l4:latest`
@@ -0,0 +1,167 @@
1
+ # =============================================================================
2
+ # 🔐 TILT SDK - AUTH CONFIGURATION UTILITIES
3
+ # =============================================================================
4
+ # Path: .tilt/topologies/platform/docker/auth.star
5
+ # Purpose: Centralized authentication configuration helpers for docker-compose
6
+ # and environment file generation across the platform.
7
+ #
8
+ # Design Principle: This module is decoupled from manifest.json structure.
9
+ # It accepts auth configuration as a dictionary parameter and does
10
+ # not know where the config comes from. Callers (env.star, compose.star)
11
+ # are responsible for extracting auth fields from manifest and passing
12
+ # them as the auth_config dict.
13
+ # =============================================================================
14
+
15
+ # Default values for auth configuration
16
+ DEFAULT_AUTH_MODE = 'local-jwt'
17
+ DEFAULT_JWT_SECRET = 'local-development-secret-min-32-chars-long'
18
+ DEFAULT_IDENTITY_RESOURCE_URL = 'http://identity-service:3000'
19
+
20
+
21
+ def get_auth_mode(auth_config):
22
+ """Get auth mode from auth config with default fallback.
23
+
24
+ Args:
25
+ auth_config: Auth configuration dictionary (may be None or empty)
26
+
27
+ Returns:
28
+ str: Auth mode ('local-jwt' or 'identity-service')
29
+ """
30
+ if not auth_config:
31
+ return DEFAULT_AUTH_MODE
32
+ return auth_config.get('authMode', DEFAULT_AUTH_MODE)
33
+
34
+
35
+ def get_jwt_secret(auth_config):
36
+ """Get JWT secret from auth config with default fallback.
37
+
38
+ Args:
39
+ auth_config: Auth configuration dictionary (may be None or empty)
40
+
41
+ Returns:
42
+ str: JWT secret for local-jwt mode
43
+ """
44
+ if not auth_config:
45
+ return DEFAULT_JWT_SECRET
46
+ return auth_config.get('jwtSecret', DEFAULT_JWT_SECRET)
47
+
48
+
49
+ def get_identity_resource_url(auth_config):
50
+ """Get identity service URL from auth config with default fallback.
51
+
52
+ Args:
53
+ auth_config: Auth configuration dictionary (may be None or empty)
54
+
55
+ Returns:
56
+ str: URL for identity service
57
+ """
58
+ if not auth_config:
59
+ return DEFAULT_IDENTITY_RESOURCE_URL
60
+ return auth_config.get('identityServiceUrl', DEFAULT_IDENTITY_RESOURCE_URL)
61
+
62
+
63
+ def get_auth_config(auth_config):
64
+ """Get complete auth configuration from auth config dict.
65
+
66
+ Args:
67
+ auth_config: Auth configuration dictionary (may be None or empty)
68
+
69
+ Returns:
70
+ struct: Auth configuration with mode, jwt_secret, and identity_resource_url
71
+ """
72
+ return struct(
73
+ mode = get_auth_mode(auth_config),
74
+ jwt_secret = get_jwt_secret(auth_config),
75
+ identity_resource_url = get_identity_resource_url(auth_config),
76
+ )
77
+
78
+
79
+ def is_local_jwt_mode(auth_config):
80
+ """Check if auth mode is local-jwt.
81
+
82
+ Args:
83
+ auth_config: Auth configuration dictionary (may be None or empty)
84
+
85
+ Returns:
86
+ bool: True if auth mode is 'local-jwt'
87
+ """
88
+ return get_auth_mode(auth_config) == 'local-jwt'
89
+
90
+
91
+ def is_identity_resource_mode(auth_config):
92
+ """Check if auth mode is identity-service.
93
+
94
+ Args:
95
+ auth_config: Auth configuration dictionary (may be None or empty)
96
+
97
+ Returns:
98
+ bool: True if auth mode is 'identity-service'
99
+ """
100
+ return get_auth_mode(auth_config) == 'identity-service'
101
+
102
+
103
+ def generate_docker_compose_auth_env(auth_config):
104
+ """Generate docker-compose environment variables for auth configuration.
105
+
106
+ This function returns the properly formatted environment variable block
107
+ for docker-compose.yml files based on the auth mode.
108
+
109
+ Args:
110
+ auth_config: Auth configuration dictionary (may be None or empty)
111
+
112
+ Returns:
113
+ str: Formatted auth environment variables for docker-compose
114
+ """
115
+ auth_mode = get_auth_mode(auth_config)
116
+ jwt_secret = get_jwt_secret(auth_config)
117
+ identity_resource_url = get_identity_resource_url(auth_config)
118
+
119
+ if auth_mode == 'local-jwt':
120
+ return """ - AUTH_MODE=local-jwt
121
+ - JWT_SECRET=${JWT_SECRET:-%(jwt_secret)s}""" % {'jwt_secret': jwt_secret}
122
+ else:
123
+ return """ - AUTH_MODE=identity-service
124
+ - IDENTITY_RESOURCE_URL=${IDENTITY_RESOURCE_URL:-%(identity_resource_url)s}""" % {'identity_resource_url': identity_resource_url}
125
+
126
+
127
+ def generate_env_file_auth_section(auth_config):
128
+ """Generate .env file auth section content.
129
+
130
+ This function returns the formatted authentication configuration section
131
+ for .env.backend.autogenerated files.
132
+
133
+ Args:
134
+ auth_config: Auth configuration dictionary (may be None or empty)
135
+
136
+ Returns:
137
+ str: Formatted auth section for .env files
138
+ """
139
+ auth_mode = get_auth_mode(auth_config)
140
+ jwt_secret = get_jwt_secret(auth_config)
141
+ identity_resource_url = get_identity_resource_url(auth_config)
142
+
143
+ content = """
144
+ # Authentication Configuration
145
+ # Mode: {auth_mode} (options: local-jwt, identity-service)
146
+ AUTH_MODE={auth_mode}
147
+ """.format(auth_mode=auth_mode)
148
+
149
+ if auth_mode == 'local-jwt':
150
+ content += "JWT_SECRET={jwt_secret}\n".format(jwt_secret=jwt_secret)
151
+ else:
152
+ content += "IDENTITY_RESOURCE_URL={identity_resource_url}\n".format(identity_resource_url=identity_resource_url)
153
+
154
+ return content
155
+
156
+
157
+ # Export all functions as a struct for easy importing
158
+ AuthConfig = struct(
159
+ get_auth_mode = get_auth_mode,
160
+ get_jwt_secret = get_jwt_secret,
161
+ get_identity_resource_url = get_identity_resource_url,
162
+ get_auth_config = get_auth_config,
163
+ is_local_jwt_mode = is_local_jwt_mode,
164
+ is_identity_resource_mode = is_identity_resource_mode,
165
+ generate_docker_compose_auth_env = generate_docker_compose_auth_env,
166
+ generate_env_file_auth_section = generate_env_file_auth_section,
167
+ )
@@ -0,0 +1,37 @@
1
+ # =============================================================================
2
+ # 🏗️ TILT SDK - GOLDEN LAYERED IMAGES PROVIDER
3
+ # =============================================================================
4
+ # Purpose: Public API facade for golden layered image orchestration.
5
+ # =============================================================================
6
+
7
+ load('./golden_image_constants.star',
8
+ 'GOLDEN_IMAGE_PREFIX',
9
+ 'GOLDEN_LAYERS',
10
+ 'get_layer_reference',
11
+ )
12
+ load('./golden_image_build.star', 'build_golden_layers')
13
+ load('./golden_image_dockerfile.star', 'generate_golden_dockerfile')
14
+
15
+
16
+ GoldenImage = struct(
17
+ # Build functions
18
+ build = build_golden_layers,
19
+
20
+ # Reference getters
21
+ get_layer = get_layer_reference,
22
+ l1 = lambda: get_layer_reference('l1'),
23
+ l2 = lambda: get_layer_reference('l2'),
24
+ l3_backend = lambda: get_layer_reference('l3-backend'),
25
+ l3_frontend = lambda: get_layer_reference('l3-frontend'),
26
+ l3_migrator = lambda: get_layer_reference('l3-migrator'),
27
+ l4_backend = lambda: get_layer_reference('l4-backend'),
28
+ l4_frontend = lambda: get_layer_reference('l4-frontend'),
29
+ l4_migrator = lambda: get_layer_reference('l4-migrator'),
30
+
31
+ # Constants
32
+ layers = GOLDEN_LAYERS,
33
+ prefix = GOLDEN_IMAGE_PREFIX,
34
+
35
+ # Generators
36
+ generate_dockerfile = generate_golden_dockerfile,
37
+ )