@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,239 @@
1
+ # Copyright (c) 2026 Flisk contributors
2
+ # SPDX-License-Identifier: MIT
3
+ # =============================================================================
4
+ # 📋 MANIFEST MODULE - MINIMAL LOADER
5
+ # =============================================================================
6
+ # Loads JSON manifests (developer-defined) - source of truth
7
+ # YAML is generated for Tilt resource tracking only, not for data parsing
8
+ # =============================================================================
9
+
10
+ # === INLINED CONSTANTS for pure extension loading ===
11
+ BASE_PORT_FRONTEND = 3000
12
+ BASE_PORT_BACKEND = 4000
13
+
14
+ # Inlined for pure extension loading
15
+ def get_synthesis_config():
16
+ return {}
17
+
18
+ HEALTH_CHECK_PATH = "/health"
19
+ DEFAULTS = {}
20
+
21
+ # === END INLINED CONSTANTS ===
22
+
23
+
24
+ load("./parser.star", "generated_string_error")
25
+ load("./constants.star",
26
+ "MANIFEST_FILENAME",
27
+ "MANIFEST_DEFAULTS",
28
+ "VALID_APP_TYPES",
29
+ "DEFAULT_SYNCS",
30
+ )
31
+
32
+
33
+
34
+ def load_from_file(path):
35
+ """Load a manifest file.
36
+
37
+ JSON files are the source of truth (developer-defined).
38
+ YAML files are generated from JSON for Tilt resource tracking only.
39
+ """
40
+ # Prepend project root to relative paths for correct resolution
41
+ project_root = os.environ.get('TDK_PROJECT_ROOT', '')
42
+ if project_root and not path.startswith('/'):
43
+ full_path = project_root + '/' + path
44
+ else:
45
+ full_path = path
46
+
47
+ content_raw = read_file(full_path, default="")
48
+ content = str(content_raw) # Convert blob to string
49
+ if not content:
50
+ return struct(manifest=None, error="File not found: " + path)
51
+
52
+ manifest = None
53
+
54
+ # JSON files: parse directly (source of truth)
55
+ if path.endswith('.json'):
56
+ manifest = decode_json(content)
57
+ if manifest == None:
58
+ return struct(manifest=None, error="Failed to parse JSON: " + path)
59
+ elif path.endswith('.yaml') or path.endswith('.yml'):
60
+ # YAML files should not be parsed for data - they are for Tilt resource tracking only
61
+ # Return error to indicate JSON should be used instead
62
+ return struct(manifest=None, error="YAML files are for Tilt resource tracking only. Use JSON for data: " + path.replace('.yaml', '.json').replace('.yml', '.json'))
63
+ else:
64
+ # Try JSON parsing
65
+ manifest = decode_json(content)
66
+
67
+ if manifest == None:
68
+ return struct(manifest=None, error="Invalid manifest: " + path)
69
+
70
+ # Refuse service.json values that would add keys to generated config (GHSA-phgf-pww4-7jxc). Every Tilt discovery path loads service.json here.
71
+ if type(manifest) == "dict":
72
+ unsafe_field_error = generated_string_error(manifest, path)
73
+ if unsafe_field_error:
74
+ fail(unsafe_field_error)
75
+
76
+ # An `mcp` resource is a Model Context Protocol server: an HTTP service on Bun that is built, routed and health-checked
77
+ # exactly like a backend. Every backend code path keys off appType == 'backend', so normalise here, once, at the single
78
+ # place a service.json becomes a manifest, and keep a flag so the original type is not lost.
79
+ if type(manifest) == "dict" and manifest.get("appType") == "mcp":
80
+ manifest["appType"] = "backend"
81
+ manifest["mcp"] = True
82
+
83
+ # An `agent` resource is a long-running AI agent: a Bun HTTP service (/health, /ready, SIGTERM drain) that is built, routed
84
+ # and health-checked as a backend, so it reuses the backend code paths and boots health-gated. Its settings are kept under
85
+ # manifest["agent"] for the generators (state volume, AGENT_* environment), with durability defaulting to files.
86
+ if type(manifest) == "dict" and manifest.get("appType") == "agent":
87
+ agent = dict(manifest.get("agent") or {})
88
+ agent["durability"] = agent.get("durability") or "files"
89
+ manifest["appType"] = "backend"
90
+ manifest["agent"] = agent
91
+
92
+ return struct(manifest=manifest, error=None)
93
+
94
+ def _synthesize_manifest(resource_path, stack, app_type):
95
+ """
96
+ Synthesize a manifest from directory structure.
97
+
98
+ Used when no manifest file exists. Extracts configuration from:
99
+ - Stack: extracted from path (services/product/{stack}/...)
100
+ - App type: extracted from resource name suffix (-backend, -frontend, etc.)
101
+
102
+ Ports are computed from master config per appType - Traefik handles routing.
103
+ """
104
+ # Get resource name from path
105
+ path_parts = resource_path.split("/")
106
+ resource_name = path_parts[-1] if path_parts else "unknown"
107
+
108
+ # Get synthesis config from master config
109
+ synthesis_config = get_synthesis_config()
110
+
111
+ # Determine port based on app type from synthesis defaults
112
+ port_defaults = synthesis_config.get("synthesis_port_defaults", {})
113
+ port = port_defaults.get(app_type, BASE_PORT_BACKEND) # default to backend port
114
+
115
+ # Build synthesized manifest
116
+ manifest = {
117
+ "appName": resource_name,
118
+ "appType": app_type,
119
+ "stack": stack,
120
+ "port": port,
121
+ "_synthesized": True, # Mark as synthesized
122
+ "_synthesized_from": resource_path,
123
+ }
124
+
125
+ # Add backendName for frontends using master config pattern
126
+ if app_type == "frontend":
127
+ backend_pattern = synthesis_config.get("backend_name_pattern", "{stack}-management-backend")
128
+ manifest["backendName"] = backend_pattern.format(stack=stack)
129
+
130
+ return manifest
131
+
132
+ def _get_manifest_filename(resource_path):
133
+ """
134
+ Determine if manifest exists for resource path.
135
+
136
+ Returns: filename if exists, None otherwise (triggers synthesis)
137
+ """
138
+ # Prepend project root to relative paths for correct resolution
139
+ project_root = os.environ.get('TDK_PROJECT_ROOT', '')
140
+ if project_root and not resource_path.startswith('/'):
141
+ base_path = project_root + '/' + resource_path
142
+ else:
143
+ base_path = resource_path
144
+
145
+ # Check for manifest file
146
+ manifest_path = base_path + "/" + MANIFEST_FILENAME
147
+ content = read_file(manifest_path, default="")
148
+ if content:
149
+ return MANIFEST_FILENAME
150
+
151
+ # No manifest file - will trigger synthesis
152
+ return None
153
+
154
+ def load_from_path(resource_path):
155
+ """
156
+ Load manifest from resource directory with synthesis fallback.
157
+
158
+ Priority:
159
+ 1. Load service.json if it exists
160
+ 2. Synthesize from directory structure if no manifest exists
161
+
162
+ Args:
163
+ resource_path: Path to resource directory
164
+
165
+ Returns:
166
+ struct with manifest and error fields
167
+ """
168
+ # Determine if manifest exists
169
+ manifest_filename = _get_manifest_filename(resource_path)
170
+
171
+ if manifest_filename:
172
+ # Load existing manifest
173
+ json_path = resource_path + "/" + manifest_filename
174
+ result = load_from_file(json_path)
175
+
176
+ if result.error:
177
+ return result
178
+
179
+ return result
180
+ else:
181
+ # No manifest file - synthesize from directory structure
182
+ # Extract stack from path (services/product/{stack}/...)
183
+ path_parts = resource_path.split("/")
184
+ stack = "unknown"
185
+ for i, part in enumerate(path_parts):
186
+ if part == "product" and i + 1 < len(path_parts):
187
+ stack = path_parts[i + 1]
188
+ break
189
+ elif part == "platform" and i + 1 < len(path_parts):
190
+ stack = "platform"
191
+ break
192
+
193
+ # Extract app type from resource name
194
+ resource_name = path_parts[-1] if path_parts else "unknown"
195
+ app_type = "backend" # default
196
+ if resource_name.endswith("-frontend"):
197
+ app_type = "frontend"
198
+ elif resource_name.endswith("-sdk"):
199
+ app_type = "sdk"
200
+ elif resource_name.endswith("-migrator"):
201
+ app_type = "migrator"
202
+ elif resource_name.endswith("-worker"):
203
+ app_type = "worker"
204
+ elif resource_name.endswith("-library"):
205
+ app_type = "library"
206
+
207
+ # Synthesize manifest
208
+ manifest = _synthesize_manifest(resource_path, stack, app_type)
209
+
210
+ print("📝 Synthesized manifest for: " + resource_name)
211
+ print(" Stack: " + stack + ", Type: " + app_type + ", Port: " + str(manifest["port"]))
212
+
213
+ return struct(manifest=manifest, error=None)
214
+
215
+ def get_manifest_filename():
216
+ """
217
+ Get the manifest filename.
218
+
219
+ Returns:
220
+ String: "service.json"
221
+ """
222
+ return MANIFEST_FILENAME
223
+
224
+ def get_manifest_search_order():
225
+ """
226
+ Get the priority order for manifest discovery.
227
+
228
+ Returns:
229
+ List of filenames in search order (currently only service.json)
230
+ """
231
+ return [MANIFEST_FILENAME]
232
+
233
+ # Enhanced loader with synthesis support
234
+ ManifestLoader = struct(
235
+ load_from_file=load_from_file,
236
+ load_from_path=load_from_path,
237
+ get_filename=get_manifest_filename,
238
+ get_search_order=get_manifest_search_order,
239
+ )
@@ -0,0 +1,229 @@
1
+ # Copyright (c) 2026 Flisk Landscape contributors
2
+ # SPDX-License-Identifier: MIT
3
+ # =============================================================================
4
+ # 📋 MANIFEST MODULE - FIELD MAPPER
5
+ # =============================================================================
6
+ # Path: .tilt/topologies/tilt/manifest/mapper.star
7
+ # Purpose: Decouple internal field names from manifest field names
8
+ #
9
+ # This is the MAGIC LAYER - change field names in manifests without changing code!
10
+ #
11
+ # Example:
12
+ # Internal code uses: manifest['port']
13
+ # YAML manifest has: spec.portNewNameOfAttr: 4002
14
+ # Mapper converts: portNewNameOfAttr → port
15
+ # =============================================================================
16
+
17
+ # ============================================================================
18
+ # FIELD NAME MAPPINGS
19
+ # ============================================================================
20
+ # KEY: Internal field name (what code expects)
21
+ # VALUE: List of possible manifest field names (tries first match)
22
+ # ============================================================================
23
+
24
+ FIELD_MAPPINGS = {
25
+ # Core application fields
26
+ 'appName': ['appName'],
27
+ 'appType': ['appType'],
28
+ 'stack': ['stack', 'stack', 'metadata.stack', 'metadata.domain', 'namespace', 'app.stack', 'app.domain'],
29
+ 'port': ['port', 'portNewNameOfAttr', 'spec.port', 'metadata.port', 'servicePort', 'app.port'],
30
+
31
+ # Runtime fields
32
+ 'runtime': ['runtime', 'engine', 'spec.runtime', 'app.runtime'],
33
+ 'replicas': ['replicas', 'instances', 'count', 'spec.replicas', 'metadata.replicas'],
34
+
35
+ # Feature flags
36
+ 'featuresEnabled': ['featuresEnabled', 'capabilities', 'spec.features', 'enabledFeatures', 'app.features'],
37
+
38
+ # Dependencies
39
+ 'dependsOn': [
40
+ 'dependsOn',
41
+ 'dependencies.internal',
42
+ 'spec.dependencies.internal',
43
+ 'requires'
44
+ ],
45
+ 'externalDependencies': [
46
+ 'externalDependencies',
47
+ 'dependencies.external',
48
+ 'spec.dependencies.external'
49
+ ],
50
+
51
+ # Environment
52
+ 'envVars': ['envVars', 'env', 'environment', 'spec.envVars', 'environmentVariables', 'app.env'],
53
+
54
+ # Database
55
+ 'databaseName': ['databaseName', 'database.name', 'dbName', 'spec.database.name', 'db'],
56
+
57
+ # Traefik/Gateway
58
+ 'traefik': ['traefik', 'gateway', 'ingress', 'spec.traefik', 'routing'],
59
+
60
+ # Docker/Build
61
+ 'dockerfile': ['dockerfile', 'docker.file', 'build.dockerfile', 'spec.build.dockerfile'],
62
+ 'buildContext': ['buildContext', 'docker.context', 'build.context', 'spec.build.context'],
63
+
64
+ # Frontend specific
65
+ 'backendName': ['backendName', 'backend', 'spec.backendName', 'proxyTo', 'app.backend'],
66
+ 'basePath': ['basePath', 'base', 'path', 'spec.basePath', 'app.basePath'],
67
+ }
68
+
69
+ # ============================================================================
70
+ # FIELD MAPPER FUNCTIONS
71
+ # ============================================================================
72
+
73
+ def get_field(manifest, internal_name, default=None):
74
+ """
75
+ Get a field value from manifest using internal field name.
76
+ Automatically handles field name mapping!
77
+
78
+ Args:
79
+ manifest: Dict (from JSON or normalized YAML)
80
+ internal_name: Internal field name (e.g., 'port', 'appName')
81
+ default: Default value if field not found
82
+
83
+ Returns:
84
+ Field value or default
85
+
86
+ Example:
87
+ # Manifest has: {portNewNameOfAttr: 4002}
88
+ # Code calls: get_field(manifest, 'port', 4000)
89
+ # Returns: 4002
90
+ """
91
+ # Get list of possible field names for this internal field
92
+ possible_names = FIELD_MAPPINGS.get(internal_name, [internal_name])
93
+
94
+ # Try each possible name
95
+ for field_name in possible_names:
96
+ value = _get_nested_field(manifest, field_name)
97
+ if value != None:
98
+ return value
99
+
100
+ return default
101
+
102
+
103
+ def _get_nested_field(manifest, field_path):
104
+ """
105
+ Get a potentially nested field value.
106
+
107
+ Supports:
108
+ - Simple field: 'port'
109
+ - Nested field: 'metadata.stack'
110
+ - Deep nested: 'spec.dependencies.internal'
111
+ """
112
+ if '.' not in field_path:
113
+ # Simple field
114
+ return manifest.get(field_path)
115
+
116
+ # Nested field - traverse path
117
+ parts = field_path.split('.')
118
+ current = manifest
119
+
120
+ for part in parts:
121
+ if type(current) == "dict" and part in current:
122
+ current = current[part]
123
+ else:
124
+ return None
125
+
126
+ return current
127
+
128
+
129
+ def set_field(manifest, internal_name, value):
130
+ """
131
+ Set a field value using internal field name.
132
+ Creates the field at the primary mapping location.
133
+
134
+ Args:
135
+ manifest: Dict to modify
136
+ internal_name: Internal field name
137
+ value: Value to set
138
+
139
+ Returns:
140
+ Modified manifest
141
+ """
142
+ possible_names = FIELD_MAPPINGS.get(internal_name, [internal_name])
143
+ primary_name = possible_names[0] # Use first mapping as primary
144
+
145
+ manifest[primary_name] = value
146
+ return manifest
147
+
148
+
149
+ def get_all_fields(manifest):
150
+ """
151
+ Extract all mapped fields from manifest.
152
+ Returns normalized dict with internal field names.
153
+
154
+ This is the MAGIC FUNCTION - pass it any manifest format
155
+ (JSON, YAML, old format, new format) and get consistent output!
156
+ """
157
+ result = {}
158
+
159
+ for internal_name in FIELD_MAPPINGS:
160
+ value = get_field(manifest, internal_name)
161
+ if value != None:
162
+ result[internal_name] = value
163
+
164
+ return result
165
+
166
+
167
+ def map_manifest(manifest, target_format='internal'):
168
+ """
169
+ Map manifest from any format to target format.
170
+
171
+ Args:
172
+ manifest: Input manifest (JSON, YAML, old, new)
173
+ target_format: 'internal' (standardized) or 'yaml' (hierarchical)
174
+
175
+ Returns:
176
+ Mapped manifest in target format
177
+ """
178
+ if target_format == 'internal':
179
+ # Map to internal standard format
180
+ return get_all_fields(manifest)
181
+
182
+ elif target_format == 'yaml':
183
+ # Map to YAML hierarchical format
184
+ internal = get_all_fields(manifest)
185
+ return _to_yaml_format(internal)
186
+
187
+ return manifest
188
+
189
+
190
+ def _to_yaml_format(internal_manifest):
191
+ """Convert internal format to YAML hierarchical format."""
192
+ return {
193
+ 'apiVersion': 'tilt.Flisk Landscape.io/v1',
194
+ 'kind': 'ResourceManifest',
195
+ 'metadata': {
196
+ 'name': internal_manifest.get('appName', ''),
197
+ 'stack': internal_manifest.get('stack', ''),
198
+ },
199
+ 'spec': {
200
+ 'appType': internal_manifest.get('appType', 'backend'),
201
+ 'port': internal_manifest.get('port', 4000),
202
+ 'runtime': internal_manifest.get('runtime', 'bun'),
203
+ 'replicas': internal_manifest.get('replicas', 1),
204
+ 'featuresEnabled': internal_manifest.get('featuresEnabled', []),
205
+ 'envVars': internal_manifest.get('envVars', {}),
206
+ 'dependencies': {
207
+ 'internal': internal_manifest.get('dependsOn', []),
208
+ 'external': internal_manifest.get('externalDependencies', []),
209
+ },
210
+ 'database': {
211
+ 'name': internal_manifest.get('databaseName', ''),
212
+ } if internal_manifest.get('databaseName') else None,
213
+ 'gateway': internal_manifest.get('traefik', {}),
214
+ }
215
+ }
216
+
217
+
218
+ # ============================================================================
219
+ # PUBLIC API
220
+ # ============================================================================
221
+
222
+ ManifestMapper = struct(
223
+ get=get_field,
224
+ set=set_field,
225
+ get_all=get_all_fields,
226
+ map=map_manifest,
227
+ # Expose mappings for debugging
228
+ mappings=FIELD_MAPPINGS,
229
+ )