clawforge-cli 1.6.2__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 (149) hide show
  1. clawforge_cli-1.6.3/.github/workflows/publish-npm.yml +85 -0
  2. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/CHANGELOG.md +12 -0
  3. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/Formula/clawforge.rb +2 -1
  4. {clawforge_cli-1.6.2 → 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.2 → clawforge_cli-1.6.3}/package.json +6 -3
  8. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/pyproject.toml +1 -1
  9. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-dx.sh +3 -3
  10. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-observability.sh +1 -1
  11. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-power.sh +1 -1
  12. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-practical.sh +1 -1
  13. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-reliability.sh +1 -1
  14. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-web.sh +1 -1
  15. clawforge_cli-1.6.2/.github/workflows/publish-npm.yml +0 -24
  16. clawforge_cli-1.6.2/VERSION +0 -1
  17. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/.github/workflows/ci.yml +0 -0
  18. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/.github/workflows/publish-pypi.yml +0 -0
  19. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/.github/workflows/update-homebrew.yml +0 -0
  20. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/.github/workflows/version-sync.yml +0 -0
  21. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/.gitignore +0 -0
  22. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/LICENSE +0 -0
  23. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/PRD-v05.md +0 -0
  24. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/PRD-v06.md +0 -0
  25. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/PRD-v07.md +0 -0
  26. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/README.md +0 -0
  27. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/SKILL.md +0 -0
  28. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/attach.sh +0 -0
  29. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/check-agents.sh +0 -0
  30. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/clawforge +0 -0
  31. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/clawforge-web +0 -0
  32. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/clean.sh +0 -0
  33. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/completions.sh +0 -0
  34. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/config.sh +0 -0
  35. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/conflicts.sh +0 -0
  36. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/cost.sh +0 -0
  37. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/dashboard.sh +0 -0
  38. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/deps.sh +0 -0
  39. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/diff.sh +0 -0
  40. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/doctor.sh +0 -0
  41. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/eval.sh +0 -0
  42. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/export.sh +0 -0
  43. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/history.sh +0 -0
  44. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/init.sh +0 -0
  45. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/learn.sh +0 -0
  46. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/logs.sh +0 -0
  47. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/memory.sh +0 -0
  48. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/merge-helper.sh +0 -0
  49. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/multi-review.sh +0 -0
  50. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/notify.sh +0 -0
  51. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/on-complete.sh +0 -0
  52. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/parse-cost.sh +0 -0
  53. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/pr.sh +0 -0
  54. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/profile.sh +0 -0
  55. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/quick-run.sh +0 -0
  56. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/replay.sh +0 -0
  57. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/resume.sh +0 -0
  58. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/review-mode.sh +0 -0
  59. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/review-pr.sh +0 -0
  60. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/routing.sh +0 -0
  61. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/scope-task.sh +0 -0
  62. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/spawn-agent.sh +0 -0
  63. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/sprint.sh +0 -0
  64. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/steer.sh +0 -0
  65. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/stop.sh +0 -0
  66. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/summary.sh +0 -0
  67. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/swarm.sh +0 -0
  68. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/templates.sh +0 -0
  69. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/web.sh +0 -0
  70. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/clawforge/__init__.py +0 -0
  71. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/clawforge/cli.py +0 -0
  72. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/completions/_clawforge +0 -0
  73. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/completions/clawforge.bash +0 -0
  74. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/completions/clawforge.fish +0 -0
  75. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/config/defaults.json +0 -0
  76. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/config/prompt-templates/default.md +0 -0
  77. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/config/routing-defaults.json +0 -0
  78. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/IMPLEMENTATION-v04.md +0 -0
  79. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/PRD-v04.md +0 -0
  80. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/PUBLISHING-CHECKLIST.md +0 -0
  81. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/README.md +0 -0
  82. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/RELEASE.md +0 -0
  83. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/architecture.md +0 -0
  84. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/command-reference.md +0 -0
  85. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/configuration.md +0 -0
  86. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/dashboard.md +0 -0
  87. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/evaluation.md +0 -0
  88. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/faq.md +0 -0
  89. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/fleet-ops.md +0 -0
  90. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/getting-started.md +0 -0
  91. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/scenarios.md +0 -0
  92. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/troubleshooting.md +0 -0
  93. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/workflow-modes.md +0 -0
  94. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/evals/run-log.example.jsonl +0 -0
  95. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/evals/run-log.schema.json +0 -0
  96. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/evals/scorecard.md +0 -0
  97. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/install.sh +0 -0
  98. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/lib/common.sh +0 -0
  99. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/lib/templates/bugfix.json +0 -0
  100. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/lib/templates/migration.json +0 -0
  101. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/lib/templates/refactor.json +0 -0
  102. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/lib/templates/security-audit.json +0 -0
  103. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/lib/templates/test-coverage.json +0 -0
  104. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/registry/conflicts.jsonl +0 -0
  105. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/registry/costs.jsonl +0 -0
  106. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/run-all-tests.sh +0 -0
  107. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-ci-loop.sh +0 -0
  108. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-clean.sh +0 -0
  109. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-cli.sh +0 -0
  110. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-conflicts.sh +0 -0
  111. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-cost.sh +0 -0
  112. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-dashboard.sh +0 -0
  113. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-deps.sh +0 -0
  114. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-eval.sh +0 -0
  115. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-foundation.sh +0 -0
  116. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-history.sh +0 -0
  117. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-init.sh +0 -0
  118. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-learn.sh +0 -0
  119. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-management.sh +0 -0
  120. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-memory.sh +0 -0
  121. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-merge.sh +0 -0
  122. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-modes.sh +0 -0
  123. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-multi-repo.sh +0 -0
  124. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-notify.sh +0 -0
  125. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-openclaw.sh +0 -0
  126. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-quick-run.sh +0 -0
  127. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-registry.sh +0 -0
  128. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-review.sh +0 -0
  129. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-routing.sh +0 -0
  130. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-scope.sh +0 -0
  131. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-spawn.sh +0 -0
  132. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-templates.sh +0 -0
  133. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-tui.sh +0 -0
  134. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-watch.sh +0 -0
  135. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/PRD.md +0 -0
  136. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/agent.go +0 -0
  137. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/animation.go +0 -0
  138. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/dashboard.go +0 -0
  139. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/filter.go +0 -0
  140. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/go.mod +0 -0
  141. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/go.sum +0 -0
  142. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/keybindings.go +0 -0
  143. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/main.go +0 -0
  144. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/model.go +0 -0
  145. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/steer.go +0 -0
  146. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/styles.go +0 -0
  147. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/web/go.mod +0 -0
  148. {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/web/index.html +0 -0
  149. {clawforge_cli-1.6.2 → 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,17 @@
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
+
3
15
  ## v1.6.2 — Emoji Forge Animation
4
16
 
5
17
  ### Changed
@@ -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.1.tar.gz"
4
+ url "https://github.com/cyperx84/clawforge/archive/refs/tags/v1.6.2.tar.gz"
5
+ sha256 "cf0465a4ad2029ea80f677cd91800d062ab6e21583b52dc3fe161e965263ce15"
5
6
  sha256 "555c7b03fe52ff1d748ae942d259eea8b362b562d5b2b35cbfa1e40e3bc34597"
6
7
  sha256 "240927908d5b2738b2e22156eeb360d09c5b20c3bde04b46a2b11d9de7466eba"
7
8
  sha256 "b2d483778e83b9007b22bb4c421c90b71e7343cc4f244d116b99eaa2810dc433"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clawforge-cli
3
- Version: 1.6.2
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.2",
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.2"
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.2" ]]; then
138
- echo " ✅ version is 1.6.2"; 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.2"; 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.2" "1.6.2" "$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.2" "1.6.2" "$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.2" "1.6.2" "$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.2" "1.6.2" "$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.2" "1.6.2" "$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"
@@ -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.2
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