@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,36 @@
1
+ # =============================================================================
2
+ # ✅ ORCHESTRATOR APPLY - resource VALIDATION
3
+ # =============================================================================
4
+
5
+ load('../../common/utils.star', 'Utils')
6
+
7
+
8
+ def validate_resource(resource_config):
9
+ resource_name = resource_config['name']
10
+ resource_paths = []
11
+
12
+ for resource in resource_config.get('resources', []):
13
+ resource_paths.append(resource_config['path'] + "/" + resource['name'])
14
+
15
+ circular_deps = Utils.detect_circular_deps(resource_paths)
16
+ if circular_deps:
17
+ error_msg = "🔴 CIRCULAR DEPENDENCY DETECTED IN RESOURCE: " + resource_name + "\n"
18
+ for cycle in circular_deps:
19
+ error_msg += " 🔄 " + ' → '.join(cycle) + "\n"
20
+ fail(error_msg)
21
+
22
+ for resource_path in resource_paths:
23
+ naming_errors = Utils.validate_lib_naming(resource_path)
24
+ if naming_errors:
25
+ # Print warnings but don't fail - allow services to load with missing libs
26
+ print("⚠️ LIBRARY NAMING WARNING in " + resource_name)
27
+ for err in naming_errors:
28
+ print(" ❌ " + err['package'] + ": " + err['error'])
29
+ print(" 📝 Continuing despite missing libraries (this may cause build failures)")
30
+
31
+
32
+ ResourceValidation = struct(
33
+ validate = validate_resource,
34
+ )
35
+
36
+ VALIDATION = {}
@@ -0,0 +1,44 @@
1
+ # =============================================================================
2
+ # 🎛️ ORCHESTRATOR APPLY - RUNTIME FLAGS
3
+ # =============================================================================
4
+
5
+ def _resolve_bool_env(env_name, default_value):
6
+ value = os.environ.get(env_name, '').lower()
7
+ if value in ['1', 'true', 'yes', 'on']:
8
+ return True
9
+ if value in ['0', 'false', 'no', 'off']:
10
+ return False
11
+ return default_value
12
+
13
+
14
+ def resolve_runtime_flags():
15
+ trigger_mode = os.environ.get('TILT_TRIGGER_MODE', 'auto').lower()
16
+
17
+ # Match trigger mode semantics by default:
18
+ # - auto mode: boot app resources automatically
19
+ # - manual mode: require explicit triggers for app resources
20
+ auto_init_apps = _resolve_bool_env('TILT_AUTO_INIT_APPS', trigger_mode == 'auto')
21
+ auto_init_migrators = _resolve_bool_env('TILT_AUTO_INIT_MIGRATORS', False)
22
+
23
+ # Config generators are lightweight and safe to run on startup by default.
24
+ auto_init_config_gen = _resolve_bool_env('TILT_AUTO_INIT_CONFIG_GEN', True)
25
+
26
+ # In manual mode, avoid hard gating app backends on migrator builds.
27
+ enforce_migrator_deps = _resolve_bool_env('TILT_ENFORCE_MIGRATOR_DEPS', trigger_mode == 'auto')
28
+
29
+ # In manual mode, default to single replica for faster local feedback loops.
30
+ disable_app_replicas = _resolve_bool_env('TILT_DISABLE_APP_REPLICAS', trigger_mode == 'manual')
31
+
32
+ return {
33
+ 'trigger_mode': trigger_mode,
34
+ 'auto_init_apps': auto_init_apps,
35
+ 'auto_init_migrators': auto_init_migrators,
36
+ 'auto_init_config_gen': auto_init_config_gen,
37
+ 'enforce_migrator_deps': enforce_migrator_deps,
38
+ 'disable_app_replicas': disable_app_replicas,
39
+ }
40
+
41
+
42
+ RuntimeFlags = struct(
43
+ resolve = resolve_runtime_flags,
44
+ )
@@ -0,0 +1,164 @@
1
+ # =============================================================================
2
+ # 🧱 TILT SDK - TYPESCRIPT BUILDERS
3
+ # =============================================================================
4
+ # Path: .tilt/provisioner/orchestrator/builders/typescript.star
5
+ # Purpose: TypeScript build helpers for orchestrator
6
+ # =============================================================================
7
+
8
+
9
+ # === INLINED CONSTANTS for pure extension loading ===
10
+ OUTPUT = struct(AUTOGENERATED_FOLDER = ".autogenerated")
11
+ DEFAULTS = {}
12
+
13
+ # === END INLINED CONSTANTS ===
14
+
15
+
16
+ load('../../../common/utils.star', 'Utils')
17
+ # Import filewatch ignore patterns from master config (replaces hardcoded values)
18
+
19
+
20
+ def _with_resource_prefix(pattern, resource_path):
21
+ """Prefix dockerignore pattern so it applies to the service subtree in root context."""
22
+ normalized = pattern
23
+ if normalized.startswith('/'):
24
+ normalized = normalized[1:]
25
+
26
+ # Patterns in autogenerated dockerignore are service-relative.
27
+ # When context is project root, scope patterns under resource_path.
28
+ return resource_path + '/' + normalized
29
+
30
+
31
+ def get_filewatch_ignore_patterns(resource_path):
32
+ """Return filewatch ignore patterns to prevent fsnotify buffer overflow."""
33
+ return [
34
+ resource_path + "/node_modules",
35
+ resource_path + "/dist",
36
+ resource_path + "/build",
37
+ resource_path + "/.git",
38
+ resource_path + "/.prisma",
39
+ resource_path + "/.turbo",
40
+ resource_path + "/coverage",
41
+ resource_path + "/tmp",
42
+ resource_path + "/temp",
43
+ ]
44
+
45
+ def _load_autogenerated_dockerignore_patterns(dockerfile_path, resource_path):
46
+ """
47
+ Read Dockerfile-specific autogenerated dockerignore and convert to Tilt ignore rules.
48
+ Note: Tilt ignore does not support negate patterns ('!'), so those are skipped.
49
+ """
50
+ dockerignore_path = dockerfile_path + '.dockerignore'
51
+ content = read_file(dockerignore_path, default='')
52
+
53
+ if not content:
54
+ return []
55
+
56
+ ignore_patterns = []
57
+ for raw_line in str(content).split('\n'):
58
+ line = raw_line.strip()
59
+ if not line or line.startswith('#') or line.startswith('!'):
60
+ continue
61
+ ignore_patterns.append(_with_resource_prefix(line, resource_path))
62
+
63
+ return ignore_patterns
64
+
65
+ def _get_resource_only_paths(resource_path):
66
+ """
67
+ Generate minimal file paths for docker_build 'only' parameter.
68
+ This dramatically reduces build context from 7.4GB to just the necessary files.
69
+
70
+ Args:
71
+ resource_path: Path to service (e.g., 'services/product/{domain}/{service-name}')
72
+
73
+ Returns:
74
+ List of paths to include in build context
75
+ """
76
+ only_paths = [
77
+ # Root level dependencies
78
+ 'bun.lock',
79
+ 'bun.lockb',
80
+ 'package.json',
81
+
82
+ # Service-specific files
83
+ resource_path,
84
+
85
+ # Shared runtime scripts copied in generated Dockerfiles.
86
+ 'shared-platform-engineering/docker-templates',
87
+
88
+ # Common DDD layers used by backend Dockerfiles.
89
+ 'shared-ddd-layers/domain',
90
+ 'shared-ddd-layers/infrastructure',
91
+ ]
92
+
93
+ # Include only internal libraries referenced by this service package.json.
94
+ # This prevents unrelated library changes from triggering global rebuilds.
95
+ deps_map = Utils.build_deps_mapping(resource_path)
96
+ for dep_path in deps_map.values():
97
+ if dep_path not in only_paths:
98
+ only_paths.append(dep_path)
99
+
100
+ return only_paths
101
+
102
+ def _build_typescript_service(name, context, dockerfile, live_update_rules, deps, env=None):
103
+ """Build a TypeScript service with Docker.
104
+
105
+ Args:
106
+ name: Resource name
107
+ context: Docker build context
108
+ dockerfile: Path to Dockerfile
109
+ live_update_rules: Live update configuration
110
+ deps: Resource dependencies
111
+ env: Dict of environment variables to pass to container (optional)
112
+ """
113
+ # Extract service path from dockerfile path (e.g., 'services/product/{domain}/{service-name}')
114
+ # The dockerfile parameter looks like: 'services/product/{domain}/{service-name}/autogenerated/Dockerfile.autogenerated'
115
+ resource_path = '/'.join(dockerfile.split('/')[:-1])
116
+
117
+ # Handle both 'autogenerated' (without dot) and '.autogenerated' (with dot)
118
+ # Some services use 'autogenerated', others use '.autogenerated' folder
119
+ autogenerated_folders = ['autogenerated', '.autogenerated']
120
+ for folder in autogenerated_folders:
121
+ suffix = '/' + folder
122
+ if resource_path.endswith(suffix):
123
+ resource_path = resource_path[:-len(suffix)]
124
+ break
125
+
126
+ # Also check OUTPUT.AUTOGENERATED_FOLDER for consistency
127
+ if resource_path.endswith('/' + OUTPUT.AUTOGENERATED_FOLDER):
128
+ resource_path = resource_path[:-(len('/' + OUTPUT.AUTOGENERATED_FOLDER))]
129
+
130
+ ignore_patterns = _load_autogenerated_dockerignore_patterns(dockerfile, resource_path)
131
+
132
+ # CRITICAL FIX: Add filewatch ignore patterns from master config
133
+ # These prevent fsnotify buffer overflow by excluding high-churn directories
134
+ # Previously hardcoded; now imported from TILT_RESOURCE_DEFAULTS.star
135
+ additional_ignores = get_filewatch_ignore_patterns(resource_path)
136
+
137
+ # Merge patterns, avoiding duplicates
138
+ for pattern in additional_ignores:
139
+ if pattern not in ignore_patterns:
140
+ ignore_patterns.append(pattern)
141
+
142
+ only_paths = _get_resource_only_paths(resource_path)
143
+
144
+ # Build context must be the project root (.) so that COPY commands can reference
145
+ # shared-platform-engineering/, shared-ddd-layers/, and services/ directories
146
+ # BUT we use 'only' to dramatically reduce the context size (from 7.4GB to ~100MB)
147
+ docker_build(
148
+ name,
149
+ context,
150
+ dockerfile=dockerfile,
151
+ target='production',
152
+ live_update=live_update_rules,
153
+ only=_get_resource_only_paths(resource_path),
154
+ ignore=ignore_patterns,
155
+ network='host',
156
+ )
157
+
158
+
159
+ TypescriptBuilders = struct(
160
+ build_typescript_service = _build_typescript_service,
161
+ load_dockerignore_patterns = _load_autogenerated_dockerignore_patterns,
162
+ )
163
+
164
+ DEBUG = {}
@@ -0,0 +1,75 @@
1
+ # AGENTS.md - Dependency Resolution Module
2
+
3
+ ## Purpose
4
+
5
+ Centralized dependency resolution for Tilt SDK generators. Auto-discovers and injects configuration from internal dependencies.
6
+
7
+ ## Key Functions
8
+
9
+ ### `resolve_backend_api_path(manifest)`
10
+ Resolves API path from backend manifest when frontend has `backendName`.
11
+
12
+ ```python
13
+ # Frontend manifest: { "backendName": "identity-management-backend" }
14
+ api_path = resolve_backend_api_path(manifest)
15
+ # Returns: "/api/v1/identity-management" (from backend manifest)
16
+ ```
17
+
18
+ ### `resolve_dependency_api_urls(manifest)`
19
+ Resolves all API URLs from `dependsOn`.
20
+
21
+ ```python
22
+ # Manifest: { "dependsOn": ["identity", "user"] }
23
+ urls = resolve_dependency_api_urls(manifest)
24
+ # Returns: { "identity": "/api/v1/identities", "user": "/api/v1/users" }
25
+ ```
26
+
27
+ ### `get_backend_manifest(manifest)`
28
+ Gets full backend manifest by `backendName`.
29
+
30
+ ```python
31
+ backend_manifest = get_backend_manifest(manifest)
32
+ # Returns: Full backend manifest dict
33
+ ```
34
+
35
+ ### `inject_dependency_env_vars(manifest, base_env_vars)`
36
+ Auto-injects VITE_*_API_URL environment variables for all dependencies.
37
+
38
+ ```python
39
+ env_vars = inject_dependency_env_vars(manifest, {"PORT": 3000})
40
+ # Returns: { "PORT": 3000, "VITE_IDENTITY_API_URL": "/api/v1/identities" }
41
+ ```
42
+
43
+ ## Usage
44
+
45
+ ```python
46
+ load("./dependencies/resolver.star", "resolve_backend_api_path")
47
+
48
+ def generate_something(manifest):
49
+ # Auto-resolve backend API path
50
+ api_path = resolve_backend_api_path(manifest)
51
+ if api_path:
52
+ # Use backend's apiPath
53
+ pass
54
+ ```
55
+
56
+ ## Architecture
57
+
58
+ ```
59
+ manifest (with backendName)
60
+
61
+ resolve_backend_api_path()
62
+
63
+ registry.get_resource_by_name(backend_name)
64
+
65
+ backend_service.resources[]
66
+
67
+ backend_manifest.apiPath
68
+ ```
69
+
70
+ ## Future Extensions
71
+
72
+ - Add caching for resolved dependencies
73
+ - Add version compatibility checking
74
+ - Add circular dependency detection
75
+ - Support multiple backend references
@@ -0,0 +1,21 @@
1
+ # =============================================================================
2
+ # 🔗 TILT SDK - DEPENDENCY RESOLUTION MODULE
3
+ # =============================================================================
4
+ # Purpose: Centralized dependency resolution for generators
5
+ # Auto-discover and inject configuration from internal dependencies
6
+ # =============================================================================
7
+
8
+ load("./resolver.star",
9
+ "resolve_backend_api_path",
10
+ "resolve_dependency_api_urls",
11
+ "get_backend_manifest",
12
+ "inject_dependency_env_vars",
13
+ "DependencyResolvers",
14
+ )
15
+
16
+ # Re-export all functions for easy access
17
+ resolve_backend_api_path = resolve_backend_api_path
18
+ resolve_dependency_api_urls = resolve_dependency_api_urls
19
+ get_backend_manifest = get_backend_manifest
20
+ inject_dependency_env_vars = inject_dependency_env_vars
21
+ DependencyResolvers = DependencyResolvers
@@ -0,0 +1,134 @@
1
+ # =============================================================================
2
+ # 🔗 TILT SDK - DEPENDENCY RESOLUTION HELPERS
3
+ # =============================================================================
4
+ # Purpose: Resolve dependencies between services (frontend → backend lookups)
5
+ # Auto-inject configuration from internal dependencies
6
+ # =============================================================================
7
+
8
+ load("../../../../../../../discovery/registry.star", "get_resource_by_name")
9
+
10
+ def resolve_backend_api_path(manifest):
11
+ """Resolve API path from backend manifest if backendName is specified.
12
+
13
+ Frontend manifests often reference a backend via backendName.
14
+ This function looks up the backend's apiPath for consistency.
15
+
16
+ Args:
17
+ manifest: Frontend service manifest
18
+
19
+ Returns:
20
+ str: API path from backend manifest, or None if not found
21
+ """
22
+ backend_name = manifest.get("backendName")
23
+ if not backend_name:
24
+ return None
25
+
26
+ # Try to find the backend service
27
+ backend_service = get_resource_by_name(backend_name)
28
+ if not backend_service:
29
+ return None
30
+
31
+ # Get the backend manifest
32
+ backend_resources = backend_service.get("resources", [])
33
+ for resource in backend_resources:
34
+ if resource.get("name") == backend_name:
35
+ backend_manifest = resource.get("_manifest", {})
36
+ return backend_manifest.get("apiPath")
37
+
38
+ return None
39
+
40
+
41
+ def resolve_dependency_api_urls(manifest):
42
+ """Resolve all API URLs from dependsOn.
43
+
44
+ For each dependency in dependsOn, looks up the service
45
+ and extracts its apiPath. Returns a dict mapping dependency names to URLs.
46
+
47
+ Args:
48
+ manifest: Service manifest with dependsOn
49
+
50
+ Returns:
51
+ dict: { dependency_name: api_url }
52
+ """
53
+ deps = manifest.get("dependsOn", [])
54
+ if not deps:
55
+ return {}
56
+
57
+ urls = {}
58
+ for dep_name in deps:
59
+ dep_service = get_resource_by_name(dep_name)
60
+ if not dep_service:
61
+ continue
62
+
63
+ # Find the backend resource for this dependency
64
+ dep_resources = dep_service.get("resources", [])
65
+ for resource in dep_resources:
66
+ # Skip frontend resources, look for backend
67
+ if resource.get("appType") == "frontend":
68
+ continue
69
+
70
+ dep_manifest = resource.get("_manifest", {})
71
+ api_path = dep_manifest.get("apiPath")
72
+ if api_path:
73
+ urls[dep_name] = api_path
74
+ break
75
+
76
+ return urls
77
+
78
+
79
+ def get_backend_manifest(manifest):
80
+ """Get the backend manifest referenced by a frontend manifest.
81
+
82
+ Args:
83
+ manifest: Frontend service manifest with backendName
84
+
85
+ Returns:
86
+ dict: Backend manifest or None if not found
87
+ """
88
+ backend_name = manifest.get("backendName")
89
+ if not backend_name:
90
+ return None
91
+
92
+ backend_service = get_resource_by_name(backend_name)
93
+ if not backend_service:
94
+ return None
95
+
96
+ backend_resources = backend_service.get("resources", [])
97
+ for resource in backend_resources:
98
+ if resource.get("name") == backend_name:
99
+ return resource.get("_manifest", {})
100
+
101
+ return None
102
+
103
+
104
+ def inject_dependency_env_vars(manifest, base_env_vars):
105
+ """Inject environment variables from dependencies.
106
+
107
+ For each internal dependency, adds VITE_{DEP}_API_URL to env vars.
108
+
109
+ Args:
110
+ manifest: Service manifest
111
+ base_env_vars: Base environment variables dict
112
+
113
+ Returns:
114
+ dict: Updated environment variables with dependency URLs
115
+ """
116
+ env_vars = dict(base_env_vars)
117
+ dep_urls = resolve_dependency_api_urls(manifest)
118
+
119
+ for dep_name, api_path in dep_urls.items():
120
+ # Convert dependency name to env var key
121
+ # e.g., "identity-management-backend" -> "IDENTITY_MANAGEMENT_BACKEND_API_URL"
122
+ env_key = dep_name.upper().replace("-", "_").replace(".", "_")
123
+ env_vars["VITE_" + env_key + "_API_URL"] = api_path
124
+
125
+ return env_vars
126
+
127
+
128
+ # Export struct for easy importing
129
+ DependencyResolvers = struct(
130
+ resolve_backend_api_path = resolve_backend_api_path,
131
+ resolve_dependency_api_urls = resolve_dependency_api_urls,
132
+ get_backend_manifest = get_backend_manifest,
133
+ inject_dependency_env_vars = inject_dependency_env_vars,
134
+ )