clawforge-cli 1.6.1__tar.gz → 1.6.2__tar.gz

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 (148) hide show
  1. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/CHANGELOG.md +8 -0
  2. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/Formula/clawforge.rb +2 -1
  3. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/PKG-INFO +1 -1
  4. clawforge_cli-1.6.2/VERSION +1 -0
  5. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/package.json +1 -1
  6. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/pyproject.toml +1 -1
  7. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-dx.sh +3 -3
  8. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-observability.sh +1 -1
  9. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-power.sh +1 -1
  10. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-practical.sh +1 -1
  11. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-reliability.sh +1 -1
  12. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-web.sh +1 -1
  13. clawforge_cli-1.6.2/tui/animation.go +192 -0
  14. clawforge_cli-1.6.1/VERSION +0 -1
  15. clawforge_cli-1.6.1/tui/animation.go +0 -192
  16. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/.github/workflows/ci.yml +0 -0
  17. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/.github/workflows/publish-npm.yml +0 -0
  18. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/.github/workflows/publish-pypi.yml +0 -0
  19. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/.github/workflows/update-homebrew.yml +0 -0
  20. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/.github/workflows/version-sync.yml +0 -0
  21. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/.gitignore +0 -0
  22. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/LICENSE +0 -0
  23. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/PRD-v05.md +0 -0
  24. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/PRD-v06.md +0 -0
  25. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/PRD-v07.md +0 -0
  26. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/README.md +0 -0
  27. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/SKILL.md +0 -0
  28. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/attach.sh +0 -0
  29. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/check-agents.sh +0 -0
  30. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/clawforge +0 -0
  31. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/clawforge-web +0 -0
  32. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/clean.sh +0 -0
  33. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/completions.sh +0 -0
  34. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/config.sh +0 -0
  35. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/conflicts.sh +0 -0
  36. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/cost.sh +0 -0
  37. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/dashboard.sh +0 -0
  38. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/deps.sh +0 -0
  39. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/diff.sh +0 -0
  40. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/doctor.sh +0 -0
  41. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/eval.sh +0 -0
  42. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/export.sh +0 -0
  43. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/history.sh +0 -0
  44. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/init.sh +0 -0
  45. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/learn.sh +0 -0
  46. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/logs.sh +0 -0
  47. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/memory.sh +0 -0
  48. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/merge-helper.sh +0 -0
  49. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/multi-review.sh +0 -0
  50. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/notify.sh +0 -0
  51. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/on-complete.sh +0 -0
  52. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/parse-cost.sh +0 -0
  53. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/pr.sh +0 -0
  54. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/profile.sh +0 -0
  55. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/quick-run.sh +0 -0
  56. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/replay.sh +0 -0
  57. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/resume.sh +0 -0
  58. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/review-mode.sh +0 -0
  59. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/review-pr.sh +0 -0
  60. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/routing.sh +0 -0
  61. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/scope-task.sh +0 -0
  62. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/spawn-agent.sh +0 -0
  63. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/sprint.sh +0 -0
  64. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/steer.sh +0 -0
  65. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/stop.sh +0 -0
  66. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/summary.sh +0 -0
  67. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/swarm.sh +0 -0
  68. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/templates.sh +0 -0
  69. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/bin/web.sh +0 -0
  70. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/clawforge/__init__.py +0 -0
  71. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/clawforge/cli.py +0 -0
  72. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/completions/_clawforge +0 -0
  73. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/completions/clawforge.bash +0 -0
  74. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/completions/clawforge.fish +0 -0
  75. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/config/defaults.json +0 -0
  76. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/config/prompt-templates/default.md +0 -0
  77. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/config/routing-defaults.json +0 -0
  78. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/docs/IMPLEMENTATION-v04.md +0 -0
  79. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/docs/PRD-v04.md +0 -0
  80. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/docs/PUBLISHING-CHECKLIST.md +0 -0
  81. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/docs/README.md +0 -0
  82. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/docs/RELEASE.md +0 -0
  83. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/docs/architecture.md +0 -0
  84. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/docs/command-reference.md +0 -0
  85. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/docs/configuration.md +0 -0
  86. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/docs/dashboard.md +0 -0
  87. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/docs/evaluation.md +0 -0
  88. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/docs/faq.md +0 -0
  89. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/docs/fleet-ops.md +0 -0
  90. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/docs/getting-started.md +0 -0
  91. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/docs/scenarios.md +0 -0
  92. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/docs/troubleshooting.md +0 -0
  93. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/docs/workflow-modes.md +0 -0
  94. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/evals/run-log.example.jsonl +0 -0
  95. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/evals/run-log.schema.json +0 -0
  96. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/evals/scorecard.md +0 -0
  97. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/install.sh +0 -0
  98. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/lib/common.sh +0 -0
  99. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/lib/templates/bugfix.json +0 -0
  100. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/lib/templates/migration.json +0 -0
  101. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/lib/templates/refactor.json +0 -0
  102. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/lib/templates/security-audit.json +0 -0
  103. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/lib/templates/test-coverage.json +0 -0
  104. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/registry/conflicts.jsonl +0 -0
  105. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/registry/costs.jsonl +0 -0
  106. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/run-all-tests.sh +0 -0
  107. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-ci-loop.sh +0 -0
  108. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-clean.sh +0 -0
  109. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-cli.sh +0 -0
  110. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-conflicts.sh +0 -0
  111. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-cost.sh +0 -0
  112. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-dashboard.sh +0 -0
  113. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-deps.sh +0 -0
  114. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-eval.sh +0 -0
  115. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-foundation.sh +0 -0
  116. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-history.sh +0 -0
  117. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-init.sh +0 -0
  118. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-learn.sh +0 -0
  119. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-management.sh +0 -0
  120. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-memory.sh +0 -0
  121. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-merge.sh +0 -0
  122. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-modes.sh +0 -0
  123. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-multi-repo.sh +0 -0
  124. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-notify.sh +0 -0
  125. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-openclaw.sh +0 -0
  126. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-quick-run.sh +0 -0
  127. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-registry.sh +0 -0
  128. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-review.sh +0 -0
  129. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-routing.sh +0 -0
  130. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-scope.sh +0 -0
  131. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-spawn.sh +0 -0
  132. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-templates.sh +0 -0
  133. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-tui.sh +0 -0
  134. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tests/test-watch.sh +0 -0
  135. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tui/PRD.md +0 -0
  136. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tui/agent.go +0 -0
  137. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tui/dashboard.go +0 -0
  138. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tui/filter.go +0 -0
  139. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tui/go.mod +0 -0
  140. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tui/go.sum +0 -0
  141. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tui/keybindings.go +0 -0
  142. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tui/main.go +0 -0
  143. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tui/model.go +0 -0
  144. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tui/steer.go +0 -0
  145. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/tui/styles.go +0 -0
  146. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/web/go.mod +0 -0
  147. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/web/index.html +0 -0
  148. {clawforge_cli-1.6.1 → clawforge_cli-1.6.2}/web/main.go +0 -0
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## v1.6.2 — Emoji Forge Animation
4
+
5
+ ### Changed
6
+ - TUI startup animation replaced with 10-frame emoji sequence
7
+ - Cold forge (⬛) → embers (🟠) → fire (🔥) → hammer up (🔨) → STRIKE (💥⚡✨)
8
+ - Sparks flying → quench (💧🌊) → agents emerge (🤖) → fleet online (✅)
9
+ - Frame timing tuned to 140ms for smooth progression (~1.4s total)
10
+
3
11
  ## v1.6.1 — quick-run CI Fix
