clawforge-cli 1.6.1__tar.gz → 1.6.3__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 (150) hide show
  1. clawforge_cli-1.6.3/.github/workflows/publish-npm.yml +85 -0
  2. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/CHANGELOG.md +20 -0
  3. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/Formula/clawforge.rb +3 -1
  4. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/PKG-INFO +1 -1
  5. clawforge_cli-1.6.3/VERSION +1 -0
  6. clawforge_cli-1.6.3/bin/install-binaries.js +105 -0
  7. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/package.json +6 -3
  8. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/pyproject.toml +1 -1
  9. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-dx.sh +3 -3
  10. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-observability.sh +1 -1
  11. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-power.sh +1 -1
  12. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-practical.sh +1 -1
  13. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-reliability.sh +1 -1
  14. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-web.sh +1 -1
  15. clawforge_cli-1.6.3/tui/animation.go +192 -0
  16. clawforge_cli-1.6.1/.github/workflows/publish-npm.yml +0 -24
  17. clawforge_cli-1.6.1/VERSION +0 -1
  18. clawforge_cli-1.6.1/tui/animation.go +0 -192
  19. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/.github/workflows/ci.yml +0 -0
  20. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/.github/workflows/publish-pypi.yml +0 -0
  21. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/.github/workflows/update-homebrew.yml +0 -0
  22. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/.github/workflows/version-sync.yml +0 -0
  23. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/.gitignore +0 -0
  24. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/LICENSE +0 -0
  25. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/PRD-v05.md +0 -0
  26. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/PRD-v06.md +0 -0
  27. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/PRD-v07.md +0 -0
  28. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/README.md +0 -0
  29. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/SKILL.md +0 -0
  30. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/attach.sh +0 -0
  31. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/check-agents.sh +0 -0
  32. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/clawforge +0 -0
  33. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/clawforge-web +0 -0
  34. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/clean.sh +0 -0
  35. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/completions.sh +0 -0
  36. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/config.sh +0 -0
  37. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/conflicts.sh +0 -0
  38. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/cost.sh +0 -0
  39. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/dashboard.sh +0 -0
  40. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/deps.sh +0 -0
  41. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/diff.sh +0 -0
  42. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/doctor.sh +0 -0
  43. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/eval.sh +0 -0
  44. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/export.sh +0 -0
  45. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/history.sh +0 -0
  46. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/init.sh +0 -0
  47. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/learn.sh +0 -0
  48. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/logs.sh +0 -0
  49. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/memory.sh +0 -0
  50. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/merge-helper.sh +0 -0
  51. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/multi-review.sh +0 -0
  52. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/notify.sh +0 -0
  53. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/on-complete.sh +0 -0
  54. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/parse-cost.sh +0 -0
  55. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/pr.sh +0 -0
  56. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/profile.sh +0 -0
  57. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/quick-run.sh +0 -0
  58. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/replay.sh +0 -0
  59. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/resume.sh +0 -0
  60. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/review-mode.sh +0 -0
  61. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/review-pr.sh +0 -0
  62. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/routing.sh +0 -0
  63. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/scope-task.sh +0 -0
  64. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/spawn-agent.sh +0 -0
  65. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/sprint.sh +0 -0
  66. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/steer.sh +0 -0
  67. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/stop.sh +0 -0
  68. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/summary.sh +0 -0
  69. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/swarm.sh +0 -0
  70. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/templates.sh +0 -0
  71. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/bin/web.sh +0 -0
  72. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/clawforge/__init__.py +0 -0
  73. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/clawforge/cli.py +0 -0
  74. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/completions/_clawforge +0 -0
  75. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/completions/clawforge.bash +0 -0
  76. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/completions/clawforge.fish +0 -0
  77. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/config/defaults.json +0 -0
  78. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/config/prompt-templates/default.md +0 -0
  79. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/config/routing-defaults.json +0 -0
  80. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/docs/IMPLEMENTATION-v04.md +0 -0
  81. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/docs/PRD-v04.md +0 -0
  82. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/docs/PUBLISHING-CHECKLIST.md +0 -0
  83. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/docs/README.md +0 -0
  84. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/docs/RELEASE.md +0 -0
  85. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/docs/architecture.md +0 -0
  86. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/docs/command-reference.md +0 -0
  87. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/docs/configuration.md +0 -0
  88. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/docs/dashboard.md +0 -0
  89. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/docs/evaluation.md +0 -0
  90. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/docs/faq.md +0 -0
  91. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/docs/fleet-ops.md +0 -0
  92. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/docs/getting-started.md +0 -0
  93. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/docs/scenarios.md +0 -0
  94. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/docs/troubleshooting.md +0 -0
  95. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/docs/workflow-modes.md +0 -0
  96. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/evals/run-log.example.jsonl +0 -0
  97. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/evals/run-log.schema.json +0 -0
  98. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/evals/scorecard.md +0 -0
  99. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/install.sh +0 -0
  100. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/lib/common.sh +0 -0
  101. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/lib/templates/bugfix.json +0 -0
  102. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/lib/templates/migration.json +0 -0
  103. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/lib/templates/refactor.json +0 -0
  104. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/lib/templates/security-audit.json +0 -0
  105. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/lib/templates/test-coverage.json +0 -0
  106. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/registry/conflicts.jsonl +0 -0
  107. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/registry/costs.jsonl +0 -0
  108. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/run-all-tests.sh +0 -0
  109. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-ci-loop.sh +0 -0
  110. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-clean.sh +0 -0
  111. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-cli.sh +0 -0
  112. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-conflicts.sh +0 -0
  113. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-cost.sh +0 -0
  114. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-dashboard.sh +0 -0
  115. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-deps.sh +0 -0
  116. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-eval.sh +0 -0
  117. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-foundation.sh +0 -0
  118. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-history.sh +0 -0
  119. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-init.sh +0 -0
  120. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-learn.sh +0 -0
  121. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-management.sh +0 -0
  122. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-memory.sh +0 -0
  123. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-merge.sh +0 -0
  124. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-modes.sh +0 -0
  125. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-multi-repo.sh +0 -0
  126. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-notify.sh +0 -0
  127. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-openclaw.sh +0 -0
  128. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-quick-run.sh +0 -0
  129. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-registry.sh +0 -0
  130. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-review.sh +0 -0
  131. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-routing.sh +0 -0
  132. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-scope.sh +0 -0
  133. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-spawn.sh +0 -0
  134. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-templates.sh +0 -0
  135. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-tui.sh +0 -0
  136. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tests/test-watch.sh +0 -0
  137. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tui/PRD.md +0 -0
  138. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tui/agent.go +0 -0
  139. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tui/dashboard.go +0 -0
  140. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tui/filter.go +0 -0
  141. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tui/go.mod +0 -0
  142. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tui/go.sum +0 -0
  143. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tui/keybindings.go +0 -0
  144. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tui/main.go +0 -0
  145. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tui/model.go +0 -0
  146. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tui/steer.go +0 -0
  147. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/tui/styles.go +0 -0
  148. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/web/go.mod +0 -0
  149. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/web/index.html +0 -0
  150. {clawforge_cli-1.6.1 → clawforge_cli-1.6.3}/web/main.go +0 -0
