@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,154 @@
1
+ #!/bin/sh
2
+ # Copyright (c) 2026 Flisk contributors
3
+ # SPDX-License-Identifier: MIT
4
+ set -e
5
+
6
+ # =============================================================================
7
+ # CRITICAL FIX: Bun concurrency and DNS settings for Docker/Colima
8
+ # These prevent "Resolving dependencies" hang
9
+ # =============================================================================
10
+ export BUN_INSTALL_CONCURRENCY=4 # Default is 16+, reduce for Docker
11
+ export UV_THREADPOOL_SIZE=4 # Limit threads (default is 128)
12
+ export BUN_NETWORK_TIMEOUT=30000 # 30s timeout per request
13
+ export BUN_RESOLVE_TIMEOUT=60000 # 60s for resolution phase
14
+
15
+ # DNS fixes for Colima/Docker
16
+ export NODE_OPTIONS="--dns-result-order=ipv4first"
17
+
18
+ start_ts=$(date +%s)
19
+ echo "⏱️ install-deps start: $(date '+%Y-%m-%d %H:%M:%S %z')"
20
+ echo "🔧 Bun concurrency: $BUN_INSTALL_CONCURRENCY, Threadpool: $UV_THREADPOOL_SIZE"
21
+
22
+ finish_install_timer() {
23
+ end_ts=$(date +%s)
24
+ echo "install-deps duration: $((end_ts-start_ts))s"
25
+ }
26
+ trap 'finish_install_timer' EXIT INT TERM
27
+
28
+ export NODE_ENV=development
29
+
30
+ # Use persistent cache directory (Docker layer, not mount)
31
+ export BUN_INSTALL_CACHE_DIR=/cache/bun
32
+ mkdir -p $BUN_INSTALL_CACHE_DIR
33
+
34
+ # =============================================================================
35
+ # Check Verdaccio registry (premium feature — only required when VERDACCIO_LICENSE_KEY is set)
36
+ # Without a license key, skip Verdaccio and fall back to public npm registry.
37
+ # =============================================================================
38
+ if [ -z "${TDK_LICENSE_KEY:-}" ]; then
39
+ echo "ℹ️ TDK_LICENSE_KEY not set — skipping private registry (public npm only)"
40
+ VERDACCIO_URL=""
41
+ else
42
+ VERDACCIO_URL="http://localhost:4873"
43
+ echo "🔍 Checking Verdaccio registry at $VERDACCIO_URL..."
44
+ if ! wget -q --spider --timeout=3 "$VERDACCIO_URL" 2>/dev/null; then
45
+ VERDACCIO_URL="http://host.docker.internal:4873"
46
+ echo " localhost unreachable, trying $VERDACCIO_URL..."
47
+ if ! wget -q --spider --timeout=3 "$VERDACCIO_URL" 2>/dev/null; then
48
+ echo "❌ Verdaccio not reachable at localhost:4873 or host.docker.internal:4873. Build will fail."
49
+ echo " Ensure Verdaccio is running: docker ps | grep verdaccio"
50
+ exit 1
51
+ fi
52
+ fi
53
+ echo "✅ Verdaccio available at $VERDACCIO_URL"
54
+ fi
55
+
56
+ # =============================================================================
57
+ # CRITICAL FIX: Reduced timeout for faster failure detection (was 900s)
58
+ # Using 60s to fail fast and retry, rather than hanging for 15 minutes
59
+ # =============================================================================
60
+ # CRITICAL FIX: Extended timeout for full dependency resolution
61
+ # 60s was too short - packages resolve but need time for transitive deps
62
+ INSTALL_TIMEOUT_SECONDS="${BUN_INSTALL_TIMEOUT_SECONDS:-300}"
63
+ echo "📦 Dependency install timeout: ${INSTALL_TIMEOUT_SECONDS}s (Verdaccio packages available)"
64
+
65
+ INSTALL_DEPS_VERBOSE="${INSTALL_DEPS_VERBOSE:-0}"
66
+ if [ "$INSTALL_DEPS_VERBOSE" = "1" ]; then
67
+ echo "🚀 Installing dependencies (verbose)..."
68
+ BUN_VERBOSE_FLAG="--verbose"
69
+ FAIL_TAIL_LINES=200
70
+ else
71
+ echo "📦 Installing dependencies..."
72
+ BUN_VERBOSE_FLAG=""
73
+ FAIL_TAIL_LINES=50
74
+ fi
75
+
76
+ BUN_INSTALL_LOG=/tmp/bun-install.log
77
+
78
+ # Start tail in background for live logging
79
+ touch "$BUN_INSTALL_LOG"
80
+ tail -n 20 -f "$BUN_INSTALL_LOG" 2>/dev/null &
81
+ TAIL_PID=$!
82
+ cleanup_tail() {
83
+ kill "$TAIL_PID" 2>/dev/null || true
84
+ }
85
+ trap 'cleanup_tail; finish_install_timer' EXIT INT TERM
86
+
87
+ # =============================================================================
88
+ # Cache configuration: Use persistent Docker layer path
89
+ # =============================================================================
90
+ # Uses /cache/bun (persistent Docker layer path, not a mount).
91
+ # This avoids the "FileNotFound when create temporary directory" bug
92
+ # that occurs with Docker --mount=type=cache, while still persisting
93
+ # cache across rebuilds via Docker layer caching.
94
+ echo "🔧 Using /cache/bun for Bun cache (persistent Docker layer)..."
95
+ export BUN_CACHE_DIR="/cache/bun"
96
+ mkdir -p "$BUN_CACHE_DIR"
97
+ BUN_CACHE_FLAG="--cache-dir=/cache/bun"
98
+ echo "📁 Cache location: /cache/bun"
99
+
100
+ # =============================================================================
101
+ # Install function with timeout and logging
102
+ # Uses constrained concurrency to prevent "Resolving dependencies" hang
103
+ # =============================================================================
104
+ run_install() {
105
+ local args="$1"
106
+ local attempt="$2"
107
+
108
+ echo "📌 Attempt $attempt: bun install $args (concurrency: $BUN_INSTALL_CONCURRENCY)"
109
+ set +e
110
+ # Use timeout with explicit concurrency limit
111
+ timeout "$INSTALL_TIMEOUT_SECONDS" \
112
+ bun install $args \
113
+ --concurrent-tasks "$BUN_INSTALL_CONCURRENCY" \
114
+ --concurrent-scripts "$BUN_INSTALL_CONCURRENCY" \
115
+ $BUN_CACHE_FLAG $BUN_VERBOSE_FLAG >"$BUN_INSTALL_LOG" 2>&1
116
+ local code=$?
117
+ set -e
118
+ return $code
119
+ }
120
+
121
+ # =============================================================================
122
+ # Install with lockfile but allow updates within resolved ranges
123
+ # =============================================================================
124
+ ATTEMPT=1
125
+ INSTALL_CODE=0
126
+
127
+ run_install "--force" $ATTEMPT
128
+ INSTALL_CODE=$?
129
+ ATTEMPT=$((ATTEMPT + 1))
130
+
131
+ cleanup_tail
132
+
133
+ # =============================================================================
134
+ # Final status check
135
+ # =============================================================================
136
+ if [ "$INSTALL_CODE" -ne 0 ]; then
137
+ echo "❌ Dependency installation failed after $((ATTEMPT - 1)) attempts (exit $INSTALL_CODE). Last ${FAIL_TAIL_LINES} lines:"
138
+ tail -n "$FAIL_TAIL_LINES" "$BUN_INSTALL_LOG"
139
+ exit 1
140
+ fi
141
+
142
+ if [ ! -d "node_modules" ] || [ -z "$(ls -A node_modules 2>/dev/null)" ]; then
143
+ echo "❌ Dependency installation produced empty node_modules. Last ${FAIL_TAIL_LINES} lines:"
144
+ tail -n "$FAIL_TAIL_LINES" "$BUN_INSTALL_LOG"
145
+ exit 1
146
+ fi
147
+
148
+ echo "✅ Dependency installation complete"
149
+ if [ "$INSTALL_DEPS_VERBOSE" = "1" ]; then
150
+ echo "📊 Total packages: $(ls node_modules 2>/dev/null | wc -l)"
151
+ du -sh node_modules 2>/dev/null || true
152
+ fi
153
+
154
+ # No cache cleanup needed (--no-cache flag used)
@@ -0,0 +1,14 @@
1
+ #!/bin/sh
2
+ # Copyright (c) 2026 Flisk contributors
3
+ # SPDX-License-Identifier: MIT
4
+ set -e
5
+
6
+ # Fix Bun module resolution: .prisma/client must be reachable from .bun linker paths.
7
+ for dir in node_modules/.bun/@prisma+client*/node_modules; do
8
+ [ -d "$dir" ] && ln -sf "$(pwd)/node_modules/.prisma" "$dir/.prisma" || true
9
+ done
10
+
11
+ # Also fix malformed @prisma/client package.json in Bun cache if present.
12
+ for pkg in node_modules/.bun/@prisma+client*/node_modules/@prisma/client/package.json; do
13
+ [ -f "$pkg" ] && echo '{"name":"@prisma/client","main":"index.js","types":"index.d.ts"}' > "$pkg" || true
14
+ done
@@ -0,0 +1,58 @@
1
+ #!/bin/sh
2
+ # Copyright (c) 2026 Flisk contributors
3
+ # SPDX-License-Identifier: MIT
4
+ set -e
5
+
6
+ PRISMA_EXPORT_GENERATED_CLIENT="${PRISMA_EXPORT_GENERATED_CLIENT:-1}"
7
+ PRISMA_DOT_DIR="node_modules/.prisma"
8
+ PRISMA_DOT_CLIENT="node_modules/.prisma/client"
9
+
10
+ # Normalize Prisma output for both import styles: ../generated-client and node_modules/.prisma/client
11
+ if [ ! -d "$PRISMA_DOT_CLIENT" ] && [ -d /app/node_modules/.prisma/client ]; then
12
+ mkdir -p "$PRISMA_DOT_DIR"
13
+ cp -R /app/node_modules/.prisma/client "$PRISMA_DOT_CLIENT"
14
+ fi
15
+
16
+ if [ "$PRISMA_EXPORT_GENERATED_CLIENT" = "1" ] && [ -d "$PRISMA_DOT_CLIENT" ] && [ ! -d generated-client ] && [ ! -f generated-client.ts ]; then
17
+ printf "export * from './node_modules/.prisma/client/client';\n" > generated-client.ts
18
+ fi
19
+
20
+ mkdir -p "$PRISMA_DOT_CLIENT"
21
+ if [ -d generated-client ] && [ -z "$(ls -A "$PRISMA_DOT_CLIENT" 2>/dev/null)" ]; then
22
+ cp -r generated-client/. "$PRISMA_DOT_CLIENT/"
23
+ fi
24
+
25
+ # Prisma v7 prisma-client may emit TS-only artifacts; add declaration/js entrypoints
26
+ if [ -f "$PRISMA_DOT_CLIENT/client.ts" ] && [ ! -f "$PRISMA_DOT_CLIENT/index.d.ts" ]; then
27
+ printf "export * from './client';\n" > "$PRISMA_DOT_CLIENT/index.d.ts"
28
+ fi
29
+ if [ -f "$PRISMA_DOT_CLIENT/client.ts" ] && [ ! -f "$PRISMA_DOT_CLIENT/default.d.ts" ]; then
30
+ printf "export * from './client';\n" > "$PRISMA_DOT_CLIENT/default.d.ts"
31
+ fi
32
+ if [ -f "$PRISMA_DOT_CLIENT/client.ts" ] && [ ! -f "$PRISMA_DOT_CLIENT/index.js" ]; then
33
+ printf "export * from './client.js';\n" > "$PRISMA_DOT_CLIENT/index.js"
34
+ fi
35
+
36
+ # Prisma v7 may generate malformed package.json under Bun
37
+ if [ -f "$PRISMA_DOT_CLIENT/client.ts" ]; then
38
+ echo '{"name":"prisma-client-generated","types":"index.d.ts","main":"index.js"}' > "$PRISMA_DOT_CLIENT/package.json"
39
+ fi
40
+
41
+ # Prisma v7: @prisma/client/default.js requires .prisma/client/default
42
+ if [ -d "$PRISMA_DOT_CLIENT" ] && [ ! -f "$PRISMA_DOT_CLIENT/default.js" ]; then
43
+ printf "module.exports = require('./client.js');\n" > "$PRISMA_DOT_CLIENT/default.js"
44
+ fi
45
+
46
+ # Ensure @prisma/client package can resolve '.prisma/client/*' under Bun hoisting
47
+ if [ -d "$PRISMA_DOT_DIR" ]; then
48
+ for pkg in node_modules/@prisma/client node_modules/.bun/@prisma+client*/node_modules/@prisma/client; do
49
+ [ -d "$pkg" ] && ln -sfn "$(pwd)/$PRISMA_DOT_DIR" "$pkg/.prisma" || true
50
+ done
51
+ fi
52
+
53
+ # Also fix corrupted package.json in .bun cache
54
+ for pkg in node_modules/.bun/@prisma+client*/node_modules/@prisma/client/package.json; do
55
+ [ -f "$pkg" ] && echo '{"name":"@prisma/client","main":"index.js","types":"index.d.ts"}' > "$pkg" || true
56
+ done
57
+
58
+ test -f "$PRISMA_DOT_CLIENT/client.ts" -o -f "$PRISMA_DOT_CLIENT/index.d.ts" || true
@@ -0,0 +1,72 @@
1
+ # =============================================================================
2
+ # 🚫 Flisk CLI - TILT IGNORE FILE
3
+ # =============================================================================
4
+ # SYSTEM-GENERATED BY Flisk CLI - DO NOT EDIT
5
+ # Source: .tdk/project.json
6
+ # Regenerate with: flisk config regenerate
7
+ # =============================================================================
8
+ #
9
+ # This file tells Tilt which directories to ignore during file watching.
10
+ # Prevents fsnotify buffer overflow and reduces unnecessary rebuilds.
11
+ #
12
+ # =============================================================================
13
+
14
+ # Dependency directories
15
+ **/node_modules
16
+
17
+ # Build outputs
18
+ **/dist
19
+ **/build
20
+ **/out
21
+ **/.output
22
+
23
+ # Version control
24
+ **/.git
25
+
26
+ # Generated files
27
+ **/.prisma
28
+ **/.turbo
29
+ **/coverage
30
+ **/tmp
31
+ **/temp
32
+
33
+ # IDE files
34
+ **/.idea
35
+ **/.vscode
36
+ **/*.swp
37
+ **/*.swo
38
+
39
+ # OS files
40
+ **/.DS_Store
41
+ **/Thumbs.db
42
+
43
+ # Docker volumes and data
44
+ **/postgres-data
45
+ **/redis-data
46
+ **/verdaccio-storage
47
+ **/verdaccio-conf
48
+ **/verdaccio-plugins
49
+
50
+ # Flisk generated outputs (avoid watching generated files)
51
+ **/.tdk/.tdk-out
52
+ **/.autogenerated/**
53
+ **/.autogenerated/*.autogenerated
54
+ **/.autogenerated/*.autogenerated.json
55
+ **/.autogenerated/*.autogenerated.yml
56
+ **/.autogenerated/*.autogenerated.toml
57
+
58
+ # Logs
59
+ **/*.log
60
+ **/logs
61
+
62
+ # Test outputs
63
+ **/test-results
64
+ **/playwright-report
65
+ **/.nyc_output
66
+
67
+ # Cache directories
68
+ **/.cache
69
+ **/.npm
70
+ **/.bun
71
+ **/bun.lockb
72
+ docker
@@ -0,0 +1,220 @@
1
+ #!/usr/bin/env starlark
2
+ # -*- coding: utf-8 -*-
3
+ # =============================================================================
4
+ # 🔧 TILT SERVICE DEFAULTS MASTER CONFIG
5
+ # =============================================================================
6
+ # SYSTEM-GENERATED BY Flisk CLI - DO NOT EDIT
7
+ # Source: Flisk Platform Standards v{{version}}
8
+ # Output: .tdk/.tdk-out/
9
+ # Regenerate with: flisk config regenerate
10
+ # =============================================================================
11
+
12
+ # Port Configuration
13
+ BASE_PORT_FRONTEND = {{ports.frontend.base}}
14
+ BASE_PORT_BACKEND = {{ports.backend.base}}
15
+ BASE_PORT_HEALTH = {{ports.health.base}}
16
+
17
+ # Port ranges
18
+ PORT_RANGE_FRONTEND_START = {{ports.frontend.start}}
19
+ PORT_RANGE_FRONTEND_END = {{ports.frontend.end}}
20
+ PORT_RANGE_BACKEND_START = {{ports.backend.start}}
21
+ PORT_RANGE_BACKEND_END = {{ports.backend.end}}
22
+ PORT_RANGE_HEALTH_START = {{ports.health.start}}
23
+ PORT_RANGE_HEALTH_END = {{ports.health.end}}
24
+
25
+ # Service Naming Patterns (required by Flisk engine)
26
+ NAMING_PATTERNS = {
27
+ "backend_suffix": "{{naming.backend}}",
28
+ "frontend_suffix": "{{naming.frontend}}",
29
+ "migrator_suffix": "{{naming.migrator}}",
30
+ "library_suffix": "{{naming.library}}",
31
+ "sdk_suffix": "{{naming.sdk}}",
32
+ "worker_suffix": "{{naming.worker}}",
33
+ "valid_separators": {{starlarkArray naming.validSeparators}},
34
+ "max_length": {{naming.maxLength}},
35
+ "min_length": {{naming.minLength}},
36
+ }
37
+
38
+ # Traefik Configuration (required by Flisk engine)
39
+ TRAEFIK_CONFIG = {
40
+ "entrypoint": "{{traefik.entrypoint}}",
41
+ "network": "{{traefik.network}}",
42
+ "default_host": "{{traefik.defaultHost}}",
43
+ "default_port": {{traefik.defaultPort}},
44
+ "tls_enabled": {{starlark traefik.tlsEnabled}},
45
+ "entrypoints": {{starlarkArray traefik.entrypoints}},
46
+ "middlewares": {{starlarkArray traefik.middlewares}},
47
+ "tls": {"enabled": {{starlark traefik.tlsEnabled}} },
48
+ "healthcheck_path": "{{traefik.healthcheckPath}}",
49
+ "healthcheck_interval": "{{traefik.healthcheckInterval}}",
50
+ "healthcheck_timeout": "{{traefik.healthcheckTimeout}}",
51
+ "frontend_priority_base": {{traefik.frontendPriorityBase}},
52
+ }
53
+
54
+ # Health Check Configuration
55
+ HEALTH_CHECK_PATH = "{{health.path}}"
56
+ HEALTH_CHECK_LIVE = "{{health.live}}"
57
+ HEALTH_CHECK_READY = "{{health.ready}}"
58
+ HEALTH_CHECK_TIMEOUT = {{health.timeout}}
59
+
60
+ # File watch ignore patterns (to prevent fsnotify buffer overflow)
61
+ def get_filewatch_ignore_patterns(resource_path="."):
62
+ """
63
+ Returns list of file patterns to ignore for Tilt filewatch.
64
+
65
+ Args:
66
+ resource_path: Base path of the service
67
+
68
+ Returns:
69
+ List of patterns to ignore
70
+ """
71
+ ignores = [
72
+ {{#each filewatchIgnores}}
73
+ resource_path + "/{{this}}",
74
+ {{/each}}
75
+ ]
76
+ return ignores
77
+
78
+ def get_port_config():
79
+ """Returns the complete port allocation strategy."""
80
+ return {
81
+ "frontend": {
82
+ "base": BASE_PORT_FRONTEND,
83
+ "range_start": PORT_RANGE_FRONTEND_START,
84
+ "range_end": PORT_RANGE_FRONTEND_END,
85
+ },
86
+ "backend": {
87
+ "base": BASE_PORT_BACKEND,
88
+ "range_start": PORT_RANGE_BACKEND_START,
89
+ "range_end": PORT_RANGE_BACKEND_END,
90
+ },
91
+ "health": {
92
+ "base": BASE_PORT_HEALTH,
93
+ "range_start": PORT_RANGE_HEALTH_START,
94
+ "range_end": PORT_RANGE_HEALTH_END,
95
+ },
96
+ }
97
+
98
+ def get_resource_port(resource_type, stack_index=0, resource_index=0):
99
+ """
100
+ Calculate service port based on type and indices.
101
+
102
+ Args:
103
+ resource_type: "frontend" or "backend"
104
+ stack_index: Index of the stack (for port allocation)
105
+ resource_index: Index of the service within stack
106
+
107
+ Returns:
108
+ Port number
109
+ """
110
+ if resource_type == "frontend":
111
+ base = BASE_PORT_FRONTEND
112
+ elif resource_type == "backend":
113
+ base = BASE_PORT_BACKEND
114
+ else:
115
+ fail("Unknown service type: {}".format(resource_type))
116
+
117
+ # Allocate ports: base + (stack_index * 100) + resource_index
118
+ return base + (stack_index * 100) + resource_index
119
+
120
+ def get_health_check_config():
121
+ """Returns health check endpoint configuration."""
122
+ return {
123
+ "path": HEALTH_CHECK_PATH,
124
+ "live": HEALTH_CHECK_LIVE,
125
+ "ready": HEALTH_CHECK_READY,
126
+ "timeout": HEALTH_CHECK_TIMEOUT,
127
+ }
128
+
129
+ def get_build_config():
130
+ """Returns Docker build configuration."""
131
+ return {
132
+ "dockerfile": "{{docker.dockerfile}}",
133
+ "context": "{{docker.context}}",
134
+ {{#if docker.platform}}"platform": "{{docker.platform}}",{{/if}}
135
+ "cache_from": [],
136
+ }
137
+
138
+ def get_runtime_config():
139
+ """Returns runtime command configuration."""
140
+ return {
141
+ "backend": {
142
+ "command": "{{runtime.backend.command}}",
143
+ "args": {{starlarkArray runtime.backend.args}},
144
+ "env": {{starlark runtime.backend.env}},
145
+ },
146
+ "frontend": {
147
+ "command": "{{runtime.frontend.command}}",
148
+ "args": {{starlarkArray runtime.frontend.args}},
149
+ "env": {{starlark runtime.frontend.env}},
150
+ },
151
+ }
152
+
153
+ def get_resource_defaults():
154
+ """Returns complete service defaults."""
155
+ return {
156
+ "port": get_port_config(),
157
+ "health": get_health_check_config(),
158
+ "build": get_build_config(),
159
+ "runtime": get_runtime_config(),
160
+ }
161
+
162
+ def validate_resource_defaults(config):
163
+ """
164
+ Validates service configuration against defaults.
165
+
166
+ Args:
167
+ config: Service configuration dict
168
+
169
+ Returns:
170
+ Dict with validation results
171
+ """
172
+ warnings = []
173
+ errors = []
174
+
175
+ # Validate port allocation
176
+ if "port" in config:
177
+ port = config["port"]
178
+ if port < 1024:
179
+ errors.append("Port {} is in reserved range (< 1024)".format(port))
180
+ elif port > 65535:
181
+ errors.append("Port {} exceeds maximum (65535)".format(port))
182
+
183
+ # Validate health check path
184
+ if "healthCheckPath" in config:
185
+ path = config["healthCheckPath"]
186
+ if not path.startswith("/"):
187
+ errors.append("Health check path must start with /: {}".format(path))
188
+
189
+ return {
190
+ "valid": len(errors) == 0,
191
+ "errors": errors,
192
+ "warnings": warnings,
193
+ }
194
+
195
+ # Export public API
196
+ __all__ = [
197
+ "get_port_config",
198
+ "get_resource_port",
199
+ "get_health_check_config",
200
+ "get_filewatch_ignore_patterns",
201
+ "get_build_config",
202
+ "get_runtime_config",
203
+ "get_resource_defaults",
204
+ "validate_resource_defaults",
205
+ "BASE_PORT_FRONTEND",
206
+ "BASE_PORT_BACKEND",
207
+ "BASE_PORT_HEALTH",
208
+ "PORT_RANGE_FRONTEND_START",
209
+ "PORT_RANGE_FRONTEND_END",
210
+ "PORT_RANGE_BACKEND_START",
211
+ "PORT_RANGE_BACKEND_END",
212
+ "PORT_RANGE_HEALTH_START",
213
+ "PORT_RANGE_HEALTH_END",
214
+ "HEALTH_CHECK_PATH",
215
+ "HEALTH_CHECK_LIVE",
216
+ "HEALTH_CHECK_READY",
217
+ "HEALTH_CHECK_TIMEOUT",
218
+ "NAMING_PATTERNS",
219
+ "TRAEFIK_CONFIG",
220
+ ]
@@ -0,0 +1,149 @@
1
+ #!/usr/bin/env starlark
2
+ # -*- coding: utf-8 -*-
3
+ # =============================================================================
4
+ # 🏗️ TILT TECH STACK MASTER CONFIG
5
+ # =============================================================================
6
+ # SYSTEM-GENERATED BY Flisk CLI - DO NOT EDIT
7
+ # Source: Flisk Platform Standards v{{version}}
8
+ # Output: .tdk/.tdk-out/
9
+ # Regenerate with: flisk config regenerate
10
+ # =============================================================================
11
+
12
+ def get_tech_stack():
13
+ """Returns the complete tech stack definition."""
14
+ return {
15
+ "bundler": "{{tech.bundler}}",
16
+ "runtime": "{{tech.runtime}}",
17
+ "language": "{{tech.language}}",
18
+ "orm": "{{tech.orm}}",
19
+ "messaging": "{{tech.messaging}}",
20
+ "linting": "{{tech.linting}}",
21
+ "testing": "{{tech.testing}}",
22
+ "web_framework": "{{tech.framework}}",
23
+ }
24
+
25
+ # Constants for direct import
26
+ BUNDLER = "{{tech.bundler}}"
27
+ RUNTIME = "{{tech.runtime}}"
28
+ ORM = "{{tech.orm}}"
29
+ MESSAGING = "{{tech.messaging}}"
30
+ LINTING = "{{tech.linting}}"
31
+ TESTING = "{{tech.testing}}"
32
+ WEB_FRAMEWORK = "{{tech.framework}}"
33
+ LANGUAGE = "{{tech.language}}"
34
+
35
+ TECH_STACK = get_tech_stack()
36
+
37
+ def validate_tech_stack(config, strict=False):
38
+ """
39
+ Validates a configuration against the platform tech stack.
40
+
41
+ Args:
42
+ config: Dict with tech stack choices to validate
43
+ strict: If True, fails on any non-compliance. If False, warns.
44
+
45
+ Returns:
46
+ Dict with validation results: {"valid": bool, "errors": [], "warnings": []}
47
+ """
48
+ errors = []
49
+ warnings = []
50
+
51
+ # Check for override reason
52
+ has_override = "_override_reason" in config and config["_override_reason"]
53
+
54
+ # Strict validations (must match platform standard)
55
+ strict_validations = {
56
+ "bundler": "{{tech.bundler}}",
57
+ "runtime": "{{tech.runtime}}",
58
+ "orm": "{{tech.orm}}",
59
+ "messaging": "{{tech.messaging}}",
60
+ }
61
+
62
+ for key, standard in strict_validations.items():
63
+ if key in config:
64
+ value = config[key]
65
+ if value.lower() != standard.lower():
66
+ if has_override:
67
+ warnings.append("Override active: {}='{}' (Reason: {})".format(
68
+ key, value, config["_override_reason"]
69
+ ))
70
+ elif strict:
71
+ errors.append(
72
+ ("❌ Tech Stack Error: {}: '{}' is not supported. " +
73
+ "Platform standard is '{}'. Use _override_reason to document exceptions.").format(
74
+ key, value, standard
75
+ )
76
+ )
77
+ else:
78
+ warnings.append(
79
+ ("⚠️ Tech Stack Warning: {}: '{}' is not standard. " +
80
+ "Platform standard is '{}'.").format(key, value, standard)
81
+ )
82
+
83
+ # Optional validations (warnings if missing or different)
84
+ optional_validations = {
85
+ "linting": "{{tech.linting}}",
86
+ "testing": "{{tech.testing}}",
87
+ }
88
+
89
+ for key, standard in optional_validations.items():
90
+ if key in config:
91
+ value = config[key]
92
+ if value.lower() != standard.lower():
93
+ if has_override:
94
+ warnings.append("Override active: {}='{}' (Reason: {})".format(
95
+ key, value, config["_override_reason"]
96
+ ))
97
+ else:
98
+ warnings.append(
99
+ "⚠️ Tech Stack Warning: {}: '{}' differs from standard '{}'.".format(
100
+ key, value, standard
101
+ )
102
+ )
103
+
104
+ return {
105
+ "valid": len(errors) == 0,
106
+ "errors": errors,
107
+ "warnings": warnings,
108
+ }
109
+
110
+ def assert_tech_stack(config, strict=False):
111
+ """
112
+ Validates tech stack and fails fast on errors.
113
+
114
+ Args:
115
+ config: Dict with tech stack choices to validate
116
+ strict: If True, fails on any non-compliance
117
+
118
+ Raises:
119
+ Exception: If validation fails with errors
120
+ """
121
+ result = validate_tech_stack(config, strict)
122
+
123
+ # Print warnings
124
+ for warning in result["warnings"]:
125
+ print(warning)
126
+
127
+ # Fail on errors
128
+ if not result["valid"]:
129
+ for error in result["errors"]:
130
+ print(error)
131
+ fail("Tech stack validation failed. See errors above.")
132
+
133
+ return result
134
+
135
+ # Export public API
136
+ __all__ = [
137
+ "get_tech_stack",
138
+ "validate_tech_stack",
139
+ "assert_tech_stack",
140
+ "BUNDLER",
141
+ "RUNTIME",
142
+ "ORM",
143
+ "MESSAGING",
144
+ "LINTING",
145
+ "TESTING",
146
+ "WEB_FRAMEWORK",
147
+ "LANGUAGE",
148
+ "TECH_STACK",
149
+ ]