Skip to content

Commit 6cf575e

Browse files
author
JD Davis
committed
Merge remote-tracking branch 'origin/main' into HEAD
# Conflicts: # .gitignore # headroom/graph/tokensave_installer.py # headroom/lean_ctx/installer.py # headroom/proxy/handlers/openai.py # headroom/rtk/installer.py
2 parents ac962fc + 2954e37 commit 6cf575e

494 files changed

Lines changed: 54375 additions & 16351 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude-plugin/marketplace.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
},
66
"metadata": {
77
"description": "Headroom marketplace for Claude Code and GitHub Copilot CLI plugins.",
8-
"version": "0.31.0"
8+
"version": "0.34.0"
99
},
1010
"plugins": [
1111
{
1212
"name": "headroom",
1313
"source": "./plugins/headroom-agent-hooks",
1414
"description": "Headroom startup hooks for Claude Code and GitHub Copilot CLI.",
15-
"version": "0.31.0",
15+
"version": "0.34.0",
1616
"author": {
1717
"name": "Headroom Contributors",
1818
"url": "https://github.com/chopratejas/headroom"

.github/plugin/marketplace.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
},
66
"metadata": {
77
"description": "Headroom marketplace for Claude Code and GitHub Copilot CLI plugins.",
8-
"version": "0.31.0"
8+
"version": "0.34.0"
99
},
1010
"plugins": [
1111
{
1212
"name": "headroom",
1313
"source": "./plugins/headroom-agent-hooks",
1414
"description": "Headroom startup hooks for Claude Code and GitHub Copilot CLI.",
15-
"version": "0.31.0",
15+
"version": "0.34.0",
1616
"author": {
1717
"name": "Headroom Contributors",
1818
"url": "https://github.com/chopratejas/headroom"

.github/workflows/ci.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ jobs:
7070
- 'headroom/cli/**'
7171
- 'headroom/install/**'
7272
- 'headroom/providers/**'
73-
- 'headroom/rtk/**'
7473
- 'crates/**'
7574
- '**/*.rs'
7675
- 'Cargo.toml'
@@ -117,7 +116,10 @@ jobs:
117116
path: ~/.cache/pip
118117
key: ${{ runner.os }}-pip-lint-${{ hashFiles('pyproject.toml') }}
119118
restore-keys: ${{ runner.os }}-pip-lint-
120-
- run: python -m pip install --upgrade pip "ruff==0.15.17" "mypy==1.20.2"
119+
- name: Verify Ruff version alignment
120+
id: ruff-version
121+
run: echo "version=$(python scripts/verify-ruff-version.py --print-version)" >> "$GITHUB_OUTPUT"
122+
- run: python -m pip install --upgrade pip "ruff==${{ steps.ruff-version.outputs.version }}" "mypy==1.20.2"
121123
- name: ruff check
122124
run: ruff check .
123125
- name: ruff format --check
@@ -291,6 +293,7 @@ jobs:
291293
uses: codecov/codecov-action@v5
292294
with:
293295
files: coverage-${{ matrix.shard }}.xml
296+
disable_search: true
294297
flags: python
295298
name: python-shard-${{ matrix.shard }}
296299
# Token is sent so uploads authenticate once the repo is activated on

.github/workflows/docs.yml

Lines changed: 18 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,36 @@
1-
name: Deploy Documentation
1+
name: Validate Docs
2+
3+
# There is ONE documentation site: the Next.js/Fumadocs app in `docs/`, published
4+
# at https://headroom-docs.vercel.app by Vercel's own Git integration. That URL is
5+
# what README and `pyproject.toml` (Homepage, Documentation) point at.
6+
#
7+
# This workflow therefore only *validates* — it deploys nothing. Vercel owns
8+
# deployment; duplicating it here is what produced a `deploy-vercel` job that
9+
# failed 30 times on main without ever deploying (no VERCEL_* secrets were set).
10+
#
11+
# A second site used to be built from `wiki/` by MkDocs and published to GitHub
12+
# Pages off the `gh-pages` branch. It was linked from nowhere in the repo, it meant
13+
# every documented change had to be written twice, and each Pages deploy
14+
# force-pushed `gh-pages` — which Vercel then tried to build, failing with
15+
# "The specified Root Directory 'docs' does not exist" because that branch holds
16+
# only the rendered site. Removed. `wiki/` stays in the repo as unpublished
17+
# markdown pending migration of the pages `docs/` does not yet cover (notably
18+
# `wiki/cli.md`); nothing builds or publishes it, so it needs no syncing.
219

320
on:
421
pull_request:
522
branches: [main]
623
paths:
724
- 'docs/**'
8-
- 'wiki/**'
9-
- 'mkdocs.yml'
10-
- '.github/workflows/docs.yml'
11-
push:
12-
branches:
13-
- main
14-
paths:
15-
- 'docs/**'
16-
- 'mkdocs.yml'
1725
- '.github/workflows/docs.yml'
1826
workflow_dispatch:
1927

2028
permissions:
2129
contents: read
2230

2331
jobs:
24-
validate-mkdocs:
25-
name: Validate mkdocs build
26-
if: github.event_name == 'pull_request'
27-
runs-on: ubuntu-latest
28-
timeout-minutes: 10
29-
steps:
30-
- uses: actions/checkout@v7
31-
32-
- name: Set up Python
33-
uses: actions/setup-python@v6
34-
with:
35-
python-version: '3.11'
36-
37-
- name: Cache pip
38-
uses: actions/cache@v6
39-
with:
40-
path: ~/.cache/pip
41-
key: ${{ runner.os }}-pip-docs-${{ hashFiles('mkdocs.yml') }}
42-
restore-keys: ${{ runner.os }}-pip-docs-
43-
44-
- name: Install dependencies
45-
run: pip install mkdocs-material
46-
47-
- name: Build docs
48-
run: mkdocs build
49-
5032
validate-nextjs:
5133
name: Validate Next.js build
52-
if: github.event_name == 'pull_request'
5334
runs-on: ubuntu-latest
5435
timeout-minutes: 15
5536
steps:
@@ -69,62 +50,3 @@ jobs:
6950
- name: Build docs
7051
run: npm run build
7152
working-directory: docs
72-
73-
deploy-github-pages:
74-
name: Deploy GitHub Pages
75-
if: github.event_name != 'pull_request'
76-
runs-on: ubuntu-latest
77-
permissions:
78-
contents: write
79-
steps:
80-
- uses: actions/checkout@v7
81-
with:
82-
fetch-depth: 0
83-
84-
- name: Set up Python
85-
uses: actions/setup-python@v6
86-
with:
87-
python-version: '3.11'
88-
89-
- name: Cache pip
90-
uses: actions/cache@v6
91-
with:
92-
path: ~/.cache/pip
93-
key: ${{ runner.os }}-pip-docs-${{ hashFiles('mkdocs.yml') }}
94-
restore-keys: ${{ runner.os }}-pip-docs-
95-
96-
- name: Install dependencies
97-
run: pip install mkdocs-material
98-
99-
- name: Build and deploy
100-
run: mkdocs gh-deploy --force
101-
102-
deploy-vercel:
103-
name: Deploy Vercel Docs
104-
if: >-
105-
github.event_name != 'pull_request'
106-
&& github.ref == 'refs/heads/main'
107-
&& github.repository_owner == 'headroomlabs-ai'
108-
runs-on: ubuntu-latest
109-
permissions:
110-
contents: read
111-
steps:
112-
- uses: actions/checkout@v6
113-
114-
- name: Setup Node.js
115-
uses: actions/setup-node@v6
116-
with:
117-
node-version: '20'
118-
cache: npm
119-
cache-dependency-path: docs/package-lock.json
120-
121-
- name: Install dependencies
122-
run: npm ci
123-
working-directory: docs
124-
125-
- name: Deploy to Vercel
126-
run: npx vercel deploy --prod --token=${{ secrets.VERCEL_TOKEN }}
127-
working-directory: docs
128-
env:
129-
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
130-
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}

.github/workflows/network-diff-capture.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ jobs:
4343
'magika>=0.6.0' \
4444
'zstandard>=0.20.0' \
4545
'websockets>=13.0' \
46-
'onnxruntime>=1.16.0' \
46+
'onnxruntime>=1.24' \
4747
'transformers>=4.30.0' \
4848
'watchdog>=4.0.0' \
4949
'sqlite-vec>=0.1.6' \
@@ -107,7 +107,7 @@ jobs:
107107
'magika>=0.6.0' \
108108
'zstandard>=0.20.0' \
109109
'websockets>=13.0' \
110-
'onnxruntime>=1.16.0' \
110+
'onnxruntime>=1.24' \
111111
'transformers>=4.30.0' \
112112
'watchdog>=4.0.0' \
113113
'sqlite-vec>=0.1.6'

.github/workflows/opencode-plugin.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@ on:
1010
branches: [main]
1111
paths:
1212
- "plugins/opencode/**"
13+
- "headroom/providers/opencode/_dist/**"
1314
- ".github/workflows/opencode-plugin.yml"
1415
push:
1516
branches: [main]
1617
paths:
1718
- "plugins/opencode/**"
19+
- "headroom/providers/opencode/_dist/**"
1820
- ".github/workflows/opencode-plugin.yml"
1921

2022
permissions:
@@ -39,3 +41,13 @@ jobs:
3941
- run: npm run typecheck
4042
- run: npm run build
4143
- run: npm test
44+
# The wheel ships a committed self-contained bundle at
45+
# headroom/providers/opencode/_dist/entry.opencode.js so pip installs
46+
# get the transport plugin too. Rebuild it and fail if the committed
47+
# artifact has drifted from the source.
48+
- run: npm run build:standalone
49+
- name: verify committed wheel bundle matches source
50+
run: |
51+
cmp dist-standalone/entry.opencode.js \
52+
../../headroom/providers/opencode/_dist/entry.opencode.js \
53+
|| { echo "::error::headroom/providers/opencode/_dist/entry.opencode.js is stale - run 'npm run build:standalone' in plugins/opencode and commit the result"; exit 1; }
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
name: Release Metadata Sync
2+
3+
# Keep generated version-carrying files in sync on release-please's branch.
4+
#
5+
# Why this exists
6+
# ---------------
7+
# release-please only rewrites `pyproject.toml` plus the `extra-files` listed in
8+
# `.release-please-config.json` (currently the TypeScript SDK and OpenClaw
9+
# package.json). Several other tracked files also carry the version, and
10+
# `server.json` is asserted byte-for-byte against `render_server_json()` — which
11+
# derives its version from `pyproject.toml`. So the moment release-please bumps
12+
# the version, `tests/test_mcp_registry/test_server_json.py::
13+
# test_root_server_json_matches_builder` fails on the release PR, and the release
14+
# cannot be merged. That is what blocked v0.33.0 (PR #2339).
15+
#
16+
# `release.yml` already runs `scripts/version-sync.py` before its own
17+
# `verify-versions.py` gate, so the release *build* self-heals in the workspace.
18+
# The regular CI test job does not, so the fix has to be committed.
19+
#
20+
# Why a workflow rather than more `extra-files` entries
21+
# ----------------------------------------------------
22+
# `scripts/version-sync.py` is the single place that knows every version-carrying
23+
# file. Restating that list as per-file jsonpaths would duplicate it, and a
24+
# jsonpath that silently fails to match produces exactly the failure we are trying
25+
# to remove. Running the script instead means files added to it in future are
26+
# covered with no change here.
27+
#
28+
# Why the push trigger
29+
# --------------------
30+
# release-please regenerates (force-pushes) its branch on every merge to main.
31+
# That is what repeatedly wiped the hand-pushed metadata fixes on #2339. Keying
32+
# off a push to the branch means the sync re-applies after every regeneration
33+
# instead of being lost.
34+
35+
on:
36+
push:
37+
branches:
38+
- "release-please--branches--**"
39+
40+
permissions:
41+
contents: write
42+
43+
concurrency:
44+
# Never cancel: a half-applied sync would leave the release PR inconsistent.
45+
group: release-metadata-sync-${{ github.ref }}
46+
cancel-in-progress: false
47+
48+
jobs:
49+
sync:
50+
runs-on: ubuntu-latest
51+
timeout-minutes: 10
52+
steps:
53+
- uses: actions/checkout@v7
54+
with:
55+
ref: ${{ github.ref_name }}
56+
# PAT (not GITHUB_TOKEN) for the same reason release-please.yml uses one:
57+
# a push made with GITHUB_TOKEN does not trigger workflows, so the release
58+
# PR's checks would never re-run against the synced commit and would stay
59+
# red. Falls back to GITHUB_TOKEN, where the sync still lands and a manual
60+
# re-run of the PR's checks picks it up.
61+
token: ${{ secrets.RELEASE_PLEASE_TOKEN || secrets.GITHUB_TOKEN }}
62+
63+
- uses: actions/setup-python@v6
64+
with:
65+
python-version: "3.12"
66+
67+
# version-sync.py is stdlib-only (json/re/tomllib), so no install step.
68+
- name: Sync version-carrying files release-please does not bump
69+
run: python scripts/version-sync.py
70+
71+
- name: Verify all versions agree
72+
run: python scripts/verify-versions.py
73+
74+
- name: Commit and push if anything changed
75+
run: |
76+
if git diff --quiet; then
77+
echo "Already in sync — nothing to commit."
78+
exit 0
79+
fi
80+
git config user.name "github-actions[bot]"
81+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
82+
git add -A
83+
git commit -m "chore: sync generated version metadata"
84+
# This push re-triggers this workflow. version-sync.py is idempotent, so
85+
# the next run finds no diff and exits above without pushing — the loop
86+
# terminates after one no-op run.
87+
git push origin HEAD:"${GITHUB_REF_NAME}"

.github/workflows/release.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -788,6 +788,7 @@ jobs:
788788
# recommended pattern for release workflows that may run
789789
# multiple times against the same version.
790790
skip-existing: true
791+
attestations: false
791792

792793
publish-npm:
793794
needs: [detect-version, build]

0 commit comments

Comments
 (0)