@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,136 @@
1
+ # Copyright (c) 2026 Flisk Landscape contributors
2
+ # SPDX-License-Identifier: MIT
3
+ # =============================================================================
4
+ # 🔗 TILT SDK - DEPENDENCY RESOLUTION HELPERS
5
+ # =============================================================================
6
+ # Purpose: Resolve dependencies between services (frontend → backend lookups)
7
+ # Auto-inject configuration from internal dependencies
8
+ # =============================================================================
9
+
10
+ load("../../../../../../../discovery/registry.star", "get_resource_by_name")
11
+
12
+ def resolve_backend_api_path(manifest):
13
+ """Resolve API path from backend manifest if backendName is specified.
14
+
15
+ Frontend manifests often reference a backend via backendName.
16
+ This function looks up the backend's apiPath for consistency.
17
+
18
+ Args:
19
+ manifest: Frontend service manifest
20
+
21
+ Returns:
22
+ str: API path from backend manifest, or None if not found
23
+ """
24
+ backend_name = manifest.get("backendName")
25
+ if not backend_name:
26
+ return None
27
+
28
+ # Try to find the backend service
29
+ backend_service = get_resource_by_name(backend_name)
30
+ if not backend_service:
31
+ return None
32
+
33
+ # Get the backend manifest
34
+ backend_resources = backend_service.get("resources", [])
35
+ for resource in backend_resources:
36
+ if resource.get("name") == backend_name:
37
+ backend_manifest = resource.get("_manifest", {})
38
+ return backend_manifest.get("apiPath")
39
+
40
+ return None
41
+
42
+
43
+ def resolve_dependency_api_urls(manifest):
44
+ """Resolve all API URLs from dependsOn.
45
+
46
+ For each dependency in dependsOn, looks up the service
47
+ and extracts its apiPath. Returns a dict mapping dependency names to URLs.
48
+
49
+ Args:
50
+ manifest: Service manifest with dependsOn
51
+
52
+ Returns:
53
+ dict: { dependency_name: api_url }
54
+ """
55
+ deps = manifest.get("dependsOn", [])
56
+ if not deps:
57
+ return {}
58
+
59
+ urls = {}
60
+ for dep_name in deps:
61
+ dep_service = get_resource_by_name(dep_name)
62
+ if not dep_service:
63
+ continue
64
+
65
+ # Find the backend resource for this dependency
66
+ dep_resources = dep_service.get("resources", [])
67
+ for resource in dep_resources:
68
+ # Skip frontend resources, look for backend
69
+ if resource.get("appType") == "frontend":
70
+ continue
71
+
72
+ dep_manifest = resource.get("_manifest", {})
73
+ api_path = dep_manifest.get("apiPath")
74
+ if api_path:
75
+ urls[dep_name] = api_path
76
+ break
77
+
78
+ return urls
79
+
80
+
81
+ def get_backend_manifest(manifest):
82
+ """Get the backend manifest referenced by a frontend manifest.
83
+
84
+ Args:
85
+ manifest: Frontend service manifest with backendName
86
+
87
+ Returns:
88
+ dict: Backend manifest or None if not found
89
+ """
90
+ backend_name = manifest.get("backendName")
91
+ if not backend_name:
92
+ return None
93
+
94
+ backend_service = get_resource_by_name(backend_name)
95
+ if not backend_service:
96
+ return None
97
+
98
+ backend_resources = backend_service.get("resources", [])
99
+ for resource in backend_resources:
100
+ if resource.get("name") == backend_name:
101
+ return resource.get("_manifest", {})
102
+
103
+ return None
104
+
105
+
106
+ def inject_dependency_env_vars(manifest, base_env_vars):
107
+ """Inject environment variables from dependencies.
108
+
109
+ For each internal dependency, adds VITE_{DEP}_API_URL to env vars.
110
+
111
+ Args:
112
+ manifest: Service manifest
113
+ base_env_vars: Base environment variables dict
114
+
115
+ Returns:
116
+ dict: Updated environment variables with dependency URLs
117
+ """
118
+ env_vars = dict(base_env_vars)
119
+ dep_urls = resolve_dependency_api_urls(manifest)
120
+
121
+ for dep_name, api_path in dep_urls.items():
122
+ # Convert dependency name to env var key
123
+ # e.g., "identity-management-backend" -> "IDENTITY_MANAGEMENT_BACKEND_API_URL"
124
+ env_key = dep_name.upper().replace("-", "_").replace(".", "_")
125
+ env_vars["VITE_" + env_key + "_API_URL"] = api_path
126
+
127
+ return env_vars
128
+
129
+
130
+ # Export struct for easy importing
131
+ DependencyResolvers = struct(
132
+ resolve_backend_api_path = resolve_backend_api_path,
133
+ resolve_dependency_api_urls = resolve_dependency_api_urls,
134
+ get_backend_manifest = get_backend_manifest,
135
+ inject_dependency_env_vars = inject_dependency_env_vars,
136
+ )
@@ -0,0 +1,219 @@
1
+ # Copyright (c) 2026 Flisk Landscape contributors
2
+ # SPDX-License-Identifier: MIT
3
+ # =============================================================================
4
+ # 🧪 TILT SDK - ENV GENERATORS
5
+ # =============================================================================
6
+ # Path: .tilt/provisioner/orchestrator/generators/env.star
7
+ # Purpose: Environment file generation helpers
8
+ # =============================================================================
9
+
10
+ # === INLINED CONSTANTS for pure extension loading ===
11
+ BASE_PORT_FRONTEND = 3000
12
+ BASE_PORT_BACKEND = 4000
13
+ OUTPUT = struct(AUTOGENERATED_FOLDER = ".autogenerated")
14
+ # === END INLINED CONSTANTS ===
15
+
16
+
17
+ load("../../../../platform/docker/auth/auth.star", "AuthConfig")
18
+ load("../../../../platform/docker/networking/traefik_helpers.star", "get_api_path")
19
+ load("../../../../platform/docker/networking/api_path_constants.star", "get_frontend_base_path")
20
+ load("../../../../platform/docker/constants.star", "PlatformDockerConstants")
21
+
22
+
23
+
24
+ def _normalize_dependency_path(dependency):
25
+ dep = str(dependency).strip()
26
+ if not dep:
27
+ return ''
28
+
29
+ if dep.endswith('-management-backend'):
30
+ return dep.replace('-management-backend', '')
31
+
32
+ if dep.endswith('-backend'):
33
+ return dep[:-8]
34
+
35
+ if dep.endswith('-frontend'):
36
+ return dep[:-9]
37
+
38
+ return dep
39
+
40
+
41
+ def _dependency_env_key(dependency):
42
+ dep = str(dependency).upper()
43
+ key = ''
44
+ for i in range(len(dep)):
45
+ char = dep[i]
46
+ if (char >= 'A' and char <= 'Z') or (char >= '0' and char <= '9'):
47
+ key += char
48
+ else:
49
+ key += '_'
50
+ while '__' in key:
51
+ key = key.replace('__', '_')
52
+ return key.strip('_')
53
+
54
+
55
+ def _build_dependency_env_lines(manifest):
56
+ dependencies = manifest.get('dependencies', manifest.get('dependsOn', []))
57
+ if not dependencies:
58
+ return ''
59
+
60
+ # Deduplicate while preserving first-seen order.
61
+ seen = {}
62
+ ordered = []
63
+ for dep in dependencies:
64
+ dep_path = _normalize_dependency_path(dep)
65
+ if dep_path and not seen.get(dep_path, False):
66
+ seen[dep_path] = True
67
+ ordered.append(dep_path)
68
+
69
+ if not ordered:
70
+ return ''
71
+
72
+ lines = '\n# Dependency API URLs (using standardized /api/v1 paths)\n'
73
+ for dep_path in ordered:
74
+ dep_key = _dependency_env_key(dep_path)
75
+ # Use standardized API path from traefik helpers
76
+ dep_api_path = get_api_path(dep_path)
77
+ lines += 'VITE_{dep_key}_API_URL=http://{local_domain}{dep_api_path}\n'.format(
78
+ dep_key=dep_key,
79
+ dep_api_path=dep_api_path,
80
+ local_domain=PlatformDockerConstants.API_LOCAL_DOMAIN,
81
+ )
82
+ return lines
83
+
84
+
85
+ # Characters that can appear in a dotenv value without quoting.
86
+ _ENV_BARE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-./:@%+=,'
87
+
88
+
89
+ def _format_env_value(value):
90
+ """Format a param value so the generated file stays valid dotenv.
91
+
92
+ A plain value stays bare. Anything else (a space, `#`, `$`, a quote, a backslash, a newline, or an empty string) is wrapped in double
93
+ quotes with backslash, quote and newline escaped, which is how dotenv parsers (including Docker Compose's) read it back.
94
+
95
+ `$` is written as `$$`: Docker Compose expands `$NAME` and `${NAME}` in env files, so an unescaped dollar would silently pick up
96
+ some other variable (checked in a real container: "price $$FOO" arrives as the literal `price $FOO`).
97
+ """
98
+ text = str(value)
99
+ bare = text != ''
100
+ for i in range(len(text)):
101
+ if text[i] not in _ENV_BARE_CHARS:
102
+ bare = False
103
+ break
104
+ if bare:
105
+ return text
106
+
107
+ escaped = text.replace('\\', '\\\\').replace('"', '\\"').replace('$', '$$').replace('\r', '\\r').replace('\n', '\\n')
108
+ return '"' + escaped + '"'
109
+
110
+
111
+ def _uses_prisma(manifest):
112
+ """Prisma is opt-in: an explicit usePrisma, or `prisma` in featuresEnabled (the same rule the Dockerfile generator uses)."""
113
+ if manifest.get('usePrisma'):
114
+ return True
115
+ return 'prisma' in manifest.get('featuresEnabled', [])
116
+
117
+
118
+ def _uses_drizzle(manifest):
119
+ """Drizzle reads DATABASE_URL at runtime. It has no migrator, so only the connection string is written."""
120
+ return 'drizzle' in manifest.get('featuresEnabled', [])
121
+
122
+
123
+ def _generate_params_env(manifest, backend_manifest=None, write_fn=None):
124
+ """Generate params (non-secret) environment variables from manifest.
125
+
126
+ This generates config like BASE_URL, PORT, etc. - NEVER secrets. The file is generated and verified by `flisk config verify`, so
127
+ nothing secret may be written here: the JWT secret and `secrets.required` / `secrets.optional` reach the container from the
128
+ project `.env` through the Compose entry instead.
129
+
130
+ Args:
131
+ manifest: Service manifest dict with configuration
132
+ backend_manifest: Optional backend manifest for frontend services
133
+ write_fn: Optional write function for file output (callable)
134
+
135
+ Returns:
136
+ str: Generated environment file content
137
+ """
138
+ resource_path = manifest.get('_resource_path', '')
139
+ app_type = manifest.get('appType', 'backend')
140
+ stack = manifest.get('stack', 'app')
141
+ port = manifest.get('port', BASE_PORT_FRONTEND)
142
+ # Use standardized API path from traefik helpers
143
+ api_path = get_api_path(stack)
144
+ # Traefik routes /api/<stack>-management only on api.<project>.localhost (see traefik.star), so the URL uses that host.
145
+ api_url = 'http://' + PlatformDockerConstants.API_LOCAL_DOMAIN + api_path
146
+ target_filename = '/' + OUTPUT.AUTOGENERATED_FOLDER + '/.env.backend.autogenerated'
147
+
148
+ # Auth configuration: the same builder Compose uses, so the two outputs cannot disagree. A missing value is None and AuthConfig
149
+ # treats None as "use the default". `jwtSecret` is deliberately not read: a secret in a committed service.json would be copied into
150
+ # a generated file, so the secret comes from the project .env instead.
151
+ auth_config = AuthConfig.from_manifest(manifest)
152
+
153
+ if app_type == 'frontend':
154
+ backend_port = backend_manifest.get('port', BASE_PORT_BACKEND) if backend_manifest else BASE_PORT_BACKEND
155
+ backend_name = manifest.get('backendName', stack + '-backend')
156
+ target_filename = '/' + OUTPUT.AUTOGENERATED_FOLDER + '/.env.frontend.autogenerated'
157
+
158
+ # Shared with the Traefik route and the Vite `base` -- see get_frontend_base_path.
159
+ base_path = get_frontend_base_path(manifest)
160
+ public_url = 'http://' + PlatformDockerConstants.LOCAL_DOMAIN + base_path
161
+
162
+ content = """# Generated by Tilt SDK - DO NOT EDIT
163
+ # Frontend Environment Variables
164
+ VITE_API_PORT={backend_port}
165
+ VITE_API_URL={api_url}
166
+ VITE_BACKEND_NAME={backend_name}
167
+ PUBLIC_URL={public_url}
168
+ """.format(
169
+ backend_port=backend_port,
170
+ api_url=api_url,
171
+ backend_name=backend_name,
172
+ public_url=public_url,
173
+ )
174
+ content += _build_dependency_env_lines(manifest)
175
+ else:
176
+ db_name = manifest.get('databaseName', PlatformDockerConstants.get_db_name(stack))
177
+
178
+ content = """# Generated by Tilt SDK - DO NOT EDIT
179
+ # Backend Environment Variables
180
+ PORT={port}
181
+ DATABASE_NAME={db_name}
182
+ API_URL={api_url}
183
+ """.format(port=port, db_name=db_name, api_url=api_url)
184
+
185
+ if _uses_prisma(manifest):
186
+ content += """
187
+ # Prisma
188
+ DATABASE_URL=""" + PlatformDockerConstants.get_database_url_for_env(db_name) + """
189
+ """
190
+ elif _uses_drizzle(manifest):
191
+ content += """
192
+ # Drizzle
193
+ DATABASE_URL=""" + PlatformDockerConstants.get_database_url_for_env(db_name) + """
194
+ """
195
+
196
+ # Add authentication configuration using centralized auth utilities
197
+ content += AuthConfig.generate_env_file_auth_section(auth_config)
198
+
199
+ # Add params (non-secret config variables)
200
+ # NOTE: Secrets are NEVER added here (see the docstring).
201
+ params = manifest.get('params', manifest.get('envVars', {})) # Fallback to envVars during migration
202
+ if params:
203
+ content += '\n# Params (non-secret config)\n'
204
+ # Sort keys for deterministic output to avoid unnecessary file rewrites.
205
+ for key in sorted(params.keys()):
206
+ value = params.get(key)
207
+ content += key + '=' + _format_env_value(value) + '\n'
208
+
209
+ if write_fn and resource_path:
210
+ write_fn(resource_path + target_filename, content)
211
+
212
+ return content
213
+
214
+
215
+ EnvGenerators = struct(
216
+ generate_params_env = _generate_params_env,
217
+ # Legacy alias for backward compatibility during migration
218
+ generate_env_file = _generate_params_env,
219
+ )
@@ -0,0 +1,172 @@
1
+ # Copyright (c) 2026 Flisk contributors
2
+ # SPDX-License-Identifier: MIT
3
+ # =============================================================================
4
+ # 🎨 TILT SDK - FRONTEND API CLIENT GENERATORS
5
+ # =============================================================================
6
+ # Purpose: Generate api-client.ts, env.ts, and index.ts for frontend services
7
+ # These files import from @{npm_scope}/platform-api-client package
8
+ # =============================================================================
9
+
10
+ # Load npm scope from project.json
11
+ # Use TDK_PROJECT_ROOT env var set by Tilt, fallback to current directory
12
+ def _load_npm_scope():
13
+ project_root = os.environ.get('TDK_PROJECT_ROOT', '')
14
+ project_json_path = '.tdk/project.json'
15
+ if project_root:
16
+ project_json_path = project_root + '/' + project_json_path
17
+
18
+ if os.path.exists(project_json_path):
19
+ _project_json = read_json(project_json_path)
20
+ return _project_json.get('project', {}).get('name', 'tdk-project')
21
+ return 'tdk-project'
22
+
23
+ _NPM_SCOPE = _load_npm_scope()
24
+
25
+ load("../../../../platform/docker/networking/traefik_helpers.star", "get_api_path")
26
+ load("../../../../platform/docker/constants.star", "PlatformDockerConstants")
27
+ load("./dependencies/resolver.star", "resolve_backend_api_path")
28
+
29
+ def generate_frontend_api_client(manifest, write_fn=None):
30
+ """Generate .autogenerated/api-client.ts for a frontend resource.
31
+
32
+ Args:
33
+ manifest: Resource manifest with stack field
34
+ write_fn: Optional function to write file (for Tilt)
35
+
36
+ Returns:
37
+ str: Generated file content
38
+ """
39
+ stack = manifest.get("stack", "app")
40
+
41
+ # Auto-resolve apiPath from backend manifest if backendName is specified
42
+ backend_api_path = resolve_backend_api_path(manifest)
43
+ if backend_api_path:
44
+ api_path = backend_api_path
45
+ else:
46
+ api_path = get_api_path(stack, manifest)
47
+
48
+ content = '''// 🛑 GENERATED BY TILT SDK - DO NOT EDIT
49
+ // Source: engine/topologies/tilt/resources/orchestrator/generators/frontend.star
50
+ // Purpose: Pre-configured API client for {stack} resource
51
+
52
+ import {{ createApiClient }} from '@{npm_scope}/platform-api-client';
53
+
54
+ /**
55
+ * Pre-configured API client for {stack} resource
56
+ *
57
+ * Usage:
58
+ * ```typescript
59
+ * import {{ apiClient }} from '../.autogenerated/api-client';
60
+ * const data = await apiClient.get('/');
61
+ * ```
62
+ */
63
+ export const apiClient = createApiClient({{
64
+ baseURL: import.meta.env.VITE_API_URL || 'http://{local_domain}{api_path}',
65
+ withAuth: true,
66
+ }});
67
+
68
+ export default apiClient;
69
+ '''.format(
70
+ stack=stack,
71
+ npm_scope=_NPM_SCOPE,
72
+ api_path=api_path,
73
+ local_domain=PlatformDockerConstants.API_LOCAL_DOMAIN,
74
+ )
75
+
76
+ if write_fn:
77
+ resource_path = manifest.get('_resource_path', '')
78
+ write_fn(resource_path + '/.autogenerated/api-client.ts', content)
79
+
80
+ return content
81
+
82
+
83
+ def generate_frontend_env_ts(manifest, write_fn=None):
84
+ """Generate .autogenerated/env.ts for a frontend resource.
85
+
86
+ Args:
87
+ manifest: Resource manifest with stack field
88
+ write_fn: Optional function to write file (for Tilt)
89
+
90
+ Returns:
91
+ str: Generated file content
92
+ """
93
+ stack = manifest.get("stack", "app")
94
+
95
+ # Auto-resolve apiPath from backend manifest if backendName is specified
96
+ backend_api_path = resolve_backend_api_path(manifest)
97
+ if backend_api_path:
98
+ api_path = backend_api_path
99
+ else:
100
+ api_path = get_api_path(stack, manifest)
101
+
102
+ content = '''// 🛑 GENERATED BY TILT SDK - DO NOT EDIT
103
+ // Source: .tilt/topologies/tilt/resources/orchestrator/generators/frontend.star
104
+ // Purpose: Environment constants for {stack} resource
105
+
106
+ /**
107
+ * Base API URL for {stack} resource
108
+ * Uses VITE_API_URL env var with fallback to local dev URL
109
+ */
110
+ export const API_URL = import.meta.env.VITE_API_URL || 'http://{local_domain}{api_path}';
111
+ '''.format(
112
+ stack=stack,
113
+ api_path=api_path,
114
+ local_domain=PlatformDockerConstants.API_LOCAL_DOMAIN,
115
+ )
116
+
117
+ if write_fn:
118
+ resource_path = manifest.get('_resource_path', '')
119
+ write_fn(resource_path + '/.autogenerated/env.ts', content)
120
+
121
+ return content
122
+
123
+
124
+ def generate_frontend_api_index(manifest, write_fn=None):
125
+ """Generate .autogenerated/api-index.ts for clean imports.
126
+
127
+ Args:
128
+ manifest: Service manifest
129
+ write_fn: Optional function to write file (for Tilt)
130
+
131
+ Returns:
132
+ str: Generated file content
133
+ """
134
+ content = '''// 🛑 GENERATED BY TILT SDK - DO NOT EDIT
135
+ // Source: .tilt/topologies/tilt/resources/orchestrator/generators/frontend.star
136
+ // Purpose: Clean barrel exports for API client
137
+
138
+ export { apiClient } from './api-client';
139
+ export { API_URL } from './env';
140
+ '''
141
+
142
+ if write_fn:
143
+ resource_path = manifest.get('_resource_path', '')
144
+ write_fn(resource_path + '/.autogenerated/api-index.ts', content)
145
+
146
+ return content
147
+
148
+
149
+ def generate_all_frontend_api_files(manifest, write_fn=None):
150
+ """Generate all frontend API files for a service.
151
+
152
+ Args:
153
+ manifest: Service manifest
154
+ write_fn: Function to write files
155
+
156
+ Returns:
157
+ dict: Generated content for each file
158
+ """
159
+ return {
160
+ 'api-client.ts': generate_frontend_api_client(manifest, write_fn),
161
+ 'env.ts': generate_frontend_env_ts(manifest, write_fn),
162
+ 'api-index.ts': generate_frontend_api_index(manifest, write_fn),
163
+ }
164
+
165
+
166
+ # Export struct for easy importing
167
+ FrontendGenerators = struct(
168
+ generate_api_client = generate_frontend_api_client,
169
+ generate_env_ts = generate_frontend_env_ts,
170
+ generate_api_index = generate_frontend_api_index,
171
+ generate_all = generate_all_frontend_api_files,
172
+ )