@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,2 @@
1
+ import{createRequire as __tdkRequire}from'node:module';const require=__tdkRequire(import.meta.url);
2
+ import{$b as d,Yb as a,Zb as b,_b as c,ac as e,bc as f,cc as g,dc as h,ec as i,fc as j}from"./chunk-CLCUIDBH.js";import"./chunk-BZ4H7MM4.js";import"./chunk-6EA4DGCY.js";export{c as MACHINE_CHECK_IDS,a as RUNTIME_CHECK_IDS,b as SCAFFOLD_CHECK_IDS,h as assertMachineReadyOrExit,i as detectRuntimePrerequisites,g as formatColdPreflight,j as formatRuntimeNextSteps,d as nodeTooOld,e as requireVerifiedDockerVersions,f as runColdPreflight};
@@ -0,0 +1,5 @@
1
+ import{createRequire as __tdkRequire}from'node:module';const require=__tdkRequire(import.meta.url);
2
+ import"./chunk-6EA4DGCY.js";var l=globalThis;l.window||=globalThis;l.self||=globalThis;l.window.__REACT_DEVTOOLS_COMPONENT_FILTERS__=[{type:1,value:7,isEnabled:!0},{type:2,value:"InternalApp",isEnabled:!0,isValid:!0},{type:2,value:"InternalAppContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdoutContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStderrContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdinContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalFocusContext",isEnabled:!0,isValid:!0}];import a from"react-devtools-core";var r=async(i="ws://localhost:8097",s=2e3)=>new Promise(t=>{let e=new WebSocket(i),o=setTimeout(()=>{t(!1),e.close()},s);o.unref(),e.addEventListener("open",()=>{clearTimeout(o),e.close(),t(!0)}),e.addEventListener("error",()=>{clearTimeout(o),t(!1)})}),n=r;await n()?(a.initialize(),a.connectToDevTools()):console.warn(`DEV is set to true, but the React DevTools server is not running. Start it with:
3
+
4
+ $ npx react-devtools
5
+ `);
@@ -0,0 +1,2 @@
1
+ import{createRequire as __tdkRequire}from'node:module';const require=__tdkRequire(import.meta.url);
2
+ import{b as a,c as b,d as c,e as d}from"./chunk-BZ4H7MM4.js";import"./chunk-6EA4DGCY.js";export{a as applyPremiumOverlay,c as hasDddLicense,d as hasSablierLicense,b as hasVerdaccioLicense};
@@ -0,0 +1,83 @@
1
+ {
2
+ "name": "tdk-cli-internal",
3
+ "private": true,
4
+ "version": "1.3.190",
5
+ "description": "Flisk CLI — start services on your machine.",
6
+ "keywords": [
7
+ "flisk",
8
+ "tilt",
9
+ "cli",
10
+ "local-dev",
11
+ "microservices"
12
+ ],
13
+ "homepage": "https://github.com/flisk-sh/flisk#readme",
14
+ "bugs": {
15
+ "url": "https://github.com/flisk-sh/flisk/issues"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/flisk-sh/flisk.git",
20
+ "directory": "cli"
21
+ },
22
+ "license": "MIT",
23
+ "author": "Flisk Team",
24
+ "type": "module",
25
+ "main": "./dist/index.js",
26
+ "types": "./dist/index.d.ts",
27
+ "bin": {
28
+ "flisk": "bin/flisk.js",
29
+ "tdk": "bin/flisk.js",
30
+ "tdk-cli": "bin/flisk.js"
31
+ },
32
+ "files": [
33
+ "dist",
34
+ "dist-bundle",
35
+ "bin",
36
+ "templates",
37
+ "README.md",
38
+ "Tiltfile",
39
+ "engine",
40
+ "discovery",
41
+ "specs",
42
+ "ext",
43
+ "!ext/ide-components/code_executor",
44
+ "shared-platform-engineering/docker-templates"
45
+ ],
46
+ "scripts": {
47
+ "build": "tsc && node scripts/bundle.mjs",
48
+ "build:watch": "tsc --watch",
49
+ "check:dist": "npm run build && ../scripts/check-cli-dist.sh",
50
+ "lint": "biome check .",
51
+ "lint:fix": "biome check . --write",
52
+ "typecheck": "tsc --project tsconfig.typecheck.json",
53
+ "clean": "rm -rf dist",
54
+ "dev": "bun run build:watch",
55
+ "test": "vitest run",
56
+ "test:watch": "vitest",
57
+ "test:coverage": "vitest run --coverage --coverage.reportOnFailure --coverage.reporter=text --coverage.reporter=html --coverage.reporter=json-summary --coverage.reporter=json --coverage.reportsDirectory=coverage --reporter=default --reporter=json --outputFile.json=test-results/vitest.json",
58
+ "prepack": "../scripts/stage-npm-engine.sh && npm run build"
59
+ },
60
+ "dependencies": {
61
+ "commander": "^15.0.0",
62
+ "handlebars": "^4.7.8"
63
+ },
64
+ "devDependencies": {
65
+ "@biomejs/biome": "^2.5.13",
66
+ "@types/node": "^22.0.0",
67
+ "@types/react": "^19.3.0",
68
+ "@vitest/coverage-v8": "^5.0.2",
69
+ "ajv": "^8.17.1",
70
+ "chalk": "^6.0.1",
71
+ "esbuild": "^0.28.2",
72
+ "ink": "^8.0.0",
73
+ "knip": "^6.38.0",
74
+ "react": "^19.3.0",
75
+ "react-devtools-core": "^8.0.0",
76
+ "typescript": "^7.0.2",
77
+ "vite": "^8.3.3",
78
+ "vitest": "^5.0.0"
79
+ },
80
+ "engines": {
81
+ "node": ">=22.12.0"
82
+ }
83
+ }
@@ -0,0 +1,25 @@
1
+ #!/bin/sh
2
+ # Copyright (c) 2026 Flisk contributors
3
+ # SPDX-License-Identifier: MIT
4
+ set -e
5
+
6
+ # Fix Bun hoisted package symlinks that can break when copied across Docker stages.
7
+ for pkg in node_modules/.bun/*/node_modules/*; do
8
+ [ -d "$pkg" ] || continue
9
+ name=$(basename "$pkg")
10
+ case "$name" in
11
+ @*) continue ;;
12
+ esac
13
+ ln -sfn "$(pwd)/$pkg" "node_modules/$name"
14
+ done
15
+
16
+ for pkg in node_modules/.bun/*/node_modules/@*/*; do
17
+ [ -d "$pkg" ] || continue
18
+ scope=$(basename "$(dirname "$pkg")")
19
+ name=$(basename "$pkg")
20
+ if [ "$scope" = "@prisma" ] && [ "$name" = "engines" ]; then
21
+ continue
22
+ fi
23
+ mkdir -p "node_modules/$scope"
24
+ ln -sfn "$(pwd)/$pkg" "node_modules/$scope/$name"
25
+ done
@@ -0,0 +1,466 @@
1
+ #!/bin/sh
2
+ # Copyright (c) 2026 Flisk contributors
3
+ # SPDX-License-Identifier: MIT
4
+ # =============================================================================
5
+ # 🔐 UNIVERSAL INFISICAL ENTRYPOINT - Zero-Code Secret Injection
6
+ # =============================================================================
7
+ #
8
+ # This entrypoint wrapper injects secrets from Infisical WITHOUT modifying
9
+ # any microservice code. The service thinks it's reading from process.env,
10
+ # but Infisical CLI has already populated those variables.
11
+ #
12
+ # How it works:
13
+ # 1. Detects SERVICE_NAME environment variable (set by Tiltfile)
14
+ # 2. Constructs Infisical secret path: /services/{SERVICE_NAME}
15
+ # 3. Authenticates using Machine Identity (Universal Auth)
16
+ # 4. Uses `infisical run` to fetch secrets and inject into process env
17
+ # 5. Executes the original command (bun, npm, node, etc.)
18
+ #
19
+ # Key Benefits:
20
+ # - Zero refactoring: No SDK imports in microservices
21
+ # - Dynamic pathing: Auto-discovers service-specific secrets
22
+ # - Fallback support: Works without Infisical (for local dev)
23
+ # - Prisma compatible: CLI commands also see injected secrets
24
+ #
25
+ # 🗃️ DATABASE VIRTUALIZATION (BigTech Pattern):
26
+ # - Single PostgreSQL container with logical databases
27
+ # - Entrypoint waits for database to be ready before starting app
28
+ # - Saves ~80% RAM compared to 120 separate PostgreSQL containers
29
+ #
30
+ # 🎯 INVERSION OF CONTROL (Tilt as Single Source of Truth):
31
+ # - TILT_DATABASE_URL: If set by Docker Compose/Tilt, ALWAYS wins over Infisical
32
+ # - This ensures Tilt-created databases match application connections
33
+ # - Solves the "hidden DB secret" paradox without modifying Infisical
34
+ # - Precedence: TILT_DATABASE_URL > Infisical DATABASE_URL > Fallback
35
+ # =============================================================================
36
+
37
+ set -e
38
+
39
+ # Colors for terminal output
40
+ RED='\033[0;31m'
41
+ GREEN='\033[0;32m'
42
+ YELLOW='\033[1;33m'
43
+ BLUE='\033[0;34m'
44
+ CYAN='\033[0;36m'
45
+ NC='\033[0m' # No Color
46
+
47
+ log_info() {
48
+ printf "${BLUE}[ENTRYPOINT]${NC} %s\n" "$1"
49
+ }
50
+
51
+ log_success() {
52
+ printf "${GREEN}[ENTRYPOINT]${NC} %s\n" "$1"
53
+ }
54
+
55
+ log_warn() {
56
+ printf "${YELLOW}[ENTRYPOINT]${NC} %s\n" "$1"
57
+ }
58
+
59
+ log_error() {
60
+ printf "${RED}[ENTRYPOINT]${NC} %s\n" "$1"
61
+ }
62
+
63
+ log_db() {
64
+ printf "${CYAN}[DATABASE]${NC} %s\n" "$1"
65
+ }
66
+
67
+ # =============================================================================
68
+ # CONFIGURATION
69
+ # =============================================================================
70
+
71
+ # Service name (auto-detected from container or fallback to env var)
72
+ SERVICE_NAME="${SERVICE_NAME:-unknown-service}"
73
+
74
+ # Infisical configuration
75
+ INFISICAL_SITE_URL="${INFISICAL_SITE_URL:-https://app.infisical.com}"
76
+ INFISICAL_ENV="${INFISICAL_ENV:-dev}"
77
+ INFISICAL_SECRET_PATH="${INFISICAL_SECRET_PATH:-/services/${SERVICE_NAME}}"
78
+
79
+ # Check if Infisical is enabled (can be disabled for local dev)
80
+ INFISICAL_ENABLED="${INFISICAL_ENABLED:-true}"
81
+
82
+ # Database connectivity settings
83
+ DB_WAIT_TIMEOUT="${DB_WAIT_TIMEOUT:-60}"
84
+ DB_WAIT_INTERVAL="${DB_WAIT_INTERVAL:-2}"
85
+
86
+ # =============================================================================
87
+ # 🎯 INVERSION OF CONTROL - Tilt as Single Source of Truth
88
+ # =============================================================================
89
+ #
90
+ # Problem: Tilt creates databases but doesn't know what Infisical contains.
91
+ # This causes DATABASE_URL mismatch (e.g., tdk_project_staff vs staff_db_prod)
92
+ #
93
+ # Solution: TILT_* prefixed variables ALWAYS override Infisical secrets
94
+ # Tilt sets TILT_DATABASE_URL → we export it as DATABASE_URL BEFORE infisical run
95
+ #
96
+ # Variables that can be overridden by Tilt:
97
+ # - TILT_DATABASE_URL → DATABASE_URL
98
+ # - TILT_NATS_URL → NATS_URL
99
+ # - TILT_REDIS_URL → REDIS_URL
100
+ # - TILT_* → * (generic pattern)
101
+ # =============================================================================
102
+
103
+ # List of critical variables that Tilt can override
104
+ TILT_OVERRIDE_VARS="DATABASE_URL NATS_URL REDIS_URL DB_HOST DB_PORT DB_NAME DB_USER DB_PASSWORD"
105
+
106
+ # Track overrides for logging
107
+ TILT_OVERRIDES_APPLIED=0
108
+
109
+ apply_tilt_overrides() {
110
+ log_info "🎯 Checking for Tilt IoC overrides..."
111
+ local overrides_applied=0
112
+
113
+ for var_name in $TILT_OVERRIDE_VARS; do
114
+ tilt_var="TILT_${var_name}"
115
+ tilt_value=$(eval echo \$$tilt_var)
116
+
117
+ if [ -n "$tilt_value" ]; then
118
+ log_success " ✓ TILT_${var_name} overrides ${var_name}"
119
+ export "${var_name}=${tilt_value}"
120
+ overrides_applied=$((overrides_applied + 1))
121
+ TILT_OVERRIDES_APPLIED=$overrides_applied
122
+ fi
123
+ done
124
+
125
+ if [ $overrides_applied -eq 0 ]; then
126
+ log_info " No Tilt overrides found - using Infisical/defaults"
127
+ else
128
+ log_success " 🎯 Applied ${overrides_applied} Tilt override(s) - Tilt is SSOT!"
129
+ fi
130
+ }
131
+
132
+ # =============================================================================
133
+ # DATABASE VIRTUALIZATION FUNCTIONS (BigTech Pattern)
134
+ # =============================================================================
135
+ # Single PostgreSQL container with logical databases per service
136
+ # Saves ~80% RAM on Mac M1/M2 compared to 120 separate containers
137
+
138
+ wait_for_postgres() {
139
+ local db_host="$1"
140
+ local db_port="$2"
141
+ local db_name="$3"
142
+ local timeout="${DB_WAIT_TIMEOUT}"
143
+ local interval="${DB_WAIT_INTERVAL}"
144
+ local elapsed=0
145
+
146
+ log_db "🗃️ Waiting for PostgreSQL: ${db_host}:${db_port}/${db_name}"
147
+ log_db "⏱️ Timeout: ${timeout}s, Check interval: ${interval}s"
148
+
149
+ while [ $elapsed -lt $timeout ]; do
150
+ # TCP check first (port availability)
151
+ if nc -z "${db_host}" "${db_port}" 2>/dev/null; then
152
+ log_db "✓ PostgreSQL port ${db_port} is open"
153
+
154
+ # If we have psql, do a deeper health check
155
+ if command -v psql >/dev/null 2>&1; then
156
+ if PGPASSWORD="${db_password:-}" psql -h "${db_host}" -p "${db_port}" -U "${db_user:-tdk_project}" -d "${db_name}" -c "SELECT 1" >/dev/null 2>&1; then
157
+ log_success "✅ Database ${db_name} is ready!"
158
+ return 0
159
+ fi
160
+ else
161
+ # No psql available, trust TCP check
162
+ log_success "✅ PostgreSQL is reachable (TCP check passed)"
163
+ return 0
164
+ fi
165
+ fi
166
+
167
+ log_db "⏳ Waiting... (${elapsed}/${timeout}s)"
168
+ sleep $interval
169
+ elapsed=$((elapsed + interval))
170
+ done
171
+
172
+ log_warn "⚠️ Database connection timeout after ${timeout}s - proceeding anyway"
173
+ return 1
174
+ }
175
+
176
+ parse_database_url() {
177
+ # Parse DATABASE_URL: postgresql://user:password@host:port/dbname?schema=public
178
+ local url="$1"
179
+
180
+ # Extract components using sed
181
+ db_user=$(echo "$url" | sed -n 's|.*://\([^:]*\):.*|\1|p')
182
+ db_password=$(echo "$url" | sed -n 's|.*://[^:]*:\([^@]*\)@.*|\1|p')
183
+ db_host=$(echo "$url" | sed -n 's|.*@\([^:]*\):.*|\1|p')
184
+ db_port=$(echo "$url" | sed -n 's|.*:\([0-9]*\)/.*|\1|p')
185
+ db_name=$(echo "$url" | sed -n 's|.*/\([^?]*\).*|\1|p')
186
+
187
+ # Export for use in other functions
188
+ export DB_USER="${db_user}"
189
+ export DB_PASSWORD="${db_password}"
190
+ export DB_HOST="${db_host}"
191
+ export DB_PORT="${db_port}"
192
+ export DB_NAME="${db_name}"
193
+ }
194
+
195
+ # =============================================================================
196
+ # INFISICAL VALIDATION
197
+ # =============================================================================
198
+
199
+ validate_infisical_config() {
200
+ local missing=""
201
+
202
+ if [ -z "$INFISICAL_CLIENT_ID" ]; then
203
+ missing="${missing}INFISICAL_CLIENT_ID "
204
+ fi
205
+
206
+ if [ -z "$INFISICAL_CLIENT_SECRET" ]; then
207
+ missing="${missing}INFISICAL_CLIENT_SECRET "
208
+ fi
209
+
210
+ if [ -z "$INFISICAL_PROJECT_ID" ]; then
211
+ missing="${missing}INFISICAL_PROJECT_ID "
212
+ fi
213
+
214
+ if [ -n "$missing" ]; then
215
+ log_warn "Missing Infisical config: ${missing}"
216
+ return 1
217
+ fi
218
+
219
+ return 0
220
+ }
221
+
222
+ # =============================================================================
223
+ # DATABASE CONNECTIVITY VALIDATION (Unified for Database Virtualization)
224
+ # =============================================================================
225
+
226
+ validate_database_connectivity() {
227
+ # Extract database info from DATABASE_URL if available
228
+ if [ -n "$DATABASE_URL" ]; then
229
+ parse_database_url "$DATABASE_URL"
230
+
231
+ log_info "🗃️ Database Virtualization Check:"
232
+ log_info " Host: ${DB_HOST:-unknown}"
233
+ log_info " Port: ${DB_PORT:-5432}"
234
+ log_info " Database: ${DB_NAME:-unknown}"
235
+ log_info " Service: ${SERVICE_NAME}"
236
+
237
+ # Wait for PostgreSQL to be ready
238
+ wait_for_postgres "${DB_HOST}" "${DB_PORT:-5432}" "${DB_NAME}"
239
+ else
240
+ log_warn "DATABASE_URL not set - skipping database connectivity check"
241
+ fi
242
+ }
243
+
244
+ # =============================================================================
245
+ # 📦 PRISMA AUTO-MIGRATION (Architect Level - Uber Pattern)
246
+ # =============================================================================
247
+ #
248
+ # Detects Prisma schema and runs migrations DIRECTLY without relying on
249
+ # package.json scripts. This removes human error dependency and ensures
250
+ # migrations always run regardless of script configuration.
251
+ #
252
+ # Benefits:
253
+ # - No dependency on package.json "db:migrate" script existing
254
+ # - Consistent migration behavior across all services
255
+ # - Self-healing: works even if package.json is misconfigured
256
+ # =============================================================================
257
+
258
+ AUTO_MIGRATE="${AUTO_MIGRATE:-true}"
259
+
260
+ run_prisma_migrations() {
261
+ # Skip if auto-migrate is disabled
262
+ if [ "$AUTO_MIGRATE" = "false" ] || [ "$AUTO_MIGRATE" = "0" ]; then
263
+ log_info "📦 Auto-migration disabled (AUTO_MIGRATE=false)"
264
+ return 0
265
+ fi
266
+
267
+ # Check for Prisma schema in common locations
268
+ local prisma_schema=""
269
+ if [ -f "./prisma/schema.prisma" ]; then
270
+ prisma_schema="./prisma/schema.prisma"
271
+ elif [ -f "./prisma/schema/schema.prisma" ]; then
272
+ prisma_schema="./prisma/schema/schema.prisma"
273
+ elif [ -f "./schema.prisma" ]; then
274
+ prisma_schema="./schema.prisma"
275
+ fi
276
+
277
+ if [ -n "$prisma_schema" ]; then
278
+ log_info "📦 Prisma schema found: ${prisma_schema}"
279
+
280
+ # Auto-resolve failed migrations (P3009) before deploying new ones.
281
+ # In dev/local environments, stale failed records in _prisma_migrations
282
+ # block all subsequent deploys. Resolve them automatically.
283
+ if [ -n "$DATABASE_URL" ]; then
284
+ local deploy_output
285
+ deploy_output=$(bunx prisma migrate deploy 2>&1) || true
286
+ if echo "$deploy_output" | grep -q "P3009"; then
287
+ log_warn "🔧 P3009: Found failed migration(s) — auto-resolving..."
288
+ # Extract migration name(s) from "The `<name>` migration ... failed" lines
289
+ echo "$deploy_output" | sed -n 's/.*The `\([^`]*\)` migration .* failed.*/\1/p' | while IFS= read -r migration_name; do
290
+ log_info " Rolling back: ${migration_name}"
291
+ bunx prisma migrate resolve --rolled-back "$migration_name" 2>&1 || true
292
+ done
293
+ # Retry deploy after resolving failed migrations
294
+ log_info "📦 Retrying database migrations..."
295
+ if bunx prisma migrate deploy 2>&1; then
296
+ log_success "✅ Database migrations completed successfully (after auto-resolve)"
297
+ else
298
+ log_warn "⚠️ Migration still failed after auto-resolve"
299
+ fi
300
+ elif echo "$deploy_output" | grep -q "applied successfully"; then
301
+ log_success "✅ Database migrations completed successfully"
302
+ else
303
+ # No P3009 and no success — could be "already in sync" or other info
304
+ echo "$deploy_output"
305
+ log_info "📦 Migration deploy completed (check output above)"
306
+ fi
307
+ else
308
+ log_warn "📦 DATABASE_URL not set — skipping migration deploy"
309
+ fi
310
+ else
311
+ log_info "📦 No Prisma schema found - skipping auto-migration"
312
+ fi
313
+ }
314
+
315
+ # =============================================================================
316
+ # MAIN EXECUTION
317
+ # =============================================================================
318
+
319
+ main() {
320
+ log_info "═══════════════════════════════════════════════════"
321
+ log_info "🚀 Starting service: ${SERVICE_NAME}"
322
+ log_info "🌍 Environment: ${INFISICAL_ENV}"
323
+ log_info "🔐 Secret path: ${INFISICAL_SECRET_PATH}"
324
+ log_info "🗃️ Database Virtualization: ENABLED (BigTech Pattern)"
325
+ log_info "🎯 Tilt IoC: ENABLED (Single Source of Truth)"
326
+ log_info "═══════════════════════════════════════════════════"
327
+
328
+ # 🎯 CRITICAL: Apply Tilt overrides FIRST (before anything else)
329
+ # This ensures TILT_DATABASE_URL becomes DATABASE_URL BEFORE:
330
+ # 1. validate_database_connectivity() uses it
331
+ # 2. infisical run potentially overwrites it
332
+ apply_tilt_overrides
333
+
334
+ # Check if Infisical is disabled
335
+ if [ "$INFISICAL_ENABLED" = "false" ] || [ "$INFISICAL_ENABLED" = "0" ]; then
336
+ log_warn "Infisical disabled - using direct environment variables"
337
+ validate_database_connectivity
338
+ run_prisma_migrations
339
+ exec "$@"
340
+ fi
341
+
342
+ # Check if infisical CLI is available
343
+ if ! command -v infisical >/dev/null 2>&1; then
344
+ log_warn "Infisical CLI not found - using direct environment variables"
345
+ validate_database_connectivity
346
+ run_prisma_migrations
347
+ exec "$@"
348
+ fi
349
+
350
+ # Validate Infisical configuration
351
+ if ! validate_infisical_config; then
352
+ log_warn "Infisical not configured - falling back to environment variables"
353
+ validate_database_connectivity
354
+ run_prisma_migrations
355
+ exec "$@"
356
+ fi
357
+
358
+ log_success "Infisical configured ✓"
359
+
360
+ # Authenticate with Machine Identity (Universal Auth)
361
+ # This is NON-INTERACTIVE - uses client ID/secret from env vars
362
+ log_info "Authenticating with Machine Identity..."
363
+
364
+ if ! infisical login --method=universal-auth \
365
+ --client-id="$INFISICAL_CLIENT_ID" \
366
+ --client-secret="$INFISICAL_CLIENT_SECRET" \
367
+ --domain="$INFISICAL_SITE_URL" \
368
+ --silent 2>/dev/null; then
369
+ log_warn "Machine Identity auth failed - falling back to environment variables"
370
+ validate_database_connectivity
371
+ run_prisma_migrations
372
+ exec "$@"
373
+ fi
374
+
375
+ log_success "Authenticated ✓"
376
+
377
+ # Validate database connectivity BEFORE starting the app
378
+ # This ensures the shared PostgreSQL is ready (Database Virtualization pattern)
379
+ validate_database_connectivity
380
+
381
+ # 📦 PRISMA AUTO-MIGRATION with Infisical context
382
+ # Run migrations INSIDE infisical run so DATABASE_URL from secrets is available
383
+ # Includes P3009 auto-resolve: marks stale failed migrations as rolled-back
384
+ log_info "📦 Running Prisma migrations with Infisical secrets..."
385
+ infisical run \
386
+ --domain="$INFISICAL_SITE_URL" \
387
+ --projectId="$INFISICAL_PROJECT_ID" \
388
+ --env="$INFISICAL_ENV" \
389
+ --path="$INFISICAL_SECRET_PATH" \
390
+ --expand=false \
391
+ --silent \
392
+ -- sh -c '
393
+ if [ -f "./prisma/schema.prisma" ] || [ -f "./prisma/schema/schema.prisma" ]; then
394
+ output=$(bunx prisma migrate deploy 2>&1) || true
395
+ if echo "$output" | grep -q "P3009"; then
396
+ echo "[ENTRYPOINT] 🔧 P3009: Auto-resolving failed migration(s)..."
397
+ echo "$output" | sed -n "s/.*The \`\([^\`]*\)\` migration .* failed.*/\1/p" | while IFS= read -r mig; do
398
+ echo "[ENTRYPOINT] Rolling back: $mig"
399
+ bunx prisma migrate resolve --rolled-back "$mig" 2>&1 || true
400
+ done
401
+ echo "[ENTRYPOINT] 📦 Retrying migrations..."
402
+ bunx prisma migrate deploy 2>&1 || echo "[ENTRYPOINT] ⚠️ Migration still failed after auto-resolve"
403
+ else
404
+ echo "$output"
405
+ fi
406
+ fi
407
+ ' || true
408
+
409
+ # Execute with Infisical secret injection
410
+ # 🎯 CRITICAL FIX: Instead of using `infisical run` (which always overwrites existing env vars),
411
+ # we fetch secrets and only export vars that aren't already set. This preserves TILT_* overrides.
412
+ # Precedence: TILT_* > Infisical > Defaults
413
+
414
+ log_info "Fetching secrets from Infisical..."
415
+
416
+ # Fetch secrets in plain format (KEY=VALUE per line)
417
+ # Use a temporary file to capture output safely
418
+ temp_secrets=$(mktemp)
419
+ trap "rm -f $temp_secrets" EXIT
420
+
421
+ infisical secrets \
422
+ --domain="$INFISICAL_SITE_URL" \
423
+ --projectId="$INFISICAL_PROJECT_ID" \
424
+ --env="$INFISICAL_ENV" \
425
+ --path="$INFISICAL_SECRET_PATH" \
426
+ --expand=false \
427
+ --plain \
428
+ --silent > "$temp_secrets" 2>/dev/null || true
429
+
430
+ # Only export secrets that aren't already set in the environment
431
+ # This preserves TILT_DATABASE_URL -> DATABASE_URL override
432
+ secrets_exported=0
433
+ if [ -s "$temp_secrets" ]; then
434
+ while IFS= read -r line; do
435
+ # Skip empty lines
436
+ [ -z "$line" ] && continue
437
+
438
+ # Split on first = only (in case value contains =)
439
+ key="${line%%=*}"
440
+ value="${line#*=}"
441
+
442
+ # Only export if not already set in environment
443
+ eval "current_val=\$$key"
444
+ if [ -z "$current_val" ]; then
445
+ export "${key}=${value}"
446
+ secrets_exported=$((secrets_exported + 1))
447
+ fi
448
+ done < "$temp_secrets"
449
+ fi
450
+
451
+ log_success "Injected ${secrets_exported} secret(s) from Infisical (preserving ${TILT_OVERRIDES_APPLIED} TILT override(s))"
452
+ log_info "🎯 Final DATABASE_URL: ${DATABASE_URL:-not-set}"
453
+ log_success "🎉 Service ${SERVICE_NAME} starting with Database Virtualization!"
454
+
455
+ exec "$@"
456
+ }
457
+
458
+ # Handle the case where no command is provided
459
+ if [ $# -eq 0 ]; then
460
+ log_error "No command provided"
461
+ log_info "Usage: /entrypoint.sh <command> [args...]"
462
+ log_info "Example: /entrypoint.sh bun run src/index.ts"
463
+ exit 1
464
+ fi
465
+
466
+ main "$@"