clawforge-cli 1.2.0__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 (128) hide show
  1. clawforge_cli-1.2.0/.github/workflows/ci.yml +26 -0
  2. clawforge_cli-1.2.0/.github/workflows/publish-npm.yml +24 -0
  3. clawforge_cli-1.2.0/.github/workflows/publish-pypi.yml +29 -0
  4. clawforge_cli-1.2.0/.github/workflows/update-homebrew.yml +79 -0
  5. clawforge_cli-1.2.0/.github/workflows/version-sync.yml +64 -0
  6. clawforge_cli-1.2.0/.gitignore +19 -0
  7. clawforge_cli-1.2.0/CHANGELOG.md +92 -0
  8. clawforge_cli-1.2.0/Formula/clawforge.rb +37 -0
  9. clawforge_cli-1.2.0/LICENSE +21 -0
  10. clawforge_cli-1.2.0/PKG-INFO +325 -0
  11. clawforge_cli-1.2.0/PRD-v05.md +136 -0
  12. clawforge_cli-1.2.0/PRD-v06.md +146 -0
  13. clawforge_cli-1.2.0/PRD-v07.md +106 -0
  14. clawforge_cli-1.2.0/README.md +312 -0
  15. clawforge_cli-1.2.0/SKILL.md +276 -0
  16. clawforge_cli-1.2.0/VERSION +1 -0
  17. clawforge_cli-1.2.0/bin/attach.sh +98 -0
  18. clawforge_cli-1.2.0/bin/check-agents.sh +343 -0
  19. clawforge_cli-1.2.0/bin/clawforge +257 -0
  20. clawforge_cli-1.2.0/bin/clean.sh +257 -0
  21. clawforge_cli-1.2.0/bin/config.sh +111 -0
  22. clawforge_cli-1.2.0/bin/conflicts.sh +224 -0
  23. clawforge_cli-1.2.0/bin/cost.sh +273 -0
  24. clawforge_cli-1.2.0/bin/dashboard.sh +557 -0
  25. clawforge_cli-1.2.0/bin/diff.sh +109 -0
  26. clawforge_cli-1.2.0/bin/doctor.sh +196 -0
  27. clawforge_cli-1.2.0/bin/eval.sh +217 -0
  28. clawforge_cli-1.2.0/bin/history.sh +91 -0
  29. clawforge_cli-1.2.0/bin/init.sh +182 -0
  30. clawforge_cli-1.2.0/bin/learn.sh +230 -0
  31. clawforge_cli-1.2.0/bin/logs.sh +126 -0
  32. clawforge_cli-1.2.0/bin/memory.sh +207 -0
  33. clawforge_cli-1.2.0/bin/merge-helper.sh +174 -0
  34. clawforge_cli-1.2.0/bin/multi-review.sh +215 -0
  35. clawforge_cli-1.2.0/bin/notify.sh +93 -0
  36. clawforge_cli-1.2.0/bin/on-complete.sh +149 -0
  37. clawforge_cli-1.2.0/bin/parse-cost.sh +205 -0
  38. clawforge_cli-1.2.0/bin/pr.sh +167 -0
  39. clawforge_cli-1.2.0/bin/resume.sh +183 -0
  40. clawforge_cli-1.2.0/bin/review-mode.sh +163 -0
  41. clawforge_cli-1.2.0/bin/review-pr.sh +145 -0
  42. clawforge_cli-1.2.0/bin/routing.sh +88 -0
  43. clawforge_cli-1.2.0/bin/scope-task.sh +169 -0
  44. clawforge_cli-1.2.0/bin/spawn-agent.sh +190 -0
  45. clawforge_cli-1.2.0/bin/sprint.sh +320 -0
  46. clawforge_cli-1.2.0/bin/steer.sh +107 -0
  47. clawforge_cli-1.2.0/bin/stop.sh +136 -0
  48. clawforge_cli-1.2.0/bin/summary.sh +182 -0
  49. clawforge_cli-1.2.0/bin/swarm.sh +525 -0
  50. clawforge_cli-1.2.0/bin/templates.sh +244 -0
  51. clawforge_cli-1.2.0/clawforge/__init__.py +0 -0
  52. clawforge_cli-1.2.0/clawforge/cli.py +24 -0
  53. clawforge_cli-1.2.0/config/defaults.json +20 -0
  54. clawforge_cli-1.2.0/config/prompt-templates/default.md +17 -0
  55. clawforge_cli-1.2.0/config/routing-defaults.json +6 -0
  56. clawforge_cli-1.2.0/docs/IMPLEMENTATION-v04.md +213 -0
  57. clawforge_cli-1.2.0/docs/PRD-v04.md +256 -0
  58. clawforge_cli-1.2.0/docs/PUBLISHING-CHECKLIST.md +107 -0
  59. clawforge_cli-1.2.0/docs/README.md +26 -0
  60. clawforge_cli-1.2.0/docs/RELEASE.md +149 -0
  61. clawforge_cli-1.2.0/docs/architecture.md +52 -0
  62. clawforge_cli-1.2.0/docs/command-reference.md +193 -0
  63. clawforge_cli-1.2.0/docs/configuration.md +40 -0
  64. clawforge_cli-1.2.0/docs/dashboard.md +46 -0
  65. clawforge_cli-1.2.0/docs/evaluation.md +31 -0
  66. clawforge_cli-1.2.0/docs/faq.md +24 -0
  67. clawforge_cli-1.2.0/docs/fleet-ops.md +34 -0
  68. clawforge_cli-1.2.0/docs/getting-started.md +92 -0
  69. clawforge_cli-1.2.0/docs/scenarios.md +63 -0
  70. clawforge_cli-1.2.0/docs/troubleshooting.md +53 -0
  71. clawforge_cli-1.2.0/docs/workflow-modes.md +68 -0
  72. clawforge_cli-1.2.0/evals/run-log.example.jsonl +2 -0
  73. clawforge_cli-1.2.0/evals/run-log.schema.json +44 -0
  74. clawforge_cli-1.2.0/evals/scorecard.md +49 -0
  75. clawforge_cli-1.2.0/install.sh +83 -0
  76. clawforge_cli-1.2.0/lib/common.sh +302 -0
  77. clawforge_cli-1.2.0/lib/templates/bugfix.json +6 -0
  78. clawforge_cli-1.2.0/lib/templates/migration.json +7 -0
  79. clawforge_cli-1.2.0/lib/templates/refactor.json +6 -0
  80. clawforge_cli-1.2.0/lib/templates/security-audit.json +5 -0
  81. clawforge_cli-1.2.0/lib/templates/test-coverage.json +6 -0
  82. clawforge_cli-1.2.0/package.json +41 -0
  83. clawforge_cli-1.2.0/pyproject.toml +25 -0
  84. clawforge_cli-1.2.0/registry/conflicts.jsonl +0 -0
  85. clawforge_cli-1.2.0/registry/costs.jsonl +0 -0
  86. clawforge_cli-1.2.0/tests/run-all-tests.sh +34 -0
  87. clawforge_cli-1.2.0/tests/test-ci-loop.sh +126 -0
  88. clawforge_cli-1.2.0/tests/test-clean.sh +109 -0
  89. clawforge_cli-1.2.0/tests/test-cli.sh +90 -0
  90. clawforge_cli-1.2.0/tests/test-conflicts.sh +139 -0
  91. clawforge_cli-1.2.0/tests/test-cost.sh +161 -0
  92. clawforge_cli-1.2.0/tests/test-dashboard.sh +94 -0
  93. clawforge_cli-1.2.0/tests/test-eval.sh +85 -0
  94. clawforge_cli-1.2.0/tests/test-foundation.sh +182 -0
  95. clawforge_cli-1.2.0/tests/test-history.sh +116 -0
  96. clawforge_cli-1.2.0/tests/test-init.sh +120 -0
  97. clawforge_cli-1.2.0/tests/test-learn.sh +121 -0
  98. clawforge_cli-1.2.0/tests/test-management.sh +182 -0
  99. clawforge_cli-1.2.0/tests/test-memory.sh +116 -0
  100. clawforge_cli-1.2.0/tests/test-merge.sh +93 -0
  101. clawforge_cli-1.2.0/tests/test-modes.sh +173 -0
  102. clawforge_cli-1.2.0/tests/test-multi-repo.sh +186 -0
  103. clawforge_cli-1.2.0/tests/test-notify.sh +95 -0
  104. clawforge_cli-1.2.0/tests/test-observability.sh +84 -0
  105. clawforge_cli-1.2.0/tests/test-openclaw.sh +105 -0
  106. clawforge_cli-1.2.0/tests/test-power.sh +128 -0
  107. clawforge_cli-1.2.0/tests/test-practical.sh +103 -0
  108. clawforge_cli-1.2.0/tests/test-registry.sh +97 -0
  109. clawforge_cli-1.2.0/tests/test-reliability.sh +108 -0
  110. clawforge_cli-1.2.0/tests/test-review.sh +73 -0
  111. clawforge_cli-1.2.0/tests/test-routing.sh +202 -0
  112. clawforge_cli-1.2.0/tests/test-scope.sh +105 -0
  113. clawforge_cli-1.2.0/tests/test-spawn.sh +117 -0
  114. clawforge_cli-1.2.0/tests/test-templates.sh +167 -0
  115. clawforge_cli-1.2.0/tests/test-tui.sh +120 -0
  116. clawforge_cli-1.2.0/tests/test-watch.sh +96 -0
  117. clawforge_cli-1.2.0/tui/PRD.md +106 -0
  118. clawforge_cli-1.2.0/tui/agent.go +266 -0
  119. clawforge_cli-1.2.0/tui/animation.go +192 -0
  120. clawforge_cli-1.2.0/tui/dashboard.go +219 -0
  121. clawforge_cli-1.2.0/tui/filter.go +68 -0
  122. clawforge_cli-1.2.0/tui/go.mod +25 -0
  123. clawforge_cli-1.2.0/tui/go.sum +46 -0
  124. clawforge_cli-1.2.0/tui/keybindings.go +229 -0
  125. clawforge_cli-1.2.0/tui/main.go +61 -0
  126. clawforge_cli-1.2.0/tui/model.go +166 -0
  127. clawforge_cli-1.2.0/tui/steer.go +69 -0
  128. clawforge_cli-1.2.0/tui/styles.go +69 -0
