@tdk-landscape/tdk-cli-core 1.3.45 → 1.3.48

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 (431) hide show
  1. package/.github/workflows/release-binaries.yml +54 -0
  2. package/.pre-commit-config.yaml +57 -0
  3. package/Makefile +92 -0
  4. package/bun.lock +538 -0
  5. package/cli/AGENTS.md +390 -0
  6. package/cli/DESIGN.md +735 -0
  7. package/cli/biome.json +44 -0
  8. package/cli/dependency-graph.svg +1135 -0
  9. package/cli/knip.json +6 -0
  10. package/cli/package.json +77 -0
  11. package/cli/pnpm-lock.yaml +2305 -0
  12. package/cli/pnpm-workspace.yaml +2 -0
  13. package/cli/shared-platform-engineering/docker-templates/bun-hoisted-symlink-fix.sh +23 -0
  14. package/cli/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +464 -0
  15. package/cli/shared-platform-engineering/docker-templates/install-deps.sh +152 -0
  16. package/cli/shared-platform-engineering/docker-templates/prisma-bun-client-link-fix.sh +12 -0
  17. package/cli/shared-platform-engineering/docker-templates/prisma-normalize-client.sh +56 -0
  18. package/{dist/cli.js → cli/src/cli.ts} +21 -13
  19. package/cli/src/commands/__tests__/always-enabled-infra.test.ts +115 -0
  20. package/cli/src/commands/__tests__/config.test.ts +146 -0
  21. package/cli/src/commands/__tests__/doctor.test.ts +557 -0
  22. package/cli/src/commands/__tests__/error-handling.test.ts +78 -0
  23. package/cli/src/commands/__tests__/phases-model.test.ts +163 -0
  24. package/cli/src/commands/__tests__/project-resource-features-e2e.test.ts +207 -0
  25. package/cli/src/commands/__tests__/project.test.ts +68 -0
  26. package/cli/src/commands/__tests__/resource.test.ts +226 -0
  27. package/cli/src/commands/__tests__/saas-starter-integration.test.ts +196 -0
  28. package/cli/src/commands/__tests__/stack-features-e2e.test.ts +129 -0
  29. package/cli/src/commands/__tests__/upgrade.test.ts +101 -0
  30. package/{dist/commands/completion.js → cli/src/commands/completion.ts} +78 -72
  31. package/cli/src/commands/config.ts +299 -0
  32. package/cli/src/commands/doctor.ts +790 -0
  33. package/cli/src/commands/down.ts +37 -0
  34. package/cli/src/commands/help.ts +150 -0
  35. package/cli/src/commands/networks-design.md +80 -0
  36. package/cli/src/commands/networks.ts +332 -0
  37. package/cli/src/commands/project.ts +439 -0
  38. package/cli/src/commands/projects.ts +82 -0
  39. package/cli/src/commands/resource.ts +652 -0
  40. package/cli/src/commands/resources.ts +95 -0
  41. package/cli/src/commands/stack.ts +128 -0
  42. package/cli/src/commands/stacks.ts +52 -0
  43. package/cli/src/commands/status.ts +88 -0
  44. package/cli/src/commands/ui.tsx +843 -0
  45. package/cli/src/commands/up.ts +150 -0
  46. package/cli/src/commands/upgrade.ts +570 -0
  47. package/{dist/commands/version.js → cli/src/commands/version.ts} +5 -5
  48. package/cli/src/components/Accessible.tsx +21 -0
  49. package/cli/src/components/BaseTooltip.tsx +66 -0
  50. package/cli/src/components/DetailPanel.tsx +146 -0
  51. package/cli/src/components/FileTree.tsx +89 -0
  52. package/cli/src/components/ResourceSelectInput.tsx +30 -0
  53. package/cli/src/components/ResourceTable.tsx +78 -0
  54. package/cli/src/components/TabBar.tsx +53 -0
  55. package/cli/src/components/Tooltip.tsx +11 -0
  56. package/{dist/components/index.js → cli/src/components/index.ts} +0 -1
  57. package/cli/src/config/platform-standards.test.ts +11 -0
  58. package/cli/src/config/platform-standards.ts +196 -0
  59. package/cli/src/generator/__tests__/extension-fetch.test.ts +220 -0
  60. package/cli/src/generator/__tests__/template-engine.test.ts +70 -0
  61. package/cli/src/generator/extension-fetch.ts +279 -0
  62. package/cli/src/generator/template-engine.ts +754 -0
  63. package/cli/src/index.ts +86 -0
  64. package/cli/src/templates.d.ts +4 -0
  65. package/cli/src/types/index.ts +351 -0
  66. package/cli/src/utils/__tests__/cache.test.ts +98 -0
  67. package/cli/src/utils/__tests__/formatting.test.ts +170 -0
  68. package/cli/src/utils/__tests__/paths.test.ts +180 -0
  69. package/cli/src/utils/__tests__/port-assignment.test.ts +121 -0
  70. package/cli/src/utils/__tests__/service-urls.test.ts +174 -0
  71. package/cli/src/utils/__tests__/services.test.ts +531 -0
  72. package/cli/src/utils/__tests__/tilt.test.ts +143 -0
  73. package/cli/src/utils/__tests__/validation.test.ts +148 -0
  74. package/cli/src/utils/cache.ts +76 -0
  75. package/cli/src/utils/command-helpers.ts +54 -0
  76. package/cli/src/utils/constants.ts +126 -0
  77. package/cli/src/utils/discovery-context.ts +49 -0
  78. package/cli/src/utils/docker.ts +20 -0
  79. package/cli/src/utils/doctor-runtime.ts +604 -0
  80. package/cli/src/utils/env-validator.ts +139 -0
  81. package/cli/src/utils/errors.ts +168 -0
  82. package/cli/src/utils/file-helpers.ts +62 -0
  83. package/cli/src/utils/formatting.ts +215 -0
  84. package/cli/src/utils/paths.ts +53 -0
  85. package/cli/src/utils/port-assignment.ts +106 -0
  86. package/cli/src/utils/project-features.ts +118 -0
  87. package/cli/src/utils/project-templates.ts +28 -0
  88. package/cli/src/utils/prompt.ts +123 -0
  89. package/cli/src/utils/resource-features.ts +209 -0
  90. package/cli/src/utils/service-urls.ts +124 -0
  91. package/cli/src/utils/services.ts +363 -0
  92. package/cli/src/utils/stack-features.ts +30 -0
  93. package/cli/src/utils/tar.ts +24 -0
  94. package/cli/src/utils/tilt.ts +113 -0
  95. package/cli/src/utils/validation.ts +67 -0
  96. package/{templates → cli/templates}/Tiltfile.hbs +1 -1
  97. package/cli/tsconfig.json +25 -0
  98. package/cli/tsconfig.typecheck.json +8 -0
  99. package/docs/FEATURES.md +279 -0
  100. package/engine/topologies/platform/docker/dockerfile/dockerfile.star +3 -3
  101. package/engine/topologies/platform/docker/generators/golden_docker_generator_v2.star +1 -1
  102. package/engine/topologies/platform/docker/layers/l2_dependency_layers.star +0 -3
  103. package/engine/topologies/platform/docker/layers/l3_builder_layers.star +1 -1
  104. package/engine/topologies/platform/docker/layers/l4_runtime_layers.star +1 -1
  105. package/engine/topologies/platform/docker/secrets/infisical.star +19 -47
  106. package/engine/topologies/tilt/resources/orchestrator/apply_migrator_orchestration.star +1 -1
  107. package/install.sh +242 -0
  108. package/knip.json +10 -0
  109. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/.openspec.yaml +2 -0
  110. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/design.md +102 -0
  111. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/proposal.md +31 -0
  112. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-notifications/spec.md +48 -0
  113. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-orchestration/spec.md +63 -0
  114. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-troubleshooting/spec.md +56 -0
  115. package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/tasks.md +61 -0
  116. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/.openspec.yaml +2 -0
  117. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/design.md +114 -0
  118. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/proposal.md +32 -0
  119. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/manifest-field-migration/spec.md +20 -0
  120. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/resource-terminology-standard/spec.md +20 -0
  121. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/stack-terminology-standard/spec.md +20 -0
  122. package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/tasks.md +194 -0
  123. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/.openspec.yaml +2 -0
  124. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/design.md +111 -0
  125. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/proposal.md +33 -0
  126. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/function-naming-alignment/spec.md +12 -0
  127. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/optional-parameter-patterns/spec.md +18 -0
  128. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-documentation/spec.md +16 -0
  129. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-naming-consistency/spec.md +12 -0
  130. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-ordering-standard/spec.md +12 -0
  131. package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/tasks.md +194 -0
  132. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/.openspec.yaml +2 -0
  133. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/codebase-audit-report.md +62 -0
  134. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/design.md +84 -0
  135. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/proposal.md +31 -0
  136. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/codebase-audit/spec.md +27 -0
  137. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/dead-code-cleanup/spec.md +27 -0
  138. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/test-gap-fill/spec.md +23 -0
  139. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/todo-resolution/spec.md +27 -0
  140. package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/tasks.md +39 -0
  141. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/.openspec.yaml +5 -0
  142. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/design.md +94 -0
  143. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/proposal.md +46 -0
  144. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/ai-slop-cleanup/CLEANUP_REPORT_8.md +174 -0
  145. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/ai-slop-cleanup/CRITICAL_ASSESSMENT_8.md +160 -0
  146. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/circular-deps/CRITICAL_ASSESSMENT_4.md +381 -0
  147. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/dead-code/CRITICAL_ASSESSMENT_3.md +316 -0
  148. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/deduplication/CRITICAL_ASSESSMENT_1.md +290 -0
  149. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/deduplication/IMPLEMENTATION_SUMMARY_1.md +233 -0
  150. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/defensive-cleanup/CRITICAL_ASSESSMENT_6.md +835 -0
  151. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/legacy-cleanup/CRITICAL_ASSESSMENT_7.md +254 -0
  152. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/legacy-cleanup/IMPLEMENTATION_SUMMARY_7.md +187 -0
  153. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/strong-typing/CRITICAL_ASSESSMENT_5.md +269 -0
  154. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/type-consolidation/CRITICAL_ASSESSMENT_2.md +312 -0
  155. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/type-consolidation/IMPLEMENTATION_SUMMARY.md +170 -0
  156. package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/tasks.md +137 -0
  157. package/openspec/changes/archive/2026-06-25-landscape-consolidation/.openspec.yaml +2 -0
  158. package/openspec/changes/archive/2026-06-25-landscape-consolidation/design.md +80 -0
  159. package/openspec/changes/archive/2026-06-25-landscape-consolidation/proposal.md +40 -0
  160. package/openspec/changes/archive/2026-06-25-landscape-consolidation/spec.md +52 -0
  161. package/openspec/changes/archive/2026-06-25-landscape-consolidation/tasks.md +51 -0
  162. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/.openspec.yaml +2 -0
  163. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/design.md +43 -0
  164. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/proposal.md +29 -0
  165. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/specs/self-contained-generated-projects/spec.md +67 -0
  166. package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/tasks.md +27 -0
  167. package/openspec/specs/manifest-field-migration/spec.md +24 -0
  168. package/openspec/specs/resource-terminology-standard/spec.md +24 -0
  169. package/openspec/specs/self-contained-generated-projects/spec.md +67 -0
  170. package/openspec/specs/stack-terminology-standard/spec.md +24 -0
  171. package/package.json +27 -64
  172. package/platform/services/platform/proxy/service.yaml +14 -0
  173. package/scripts/audit-codebase.sh +213 -0
  174. package/scripts/install-git-hooks.sh +14 -0
  175. package/scripts/release-binaries.sh +94 -0
  176. package/scripts/setup-pre-commit.sh +33 -0
  177. package/scripts/stage-npm-engine.sh +36 -0
  178. package/shared-platform-engineering/docker-templates/bun-hoisted-symlink-fix.sh +23 -0
  179. package/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +464 -0
  180. package/shared-platform-engineering/docker-templates/install-deps.sh +152 -0
  181. package/shared-platform-engineering/docker-templates/prisma-bun-client-link-fix.sh +12 -0
  182. package/shared-platform-engineering/docker-templates/prisma-normalize-client.sh +56 -0
  183. package/tests/tilt-engine/__init__.py +5 -0
  184. package/tests/tilt-engine/conftest.py +182 -0
  185. package/tests/tilt-engine/fixtures/appointment-frontend-service.json +11 -0
  186. package/tests/tilt-engine/fixtures/identity-backend-service.json +12 -0
  187. package/tests/tilt-engine/fixtures/invalid-service.json +4 -0
  188. package/tests/tilt-engine/test_agents_md_generator.py +341 -0
  189. package/tests/tilt-engine/test_agents_md_integration.py +378 -0
  190. package/tests/tilt-engine/test_cache_operations.py +181 -0
  191. package/tests/tilt-engine/test_cache_persistence.py +142 -0
  192. package/tests/tilt-engine/test_code_executor.py +152 -0
  193. package/tests/tilt-engine/test_code_viewer.py +127 -0
  194. package/tests/tilt-engine/test_compose_port_anchors.py +310 -0
  195. package/tests/tilt-engine/test_config_inspector.py +162 -0
  196. package/tests/tilt-engine/test_daemon_focus_mode.py +89 -0
  197. package/tests/tilt-engine/test_daemon_polling.py +122 -0
  198. package/tests/tilt-engine/test_daemon_registration.py +115 -0
  199. package/tests/tilt-engine/test_daemon_validation.py +107 -0
  200. package/tests/tilt-engine/test_docker_generator_bugs.py +493 -0
  201. package/tests/tilt-engine/test_docker_prune.py +119 -0
  202. package/tests/tilt-engine/test_dockerignore_path_bug.py +82 -0
  203. package/tests/tilt-engine/test_file_browser.py +193 -0
  204. package/tests/tilt-engine/test_frontend_basepath_manifest.py +27 -0
  205. package/tests/tilt-engine/test_health_dependencies.py +130 -0
  206. package/tests/tilt-engine/test_health_endpoints.py +118 -0
  207. package/tests/tilt-engine/test_health_tilt_ui.py +85 -0
  208. package/tests/tilt-engine/test_safety_aliases.py +84 -0
  209. package/tests/tilt-engine/test_snapshot_diff.py +136 -0
  210. package/tests/tilt-engine/test_snapshot_persistence.py +163 -0
  211. package/tests/tilt-engine/test_snapshot_scanning.py +123 -0
  212. package/tests/tilt-engine/test_standalone_project_boot.py +61 -0
  213. package/tests/tilt-engine/test_standalone_traefik.py +108 -0
  214. package/dist/cli.d.ts +0 -3
  215. package/dist/cli.d.ts.map +0 -1
  216. package/dist/cli.js.map +0 -1
  217. package/dist/commands/completion.d.ts +0 -3
  218. package/dist/commands/completion.d.ts.map +0 -1
  219. package/dist/commands/completion.js.map +0 -1
  220. package/dist/commands/config.d.ts +0 -3
  221. package/dist/commands/config.d.ts.map +0 -1
  222. package/dist/commands/config.js +0 -231
  223. package/dist/commands/config.js.map +0 -1
  224. package/dist/commands/doctor.d.ts +0 -7
  225. package/dist/commands/doctor.d.ts.map +0 -1
  226. package/dist/commands/doctor.js +0 -597
  227. package/dist/commands/doctor.js.map +0 -1
  228. package/dist/commands/down.d.ts +0 -3
  229. package/dist/commands/down.d.ts.map +0 -1
  230. package/dist/commands/down.js +0 -32
  231. package/dist/commands/down.js.map +0 -1
  232. package/dist/commands/help.d.ts +0 -2
  233. package/dist/commands/help.d.ts.map +0 -1
  234. package/dist/commands/help.js +0 -130
  235. package/dist/commands/help.js.map +0 -1
  236. package/dist/commands/networks.d.ts +0 -3
  237. package/dist/commands/networks.d.ts.map +0 -1
  238. package/dist/commands/networks.js +0 -260
  239. package/dist/commands/networks.js.map +0 -1
  240. package/dist/commands/project.d.ts +0 -3
  241. package/dist/commands/project.d.ts.map +0 -1
  242. package/dist/commands/project.js +0 -373
  243. package/dist/commands/project.js.map +0 -1
  244. package/dist/commands/projects.d.ts +0 -3
  245. package/dist/commands/projects.d.ts.map +0 -1
  246. package/dist/commands/projects.js +0 -71
  247. package/dist/commands/projects.js.map +0 -1
  248. package/dist/commands/resource.d.ts +0 -69
  249. package/dist/commands/resource.d.ts.map +0 -1
  250. package/dist/commands/resource.js +0 -579
  251. package/dist/commands/resource.js.map +0 -1
  252. package/dist/commands/resources.d.ts +0 -3
  253. package/dist/commands/resources.d.ts.map +0 -1
  254. package/dist/commands/resources.js +0 -73
  255. package/dist/commands/resources.js.map +0 -1
  256. package/dist/commands/stack.d.ts +0 -3
  257. package/dist/commands/stack.d.ts.map +0 -1
  258. package/dist/commands/stack.js +0 -97
  259. package/dist/commands/stack.js.map +0 -1
  260. package/dist/commands/stacks.d.ts +0 -3
  261. package/dist/commands/stacks.d.ts.map +0 -1
  262. package/dist/commands/stacks.js +0 -43
  263. package/dist/commands/stacks.js.map +0 -1
  264. package/dist/commands/status.d.ts +0 -3
  265. package/dist/commands/status.d.ts.map +0 -1
  266. package/dist/commands/status.js +0 -71
  267. package/dist/commands/status.js.map +0 -1
  268. package/dist/commands/ui.d.ts +0 -3
  269. package/dist/commands/ui.d.ts.map +0 -1
  270. package/dist/commands/ui.js +0 -445
  271. package/dist/commands/ui.js.map +0 -1
  272. package/dist/commands/up.d.ts +0 -3
  273. package/dist/commands/up.d.ts.map +0 -1
  274. package/dist/commands/up.js +0 -110
  275. package/dist/commands/up.js.map +0 -1
  276. package/dist/commands/upgrade.d.ts +0 -11
  277. package/dist/commands/upgrade.d.ts.map +0 -1
  278. package/dist/commands/upgrade.js +0 -496
  279. package/dist/commands/upgrade.js.map +0 -1
  280. package/dist/commands/version.d.ts +0 -3
  281. package/dist/commands/version.d.ts.map +0 -1
  282. package/dist/commands/version.js.map +0 -1
  283. package/dist/components/Accessible.d.ts +0 -8
  284. package/dist/components/Accessible.d.ts.map +0 -1
  285. package/dist/components/Accessible.js +0 -10
  286. package/dist/components/Accessible.js.map +0 -1
  287. package/dist/components/BaseTooltip.d.ts +0 -4
  288. package/dist/components/BaseTooltip.d.ts.map +0 -1
  289. package/dist/components/BaseTooltip.js +0 -28
  290. package/dist/components/BaseTooltip.js.map +0 -1
  291. package/dist/components/DetailPanel.d.ts +0 -4
  292. package/dist/components/DetailPanel.d.ts.map +0 -1
  293. package/dist/components/DetailPanel.js +0 -18
  294. package/dist/components/DetailPanel.js.map +0 -1
  295. package/dist/components/FileTree.d.ts +0 -4
  296. package/dist/components/FileTree.d.ts.map +0 -1
  297. package/dist/components/FileTree.js +0 -47
  298. package/dist/components/FileTree.js.map +0 -1
  299. package/dist/components/ResourceSelectInput.d.ts +0 -4
  300. package/dist/components/ResourceSelectInput.d.ts.map +0 -1
  301. package/dist/components/ResourceSelectInput.js +0 -7
  302. package/dist/components/ResourceSelectInput.js.map +0 -1
  303. package/dist/components/ResourceTable.d.ts +0 -4
  304. package/dist/components/ResourceTable.d.ts.map +0 -1
  305. package/dist/components/ResourceTable.js +0 -18
  306. package/dist/components/ResourceTable.js.map +0 -1
  307. package/dist/components/TabBar.d.ts +0 -4
  308. package/dist/components/TabBar.d.ts.map +0 -1
  309. package/dist/components/TabBar.js +0 -17
  310. package/dist/components/TabBar.js.map +0 -1
  311. package/dist/components/Tooltip.d.ts +0 -12
  312. package/dist/components/Tooltip.d.ts.map +0 -1
  313. package/dist/components/Tooltip.js +0 -12
  314. package/dist/components/Tooltip.js.map +0 -1
  315. package/dist/components/index.d.ts +0 -8
  316. package/dist/components/index.d.ts.map +0 -1
  317. package/dist/components/index.js.map +0 -1
  318. package/dist/config/platform-standards.d.ts +0 -159
  319. package/dist/config/platform-standards.d.ts.map +0 -1
  320. package/dist/config/platform-standards.js +0 -181
  321. package/dist/config/platform-standards.js.map +0 -1
  322. package/dist/generator/extension-fetch.d.ts +0 -25
  323. package/dist/generator/extension-fetch.d.ts.map +0 -1
  324. package/dist/generator/extension-fetch.js +0 -252
  325. package/dist/generator/extension-fetch.js.map +0 -1
  326. package/dist/generator/template-engine.d.ts +0 -61
  327. package/dist/generator/template-engine.d.ts.map +0 -1
  328. package/dist/generator/template-engine.js +0 -557
  329. package/dist/generator/template-engine.js.map +0 -1
  330. package/dist/index.d.ts +0 -11
  331. package/dist/index.d.ts.map +0 -1
  332. package/dist/index.js +0 -11
  333. package/dist/index.js.map +0 -1
  334. package/dist/types/index.d.ts +0 -255
  335. package/dist/types/index.d.ts.map +0 -1
  336. package/dist/types/index.js +0 -17
  337. package/dist/types/index.js.map +0 -1
  338. package/dist/utils/cache.d.ts +0 -19
  339. package/dist/utils/cache.d.ts.map +0 -1
  340. package/dist/utils/cache.js +0 -64
  341. package/dist/utils/cache.js.map +0 -1
  342. package/dist/utils/command-helpers.d.ts +0 -17
  343. package/dist/utils/command-helpers.d.ts.map +0 -1
  344. package/dist/utils/command-helpers.js +0 -41
  345. package/dist/utils/command-helpers.js.map +0 -1
  346. package/dist/utils/constants.d.ts +0 -52
  347. package/dist/utils/constants.d.ts.map +0 -1
  348. package/dist/utils/constants.js +0 -112
  349. package/dist/utils/constants.js.map +0 -1
  350. package/dist/utils/discovery-context.d.ts +0 -4
  351. package/dist/utils/discovery-context.d.ts.map +0 -1
  352. package/dist/utils/discovery-context.js +0 -39
  353. package/dist/utils/discovery-context.js.map +0 -1
  354. package/dist/utils/docker.d.ts +0 -4
  355. package/dist/utils/docker.d.ts.map +0 -1
  356. package/dist/utils/docker.js +0 -19
  357. package/dist/utils/docker.js.map +0 -1
  358. package/dist/utils/doctor-runtime.d.ts +0 -66
  359. package/dist/utils/doctor-runtime.d.ts.map +0 -1
  360. package/dist/utils/doctor-runtime.js +0 -469
  361. package/dist/utils/doctor-runtime.js.map +0 -1
  362. package/dist/utils/env-validator.d.ts +0 -15
  363. package/dist/utils/env-validator.d.ts.map +0 -1
  364. package/dist/utils/env-validator.js +0 -109
  365. package/dist/utils/env-validator.js.map +0 -1
  366. package/dist/utils/errors.d.ts +0 -31
  367. package/dist/utils/errors.d.ts.map +0 -1
  368. package/dist/utils/errors.js +0 -140
  369. package/dist/utils/errors.js.map +0 -1
  370. package/dist/utils/file-helpers.d.ts +0 -14
  371. package/dist/utils/file-helpers.d.ts.map +0 -1
  372. package/dist/utils/file-helpers.js +0 -45
  373. package/dist/utils/file-helpers.js.map +0 -1
  374. package/dist/utils/formatting.d.ts +0 -30
  375. package/dist/utils/formatting.d.ts.map +0 -1
  376. package/dist/utils/formatting.js +0 -164
  377. package/dist/utils/formatting.js.map +0 -1
  378. package/dist/utils/paths.d.ts +0 -3
  379. package/dist/utils/paths.d.ts.map +0 -1
  380. package/dist/utils/paths.js +0 -41
  381. package/dist/utils/paths.js.map +0 -1
  382. package/dist/utils/port-assignment.d.ts +0 -6
  383. package/dist/utils/port-assignment.d.ts.map +0 -1
  384. package/dist/utils/port-assignment.js +0 -81
  385. package/dist/utils/port-assignment.js.map +0 -1
  386. package/dist/utils/project-features.d.ts +0 -23
  387. package/dist/utils/project-features.d.ts.map +0 -1
  388. package/dist/utils/project-features.js +0 -98
  389. package/dist/utils/project-features.js.map +0 -1
  390. package/dist/utils/project-templates.d.ts +0 -7
  391. package/dist/utils/project-templates.d.ts.map +0 -1
  392. package/dist/utils/project-templates.js +0 -24
  393. package/dist/utils/project-templates.js.map +0 -1
  394. package/dist/utils/prompt.d.ts +0 -28
  395. package/dist/utils/prompt.d.ts.map +0 -1
  396. package/dist/utils/prompt.js +0 -79
  397. package/dist/utils/prompt.js.map +0 -1
  398. package/dist/utils/resource-features.d.ts +0 -29
  399. package/dist/utils/resource-features.d.ts.map +0 -1
  400. package/dist/utils/resource-features.js +0 -171
  401. package/dist/utils/resource-features.js.map +0 -1
  402. package/dist/utils/service-urls.d.ts +0 -30
  403. package/dist/utils/service-urls.d.ts.map +0 -1
  404. package/dist/utils/service-urls.js +0 -93
  405. package/dist/utils/service-urls.js.map +0 -1
  406. package/dist/utils/services.d.ts +0 -18
  407. package/dist/utils/services.d.ts.map +0 -1
  408. package/dist/utils/services.js +0 -291
  409. package/dist/utils/services.js.map +0 -1
  410. package/dist/utils/stack-features.d.ts +0 -22
  411. package/dist/utils/stack-features.d.ts.map +0 -1
  412. package/dist/utils/stack-features.js +0 -13
  413. package/dist/utils/stack-features.js.map +0 -1
  414. package/dist/utils/tar.d.ts +0 -7
  415. package/dist/utils/tar.d.ts.map +0 -1
  416. package/dist/utils/tar.js +0 -21
  417. package/dist/utils/tar.js.map +0 -1
  418. package/dist/utils/tilt.d.ts +0 -19
  419. package/dist/utils/tilt.d.ts.map +0 -1
  420. package/dist/utils/tilt.js +0 -78
  421. package/dist/utils/tilt.js.map +0 -1
  422. package/dist/utils/validation.d.ts +0 -16
  423. package/dist/utils/validation.d.ts.map +0 -1
  424. package/dist/utils/validation.js +0 -58
  425. package/dist/utils/validation.js.map +0 -1
  426. /package/{README.md → cli/README.md} +0 -0
  427. /package/{bin → cli/bin}/tdk.js +0 -0
  428. /package/{templates → cli/templates}/.tiltignore.hbs +0 -0
  429. /package/{templates → cli/templates}/TILT_RESOURCE_DEFAULTS.star.hbs +0 -0
  430. /package/{templates → cli/templates}/TILT_TECH_STACK.star.hbs +0 -0
  431. /package/{templates → cli/templates}/spec.master.hbs +0 -0
