@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,384 @@
1
+ #!/usr/bin/env python3
2
+ # Copyright (c) 2026 Flisk contributors
3
+ # SPDX-License-Identifier: MIT
4
+ """
5
+ Service Snapshot Utility
6
+
7
+ Manages the snapshot file used for incremental service discovery.
8
+ The snapshot tracks which services have been discovered to detect
9
+ new services added while Tilt is running.
10
+ """
11
+
12
+ import json
13
+ import os
14
+ import sys
15
+ import hashlib
16
+ import logging
17
+ from pathlib import Path
18
+ from typing import List, Dict, Set, Tuple, Optional
19
+ from datetime import datetime, timezone
20
+
21
+ # Configure logging
22
+ logging.basicConfig(level=logging.WARNING, format='%(levelname)s: %(message)s')
23
+ logger = logging.getLogger(__name__)
24
+
25
+ SNAPSHOT_FILE = Path(".tdk/.tdk-out/snapshots/resource-snapshot.json")
26
+
27
+
28
+ def compute_resource_hash(resource_path: str) -> Optional[str]:
29
+ """
30
+ Compute MD5 hash of a service.json file for efficient change detection.
31
+
32
+ Args:
33
+ resource_path: Path to service.json file
34
+
35
+ Returns:
36
+ MD5 hash string or None if file cannot be read
37
+ """
38
+ try:
39
+ with open(resource_path, 'rb') as f:
40
+ content = f.read()
41
+ return hashlib.md5(content).hexdigest()[:16] # First 16 chars sufficient
42
+ except (IOError, OSError) as e:
43
+ logger.warning(f"Could not compute hash for {resource_path}: {e}")
44
+ return None
45
+
46
+
47
+ def compute_services_hash(services: List[str]) -> str:
48
+ """
49
+ Compute aggregate hash of all services for quick comparison.
50
+
51
+ Args:
52
+ services: List of service paths
53
+
54
+ Returns:
55
+ Aggregate hash string
56
+ """
57
+ hasher = hashlib.md5()
58
+ for svc in sorted(services):
59
+ hasher.update(svc.encode())
60
+ svc_hash = compute_resource_hash(svc)
61
+ if svc_hash:
62
+ hasher.update(svc_hash.encode())
63
+ return hasher.hexdigest()[:16]
64
+
65
+
66
+ def save_snapshot(services: List[str], include_hashes: bool = True) -> None:
67
+ """
68
+ Save current service paths to snapshot file.
69
+
70
+ Args:
71
+ services: List of service.json file paths
72
+ include_hashes: Whether to include content hashes for efficient comparison
73
+ """
74
+ snapshot = {
75
+ "timestamp": datetime.now(timezone.utc).isoformat() + "Z",
76
+ "services": sorted(services),
77
+ "count": len(services)
78
+ }
79
+
80
+ # Include aggregate hash for quick comparison
81
+ if services:
82
+ snapshot["hash"] = compute_services_hash(services)
83
+
84
+ # Include individual service hashes for change detection
85
+ if include_hashes and services:
86
+ resource_hashes = {}
87
+ for svc in services:
88
+ svc_hash = compute_resource_hash(svc)
89
+ if svc_hash:
90
+ resource_hashes[svc] = svc_hash
91
+ snapshot["resource_hashes"] = resource_hashes
92
+
93
+ # Ensure directory exists
94
+ SNAPSHOT_FILE.parent.mkdir(parents=True, exist_ok=True)
95
+
96
+ with open(SNAPSHOT_FILE, 'w') as f:
97
+ json.dump(snapshot, f, indent=2)
98
+
99
+
100
+ def load_snapshot() -> Dict:
101
+ """
102
+ Load previous snapshot from file.
103
+
104
+ Returns:
105
+ Snapshot dict with 'timestamp', 'services', 'count'.
106
+ Returns empty snapshot if file doesn't exist.
107
+ """
108
+ if not SNAPSHOT_FILE.exists():
109
+ return {
110
+ "timestamp": None,
111
+ "services": [],
112
+ "count": 0
113
+ }
114
+
115
+ try:
116
+ with open(SNAPSHOT_FILE, 'r') as f:
117
+ return json.load(f)
118
+ except json.JSONDecodeError as e:
119
+ logger.warning(f"Corrupted snapshot file {SNAPSHOT_FILE}: {e}")
120
+ return {
121
+ "timestamp": None,
122
+ "services": [],
123
+ "count": 0
124
+ }
125
+ except IOError as e:
126
+ logger.warning(f"Could not read snapshot file {SNAPSHOT_FILE}: {e}")
127
+ return {
128
+ "timestamp": None,
129
+ "services": [],
130
+ "count": 0
131
+ }
132
+
133
+
134
+ def diff_snapshots(old: Dict, new: List[str], use_hashes: bool = True) -> Tuple[Set[str], Set[str], Set[str]]:
135
+ """
136
+ Compare old snapshot with current services to find changes.
137
+
138
+ Uses hash-based comparison for efficient change detection when enabled.
139
+ Returns services that changed content even if path stayed the same.
140
+
141
+ Args:
142
+ old: Previous snapshot dict
143
+ new: Current list of service paths
144
+ use_hashes: Whether to use hash-based comparison for efficiency
145
+
146
+ Returns:
147
+ Tuple of (added_services, removed_services, modified_services) as sets
148
+ """
149
+ old_services = set(old.get("services", []))
150
+ new_services = set(new)
151
+
152
+ added = new_services - old_services
153
+ removed = old_services - new_services
154
+ modified = set()
155
+
156
+ # Quick hash-based check - if aggregate hash matches, no changes
157
+ if use_hashes and "hash" in old and new:
158
+ current_hash = compute_services_hash(new)
159
+ if old["hash"] == current_hash:
160
+ return set(), set(), set() # No changes at all
161
+
162
+ # Check for modified services (same path, different content)
163
+ if use_hashes and "resource_hashes" in old:
164
+ old_hashes = old["resource_hashes"]
165
+ for svc in new_services & old_services: # Intersection - services in both
166
+ old_hash = old_hashes.get(svc)
167
+ new_hash = compute_resource_hash(svc)
168
+ if old_hash and new_hash and old_hash != new_hash:
169
+ modified.add(svc)
170
+
171
+ return added, removed, modified
172
+
173
+
174
+ def get_current_services(scan_root: str = "services/product") -> List[str]:
175
+ """
176
+ Scan filesystem for current service.json files.
177
+
178
+ Args:
179
+ scan_root: Root directory to scan
180
+
181
+ Returns:
182
+ List of service.json file paths
183
+ """
184
+ import subprocess
185
+
186
+ try:
187
+ result = subprocess.run(
188
+ ["find", scan_root, "-type", "f", "-name", "service.json"],
189
+ capture_output=True,
190
+ text=True,
191
+ timeout=5
192
+ )
193
+
194
+ if result.returncode == 0:
195
+ services = [line.strip() for line in result.stdout.split('\n') if line.strip()]
196
+ return sorted(services)
197
+ except subprocess.TimeoutExpired:
198
+ logger.warning(f"Service scan timed out for {scan_root}")
199
+ except subprocess.SubprocessError as e:
200
+ logger.warning(f"Service scan failed for {scan_root}: {e}")
201
+
202
+ return []
203
+
204
+
205
+ def main():
206
+ """CLI interface for snapshot operations."""
207
+ if len(sys.argv) < 2:
208
+ print("Usage: resource_snapshot.py <command> [args]")
209
+ print("Commands:")
210
+ print(" save - Save current service snapshot")
211
+ print(" load - Load and display snapshot")
212
+ print(" diff - Compare current state with snapshot (uses hash-based comparison)")
213
+ print(" scan - Scan for services without saving")
214
+ print(" profile - Profile performance and resource usage (Task 10.5)")
215
+ print(" watch [interval] - Continuous monitoring with hash-based change detection")
216
+ print()
217
+ print("Examples:")
218
+ print(" python3 resource_snapshot.py scan")
219
+ print(" python3 resource_snapshot.py diff")
220
+ print(" python3 resource_snapshot.py profile")
221
+ print(" python3 resource_snapshot.py watch 5")
222
+ return
223
+
224
+ command = sys.argv[1]
225
+
226
+ if command == "save":
227
+ services = get_current_services()
228
+ save_snapshot(services)
229
+ print(f"✅ Snapshot saved: {len(services)} services")
230
+
231
+ elif command == "load":
232
+ snapshot = load_snapshot()
233
+ print(json.dumps(snapshot, indent=2))
234
+
235
+ elif command == "diff":
236
+ import time
237
+ start = time.time()
238
+
239
+ old = load_snapshot()
240
+ new = get_current_services()
241
+ added, removed, modified = diff_snapshots(old, new, use_hashes=True)
242
+
243
+ elapsed = (time.time() - start) * 1000 # Convert to ms
244
+
245
+ print(f"📊 Snapshot diff (computed in {elapsed:.1f}ms):")
246
+ print(f" Previous: {old.get('count', 0)} services")
247
+ print(f" Current: {len(new)} services")
248
+ print(f" Added: {len(added)}")
249
+ print(f" Removed: {len(removed)}")
250
+ print(f" Modified: {len(modified)}")
251
+
252
+ if added:
253
+ print("\n New services:")
254
+ for svc in sorted(added):
255
+ print(f" + {svc}")
256
+
257
+ if removed:
258
+ print("\n Removed services:")
259
+ for svc in sorted(removed):
260
+ print(f" - {svc}")
261
+
262
+ if modified:
263
+ print("\n Modified services (content changed):")
264
+ for svc in sorted(modified):
265
+ print(f" ~ {svc}")
266
+
267
+ print(f"\n ⚡ Hash-based comparison: enabled")
268
+ if old.get('hash'):
269
+ print(f" 🔐 Aggregate hash: {old['hash'][:8]}...")
270
+
271
+ elif command == "scan":
272
+ services = get_current_services()
273
+ print(f"🔍 Found {len(services)} services:")
274
+ for svc in services:
275
+ print(f" - {svc}")
276
+
277
+ elif command == "profile":
278
+ """Profile resource usage and performance metrics."""
279
+ import time
280
+ import resource
281
+
282
+ print("🔬 Profiling snapshot operations...")
283
+ print()
284
+
285
+ # Memory baseline
286
+ baseline_mem = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1024 # KB to MB
287
+
288
+ # Time the scan operation
289
+ start = time.time()
290
+ services = get_current_services()
291
+ scan_time = (time.time() - start) * 1000
292
+
293
+ # Time hash computation
294
+ start = time.time()
295
+ if services:
296
+ svc_hash = compute_services_hash(services)
297
+ hash_time = (time.time() - start) * 1000 if services else 0
298
+
299
+ # Time snapshot save
300
+ start = time.time()
301
+ save_snapshot(services, include_hashes=True)
302
+ save_time = (time.time() - start) * 1000
303
+
304
+ # Memory after operations
305
+ final_mem = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1024
306
+ memory_used = final_mem - baseline_mem
307
+
308
+ print("📊 Performance Profile:")
309
+ print(f" Services scanned: {len(services)}")
310
+ print(f" Scan time: {scan_time:.2f}ms")
311
+ print(f" Hash computation: {hash_time:.2f}ms")
312
+ print(f" Snapshot save: {save_time:.2f}ms")
313
+ print(f" Total time: {scan_time + hash_time + save_time:.2f}ms")
314
+ print(f" Memory used: {memory_used:.2f} MB")
315
+ print()
316
+
317
+ # Performance targets
318
+ print("🎯 Performance Targets:")
319
+ print(f" Scan < 500ms: {'✅ PASS' if scan_time < 500 else '⚠️ FAIL'}")
320
+ print(f" Memory < 10MB: {'✅ PASS' if memory_used < 10 else '⚠️ FAIL'}")
321
+ print()
322
+
323
+ if services:
324
+ print(f"🔐 Aggregate hash: {svc_hash[:16]}...")
325
+
326
+ elif command == "watch":
327
+ """Continuous monitoring mode for daemon operation."""
328
+ import time
329
+
330
+ scan_interval = int(sys.argv[2]) if len(sys.argv) > 2 else 5
331
+
332
+ print(f"👁️ Starting continuous monitoring (interval: {scan_interval}s)")
333
+ print(" Press Ctrl+C to stop")
334
+ print()
335
+
336
+ # Initialize snapshot if needed
337
+ if not SNAPSHOT_FILE.exists():
338
+ services = get_current_services()
339
+ save_snapshot(services)
340
+ print(f"✅ Initial snapshot: {len(services)} services")
341
+
342
+ try:
343
+ while True:
344
+ old = load_snapshot()
345
+ current = get_current_services()
346
+ added, removed, modified = diff_snapshots(old, current, use_hashes=True)
347
+
348
+ if added or removed or modified:
349
+ print(f"🔍 Changes detected at {datetime.now(timezone.utc).strftime('%H:%M:%S')}:")
350
+ if added:
351
+ print(f" + {len(added)} new service(s)")
352
+ for svc in added:
353
+ print(f" + {svc}")
354
+ if removed:
355
+ print(f" - {len(removed)} removed service(s)")
356
+ for svc in removed:
357
+ print(f" - {svc}")
358
+ if modified:
359
+ print(f" ~ {len(modified)} modified service(s)")
360
+ for svc in modified:
361
+ print(f" ~ {svc}")
362
+
363
+ # Update snapshot
364
+ save_snapshot(current)
365
+ print(f"✅ Snapshot updated: {len(current)} services")
366
+
367
+ time.sleep(scan_interval)
368
+
369
+ except KeyboardInterrupt:
370
+ print("\n👋 Monitoring stopped")
371
+
372
+ else:
373
+ print(f"Unknown command: {command}")
374
+ print("\nAvailable commands:")
375
+ print(" save - Save current snapshot")
376
+ print(" load - Load and display snapshot")
377
+ print(" diff - Compare current state with snapshot")
378
+ print(" scan - Scan for services without saving")
379
+ print(" profile - Profile performance and resource usage")
380
+ print(" watch [N] - Continuous monitoring with N-second interval (default: 5)")
381
+
382
+
383
+ if __name__ == "__main__":
384
+ main()
@@ -0,0 +1,145 @@
1
+ # Copyright (c) 2026 Flisk contributors
2
+ # SPDX-License-Identifier: MIT
3
+ # =============================================================================
4
+ # 📸 RESOURCE SNAPSHOT - Starlark Interface
5
+ # =============================================================================
6
+ # Provides Starlark functions for snapshot-based incremental resource discovery
7
+ # =============================================================================
8
+
9
+ # Python script path (relative to Tiltfile)
10
+ _SNAPSHOT_SCRIPT = ".tdk/.tdk-out/snapshots/resource_snapshot.py"
11
+
12
+ def _run_snapshot_command(cmd):
13
+ """Run a snapshot command via Python script."""
14
+ result = local(
15
+ "python3 " + _SNAPSHOT_SCRIPT + " " + cmd,
16
+ quiet=True,
17
+ echo_off=True
18
+ )
19
+ return str(result)
20
+
21
+ def save_snapshot(resources):
22
+ """
23
+ Save current resource list to snapshot file.
24
+
25
+ Args:
26
+ resources: List of service.json file paths
27
+ """
28
+ # Use Python to save snapshot directly
29
+ result = local(
30
+ "cd " + config.main_dir + " && python3 " + _SNAPSHOT_SCRIPT + " save",
31
+ quiet=True,
32
+ echo_off=True
33
+ )
34
+
35
+ return str(result)
36
+
37
+ def load_from_file():
38
+ """
39
+ Load previous snapshot from file.
40
+
41
+ Returns:
42
+ Dict with 'timestamp', 'resources', 'count'
43
+ """
44
+ result = _run_snapshot_command("load")
45
+
46
+ # Parse JSON result
47
+ if result and result.strip():
48
+ # In Starlark, we can't use try/except, so we just try to decode
49
+ parsed = decode_json(result)
50
+ if parsed:
51
+ return parsed
52
+
53
+ # Return empty snapshot on error
54
+ return {
55
+ "timestamp": None,
56
+ "services": [],
57
+ "count": 0
58
+ }
59
+
60
+ def diff_snapshots(old_snapshot, current_resources):
61
+ """
62
+ Compare old snapshot with current resources.
63
+
64
+ Args:
65
+ old_snapshot: Previous snapshot dict
66
+ current_resources: Current list of resource paths
67
+
68
+ Returns:
69
+ Struct with 'added' and 'removed' lists
70
+ """
71
+ old_set = {}
72
+ for resource in old_snapshot.get("resources", []):
73
+ old_set[resource] = True
74
+
75
+ current_set = {}
76
+ for resource in current_resources:
77
+ current_set[resource] = True
78
+
79
+ # Find added resources
80
+ added = []
81
+ for resource in current_resources:
82
+ if resource not in old_set:
83
+ added.append(resource)
84
+
85
+ # Find removed resources
86
+ removed = []
87
+ for resource in old_snapshot.get("resources", []):
88
+ if resource not in current_set:
89
+ removed.append(resource)
90
+
91
+ return struct(
92
+ added=added,
93
+ removed=removed,
94
+ added_count=len(added),
95
+ removed_count=len(removed)
96
+ )
97
+
98
+ def get_current_resources(scan_roots=["services/product"]):
99
+ """
100
+ Scan filesystem for current service.json files.
101
+
102
+ Args:
103
+ scan_roots: List of root directories to scan
104
+
105
+ Returns:
106
+ List of service.json file paths (relative to project root)
107
+ """
108
+ all_resources = []
109
+
110
+ for root in scan_roots:
111
+ # Use find command to locate service.json files
112
+ cmd = "find " + root + " -type f -name 'service.json' 2>/dev/null | sort"
113
+ result = local(cmd, quiet=True, echo_off=True)
114
+
115
+ if result:
116
+ lines = str(result).strip().split("\n")
117
+ for line in lines:
118
+ line = line.strip()
119
+ if line:
120
+ all_resources.append(line)
121
+
122
+ return all_resources
123
+
124
+ def snapshot_exists():
125
+ """Check if snapshot file exists."""
126
+ result = local(
127
+ "test -f .tdk/.tdk-out/snapshots/resource-snapshot.json && echo 'yes' || echo 'no'",
128
+ quiet=True,
129
+ echo_off=True
130
+ )
131
+ return str(result).strip() == "yes"
132
+
133
+ # Get the path to the resource snapshot file
134
+ def get_resource_snapshot_path():
135
+ """Return the path to the resource snapshot JSON file."""
136
+ return ".tdk/.tdk-out/snapshots/resource-snapshot.json"
137
+
138
+ # Export public API
139
+ ResourceSnapshot = struct(
140
+ save=save_snapshot,
141
+ load_from_file=load_from_file,
142
+ diff=diff_snapshots,
143
+ scan=get_current_resources,
144
+ exists=snapshot_exists,
145
+ )
@@ -0,0 +1,3 @@
1
+ # Copyright (c) 2026 Flisk Landscape contributors
2
+ # SPDX-License-Identifier: MIT
3
+ MANIFEST_SCHEMA_PATH = ".tilt/schemas/manifest-schema.json"
@@ -0,0 +1,9 @@
1
+ appName: nats-connector
2
+ appType: backend
3
+ stack: platform
4
+ port: 4103
5
+ features:
6
+ - nats
7
+ dependsOn:
8
+ replicas: 1
9
+ runtime: node
@@ -0,0 +1,9 @@
1
+ appName: nats-http-bridge
2
+ appType: backend
3
+ stack: platform
4
+ port: 4102
5
+ features:
6
+ - nats
7
+ dependsOn:
8
+ replicas: 1
9
+ runtime: node
@@ -0,0 +1,26 @@
1
+ appName: orchestrator-glue-backend
2
+ appType: backend
3
+ stack: platform
4
+ port: 5001
5
+ databaseName: tdk_project_orchestrator
6
+ features:
7
+ - nats
8
+ - prisma
9
+ healthCheck:
10
+ port: 5001
11
+ interval: 30
12
+ path: /health
13
+ infisicalSecretPath: /services/orchestrator-glue
14
+ dependsOn:
15
+ replicas: 1
16
+ resources:
17
+ limits:
18
+ cpu: 500m
19
+ memory: 512Mi
20
+ requests:
21
+ cpu: 100m
22
+ memory: 256Mi
23
+ runtime: bun
24
+ traefik:
25
+ host: orchestrator.backend.tdk-project.local
26
+ pathPrefix: /api/orchestrator
@@ -0,0 +1,9 @@
1
+ appName: synthetic-monitor
2
+ appType: backend
3
+ stack: platform
4
+ port: 4100
5
+ features:
6
+ - nats
7
+ dependsOn:
8
+ replicas: 1
9
+ runtime: bun