@flisk-sh/flisk 0.0.0-stage → 1.3.190

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 (440) hide show
  1. package/CHANGELOG.md +492 -0
  2. package/LICENSE +21 -0
  3. package/README.md +479 -2
  4. package/Tiltfile +151 -0
  5. package/cli/bin/flisk.js +42 -0
  6. package/cli/dist/agent-runtimes/custom.js +335 -0
  7. package/cli/dist/agent-runtimes/registry.js +34 -0
  8. package/cli/dist/backend-frameworks/elysia.js +38 -0
  9. package/cli/dist/backend-frameworks/express.js +49 -0
  10. package/cli/dist/backend-frameworks/fastify.js +43 -0
  11. package/cli/dist/backend-frameworks/h3.js +37 -0
  12. package/cli/dist/backend-frameworks/koa.js +47 -0
  13. package/cli/dist/backend-frameworks/mcp.js +86 -0
  14. package/cli/dist/backend-frameworks/nestjs.js +55 -0
  15. package/cli/dist/backend-frameworks/registry.js +134 -0
  16. package/cli/dist/backend-frameworks/types.js +1 -0
  17. package/cli/dist/backend-languages/bun.js +76 -0
  18. package/cli/dist/backend-languages/go.js +125 -0
  19. package/cli/dist/backend-languages/node.js +122 -0
  20. package/cli/dist/backend-languages/python.js +94 -0
  21. package/cli/dist/backend-languages/registry.js +37 -0
  22. package/cli/dist/backend-languages/rust.js +82 -0
  23. package/cli/dist/backend-languages/types.js +1 -0
  24. package/cli/dist/cli.js +29 -0
  25. package/cli/dist/commands/__tests__/project-e2e-helpers.js +49 -0
  26. package/cli/dist/commands/__tests__/ui-loading-screen.test.js +16 -0
  27. package/cli/dist/commands/agent.js +182 -0
  28. package/cli/dist/commands/completion-candidates.js +116 -0
  29. package/cli/dist/commands/completion.js +843 -0
  30. package/cli/dist/commands/config.js +362 -0
  31. package/cli/dist/commands/doctor.js +1504 -0
  32. package/cli/dist/commands/down.js +114 -0
  33. package/cli/dist/commands/eject.js +108 -0
  34. package/cli/dist/commands/help.js +152 -0
  35. package/cli/dist/commands/import.js +164 -0
  36. package/cli/dist/commands/logs.js +119 -0
  37. package/cli/dist/commands/maintainers.js +102 -0
  38. package/cli/dist/commands/mcp.js +28 -0
  39. package/cli/dist/commands/networks.js +306 -0
  40. package/cli/dist/commands/project.js +447 -0
  41. package/cli/dist/commands/projects.js +103 -0
  42. package/cli/dist/commands/registry.js +53 -0
  43. package/cli/dist/commands/resource.js +992 -0
  44. package/cli/dist/commands/resources.js +127 -0
  45. package/cli/dist/commands/restart.js +89 -0
  46. package/cli/dist/commands/runtime.js +75 -0
  47. package/cli/dist/commands/stack.js +171 -0
  48. package/cli/dist/commands/stacks.js +71 -0
  49. package/cli/dist/commands/status.js +211 -0
  50. package/cli/dist/commands/ui.js +725 -0
  51. package/cli/dist/commands/up.js +609 -0
  52. package/cli/dist/commands/upgrade.js +840 -0
  53. package/cli/dist/commands/version.js +10 -0
  54. package/cli/dist/components/Accessible.js +11 -0
  55. package/cli/dist/components/BaseTooltip.js +30 -0
  56. package/cli/dist/components/DetailPanel.js +33 -0
  57. package/cli/dist/components/FileTree.js +51 -0
  58. package/cli/dist/components/ResourceSelectInput.js +42 -0
  59. package/cli/dist/components/ResourceTable.js +35 -0
  60. package/cli/dist/components/ServiceIssues.js +13 -0
  61. package/cli/dist/components/TUIHeader.js +27 -0
  62. package/cli/dist/components/TabBar.js +27 -0
  63. package/cli/dist/components/Tooltip.js +13 -0
  64. package/cli/dist/components/index.js +11 -0
  65. package/cli/dist/components/ui-theme.js +120 -0
  66. package/cli/dist/config/platform-standards.js +182 -0
  67. package/cli/dist/frontend-frameworks/lit.js +64 -0
  68. package/cli/dist/frontend-frameworks/preact.js +62 -0
  69. package/cli/dist/frontend-frameworks/qwik.js +61 -0
  70. package/cli/dist/frontend-frameworks/react.js +69 -0
  71. package/cli/dist/frontend-frameworks/registry.js +83 -0
  72. package/cli/dist/frontend-frameworks/solid.js +62 -0
  73. package/cli/dist/frontend-frameworks/svelte.js +67 -0
  74. package/cli/dist/frontend-frameworks/tanstack-router.js +101 -0
  75. package/cli/dist/frontend-frameworks/types.js +1 -0
  76. package/cli/dist/frontend-frameworks/vanilla.js +59 -0
  77. package/cli/dist/frontend-frameworks/vue.js +72 -0
  78. package/cli/dist/generator/__tests__/golden-helpers.js +43 -0
  79. package/cli/dist/generator/extension-fetch.js +291 -0
  80. package/cli/dist/generator/resource-templates.js +133 -0
  81. package/cli/dist/generator/template-engine.js +801 -0
  82. package/cli/dist/index.js +10 -0
  83. package/cli/dist/mcp/server.js +101 -0
  84. package/cli/dist/mcp/tools.js +351 -0
  85. package/cli/dist/program.js +37 -0
  86. package/cli/dist/types/index.js +38 -0
  87. package/cli/dist/utils/agent-host.js +36 -0
  88. package/cli/dist/utils/atomic-write.js +36 -0
  89. package/cli/dist/utils/bun-floor.js +9 -0
  90. package/cli/dist/utils/bun-requirement.js +10 -0
  91. package/cli/dist/utils/cache.js +63 -0
  92. package/cli/dist/utils/cold-preflight.js +257 -0
  93. package/cli/dist/utils/command-helpers.js +57 -0
  94. package/cli/dist/utils/constants.js +160 -0
  95. package/cli/dist/utils/discovery-context.js +71 -0
  96. package/cli/dist/utils/discovery-paths.js +93 -0
  97. package/cli/dist/utils/docker.js +34 -0
  98. package/cli/dist/utils/doctor-crashloop.js +161 -0
  99. package/cli/dist/utils/doctor-fix.js +391 -0
  100. package/cli/dist/utils/doctor-host.js +66 -0
  101. package/cli/dist/utils/doctor-report.js +78 -0
  102. package/cli/dist/utils/doctor-runtime.js +880 -0
  103. package/cli/dist/utils/doctor-starlark.js +132 -0
  104. package/cli/dist/utils/doctor-wiring.js +698 -0
  105. package/cli/dist/utils/down-cleanup.js +125 -0
  106. package/cli/dist/utils/env-validator.js +266 -0
  107. package/cli/dist/utils/errors.js +175 -0
  108. package/cli/dist/utils/exec-async.js +31 -0
  109. package/cli/dist/utils/file-helpers.js +104 -0
  110. package/cli/dist/utils/formatting.js +165 -0
  111. package/cli/dist/utils/generated-paths.js +51 -0
  112. package/cli/dist/utils/help-command.js +11 -0
  113. package/cli/dist/utils/host-port-config.js +140 -0
  114. package/cli/dist/utils/host-port-plan.js +100 -0
  115. package/cli/dist/utils/json-output.js +29 -0
  116. package/cli/dist/utils/machine-output.js +33 -0
  117. package/cli/dist/utils/paths.js +43 -0
  118. package/cli/dist/utils/platform.js +58 -0
  119. package/cli/dist/utils/port-assignment.js +75 -0
  120. package/cli/dist/utils/port-conflict-fix.js +25 -0
  121. package/cli/dist/utils/port-fallback-notice.js +17 -0
  122. package/cli/dist/utils/port-listener-probe.js +20 -0
  123. package/cli/dist/utils/project-config-defaults.js +17 -0
  124. package/cli/dist/utils/project-features.js +91 -0
  125. package/cli/dist/utils/project-templates.js +32 -0
  126. package/cli/dist/utils/prompt.js +97 -0
  127. package/cli/dist/utils/resource-features.js +184 -0
  128. package/cli/dist/utils/resource-kind.js +9 -0
  129. package/cli/dist/utils/schema-version-gate.js +45 -0
  130. package/cli/dist/utils/search-status.js +12 -0
  131. package/cli/dist/utils/secret-redaction.js +73 -0
  132. package/cli/dist/utils/service-config-checks.js +189 -0
  133. package/cli/dist/utils/service-manifest.js +254 -0
  134. package/cli/dist/utils/service-runtime-state.js +66 -0
  135. package/cli/dist/utils/service-urls.js +112 -0
  136. package/cli/dist/utils/services.js +360 -0
  137. package/cli/dist/utils/shared-infra.js +45 -0
  138. package/cli/dist/utils/shared-platform-postgres.js +232 -0
  139. package/cli/dist/utils/single-flight.js +21 -0
  140. package/cli/dist/utils/smoke.js +401 -0
  141. package/cli/dist/utils/spinner.js +40 -0
  142. package/cli/dist/utils/stack-features.js +15 -0
  143. package/cli/dist/utils/stack-status.js +14 -0
  144. package/cli/dist/utils/startup-report.js +78 -0
  145. package/cli/dist/utils/status-message.js +21 -0
  146. package/cli/dist/utils/status-ports.js +33 -0
  147. package/cli/dist/utils/suggestions.js +63 -0
  148. package/cli/dist/utils/tar.js +46 -0
  149. package/cli/dist/utils/tdk-version.js +51 -0
  150. package/cli/dist/utils/terminal-layout.js +19 -0
  151. package/cli/dist/utils/tilt-events.js +194 -0
  152. package/cli/dist/utils/tilt-logs.js +61 -0
  153. package/cli/dist/utils/tilt-port-owner.js +63 -0
  154. package/cli/dist/utils/tilt-process.js +54 -0
  155. package/cli/dist/utils/tilt-resource-state.js +32 -0
  156. package/cli/dist/utils/tilt-startup.js +49 -0
  157. package/cli/dist/utils/tilt-unreachable-message.js +9 -0
  158. package/cli/dist/utils/tilt.js +104 -0
  159. package/cli/dist/utils/ui-keymap.js +129 -0
  160. package/cli/dist/utils/ui-service-state.js +34 -0
  161. package/cli/dist/utils/up-only.js +28 -0
  162. package/cli/dist/utils/up-readiness.js +118 -0
  163. package/cli/dist/utils/url-actions.js +103 -0
  164. package/cli/dist/utils/validation.js +62 -0
  165. package/cli/dist/utils/which.js +56 -0
  166. package/cli/dist/utils/windows-doctor.js +176 -0
  167. package/cli/dist-bundle/chunk-6EA4DGCY.js +2 -0
  168. package/cli/dist-bundle/chunk-BZ4H7MM4.js +3 -0
  169. package/cli/dist-bundle/chunk-CLCUIDBH.js +510 -0
  170. package/cli/dist-bundle/cli.js +2017 -0
  171. package/cli/dist-bundle/cold-preflight-SY26O2IG.js +2 -0
  172. package/cli/dist-bundle/devtools-ZUHXW33W.js +5 -0
  173. package/cli/dist-bundle/extension-fetch-J4FFH7TJ.js +2 -0
  174. package/cli/package.json +83 -0
  175. package/cli/shared-platform-engineering/docker-templates/bun-hoisted-symlink-fix.sh +25 -0
  176. package/cli/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +466 -0
  177. package/cli/shared-platform-engineering/docker-templates/install-deps.sh +154 -0
  178. package/cli/shared-platform-engineering/docker-templates/prisma-bun-client-link-fix.sh +14 -0
  179. package/cli/shared-platform-engineering/docker-templates/prisma-normalize-client.sh +58 -0
  180. package/cli/templates/.tiltignore.hbs +72 -0
  181. package/cli/templates/TILT_RESOURCE_DEFAULTS.star.hbs +220 -0
  182. package/cli/templates/TILT_TECH_STACK.star.hbs +149 -0
  183. package/cli/templates/Tiltfile.hbs +381 -0
  184. package/cli/templates/spec.master.hbs +192 -0
  185. package/discovery/AGENTS.md +362 -0
  186. package/discovery/TILT_DISCOVERY.star +429 -0
  187. package/discovery/Tiltfile +58 -0
  188. package/discovery/config.star +265 -0
  189. package/discovery/constants.star +167 -0
  190. package/discovery/deterministic.star +213 -0
  191. package/discovery/discovery_daemon.star +193 -0
  192. package/discovery/discovery_orchestrator.star +492 -0
  193. package/discovery/filtering.star +7 -0
  194. package/discovery/identity-management-backend/service.yaml +26 -0
  195. package/discovery/identity-management-frontend/service.yaml +29 -0
  196. package/discovery/identity-sdk/service.yaml +9 -0
  197. package/discovery/incremental_discovery.star +215 -0
  198. package/discovery/indexing.star +9 -0
  199. package/discovery/json_manifest_scanner.star +57 -0
  200. package/discovery/libraries.star +48 -0
  201. package/discovery/loading.star +25 -0
  202. package/discovery/manifest/constants.star +106 -0
  203. package/discovery/manifest/loading.star +418 -0
  204. package/discovery/manifest/normalize.star +289 -0
  205. package/discovery/manifest/validation.star +110 -0
  206. package/discovery/normalization.star +13 -0
  207. package/discovery/registry.star +562 -0
  208. package/discovery/resource_snapshot.py +384 -0
  209. package/discovery/resource_snapshot.star +145 -0
  210. package/discovery/schemas.star +3 -0
  211. package/discovery/services/platform/cdc/debezium/nats-connector/service.yaml +9 -0
  212. package/discovery/services/platform/cdc/nats-http-bridge/service.yaml +9 -0
  213. package/discovery/services/platform/orchestrator/orchestrator-glue-backend/service.yaml +26 -0
  214. package/discovery/services/platform/synthetic-monitor/service.yaml +9 -0
  215. package/discovery/test_resource_snapshot.py +253 -0
  216. package/discovery/validation.star +80 -0
  217. package/discovery/versioning.star +3 -0
  218. package/engine/AGENTS.md +706 -0
  219. package/engine/README.md +31 -0
  220. package/engine/REFACTORING_MANIFEST_SYSTEM.md +974 -0
  221. package/engine/Tiltfile +86 -0
  222. package/engine/assets/docker/golden-layers.Dockerfile +204 -0
  223. package/engine/assets/docker/wake-gateway/Dockerfile +28 -0
  224. package/engine/assets/docker/wake-gateway/decide.test.ts +177 -0
  225. package/engine/assets/docker/wake-gateway/decide.ts +135 -0
  226. package/engine/assets/docker/wake-gateway/server.ts +363 -0
  227. package/engine/assets/scripts/cleanup-completed-migrator-images.sh +39 -0
  228. package/engine/assets/scripts/cleanup-tilt-images.sh +122 -0
  229. package/engine/assets/scripts/mac-m1-resource-monitor.sh +123 -0
  230. package/engine/config.star +5 -0
  231. package/engine/entrypoint.star +101 -0
  232. package/engine/lifecycle/orchestrator.star +263 -0
  233. package/engine/paths.star +719 -0
  234. package/engine/schemas/project-schema.json +147 -0
  235. package/engine/schemas/service-schema.json +537 -0
  236. package/engine/scripts/README.md +89 -0
  237. package/engine/scripts/build-and-publish-lib.sh +207 -0
  238. package/engine/scripts/check-lib-publish.sh +87 -0
  239. package/engine/scripts/debug-container.sh +265 -0
  240. package/engine/scripts/generate-manifest.sh +200 -0
  241. package/engine/spec.master +702 -0
  242. package/engine/spec.master.example +341 -0
  243. package/engine/topologies/README.md +33 -0
  244. package/engine/topologies/platform/docker/AGENTS.md +59 -0
  245. package/engine/topologies/platform/docker/auth/auth.star +207 -0
  246. package/engine/topologies/platform/docker/build/frontend_build_plan.star +65 -0
  247. package/engine/topologies/platform/docker/build/golden_image.star +37 -0
  248. package/engine/topologies/platform/docker/build/golden_image_build.star +144 -0
  249. package/engine/topologies/platform/docker/build/golden_image_constants.star +100 -0
  250. package/engine/topologies/platform/docker/build/golden_image_dockerfile.star +263 -0
  251. package/engine/topologies/platform/docker/compose/compose.star +637 -0
  252. package/engine/topologies/platform/docker/compose/compose_helpers.star +54 -0
  253. package/engine/topologies/platform/docker/compose/traefik_standalone.star +171 -0
  254. package/engine/topologies/platform/docker/config/bunignore.star +144 -0
  255. package/engine/topologies/platform/docker/config/dockerignore.star +152 -0
  256. package/engine/topologies/platform/docker/config/healthcheck.star +58 -0
  257. package/engine/topologies/platform/docker/constants.star +211 -0
  258. package/engine/topologies/platform/docker/dockerfile/dockerfile.star +56 -0
  259. package/engine/topologies/platform/docker/dockerfile/language_dockerfile.star +264 -0
  260. package/engine/topologies/platform/docker/generators/golden_docker_generator_v2.star +76 -0
  261. package/engine/topologies/platform/docker/index.star +40 -0
  262. package/engine/topologies/platform/docker/layers/bun_helpers.star +25 -0
  263. package/engine/topologies/platform/docker/layers/infisical/index.star +42 -0
  264. package/engine/topologies/platform/docker/layers/infisical/infisical_docker.star +264 -0
  265. package/engine/topologies/platform/docker/layers/l1_base_layers.star +89 -0
  266. package/engine/topologies/platform/docker/layers/l2_dependency_layers.star +147 -0
  267. package/engine/topologies/platform/docker/layers/l3_builder_layers.star +229 -0
  268. package/engine/topologies/platform/docker/layers/l4_runtime_layers.star +282 -0
  269. package/engine/topologies/platform/docker/layers/prisma/constants.star +138 -0
  270. package/engine/topologies/platform/docker/layers/prisma/db_readiness.star +98 -0
  271. package/engine/topologies/platform/docker/layers/prisma/filesystem_setup.star +131 -0
  272. package/engine/topologies/platform/docker/layers/prisma/migrate_script.star +100 -0
  273. package/engine/topologies/platform/docker/layers/prisma/prisma_build.star +128 -0
  274. package/engine/topologies/platform/docker/layers/prisma/prisma_runtime.star +205 -0
  275. package/engine/topologies/platform/docker/layers/prisma/secret_resolution.star +121 -0
  276. package/engine/topologies/platform/docker/networking/api_path_constants.star +206 -0
  277. package/engine/topologies/platform/docker/networking/sablier_container_cycle.star +31 -0
  278. package/engine/topologies/platform/docker/networking/traefik.star +266 -0
  279. package/engine/topologies/platform/docker/networking/traefik_constants.star +148 -0
  280. package/engine/topologies/platform/docker/networking/traefik_helpers.star +162 -0
  281. package/engine/topologies/platform/docker/networking/traefik_static_routes.star +165 -0
  282. package/engine/topologies/platform/docker/secrets/env_secrets.star +74 -0
  283. package/engine/topologies/platform/docker/secrets/infisical.star +109 -0
  284. package/engine/topologies/platform/net/AGENTS.md +64 -0
  285. package/engine/topologies/platform/net/proxy.star +6 -0
  286. package/engine/topologies/platform/registries/local.star +6 -0
  287. package/engine/topologies/platform/registries/verdaccio_loader.star +20 -0
  288. package/engine/topologies/platform/security/AGENTS.md +49 -0
  289. package/engine/topologies/platform/security/secrets.star +241 -0
  290. package/engine/topologies/platform/state/AGENTS.md +64 -0
  291. package/engine/topologies/platform/state/relational.star +6 -0
  292. package/engine/topologies/tilt/common/AGENTS.md +59 -0
  293. package/engine/topologies/tilt/common/utils.star +409 -0
  294. package/engine/topologies/tilt/common/utils_debug.star +71 -0
  295. package/engine/topologies/tilt/common/utils_deterministic.star +170 -0
  296. package/engine/topologies/tilt/common/utils_docker_networks.star +54 -0
  297. package/engine/topologies/tilt/common/utils_env.star +92 -0
  298. package/engine/topologies/tilt/common/utils_output.star +99 -0
  299. package/engine/topologies/tilt/config/AGENTS.md +68 -0
  300. package/engine/topologies/tilt/config/defaults.star +5 -0
  301. package/engine/topologies/tilt/config/feature_flags.star +12 -0
  302. package/engine/topologies/tilt/config/global.star +57 -0
  303. package/engine/topologies/tilt/config/profiles.star +398 -0
  304. package/engine/topologies/tilt/generators/agents_md.star +64 -0
  305. package/engine/topologies/tilt/generators/api_gateway.star +147 -0
  306. package/engine/topologies/tilt/generators/index.star +126 -0
  307. package/engine/topologies/tilt/generators/infisical/README.md +424 -0
  308. package/engine/topologies/tilt/generators/infisical/examples.star +314 -0
  309. package/engine/topologies/tilt/generators/infisical/index.star +59 -0
  310. package/engine/topologies/tilt/generators/infisical/machine_identity.star +422 -0
  311. package/engine/topologies/tilt/generators/infisical/organization.star +536 -0
  312. package/engine/topologies/tilt/generators/infisical/path_manager.star +478 -0
  313. package/engine/topologies/tilt/generators/infisical/secrets_generator.star +422 -0
  314. package/engine/topologies/tilt/generators/nginx_conf.star +145 -0
  315. package/engine/topologies/tilt/generators/npmrc.star +132 -0
  316. package/engine/topologies/tilt/generators/tsconfig.star +25 -0
  317. package/engine/topologies/tilt/generators/typescript/backend_library_tsconfig.star +73 -0
  318. package/engine/topologies/tilt/generators/typescript/backend_tsconfig.star +137 -0
  319. package/engine/topologies/tilt/generators/typescript/common.star +9 -0
  320. package/engine/topologies/tilt/generators/typescript/frontend_library_tsconfig.star +78 -0
  321. package/engine/topologies/tilt/generators/typescript/frontend_tsconfig.star +140 -0
  322. package/engine/topologies/tilt/generators/typescript/include.star +25 -0
  323. package/engine/topologies/tilt/generators/typescript/playwright_config.star +42 -0
  324. package/engine/topologies/tilt/generators/typescript/prisma_config.star +51 -0
  325. package/engine/topologies/tilt/generators/validators.star +868 -0
  326. package/engine/topologies/tilt/generators/vite/backend.star +80 -0
  327. package/engine/topologies/tilt/generators/vite/frameworks/lit.star +92 -0
  328. package/engine/topologies/tilt/generators/vite/frameworks/preact.star +94 -0
  329. package/engine/topologies/tilt/generators/vite/frameworks/qwik.star +94 -0
  330. package/engine/topologies/tilt/generators/vite/frameworks/react.star +128 -0
  331. package/engine/topologies/tilt/generators/vite/frameworks/solid.star +94 -0
  332. package/engine/topologies/tilt/generators/vite/frameworks/svelte.star +94 -0
  333. package/engine/topologies/tilt/generators/vite/frameworks/vanilla.star +92 -0
  334. package/engine/topologies/tilt/generators/vite/frameworks/vue.star +94 -0
  335. package/engine/topologies/tilt/generators/vite/frontend.star +153 -0
  336. package/engine/topologies/tilt/generators/vite/generators.star +45 -0
  337. package/engine/topologies/tilt/generators/vite/helpers.star +256 -0
  338. package/engine/topologies/tilt/generators/vite/library.star +67 -0
  339. package/engine/topologies/tilt/generators/vite/sdk.star +75 -0
  340. package/engine/topologies/tilt/generators/vite/templates.star +460 -0
  341. package/engine/topologies/tilt/generators/vite_config.star +24 -0
  342. package/engine/topologies/tilt/manifest/AGENTS.md +61 -0
  343. package/engine/topologies/tilt/manifest/README.md +679 -0
  344. package/engine/topologies/tilt/manifest/__init__.star +220 -0
  345. package/engine/topologies/tilt/manifest/constants.star +262 -0
  346. package/engine/topologies/tilt/manifest/errors.star +268 -0
  347. package/engine/topologies/tilt/manifest/integration.star +348 -0
  348. package/engine/topologies/tilt/manifest/json_to_yaml.py +61 -0
  349. package/engine/topologies/tilt/manifest/loader.star +239 -0
  350. package/engine/topologies/tilt/manifest/mapper.star +229 -0
  351. package/engine/topologies/tilt/manifest/parser.star +490 -0
  352. package/engine/topologies/tilt/manifest/schema.star +502 -0
  353. package/engine/topologies/tilt/manifest/tests/test_integration.star +278 -0
  354. package/engine/topologies/tilt/manifest/tests/test_loader_parser.star +475 -0
  355. package/engine/topologies/tilt/manifest/tests/test_manifest.star +319 -0
  356. package/engine/topologies/tilt/manifest/tests/test_validator.star +472 -0
  357. package/engine/topologies/tilt/manifest/validator.star +744 -0
  358. package/engine/topologies/tilt/manifest/yaml_to_json.py +20 -0
  359. package/engine/topologies/tilt/resources/AGENTS.md +71 -0
  360. package/engine/topologies/tilt/resources/build_concurrency.star +56 -0
  361. package/engine/topologies/tilt/resources/conditions.star +5 -0
  362. package/engine/topologies/tilt/resources/databases.star +246 -0
  363. package/engine/topologies/tilt/resources/declaration.star +5 -0
  364. package/engine/topologies/tilt/resources/deps.star +5 -0
  365. package/engine/topologies/tilt/resources/infra-loader.star +504 -0
  366. package/engine/topologies/tilt/resources/libs.star +32 -0
  367. package/engine/topologies/tilt/resources/libs_discovery.star +104 -0
  368. package/engine/topologies/tilt/resources/libs_paths.star +81 -0
  369. package/engine/topologies/tilt/resources/libs_resource_definition.star +153 -0
  370. package/engine/topologies/tilt/resources/libs_setup.star +166 -0
  371. package/engine/topologies/tilt/resources/libs_tsconfig.star +39 -0
  372. package/engine/topologies/tilt/resources/orchestrator/apply.star +79 -0
  373. package/engine/topologies/tilt/resources/orchestrator/apply_compose_resource_registration.star +864 -0
  374. package/engine/topologies/tilt/resources/orchestrator/apply_manifest_orchestration.star +90 -0
  375. package/engine/topologies/tilt/resources/orchestrator/apply_migrator_orchestration.star +150 -0
  376. package/engine/topologies/tilt/resources/orchestrator/apply_resource_validation.star +38 -0
  377. package/engine/topologies/tilt/resources/orchestrator/apply_runtime_flags.star +46 -0
  378. package/engine/topologies/tilt/resources/orchestrator/builders/typescript.star +193 -0
  379. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/AGENTS.md +75 -0
  380. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/index.star +23 -0
  381. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/resolver.star +136 -0
  382. package/engine/topologies/tilt/resources/orchestrator/generators/env.star +219 -0
  383. package/engine/topologies/tilt/resources/orchestrator/generators/frontend.star +172 -0
  384. package/engine/topologies/tilt/resources/orchestrator/generators/manifest_resource.star +577 -0
  385. package/engine/topologies/tilt/resources/orchestrator/helpers.star +35 -0
  386. package/engine/topologies/tilt/resources/orchestrator.star +56 -0
  387. package/engine/topologies/tilt/resources/ordering.star +5 -0
  388. package/engine/topologies/tilt/resources/shared-platform-postgres.star +30 -0
  389. package/engine/topologies/tilt/resources/triggers.star +5 -0
  390. package/engine/topologies/tilt/resources/watchers.star +304 -0
  391. package/engine/where-things-live.star +719 -0
  392. package/examples/tdk-example/LICENSE +21 -0
  393. package/examples/tdk-example/README.md +23 -0
  394. package/examples/tdk-example/TILT_SERVICE_DEFAULTS.star +42 -0
  395. package/examples/tdk-example/TILT_TECH_STACK.star +67 -0
  396. package/examples/tdk-example/Tiltfile +25 -0
  397. package/examples/tdk-example/services/platform/messaging/docker-compose.yml +26 -0
  398. package/examples/tdk-example/services/shop/orders-api/package.json +20 -0
  399. package/examples/tdk-example/services/shop/orders-api/service.json +14 -0
  400. package/examples/tdk-example/services/shop/orders-api/src/index.ts +81 -0
  401. package/examples/tdk-example/services/shop/orders-app/index.html +12 -0
  402. package/examples/tdk-example/services/shop/orders-app/package.json +23 -0
  403. package/examples/tdk-example/services/shop/orders-app/public/.gitkeep +0 -0
  404. package/examples/tdk-example/services/shop/orders-app/service.json +9 -0
  405. package/examples/tdk-example/services/shop/orders-app/src/main.tsx +9 -0
  406. package/examples/tdk-example/services/shop/orders-app/src/orders.tsx +67 -0
  407. package/examples/tdk-example/services/shop/orders-app/src/style.css +15 -0
  408. package/examples/tdk-example/services/shop/orders-worker/package.json +18 -0
  409. package/examples/tdk-example/services/shop/orders-worker/service.json +13 -0
  410. package/examples/tdk-example/services/shop/orders-worker/src/index.ts +33 -0
  411. package/ext/Tiltfile +66 -0
  412. package/ext/ide-components/README.md +221 -0
  413. package/ext/ide-components/code_viewer/server.py +208 -0
  414. package/ext/ide-components/config_inspector/server.py +1052 -0
  415. package/ext/ide-components/file_browser/server.py +287 -0
  416. package/ext/ide-components/shared/config_service.py +471 -0
  417. package/ext/ide-components/shared/file_utils.py +300 -0
  418. package/ext/ide-components/shared/http_utils.py +234 -0
  419. package/ext/ide-components/shared/static/styles.css +1334 -0
  420. package/ext/ide-components/shared/syntax_highlighter.py +142 -0
  421. package/ext/ide-components/shared/template_engine.py +125 -0
  422. package/ext/ide-components/shared/templates/base.html +121 -0
  423. package/ext/ide-components/shared/test_config_service.py +328 -0
  424. package/ext/ide-components/shared/tilt_integration.py +160 -0
  425. package/ext/ui-enhancements/cron-status-server.sh +51 -0
  426. package/ext/ui-enhancements/cron-status-tracker.sh +148 -0
  427. package/ext/ui-enhancements/extension.yaml +36 -0
  428. package/ext/ui-enhancements/tiltfile.py +101 -0
  429. package/ext/ui-enhancements/ui/cron-jobs-tab.css +396 -0
  430. package/ext/ui-enhancements/ui/help-panel.css +279 -0
  431. package/ext/ui-enhancements/ui/icons.css +125 -0
  432. package/ext/ui-enhancements/ui/tooltips.css +114 -0
  433. package/package.json +94 -4
  434. package/shared-platform-engineering/docker-templates/bun-hoisted-symlink-fix.sh +25 -0
  435. package/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +466 -0
  436. package/shared-platform-engineering/docker-templates/install-deps.sh +154 -0
  437. package/shared-platform-engineering/docker-templates/prisma-bun-client-link-fix.sh +14 -0
  438. package/shared-platform-engineering/docker-templates/prisma-normalize-client.sh +58 -0
  439. package/specs/specs/TILT_SERVICE_DEFAULTS.star +207 -0
  440. package/specs/specs/TILT_TECH_STACK.star +161 -0
