@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,29 @@
1
+ appName: identity-management-frontend
2
+ appType: frontend
3
+ stack: identity
4
+ port: 4000
5
+ backendName: identity-management-backend
6
+ basePath: /
7
+ federation:
8
+ appName: identity-service
9
+ appType: remote
10
+ port: 4001
11
+ framework: vite
12
+ vite:
13
+ exposes:
14
+ ./PasswordReset: ./src/remote-entry.ts
15
+ ./SignIn: ./src/remote-entry.ts
16
+ ./SignUp: ./src/remote-entry.ts
17
+ name: identity_service
18
+ shared:
19
+ - react
20
+ - react-dom
21
+ - @beauty-crm/introvertic-ui
22
+ healthCheck: True
23
+ path: identity-management-frontend
24
+ playwright: True
25
+ target_path: /app/dist
26
+ traefik:
27
+ host: identity-management-frontend.localhost
28
+ rootPath: True
29
+ rootPriority: 101
@@ -0,0 +1,9 @@
1
+ appName: api
2
+ appType: sdk
3
+ stack: identity
4
+ port: 5175
5
+ backendName: identity-management-backend
6
+ basePath: /identity-sdk
7
+ healthCheck: False
8
+ path: identity-sdk
9
+ playwright: False
@@ -0,0 +1,213 @@
1
+ # =============================================================================
2
+ # 📈 INCREMENTAL DISCOVERY - Register New Services Dynamically
3
+ # =============================================================================
4
+ # Handles registration of newly detected services without full Tilt restart
5
+ # =============================================================================
6
+
7
+ load("./resource_registry.star", "CacheOps", "get_app_resources", "_DISCOVERY_CACHE")
8
+ load("./discovery_orchestrator.star", "_normalize_manifest")
9
+ load("../resources/orchestrator/generators/manifest_resource.star", "ManifestResource")
10
+ load("../../engine/topologies/tilt/manifest/loader.star", "ManifestLoader")
11
+ load("../../specs/specs/TILT_RESOURCE_DEFAULTS.star", "BASE_PORT_BACKEND")
12
+
13
+ def register_new_resource(resource_path, manifest, ctx, auto_init=True, verbose=False):
14
+ """
15
+ Register a newly discovered resource and create its Tilt resources.
16
+
17
+ Args:
18
+ resource_path: Path to resource directory
19
+ manifest: Loaded manifest dict
20
+ ctx: Tilt context with generators and config
21
+ auto_init: Whether to auto-init resources
22
+ verbose: Enable verbose logging
23
+
24
+ Returns:
25
+ Struct with success status and created resources
26
+ """
27
+ resource_name = manifest.get("appName", "")
28
+ app_type = manifest.get("appType", "backend")
29
+ stack = manifest.get("stack", "")
30
+
31
+ if verbose:
32
+ print("🚀 Registering new resource: {}".format(resource_name))
33
+
34
+ # Normalize manifest to discovery format
35
+ resource = _normalize_manifest(manifest, resource_path)
36
+
37
+ # Build app resource structure
38
+ app_resource_dict = {
39
+ "name": resource_name,
40
+ "path": resource_path,
41
+ "labels": ["app." + resource_name],
42
+ "resources": [resource],
43
+ }
44
+
45
+ # Add to cache
46
+ if not CacheOps.add(app_resource_dict):
47
+ print("⚠️ Failed to add {} to cache (may already exist)".format(resource_name))
48
+ return struct(success=False, error="cache_add_failed")
49
+
50
+ # Create Tilt resources
51
+ created_resources = []
52
+
53
+ # Create config-gen resource
54
+ config_gen_name = _create_config_gen_resource(
55
+ resource_name,
56
+ resource,
57
+ resource_path,
58
+ manifest,
59
+ ctx,
60
+ auto_init
61
+ )
62
+ created_resources.append(config_gen_name)
63
+
64
+ # Create Docker build resource
65
+ docker_resource = _create_docker_resource(
66
+ resource_name,
67
+ resource,
68
+ resource_path,
69
+ manifest,
70
+ ctx
71
+ )
72
+ if docker_resource:
73
+ created_resources.append(docker_resource)
74
+
75
+ # Create additional resources based on app type
76
+ if app_type == "frontend":
77
+ frontend_resources = _create_frontend_resources(
78
+ resource_name,
79
+ resource,
80
+ resource_path,
81
+ manifest,
82
+ ctx,
83
+ auto_init
84
+ )
85
+ created_resources.extend(frontend_resources)
86
+
87
+ # Log success
88
+ print("✅ Auto-registered: {}".format(resource_name))
89
+ print(" └─ Stack: {}".format(stack))
90
+ print(" └─ Type: {}".format(app_type))
91
+ print(" └─ Resources: {} created".format(len(created_resources)))
92
+
93
+ return struct(
94
+ success=True,
95
+ resource_name=resource_name,
96
+ resources=created_resources,
97
+ count=len(created_resources)
98
+ )
99
+
100
+ def _create_config_gen_resource(resource_name, resource, resource_path, manifest, ctx, auto_init):
101
+ """Create config-gen resource for a resource."""
102
+ # Get backend manifest if frontend
103
+ backend_manifest = None
104
+ if resource.get("frontend", False):
105
+ backend_name = resource.get("backendName", resource_name.replace("-frontend", "-backend"))
106
+ backend_manifest = _get_backend_manifest(backend_name)
107
+
108
+ # Use ManifestResource to create config-gen
109
+ resource_config = {
110
+ "name": resource.get("name", resource_name),
111
+ "port": resource.get("port", BASE_PORT_BACKEND),
112
+ "_manifest": manifest,
113
+ }
114
+
115
+ config_gen_name = ManifestResource.create_config_resource(
116
+ resource_name,
117
+ resource_config,
118
+ resource_path,
119
+ manifest,
120
+ backend_manifest,
121
+ ctx
122
+ )
123
+
124
+ return config_gen_name
125
+
126
+ def _create_docker_resource(resource_name, resource, resource_path, manifest, ctx):
127
+ """Create Docker build resource for a resource."""
128
+ # Docker resource is created through the orchestrator
129
+ # This is handled when the config-gen resource runs
130
+ # Return the expected resource name for tracking
131
+ return resource_name
132
+
133
+ def _create_frontend_resources(resource_name, resource, resource_path, manifest, ctx, auto_init):
134
+ """Create additional resources for frontend app resources."""
135
+ resources = []
136
+
137
+ # Frontend dev server resource is auto-created by the orchestrator
138
+ # when processing the manifest
139
+
140
+ return resources
141
+
142
+ def _get_backend_manifest(backend_name):
143
+ """Look up backend manifest for a frontend app resource."""
144
+ # Search in current cache
145
+ for app_resource in get_app_resources():
146
+ if app_resource.get("name") == backend_name:
147
+ resources = app_resource.get("resources", [])
148
+ for res in resources:
149
+ if res.get("_manifest"):
150
+ return res.get("_manifest")
151
+ return None
152
+
153
+ def validate_resource_structure(resource_path):
154
+ """
155
+ Validate that an app resource has complete structure before registration.
156
+
157
+ Args:
158
+ resource_path: Path to app resource directory
159
+
160
+ Returns:
161
+ Struct with valid status and missing files
162
+ """
163
+ required_files = ["service.json", "package.json"]
164
+ missing = []
165
+
166
+ for filename in required_files:
167
+ filepath = resource_path + "/" + filename
168
+ result = local(
169
+ "test -f {} && echo 'yes' || echo 'no'".format(filepath),
170
+ quiet=True,
171
+ echo_off=True
172
+ )
173
+ if str(result).strip() != "yes":
174
+ missing.append(filename)
175
+
176
+ return struct(
177
+ valid=len(missing) == 0,
178
+ missing=missing,
179
+ has_resource_json="service.json" not in missing,
180
+ has_package_json="package.json" not in missing
181
+ )
182
+
183
+ def check_duplicate_resource(resource_name):
184
+ """
185
+ Check if a resource name already exists.
186
+
187
+ Args:
188
+ resource_name: Name to check
189
+
190
+ Returns:
191
+ Struct with duplicate status and existing info
192
+ """
193
+ if CacheOps.has(resource_name):
194
+ # Find existing resource path
195
+ for app_resource in get_app_resources():
196
+ if app_resource.get("name") == resource_name:
197
+ return struct(
198
+ duplicate=True,
199
+ existing_path=app_resource.get("path", "unknown"),
200
+ message="Resource '{}' already exists at {}".format(
201
+ resource_name,
202
+ app_resource.get("path", "unknown")
203
+ )
204
+ )
205
+
206
+ return struct(duplicate=False)
207
+
208
+ # Export public API
209
+ IncrementalDiscovery = struct(
210
+ register=register_new_resource,
211
+ validate_structure=validate_resource_structure,
212
+ check_duplicate=check_duplicate_resource,
213
+ )
@@ -0,0 +1,7 @@
1
+ def by_app_name(manifests):
2
+ indexed = {}
3
+ for manifest in manifests:
4
+ app_name = manifest.get("appName")
5
+ if app_name:
6
+ indexed[app_name] = manifest
7
+ return indexed
@@ -0,0 +1,51 @@
1
+ # json_manifest_scanner.star
2
+ #
3
+ # Purpose: Low-level JSON manifest file discovery using shell `find` command
4
+ # Use: discover_json_manifests(root_path) returns list of manifest file paths
5
+ #
6
+ # NOTE: This is the "manual" scanner - it finds files in a specific folder.
7
+ # For auto-discovery from Tilt's discovery system, use discovery.star instead.
8
+
9
+ load("./manifest/constants.star", "MANIFEST_FILENAME")
10
+
11
+ def discover_json_manifests(root_path):
12
+ """
13
+ Discover all JSON manifest files in a given root path.
14
+
15
+ Args:
16
+ root_path: Path relative to project root (e.g., "services/product")
17
+ or absolute path. Uses TDK_PROJECT_ROOT env var if set.
18
+ Supports glob patterns like "identity-*" for flat structures.
19
+
20
+ Returns:
21
+ List of manifest file paths (strings)
22
+ """
23
+ # Get project root from environment variable set by main Tiltfile
24
+ project_root = os.environ.get('TDK_PROJECT_ROOT', '.')
25
+
26
+ # Check if root_path contains glob patterns
27
+ if '*' in root_path or '?' in root_path:
28
+ # Use bash to expand glob and find files
29
+ # The pattern like identity-* needs shell expansion
30
+ cmd = "cd " + project_root + " && bash -c 'for dir in " + root_path + "; do if [ -d \"$dir\" ]; then find \"$dir\" -maxdepth 3 -type f -name \"" + MANIFEST_FILENAME + "\" 2>/dev/null; fi; done'"
31
+ result = str(local(cmd, quiet=True, echo_off=True))
32
+ else:
33
+ # Construct absolute path from project root
34
+ if root_path.startswith('/'):
35
+ full_path = root_path
36
+ else:
37
+ full_path = project_root + "/" + root_path
38
+
39
+ # Search for service.json files (silent)
40
+ cmd = "find " + full_path + " -type f -name '" + MANIFEST_FILENAME + "' 2>/dev/null | sort"
41
+ result = str(local(cmd, quiet=True, echo_off=True))
42
+
43
+ manifests = []
44
+ if result:
45
+ lines = result.strip().split("\n")
46
+ for line in lines:
47
+ line = line.strip()
48
+ if line and MANIFEST_FILENAME in line:
49
+ manifests.append(line)
50
+
51
+ return manifests
@@ -0,0 +1,46 @@
1
+ # =============================================================================
2
+ # 📚 TOPOLOGIES - DISCOVERY LIBRARIES
3
+ # =============================================================================
4
+ # Libraries are always auto-discovered from the filesystem by scanning
5
+ # shared library directories for matching prefix patterns.
6
+ # This eliminates stale hardcoded lists that required manual updates.
7
+ # =============================================================================
8
+
9
+
10
+ def autodiscover_libraries(root_path, prefix):
11
+ libs = []
12
+ result = str(local("ls -d " + root_path + "/" + prefix + "*/ 2>/dev/null || true", quiet=True, echo_off=True))
13
+
14
+ if result:
15
+ for line in result.strip().split("\n"):
16
+ if line:
17
+ lib_path = line.rstrip("/")
18
+ lib_name = lib_path.split("/")[-1]
19
+ if lib_name:
20
+ libs.append(lib_name)
21
+
22
+ return libs
23
+
24
+
25
+ def get_platform_libs():
26
+ discovered = autodiscover_libraries("shared-platform-engineering", "platform-")
27
+ if len(discovered) > 0:
28
+ is_verbose = os.environ.get('TILT_LOG_LEVEL') == 'verbose'
29
+ if is_verbose or len(discovered) <= 5:
30
+ lib_list = ", ".join(discovered)
31
+ else:
32
+ lib_list = ", ".join(discovered[:5]) + ", ... and {} more".format(len(discovered) - 5)
33
+ print(" 📚 Autodiscovered platform libraries: {}".format(lib_list))
34
+ return discovered
35
+
36
+
37
+ def get_product_libs():
38
+ discovered = autodiscover_libraries("shared-product-engineering", "product-")
39
+ if len(discovered) > 0:
40
+ is_verbose = os.environ.get('TILT_LOG_LEVEL') == 'verbose'
41
+ if is_verbose or len(discovered) <= 5:
42
+ lib_list = ", ".join(discovered)
43
+ else:
44
+ lib_list = ", ".join(discovered[:5]) + ", ... and {} more".format(len(discovered) - 5)
45
+ print(" 📚 Autodiscovered product libraries: {}".format(lib_list))
46
+ return discovered
@@ -0,0 +1,23 @@
1
+ load("./manifest/constants.star", "MANIFEST_FILENAME", "MANIFEST_DEFAULTS", "VALID_APP_TYPES", "DEFAULT_SYNCS")
2
+ load("./manifest/loading.star", "load_manifest", "load_related_manifest", "get_default_syncs_for_type")
3
+ load("./validation.star", _validate = "validate")
4
+ load("./manifest/normalize.star", "load_and_normalize", "discover_manifests_in_path", "load_all_manifests", "get_port", "get_database_url", "print_summary", "generate_manifest_template")
5
+
6
+ Manifest = struct(
7
+ load_manifest = load_manifest,
8
+ load_related = load_related_manifest,
9
+ load_and_normalize = load_and_normalize,
10
+ discover_manifests = discover_manifests_in_path,
11
+ load_all_manifests = load_all_manifests,
12
+ load_all = load_all_manifests,
13
+ validate = _validate,
14
+ get_port = get_port,
15
+ get_database_url = get_database_url,
16
+ get_default_syncs = get_default_syncs_for_type,
17
+ print_summary = print_summary,
18
+ generate_template = generate_manifest_template,
19
+ FILENAME = MANIFEST_FILENAME,
20
+ DEFAULTS = MANIFEST_DEFAULTS,
21
+ VALID_APP_TYPES = VALID_APP_TYPES,
22
+ DEFAULT_SYNCS = DEFAULT_SYNCS,
23
+ )
@@ -0,0 +1,104 @@
1
+ # =============================================================================
2
+ # 📋 MANIFEST CONSTANTS (Self-Contained)
3
+ # =============================================================================
4
+ # Path: manifest/constants.star
5
+ # Purpose: Define manifest filename patterns and constants
6
+ # =============================================================================
7
+
8
+ # Manifest filenames
9
+ MANIFEST_FILENAME = "service.json"
10
+ MANIFEST_FILENAME_YAML = "service.yaml"
11
+
12
+ # File patterns
13
+ MANIFEST_PATTERN = "*.json"
14
+
15
+ # Config filenames
16
+ PACKAGE_CONFIG_FILENAMES = ["package.json", "bun.lock"]
17
+ GENERATED_CONFIG_FILENAMES = ["tsconfig.json", "vite.config.ts"]
18
+
19
+ # Autogenerated paths
20
+ AUTOGENERATED_CONFIG_PATHS = ["autogenerated/"]
21
+
22
+ # Manifest defaults
23
+ MANIFEST_DEFAULTS = {
24
+ "appType": "backend",
25
+ "runtime": "bun",
26
+ "port": 4000,
27
+ "replicas": 1,
28
+ }
29
+
30
+ # Valid app types
31
+ VALID_APP_TYPES = ["backend", "frontend", "library", "migrator", "sdk", "worker"]
32
+
33
+ # Default syncs
34
+ DEFAULT_SYNCS = ["src", "prisma"]
35
+
36
+ # Runtime configs
37
+ RUNTIME_CONFIGS = {
38
+ "bun": {"port_env": "PORT", "command": "bun run start"},
39
+ "node": {"port_env": "PORT", "command": "node dist/index.js"},
40
+ }
41
+
42
+ # Traefik defaults
43
+ TRAEFIK_DEFAULTS = {
44
+ "entrypoint": "web",
45
+ "scheme": "http",
46
+ }
47
+
48
+ # Service name patterns
49
+ RESOURCE_NAME_PATTERNS = {
50
+ "backend": "{domain}-management-backend",
51
+ "frontend": "{domain}-management-frontend",
52
+ }
53
+
54
+ # Validation thresholds
55
+ VALIDATION_THRESHOLDS = {
56
+ "min_port": 3000,
57
+ "max_port": 9999,
58
+ "min_replicas": 1,
59
+ "max_replicas": 10,
60
+ }
61
+
62
+ # Valid stacks - loaded dynamically from project config
63
+ # Projects define their own stacks in .tdk/project.json
64
+ VALID_STACKS = []
65
+
66
+ # Valid features
67
+ VALID_FEATURES = ["api-client", "env-config", "api-index", "prisma", "nats", "redis", "infisical", "vitest", "traefik", "websocket", "graphql", "grpc", "vite-node", "maintenance", "cron"]
68
+
69
+ # Port ranges
70
+ PORT_RANGES = {
71
+ "frontend_start": 3000,
72
+ "frontend_end": 3999,
73
+ "backend_start": 4000,
74
+ "backend_end": 4999,
75
+ }
76
+
77
+ # Struct for grouped exports
78
+ ManifestConstants = struct(
79
+ MANIFEST_FILENAME = MANIFEST_FILENAME,
80
+ MANIFEST_FILENAME_YAML = MANIFEST_FILENAME_YAML,
81
+ MANIFEST_PATTERN = MANIFEST_PATTERN,
82
+ PACKAGE_CONFIG_FILENAMES = PACKAGE_CONFIG_FILENAMES,
83
+ GENERATED_CONFIG_FILENAMES = GENERATED_CONFIG_FILENAMES,
84
+ AUTOGENERATED_CONFIG_PATHS = AUTOGENERATED_CONFIG_PATHS,
85
+ MANIFEST_DEFAULTS = MANIFEST_DEFAULTS,
86
+ VALID_APP_TYPES = VALID_APP_TYPES,
87
+ DEFAULT_SYNCS = DEFAULT_SYNCS,
88
+ RUNTIME_CONFIGS = RUNTIME_CONFIGS,
89
+ TRAEFIK_DEFAULTS = TRAEFIK_DEFAULTS,
90
+ RESOURCE_NAME_PATTERNS = RESOURCE_NAME_PATTERNS,
91
+ VALIDATION_THRESHOLDS = VALIDATION_THRESHOLDS,
92
+ VALID_STACKS = VALID_STACKS,
93
+ VALID_FEATURES = VALID_FEATURES,
94
+ PORT_RANGES = PORT_RANGES,
95
+ )
96
+
97
+ # =============================================================================
98
+ # INDIVIDUAL EXPORTS for load() compatibility
99
+ # =============================================================================
100
+ # These enable: load("./manifest/constants.star", "MANIFEST_FILENAME_YAML")
101
+ # =============================================================================
102
+
103
+ MANIFEST_FILENAME = MANIFEST_FILENAME
104
+ MANIFEST_FILENAME_YAML = MANIFEST_FILENAME_YAML