4
12
 
5
13
  ### Fixed
@@ -1,7 +1,8 @@
1
1
  class Clawforge < Formula
2
2
  desc "Multi-mode coding workflow CLI for orchestrating AI coding agents"
3
3
  homepage "https://github.com/cyperx84/clawforge"
4
- url "https://github.com/cyperx84/clawforge/archive/refs/tags/v1.6.0.tar.gz"
4
+ url "https://github.com/cyperx84/clawforge/archive/refs/tags/v1.6.1.tar.gz"
5
+ sha256 "555c7b03fe52ff1d748ae942d259eea8b362b562d5b2b35cbfa1e40e3bc34597"
5
6
  sha256 "240927908d5b2738b2e22156eeb360d09c5b20c3bde04b46a2b11d9de7466eba"
6
7
  sha256 "b2d483778e83b9007b22bb4c421c90b71e7343cc4f244d116b99eaa2810dc433"
7
8
  sha256 "549b3ebf95c953cd4f366b5a251786c994726761c9d4ed6255b996b6458cf695"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clawforge-cli
3
- Version: 1.6.1
3
+ Version: 1.6.2
4
4
  Summary: Multi-mode coding workflow CLI for orchestrating AI coding agents
5
5
  Project-URL: Homepage, https://github.com/cyperx84/clawforge