@@ -0,0 +1,90 @@
1
+ # Copyright (c) 2026 Flisk Landscape contributors
2
+ # SPDX-License-Identifier: MIT
3
+ # =============================================================================
4
+ # 📄 ORCHESTRATOR APPLY - MANIFEST ORCHESTRATION
5
+ # =============================================================================
6
+
7
+ # === INLINED CONSTANTS for pure extension loading ===
8
+ BASE_PORT_FRONTEND = 3000
9
+ BASE_PORT_BACKEND = 4000
10
+ # === END INLINED CONSTANTS ===
11
+
12
+
13
+ load('../../../../../discovery/loading.star', 'Manifest')
14
+ load('./generators/manifest_resource.star', 'ManifestResource')
15
+
16
+
17
+
18
+ def prepare_resource_manifests(resource_config, ctx):
19
+ resource_name = resource_config['name']
20
+ resource_manifests = {}
21
+ backend_manifest_cache = {}
22
+ config_gen_resources = {}
23
+
24
+ all_resources = resource_config.get('resources', [])
25
+
26
+ # First pass: load all manifests.
27
+ for resource in resource_config.get('resources', []):
28
+ # Use the resource's _resource_path if available (for services from different scan roots)
29
+ # Otherwise fall back to constructing path from resource_config path + resource name
30
+ resource_path = resource.get('_resource_path', resource_config['path'] + '/' + resource['name'])
31
+
32
+ # Load the manifest from the resource path
33
+ manifest = Manifest.load_manifest(resource_path)
34
+ resource_manifests[resource['name']] = manifest
35
+
36
+ app_name = manifest.get('appName', resource['name'])
37
+ stack = manifest.get('stack', resource_name)
38
+ port = manifest.get('port', BASE_PORT_FRONTEND)
39
+ app_type = manifest.get('appType', 'backend')
40
+
41
+ print(
42
+ " [Tilt] ✅ Loaded: " + app_name
43
+ + " | Stack: " + stack
44
+ + " | Port: " + str(port)
45
+ + " | Type: " + app_type
46
+ )
47
+
48
+ if manifest.get('appType') == 'backend':
49
+ backend_manifest_cache[manifest.get('appName')] = manifest
50
+
51
+ # Second pass: create config generation resources.
52
+ for resource in resource_config.get('resources', []):
53
+ manifest = resource_manifests.get(resource['name'], {})
54
+ app_type = manifest.get('appType', 'backend')
55
+ # infra services (verdaccio, etc.) are loaded by dedicated infra loaders —
56
+ # do not generate golden app Dockerfiles/configs for them.
57
+ if app_type in ['library', 'sdk', 'infra']:
58
+ print(" [Tilt] ⏭ Skipping config-gen for {} (appType={})".format(resource['name'], app_type))
59
+ continue
60
+
61
+ backend_manifest = None
62
+
63
+ if resource.get('frontend', False) or app_type == 'frontend':
64
+ backend_name = manifest.get('backendName', resource['name'].replace('-frontend', '-backend'))
65
+ backend_manifest = backend_manifest_cache.get(backend_name)
66
+ if not backend_manifest:
67
+ backend_manifest = Manifest.load_related(manifest)
68
+
69
+ # Use the resource's actual service path for config generation
70
+ resource_path = resource.get('_resource_path', resource_config['path'] + '/' + resource['name'])
71
+
72
+ config_gen_resource = ManifestResource.create_config_resource(
73
+ resource_name,
74
+ resource,
75
+ resource_path, # Pass correct path instead of resource_config['path']
76
+ manifest,
77
+ backend_manifest,
78
+ ctx,
79
+ )
80
+ config_gen_resources[resource['name']] = config_gen_resource
81
+
82
+ return {
83
+ 'resource_manifests': resource_manifests,
84
+ 'config_gen_resources': config_gen_resources,
85
+ }
86
+
87
+
88
+ ManifestOrchestration = struct(
89
+ prepare = prepare_resource_manifests,
90
+ )
@@ -0,0 +1,150 @@
1
+ # Copyright (c) 2026 Flisk Landscape contributors
2
+ # SPDX-License-Identifier: MIT
3
+ # =============================================================================
4
+ # 🗃️ ORCHESTRATOR APPLY - MIGRATOR ORCHESTRATION
5
+ # =============================================================================
6
+ # BLOCKER FIX #2: Sequential migration execution to prevent race conditions
7
+ # =============================================================================
8
+
9
+ # === INLINED CONSTANTS for pure extension loading ===
10
+ OUTPUT = struct(AUTOGENERATED_FOLDER = ".autogenerated")
11
+ # === END INLINED CONSTANTS ===
12
+
13
+
14
+ load('../../../platform/docker/index.star', 'Docker')
15
+
16
+ load('../../../platform/docker/generators/golden_docker_generator_v2.star', 'L4_generate_orchestrator')
17
+
18
+
19
+ def _find_backend_resource_path(resource_config):
20
+ resource_path = resource_config.get('path', '')
21
+ if not resource_path:
22
+ return None
23
+ backend_resource_path = None
24
+
25
+ for res in resource_config.get('resources', []):
26
+ if res.get('frontend', False):
27
+ continue
28
+
29
+ candidate = resource_path + '/' + res['name']
30
+ prisma_check = local("test -d " + candidate + "/prisma && echo yes || echo no", quiet=True)
31
+ prisma_check_stdout = getattr(prisma_check, "stdout", prisma_check)
32
+ has_prisma = str(prisma_check_stdout).strip() == 'yes'
33
+
34
+ if has_prisma:
35
+ return candidate
36
+
37
+ if backend_resource_path == None:
38
+ backend_resource_path = candidate
39
+
40
+ return backend_resource_path
41
+
42
+
43
+ def register_migrators(resource_config, ctx, runtime_flags, compose_project_name):
44
+ should_enable = ctx['should_enable']
45
+ write_file = ctx['write_file']
46
+ resource_name = resource_config.get('name', '')
47
+ resource_path = resource_config.get('path', '')
48
+
49
+ if not resource_name:
50
+ print("⚠️ Skipping migrator registration for service without name")
51
+ return
52
+
53
+ if not resource_path:
54
+ # Silently skip migrator registration for services without paths
55
+ return
56
+
57
+ if not resource_config.get('has_migrator', False):
58
+ return
59
+ if not should_enable('database-management'):
60
+ return
61
+
62
+ backend_resource_path = _find_backend_resource_path(resource_config)
63
+ dockerfile_res_path = backend_resource_path if backend_resource_path else resource_path
64
+
65
+ df_contents = L4_generate_orchestrator(
66
+ dockerfile_res_path,
67
+ res_type='migrator',
68
+ resource_name=resource_name,
69
+ use_nginx=False,
70
+ port=3000,
71
+ target_path='/app/dist',
72
+ build_cmd='echo "No build needed for migrator"',
73
+ cmd='bun run db:migrate',
74
+ use_infisical=False,
75
+ use_shared_libs=True,
76
+ use_prisma=True,
77
+ use_golden=should_enable('golden-image'),
78
+ )
79
+ write_file(dockerfile_res_path + "/" + OUTPUT.AUTOGENERATED_FOLDER + "/Dockerfile.migrator.autogenerated", df_contents)
80
+
81
+ migrator_dockerignore_content = Docker.generate_dockerignore(dockerfile_res_path, 'migrator')
82
+ write_file(
83
+ dockerfile_res_path + "/" + OUTPUT.AUTOGENERATED_FOLDER + "/Dockerfile.migrator.autogenerated.dockerignore",
84
+ migrator_dockerignore_content,
85
+ )
86
+
87
+ Docker.migrator_compose(
88
+ resource_path=resource_path,
89
+ resource_name=resource_name,
90
+ dockerfile_path=dockerfile_res_path + '/' + OUTPUT.AUTOGENERATED_FOLDER + '/Dockerfile.migrator.autogenerated',
91
+ write_fn=write_file,
92
+ )
93
+ docker_compose(
94
+ resource_path + '/' + OUTPUT.AUTOGENERATED_FOLDER + '/docker-compose.migrator.autogenerated.yml',
95
+ project_name=compose_project_name,
96
+ )
97
+
98
+ migrator_names = resource_config.get('migrator_names', [resource_name + '-db-migrator'])
99
+ for migrator_name in migrator_names:
100
+ # =============================================================================
101
+ # BLOCKER FIX #2: Sequential migration dependencies prevent race conditions
102
+ # =============================================================================
103
+ # Each migrator depends on postgres, its own provisioned DB, golden image,
104
+ # AND the previous migrator to ensure sequential execution
105
+ migrator_db_deps = ['postgres', 'provision-db-' + resource_name]
106
+ if should_enable('golden-image') and ctx.get('golden_image_resource'):
107
+ migrator_db_deps.append(ctx['golden_image_resource'])
108
+
109
+ # Add sequential dependency on previous migrator to prevent parallel execution
110
+ # Use ctx to track sequence (mutable dict passed from caller)
111
+ migrator_index = ctx.setdefault('migrator_sequence', {})
112
+ previous_migrator = _get_previous_migrator(resource_name, migrator_index)
113
+ if previous_migrator:
114
+ migrator_db_deps.append(previous_migrator)
115
+ print("🔗 Sequential migration: " + migrator_name + " will run after " + previous_migrator)
116
+
117
+ dc_resource(
118
+ migrator_name,
119
+ labels=['app.' + resource_name, 'migrator'],
120
+ resource_deps=migrator_db_deps,
121
+ auto_init=runtime_flags['auto_init_migrators'],
122
+ )
123
+
124
+
125
+ # =============================================================================
126
+ # BLOCKER FIX #2: Migration sequencing tracker
127
+ # =============================================================================
128
+ # Pass migrator sequence via ctx to avoid frozen module-level state
129
+ # The caller initializes ctx['migrator_sequence'] = {} before calling register_migrators
130
+
131
+ def _get_previous_migrator(current_service, migrator_index):
132
+ """
133
+ Get the previous migrator in sequence for dependency chaining.
134
+ Returns the migrator name that should complete before this one starts.
135
+ """
136
+ if current_service not in migrator_index:
137
+ migrator_index[current_service] = len(migrator_index)
138
+
139
+ idx = migrator_index[current_service]
140
+ if idx > 0:
141
+ # Find the service with index idx - 1
142
+ for svc, svc_idx in migrator_index.items():
143
+ if svc_idx == idx - 1:
144
+ return svc + '-db-migrator'
145
+ return None
146
+
147
+
148
+ MigratorOrchestration = struct(
149
+ register = register_migrators,
150
+ )
@@ -0,0 +1,38 @@
1
+ # Copyright (c) 2026 Flisk Landscape contributors
2
+ # SPDX-License-Identifier: MIT
3
+ # =============================================================================
4
+ # ✅ ORCHESTRATOR APPLY - resource VALIDATION
5
+ # =============================================================================
6
+
7
+ load('../../common/utils.star', 'Utils')
8
+
9
+
10
+ def validate_resource(resource_config):
11
+ resource_name = resource_config['name']
12
+ resource_paths = []
13
+
14
+ for resource in resource_config.get('resources', []):
15
+ resource_paths.append(resource_config['path'] + "/" + resource['name'])
16
+
17
+ circular_deps = Utils.detect_circular_deps(resource_paths)
18
+ if circular_deps:
19
+ error_msg = "🔴 CIRCULAR DEPENDENCY DETECTED IN RESOURCE: " + resource_name + "\n"
20
+ for cycle in circular_deps:
21
+ error_msg += " 🔄 " + ' → '.join(cycle) + "\n"
22
+ fail(error_msg)
23
+
24
+ for resource_path in resource_paths:
25
+ naming_errors = Utils.validate_lib_naming(resource_path)
26
+ if naming_errors:
27
+ # Print warnings but don't fail - allow services to load with missing libs
28
+ print("⚠️ LIBRARY NAMING WARNING in " + resource_name)
29
+ for err in naming_errors:
30
+ print(" ❌ " + err['package'] + ": " + err['error'])
31
+ print(" 📝 Continuing despite missing libraries (this may cause build failures)")
32
+
33
+
34
+ ResourceValidation = struct(
35
+ validate = validate_resource,
36
+ )
37
+
38
+ VALIDATION = {}
@@ -0,0 +1,46 @@
1
+ # Copyright (c) 2026 Flisk Landscape contributors
2
+ # SPDX-License-Identifier: MIT
3
+ # =============================================================================
4
+ # 🎛️ ORCHESTRATOR APPLY - RUNTIME FLAGS
5
+ # =============================================================================
6
+
7
+ def _resolve_bool_env(env_name, default_value):
8
+ value = os.environ.get(env_name, '').lower()
9
+ if value in ['1', 'true', 'yes', 'on']:
10
+ return True
11
+ if value in ['0', 'false', 'no', 'off']:
12
+ return False
13
+ return default_value
14
+
15
+
16
+ def resolve_runtime_flags():
17
+ trigger_mode = os.environ.get('TILT_TRIGGER_MODE', 'auto').lower()
18
+
19
+ # Match trigger mode semantics by default:
20
+ # - auto mode: boot app resources automatically
21
+ # - manual mode: require explicit triggers for app resources
22
+ auto_init_apps = _resolve_bool_env('TILT_AUTO_INIT_APPS', trigger_mode == 'auto')
23
+ auto_init_migrators = _resolve_bool_env('TILT_AUTO_INIT_MIGRATORS', False)
24
+
25
+ # Config generators are lightweight and safe to run on startup by default.
26
+ auto_init_config_gen = _resolve_bool_env('TILT_AUTO_INIT_CONFIG_GEN', True)
27
+
28
+ # In manual mode, avoid hard gating app backends on migrator builds.
29
+ enforce_migrator_deps = _resolve_bool_env('TILT_ENFORCE_MIGRATOR_DEPS', trigger_mode == 'auto')
30
+
31
+ # In manual mode, default to single replica for faster local feedback loops.
32
+ disable_app_replicas = _resolve_bool_env('TILT_DISABLE_APP_REPLICAS', trigger_mode == 'manual')
33
+
34
+ return {
35
+ 'trigger_mode': trigger_mode,
36
+ 'auto_init_apps': auto_init_apps,
37
+ 'auto_init_migrators': auto_init_migrators,
38
+ 'auto_init_config_gen': auto_init_config_gen,
39
+ 'enforce_migrator_deps': enforce_migrator_deps,
40
+ 'disable_app_replicas': disable_app_replicas,
41
+ }
42
+
43
+
44
+ RuntimeFlags = struct(
45
+ resolve = resolve_runtime_flags,
46
+ )
@@ -0,0 +1,193 @@
1
+ # Copyright (c) 2026 Flisk Landscape contributors
2
+ # SPDX-License-Identifier: MIT
3
+ # =============================================================================
4
+ # 🧱 TILT SDK - TYPESCRIPT BUILDERS
5
+ # =============================================================================
6
+ # Path: .tilt/provisioner/orchestrator/builders/typescript.star
7
+ # Purpose: TypeScript build helpers for orchestrator
8
+ # =============================================================================
9
+
10
+
11
+ # === INLINED CONSTANTS for pure extension loading ===
12
+ OUTPUT = struct(AUTOGENERATED_FOLDER = ".autogenerated")
13
+ DEFAULTS = {}
14
+
15
+ # === END INLINED CONSTANTS ===
16
+
17
+
18
+ load('../../../common/utils.star', 'Utils')
19
+ # Import filewatch ignore patterns from master config (replaces hardcoded values)
20
+
21
+
22
+ def _with_resource_prefix(pattern, resource_path):
23
+ """Prefix dockerignore pattern so it applies to the service subtree in root context."""
24
+ normalized = pattern
25
+ if normalized.startswith('/'):
26
+ normalized = normalized[1:]
27
+
28
+ # Patterns in autogenerated dockerignore are service-relative.
29
+ # When context is project root, scope patterns under resource_path.
30
+ return resource_path + '/' + normalized
31
+
32
+
33
+ def get_filewatch_ignore_patterns(resource_path):
34
+ """Return filewatch ignore patterns to prevent fsnotify buffer overflow."""
35
+ return [
36
+ resource_path + "/node_modules",
37
+ resource_path + "/dist",
38
+ resource_path + "/build",
39
+ resource_path + "/.git",
40
+ resource_path + "/.prisma",
41
+ resource_path + "/.turbo",
42
+ resource_path + "/coverage",
43
+ resource_path + "/tmp",
44
+ resource_path + "/temp",
45
+ ]
46
+
47
+ def _load_autogenerated_dockerignore_patterns(dockerfile_path, resource_path):
48
+ """
49
+ Read Dockerfile-specific autogenerated dockerignore and convert to Tilt ignore rules.
50
+ Note: Tilt ignore does not support negate patterns ('!'), so those are skipped.
51
+ """
52
+ dockerignore_path = dockerfile_path + '.dockerignore'
53
+ content = read_file(dockerignore_path, default='')
54
+
55
+ if not content:
56
+ return []
57
+
58
+ ignore_patterns = []
59
+ for raw_line in str(content).split('\n'):
60
+ line = raw_line.strip()
61
+ if not line or line.startswith('#') or line.startswith('!'):
62
+ continue
63
+ ignore_patterns.append(_with_resource_prefix(line, resource_path))
64
+
65
+ return ignore_patterns
66
+
67
+ def _get_resource_only_paths(resource_path):
68
+ """
69
+ Generate minimal file paths for docker_build 'only' parameter.
70
+ This dramatically reduces build context from 7.4GB to just the necessary files.
71
+
72
+ Args:
73
+ resource_path: Path to service (e.g., 'services/product/{domain}/{service-name}')
74
+
75
+ Returns:
76
+ List of paths to include in build context
77
+ """
78
+ only_paths = [
79
+ # Root level dependencies
80
+ 'bun.lock',
81
+ 'bun.lockb',
82
+ 'package.json',
83
+
84
+ # Service-specific files
85
+ resource_path,
86
+
87
+ # Shared runtime scripts copied in generated Dockerfiles.
88
+ 'shared-platform-engineering/docker-templates',
89
+ ]
90
+
91
+ # Include only internal libraries referenced by this service package.json
92
+ # (covers shared-ddd-layers/<lib> too, via resolve_lib_path's 'ddd' root -
93
+ # no Dockerfile ever COPYs a bare shared-ddd-layers/domain or /infrastructure
94
+ # path, so hardcoding those two here was pure dead weight: every one of a
95
+ # large landscape's docker_build resources got its own Tilt watch
96
+ # registration on paths most projects don't even have on disk. At 107
97
+ # resources that's 107 duplicate watchers on the same couple of
98
+ # nonexistent paths - real amplification if anything ever touches them,
99
+ # and a plausible contributor to "fsnotify: queue or buffer overflow" at
100
+ # this scale, on top of being wasted watch overhead regardless).
101
+ # This also prevents unrelated library changes from triggering rebuilds
102
+ # of services that don't use them.
103
+ deps_map = Utils.build_deps_mapping(resource_path)
104
+ for dep_path in deps_map.values():
105
+ if dep_path not in only_paths:
106
+ only_paths.append(dep_path)
107
+
108
+ return only_paths
109
+
110
+ def _build_typescript_service(name, context, dockerfile, live_update_rules, deps, env=None, target='production'):
111
+ """Build a TypeScript service with Docker.
112
+
113
+ Args:
114
+ name: Resource name
115
+ context: Docker build context
116
+ dockerfile: Path to Dockerfile
117
+ live_update_rules: Live update configuration
118
+ deps: Resource dependencies
119
+ env: Dict of environment variables to pass to container (optional)
120
+ target: Dockerfile target to build (`development` for an opted-in Go service, otherwise `production`)
121
+ """
122
+ # Extract service path from dockerfile path (e.g., 'services/product/{domain}/{service-name}')
123
+ # The dockerfile parameter looks like: 'services/product/{domain}/{service-name}/autogenerated/Dockerfile.autogenerated'
124
+ resource_path = '/'.join(dockerfile.split('/')[:-1])
125
+
126
+ # Handle both 'autogenerated' (without dot) and '.autogenerated' (with dot)
127
+ # Some services use 'autogenerated', others use '.autogenerated' folder
128
+ autogenerated_folders = ['autogenerated', '.autogenerated']
129
+ for folder in autogenerated_folders:
130
+ suffix = '/' + folder
131
+ if resource_path.endswith(suffix):
132
+ resource_path = resource_path[:-len(suffix)]
133
+ break
134
+
135
+ # Also check OUTPUT.AUTOGENERATED_FOLDER for consistency
136
+ if resource_path.endswith('/' + OUTPUT.AUTOGENERATED_FOLDER):
137
+ resource_path = resource_path[:-(len('/' + OUTPUT.AUTOGENERATED_FOLDER))]
138
+
139
+ ignore_patterns = _load_autogenerated_dockerignore_patterns(dockerfile, resource_path)
140
+
141
+ # CRITICAL FIX: Add filewatch ignore patterns from master config
142
+ # These prevent fsnotify buffer overflow by excluding high-churn directories
143
+ # Previously hardcoded; now imported from TILT_RESOURCE_DEFAULTS.star
144
+ additional_ignores = get_filewatch_ignore_patterns(resource_path)
145
+
146
+ # Merge patterns, avoiding duplicates
147
+ for pattern in additional_ignores:
148
+ if pattern not in ignore_patterns:
149
+ ignore_patterns.append(pattern)
150
+
151
+ only_paths = _get_resource_only_paths(resource_path)
152
+
153
+ # Build context must be the project root (.) so that COPY commands can reference
154
+ # shared-platform-engineering/, shared-ddd-layers/, and services/ directories
155
+ # BUT we use 'only' to dramatically reduce the context size (from 7.4GB to ~100MB)
156
+ docker_build(
157
+ name,
158
+ context,
159
+ dockerfile=dockerfile,
160
+ target=target,
161
+ live_update=live_update_rules,
162
+ only=_get_resource_only_paths(resource_path),
163
+ ignore=ignore_patterns,
164
+ network='host',
165
+ )
166
+
167
+
168
+ def prebuild_dockerignore(dockerfile, project_root, res_path):
169
+ """Allowlist .dockerignore matching _build_typescript_service's only=/ignore=.
170
+
171
+ A plain `docker build` has no only= filter, so without this it would send
172
+ the whole project root as context. `res_path` is relative to the project
173
+ root (the build context); `dockerfile` may be absolute.
174
+ """
175
+ abs_res = project_root + '/' + res_path if project_root else res_path
176
+ lines = ['*']
177
+ for path in _get_resource_only_paths(abs_res):
178
+ lines.append('!' + (res_path if path == abs_res else path))
179
+ ignores = _load_autogenerated_dockerignore_patterns(dockerfile, res_path)
180
+ for pattern in get_filewatch_ignore_patterns(res_path):
181
+ if pattern not in ignores:
182
+ ignores.append(pattern)
183
+ lines.extend(ignores)
184
+ return '\n'.join(lines) + '\n'
185
+
186
+
187
+ TypescriptBuilders = struct(
188
+ build_typescript_service = _build_typescript_service,
189
+ load_dockerignore_patterns = _load_autogenerated_dockerignore_patterns,
190
+ prebuild_dockerignore = prebuild_dockerignore,
191
+ )
192
+
193
+ 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,23 @@
1
+ # Copyright (c) 2026 Flisk Landscape contributors
2
+ # SPDX-License-Identifier: MIT
3
+ # =============================================================================
4
+ # 🔗 TILT SDK - DEPENDENCY RESOLUTION MODULE
5
+ # =============================================================================
6
+ # Purpose: Centralized dependency resolution for generators
7
+ # Auto-discover and inject configuration from internal dependencies
8
+ # =============================================================================
9
+
10
+ load("./resolver.star",
11
+ "resolve_backend_api_path",
12
+ "resolve_dependency_api_urls",
13
+ "get_backend_manifest",
14
+ "inject_dependency_env_vars",
15
+ "DependencyResolvers",
16
+ )
17
+
18
+ # Re-export all functions for easy access
19
+ resolve_backend_api_path = resolve_backend_api_path
20
+ resolve_dependency_api_urls = resolve_dependency_api_urls
21
+ get_backend_manifest = get_backend_manifest
22
+ inject_dependency_env_vars = inject_dependency_env_vars
23
+ DependencyResolvers = DependencyResolvers