@@ -0,0 +1,85 @@
1
+ name: Publish npm
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ # Build Go binaries for all platforms and attach to the release
9
+ build-binaries:
10
+ strategy:
11
+ matrix:
12
+ include:
13
+ - os: macos-latest
14
+ goos: darwin
15
+ goarch: arm64
16
+ suffix: darwin-arm64
17
+ - os: macos-latest
18
+ goos: darwin
19
+ goarch: amd64
20
+ suffix: darwin-amd64
21
+ - os: ubuntu-latest
22
+ goos: linux
23
+ goarch: amd64
24
+ suffix: linux-amd64
25
+ - os: ubuntu-latest
26
+ goos: linux
27
+ goarch: arm64
28
+ suffix: linux-arm64
29
+
30
+ runs-on: ${{ matrix.os }}
31
+ permissions:
32
+ contents: write
33
+
34
+ steps:
35
+ - uses: actions/checkout@v4
36
+
37
+ - uses: actions/setup-go@v5
38
+ with:
39
+ go-version: '1.24'
40
+
41
+ - name: Build clawforge-dashboard
42
+ working-directory: tui
43
+ env:
44
+ GOOS: ${{ matrix.goos }}
45
+ GOARCH: ${{ matrix.goarch }}
46
+ CGO_ENABLED: "0"
47
+ run: go build -o ../clawforge-dashboard-${{ matrix.suffix }} .
48
+
49
+ - name: Build clawforge-web
50
+ working-directory: web
51
+ env:
52
+ GOOS: ${{ matrix.goos }}
53
+ GOARCH: ${{ matrix.goarch }}
54
+ CGO_ENABLED: "0"
55
+ run: go build -o ../clawforge-web-${{ matrix.suffix }} .
56
+
57
+ - name: Upload to release
58
+ env:
59
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
60
+ run: |
61
+ gh release upload "${{ github.ref_name }}" \
62
+ clawforge-dashboard-${{ matrix.suffix }} \
63
+ clawforge-web-${{ matrix.suffix }} \
64
+ --clobber
65
+
66
+ # Publish npm after binaries are attached
67
+ publish:
68
+ needs: build-binaries
69
+ runs-on: ubuntu-latest
70
+ permissions:
71
+ contents: read
72
+ id-token: write
73
+
74
+ steps:
75
+ - uses: actions/checkout@v4
76
+
77
+ - uses: actions/setup-node@v4
78
+ with:
79
+ node-version: 20
80
+ registry-url: https://registry.npmjs.org
81
+
82
+ - name: Publish to npm
83
+ run: npm publish --access public
84
+ env:
85
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## v1.6.3 — npm Binary Download on Install
4
+
5
+ ### Fixed
6
+ - `npm install -g @cyperx/clawforge` now downloads the correct pre-built `clawforge-dashboard` and `clawforge-web` binaries for your platform (darwin-arm64, darwin-amd64, linux-amd64, linux-arm64)
7
+ - Added `bin/install-binaries.js` postinstall script
8
+ - Exposed `clawforge-dashboard` and `clawforge-web` as named bin entries in package.json
9
+ - Updated GitHub Actions `publish-npm.yml` to cross-compile all 4 platform binaries and attach them to the release before publishing
10
+
11
+ ### Behaviour
12
+ - Fails gracefully with a clear warning if download fails (does not break install)
13
+ - Shows build-from-source instructions as fallback
14
+
15
+ ## v1.6.2 — Emoji Forge Animation
16
+
17
+ ### Changed
18
+ - TUI startup animation replaced with 10-frame emoji sequence
19
+ - Cold forge (⬛) → embers (🟠) → fire (🔥) → hammer up (🔨) → STRIKE (💥⚡✨)
20
+ - Sparks flying → quench (💧🌊) → agents emerge (🤖) → fleet online (✅)
21
+ - Frame timing tuned to 140ms for smooth progression (~1.4s total)
22
+
3
23
  ## v1.6.1 — quick-run CI Fix