package/cli/DESIGN.md ADDED
@@ -0,0 +1,735 @@
1
+ # TDK CLI Neon Design System v3.0
2
+ ## Cyberpunk Terminal UI - Practical & Beautiful
3
+
4
+ ```
5
+ ╔══════════════════════════════════════════════════════════════════════╗
6
+ ║ ▓▒░ TDK NEON EDITION ░▒▓ │ /path/to/project │ [ 36 services ] ║
7
+ ╠══════════════════════════════════════════════════════════════════════╣
8
+ ║ ║
9
+ ║ [1] OVERVIEW [2] RESOURCES [3] EVENTS [4] FILES [5] CONFIG ║
10
+ ║ ║
11
+ ║ ┌─ Stacks ───────────────────────────┐ ┌─ Stack Details ───────┐ ║
12
+ ║ │ │ │ │ ║
13
+ ║ │ ▸ order-planner (4 svcs) │ │ api │ ║
14
+ ║ │ order (3 svcs) │ │ 5 services • Ready │ ║
15
+ ║ │ ▓▒░ api (5 svcs) ░▒▓ │ │ │ ║
16
+ ║ │ billing (1 svc) │ │ ├─ id-mgmt-backend │ ║
17
+ ║ │ platform (7 svcs) │ │ ├─ id-mgmt-frontend │ ║
18
+ ║ │ │ │ ├─ id-sdk │ ║
19
+ ║ └──────────────────────────────────────┘ └────────────────────────┘ ║
20
+ ║ ║
21
+ ╚══════════════════════════════════════════════════════════════════════╝
22
+ ```
23
+
24
+ ---
25
+
26
+ ## DESIGN PHILOSOPHY
27
+
28
+ ### Core Principle: "Neon Spotlight, Not Neon Flood"
29
+
30
+ **Wrong:** Everything glows = visual noise, user fatigue
31
+ **Right:** Only important elements glow = clear hierarchy, comfortable use
32
+
33
+ **The 80/20 Rule:**
34
+ - 80% of UI: Clean, readable, neutral
35
+ - 20% of UI: Neon accents for focus points
36
+
37
+ ### Three Principles
38
+
39
+ 1. **Clarity First** — Information must be readable at a glance
40
+ 2. **Restraint** — Neon effects are precious, use sparingly
41
+ 3. **Graceful Degradation** — Works everywhere, shines where supported
42
+
43
+ ---
44
+
45
+ ## COLOR SYSTEM
46
+
47
+ ### Primary Palette (Neon Accents - Used Sparingly)
48
+
49
+ | Color | Hex | Usage | ANSI Fallback |
50
+ |-------|-----|-------|---------------|
51
+ | **Neon Cyan** | `#00FFFF` | Selected items, active tab, headers | Cyan (`\x1b[36m`) |
52
+ | **Acid Green** | `#39FF14` | Healthy/ready status | Green (`\x1b[32m`) |
53
+ | **Neon Yellow** | `#FFFF00` | Warnings, pending | Yellow (`\x1b[33m`) |
54
+ | **Neon Red** | `#FF073A` | Errors, failed | Red (`\x1b[31m`) |
55
+ | **Hot Pink** | `#FF0080` | Highlights, emphasis | Magenta (`\x1b[35m`) |
56
+
57
+ ### Neutral Palette (Workhorse Colors)
58
+
59
+ | Color | Hex | Usage | ANSI Fallback |
60
+ |-------|-----|-------|---------------|
61
+ | **Void Black** | `#0A0A0F` | Background | Default bg |
62
+ | **Panel Gray** | `#14141F` | Panels, cards | Black (`\x1b[40m`) |
63
+ | **Text White** | `#E0E0E0` | Primary text | White (`\x1b[37m`) |
64
+ | **Dim Gray** | `#6B7280` | Secondary text | Dark gray |
65
+ | **Border Gray** | `#374151` | Borders, dividers | Gray (`\x1b[90m`) |
66
+
67
+ ### Where to Apply Neon (And Where NOT To)
68
+
69
+ ✅ **USE Neon For:**
70
+ - Currently selected item (single element)
71
+ - Active tab only (not all tabs)
72
+ - Status indicators (ready/error/pending)
73
+ - Main header title
74
+ - Keyboard shortcut hints
75
+
76
+ ❌ **NEVER Use Neon For:**
77
+ - Every border (creates visual noise)
78
+ - Inactive/unselected items
79
+ - Body text
80
+ - Background fills
81
+ - Decorative elements
82
+
83
+ ---
84
+
85
+ ## RESPONSIVE LAYOUT
86
+
87
+ ### Breakpoints
88
+
89
+ | Width | Layout | Behavior |
90
+ |-------|--------|----------|
91
+ | **≥120 cols** | Full | Sidebar visible, full neon borders |
92
+ | **80-119 cols** | Compact | Sidebar visible, simplified borders |
93
+ | **60-79 cols** | Minimal | No sidebar, stacked tabs |
94
+ | **<60 cols** | Mobile | Single column, minimal chrome |
95
+
96
+ ### Content Density by Size
97
+
98
+ ```
99
+ Full (120+ cols):
100
+ ┌────────────────────────────────────────────────────────────────────────────┐
101
+ │ ▓▒░ TDK NEON ░▒▓ │ /path/to/project │ 36 services ready │
102
+ │ [1] Overview [2] Resources [3] Events [4] Files [5] Config │
103
+ │ ┌─ Stacks ──────────────────────┐ ┌─ Details ──────────────────────┐ │
104
+ │ │ api (5 services) │ │ Name: api │ │
105
+ │ │ order (3 services) │ │ Status: ✓ Ready │ │
106
+ │ │ platform (7 services) │ │ Services: 5 │ │
107
+ │ └───────────────────────────────┘ └──────────────────────────────────┘ │
108
+ └────────────────────────────────────────────────────────────────────────────┘
109
+
110
+ Compact (80-119 cols):
111
+ ┌────────────────────────────────────────────────────────┐
112
+ │ ▓▒░ TDK ░▒▓ │ /path/to/project │ 36 svcs ready │
113
+ │ [1]Overview [2]Resources [3]Events [4]Files [5]Config │
114
+ │ ┌─ Stacks ───────────────────┐ ┌─ Details ───────┐ │
115
+ │ │ api (5 svcs) │ │ api │ │
116
+ │ │ order (3 svcs) │ │ ✓ Ready │ │
117
+ │ └─────────────────────────────┘ └─────────────────┘ │
118
+ └────────────────────────────────────────────────────────┘
119
+
120
+ Mobile (<80 cols):
121
+ ┌─────────────────────────────────┐
122
+ │ ▓▒░ TDK ░▒▓ │ 36 svcs ready │
123
+ │ [1][2][3][4][5] │
124
+ │ ┌─ Stacks ───────────────────┐
125
+ │ │ api (5 svcs) │
126
+ │ │ ▸ order (3 svcs) │
127
+ │ │ platform (7 svcs) │
128
+ │ └───────────────────────────────┘
129
+ │ ┌─ Details ───────────────────┐
130
+ │ │ api │
131
+ │ │ ✓ Ready │
132
+ │ │ 5 services │
133
+ │ └───────────────────────────────┘
134
+ └─────────────────────────────────┘
135
+ ```
136
+
137
+ ---
138
+
139
+ ## COMPONENTS
140
+
141
+ ### 1. Header
142
+
143
+ ```
144
+ Minimal (Best):
145
+ ╔══════════════════════════════════════════════════════════════════════╗
146
+ ║ ▓▒░ TDK NEON EDITION ░▒▓ │ /path/to/project │ [ 36 services ] ║
147
+ ╚══════════════════════════════════════════════════════════════════════╝
148
+
149
+ Rules:
150
+ - One neon accent: the title "▓▒░ TDK NEON EDITION ░▒▓"
151
+ - Everything else: neutral colors
152
+ - Height: 1 row
153
+ - Separator: Single line (not double, not neon border)
154
+ ```
155
+
156
+ ### 2. Tab Bar
157
+
158
+ ```
159
+ Correct (Restrained):
160
+ ╔══════════════════════════════════════════════════════════════════════╗
161
+ ║ [1] ▓▒░OVERVIEW░▒▓ [2] Resources [3] Events [4] Files [5] Config ║
162
+ ╚══════════════════════════════════════════════════════════════════════╝
163
+
164
+ Wrong (Too Much):
165
+ ▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░
166
+ ▒▓ [1] ▓▒░ OVERVIEW ░▒▓ [2] RESOURCES [3] EVENTS ... ▓▒
167
+ ▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░
168
+
169
+ Rules:
170
+ - Only the ACTIVE tab gets neon treatment
171
+ - Inactive tabs: plain text with bracket hints
172
+ - No outer borders (wastes space, adds noise)
173
+ - Compact: abbreviate labels if needed ("Overview" → "Overvw")
174
+ ```
175
+
176
+ ### 3. Stack List
177
+
178
+ ```
179
+ Correct:
180
+ ┌─ Stacks ───────────────────────────┐
181
+ │ │
182
+ │ order-planner (4 svcs) │
183
+ │ order (3 svcs) │
184
+ │ ▓▒░ api (5 svcs) ░▒▓ │ ← Only selected has neon
185
+ │ billing (1 svc) │
186
+ │ platform (7 svcs) │
187
+ │ │
188
+ └──────────────────────────────────────┘
189
+
190
+ Wrong:
191
+ ┌▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░┐
192
+ │▒▓ ▓▒│
193
+ │▓▒ order-planner (4 svcs) ▒▓│
194
+ │▒▓ order (3 svcs) ▓▒│
195
+ │▓▒ ▓▒░ api (5 svcs) ░▒▓ ▒▓│
196
+ │▒▓ billing (1 svc) ▓▒│
197
+ │▓▒ ▒▓│
198
+ │▒▓ order-planner (4 svcs) ▓▒│
199
+ └▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒┘
200
+
201
+ Rules:
202
+ - Simple box border (┌─┐│└┘)
203
+ - Only the selected item gets neon background/text
204
+ - Others: plain white on panel gray
205
+ - Selected indicator: ► or ▸, not full border
206
+ ```
207
+
208
+ ### 4. Status Indicators
209
+
210
+ ```
211
+ Ready: ✓ acid green (not neon, just green)
212
+ Pending: ◐ yellow (spinning if animated)
213
+ Error: ✗ red (subtle pulse)
214
+ Building: ◉ orange/yellow (rotating)
215
+ Unknown: ? gray (dim, not attention-grabbing)
216
+
217
+ Correct:
218
+ api-backend backend ✓ ready (green, simple)
219
+ api-frontend frontend ◐ pending (yellow, spinning)
220
+ api-sdk sdk ✗ error (red, subtle)
221
+
222
+ Wrong:
223
+ api-backend backend ▓▒░✓▓▒░ READY ▓▒░ (overdone)
224
+ api-frontend frontend ▓▒░◐▓▒░ PENDING ▓▒░ (overdone)
225
+ ```
226
+
227
+ ### 5. Detail Panel (Sidebar)
228
+
229
+ ```
230
+ Correct:
231
+ ┌─ api ─────────────────────┐
232
+ │ │
233
+ │ Name: api │
234
+ │ Services: 5 │
235
+ │ Status: ✓ Ready │
236
+ │ │
237
+ │ Services: │
238
+ │ ├─ id-mgmt-backend │
239
+ │ ├─ id-mgmt-frontend │
240
+ │ ├─ id-sdk │
241
+ │ ├─ introvertic-infra │
242
+ │ └─ product-introvertic-ui │
243
+ │ │
244
+ │ [Esc] Close │
245
+ └────────────────────────────────┘
246
+
247
+ Wrong:
248
+ ┌▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░┐
249
+ │▒▓ ▓▒│
250
+ │▓▒ [ STACK : api ] ▒▓│
251
+ │▒▓ ▓▒│
252
+ │▓▒ Name: api ▒▓│
253
+ │▒▓ Status: ▓▒░✓▓▒░▓▒░ ▓▒│
254
+ │▓▒ ▒▓│
255
+ └▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒┘
256
+
257
+ Rules:
258
+ - Simple box border
259
+ - Status indicator gets color, nothing else
260
+ - Text: white/gray, not neon
261
+ - Close hint: subtle, bottom-aligned
262
+ ```
263
+
264
+ ---
265
+
266
+ ## ANIMATION SYSTEM
267
+
268
+ ### Animation Principles
269
+
270
+ 1. **Purposeful** — Every animation guides attention
271
+ 2. **Fast** — <200ms for feedback, <500ms for transitions
272
+ 3. **Optional** — Respect `NO_ANIMATIONS` preference
273
+
274
+ ### Animation Types
275
+
276
+ #### 1. Selection Pulse (150ms)
277
+
278
+ ```
279
+ Selected item gets a quick cyan flash:
280
+
281
+ Frame 1 (0ms): api (5 svcs) ← normal
282
+ Frame 2 (50ms): ▓▒░api▓▒░ ← flash bright
283
+ Frame 3 (100ms): ▓▒░api▓▒░ ← hold
284
+ Frame 4 (150ms): ▓▒░api (5 svcs) ← back to normal with neon bg
285
+ ```
286
+
287
+ Timing:
288
+ - **Easing**: Ease-out (fast start, slow end)
289
+ - **Duration**: 150ms total
290
+ - **Trigger**: User selects item (click or Enter)
291
+
292
+ #### 2. Status Spinners (800ms loop)
293
+
294
+ ```
295
+ Pending indicator ◐ rotates:
296
+
297
+ Frame 1: ◐ (0ms)
298
+ Frame 2: ◓ (100ms)
299
+ Frame 3: ◑ (200ms)
300
+ Frame 4: ◒ (300ms)
301
+ Frame 5: ◐ (400ms) ← back to start
302
+ ```
303
+
304
+ Timing:
305
+ - **Duration**: 800ms loop
306
+ - **Easing**: Linear (smooth continuous)
307
+ - **Trigger**: Service status is "pending" or "building"
308
+
309
+ #### 3. Error Pulse (1000ms loop)
310
+
311
+ ```
312
+ Error status ✗ pulses subtly:
313
+
314
+ Frame 1 (0ms): ✗ error (red, normal)
315
+ Frame 2 (250ms): ✗ error (red, 20% brighter)
316
+ Frame 3 (500ms): ✗ error (red, normal)
317
+ Frame 4 (750ms): ✗ error (red, 20% brighter)
318
+ ```
319
+
320
+ Timing:
321
+ - **Duration**: 1000ms loop
322
+ - **Easing**: Sine wave (smooth pulse)
323
+ - **Trigger**: Service status is "error"
324
+
325
+ #### 4. Tab Switch (100ms)
326
+
327
+ ```
328
+ Tab switches with quick fade:
329
+
330
+ Frame 1 (0ms): [1] ▓▒░OVERVIEW░▒▓ [2] Resources ← old active
331
+ Frame 2 (50ms): [1] Overview [2] ▓▒░RESOURCES▓▒░ ← transition
332
+ Frame 3 (100ms): [1] Overview [2] ▓▒░RESOURCES▓▒░ ← new active
333
+ ```
334
+
335
+ Timing:
336
+ - **Duration**: 100ms
337
+ - **Easing**: Instant (no tweening needed)
338
+ - **Trigger**: User switches tabs
339
+
340
+ ### Animation Disable Option
341
+
342
+ ```bash
343
+ # Disable for slow connections or user preference
344
+ tdk ui --no-animations
345
+ # or
346
+ NO_ANIMATIONS=1 tdk ui
347
+ ```
348
+
349
+ When disabled:
350
+ - Spinners show static icon
351
+ - Pulses are instant (no fade)
352
+ - All timing becomes 0ms (immediate)
353
+
354
+ ---
355
+
356
+ ## ACCESSIBILITY
357
+
358
+ ### Color Blindness Support
359
+
360
+ **Problem:** Red/green status indicators are invisible to 8% of males
361
+
362
+ **Solution:** Use BOTH color AND symbol
363
+
364
+ ```
365
+ Correct (Color + Shape):
366
+ ✓ ready (green + checkmark)
367
+ ✗ error (red + X)
368
+ ◐ pending (yellow + spinning circle)
369
+
370
+ Wrong (Color Only):
371
+ ● ready (just green dot)
372
+ ● error (just red dot)
373
+ ```
374
+
375
+ ### High Contrast Mode
376
+
377
+ ```bash
378
+ # For visually impaired users
379
+ tdk ui --high-contrast
380
+ # or
381
+ HIGH_CONTRAST=1 tdk ui
382
+ ```
383
+
384
+ Changes in high contrast:
385
+ - Neon → Pure primary colors (bright cyan, not subtle)
386
+ - Background → Pure black (#000000)
387
+ - Text → Pure white (#FFFFFF)
388
+ - No gradients, no dim colors
389
+
390
+ ### Keyboard Navigation (Always Supported)
391
+
392
+ ```
393
+ Tab Order:
394
+ 1. Tab bar (arrow keys to switch tabs)
395
+ 2. List items (↑/↓ to navigate, Enter to select)
396
+ 3. Detail panel (if visible)
397
+ 4. Status bar (shortcuts)
398
+
399
+ Focus Indicators:
400
+ - Focused element: Cyan border + underline
401
+ - Unfocused: No special styling
402
+ ```
403
+
404
+ ### Screen Reader Support
405
+
406
+ ```
407
+ ARIA Labels for terminal (via text hints):
408
+
409
+ Before:
410
+ ▸ api (5 services)
411
+
412
+ After:
413
+ [SELECTED] api, 5 services, stack, press Enter to view details
414
+
415
+ Implementation:
416
+ - Prefix selected items with [SELECTED]
417
+ - Add context hints in brackets
418
+ - Keep main text clean
419
+ ```
420
+
421
+ ---
422
+
423
+ ## ERROR & EDGE STATES
424
+
425
+ ### 1. No Services Found
426
+
427
+ ```
428
+ ╔══════════════════════════════════════════════════════════════════════╗
429
+ ║ ▓▒░ TDK NEON EDITION ░▒▓ ║
430
+ ╠══════════════════════════════════════════════════════════════════════╣
431
+ ║ ║
432
+ ║ ┌─ No Services Found ──────────────────────────────────────────────┐
433
+ ║ │ │
434
+ ║ │ ◉ No service.json files found in this directory │
435
+ ║ │ │
436
+ ║ │ To get started: │
437
+ ║ │ 1. Run: tdk init │
438
+ ║ │ 2. Or create services manually │
439
+ ║ │ │
440
+ ║ │ [Press 'q' to quit] │
441
+ ║ │ │
442
+ ║ └───────────────────────────────────────────────────────────────────┘
443
+ ║ ║
444
+ ╚══════════════════════════════════════════════════════════════════════╝
445
+ ```
446
+
447
+ **Design Notes:**
448
+ - Icon: ◉ (warning circle, not neon)
449
+ - Color: Yellow (attention, not alarm)
450
+ - CTA: Clear next steps
451
+
452
+ ### 2. Connection Error
453
+
454
+ ```
455
+ ╔══════════════════════════════════════════════════════════════════════╗
456
+ ║ ▓▒░ TDK NEON EDITION ░▒▓ ║
457
+ ╠══════════════════════════════════════════════════════════════════════╣
458
+ ║ ║
459
+ ║ ┌─ Connection Error ────────────────────────────────────────────────┐
460
+ ║ │ │
461
+ ║ │ ✗ Cannot connect to Tilt daemon │
462
+ ║ │ │
463
+ ║ │ Troubleshooting: │
464
+ ║ │ 1. Is Tilt running? Run: tilt up │
465
+ ║ │ 2. Check Tiltfile exists in current directory │
466
+ ║ │ 3. Try: tdk status --verbose │
467
+ ║ │ │
468
+ ║ │ [Press any key to retry] │
469
+ ║ │ │
470
+ ║ └───────────────────────────────────────────────────────────────────┘
471
+ ║ ║
472
+ ╚══════════════════════════════════════════════════════════════════════╝
473
+ ```
474
+
475
+ **Design Notes:**
476
+ - Icon: ✗ (error X, red)
477
+ - Color: Red for error state
478
+ - CTA: Multiple troubleshooting options
479
+
480
+ ### 3. Loading State
481
+
482
+ ```
483
+ ╔══════════════════════════════════════════════════════════════════════╗
484
+ ║ ▓▒░ TDK NEON EDITION ░▒▓ ║
485
+ ╠══════════════════════════════════════════════════════════════════════╣
486
+ ║ ║
487
+ ║ ┌─ Loading System ──────────────────────────────────────────────────┐
488
+ ║ │ │
489
+ ║ │ [ ◐ ] Discovering services... │
490
+ ║ │ ████████████████████░░░░░░░ 67% │
491
+ ║ │ │
492
+ ║ │ [ ◉ ] Found: 14 stacks, 36 services │
493
+ ║ │ │
494
+ ║ │ [ ] Initializing UI... │
495
+ ║ │ │
496
+ ║ └───────────────────────────────────────────────────────────────────┘
497
+ ║ ║
498
+ ║ [Press 'q' to cancel] ║
499
+ ╚══════════════════════════════════════════════════════════════════════╝
500
+ ```
501
+
502
+ **Design Notes:**
503
+ - Spinner: ◐ (rotating)
504
+ - Progress bar: Cyan fill on gray bg
505
+ - Steps: Show completed, current, pending
506
+ - Cancel option: Always available
507
+
508
+ ### 4. Empty Stack (No Services in Stack)
509
+
510
+ ```
511
+ ┌─ ghost-stack ──────────────────────┐
512
+ │ │
513
+ │ ◉ No services assigned to this │
514
+ │ stack yet │
515
+ │ │
516
+ │ To add services: │
517
+ │ 1. Edit service.json │
518
+ │ 2. Add: "stack": "ghost-stack" │
519
+ │ │
520
+ └─────────────────────────────────────┘
521
+ ```
522
+
523
+ ### 5. Timeout Error
524
+
525
+ ```
526
+ ┌─ Request Timeout ───────────────────┐
527
+ │ │
528
+ │ ✗ No response from Tilt (30s) │
529
+ │ │
530
+ │ Possible causes: │
531
+ │ • Tilt is overloaded │
532
+ │ • Network latency │
533
+ │ • Resource is stuck │
534
+ │ │
535
+ │ [r] Retry [s] Skip [q] Quit │
536
+ │ │
537
+ └─────────────────────────────────────┘
538
+ ```
539
+
540
+ ---
541
+
542
+ ## TERMINAL COMPATIBILITY
543
+
544
+ ### Feature Detection
545
+
546
+ ```typescript
547
+ // Detect terminal capabilities
548
+ const capabilities = {
549
+ // True color (24-bit) support
550
+ trueColor: process.env.COLORTERM === 'truecolor' ||
551
+ process.env.TERM === 'xterm-256color',
552
+
553
+ // Unicode support
554
+ unicode: process.env.LANG?.includes('UTF-8') !== false,
555
+
556
+ // Animation support (not in CI, not in dumb terminal)
557
+ animations: !process.env.CI &&
558
+ process.env.TERM !== 'dumb' &&
559
+ !process.env.NO_ANIMATIONS,
560
+
561
+ // Mouse support
562
+ mouse: process.stdout.isTTY &&
563
+ !process.env.NO_MOUSE,
564
+ };
565
+ ```
566
+
567
+ ### Fallback Strategy
568
+
569
+ | Feature | Full Support | Fallback |
570
+ |---------|--------------|----------|
571
+ | **True Color** | 24-bit neon | 256-color approx |
572
+ | **Unicode** | ▓▒░ borders | ASCII +-\| |
573
+ | **Animations** | 150ms fades | Instant |
574
+ | **Mouse** | Click support | Keyboard only |
575
+ | **Bold** | Bold + bright | Bright only |
576
+
577
+ ### 256-Color Fallback Palette
578
+
579
+ ```typescript
580
+ // When true color isn't available
581
+ const FALLBACK_256 = {
582
+ cyan: '\x1b[38;5;51m', // Closest to #00FFFF
583
+ green: '\x1b[38;5;82m', // Closest to #39FF14
584
+ yellow: '\x1b[38;5;226m', // Closest to #FFFF00
585
+ red: '\x1b[38;5;196m', // Closest to #FF073A
586
+ pink: '\x1b[38;5;198m', // Closest to #FF0080
587
+ purple: '\x1b[38;5;129m', // Closest to #BF00FF
588
+ };
589
+ ```
590
+
591
+ ### 16-Color Fallback (Basic Terminals)
592
+
593
+ ```typescript
594
+ // For basic terminals (like Windows CMD without ANSI)
595
+ const FALLBACK_16 = {
596
+ cyan: '\x1b[36m', // ANSI cyan
597
+ green: '\x1b[32m', // ANSI green
598
+ yellow: '\x1b[33m', // ANSI yellow
599
+ red: '\x1b[31m', // ANSI red
600
+ pink: '\x1b[35m', // ANSI magenta (closest)
601
+ purple: '\x1b[35m', // ANSI magenta
602
+ white: '\x1b[37m', // ANSI white
603
+ gray: '\x1b[90m', // ANSI bright black
604
+ };
605
+ ```
606
+
607
+ ### ASCII Fallback (No Unicode)
608
+
609
+ ```
610
+ Full Unicode:
611
+ ▓▒░ TDK ░▒▓ │ api (5 svcs) │ ✓ ready
612
+
613
+ ASCII Fallback:
614
+ [ TDK ] | api (5 svcs) | [OK] ready
615
+
616
+ Border Unicode:
617
+ ┌─ Stacks ─┐
618
+ │ api │
619
+ └──────────┘
620
+
621
+ Border ASCII:
622
+ +- Stacks --+
623
+ | api |
624
+ +----------+
625
+ ```
626
+
627
+ ---
628
+
629
+ ## PERFORMANCE GUIDELINES
630
+
631
+ ### Rendering Rules
632
+
633
+ 1. **Max 60 FPS** — Don't exceed terminal capabilities
634
+ 2. **Throttle Resize** — Debounce resize events (100ms)
635
+ 3. **Limit Re-renders** — Use memoization for static content
636
+ 4. **Lazy Load** — Only render visible items
637
+
638
+ ### Memory Budget
639
+
640
+ - **Max 50MB** — For full UI with 100+ services
641
+ - **Clean up on exit** — Always restore terminal state
642
+ - **No memory leaks** — Remove all listeners on unmount
643
+
644
+ ### Network/IO
645
+
646
+ - **Debounce file watchers** — 100ms minimum
647
+ - **Cache metadata** — 5 second TTL
648
+ - **Background refresh** — Don't block UI
649
+
650
+ ---
651
+
652
+ ## IMPLEMENTATION CHECKLIST
653
+
654
+ ### Visual Design
655
+ - [ ] Header uses single neon accent
656
+ - [ ] Only active tab has neon
657
+ - [ ] Only selected item has neon background
658
+ - [ ] Status icons use color + symbol
659
+ - [ ] Simple borders (not neon borders everywhere)
660
+ - [ ] Responsive layout works at 80+ cols
661
+
662
+ ### Animations
663
+ - [ ] Selection pulse: 150ms
664
+ - [ ] Tab switch: 100ms
665
+ - [ ] Spinner: 800ms loop
666
+ - [ ] Error pulse: 1000ms loop
667
+ - [ ] All animations can be disabled
668
+
669
+ ### Accessibility
670
+ - [ ] Keyboard navigation works
671
+ - [ ] Color blind safe (symbols + colors)
672
+ - [ ] High contrast mode available
673
+ - [ ] Screen reader hints included
674
+
675
+ ### Compatibility
676
+ - [ ] True color detection
677
+ - [ ] 256-color fallback
678
+ - [ ] 16-color fallback
679
+ - [ ] ASCII fallback for borders
680
+ - [ ] Mouse optional (keyboard always works)
681
+
682
+ ### Error States
683
+ - [ ] No services found state
684
+ - [ ] Connection error state
685
+ - [ ] Loading state with progress
686
+ - [ ] Empty stack state
687
+ - [ ] Timeout state
688
+
689
+ ---
690
+
691
+ ## DESIGN DECISIONS LOG
692
+
693
+ | Decision | Alternatives | Rationale |
694
+ |----------|--------------|-----------|
695
+ | ▓▒░ for selected only | Border every item | Reduces visual noise |
696
+ | Simple borders | Neon borders everywhere | Cleaner, more professional |
697
+ | Single header row | Ornate multi-row header | Saves space for content |
698
+ | 5 tabs max | More tabs with scrolling | 80-col minimum support |
699
+ | Cyan primary | Pink or green | Cyan is most visible on dark bg |
700
+ | Spinners on status only | Spinners everywhere | Focuses attention |
701
+
702
+ ---
703
+
704
+ ## SUMMARY
705
+
706
+ **The Golden Rules:**
707
+
708
+ 1. **Neon is a spotlight, not a floodlight**
709
+ 2. **Clarity beats decoration**
710
+ 3. **Works everywhere, shines where supported**
711
+ 4. **Accessibility is not optional**
712
+ 5. **Performance is a feature**
713
+
714
+ **Before/After Comparison:**
715
+
716
+ ```
717
+ BEFORE (Visual Overload):
718
+ ▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░
719
+ ▒▓ EVERYTHING GLOWS ▓▒
720
+ ▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░▓▒░
721
+
722
+ AFTER (Restrained & Clear):
723
+ ┌─ Stacks ───────────────────┐
724
+ │ api (5 svcs) │
725
+ │ ▓▒░ billing (1 svc) ░▒▓ │ ← Only selected glows
726
+ │ platform (7 svcs) │
727
+ └────────────────────────────┘
728
+ ```
729
+
730
+ **This is the TDK Neon Edition: Beautiful, Practical, Accessible.**
731
+
732
+ ---
733
+
734
+ **DESIGN SYSTEM v3.0**
735
+ **Practical Cyberpunk for Real Terminals**