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.
- clawforge_cli-1.6.3/.github/workflows/publish-npm.yml +85 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/CHANGELOG.md +12 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/Formula/clawforge.rb +2 -1
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/PKG-INFO +1 -1
- clawforge_cli-1.6.3/VERSION +1 -0
- clawforge_cli-1.6.3/bin/install-binaries.js +105 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/package.json +6 -3
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/pyproject.toml +1 -1
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-dx.sh +3 -3
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-observability.sh +1 -1
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-power.sh +1 -1
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-practical.sh +1 -1
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-reliability.sh +1 -1
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-web.sh +1 -1
- clawforge_cli-1.6.2/.github/workflows/publish-npm.yml +0 -24
- clawforge_cli-1.6.2/VERSION +0 -1
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/.github/workflows/ci.yml +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/.github/workflows/publish-pypi.yml +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/.github/workflows/update-homebrew.yml +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/.github/workflows/version-sync.yml +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/.gitignore +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/LICENSE +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/PRD-v05.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/PRD-v06.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/PRD-v07.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/README.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/SKILL.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/attach.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/check-agents.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/clawforge +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/clawforge-web +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/clean.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/completions.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/config.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/conflicts.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/cost.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/dashboard.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/deps.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/diff.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/doctor.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/eval.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/export.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/history.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/init.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/learn.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/logs.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/memory.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/merge-helper.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/multi-review.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/notify.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/on-complete.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/parse-cost.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/pr.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/profile.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/quick-run.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/replay.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/resume.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/review-mode.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/review-pr.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/routing.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/scope-task.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/spawn-agent.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/sprint.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/steer.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/stop.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/summary.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/swarm.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/templates.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/bin/web.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/clawforge/__init__.py +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/clawforge/cli.py +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/completions/_clawforge +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/completions/clawforge.bash +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/completions/clawforge.fish +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/config/defaults.json +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/config/prompt-templates/default.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/config/routing-defaults.json +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/IMPLEMENTATION-v04.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/PRD-v04.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/PUBLISHING-CHECKLIST.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/README.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/RELEASE.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/architecture.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/command-reference.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/configuration.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/dashboard.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/evaluation.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/faq.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/fleet-ops.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/getting-started.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/scenarios.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/troubleshooting.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/docs/workflow-modes.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/evals/run-log.example.jsonl +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/evals/run-log.schema.json +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/evals/scorecard.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/install.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/lib/common.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/lib/templates/bugfix.json +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/lib/templates/migration.json +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/lib/templates/refactor.json +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/lib/templates/security-audit.json +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/lib/templates/test-coverage.json +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/registry/conflicts.jsonl +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/registry/costs.jsonl +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/run-all-tests.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-ci-loop.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-clean.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-cli.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-conflicts.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-cost.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-dashboard.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-deps.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-eval.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-foundation.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-history.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-init.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-learn.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-management.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-memory.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-merge.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-modes.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-multi-repo.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-notify.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-openclaw.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-quick-run.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-registry.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-review.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-routing.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-scope.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-spawn.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-templates.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-tui.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tests/test-watch.sh +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/PRD.md +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/agent.go +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/animation.go +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/dashboard.go +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/filter.go +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/go.mod +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/go.sum +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/keybindings.go +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/main.go +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/model.go +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/steer.go +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/tui/styles.go +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/web/go.mod +0 -0
- {clawforge_cli-1.6.2 → clawforge_cli-1.6.3}/web/index.html +0 -0
- {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.
|
|
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.
|
|
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.
|
|
3
|
+
"version": "1.6.3",
|
|
4
4
|
"description": "Multi-mode coding workflow CLI for orchestrating AI coding agents",
|
|
5
5
|
"bin": {
|
|
6
|
-
"
|
|
6
|
+
"clawforge": "./bin/clawforge",
|
|
7
|
+
"clawforge-dashboard": "./bin/clawforge-dashboard",
|
|
8
|
+
"clawforge-web": "./bin/clawforge-web"
|
|
7
9
|
},
|
|
8
10
|
"scripts": {
|
|
9
|
-
"postinstall": "
|
|
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",
|
|
@@ -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.
|
|
138
|
-
echo " ✅ version is 1.6.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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 }}
|
clawforge_cli-1.6.2/VERSION
DELETED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|