4
24
 
5
25
  ### Fixed
@@ -1,7 +1,9 @@
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.2.tar.gz"
5
+ sha256 "cf0465a4ad2029ea80f677cd91800d062ab6e21583b52dc3fe161e965263ce15"
6
+ sha256 "555c7b03fe52ff1d748ae942d259eea8b362b562d5b2b35cbfa1e40e3bc34597"
5
7
  sha256 "240927908d5b2738b2e22156eeb360d09c5b20c3bde04b46a2b11d9de7466eba"
6
8
  sha256 "b2d483778e83b9007b22bb4c421c90b71e7343cc4f244d116b99eaa2810dc433"
7
9
  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.3
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.3
@@ -0,0 +1,105 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * install-binaries.js — ClawForge postinstall script.
4
+ *
5
+ * Downloads pre-built clawforge-dashboard and clawforge-web binaries
6
+ * from the GitHub release matching the installed package version.
7
+ *
8
+ * Platforms supported: darwin-arm64, darwin-amd64, linux-amd64, linux-arm64
9
+ * Falls back gracefully (warns but does not fail install) if download fails.
10
+ */
11
+
12
+ 'use strict';
13
+
14
+ const https = require('https');
15
+ const fs = require('fs');
16
+ const path = require('path');
17
+ const { execSync } = require('child_process');
18
+
19
+ const pkg = require('../package.json');
20
+ const VERSION = pkg.version;
21
+ const REPO = 'cyperx84/clawforge';
22
+ const BIN_DIR = path.join(__dirname);
23
+
24
+ function platform() {
25
+ const os = process.platform;
26
+ const arch = process.arch;
27
+ if (os === 'darwin' && arch === 'arm64') return 'darwin-arm64';
28
+ if (os === 'darwin' && (arch === 'x64' || arch === 'ia32')) return 'darwin-amd64';
29
+ if (os === 'linux' && arch === 'arm64') return 'linux-arm64';
30
+ if (os === 'linux' && (arch === 'x64' || arch === 'ia32')) return 'linux-amd64';
31
+ return null;
32
+ }
33
+
34
+ function download(url, dest) {
35
+ return new Promise((resolve, reject) => {
36
+ const file = fs.createWriteStream(dest);
37
+ const get = (u) => {
38
+ https.get(u, { headers: { 'User-Agent': 'clawforge-installer' } }, (res) => {
39
+ if (res.statusCode === 301 || res.statusCode === 302) {
40
+ return get(res.headers.location);
41
+ }
42
+ if (res.statusCode !== 200) {
43
+ file.close();
44
+ fs.unlink(dest, () => {});
45
+ return reject(new Error(`HTTP ${res.statusCode} for ${u}`));
46
+ }
47
+ res.pipe(file);
48
+ file.on('finish', () => { file.close(); resolve(); });
49
+ file.on('error', (err) => { fs.unlink(dest, () => {}); reject(err); });
50
+ }).on('error', reject);
51
+ };
52
+ get(url);
53
+ });
54
+ }
55
+
56
+ async function main() {
57
+ const plat = platform();
58
+ if (!plat) {
59
+ console.warn(`[clawforge] Unsupported platform ${process.platform}/${process.arch} — skipping binary download.`);
60
+ console.warn('[clawforge] Install from source: https://github.com/cyperx84/clawforge');
61
+ return;
62
+ }
63
+
64
+ const binaries = [
65
+ { name: 'clawforge-dashboard', asset: `clawforge-dashboard-${plat}` },
66
+ { name: 'clawforge-web', asset: `clawforge-web-${plat}` },
67
+ ];
68
+
69
+ let anyFailed = false;
70
+
71
+ for (const { name, dest_name, asset } of binaries.map(b => ({ ...b, dest_name: b.name }))) {
72
+ const dest = path.join(BIN_DIR, dest_name);
73
+ const url = `https://github.com/${REPO}/releases/download/v${VERSION}/${asset}`;
74
+
75
+ // Skip if already present and correct (e.g. re-install)
76
+ if (fs.existsSync(dest)) {
77
+ fs.chmodSync(dest, 0o755);
78
+ continue;
79
+ }
80
+
81
+ process.stdout.write(`[clawforge] Downloading ${name} (${plat})... `);
82
+ try {
83
+ await download(url, dest);
84
+ fs.chmodSync(dest, 0o755);
85
+ console.log('✓');
86
+ } catch (err) {
87
+ console.log(`⚠ skipped (${err.message})`);
88
+ anyFailed = true;
89
+ }
90
+ }
91
+
92
+ if (anyFailed) {
93
+ console.warn('[clawforge] Some binaries could not be downloaded.');
94
+ console.warn('[clawforge] TUI dashboard and web server may not be available.');
95
+ console.warn('[clawforge] To build from source: cd $(npm root)/@cyperx/clawforge && go build -o bin/clawforge-dashboard ./tui && go build -o bin/clawforge-web ./web');
96
+ console.warn('[clawforge] Or use Homebrew: brew tap cyperx84/tap && brew install clawforge');
97
+ } else {
98
+ console.log('[clawforge] ✅ All binaries installed.');
99
+ }
100
+ }
101
+
102
+ main().catch((err) => {
103
+ // Never fail the npm install — just warn
104
+ console.warn('[clawforge] Binary install warning:', err.message);
105
+ });
@@ -1,12 +1,14 @@
1
1
  {
2
2
  "name": "@cyperx/clawforge",
3
- "version": "1.6.1",
3
+ "version": "1.6.3",
4
4
  "description": "Multi-mode coding workflow CLI for orchestrating AI coding agents",
5
5
  "bin": {
6
- "@cyperx/clawforge": "./bin/clawforge"
6
+ "clawforge": "./bin/clawforge",
7
+ "clawforge-dashboard": "./bin/clawforge-dashboard",
8
+ "clawforge-web": "./bin/clawforge-web"
7
9
  },
8
10
  "scripts": {
9
- "postinstall": "echo 'ClawForge installed. Run: clawforge help'"
11
+ "postinstall": "node bin/install-binaries.js"
10
12
  },
11
13
  "repository": {
12
14
  "type": "git",
@@ -33,6 +35,7 @@
33
35
  "bin/",
34
36
  "lib/",
35
37
  "tui/",
38
+ "web/",
36
39
  "registry/",
37
40
  "VERSION",
38
41
  "README.md",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "clawforge-cli"
3
- version = "1.6.1"
3
+ version = "1.6.3"
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.3" ]]; then
138
+ echo " ✅ version is 1.6.3"; 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.3"; 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.3" "1.6.3" "$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.3" "1.6.3" "$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.3" "1.6.3" "$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.3" "1.6.3" "$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.3" "1.6.3" "$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,24 +0,0 @@
1
- name: Publish npm
2
-
3
- on:
4
- release:
5
- types: [published]
6
-
7
- jobs:
8
- publish:
9
- runs-on: ubuntu-latest
10
- permissions:
11
- contents: read
12
- id-token: write
13
- steps:
14
- - uses: actions/checkout@v4
15
-
16
- - uses: actions/setup-node@v4
17
- with:
18
- node-version: 20
19
- registry-url: https://registry.npmjs.org
20
-
21
- - name: Publish to npm
22
- run: npm publish --access public
23
- env:
24
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
@@ -1 +0,0 @@
1
- 1.6.1