Skip to content

Commit 3424918

Browse files
committed
de-fork pi-subagents: upstream npm extension, format-based pin checks
The lpb-stack/pi-subagents fork is retired. pi installs upstream @tintinweb/pi-subagents from npm (versionless pin, updated via 'pi update --extensions'), so pi-subagents is no longer a git repo the stack clones, symlinks, or tags. - repos.py: drop pi-subagents from WORKSPACE_REPOS/UPSTREAM_REMOTES; replace the hardcoded NPM_EXTENSION_PACKAGES with a pin-format classifier (git_extension_pin) — a git:github.com/lpb-stack/<ext>@ pin is version-tracked, every npm:/bare package is presence-only - validate: pin checks classify every package the same way (git forks version-checked, all npm/bare presence-checked); drop the stale git-clone existence check for pi-subagents - CI: drop pi-subagents from the tag job and the docs clone loop - docs/skills: 4 stack repos / 1 fork, retired-fork note, versionless npm pin examples
1 parent fafda51 commit 3424918

15 files changed

Lines changed: 117 additions & 112 deletions

File tree

.github/workflows/build-and-publish.yml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -304,14 +304,12 @@ jobs:
304304
# dev pipeline: dev branches; main pipeline: stable branches
305305
if [ "${GITHUB_REF_NAME}" = "main" ]; then
306306
declare -A REPO_BRANCHS=(
307-
["lpb-stack/pi-subagents"]="lpb"
308307
["lpb-stack/lemonade-pi-plugin"]="lpb"
309308
["lpb-stack/config"]="main"
310309
["lpb-stack/lpb-memory"]="main"
311310
)
312311
else
313312
declare -A REPO_BRANCHS=(
314-
["lpb-stack/pi-subagents"]="lpb-dev"
315313
["lpb-stack/lemonade-pi-plugin"]="lpb-dev"
316314
["lpb-stack/config"]="dev"
317315
["lpb-stack/lpb-memory"]="dev"
@@ -398,10 +396,10 @@ jobs:
398396
VERSION=$(git show origin/main:VERSION | tr -d '[:space:]')
399397
mkdir -p ws/git
400398
git clone --quiet https://github.com/lpb-stack/config.git ws/config
401-
for r in lpb-memory pi-subagents lemonade-pi-plugin; do
399+
for r in lpb-memory lemonade-pi-plugin; do
402400
git clone --quiet "https://github.com/lpb-stack/$r.git" "ws/git/$r"
403401
done
404-
for d in ws/config ws/git/lpb-memory ws/git/pi-subagents \
402+
for d in ws/config ws/git/lpb-memory \
405403
ws/git/lemonade-pi-plugin; do
406404
git -C "$d" fetch --quiet --depth 1 origin tag "$VERSION"
407405
git -C "$d" checkout -q "$VERSION"

.pi/skills/localpibox-docs-workflow/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ from `gh-pages` at `https://lpb-stack.github.io/devstack/<version>/`).
3333

3434
**Branch facts** (for "branch off X / PR to X" lines in CONTRIBUTING files):
3535
default branch is `dev` for devstack/config/lpb-memory, `lpb-dev` for the
36-
forks (pi, pi-subagents, lemonade-pi-plugin). `main`/`lpb` are stable
36+
lemonade-pi-plugin fork. `main`/`lpb` are stable
3737
branches written by `lpb-devstack release promote` — not PR targets.
3838

3939
## GitHub-Compatible Mermaid

.pi/skills/localpibox-repo-workflow/SKILL.md

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
name: lpb-stack-repo-workflow
3-
description: Manage the 6 LocalPibox repos — manual versioning (lpb-devstack bump), stable releases, image builds, lpb.py.
3+
description: Manage the LocalPibox stack repos — manual versioning (lpb-devstack bump), stable releases, image builds, lpb.py.
44
---
55
# LocalPibox Repository Workflow
66

@@ -39,9 +39,10 @@ CI: VERSION changed in pushed commit → tests → build + publish → tag 4 rep
3939
- **devstack/VERSION** — the only VERSION file in the stack (e.g. `0.0.N-lpb-dev`)
4040
- **Format:** dev pipeline `0.x.y-lpb-dev`, main pipeline `0.x.y-lpb`
4141
- **`lpb-devstack bump`** is the **dev release trigger**: before committing a
42-
VERSION change it gates on all 5 stack repos being on their dev branch,
43-
fully pushed, and committed (CI tags the *remote* dev heads — unpushed or
44-
uncommitted local work would ship invisibly). `bump --force` bypasses.
42+
VERSION change it gates on every tagged stack repo (all except devstack)
43+
being on its dev branch, fully pushed, and committed (CI tags the *remote*
44+
dev heads — unpushed or uncommitted local work would ship invisibly).
45+
`bump --force` bypasses.
4546
The docs gate is main-pipeline only (`release promote`).
4647
- **`lpb-devstack bump`** preserves major.minor, increments patch (or
4748
`--minor` / `--major` / `--set`), keeps the current suffix, and commits
@@ -67,7 +68,7 @@ CI: VERSION changed in pushed commit → tests → build + publish → tag 4 rep
6768
| **config** | workspace (agent preset) | `dev` | `main` |
6869
| **lpb-memory** | workspace + extension | `dev` | `main` |
6970
| **pi** | reference clone (de-forked — image installs pi from npm at `LPB_PI_VERSION`) |||
70-
| **pi-subagents** | extension | `lpb-dev` | `lpb` |
71+
| **pi-subagents** | extension (upstream npm — de-forked 2026-09-10, not a git repo) || |
7172
| **lemonade-pi-plugin** | extension | `lpb-dev` | `lpb` |
7273

