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

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,145 @@
1
+ # =============================================================================
2
+ # 🌐 TILT SDK - API GATEWAY (Referer-Based Context Routing)
3
+ # =============================================================================
4
+ # Path: .tilt/topologies/tilt/generators/api_gateway.star
5
+ # Purpose: Auto-discover backends and generate referer-based routing map
6
+ # =============================================================================
7
+
8
+ load('../../../../discovery/registry.star', 'get_app_resources', 'get_resource_aliases')
9
+
10
+
11
+ def _extract_referer_pattern(base_path, stack):
12
+ """Extract referer pattern from basePath or stack - use actual names."""
13
+ if base_path:
14
+ return base_path.strip('/').lower()
15
+ if stack:
16
+ return stack.lower()
17
+ return None
18
+
19
+
20
+ def _collect_backend_dependencies(frontend_manifest):
21
+ """
22
+ Resolve backend resource names for a frontend manifest's declared dependencies.
23
+ Includes frontend's own backend and backend resources from dependency aliases.
24
+ """
25
+ if frontend_manifest == None:
26
+ return None
27
+
28
+ allowed = {}
29
+
30
+ frontend_backend = frontend_manifest.get('backendName')
31
+ if frontend_backend:
32
+ allowed[frontend_backend] = True
33
+
34
+ manifest_deps = frontend_manifest.get('dependencies')
35
+ if manifest_deps == None:
36
+ manifest_deps = frontend_manifest.get('dependsOn', [])
37
+
38
+ aliases = get_resource_aliases()
39
+ for dep in manifest_deps:
40
+ dep_name = str(dep)
41
+ if dep_name.endswith('-backend'):
42
+ allowed[dep_name] = True
43
+ continue
44
+
45
+ alias_targets = aliases.get(dep_name, [])
46
+ for target in alias_targets:
47
+ if target.endswith('-backend'):
48
+ allowed[target] = True
49
+
50
+ return allowed
51
+
52
+
53
+ def _get_backend_port(backend_name, fallback = 4000):
54
+ for service in get_app_resources():
55
+ for resource in service.get('resources', []):
56
+ if resource.get('name') == backend_name:
57
+ manifest = resource.get('_manifest', {})
58
+ app_type = manifest.get('appType', resource.get('app_type', 'backend'))
59
+ if app_type == 'backend':
60
+ return manifest.get('containerPort', 3000)
61
+ return resource.get('port', fallback)
62
+ return fallback
63
+
64
+
65
+ def get_backend_routing_map(frontend_manifest = None):
66
+ """
67
+ Auto-scan all backends from discovered manifests and build referer-based routing map.
68
+ Returns dict: {referer_pattern: {backend_name, port}}
69
+ """
70
+ routing_map = {}
71
+ default_backend = None
72
+
73
+ allowed_backends = _collect_backend_dependencies(frontend_manifest)
74
+
75
+ for resource_group in get_app_resources():
76
+ stack_name = resource_group.get('name', '')
77
+
78
+ for resource in resource_group.get('resources', []):
79
+ manifest = resource.get('_manifest', {})
80
+ app_type = manifest.get('appType', resource.get('app_type', 'backend'))
81
+
82
+ if app_type != 'backend':
83
+ continue
84
+
85
+ backend_name = resource.get('name', '')
86
+ if allowed_backends != None and backend_name not in allowed_backends:
87
+ continue
88
+ if app_type == 'backend':
89
+ port = manifest.get('containerPort', 3000)
90
+ else:
91
+ port = resource.get('port', 4000)
92
+
93
+ base_path = manifest.get('basePath', '')
94
+ stack = manifest.get('stack', stack_name)
95
+
96
+ pattern = _extract_referer_pattern(base_path, stack)
97
+
98
+ if pattern:
99
+ routing_map[pattern] = {'name': backend_name, 'port': port}
100
+ elif not default_backend:
101
+ default_backend = {'name': backend_name, 'port': port}
102
+
103
+ return routing_map, default_backend
104
+
105
+
106
+ def build_referer_map_block(frontend_manifest = None):
107
+ """
108
+ Build the nginx map block by scanning all manifests.
109
+ Routes are sorted by specificity (longest path first) to ensure proper matching.
110
+ Uses flexible matching to handle both /order/ and /orders paths.
111
+ """
112
+ routing_map, default_backend = get_backend_routing_map(frontend_manifest)
113
+
114
+ sorted_patterns = sorted(routing_map.keys(), key=len, reverse=True)
115
+
116
+ lines = [
117
+ ' # Auto-discovered backend routing map (referer-based context routing)',
118
+ ' map $http_referer $api_backend {'
119
+ ]
120
+
121
+ for pattern in sorted_patterns:
122
+ backend = routing_map[pattern]
123
+ backend_url = 'http://{}:{}'.format(backend['name'], backend['port'])
124
+ lines.append(' ~*{} {};'.format(pattern, backend_url))
125
+
126
+ if default_backend:
127
+ default_url = 'http://{}:{}'.format(default_backend['name'], default_backend['port'])
128
+ lines.append(' default {};'.format(default_url))
129
+ elif frontend_manifest != None and frontend_manifest.get('backendName'):
130
+ backend_name = frontend_manifest.get('backendName')
131
+ backend_port = _get_backend_port(backend_name, 4000)
132
+ lines.append(' default http://{}:{};'.format(backend_name, backend_port))
133
+ else:
134
+ # No hardcoded fallback - backendName must be specified in manifest
135
+ lines.append(' default http://backend-not-configured:4000;')
136
+
137
+ lines.append(' }')
138
+
139
+ return '\n'.join(lines)
140
+
141
+
142
+ ApiGateway = struct(
143
+ get_backend_routing_map = get_backend_routing_map,
144
+ build_referer_map_block = build_referer_map_block,
145
+ )
@@ -0,0 +1,124 @@
1
+ # =============================================================================
2
+ # 🎯 GENERATORS - Master Index
3
+ # =============================================================================
4
+ # All generators for Tilt topology configuration
5
+ # =============================================================================
6
+
7
+ # =============================================================================
8
+ # Legacy Generators (existing)
9
+ # =============================================================================
10
+
11
+ # Load individual generator functions (they export functions, not structs)
12
+ load("./typescript/backend_tsconfig.star", "generate_backend_tsconfig")
13
+ load("./typescript/frontend_tsconfig.star", "generate_frontend_tsconfig")
14
+ load("./typescript/frontend_library_tsconfig.star", "generate_frontend_library_tsconfig")
15
+ load("./typescript/backend_library_tsconfig.star", "generate_backend_library_tsconfig")
16
+ load("./typescript/prisma_config.star", "generate_prisma_config")
17
+ load("./typescript/playwright_config.star", "generate_playwright_config")
18
+
19
+ load("./vite/generators.star", "generate_for_manifest")
20
+ load("./npmrc.star", "PackageConfig")
21
+ load("./agents_md.star", "AgentsMd")
22
+ # NOTE: nginx_conf.star and api_gateway.star loaded from manifest_resource.star
23
+ # to avoid circular imports with discovery/registry
24
+
25
+ # =============================================================================
26
+ # NEW: Pre-Flight Validation Generators (v2.0)
27
+ # =============================================================================
28
+ # These generators prevent vibe-coding failures by validating before build
29
+
30
+ load("./validators.star", "Validators")
31
+ # fixed_frontend_tsconfig.star, dependency_manifest.star, and
32
+ # database_provisioner.star moved to premium/ - none had any call sites
33
+ # outside this file, so they were dead code in the free engine.
34
+
35
+ # =============================================================================
36
+ # 🔐 INFISICAL Secrets Management Generators
37
+ # =============================================================================
38
+ # Provides complete Infisical integration for secret management
39
+
40
+ load("./infisical/index.star", "Infisical")
41
+
42
+ # =============================================================================
43
+ # Legacy Exports (for backward compatibility)
44
+ # =============================================================================
45
+
46
+ # Functions are already loaded directly
47
+ # Vite generator
48
+ Vite = struct(
49
+ for_manifest = generate_for_manifest,
50
+ )
51
+
52
+ # =============================================================================
53
+ # NEW: Pre-Flight Validation Exports
54
+ # =============================================================================
55
+
56
+ # Validators - Pre-flight checks
57
+ Validate = Validators
58
+
59
+ # =============================================================================
60
+ # 🔐 INFISICAL Secrets Management Exports
61
+ # =============================================================================
62
+
63
+ # Complete Infisical integration
64
+ SecretsManagement = Infisical
65
+
66
+ # =============================================================================
67
+ # Master Generation Orchestrator
68
+ # =============================================================================
69
+
70
+ def run_pre_flight_validations(resource_path, manifest, all_services, global_config):
71
+ """
72
+ Runs all pre-flight validations for a service.
73
+
74
+ This is the main entry point for validation. Call this during config-gen
75
+ to catch issues before they cause build failures.
76
+
77
+ Args:
78
+ resource_path: Path to service directory
79
+ manifest: Service manifest dict
80
+ all_services: List of all services for dependency checking
81
+ global_config: Global topology config
82
+
83
+ Returns:
84
+ Validation report dict
85
+ """
86
+ return Validators.run_all_validations(
87
+ resource_path,
88
+ manifest,
89
+ all_services,
90
+ global_config,
91
+ None, # write_fn - will write to .autogenerated/
92
+ )
93
+
94
+ # generate_fixed_frontend_tsconfig, resolve_missing_dependencies, and
95
+ # provision_resource_database moved to premium/ along with the modules
96
+ # they wrapped (fixed_frontend_tsconfig.star, dependency_manifest.star,
97
+ # database_provisioner.star) - none had call sites outside this file.
98
+
99
+ # =============================================================================
100
+ # Exports
101
+ # =============================================================================
102
+
103
+ Generators = struct(
104
+ # Legacy
105
+ generate_backend_tsconfig=generate_backend_tsconfig,
106
+ generate_frontend_tsconfig=generate_frontend_tsconfig,
107
+ generate_frontend_library_tsconfig=generate_frontend_library_tsconfig,
108
+ generate_backend_library_tsconfig=generate_backend_library_tsconfig,
109
+ generate_prisma_config=generate_prisma_config,
110
+ generate_playwright_config=generate_playwright_config,
111
+ Vite=Vite,
112
+
113
+ # NEW: Pre-flight validation
114
+ Validate=Validate,
115
+
116
+ # NEW: Orchestrators
117
+ run_pre_flight_validations=run_pre_flight_validations,
118
+
119
+ # NEW: Infisical Secrets Management
120
+ SecretsManagement=SecretsManagement,
121
+
122
+ # NEW: AGENTS.md Generator for .autogenerated/ folder
123
+ AgentsMd=AgentsMd,
124
+ )
@@ -0,0 +1,424 @@
1
+ # 🔐 Infisical Starlark Generators - Complete Documentation
2
+
3
+ ## Overview
4
+
5
+ The Infisical Starlark generators provide a complete, programmatic way to manage secret injection in the TDK CLI. This replaces shell-based configuration with type-safe Starlark code.
6
+
7
+ ## Architecture
8
+
9
+ ```
10
+ ┌─────────────────────────────────────────────────────────────────┐
11
+ │ INFISICAL GENERATORS │
12
+ ├─────────────────────────────────────────────────────────────────┤
13
+ │ │
14
+ │ 1. SECRETS GENERATOR (secrets_generator.star) │
15
+ │ ├── generate_for_service() - Service secret config │
16
+ │ ├── generate_docker_compose_env() - Docker Compose env │
17
+ │ ├── generate_entrypoint_env() - Entrypoint configuration │
18
+ │ └── generate_local_env_template() - Local dev .env │
19
+ │ │
20
+ │ 2. PATH MANAGER (path_manager.star) │
21
+ │ ├── plan_resource_path() - Plan Infisical path │
22
+ │ ├── validate_path() - Path validation │
23
+ │ ├── known_paths - 14 predefined service paths │
24
+ │ └── ROOT_PATHS, PLATFORM_PATHS - Path constants │
25
+ │ │
26
+ │ 3. MACHINE IDENTITY (machine_identity.star) │
27
+ │ ├── generate_universal_auth() - Client ID/Secret auth │
28
+ │ ├── generate_development_machine() - Dev machine config │
29
+ │ ├── generate_ci_machine() - CI/CD machine config │
30
+ │ └── AUTH_METHODS - All supported auth methods │
31
+ │ │
32
+ │ 4. ORGANIZATION (organization.star) │
33
+ │ ├── generate_config() - Complete org setup │
34
+ │ ├── ENVIRONMENTS - dev, staging, prod configs │
35
+ │ ├── ROLES - Admin, developer, readonly, etc. │
36
+ │ └── SECRET_TEMPLATES - DATABASE_URL, JWT_SECRET, etc. │
37
+ │ │
38
+ │ 5. DOCKER INTEGRATION (infisical_docker.star) │
39
+ │ ├── runtime_setup() - L4 runtime secret injection │
40
+ │ ├── builder_setup() - L3 builder CLI setup │
41
+ │ └── generate_compose_env() - Docker Compose environment │
42
+ │ │
43
+ └─────────────────────────────────────────────────────────────────┘
44
+ ```
45
+
46
+ ## Quick Start
47
+
48
+ ### 1. Load the Modules
49
+
50
+ ```starlark
51
+ # Option 1: Load complete Infisical module
52
+ load("engine/topologies/tilt/generators/infisical/index.star", "Infisical")
53
+
54
+ # Option 2: Load from generators index (recommended)
55
+ load("engine/topologies/tilt/generators/index.star", "Generators")
56
+ Infisical = Generators.SecretsManagement
57
+
58
+ # Option 3: Load from security module (full integration)
59
+ load("engine/topologies/platform/security/secrets.star", "Secrets")
60
+ ```
61
+
62
+ ### 2. Configure Service Secrets
63
+
64
+ ```starlark
65
+ # Generate complete configuration for a service
66
+ config = Infisical.Secrets.generate_for_service(
67
+ resource_name="user-management-backend",
68
+ secret_path="/services/user",
69
+ resource_type="backend",
70
+ command="bun run src/index.ts",
71
+ )
72
+
73
+ # Access generated configuration
74
+ print(config["resource_name"]) # "user-management-backend"
75
+ print(config["secret_path"]) # "/services/user"
76
+ print(config["required_secrets"]) # ["DATABASE_URL", "JWT_SECRET", "RESOURCE_API_KEY"]
77
+ print(config["docker_compose"]["environment"])
78
+ ```
79
+
80
+ ### 3. Use in Dockerfile Generation
81
+
82
+ ```starlark
83
+ # In L4 runtime layer generation
84
+ load("engine/topologies/platform/docker/layers/infisical/index.star", "InfisicalLayers")
85
+
86
+ def generate_backend_runtime(resource_name, cmd="bun run start"):
87
+ parts = []
88
+
89
+ # ... other Dockerfile setup ...
90
+
91
+ # Use InfisicalDocker for runtime secret injection
92
+ infisical_setup = InfisicalLayers.Docker.runtime_setup(
93
+ resource_name=resource_name,
94
+ resource_type="backend",
95
+ command=cmd,
96
+ use_entrypoint=True,
97
+ )
98
+ parts.append(infisical_setup)
99
+
100
+ return "".join(parts)
101
+ ```
102
+
103
+ ### 4. Use in Docker Compose
104
+
105
+ ```starlark
106
+ # Generate environment variables for docker-compose
107
+ env = Infisical.Docker.generate_compose_env(
108
+ resource_name="user-management-backend",
109
+ resource_type="backend",
110
+ )
111
+
112
+ # Use in dc_resource
113
+ dc_resource("user-management-backend", env=env)
114
+ ```
115
+
116
+ ## Detailed API Reference
117
+
118
+ ### Secrets Generator
119
+
120
+ #### `generate_for_service(resource_name, secret_path, resource_type, command, additional_vars)`
121
+
122
+ Generates complete secret configuration for a service.
123
+
124
+ **Parameters:**
125
+ - `resource_name` (str): Name of the service (e.g., "user-management-backend")
126
+ - `secret_path` (str): Infisical path (e.g., "/services/user")
127
+ - `resource_type` (str): Type of service (backend, frontend, payment, notification)
128
+ - `command` (str): Command to run after secret injection (optional)
129
+ - `additional_vars` (dict): Additional environment variables (optional)
130
+
131
+ **Returns:**
132
+ ```starlark
133
+ {
134
+ "resource_name": str,
135
+ "secret_path": str,
136
+ "resource_type": str,
137
+ "validation": {"valid": bool, "errors": [str]},
138
+ "docker_compose": {"environment": dict},
139
+ "entrypoint": {"environment": dict},
140
+ "kubernetes": {"secret_ref": dict},
141
+ "local_template": str,
142
+ "required_secrets": [str],
143
+ }
144
+ ```
145
+
146
+ #### `generate_for_services_batch(services_config)`
147
+
148
+ Batch configuration for multiple services.
149
+
150
+ ```starlark
151
+ services = [
152
+ {"name": "user", "path": "/services/user", "type": "backend"},
153
+ {"name": "payment", "path": "/services/payment", "type": "payment"},
154
+ ]
155
+ configs = Infisical.Secrets.generate_for_services_batch(services)
156
+ ```
157
+
158
+ ### Path Manager
159
+
160
+ #### `plan_resource_path(resource_name, resource_type, parent_path)`
161
+
162
+ Plans the Infisical path for a service.
163
+
164
+ ```starlark
165
+ plan = Infisical.Paths.plan_resource_path(
166
+ resource_name="user-management-backend",
167
+ resource_type="backend",
168
+ )
169
+
170
+ # Returns:
171
+ # {
172
+ # "resource_name": "user-management-backend",
173
+ # "resource_type": "backend",
174
+ # "parent_path": "/services",
175
+ # "resource_folder": "user",
176
+ # "full_path": "/services/user",
177
+ # "validation": {"valid": True, "errors": [], "warnings": []},
178
+ # "subpaths": ["/services/user/database", ...],
179
+ # }
180
+ ```
181
+
182
+ #### Predefined Service Paths
183
+
184
+ 14 services have predefined paths:
185
+
186
+ ```starlark
187
+ # Access all known paths
188
+ print(Infisical.Paths.known_paths)
189
+
190
+ # Get specific service path
191
+ path = Infisical.Paths.get_known_resource_path("user-management-backend")
192
+ # Returns: "/services/user"
193
+ ```
194
+
195
+ | Service | Path |
196
+ |---------|------|
197
+ | user-management-backend | /services/user |
198
+ | order-management-backend | /services/order |
199
+ | order-planner-backend | /services/order-planner |
200
+ | staff-management-backend | /services/staff |
201
+ | treatment-management-backend | /services/treatment |
202
+ | inventory-management-backend | /services/inventory |
203
+ | website-management-backend | /services/website |
204
+ | gdpr-compliance-backend | /services/gdpr |
205
+ | payment-management-backend | /services/payment |
206
+ | payment-processing-backend | /services/billing |
207
+ | api-gateway | /services/api-gateway |
208
+ | api-gateway-test | /services/api-gateway-test |
209
+ | orchestrator-glue-backend | /services/orchestrator-glue |
210
+
211
+ ### Machine Identity
212
+
213
+ #### `generate_universal_auth(identity_name, access_paths, project_id, environment)`
214
+
215
+ Generates Universal Auth (Client ID + Client Secret) configuration.
216
+
217
+ ```starlark
218
+ config = Infisical.Identity.generate_universal_auth(
219
+ identity_name="dev-machine",
220
+ access_paths=["/services/*", "/platform/*"],
221
+ project_id="bc7cf07f-4002-4148-bca8-78a05c95dea2",
222
+ environment="dev",
223
+ )
224
+ ```
225
+
226
+ #### Predefined Machine Templates
227
+
228
+ ```starlark
229
+ # Development machine (broad access)
230
+ dev_machine = Infisical.Identity.generate_development_machine("dev-machine")
231
+
232
+ # CI/CD machine (for GitHub Actions)
233
+ ci_machine = Infisical.Identity.generate_ci_machine("github-actions")
234
+
235
+ # Service-specific machine (restricted access)
236
+ resource_machine = Infisical.Identity.generate_resource_specific_machine("user")
237
+ ```
238
+
239
+ ### Organization
240
+
241
+ #### `generate_config(org_name, env_names, resource_names)`
242
+
243
+ Generates complete organization configuration.
244
+
245
+ ```starlark
246
+ org = Infisical.Org.generate_config(
247
+ org_name="{project}",
248
+ env_names=["dev", "staging", "prod"],
249
+ resource_names=["user", "order", "payment"],
250
+ )
251
+
252
+ # Returns complete setup including:
253
+ # - Organization metadata
254
+ # - Project configuration
255
+ # - Environments
256
+ # - Roles
257
+ # - Folder structure
258
+ # - Secret templates
259
+ ```
260
+
261
+ ## Migration from Shell Scripts
262
+
263
+ ### Before (Shell-based)
264
+
265
+ ```dockerfile
266
+ # Hardcoded in Dockerfile generation
267
+ COPY --chmod=0755 shared-platform-engineering/docker-templates/infisical-entrypoint.sh /entrypoint.sh
268
+ ENV RESOURCE_NAME=my-service
269
+ ENV INFISICAL_SECRET_PATH=/services/my-service
270
+ ENTRYPOINT ["/entrypoint.sh"]
271
+ CMD ["bun", "run", "start"]
272
+ ```
273
+
274
+ ### After (Starlark generators)
275
+
276
+ ```starlark
277
+ # In your Tiltfile or .star file
278
+ load("engine/topologies/platform/docker/layers/infisical/index.star", "InfisicalLayers")
279
+
280
+ # Generate Dockerfile snippet dynamically
281
+ infisical_setup = InfisicalLayers.Docker.runtime_setup(
282
+ resource_name="my-service",
283
+ secret_path="/services/my-service", # Auto-generated if not provided
284
+ resource_type="backend",
285
+ command="bun run start",
286
+ )
287
+
288
+ # Returns:
289
+ # COPY --chmod=0755 shared-platform-engineering/docker-templates/infisical-entrypoint.sh /entrypoint.sh
290
+ # ENV RESOURCE_NAME=my-service
291
+ # ENV INFISICAL_SECRET_PATH=/services/my-service
292
+ # ENV INFISICAL_TOKEN=${INFISICAL_TOKEN:-}
293
+ # ... (all env vars from generator)
294
+ # ENTRYPOINT ["/entrypoint.sh"]
295
+ # CMD ["bun", "run", "start"]
296
+ ```
297
+
298
+ ## Usage in Tiltfile
299
+
300
+ ### Complete Example
301
+
302
+ ```starlark
303
+ # Load modules
304
+ load("engine/topologies/platform/security/secrets.star", "Secrets")
305
+ load("engine/topologies/tilt/generators/infisical/index.star", "Infisical")
306
+
307
+ # Define services to configure
308
+ services = [
309
+ "user-management-backend",
310
+ "order-management-backend",
311
+ "payment-management-backend",
312
+ ]
313
+
314
+ # Configure all services
315
+ for service in services:
316
+ # Get predefined configuration
317
+ config = Secrets.configure_predefined_service(service)
318
+
319
+ if config:
320
+ # Use in docker_compose
321
+ docker_compose("services/{}/docker-compose.yml".format(service))
322
+ dc_resource(
323
+ service,
324
+ env=config["docker_compose"]["environment"],
325
+ labels=["backend"],
326
+ )
327
+
328
+ # Or configure all at once
329
+ all_configs = Secrets.configure_all_predefined_services()
330
+ ```
331
+
332
+ ## Testing
333
+
334
+ ### Validate Paths
335
+
336
+ ```starlark
337
+ # Validate a custom path
338
+ result = Infisical.Paths.validate_path("/services/my-service")
339
+ print(result["valid"]) # True/False
340
+ print(result["errors"]) # [] or [error messages]
341
+ print(result["normalized"]) # Normalized path
342
+ ```
343
+
344
+ ### Validate Machine Identity
345
+
346
+ ```starlark
347
+ # Check auth method
348
+ result = Infisical.Identity.validate_auth_method("universal-auth")
349
+ print(result["valid"]) # True
350
+ print(result["supported"]) # True
351
+ print(result["deprecated"]) # False
352
+ ```
353
+
354
+ ## File Structure
355
+
356
+ ```
357
+ tdk-cli/engine/topologies/
358
+ ├── tilt/generators/infisical/
359
+ │ ├── index.star # Master module export
360
+ │ ├── secrets_generator.star # Secret injection config
361
+ │ ├── path_manager.star # Path/folder management
362
+ │ ├── machine_identity.star # Machine ID configuration
363
+ │ ├── organization.star # Org setup templates
364
+ │ └── examples.star # Usage examples
365
+
366
+ └── platform/docker/layers/infisical/
367
+ ├── index.star # Docker layers index
368
+ └── infisical_docker.star # Dockerfile generation
369
+ ```
370
+
371
+ ## Best Practices
372
+
373
+ 1. **Use Predefined Services**: When possible, use `Secrets.PREDEFINED_RESOURCES` instead of manual configuration.
374
+
375
+ 2. **Validate Early**: Always validate paths and configurations before using them:
376
+ ```starlark
377
+ validation = Infisical.Paths.validate_path(path)
378
+ if not validation["valid"]:
379
+ fail("Invalid path: " + str(validation["errors"]))
380
+ ```
381
+
382
+ 3. **Don't Hardcode Secrets**: Always use generators for secret paths and never hardcode secret values.
383
+
384
+ 4. **Batch Configuration**: Use `generate_for_services_batch()` when configuring multiple services.
385
+
386
+ 5. **Environment Separation**: Use different configurations for dev/staging/prod:
387
+ ```starlark
388
+ if environment == "prod":
389
+ config = Infisical.Identity.generate_production_machine(...)
390
+ else:
391
+ config = Infisical.Identity.generate_development_machine(...)
392
+ ```
393
+
394
+ ## Troubleshooting
395
+
396
+ ### Path Validation Failures
397
+
398
+ ```starlark
399
+ result = Infisical.Paths.validate_path("/invalid/path with spaces")
400
+ # Returns: {"valid": False, "errors": ["Invalid characters: [' ']"]}
401
+ ```
402
+
403
+ Fix: Use the path normalizer
404
+ ```starlark
405
+ normalized = Infisical.Paths.normalize_path("/invalid/path with spaces")
406
+ # Returns: "/invalid/path-with-spaces"
407
+ ```
408
+
409
+ ### Unknown Service
410
+
411
+ ```starlark
412
+ path = Infisical.Paths.get_known_resource_path("unknown-service")
413
+ # Returns: None
414
+
415
+ # Solution: Plan a new path
416
+ plan = Infisical.Paths.plan_resource_path("unknown-service")
417
+ path = plan["full_path"] # "/services/unknown-service"
418
+ ```
419
+
420
+ ## See Also
421
+
422
+ - `examples.star` - Complete usage examples
423
+ - `SECRETS_SETUP_COMPLETE.md` - Infisical setup documentation
424
+ - `MACHINE_IDENTITY.md` - Machine identity setup guide