@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,679 @@
1
+ # 📋 Manifest Module
2
+
3
+ **Status:** ✅ All Phases Complete! (Phase 1-5)
4
+ **Location:** `engine/topologies/tilt/manifest/`
5
+ **Purpose:** Clean, modular manifest parsing, loading, validation, and discovery integration system
6
+
7
+ ---
8
+
9
+ ## Quick Start
10
+
11
+ ### Basic Usage
12
+
13
+ ```starlark
14
+ # Load the manifest system
15
+ load("../manifest/__init__.star", "Manifest")
16
+
17
+ # Access constants
18
+ print(Manifest.filename) # service.json
19
+ print(Manifest.defaults) # Default field values
20
+
21
+ # Load and validate a manifest
22
+ result = Manifest.load_from_file("services/product/user/user-management-backend/service.json")
23
+ if result.error:
24
+ print("Error:", result.error)
25
+ else:
26
+ manifest = result.manifest
27
+
28
+ # Validate the manifest
29
+ validation = Manifest.validate(manifest)
30
+ if validation.valid:
31
+ print("✅ Valid:", manifest['appName'])
32
+ else:
33
+ print("❌ Validation failed:")
34
+ for error in validation.errors:
35
+ print(" -", Manifest.format_error(error))
36
+ ```
37
+
38
+ ### Validation Example
39
+
40
+ ```starlark
41
+ # Validate a manifest with full reporting
42
+ report = Manifest.get_validation_report(my_manifest)
43
+ print(report)
44
+
45
+ # Quick check
46
+ if Manifest.is_valid(my_manifest):
47
+ print("Manifest is valid!")
48
+
49
+ # Validate against all resources (checks port conflicts, dependencies)
50
+ all_manifests = Manifest.load_all("services/product").manifests
51
+ result = Manifest.validate_dependencies(my_manifest, all_manifests)
52
+ if not result.valid:
53
+ print("Cross-service validation failed")
54
+ ```
55
+
56
+ ---
57
+
58
+ ## Module Structure
59
+
60
+ ```
61
+ manifest/
62
+ ├── __init__.star # Main API facade
63
+ ├── constants.star # Constants and defaults
64
+ ├── schema.star # Field schema definitions
65
+ ├── errors.star # Error handling
66
+ ├── loader.star # File loading and I/O
67
+ ├── parser.star # JSON parsing and normalization
68
+ ├── validator.star # Comprehensive validation
69
+ ├── integration.star # Discovery system integration ⭐ NEW (Phase 4)
70
+ ├── PHASE4_DISCOVERY_PATCH.md # Migration guide ⭐ NEW (Phase 4)
71
+ ├── tests/
72
+ │ ├── test_manifest.star # Unit tests (Phase 1)
73
+ │ ├── test_loader_parser.star # Integration tests (Phase 2)
74
+ │ ├── test_validator.star # Validator tests (Phase 3)
75
+ │ └── test_integration.star # Integration tests (Phase 4) ⭐ NEW
76
+ └── README.md # This file
77
+ ```
78
+
79
+ ---
80
+
81
+ ## API Reference
82
+
83
+ ### Constants
84
+
85
+ | Export | Description |
86
+ |--------|-------------|
87
+ | `Manifest.filename` | Manifest filename constant |
88
+ | `Manifest.defaults` | Default field values |
89
+ | `Manifest.app_types` | Valid app types |
90
+ | `Manifest.stacks` | Valid stacks |
91
+ | `Manifest.features` | Valid features |
92
+ | `Manifest.port_ranges` | Port ranges by app type |
93
+ | `Manifest.autogenerated_paths` | Autogenerated config paths |
94
+
95
+ ### Loading Functions ⭐ NEW (Phase 2)
96
+
97
+ | Function | Description | Example |
98
+ |----------|-------------|---------|
99
+ | `load_from_file(path)` | Load manifest from file | `Manifest.load_from_file("path/to/manifest.json")` |
100
+ | `load_from_path(resource_path)` | Load from resource directory | `Manifest.load_from_path("services/product/user/my-resource")` |
101
+ | `load_all(root, filters)` | Load all with optional filters | `Manifest.load_all("services/product", {'appType': 'backend'})` |
102
+ | `get_manifest_path(path)` | Get expected manifest path | `Manifest.get_manifest_path("services/product/user/my-resource")` |
103
+ | `clear_cache()` | Clear manifest cache | `Manifest.clear_cache()` |
104
+ | `get_cache_stats()` | Get cache statistics | `Manifest.get_cache_stats()` |
105
+ | `is_cached(path)` | Check if path is cached | `Manifest.is_cached("path/to/manifest.json")` |
106
+
107
+ **Loading Result Structure:**
108
+
109
+ ```starlark
110
+ result = Manifest.load_from_file("path/to/manifest.json")
111
+
112
+ # Result struct contains:
113
+ # result.manifest - Parsed manifest dict or None
114
+ # result.error - Error message or None
115
+ # result.warnings - List of warning messages
116
+ # result.metadata - Dict with path, from_cache, load_time_ms
117
+ ```
118
+
119
+ **Load All Result Structure:**
120
+
121
+ ```starlark
122
+ result = Manifest.load_all("services/product")
123
+
124
+ # Result struct contains:
125
+ # result.manifests - List of loaded manifests
126
+ # result.errors - List of error structs
127
+ # result.warnings - List of warning messages
128
+ # result.stats - Dict with total_found, successful, failed, filtered_out, from_cache
129
+ ```
130
+
131
+ ### Parsing Functions
132
+
133
+ | Function | Description | Example |
134
+ |----------|-------------|---------|
135
+ | `parse(content, path)` | Parse JSON content | `Manifest.parse(json_string, "path/for/context")` |
136
+ | `normalize(manifest, path)` | Apply defaults and compute fields | `Manifest.normalize(manifest, resource_path)` |
137
+ | `get_normalized(content, path)` | Parse + normalize in one call | `Manifest.get_normalized(json_string, resource_path)` |
138
+ | `extract_resource_path(manifest_path)` | Extract resource path | `Manifest.extract_resource_path("path/to/manifest.json")` |
139
+ | `extract_stack(resource_path)` | Extract stack from path | `Manifest.extract_stack("services/product/user/...")` |
140
+ | `parse_traefik(manifest)` | Parse Traefik config | `Manifest.parse_traefik(manifest)` |
141
+ | `merge_manifests(base, overlay)` | Merge two manifests | `Manifest.merge_manifests(base, overlay)` |
142
+ | `get_description(manifest)` | Get human-readable description | `Manifest.get_description(manifest)` |
143
+
144
+ **Parse Result Structure:**
145
+
146
+ ```starlark
147
+ result = Manifest.parse(json_content)
148
+
149
+ # Result struct contains:
150
+ # result.manifest - Parsed manifest dict or None
151
+ # result.error - Error message or None
152
+ # result.warnings - List of warnings (e.g., deprecated fields)
153
+ ```
154
+
155
+ ### Validation Functions ⭐ NEW (Phase 3)
156
+
157
+ | Function | Description | Example |
158
+ |----------|-------------|---------|
159
+ | `validate(manifest, context, level)` | Comprehensive validation | `Manifest.validate(manifest, level='all')` |
160
+ | `is_valid(manifest)` | Quick validity check | `if Manifest.is_valid(manifest): ...` |
161
+ | `get_validation_report(manifest)` | Generate detailed report | `print(Manifest.get_validation_report(m))` |
162
+ | `validate_schema(manifest)` | Schema validation only | `Manifest.validate_schema(manifest)` |
163
+ | `validate_values(manifest)` | Value validation only | `Manifest.validate_values(manifest)` |
164
+ | `validate_dependencies(manifest, all)` | Cross-resource validation | `Manifest.validate_dependencies(m, all_manifests)` |
165
+
166
+ **Validation Levels:**
167
+
168
+ | Level | Description |
169
+ |-------|-------------|
170
+ | `'schema'` | Structure and field types |
171
+ | `'values'` | Value ranges, patterns, formats |
172
+ | `'cross_field'` | Cross-field dependencies (e.g., frontend needs backend) |
173
+ | `'cross_resource'` | Port conflicts, dependency existence |
174
+ | `'all'` | All validations (default) |
175
+
176
+ **Validation Result Structure:**
177
+
178
+ ```starlark
179
+ result = Manifest.validate(manifest, level='all')
180
+
181
+ # Result struct contains:
182
+ # result.valid - True if no errors
183
+ # result.errors - List of error structs
184
+ # result.warnings - List of warning structs
185
+ # result.stats - Dict with fields_checked, rules_passed, rules_failed
186
+ ```
187
+
188
+ **Validation Context:**
189
+
190
+ ```starlark
191
+ context = {
192
+ 'all_manifests': all_manifests, # For cross-resource checks
193
+ 'resource_path': path, # For error context
194
+ 'strict': True, # Treat warnings as errors
195
+ }
196
+
197
+ result = Manifest.validate(manifest, context, level='all')
198
+ ```
199
+
200
+ ### Schema Functions
201
+
202
+ | Function | Description | Example |
203
+ |----------|-------------|---------|
204
+ | `get_field(name)` | Get field schema | `Manifest.get_field('port')` |
205
+ | `get_required_fields()` | List required fields | `Manifest.get_required_fields()` |
206
+ | `get_default(name)` | Get default value | `Manifest.get_default('replicas')` |
207
+ | `get_valid_values(name)` | Get enum values | `Manifest.get_valid_values('appType')` |
208
+ | `is_required(name)` | Check if required | `Manifest.is_required('appName')` |
209
+ | `is_deprecated(name)` | Check if deprecated | `Manifest.is_deprecated('apiBasePath')` |
210
+ | `get_all_fields()` | Get all field names | `Manifest.get_all_fields()` |
211
+
212
+ ### Error Handling
213
+
214
+ | Function | Description |
215
+ |----------|-------------|
216
+ | `format_error(error)` | Format error for display |
217
+ | `group_errors(errors)` | Group errors by category |
218
+ | `has_critical_errors(errors)` | Check for critical errors |
219
+ | `get_error_summary(errors)` | Get error statistics |
220
+
221
+ ### Integration Functions ⭐ NEW (Phase 4)
222
+
223
+ | Function | Description | Example |
224
+ |----------|-------------|---------|
225
+ | `load_and_validate_integration(path, all, use_new)` | Load with validation | `Manifest.load_and_validate_integration(path, all_manifests)` |
226
+ | `load_all_integration(root, filters, validate)` | Load all with integration | `Manifest.load_all_integration("services/product")` |
227
+ | `convert_to_resource(manifest)` | Convert to discovery format | `Manifest.convert_to_resource(manifest)` |
228
+ | `get_validation_summary(manifests)` | Get validation stats | `Manifest.get_validation_summary(all_manifests)` |
229
+ | `check_port_conflicts(manifests)` | Find port conflicts | `Manifest.check_port_conflicts(manifests)` |
230
+ | `check_dependencies_valid(manifests)` | Validate dependencies | `Manifest.check_dependencies_valid(manifests)` |
231
+
232
+ **Integration Result Structure:**
233
+
234
+ ```starlark
235
+ result = Manifest.load_all_integration("services/product")
236
+
237
+ # Result struct contains:
238
+ # result.manifests - List of normalized manifests
239
+ # result.errors - List of error strings
240
+ # result.warnings - List of warning strings
241
+ # result.stats - Loading statistics
242
+ # result.by_name - Dict mapping appName to manifest
243
+ # result.by_port - Dict mapping port to manifest
244
+ ```
245
+
246
+ ### Convenience Functions
247
+
248
+ | Function | Description |
249
+ |----------|-------------|
250
+ | `is_valid_manifest(manifest)` | Quick validation check |
251
+ | `get_resource_type(manifest)` | Get human-readable type description |
252
+
253
+ ---
254
+
255
+ ## Usage Examples
256
+
257
+ ### Example 1: Load and Validate a Single Manifest
258
+
259
+ ```starlark
260
+ load("../manifest/__init__.star", "Manifest")
261
+
262
+ manifest_path = "services/product/user/user-management-backend/service.json"
263
+
264
+ result = Manifest.load_from_file(manifest_path)
265
+
266
+ if result.error:
267
+ print("❌ Failed to load:", result.error)
268
+ else:
269
+ manifest = result.manifest
270
+
271
+ # Check if valid
272
+ if Manifest.is_valid_manifest(manifest):
273
+ print("✅ Valid manifest:", manifest['appName'])
274
+ print(" Type:", manifest['appType'])
275
+ print(" Stack:", manifest['stack'])
276
+ print(" Port:", manifest['port'])
277
+ else:
278
+ print("⚠️ Invalid manifest structure")
279
+ ```
280
+
281
+ ### Example 2: Parse and Normalize JSON
282
+
283
+ ```starlark
284
+ json_content = '''
285
+ {
286
+ "appName": "my-new-service",
287
+ "appType": "backend",
288
+ "stack": "user",
289
+ "port": 4001,
290
+ "features": ["nats", "prisma"]
291
+ }
292
+ '''
293
+
294
+ result = Manifest.get_normalized(json_content, "services/product/user/my-new-service")
295
+
296
+ if result.error:
297
+ print("Error:", result.error)
298
+ else:
299
+ manifest = result.manifest
300
+
301
+ # Defaults applied
302
+ print("Replicas:", manifest['replicas']) # 1 (default)
303
+ print("Runtime:", manifest['runtime']) # bun (default)
304
+ print("Syncs:", manifest['syncs']) # auto-computed
305
+
306
+ # Traefik config created
307
+ print("Traefik pathPrefix:", manifest['traefik']['pathPrefix'])
308
+ ```
309
+
310
+ ### Example 3: Load All Backend Services
311
+
312
+ ```starlark
313
+ # Load only backend services
314
+ result = Manifest.load_all(
315
+ "services/product",
316
+ filters={
317
+ 'appType': 'backend',
318
+ 'stack': ['user', 'order'],
319
+ }
320
+ )
321
+
322
+ print("Found {} manifests ({} successful, {} filtered out)".format(
323
+ result.stats['total_found'],
324
+ result.stats['successful'],
325
+ result.stats['filtered_out']
326
+ ))
327
+
328
+ for manifest in result.manifests:
329
+ desc = Manifest.get_description(manifest)
330
+ print(" -", desc)
331
+ ```
332
+
333
+ ### Example 4: Handle Loading Errors
334
+
335
+ ```starlark
336
+ result = Manifest.load_all("services/product")
337
+
338
+ if result.errors:
339
+ print("⚠️ Some manifests failed to load:")
340
+ for error in result.errors:
341
+ formatted = Manifest.format_error(error)
342
+ print(" -", formatted)
343
+
344
+ # Check for critical errors
345
+ if Manifest.has_critical_errors(result.errors):
346
+ print("❌ Critical errors detected - aborting")
347
+ else:
348
+ print("✅ No critical errors")
349
+ ```
350
+
351
+ ### Example 5: Validate a Manifest ⭐ NEW (Phase 3)
352
+
353
+ ```starlark
354
+ manifest = {
355
+ 'appName': 'my-service',
356
+ 'appType': 'backend',
357
+ 'stack': 'user',
358
+ 'port': 4001,
359
+ 'features': ['nats', 'prisma'],
360
+ 'databaseName': 'my_db',
361
+ }
362
+
363
+ # Full validation
364
+ result = Manifest.validate(manifest, level='all')
365
+
366
+ if result.valid:
367
+ print("✅ Manifest is valid!")
368
+ print(" Fields checked:", result.stats['fields_checked'])
369
+ else:
370
+ print("❌ Validation failed:")
371
+ for error in result.errors:
372
+ print(" -", Manifest.format_error(error))
373
+ ```
374
+
375
+ ### Example 6: Cross-Service Validation ⭐ NEW (Phase 3)
376
+
377
+ ```starlark
378
+ # Load all manifests for cross-reference
379
+ all_manifests = Manifest.load_all("services/product").manifests
380
+
381
+ # Validate a new manifest against existing ones
382
+ new_manifest = {
383
+ 'appName': 'new-frontend',
384
+ 'appType': 'frontend',
385
+ 'stack': 'user',
386
+ 'port': 3005,
387
+ 'backendName': 'user-management-backend', # References existing service
388
+ }
389
+
390
+ result = Manifest.validate_dependencies(new_manifest, all_manifests)
391
+
392
+ if result.valid:
393
+ print("✅ Dependencies valid!")
394
+ else:
395
+ print("❌ Dependency issues:")
396
+ for error in result.errors:
397
+ print(" -", error.message)
398
+ ```
399
+
400
+ ### Example 7: Generate Validation Report ⭐ NEW (Phase 3)
401
+
402
+ ```starlark
403
+ manifest = {
404
+ 'appName': 'test-service',
405
+ 'appType': 'backend',
406
+ 'stack': 'user',
407
+ 'port': 4001,
408
+ }
409
+
410
+ # Generate detailed report
411
+ report = Manifest.get_validation_report(manifest)
412
+ print(report)
413
+
414
+ # Output:
415
+ # ======================================================================
416
+ # 📋 MANIFEST VALIDATION REPORT
417
+ # ======================================================================
418
+ # Status: ✅ PASSED
419
+ #
420
+ # Fields Checked: 15
421
+ # Rules Passed: 14
422
+ # Rules Failed: 0
423
+ #
424
+ # ======================================================================
425
+ ```
426
+
427
+ ### Example 8: Schema-Only Validation ⭐ NEW (Phase 3)
428
+
429
+ ```starlark
430
+ # Just check structure and types
431
+ result = Manifest.validate_schema(manifest)
432
+
433
+ # Just check values (ranges, patterns)
434
+ result = Manifest.validate_values(manifest)
435
+
436
+ # Quick check
437
+ if Manifest.is_valid(manifest):
438
+ print("Manifest is valid!")
439
+ ```
440
+
441
+ ### Example 9: Batch Validation with Integration ⭐ NEW (Phase 4)
442
+
443
+ ```starlark
444
+ # Load all manifests with integration
445
+ result = Manifest.load_all_integration("services/product")
446
+
447
+ print("Loaded {} manifests".format(len(result.manifests)))
448
+ print("Errors: {}".format(len(result.errors)))
449
+ print("Warnings: {}".format(len(result.warnings)))
450
+
451
+ # Get validation summary
452
+ summary = Manifest.get_validation_summary(result.manifests)
453
+ print("Valid: {}/{}".format(summary['valid'], summary['total']))
454
+ print("Errors by severity: {}".format(summary['by_severity']))
455
+
456
+ # Check for port conflicts
457
+ conflicts = Manifest.check_port_conflicts(result.manifests)
458
+ if conflicts:
459
+ print("⚠️ Port conflicts detected:")
460
+ for conflict in conflicts:
461
+ print(" -", Manifest.format_error(conflict))
462
+
463
+ # Check dependencies
464
+ dep_issues = Manifest.check_dependencies_valid(result.manifests)
465
+ if dep_issues:
466
+ print("⚠️ Dependency issues:")
467
+ for issue in dep_issues:
468
+ print(" -", Manifest.format_error(issue))
469
+ ```
470
+
471
+ ### Example 10: Discovery Integration ⭐ NEW (Phase 4)
472
+
473
+ ```starlark
474
+ # Use integration layer for discovery system
475
+ result = Manifest.load_and_validate_integration(
476
+ manifest_path="services/product/user/user-management-backend/service.json",
477
+ all_manifests=all_manifests, # For cross-validation
478
+ )
479
+
480
+ if result.validation:
481
+ print("Validation: {} errors, {} warnings".format(
482
+ len([e for e in result.validation.errors if e.severity == 'error']),
483
+ len(result.validation.warnings)
484
+ ))
485
+
486
+ # Convert to discovery resource format
487
+ resource = Manifest.convert_to_resource(result.manifest)
488
+ print("Resource name:", resource['name'])
489
+ print("Resource type:", 'frontend' if resource.get('frontend') else 'backend')
490
+ ```
491
+
492
+ ---
493
+
494
+ ## Backward Compatibility
495
+
496
+ **Old imports still work (deprecated):**
497
+
498
+ ```starlark
499
+ # DEPRECATED - will be removed in Phase 5
500
+ load("../discovery/manifest/constants.star", "MANIFEST_DEFAULTS")
501
+
502
+ # NEW - recommended
503
+ load("../manifest/__init__.star", "Manifest")
504
+ # Use Manifest.defaults instead of MANIFEST_DEFAULTS
505
+ ```
506
+
507
+ ---
508
+
509
+ ## Testing
510
+
511
+ ### Run Unit Tests
512
+
513
+ ```starlark
514
+ # Phase 1 tests (constants, schema, errors)
515
+ load("./manifest/tests/test_manifest.star", "TestManifest")
516
+ TestManifest.run()
517
+
518
+ # Phase 2 tests (loader, parser)
519
+ load("./manifest/tests/test_loader_parser.star", "TestLoaderParser")
520
+ TestLoaderParser.run()
521
+
522
+ # Phase 3 tests (validator)
523
+ load("./manifest/tests/test_validator.star", "TestValidator")
524
+ TestValidator.run()
525
+
526
+ # Phase 4 tests (integration)
527
+ load("./manifest/tests/test_integration.star", "TestIntegration")
528
+ TestIntegration.run()
529
+ ```
530
+
531
+ ### Run All Tests
532
+
533
+ ```bash
534
+ # When Tilt test runner is available:
535
+ tilt test manifest/
536
+
537
+ # Or manually in Tiltfile:
538
+ load("./manifest/tests/test_manifest.star", "TestManifest")
539
+ load("./manifest/tests/test_loader_parser.star", "TestLoaderParser")
540
+ load("./manifest/tests/test_validator.star", "TestValidator")
541
+ load("./manifest/tests/test_integration.star", "TestIntegration")
542
+
543
+ print("\n=== Phase 1 Tests ===")
544
+ TestManifest.run()
545
+
546
+ print("\n=== Phase 2 Tests ===")
547
+ TestLoaderParser.run()
548
+
549
+ print("\n=== Phase 3 Tests ===")
550
+ TestValidator.run()
551
+
552
+ print("\n=== Phase 4 Tests ===")
553
+ TestIntegration.run()
554
+ ```
555
+
556
+ ---
557
+
558
+ ## Migration Phases
559
+
560
+ | Phase | Status | Description |
561
+ |-------|--------|-------------|
562
+ | Phase 1 | ✅ Complete | Foundation: constants, errors, schema |
563
+ | Phase 2 | ✅ Complete | Core: loader, parser |
564
+ | Phase 3 | ✅ Complete | Validation: validator, rules |
565
+ | Phase 4 | ✅ Complete | Integration: discovery system integration |
566
+ | Phase 5 | ✅ Complete | Cleanup: removed deprecated code |
567
+
568
+ ### Phase 5 Features (✅ Complete)
569
+
570
+ - **Final Cleanup**
571
+ - Removed backward compatibility layer
572
+ - Removed feature flags
573
+ - Updated discovery.star to use new system exclusively
574
+ - Deleted migration patch files
575
+ - All 5 phases complete!
576
+
577
+ ### Phase 4 Features (✅ Complete)
578
+
579
+ - **Discovery Integration** (`integration.star`)
580
+ - Integration layer for discovery system
581
+ - Backward compatibility with legacy discovery
582
+ - Batch validation across all resources
583
+ - Port conflict detection across resources
584
+ - Dependency validation across resources
585
+ - Validation summary reports
586
+ - Feature flag for gradual rollout
587
+
588
+ ### Phase 3 Features (✅ Complete)
589
+
590
+ - **Validation** (`validator.star`)
591
+ - 4-level validation (schema, values, cross-field, cross-resource)
592
+ - Schema validation (required fields, types, constraints)
593
+ - Value validation (port ranges, name formats, patterns)
594
+ - Cross-field validation (frontend needs backend, prisma needs database)
595
+ - Cross-resource validation (port conflicts, dependency existence)
596
+ - Validation reports with detailed statistics
597
+ - Strict mode (warnings as errors)
598
+
599
+ ### Phase 2 Features (✅ Complete)
600
+
601
+ - **File Loading** (`loader.star`)
602
+ - Load single manifest from file
603
+ - Load from resource directory
604
+ - Load all with filtering
605
+ - In-memory caching
606
+ - Error handling with context
607
+
608
+ - **Parsing & Normalization** (`parser.star`)
609
+ - JSON parsing with validation
610
+ - Automatic field normalization
611
+ - Default value application
612
+ - Stack/appType extraction from paths
613
+ - Traefik configuration generation
614
+ - Manifest merging for inheritance
615
+ - Frontend/backend detection
616
+
617
+ ---
618
+
619
+ ## Performance
620
+
621
+ ### Caching
622
+
623
+ The loader maintains an in-memory cache to avoid redundant file I/O:
624
+
625
+ ```starlark
626
+ # First load reads from disk
627
+ result1 = Manifest.load_from_file("path/to/manifest.json")
628
+ print(result1.metadata['from_cache']) # False
629
+
630
+ # Second load uses cache
631
+ result2 = Manifest.load_from_file("path/to/manifest.json")
632
+ print(result2.metadata['from_cache']) # True
633
+
634
+ # Clear cache when needed
635
+ Manifest.clear_cache()
636
+ ```
637
+
638
+ ### Loading Statistics
639
+
640
+ ```starlark
641
+ result = Manifest.load_all("services/product")
642
+ print("Loaded {} manifests in {} ms".format(
643
+ result.stats['successful'],
644
+ result.stats.get('total_time_ms', 0)
645
+ ))
646
+ print("From cache:", result.stats['from_cache'])
647
+ ```
648
+
649
+ ---
650
+
651
+ ## Future Enhancements
652
+
653
+ - **Phase 4:** `fetch.star` - Remote manifest fetching
654
+ - **Phase 5:** Cleanup deprecated code
655
+
656
+ ### Completed Phases
657
+
658
+ - **Phase 1:** Foundation (constants, schema, errors) ✅
659
+ - **Phase 2:** Core (loader, parser) ✅
660
+ - **Phase 3:** Validation (validator, comprehensive rules) ✅
661
+
662
+ ---
663
+
664
+ ## Contributing
665
+
666
+ When adding new features:
667
+
668
+ 1. Add implementation to appropriate module
669
+ 2. Wire up to `__init__.star` facade
670
+ 3. Add tests to `tests/` directory
671
+ 4. Update this README with examples
672
+ 5. Mark Phase X status if applicable
673
+
674
+ ---
675
+
676
+ ## See Also
677
+
678
+ - [Refactoring Plan](../../../REFACTORING_MANIFEST_SYSTEM.md) - Full refactoring roadmap
679
+ - [AGENTS.md](../../../AGENTS.md) - Agent ecosystem documentation