7374
Org: all repos live under **`github.com/lpb-stack`** (migrated from
@@ -81,7 +82,6 @@ the GitHub org and GHCR paths use `lpb-stack`.
8182
Workspace:
8283
/home/lpb/workspace/devstack (real clone, single source)
8384
/home/lpb/workspace/pi (reference clone of the retired fork)
84-
/home/lpb/workspace/pi-subagents (symlink → agent git clone)
8585
/home/lpb/workspace/lemonade-pi-plugin (symlink → agent git clone)
8686
/home/lpb/workspace/lpb-memory (symlink → agent git clone)
8787
@@ -90,7 +90,10 @@ Agent config (cloned from lpb-stack/config by start.sh at container start):
9090
9191
Extension clones (pi loads these per settings.json pins):
9292
/home/lpb/.pi/agent/git/github.com/lpb-stack/
93-
lemonade-pi-plugin, lpb-memory, pi-subagents
93+
lemonade-pi-plugin, lpb-memory
94+
95+
pi-subagents is NOT a git clone — it installs from the upstream npm
96+
package (@tintinweb/pi-subagents) per the settings.json pin.
9497
9598
⚠️ Extensions update at runtime via `pi update --extensions`.
9699
They are NOT baked into Docker images.
@@ -102,9 +105,9 @@ Extension clones (pi loads these per settings.json pins):
102105

103106
- **`dev`** (devstack, config, lpb-memory): primary development. Default on GitHub.
104107
- **`main`** (devstack, config, lpb-memory): stable release branch.
105-
- **`lpb-dev`** (pi-subagents, lemonade-pi-plugin): active development from
108+
- **`lpb-dev`** (lemonade-pi-plugin): active development from
106109
upstream + LPB patches. Default on GitHub.
107-
- **`lpb`** (pi-subagents, lemonade-pi-plugin): stable branch — receives
110+
- **`lpb`** (lemonade-pi-plugin): stable branch — receives
108111
clean merges from `lpb-dev` via the release procedure. Divergence from
109112
`lpb-dev` is normal during active development.
110113

@@ -138,7 +141,7 @@ docs sync + review happens at release time via `docs-ready`.
138141
# commits DOCS_READY=<stable-version> on the docs branch + pushes)
139142
lpb-devstack release docs-ready
140143

141-
# 1. Readiness check (all 5 repos + docs verdict, non-destructive, fetches first)
144+
# 1. Readiness check (all tagged repos + docs verdict, non-destructive, fetches first)
142145
lpb-devstack release status
143146

144147
# 2. Inspect the exact plan without changing anything

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ has its own scope:
2020
| [config](https://github.com/lpb-stack/config) | Pi settings, MCP servers, custom skills, subagents presets |
2121
| [pi](https://github.com/earendil-works/pi) | Upstream of the coding agent core — installed from npm at `LPB_PI_VERSION`, not a stack repo since the 2026-08-31 de-fork; patches go upstream |
2222
| [lemonade-pi-plugin](https://github.com/lpb-stack/lemonade-pi-plugin) | Qwen thinking + vision support (fork) |
23-
| [pi-subagents](https://github.com/lpb-stack/pi-subagents) | Centralized subagent model registry (fork) |
23+
| [pi-subagents](https://github.com/tintinweb/pi-subagents) | Upstream of the subagent model registry — installed from npm, not a stack repo since the 2026-09-10 de-fork |
2424
| [lpb-memory](https://github.com/lpb-stack/lpb-memory) | Persistent memory / session search extension |
2525

2626
### Process

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ lpb --help # full usage
7373
| **VSCodium** | Web-based editor (`:web` image), connects over the OpenVSCode protocol |
7474
| **lemonade-pi-plugin** (forked) | Model provider for the local **Lemonade** server — Qwen thinking + vision support |
7575
| **lpb-memory** | Persistent memory + session search for the agent |
76-
| **pi-subagents** (forked) | Local-first subagent model registry (no hardcoded cloud models) |
76+
| **pi-subagents** | Subagent model registry — upstream `tintinweb/pi-subagents` installed via npm (no hardcoded cloud models) |
7777
| **agent-browser** + Chrome | Browser automation tools for the agent |
7878
| **MCP servers** | Exa (web search), Context7 (library docs), agent-browser |
7979
| **Lemonade** (host prerequisite) | Local model server — AMD/Strix Halo-optimized, serves GGUF models; on this host or any reachable host; model chosen by the user at setup (no default) |
@@ -211,7 +211,7 @@ patch.
211211
| Repo | Upstream | LocalPibox work | Update policy |
212212
|---|---|---|---|
213213
| **lemonade-pi-plugin** | `lemonade-sdk/lemonade-pi-plugin` (no stable release) | Qwen thinking + vision support | follow upstream `main`, check periodically |
214-
| **pi-subagents** | `tintinweb/pi-subagents` (v0.16.1) | centralized local-first subagent model registry | follow upstream; merge + repair as needed |
214+
| **pi-subagents** | `tintinweb/pi-subagents` (upstream, npm) | installed from upstream npm — no local fork since the 2026-09-10 de-fork; subagent model registry | track upstream releases |
215215
| **lpb-memory** | *(independent project)* | Pi memory extension (subprocess reviews) | no upstream to track |
216216
| **config** / **devstack** || own | own |
217217

@@ -238,7 +238,7 @@ GitHub Actions (`.github/workflows/build-and-publish.yml`) runs on:
238238
Versioning is **manual**: `lpb-devstack bump` commits a new `VERSION`, and CI
239239
builds + tags only when VERSION changed in the pushed commit. Pipeline jobs:
240240
**VERSION check****test** (always) → **build & publish images**
241-
**tag repos** (CI tags the other 4 stack repos on their pipeline branches) →
241+
**tag repos** (CI tags the other 3 stack repos on their pipeline branches) →
242242
**docs publish** (main pipeline only — publishes the stable docs version,
243243
gated on the docs being flagged ready via `lpb-devstack release docs-ready`
244244
before promotion) → **status**. Devstack itself is tracked by its `VERSION`
@@ -315,5 +315,5 @@ devstack/
315315
- [lpb-stack/pi](https://github.com/lpb-stack/pi) — retired pi fork (reference only; last state `pre-defork-0.0.71`)
316316
- [lpb-stack/config](https://github.com/lpb-stack/config) — agent config preset
317317
- [lpb-stack/lemonade-pi-plugin](https://github.com/lpb-stack/lemonade-pi-plugin) — Lemonade provider plugin
318-
- [lpb-stack/pi-subagents](https://github.com/lpb-stack/pi-subagents) — subagent model registry
318+
- [tintinweb/pi-subagents](https://github.com/tintinweb/pi-subagents) — subagent model registry (upstream, installed via npm; the `lpb-stack/pi-subagents` fork is retired)
319319
- [lpb-stack/lpb-memory](https://github.com/lpb-stack/lpb-memory) — persistent memory extension

doc/config-repo.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,16 +58,18 @@ The settings file is **template-driven**, not git-tracked:
5858

5959
### Example pin format
6060

61-
Extensions are pinned in the `packages` array of `settings.json` as
62-
`git:<owner>/<repo>@<stack-tag>` strings:
61+
Extensions are pinned in the `packages` array of `settings.json`. Git forks
62+
use `git:<owner>/<repo>@<stack-tag>` (version-tracked by the stack); npm
63+
packages use a bare `npm:<pkg>` specifier with **no version** so pi can
64+
update them via `pi update --extensions`:
6365

6466
```json
6567
{
6668
"packages": [
6769
"git:github.com/lpb-stack/lemonade-pi-plugin@0.0.N-lpb-dev",
6870
"git:github.com/lpb-stack/lpb-memory@0.0.N-lpb-dev",
6971
"npm:pi-mcp-adapter",
70-
"npm:@tintinweb/pi-subagents@0.19.0",
72+
"npm:@tintinweb/pi-subagents",
7173
"npm:pi-powerline-footer",
7274
"@upstash/context7-mcp"
7375
]
@@ -104,9 +106,11 @@ runtime via `pi update --extensions`.
104106
| Directory | Repo | Role |
105107
|---|---|---|
106108
| `lpb-memory/` | `lpb-stack/lpb-memory` | Persistent memory extension |
107-
| `pi-subagents/` | `lpb-stack/pi-subagents` | Subagent model registry |
108109
| `lemonade-pi-plugin/` | `lpb-stack/lemonade-pi-plugin` | Lemonade provider plugin |
109110

111+
`pi-subagents` is not here — it de-forked to the upstream npm package
112+
(installed by pi from the npm registry, not a git clone under `git/`).
113+
110114
## Runtime State: lpb-memory Dir
111115

112116
The directory `~/.pi/agent/lpb-memory/` holds **runtime state** for the

doc/fork-improvements.md

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,13 @@
88

99
## Repository Map
1010

11-
This stack uses 5 repositories under `github.com/lpb-stack`. Two are forks
12-
of upstream repos; pi itself is no longer a stack repo (de-forked
13-
2026-08-31, see the retired-fork note below):
11+
This stack uses 4 repositories under `github.com/lpb-stack`. One is a fork
12+
of an upstream repo; pi and pi-subagents are no longer stack repos (de-forked
13+
2026-08-31 and 2026-09-10 respectively — see the retired-fork notes below):
1414

1515
| Repo | Type | Upstream | Purpose |
1616
|---|---|---|---|
1717
| **`lpb-stack/lemonade-pi-plugin`** | Fork | `lemonade-sdk/lemonade-pi-plugin` | Lemonade provider — Qwen thinking protocol, vision, model catalog |
18-
| **`lpb-stack/pi-subagents`** | Fork | `tintinweb/pi-subagents` | Subagent model registry (local-first) |
1918
| **`lpb-stack/config`** | Original || User settings, skills, agents |
2019
| **`lpb-stack/devstack`** | Original || Docker dev environment + lpb launcher |
2120
| **`lpb-stack/lpb-memory`** | Original || Persistent memory extension |
@@ -96,11 +95,14 @@ more auditable than a formula.
9695

9796
---
9897

99-
## Pi Subagents (`lpb-stack/pi-subagents`)
98+
## The Pi-Subagents Fork (`lpb-stack/pi-subagents`) — retired 2026-09-10
10099

101-
Fork of `tintinweb/pi-subagents` (on top of upstream v0.16.1, merged into
102-
`lpb-dev`). Provides subagent model registry that removes
103-
Anthropic defaults and makes the stack fully local-first.
100+
The `lpb-stack/pi-subagents` fork (based on `tintinweb/pi-subagents` v0.16.1,
101+
last state on `lpb-dev`) is **retired**. pi now installs upstream
102+
`@tintinweb/pi-subagents` from npm (version tracked in `settings.json`), and
103+
the local-first behavior the fork provided is handled by the config repo's
104+
subagent presets — agent `.md` files omit the `model:` field, so subagents
105+
inherit the session model instead of hardcoded cloud defaults.
104106

105107
### Key Change: `globalDefaultModel`
106108

doc/lpb-config.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ Settings.json is **template-driven**, not git-tracked:
8181

8282
Example pins:
8383
- Fork extension (stack-versioned): `git:github.com/lpb-stack/lpb-memory@0.0.N-lpb-dev`
84-
- Upstream npm (fork retired, version follows upstream releases): `npm:@tintinweb/pi-subagents@0.19.0`
84+
- Upstream npm (no version pin — pi updates it via `pi update --extensions`): `npm:@tintinweb/pi-subagents`
8585

8686
## lpb-memory Config Lifecycle
8787

doc/lpb-devstack.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ partially-tagged stack is a release bug.
6464

6565
| Command | Description |
6666
|---|---|
67-
| `lpb-devstack release status` | Pre-flight check: all 5 repos + docs flag, non-destructive |
67+
| `lpb-devstack release status` | Pre-flight check: all tagged repos + docs flag, non-destructive |
6868
| `lpb-devstack release docs-ready [--yes]` | Flag the docs branch as reviewed for the next stable release |
6969
| `lpb-devstack release promote --dry-run` | Inspect plan without making changes |
7070
| `lpb-devstack release promote` | Promote dev → main (interactive confirmation, blocked until docs are ready) |

scripts/localpibox/stack/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@
2525
MIGRATE_KEEP,
2626
MEMORY_CONFIG_PATH,
2727
MEMORY_CONFIG_TEMPLATE,
28-
NPM_EXTENSION_PACKAGES,
2928
TAG_REPOS,
3029
VERSION_RE,
3130
WORKSPACE_REPOS,
3231
WORKSPACE_ROOT,
32+
git_extension_pin,
3333
migrate_legacy_layout,
3434
repo_path,
3535
stack_repos,
@@ -61,11 +61,11 @@
6161
"MIGRATE_KEEP",
6262
"MEMORY_CONFIG_PATH",
6363
"MEMORY_CONFIG_TEMPLATE",
64-
"NPM_EXTENSION_PACKAGES",
6564
"TAG_REPOS",
6665
"VERSION_RE",
6766
"WORKSPACE_REPOS",
6867
"WORKSPACE_ROOT",
68+
"git_extension_pin",
6969
"bump_version",
7070
"cmd_release_promote",
7171
"cmd_release_status",

0 commit comments

Comments
 (0)