Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
0cfdf0d
feat(integrations): add Pi and OMP extension
JerrettDavis Aug 12, 2026
d34f656
chore: remove manual changelog entry
gurkanguray Jul 29, 2026
fe03b70
docs(pi-extension): add persistent dev setup
gurkanguray Jul 30, 2026
ffd3d7e
chore(pi-extension): fix whitespace
JerrettDavis Jul 30, 2026
36f7815
ci(pi-extension): install proxy dependencies for live tests
JerrettDavis Aug 12, 2026
550f3d5
Merge branch 'main' into feat/pi-extension-headroom
JerrettDavis Aug 12, 2026
e9234bb
build: version Pi extension with Headroom
gurkanguray Aug 13, 2026
effa921
test: cover Pi extension version sync
gurkanguray Aug 13, 2026
de5e2d9
feat: manage pinned Pi extension packages
gurkanguray Aug 13, 2026
a410bb4
style: format Pi extension lifecycle
gurkanguray Aug 13, 2026
82f1033
fix: verify failed host package mutations
gurkanguray Aug 13, 2026
1b96aad
feat: own Pi extension config conservatively
gurkanguray Aug 13, 2026
fba1be3
fix: protect Pi config lifecycle races
gurkanguray Aug 13, 2026
be3df0b
fix: preserve Pi config recovery state
gurkanguray Aug 13, 2026
bf32e24
fix: retain Pi config on commit failure
gurkanguray Aug 13, 2026
ca8e303
feat: add durable global Pi and OMP init
gurkanguray Aug 13, 2026
0fdf55f
fix: make native init fully transactional
gurkanguray Aug 13, 2026
abd43e3
fix: transact native host init as one batch
gurkanguray Aug 13, 2026
a741dfa
fix: make native init startup claims atomic
gurkanguray Aug 13, 2026
79e5edb
fix: harden native init transaction
gurkanguray Aug 13, 2026
bdbc352
docs: record task 4 fix round 4
gurkanguray Aug 13, 2026
8397521
fix: confirm native runtime restoration
gurkanguray Aug 13, 2026
2fca840
feat: remove and diagnose durable Pi integrations
gurkanguray Aug 13, 2026
8fc14e1
fix: verify durable integration removal
gurkanguray Aug 13, 2026
a52b00e
build: publish Pi extension before Python
gurkanguray Aug 13, 2026
f1adc57
style: format Pi extension release gates
gurkanguray Aug 13, 2026
bf58b16
fix: fail Pi extension verification on cleanup errors
gurkanguray Aug 13, 2026
ba79f66
fix: reject non-positive proxy PIDs
gurkanguray Aug 13, 2026
de3d054
test: prove durable Pi and OMP lifecycle
gurkanguray Aug 13, 2026
5b55f65
test: strengthen durable lifecycle isolation
gurkanguray Aug 13, 2026
af4fb80
fix: make native teardown fail closed
gurkanguray Aug 13, 2026
0e590e4
feat: ship local-fleet Pi/OMP extension as plugins/pi
gurkanguray Aug 13, 2026
533c462
Merge remote-tracking branch 'origin/main' into feat/pi-extension-hea…
gurkanguray Aug 13, 2026
2d96d06
docs(pi): add gallery banner for pi.dev listing
gurkanguray Aug 13, 2026
ffae4aa
chore: drop local Superpowers SDD report from the PR
gurkanguray Aug 14, 2026
08ff9b8
fix(pi): use durable upstream banner URL
JerrettDavis Aug 14, 2026
dcd03dd
fix(pi): skip RTK-truncated tool results
gurkanguray Aug 17, 2026
b652423
Merge upstream main into feat/pi-extension-headroom
gurkanguray Aug 17, 2026
eb5e1ba
Merge main into feat/pi-extension-headroom
JerrettDavis Aug 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
122 changes: 122 additions & 0 deletions .github/workflows/pi-extension.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
name: Pi and OMP Extension

on:
pull_request:
branches: [main]
paths:
- "plugins/pi/**"
- "headroom/**"
- "pyproject.toml"
- "uv.lock"
- ".github/workflows/pi-extension.yml"
push:
branches: [main]
paths:
- "plugins/pi/**"
- "headroom/**"
- "pyproject.toml"
- "uv.lock"
- ".github/workflows/pi-extension.yml"
workflow_dispatch:

permissions:
contents: read

concurrency:
group: pi-extension-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

env:
EXTENSION_DIRECTORY: plugins/pi
HEADROOM_LIVE_BASE_URL: http://127.0.0.1:8787

jobs:
package:
name: unit + typecheck + build + pack
runs-on: ubuntu-latest
timeout-minutes: 15
defaults:
run:
working-directory: plugins/pi
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v6
with:
node-version: "24"
cache: npm
cache-dependency-path: plugins/pi/package-lock.json
- run: npm ci
- run: npm test
- run: npm run typecheck
- run: npm run build
- run: npm pack --dry-run

live-contract-and-hosts:
name: live + Pi ${{ matrix.pi-version }} / OMP 17.1.8
runs-on: ubuntu-latest
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
pi-version: ["0.80.10", "0.82.1", "0.84.1"]
defaults:
run:
working-directory: plugins/pi
steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v6
with:
python-version: "3.13"
- uses: astral-sh/setup-uv@v5
with:
enable-cache: true
- uses: actions/setup-node@v6
with:
node-version: "24"
cache: npm
cache-dependency-path: plugins/pi/package-lock.json
- uses: oven-sh/setup-bun@v2
- name: Install Headroom
working-directory: .
run: uv sync --frozen --extra proxy
- run: npm ci
- name: Install tested Pi and OMP versions
run: |
npm install --global @earendil-works/pi-coding-agent@${{ matrix.pi-version }}
bun install --global @oh-my-pi/pi-coding-agent@17.1.8
echo "PI_BIN=$(command -v pi)" >> "$GITHUB_ENV"
echo "OMP_BIN=$(command -v omp)" >> "$GITHUB_ENV"
pi --version
omp --version
- name: Start canonical Headroom proxy
working-directory: .
run: |
uv run headroom proxy --port 8787 --stateless --no-embedding-server > /tmp/headroom-proxy.log 2>&1 &
echo $! > /tmp/headroom-proxy.pid
python - <<'PY'
import json
import time
import urllib.request

deadline = time.monotonic() + 120
while time.monotonic() < deadline:
try:
with urllib.request.urlopen("http://127.0.0.1:8787/readyz", timeout=2) as response:
if response.status == 200 and json.load(response).get("ready") is True:
break
except Exception:
time.sleep(0.5)
else:
raise SystemExit("Headroom proxy did not become ready within 120 seconds")
PY
- run: npm run test:live
- run: npm run benchmark:live
- run: npm run test:hosts
- name: Show proxy log after failure
if: failure()
working-directory: .
run: cat /tmp/headroom-proxy.log
- name: Stop proxy
if: always()
working-directory: .
run: kill "$(cat /tmp/headroom-proxy.pid)" || true
Loading
Loading