@@ -0,0 +1,26 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: macos-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+
15
+ - name: Install dependencies
16
+ run: |
17
+ brew install jq tmux
18
+
19
+ - name: Run tests
20
+ run: bash tests/run-all-tests.sh
21
+
22
+ - name: Verify install script
23
+ run: |
24
+ ./install.sh --prefix /tmp/clawforge-test
25
+ /tmp/clawforge-test/bin/clawforge version
26
+ /tmp/clawforge-test/bin/clawforge help
@@ -0,0 +1,24 @@
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 }}
@@ -0,0 +1,29 @@
1
+ name: Publish PyPI
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-python@v5
17
+ with:
18
+ python-version: "3.12"
19
+
20
+ - name: Install build tools
21
+ run: pip install build
22
+
23
+ - name: Build package
24
+ run: python -m build
25
+
26
+ - name: Publish to PyPI
27
+ uses: pypa/gh-action-pypi-publish@release/v1
28
+ with:
29
+ password: ${{ secrets.PYPI_TOKEN }}
@@ -0,0 +1,79 @@
1
+ name: Update Homebrew Tap
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ update-tap:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+
13
+ - name: Extract version
14
+ id: version
15
+ run: |
16
+ VERSION="${GITHUB_REF_NAME#v}"
17
+ echo "version=$VERSION" >> $GITHUB_OUTPUT
18
+ echo "tag=$GITHUB_REF_NAME" >> $GITHUB_OUTPUT
19
+
20
+ - name: Get tarball SHA256
21
+ id: sha
22
+ run: |
23
+ TAG="${{ steps.version.outputs.tag }}"
24
+ URL="https://github.com/cyperx84/clawforge/archive/refs/tags/${TAG}.tar.gz"
25
+ SHA=$(curl -sL "$URL" | sha256sum | cut -d" " -f1)
26
+ echo "sha256=$SHA" >> $GITHUB_OUTPUT
27
+
28
+ - name: Update Homebrew tap
29
+ uses: actions/checkout@v4
30
+ with:
31
+ repository: cyperx84/homebrew-tap
32
+ token: ${{ secrets.TAP_TOKEN }}
33
+ path: homebrew-tap
34
+
35
+ - name: Write updated formula
36
+ run: |
37
+ TAG="${{ steps.version.outputs.tag }}"
38
+ SHA="${{ steps.sha.outputs.sha256 }}"
39
+ cat > homebrew-tap/Formula/clawforge.rb << EOF
40
+ class Clawforge < Formula
41
+ desc "Multi-mode coding workflow CLI for orchestrating AI coding agents"
42
+ homepage "https://github.com/cyperx84/clawforge"
43
+ url "https://github.com/cyperx84/clawforge/archive/refs/tags/${TAG}.tar.gz"
44
+ sha256 "${SHA}"
45
+ license "MIT"
46
+ head "https://github.com/cyperx84/clawforge.git", branch: "main"
47
+
48
+ depends_on "bash"
49
+ depends_on "git"
50
+ depends_on "gh"
51
+ depends_on "jq"
52
+ depends_on "tmux"
53
+
54
+ def install
55
+ libexec.install Dir["*"]
56
+ bin.install_symlink libexec/"bin/clawforge" => "clawforge"
57
+ if File.exist?("bin/clawforge-dashboard")
58
+ bin.install "bin/clawforge-dashboard"
59
+ end
60
+ end
61
+
62
+ test do
63
+ assert_match "clawforge v", shell_output("#{bin}/clawforge version")
64
+ assert_match "Usage:", shell_output("#{bin}/clawforge help")
65
+ end
66
+ end
67
+ EOF
68
+ # Fix indentation (heredoc adds leading spaces)
69
+ cd homebrew-tap
70
+ sed -i 's/^ //' Formula/clawforge.rb
71
+
72
+ - name: Commit and push
73
+ run: |
74
+ cd homebrew-tap
75
+ git config user.name "github-actions[bot]"
76
+ git config user.email "github-actions[bot]@users.noreply.github.com"
77
+ git add Formula/clawforge.rb
78
+ git diff --cached --quiet || git commit -m "Update clawforge to ${{ steps.version.outputs.tag }}"
79
+ git push
@@ -0,0 +1,64 @@
1
+ name: Version Sync
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ permissions:
9
+ contents: write
10
+
11
+ jobs:
12
+ sync-versions:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+ with:
17
+ token: ${{ secrets.GITHUB_TOKEN }}
18
+
19
+ - name: Extract version from tag
20
+ id: version
21
+ run: |
22
+ VERSION="${GITHUB_REF_NAME#v}"
23
+ echo "version=$VERSION" >> $GITHUB_OUTPUT
24
+ echo "tag=$GITHUB_REF_NAME" >> $GITHUB_OUTPUT
25
+
26
+ - name: Update VERSION file
27
+ run: echo "${{ steps.version.outputs.version }}" > VERSION
28
+
29
+ - name: Update package.json
30
+ run: |
31
+ jq --arg v "${{ steps.version.outputs.version }}" '.version = $v' package.json > tmp.json && mv tmp.json package.json
32
+
33
+ - name: Update pyproject.toml
34
+ run: |
35
+ sed -i "s/^version = \".*\"/version = \"${{ steps.version.outputs.version }}\"/" pyproject.toml
36
+
37
+ - name: Update Homebrew formula URL
38
+ run: |
39
+ TAG="${{ steps.version.outputs.tag }}"
40
+ sed -i "s|archive/refs/tags/v.*\.tar\.gz|archive/refs/tags/${TAG}.tar.gz|" Formula/clawforge.rb
41
+
42
+ - name: Update Homebrew formula SHA256
43
+ run: |
44
+ TAG="${{ steps.version.outputs.tag }}"
45
+ URL="https://github.com/cyperx84/clawforge/archive/refs/tags/${TAG}.tar.gz"
46
+ SHA=$(curl -sL "$URL" | sha256sum | cut -d' ' -f1)
47
+ if [ -n "$SHA" ] && [ "$SHA" != "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ]; then
48
+ sed -i "/^ url/a\ sha256 \"${SHA}\"" Formula/clawforge.rb
49
+ fi
50
+
51
+ - name: Update CHANGELOG header
52
+ run: |
53
+ VERSION="${{ steps.version.outputs.version }}"
54
+ if ! grep -q "## v${VERSION}" CHANGELOG.md; then
55
+ sed -i "s/^# Changelog/# Changelog\n\n## v${VERSION}\n\n_Release notes pending._/" CHANGELOG.md
56
+ fi
57
+
58
+ - name: Commit version sync
59
+ run: |
60
+ git config user.name "github-actions[bot]"
61
+ git config user.email "github-actions[bot]@users.noreply.github.com"
62
+ git add VERSION package.json pyproject.toml Formula/clawforge.rb CHANGELOG.md
63
+ git diff --cached --quiet || git commit -m "chore: sync versions to ${{ steps.version.outputs.tag }}"
64
+ git push origin HEAD:main
@@ -0,0 +1,19 @@
1
+ registry/active-tasks.json
2
+ registry/learnings.jsonl
3
+ registry/cleanup-log.jsonl
4
+
5
+ # Python
6
+ .venv/
7
+ __pycache__/
8
+ *.pyc
9
+ *.pyo
10
+ .pytest_cache/
11
+
12
+ # Build artifacts
13
+ *.egg-info/
14
+ dist/
15
+ build/
16
+ tui/tui
17
+ bin/clawforge-dashboard
18
+ registry/completed-tasks.jsonl
19
+ registry/.lock*
@@ -0,0 +1,92 @@
1
+ # Changelog
2
+
3
+ ## v1.2.0 — Power Features
4
+
5
+ ### User Config (`clawforge config`)
6
+ - Persistent user config at `~/.clawforge/config.json`
7
+ - `config show|get|set|unset|init|path`
8
+ - User config overrides project defaults
9
+ - Configurable defaults for agent, model, timeout, auto-clean, routing, review models
10
+
11
+ ### Multi-Model Review (`clawforge multi-review`)
12
+ - Run PRs through multiple AI models in parallel
13
+ - Auto-generates comparison report with severity counts
14
+ - Configurable model list via `review_models` config
15
+ - Supports `--diff-only`, `--output`, `--json`
16
+
17
+ ### AI Summary (`clawforge summary`)
18
+ - LLM-generated summary of what an agent accomplished
19
+ - Gathers git diff + tmux output as context
20
+ - Multiple output formats: markdown, text, JSON
21
+ - Save to file with `--save`
22
+
23
+ ### Real Cost Parsing (`clawforge parse-cost`)
24
+ - Scrapes Claude Code and Codex output for actual token/cost data
25
+ - Supports patterns from both agent CLIs
26
+ - `--update` writes to costs.jsonl registry
27
+ - `parse-cost all` processes all running agents at once
28
+
29
+ ## v1.1.0 — Practical Commands
30
+
31
+ - `resume` — restart failed tasks from existing worktree
32
+ - `diff` — show changes without attaching
33
+ - `pr` — create PR from task branch
34
+ - Watch daemon fires on-complete hooks automatically
35
+
36
+ ## v1.0.0 — Milestone Release
37
+
38
+ ClawForge is feature-complete for single-user agent orchestration.
39
+
40
+ ### Workflow Modes (v0.4)
41
+ - `sprint` — single agent, full dev cycle (quick/standard modes)
42
+ - `review` — quality gate on existing PRs (+ `--fix`)
43
+ - `swarm` — parallel multi-agent orchestration with task decomposition
44
+ - Management: `steer`, `attach`, `stop`, `watch --daemon`, `status`
45
+
46
+ ### Observability (v0.5)
47
+ - Go TUI dashboard with vim keybindings + ASCII forge animation
48
+ - Cost tracking (`cost --summary`)
49
+ - Conflict detection (`conflicts --check`)
50
+ - Workflow templates (`templates list`)
51
+ - CI feedback loop (`--ci-loop`, `--max-ci-retries`)
52
+ - Budget caps (`--budget`)
53
+ - JSON output + webhook notifications
54
+
55
+ ### Fleet Ops (v0.6)
56
+ - Multi-repo swarm (`--repos`, `--repos-file`)
57
+ - Model routing strategies (`--routing auto|cheap|quality`)
58
+ - Per-repo agent memory (`memory add|show|search|forget`)
59
+ - Repo initialization (`init --claude-md`)
60
+ - Task history (`history --mode sprint --limit 10`)
61
+
62
+ ### Evaluation (v0.6.2)
63
+ - `eval weekly` summaries
64
+ - `eval log` for recording outcomes
65
+ - `eval compare` for week-over-week analysis
66
+
67
+ ### Reliability (v0.7)
68
+ - `doctor` — diagnose orphans, stale tasks, disk, branches (+ `--fix`)
69
+ - Signal trap cleanup (SIGINT/SIGTERM)
70
+ - Agent watchdog timeout (`--timeout <minutes>`)
71
+ - Registry file locking for concurrent writes
72
+ - Auto-clean on completion (`--auto-clean`)
73
+ - Registry pruning (`clean --prune-days`)
74
+ - Merged branch cleanup
75
+ - Disk space checks before spawning
76
+
77
+ ### TUI Views (v0.8)
78
+ - View modes: all / running / finished (`1`/`2`/`3` + `Tab`)
79
+ - Agent nudge (`n`)
80
+ - Swarm decomposition timeout guard
81
+ - Spawn failure accounting
82
+
83
+ ### Observability v2 (v0.9)
84
+ - `logs <id>` — capture agent output from tmux (--follow, --save, --raw)
85
+ - `on-complete` — fire webhooks, notifications, auto-clean on task finish
86
+ - TUI preview pane (`p` key) — live tmux output for selected agent
87
+
88
+ ## Architecture
89
+ - Shell modules in `bin/` with shared `lib/common.sh`
90
+ - JSON/JSONL registry state in `registry/`
91
+ - Go TUI (Bubble Tea v2 + Lipgloss v2) in `tui/`
92
+ - 28 test suites covering all commands
@@ -0,0 +1,37 @@
1
+ class Clawforge < Formula
2
+ desc "Multi-mode coding workflow CLI for orchestrating AI coding agents"
3
+ homepage "https://github.com/cyperx84/clawforge"
4
+ url "https://github.com/cyperx84/clawforge/archive/refs/tags/v1.2.0.tar.gz"
5
+ sha256 "6da402969628cc5a0dbafdcfca2596bced80692a714672ccb9e39c45f121465c"
6
+ # sha256 will be filled by CI
7
+ license "MIT"
8
+ head "https://github.com/cyperx84/clawforge.git", branch: "main"
9
+
10
+ depends_on "jq"
11
+ depends_on "tmux"
12
+ depends_on "gh"
13
+
14
+ def install
15
+ # Install shell scripts
16
+ libexec.install Dir["bin/*"]
17
+ libexec.install Dir["lib"]
18
+ libexec.install Dir["tui"]
19
+ libexec.install "VERSION"
20
+ libexec.install "registry"
21
+
22
+ # Create wrapper that sets CLAWFORGE_DIR
23
+ (bin/"clawforge").write <<~EOS
24
+ #!/bin/bash
25
+ export CLAWFORGE_DIR="#{libexec}"
26
+ exec "#{libexec}/clawforge" "$@"
27
+ EOS
28
+
29
+ # Dashboard binary
30
+ bin.install libexec/"clawforge-dashboard"
31
+ end
32
+
33
+ test do
34
+ assert_match "clawforge v", shell_output("#{bin}/clawforge version")
35
+ assert_match "Usage:", shell_output("#{bin}/clawforge help")
36
+ end
37
+ end
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 cyperx84
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.