6
6
  Project-URL: Repository, https://github.com/cyperx84/clawforge
@@ -0,0 +1 @@
1
+ 1.6.2
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyperx/clawforge",
3
- "version": "1.6.1",
3
+ "version": "1.6.2",
4
4
  "description": "Multi-mode coding workflow CLI for orchestrating AI coding agents",
5
5
  "bin": {
6
6
  "@cyperx/clawforge": "./bin/clawforge"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "clawforge-cli"
3
- version = "1.6.1"
3
+ version = "1.6.2"
4
4
  description = "Multi-mode coding workflow CLI for orchestrating AI coding agents"
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -134,10 +134,10 @@ assert_contains "help shows Developer Experience" "Developer Experience" "$cli_h
134
134
  # Test 11: version
135
135
  echo "Test 11: version"
136
136
  version=$(cat "${SCRIPT_DIR}/../VERSION")
137
- if [[ "$version" == "1.6.1" ]]; then
138
- echo " ✅ version is 1.6.1"; PASS=$((PASS+1))
137
+ if [[ "$version" == "1.6.2" ]]; then
138
+ echo " ✅ version is 1.6.2"; PASS=$((PASS+1))
139
139
  else
140
- echo " ❌ version is $version, expected 1.6.1"; FAIL=$((FAIL+1))
140
+ echo " ❌ version is $version, expected 1.6.2"; FAIL=$((FAIL+1))
141
141
  fi
142
142
 
143
143
  echo ""
@@ -77,7 +77,7 @@ assert_contains "dashboard help shows p key" "preview" "$tui_help"
77
77
  # Test 7: version
78
78
  echo "Test 7: version"
79
79
  version=$(cat "${SCRIPT_DIR}/../VERSION")
80
- assert_eq "version is 1.6.1" "1.6.1" "$version"
80
+ assert_eq "version is 1.6.2" "1.6.2" "$version"
81
81
 
82
82
  echo ""
83
83
  echo "Results: $PASS passed, $FAIL failed"
@@ -121,7 +121,7 @@ assert_contains "help shows Power Features" "Power Features" "$cli_help"
121
121
  # Test 13: version
122
122
  echo "Test 13: version"
123
123
  version=$(cat "${SCRIPT_DIR}/../VERSION")
124
- assert_eq "version is 1.6.1" "1.6.1" "$version"
124
+ assert_eq "version is 1.6.2" "1.6.2" "$version"
125
125
 
126
126
  echo ""
127
127
  echo "Results: $PASS passed, $FAIL failed"
@@ -96,7 +96,7 @@ assert_contains "watch checks terminal states" "done|failed|timeout|cancelled" "
96
96
  # Test 9: version
97
97
  echo "Test 9: version"
98
98
  version=$(cat "${SCRIPT_DIR}/../VERSION")
99
- assert_eq "version is 1.6.1" "1.6.1" "$version"
99
+ assert_eq "version is 1.6.2" "1.6.2" "$version"
100
100
 
101
101
  echo ""
102
102
  echo "Results: $PASS passed, $FAIL failed"
@@ -96,7 +96,7 @@ assert_contains "help shows Reliability" "Reliability" "$cli_help"
96
96
  # Test 11: version bump
97
97
  echo "Test 11: version"
98
98
  version=$(cat "${SCRIPT_DIR}/../VERSION")
99
- assert_eq "version is 1.6.1" "1.6.1" "$version"
99
+ assert_eq "version is 1.6.2" "1.6.2" "$version"
100
100
 
101
101
  # Test 12: doctor --fix runs without errors
102
102
  echo "Test 12: doctor --fix"
@@ -107,7 +107,7 @@ assert_contains "help shows Web Dashboard" "Web Dashboard" "$cli_help"
107
107
  # Test 7: version
108
108
  echo "Test 7: version"
109
109
  version=$(cat "${SCRIPT_DIR}/../VERSION")
110
- assert_eq "version is 1.6.1" "1.6.1" "$version"
110
+ assert_eq "version is 1.6.2" "1.6.2" "$version"
111
111
 
112
112
  echo ""
113
113
  echo "Results: $PASS passed, $FAIL failed"
@@ -0,0 +1,192 @@
1
+ package main
2
+
3
+ import (
4
+ "time"
5
+
6
+ tea "charm.land/bubbletea/v2"
7
+ "charm.land/lipgloss/v2"
8
+ )
9
+
10
+ // AnimationTickMsg advances the forge startup animation by one frame.
11
+ type AnimationTickMsg time.Time
12
+
13
+ // AnimationDoneMsg signals that the startup animation has completed.
14
+ type AnimationDoneMsg struct{}
15
+
16
+ const frameDuration = 140 * time.Millisecond
17
+
18
+ // forgeFrames contains the emoji animation frames for the forge startup sequence.
19
+ // 10 frames @ 140ms = ~1.4s total.
20
+ // Each frame is centered by lipgloss — emoji are kept spaced to avoid double-width
21
+ // alignment drift across different terminal emulators.
22
+ var forgeFrames = [...]string{
23
+
24
+ // Frame 0 — Cold forge: nothing active yet
25
+ `
26
+ ⚒️ C L A W F O R G E ⚒️
27
+
28
+
29
+ ⬛ ⬛ ⬛ ⬛ ⬛
30
+
31
+ ⬛ ⬛
32
+
33
+ ⬛ ⬛ ⬛ ⬛ ⬛
34
+
35
+
36
+ · · · initializing · · ·
37
+ `,
38
+
39
+ // Frame 1 — First ember: a single spark at the base
40
+ `
41
+ ⚒️ C L A W F O R G E ⚒️
42
+
43
+
44
+ ⬛ ⬛ ⬛ ⬛ ⬛
45
+
46
+ ⬛ 🟠 ⬛
47
+
48
+ ⬛ ⬛ ⬛ ⬛ ⬛
49
+
50
+
51
+ · · · heating forge · · ·
52
+ `,
53
+
54
+ // Frame 2 — Embers glow: fire building
55
+ `
56
+ ⚒️ C L A W F O R G E ⚒️
57
+
58
+
59
+ ⬛ ⬛ ⬛ ⬛ ⬛
60
+
61
+ ⬛ 🔥 🟠 🔥 ⬛
62
+
63
+ ⬛ ⬛ ⬛ ⬛ ⬛
64
+
65
+
66
+ · · · fire rising · · ·
67
+ `,
68
+
69
+ // Frame 3 — Full fire: forge is hot
70
+ `
71
+ ⚒️ C L A W F O R G E ⚒️
72
+
73
+
74
+ 🟥 🟥 🟥 🟥 🟥
75
+
76
+ 🟥 🔥 🔥 🔥 🟥
77
+
78
+ 🟥 🟥 🟥 🟥 🟥
79
+
80
+
81
+ · · · forge is hot · · ·
82
+ `,
83
+
84
+ // Frame 4 — Hammer raised: agent ready to strike
85
+ `
86
+ ⚒️ C L A W F O R G E ⚒️
87
+
88
+ 🔨
89
+
90
+ 🟥 🟥 🟥 🟥 🟥
91
+
92
+ 🟥 🔥 🔥 🔥 🟥
93
+
94
+ 🟥 🟥 🟥 🟥 🟥
95
+
96
+
97
+ · · · agents loading · · ·
98
+ `,
99
+
100
+ // Frame 5 — STRIKE: hammer hits the forge
101
+ `
102
+ ⚒️ C L A W F O R G E ⚒️
103
+
104
+
105
+ ⚡ ⚡ 💥 ⚡ ⚡
106
+
107
+ ⚡ 🔥 🔨 🔥 ⚡
108
+
109
+ ⚡ ⚡ ✨ ⚡ ⚡
110
+
111
+
112
+ · · · FORGING AGENTS · · ·
113
+ `,
114
+
115
+ // Frame 6 — Sparks fly: maximum energy
116
+ `
117
+ ⚒️ C L A W F O R G E ⚒️
118
+
119
+ ✨ ⚡ 💥 ⚡ ✨
120
+
121
+ ⚡ 🔥 🔥 🔥 ⚡
122
+
123
+ ✨ ⚡ ✨ ⚡ ✨
124
+
125
+
126
+ · · · SPARKS FLYING · · ·
127
+ `,
128
+
129
+ // Frame 7 — Cooling: quench in blue
130
+ `
131
+ ⚒️ C L A W F O R G E ⚒️
132
+
133
+
134
+ 💧 💧 💧 💧 💧
135
+
136
+ 💧 🌊 🔵 🌊 💧
137
+
138
+ 💧 💧 💧 💧 💧
139
+
140
+
141
+ · · · quenching · · ·
142
+ `,
143
+
144
+ // Frame 8 — Agents emerge: bots ready
145
+ `
146
+ ⚒️ C L A W F O R G E ⚒️
147
+
148
+
149
+ 🤖 🤖 🤖
150
+
151
+
152
+ ready to deploy
153
+
154
+
155
+ · · · spawning fleet · · ·
156
+ `,
157
+
158
+ // Frame 9 — READY: full fleet online
159
+ `
160
+ ✅ C L A W F O R G E ✅
161
+
162
+
163
+ 🤖 🤖 🤖 🤖 🤖
164
+
165
+ ONLINE
166
+
167
+ ⚒️ fleet forged ⚒️
168
+
169
+
170
+ `,
171
+ }
172
+
173
+ // animationTick returns a command that sends an AnimationTickMsg after frameDuration.
174
+ func animationTick() tea.Cmd {
175
+ return tea.Tick(frameDuration, func(t time.Time) tea.Msg {
176
+ return AnimationTickMsg(t)
177
+ })
178
+ }
179
+
180
+ // renderAnimation renders the current animation frame centered in the terminal.
181
+ func renderAnimation(frame int, width, height int) string {
182
+ if frame < 0 || frame >= len(forgeFrames) {
183
+ return ""
184
+ }
185
+
186
+ content := animFrameStyle.Render(forgeFrames[frame])
187
+
188
+ if width > 0 && height > 0 {
189
+ return lipgloss.Place(width, height, lipgloss.Center, lipgloss.Center, content)
190
+ }
191
+ return content
192
+ }
@@ -1 +0,0 @@
1
- 1.6.1
@@ -1,192 +0,0 @@
1
- package main
2
-
3
- import (
4
- "time"
5
-
6
- tea "charm.land/bubbletea/v2"
7
- "charm.land/lipgloss/v2"
8
- )
9
-
10
- // AnimationTickMsg advances the forge startup animation by one frame.
11
- type AnimationTickMsg time.Time
12
-
13
- // AnimationDoneMsg signals that the startup animation has completed.
14
- type AnimationDoneMsg struct{}
15
-
16
- const frameDuration = 120 * time.Millisecond
17
-
18
- // forgeFrames contains the ASCII art frames for the forge startup animation.
19
- // 10 frames of a hammering/sparks effect at ~120ms each = ~1.2s total.
20
- var forgeFrames = [...]string{
21
- // Frame 0: Forge cold
22
- `
23
- _______________
24
- / \
25
- / C L A W \
26
- / F O R G E \
27
- / \
28
- /_______________________\
29
- | |
30
- | |
31
- | ___ |
32
- | | | |
33
- _______|_|___|_|________
34
- |________________________|
35
- `,
36
- // Frame 1: Embers glow
37
- `
38
- _______________
39
- / \
40
- / C L A W \
41
- / F O R G E \
42
- / . \
43
- /_______________________\
44
- | |
45
- | * |
46
- | ___ |
47
- | | | |
48
- _______|_|___|_|________
49
- |_______.....____________|
50
- `,
51
- // Frame 2: Fire rising
52
- `
53
- _______________
54
- / \
55
- / C L A W \
56
- / F O R G E \
57
- / . . \
58
- /_______________________\
59
- | * * |
60
- | /|\ |
61
- | ___ |
62
- | |^^^| |
63
- _______|_|___|_|________
64
- |______*..^^^..*_________|
65
- `,
66
- // Frame 3: Hammer up
67
- `
68
- _______________
69
- / \ _____
70
- / C L A W \ | |
71
- / F O R G E \ | ))) |
72
- / * . * \|_____|
73
- /_______________________\ |
74
- | *** * | |
75
- | /|\ | /
76
- | ___ | /
77
- | |^^^| |
78
- _______|_|___|_|________
79
- |______*..^^^..*_________|
80
- `,
81
- // Frame 4: Hammer strike!
82
- `
83
- _______________
84
- / \
85
- / C L A W \
86
- / F O R G E \ _____
87
- / * * . * * \ | |
88
- /________________________| ))) |
89
- | ***** | |_____|
90
- | /|\ |
91
- | ___ |
92
- | |^^^| |
93
- _______|_|___|_|________
94
- |______*..^^^..*_________|
95
- `,
96
- // Frame 5: SPARKS!
97
- `
98
- _______________
99
- / * * \
100
- / C L A W * \
101
- / F O R G E * \ _____
102
- / * * * . * * * \ | |
103
- /________________________\| ))) |
104
- * | ***** | * |_____|
105
- * | /|\ | *
106
- | ___ |
107
- | |^^^| |
108
- _______|_|___|_|________
109
- |______*..^^^..*_________|
110
- `,
111
- // Frame 6: Sparks fade, hammer lifts
112
- `
113
- _______________
114
- / * \
115
- / C L A W \
116
- / F O R G E \ _____
117
- / * . . * \ | |
118
- /_______________________\ | ))) |
119
- | * * * | |_____|
120
- | /|\ | |
121
- | ___ | /
122
- | |^^^| |
123
- _______|_|___|_|________
124
- |______*..^^^..*_________|
125
- `,
126
- // Frame 7: Second strike!
127
- `
128
- _______________
129
- / \
130
- / C L A W \
131
- / F O R G E \ _____
132
- / * * . * * \ | |
133
- /________________________| ))) |
134
- | ***** | |_____|
135
- | /|\ |
136
- | ___ |
137
- | |^^^| |
138
- _______|_|___|_|________
139
- |______*..^^^..*_________|
140
- `,
141
- // Frame 8: BIG SPARKS!
142
- `
143
- * _______________ *
144
- * / * * * \ *
145
- / C L A W * * \
146
- * / F O R G E * \ _____
147
- / * * * * . * * * * \ | |
148
- /________________________\| ))) |
149
- * * | ***** | * * |_____|
150
- * * | /|\ | * *
151
- * | ___ | *
152
- | |^^^| |
153
- _______|_|___|_|________
154
- |______*..^^^..*_________|
155
- `,
156
- // Frame 9: Forge ready — blade forged
157
- `
158
- _______________
159
- / \
160
- / C L A W \
161
- / F O R G E \
162
- / READY \
163
- /_______________________\
164
- | |
165
- | --- |
166
- | ___ |
167
- | |===| |
168
- _______|_|___|_|________
169
- |_______ FORGED _________|
170
- `,
171
- }
172
-
173
- // animationTick returns a command that sends an AnimationTickMsg after frameDuration.
174
- func animationTick() tea.Cmd {
175
- return tea.Tick(frameDuration, func(t time.Time) tea.Msg {
176
- return AnimationTickMsg(t)
177
- })
178
- }
179
-
180
- // renderAnimation renders the current animation frame centered in the terminal.
181
- func renderAnimation(frame int, width, height int) string {
182
- if frame < 0 || frame >= len(forgeFrames) {
183
- return ""
184
- }
185
-
186
- content := animFrameStyle.Render(forgeFrames[frame])
187
-
188
- if width > 0 && height > 0 {
189
- return lipgloss.Place(width, height, lipgloss.Center, lipgloss.Center, content)
190
- }
191
- return content
192
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes