@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.
- package/.github/workflows/release-binaries.yml +54 -0
- package/.pre-commit-config.yaml +57 -0
- package/Makefile +92 -0
- package/bun.lock +538 -0
- package/cli/AGENTS.md +390 -0
- package/cli/DESIGN.md +735 -0
- package/cli/biome.json +44 -0
- package/cli/dependency-graph.svg +1135 -0
- package/cli/knip.json +6 -0
- package/cli/package.json +77 -0
- package/cli/pnpm-lock.yaml +2305 -0
- package/cli/pnpm-workspace.yaml +2 -0
- package/cli/shared-platform-engineering/docker-templates/bun-hoisted-symlink-fix.sh +23 -0
- package/cli/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +464 -0
- package/cli/shared-platform-engineering/docker-templates/install-deps.sh +152 -0
- package/cli/shared-platform-engineering/docker-templates/prisma-bun-client-link-fix.sh +12 -0
- package/cli/shared-platform-engineering/docker-templates/prisma-normalize-client.sh +56 -0
- package/{dist/cli.js → cli/src/cli.ts} +21 -13
- package/cli/src/commands/__tests__/always-enabled-infra.test.ts +115 -0
- package/cli/src/commands/__tests__/config.test.ts +146 -0
- package/cli/src/commands/__tests__/doctor.test.ts +557 -0
- package/cli/src/commands/__tests__/error-handling.test.ts +78 -0
- package/cli/src/commands/__tests__/phases-model.test.ts +163 -0
- package/cli/src/commands/__tests__/project-resource-features-e2e.test.ts +207 -0
- package/cli/src/commands/__tests__/project.test.ts +68 -0
- package/cli/src/commands/__tests__/resource.test.ts +226 -0
- package/cli/src/commands/__tests__/saas-starter-integration.test.ts +196 -0
- package/cli/src/commands/__tests__/stack-features-e2e.test.ts +129 -0
- package/cli/src/commands/__tests__/upgrade.test.ts +101 -0
- package/{dist/commands/completion.js → cli/src/commands/completion.ts} +78 -72
- package/cli/src/commands/config.ts +299 -0
- package/cli/src/commands/doctor.ts +790 -0
- package/cli/src/commands/down.ts +37 -0
- package/cli/src/commands/help.ts +150 -0
- package/cli/src/commands/networks-design.md +80 -0
- package/cli/src/commands/networks.ts +332 -0
- package/cli/src/commands/project.ts +439 -0
- package/cli/src/commands/projects.ts +82 -0
- package/cli/src/commands/resource.ts +652 -0
- package/cli/src/commands/resources.ts +95 -0
- package/cli/src/commands/stack.ts +128 -0
- package/cli/src/commands/stacks.ts +52 -0
- package/cli/src/commands/status.ts +88 -0
- package/cli/src/commands/ui.tsx +843 -0
- package/cli/src/commands/up.ts +150 -0
- package/cli/src/commands/upgrade.ts +570 -0
- package/{dist/commands/version.js → cli/src/commands/version.ts} +5 -5
- package/cli/src/components/Accessible.tsx +21 -0
- package/cli/src/components/BaseTooltip.tsx +66 -0
- package/cli/src/components/DetailPanel.tsx +146 -0
- package/cli/src/components/FileTree.tsx +89 -0
- package/cli/src/components/ResourceSelectInput.tsx +30 -0
- package/cli/src/components/ResourceTable.tsx +78 -0
- package/cli/src/components/TabBar.tsx +53 -0
- package/cli/src/components/Tooltip.tsx +11 -0
- package/{dist/components/index.js → cli/src/components/index.ts} +0 -1
- package/cli/src/config/platform-standards.test.ts +11 -0
- package/cli/src/config/platform-standards.ts +196 -0
- package/cli/src/generator/__tests__/extension-fetch.test.ts +220 -0
- package/cli/src/generator/__tests__/template-engine.test.ts +70 -0
- package/cli/src/generator/extension-fetch.ts +279 -0
- package/cli/src/generator/template-engine.ts +754 -0
- package/cli/src/index.ts +86 -0
- package/cli/src/templates.d.ts +4 -0
- package/cli/src/types/index.ts +351 -0
- package/cli/src/utils/__tests__/cache.test.ts +98 -0
- package/cli/src/utils/__tests__/formatting.test.ts +170 -0
- package/cli/src/utils/__tests__/paths.test.ts +180 -0
- package/cli/src/utils/__tests__/port-assignment.test.ts +121 -0
- package/cli/src/utils/__tests__/service-urls.test.ts +174 -0
- package/cli/src/utils/__tests__/services.test.ts +531 -0
- package/cli/src/utils/__tests__/tilt.test.ts +143 -0
- package/cli/src/utils/__tests__/validation.test.ts +148 -0
- package/cli/src/utils/cache.ts +76 -0
- package/cli/src/utils/command-helpers.ts +54 -0
- package/cli/src/utils/constants.ts +126 -0
- package/cli/src/utils/discovery-context.ts +49 -0
- package/cli/src/utils/docker.ts +20 -0
- package/cli/src/utils/doctor-runtime.ts +604 -0
- package/cli/src/utils/env-validator.ts +139 -0
- package/cli/src/utils/errors.ts +168 -0
- package/cli/src/utils/file-helpers.ts +62 -0
- package/cli/src/utils/formatting.ts +215 -0
- package/cli/src/utils/paths.ts +53 -0
- package/cli/src/utils/port-assignment.ts +106 -0
- package/cli/src/utils/project-features.ts +118 -0
- package/cli/src/utils/project-templates.ts +28 -0
- package/cli/src/utils/prompt.ts +123 -0
- package/cli/src/utils/resource-features.ts +209 -0
- package/cli/src/utils/service-urls.ts +124 -0
- package/cli/src/utils/services.ts +363 -0
- package/cli/src/utils/stack-features.ts +30 -0
- package/cli/src/utils/tar.ts +24 -0
- package/cli/src/utils/tilt.ts +113 -0
- package/cli/src/utils/validation.ts +67 -0
- package/{templates → cli/templates}/Tiltfile.hbs +1 -1
- package/cli/tsconfig.json +25 -0
- package/cli/tsconfig.typecheck.json +8 -0
- package/docs/FEATURES.md +279 -0
- package/engine/topologies/platform/docker/dockerfile/dockerfile.star +3 -3
- package/engine/topologies/platform/docker/generators/golden_docker_generator_v2.star +1 -1
- package/engine/topologies/platform/docker/layers/l2_dependency_layers.star +0 -3
- package/engine/topologies/platform/docker/layers/l3_builder_layers.star +1 -1
- package/engine/topologies/platform/docker/layers/l4_runtime_layers.star +1 -1
- package/engine/topologies/platform/docker/secrets/infisical.star +19 -47
- package/engine/topologies/tilt/resources/orchestrator/apply_migrator_orchestration.star +1 -1
- package/install.sh +242 -0
- package/knip.json +10 -0
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/.openspec.yaml +2 -0
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/design.md +102 -0
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/proposal.md +31 -0
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-notifications/spec.md +48 -0
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-orchestration/spec.md +63 -0
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-troubleshooting/spec.md +56 -0
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/tasks.md +61 -0
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/.openspec.yaml +2 -0
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/design.md +114 -0
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/proposal.md +32 -0
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/manifest-field-migration/spec.md +20 -0
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/resource-terminology-standard/spec.md +20 -0
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/stack-terminology-standard/spec.md +20 -0
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/tasks.md +194 -0
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/.openspec.yaml +2 -0
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/design.md +111 -0
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/proposal.md +33 -0
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/function-naming-alignment/spec.md +12 -0
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/optional-parameter-patterns/spec.md +18 -0
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-documentation/spec.md +16 -0
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-naming-consistency/spec.md +12 -0
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-ordering-standard/spec.md +12 -0
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/tasks.md +194 -0
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/.openspec.yaml +2 -0
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/codebase-audit-report.md +62 -0
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/design.md +84 -0
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/proposal.md +31 -0
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/codebase-audit/spec.md +27 -0
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/dead-code-cleanup/spec.md +27 -0
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/test-gap-fill/spec.md +23 -0
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/todo-resolution/spec.md +27 -0
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/tasks.md +39 -0
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/.openspec.yaml +5 -0
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/design.md +94 -0
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/proposal.md +46 -0
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/ai-slop-cleanup/CLEANUP_REPORT_8.md +174 -0
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/ai-slop-cleanup/CRITICAL_ASSESSMENT_8.md +160 -0
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/circular-deps/CRITICAL_ASSESSMENT_4.md +381 -0
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/dead-code/CRITICAL_ASSESSMENT_3.md +316 -0
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/deduplication/CRITICAL_ASSESSMENT_1.md +290 -0
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/deduplication/IMPLEMENTATION_SUMMARY_1.md +233 -0
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/defensive-cleanup/CRITICAL_ASSESSMENT_6.md +835 -0
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/legacy-cleanup/CRITICAL_ASSESSMENT_7.md +254 -0
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/legacy-cleanup/IMPLEMENTATION_SUMMARY_7.md +187 -0
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/strong-typing/CRITICAL_ASSESSMENT_5.md +269 -0
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/type-consolidation/CRITICAL_ASSESSMENT_2.md +312 -0
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/type-consolidation/IMPLEMENTATION_SUMMARY.md +170 -0
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/tasks.md +137 -0
- package/openspec/changes/archive/2026-06-25-landscape-consolidation/.openspec.yaml +2 -0
- package/openspec/changes/archive/2026-06-25-landscape-consolidation/design.md +80 -0
- package/openspec/changes/archive/2026-06-25-landscape-consolidation/proposal.md +40 -0
- package/openspec/changes/archive/2026-06-25-landscape-consolidation/spec.md +52 -0
- package/openspec/changes/archive/2026-06-25-landscape-consolidation/tasks.md +51 -0
- package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/.openspec.yaml +2 -0
- package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/design.md +43 -0
- package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/proposal.md +29 -0
- package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/specs/self-contained-generated-projects/spec.md +67 -0
- package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/tasks.md +27 -0
- package/openspec/specs/manifest-field-migration/spec.md +24 -0
- package/openspec/specs/resource-terminology-standard/spec.md +24 -0
- package/openspec/specs/self-contained-generated-projects/spec.md +67 -0
- package/openspec/specs/stack-terminology-standard/spec.md +24 -0
- package/package.json +27 -64
- package/platform/services/platform/proxy/service.yaml +14 -0
- package/scripts/audit-codebase.sh +213 -0
- package/scripts/install-git-hooks.sh +14 -0
- package/scripts/release-binaries.sh +94 -0
- package/scripts/setup-pre-commit.sh +33 -0
- package/scripts/stage-npm-engine.sh +36 -0
- package/shared-platform-engineering/docker-templates/bun-hoisted-symlink-fix.sh +23 -0
- package/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +464 -0
- package/shared-platform-engineering/docker-templates/install-deps.sh +152 -0
- package/shared-platform-engineering/docker-templates/prisma-bun-client-link-fix.sh +12 -0
- package/shared-platform-engineering/docker-templates/prisma-normalize-client.sh +56 -0
- package/tests/tilt-engine/__init__.py +5 -0
- package/tests/tilt-engine/conftest.py +182 -0
- package/tests/tilt-engine/fixtures/appointment-frontend-service.json +11 -0
- package/tests/tilt-engine/fixtures/identity-backend-service.json +12 -0
- package/tests/tilt-engine/fixtures/invalid-service.json +4 -0
- package/tests/tilt-engine/test_agents_md_generator.py +341 -0
- package/tests/tilt-engine/test_agents_md_integration.py +378 -0
- package/tests/tilt-engine/test_cache_operations.py +181 -0
- package/tests/tilt-engine/test_cache_persistence.py +142 -0
- package/tests/tilt-engine/test_code_executor.py +152 -0
- package/tests/tilt-engine/test_code_viewer.py +127 -0
- package/tests/tilt-engine/test_compose_port_anchors.py +310 -0
- package/tests/tilt-engine/test_config_inspector.py +162 -0
- package/tests/tilt-engine/test_daemon_focus_mode.py +89 -0
- package/tests/tilt-engine/test_daemon_polling.py +122 -0
- package/tests/tilt-engine/test_daemon_registration.py +115 -0
- package/tests/tilt-engine/test_daemon_validation.py +107 -0
- package/tests/tilt-engine/test_docker_generator_bugs.py +493 -0
- package/tests/tilt-engine/test_docker_prune.py +119 -0
- package/tests/tilt-engine/test_dockerignore_path_bug.py +82 -0
- package/tests/tilt-engine/test_file_browser.py +193 -0
- package/tests/tilt-engine/test_frontend_basepath_manifest.py +27 -0
- package/tests/tilt-engine/test_health_dependencies.py +130 -0
- package/tests/tilt-engine/test_health_endpoints.py +118 -0
- package/tests/tilt-engine/test_health_tilt_ui.py +85 -0
- package/tests/tilt-engine/test_safety_aliases.py +84 -0
- package/tests/tilt-engine/test_snapshot_diff.py +136 -0
- package/tests/tilt-engine/test_snapshot_persistence.py +163 -0
- package/tests/tilt-engine/test_snapshot_scanning.py +123 -0
- package/tests/tilt-engine/test_standalone_project_boot.py +61 -0
- package/tests/tilt-engine/test_standalone_traefik.py +108 -0
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/commands/completion.d.ts +0 -3
- package/dist/commands/completion.d.ts.map +0 -1
- package/dist/commands/completion.js.map +0 -1
- package/dist/commands/config.d.ts +0 -3
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js +0 -231
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/doctor.d.ts +0 -7
- package/dist/commands/doctor.d.ts.map +0 -1
- package/dist/commands/doctor.js +0 -597
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/down.d.ts +0 -3
- package/dist/commands/down.d.ts.map +0 -1
- package/dist/commands/down.js +0 -32
- package/dist/commands/down.js.map +0 -1
- package/dist/commands/help.d.ts +0 -2
- package/dist/commands/help.d.ts.map +0 -1
- package/dist/commands/help.js +0 -130
- package/dist/commands/help.js.map +0 -1
- package/dist/commands/networks.d.ts +0 -3
- package/dist/commands/networks.d.ts.map +0 -1
- package/dist/commands/networks.js +0 -260
- package/dist/commands/networks.js.map +0 -1
- package/dist/commands/project.d.ts +0 -3
- package/dist/commands/project.d.ts.map +0 -1
- package/dist/commands/project.js +0 -373
- package/dist/commands/project.js.map +0 -1
- package/dist/commands/projects.d.ts +0 -3
- package/dist/commands/projects.d.ts.map +0 -1
- package/dist/commands/projects.js +0 -71
- package/dist/commands/projects.js.map +0 -1
- package/dist/commands/resource.d.ts +0 -69
- package/dist/commands/resource.d.ts.map +0 -1
- package/dist/commands/resource.js +0 -579
- package/dist/commands/resource.js.map +0 -1
- package/dist/commands/resources.d.ts +0 -3
- package/dist/commands/resources.d.ts.map +0 -1
- package/dist/commands/resources.js +0 -73
- package/dist/commands/resources.js.map +0 -1
- package/dist/commands/stack.d.ts +0 -3
- package/dist/commands/stack.d.ts.map +0 -1
- package/dist/commands/stack.js +0 -97
- package/dist/commands/stack.js.map +0 -1
- package/dist/commands/stacks.d.ts +0 -3
- package/dist/commands/stacks.d.ts.map +0 -1
- package/dist/commands/stacks.js +0 -43
- package/dist/commands/stacks.js.map +0 -1
- package/dist/commands/status.d.ts +0 -3
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -71
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/ui.d.ts +0 -3
- package/dist/commands/ui.d.ts.map +0 -1
- package/dist/commands/ui.js +0 -445
- package/dist/commands/ui.js.map +0 -1
- package/dist/commands/up.d.ts +0 -3
- package/dist/commands/up.d.ts.map +0 -1
- package/dist/commands/up.js +0 -110
- package/dist/commands/up.js.map +0 -1
- package/dist/commands/upgrade.d.ts +0 -11
- package/dist/commands/upgrade.d.ts.map +0 -1
- package/dist/commands/upgrade.js +0 -496
- package/dist/commands/upgrade.js.map +0 -1
- package/dist/commands/version.d.ts +0 -3
- package/dist/commands/version.d.ts.map +0 -1
- package/dist/commands/version.js.map +0 -1
- package/dist/components/Accessible.d.ts +0 -8
- package/dist/components/Accessible.d.ts.map +0 -1
- package/dist/components/Accessible.js +0 -10
- package/dist/components/Accessible.js.map +0 -1
- package/dist/components/BaseTooltip.d.ts +0 -4
- package/dist/components/BaseTooltip.d.ts.map +0 -1
- package/dist/components/BaseTooltip.js +0 -28
- package/dist/components/BaseTooltip.js.map +0 -1
- package/dist/components/DetailPanel.d.ts +0 -4
- package/dist/components/DetailPanel.d.ts.map +0 -1
- package/dist/components/DetailPanel.js +0 -18
- package/dist/components/DetailPanel.js.map +0 -1
- package/dist/components/FileTree.d.ts +0 -4
- package/dist/components/FileTree.d.ts.map +0 -1
- package/dist/components/FileTree.js +0 -47
- package/dist/components/FileTree.js.map +0 -1
- package/dist/components/ResourceSelectInput.d.ts +0 -4
- package/dist/components/ResourceSelectInput.d.ts.map +0 -1
- package/dist/components/ResourceSelectInput.js +0 -7
- package/dist/components/ResourceSelectInput.js.map +0 -1
- package/dist/components/ResourceTable.d.ts +0 -4
- package/dist/components/ResourceTable.d.ts.map +0 -1
- package/dist/components/ResourceTable.js +0 -18
- package/dist/components/ResourceTable.js.map +0 -1
- package/dist/components/TabBar.d.ts +0 -4
- package/dist/components/TabBar.d.ts.map +0 -1
- package/dist/components/TabBar.js +0 -17
- package/dist/components/TabBar.js.map +0 -1
- package/dist/components/Tooltip.d.ts +0 -12
- package/dist/components/Tooltip.d.ts.map +0 -1
- package/dist/components/Tooltip.js +0 -12
- package/dist/components/Tooltip.js.map +0 -1
- package/dist/components/index.d.ts +0 -8
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/config/platform-standards.d.ts +0 -159
- package/dist/config/platform-standards.d.ts.map +0 -1
- package/dist/config/platform-standards.js +0 -181
- package/dist/config/platform-standards.js.map +0 -1
- package/dist/generator/extension-fetch.d.ts +0 -25
- package/dist/generator/extension-fetch.d.ts.map +0 -1
- package/dist/generator/extension-fetch.js +0 -252
- package/dist/generator/extension-fetch.js.map +0 -1
- package/dist/generator/template-engine.d.ts +0 -61
- package/dist/generator/template-engine.d.ts.map +0 -1
- package/dist/generator/template-engine.js +0 -557
- package/dist/generator/template-engine.js.map +0 -1
- package/dist/index.d.ts +0 -11
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -11
- package/dist/index.js.map +0 -1
- package/dist/types/index.d.ts +0 -255
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -17
- package/dist/types/index.js.map +0 -1
- package/dist/utils/cache.d.ts +0 -19
- package/dist/utils/cache.d.ts.map +0 -1
- package/dist/utils/cache.js +0 -64
- package/dist/utils/cache.js.map +0 -1
- package/dist/utils/command-helpers.d.ts +0 -17
- package/dist/utils/command-helpers.d.ts.map +0 -1
- package/dist/utils/command-helpers.js +0 -41
- package/dist/utils/command-helpers.js.map +0 -1
- package/dist/utils/constants.d.ts +0 -52
- package/dist/utils/constants.d.ts.map +0 -1
- package/dist/utils/constants.js +0 -112
- package/dist/utils/constants.js.map +0 -1
- package/dist/utils/discovery-context.d.ts +0 -4
- package/dist/utils/discovery-context.d.ts.map +0 -1
- package/dist/utils/discovery-context.js +0 -39
- package/dist/utils/discovery-context.js.map +0 -1
- package/dist/utils/docker.d.ts +0 -4
- package/dist/utils/docker.d.ts.map +0 -1
- package/dist/utils/docker.js +0 -19
- package/dist/utils/docker.js.map +0 -1
- package/dist/utils/doctor-runtime.d.ts +0 -66
- package/dist/utils/doctor-runtime.d.ts.map +0 -1
- package/dist/utils/doctor-runtime.js +0 -469
- package/dist/utils/doctor-runtime.js.map +0 -1
- package/dist/utils/env-validator.d.ts +0 -15
- package/dist/utils/env-validator.d.ts.map +0 -1
- package/dist/utils/env-validator.js +0 -109
- package/dist/utils/env-validator.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -31
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js +0 -140
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/file-helpers.d.ts +0 -14
- package/dist/utils/file-helpers.d.ts.map +0 -1
- package/dist/utils/file-helpers.js +0 -45
- package/dist/utils/file-helpers.js.map +0 -1
- package/dist/utils/formatting.d.ts +0 -30
- package/dist/utils/formatting.d.ts.map +0 -1
- package/dist/utils/formatting.js +0 -164
- package/dist/utils/formatting.js.map +0 -1
- package/dist/utils/paths.d.ts +0 -3
- package/dist/utils/paths.d.ts.map +0 -1
- package/dist/utils/paths.js +0 -41
- package/dist/utils/paths.js.map +0 -1
- package/dist/utils/port-assignment.d.ts +0 -6
- package/dist/utils/port-assignment.d.ts.map +0 -1
- package/dist/utils/port-assignment.js +0 -81
- package/dist/utils/port-assignment.js.map +0 -1
- package/dist/utils/project-features.d.ts +0 -23
- package/dist/utils/project-features.d.ts.map +0 -1
- package/dist/utils/project-features.js +0 -98
- package/dist/utils/project-features.js.map +0 -1
- package/dist/utils/project-templates.d.ts +0 -7
- package/dist/utils/project-templates.d.ts.map +0 -1
- package/dist/utils/project-templates.js +0 -24
- package/dist/utils/project-templates.js.map +0 -1
- package/dist/utils/prompt.d.ts +0 -28
- package/dist/utils/prompt.d.ts.map +0 -1
- package/dist/utils/prompt.js +0 -79
- package/dist/utils/prompt.js.map +0 -1
- package/dist/utils/resource-features.d.ts +0 -29
- package/dist/utils/resource-features.d.ts.map +0 -1
- package/dist/utils/resource-features.js +0 -171
- package/dist/utils/resource-features.js.map +0 -1
- package/dist/utils/service-urls.d.ts +0 -30
- package/dist/utils/service-urls.d.ts.map +0 -1
- package/dist/utils/service-urls.js +0 -93
- package/dist/utils/service-urls.js.map +0 -1
- package/dist/utils/services.d.ts +0 -18
- package/dist/utils/services.d.ts.map +0 -1
- package/dist/utils/services.js +0 -291
- package/dist/utils/services.js.map +0 -1
- package/dist/utils/stack-features.d.ts +0 -22
- package/dist/utils/stack-features.d.ts.map +0 -1
- package/dist/utils/stack-features.js +0 -13
- package/dist/utils/stack-features.js.map +0 -1
- package/dist/utils/tar.d.ts +0 -7
- package/dist/utils/tar.d.ts.map +0 -1
- package/dist/utils/tar.js +0 -21
- package/dist/utils/tar.js.map +0 -1
- package/dist/utils/tilt.d.ts +0 -19
- package/dist/utils/tilt.d.ts.map +0 -1
- package/dist/utils/tilt.js +0 -78
- package/dist/utils/tilt.js.map +0 -1
- package/dist/utils/validation.d.ts +0 -16
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js +0 -58
- package/dist/utils/validation.js.map +0 -1
- /package/{README.md → cli/README.md} +0 -0
- /package/{bin → cli/bin}/tdk.js +0 -0
- /package/{templates → cli/templates}/.tiltignore.hbs +0 -0
- /package/{templates → cli/templates}/TILT_RESOURCE_DEFAULTS.star.hbs +0 -0
- /package/{templates → cli/templates}/TILT_TECH_STACK.star.hbs +0 -0
- /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**
|