Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
"name": "Christian Bager Bach Houmann",
"url": "https://github.com/chhoumann"
},
"description": "pstack for T3 Code: poteto's pstack, via Michael Denyer's pstack-claude port, with every subagent, panel, schedule, and PR watch dispatched through T3's orchestration so panels mix Claude, GPT, and Grok.",
"description": "pstack for T3 Code: Lauren Tan's pstack rewritten in place for T3, with every subagent, panel, schedule, and PR watch dispatched through T3's orchestration so panels mix Claude, GPT, and Grok.",
"plugins": [
{
"name": "t3-pstack",
"source": "./plugins/pstack",
"description": "pstack for T3 Code: rigorous agent workflows whose panels and fan-outs run across model families through T3. Original pstack by Lauren Tan (poteto); Claude Code port by Michael Denyer.",
"version": "1.0.14"
"description": "pstack for T3 Code: rigorous agent workflows whose panels and fan-outs run across model families through T3. Original pstack by Lauren Tan (poteto).",
"version": "2.0.0-rc.1"
}
]
}
95 changes: 8 additions & 87 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
- name: Check generated files and plugin invariants
run: bun tools/generate.mjs --check
- name: Tool and invariant fixture tests
run: bun test tests/
run: bun test tests/ --timeout 30000

windows-hooks:
name: Windows session hooks
Expand All @@ -47,21 +47,6 @@ jobs:
env:
PSTACK_REQUIRE_WINDOWS_HOOK: "1"

windows-worktree-audit:
name: Windows worktree audit
runs-on: windows-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
with:
bun-version: "1.3.14"
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Test the worktree audit
run: bun test --timeout 30000 tests/worktree-audit.test.mjs

forks:
name: Fork registry
runs-on: ubuntu-latest
Expand Down Expand Up @@ -115,55 +100,6 @@ jobs:
fi
done

skills-only:
name: Skills-only install
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
# Installs this checkout rather than the GitHub URL, so the canary proves
# the tree in the PR instead of whatever is on main. One agent target is
# enough: the CLI copies the same bytes for every agent, and the
# generated job already validated the source tree's links and prose.
- name: Install the skills tree with the skills CLI
run: |
npx --yes skills@1.5.23 add ./plugins/pstack/skills \
--skill '*' --agent codex --yes --copy
- name: Compare the installed skills tree with the source
run: diff -qr plugins/pstack/skills .agents/skills

pi-types:
name: Pi extension types
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
with:
bun-version: "1.3.14"
# The extension's types and model catalog come from the installed Pi
# package, so the checks run against the release users have rather than
# a copy in bun.lock. No lockfile: the exact version is pinned, and
# --before holds Pi's dependencies to the versions published by that
# date, since Pi releases after 1.0.0 ship no npm-shrinkwrap.json. Move
# the date with the version. The job has read-only permissions and no
# secrets. A lockfile here would put Pi's whole dependency tree under
# this repository's dependency scans.
- name: Install Pi
run: npm install -g --ignore-scripts --before=2026-10-11 @earendil-works/pi-coding-agent@1.1.0 # zizmor: ignore[adhoc-packages]
- name: Typecheck the extension against Pi
run: bun tools/typecheck-pi.mjs
- name: Install test dependencies
run: bun install --frozen-lockfile
# These checks make no model calls. Missing Pi fails instead of skipping.
- name: Check the model catalog and child startup against Pi
run: bun test tests/pi/catalog.test.mjs tests/pi/runtime.test.mjs
env:
PSTACK_PI_REQUIRE_CATALOG: "1"
PSTACK_PI_REQUIRE_RUNTIME: "1"

scripts:
name: Vendored bun tooling
runs-on: ubuntu-latest
Expand All @@ -183,12 +119,11 @@ jobs:
run: bun run typecheck
- name: Test
run: bun test orch watch-pr check-plan.test.ts
# Pinned here, not in package.json, so bun.lock stays identical to
# upstream's. 3.6.2 reproduces upstream's watch-pr files byte for byte,
# except fakes.test-helper.ts, which .prettierignore lists; later
# releases rewrap types.ts too.
# Upstream's scripts are not Prettier output, so this checks the port's
# own TypeScript. Pinned here, not in package.json, so bun.lock stays
# identical to upstream's.
- name: Check formatting
run: bunx prettier@3.6.2 --check .
run: bunx prettier@3.6.2 --check watch-pr/settle.ts watch-pr/settle.test.ts resolve-codex-transcript.ts

shellcheck:
name: Shell scripts
Expand Down Expand Up @@ -245,28 +180,14 @@ jobs:
# remote URL, so a contributor's PR never fails on someone else's link
# rot. tools/validate-skills.mjs already covers the skills tree; this
# reaches the README, CHANGES, CONTRIBUTING and the other top-level docs.
# Upstream's prompt templates write `(url)` as a placeholder link, which
# validate-skills.mjs also skips, so a bare `url` file target is excluded.
#
# Resolved with: docker buildx imagetools inspect lycheeverse/lychee:0.24.2
- name: Check relative links and fragments
run: |
docker run --rm -v "$GITHUB_WORKSPACE:/repo" -w /repo \
lycheeverse/lychee:0.24.2@sha256:e2d19e57cf6ab037026f20b8e449a1f30d9d7f81eef4194763aab2eab20bd28d \
--offline --no-progress --include-fragments \
--exclude 'file://.*/url$' \
--exclude-path node_modules --exclude-path .git '**/*.md'

# macOS differs from ubuntu where the audit looks: BSD du pads its sizes and
# the temp directory sits behind the /var link.
macos-worktree-audit:
name: macOS worktree audit
runs-on: macos-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
with:
bun-version: "1.3.14"
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Test the worktree audit
run: bun test --timeout 30000 tests/worktree-audit.test.mjs
Loading
Loading