Skip to content

Commit bca4b09

Browse files
committed
Merge remote-tracking branch 'origin/dev'
2 parents 050be6d + faf880a commit bca4b09

33 files changed

Lines changed: 752 additions & 478 deletions

.env.example

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,15 +70,16 @@ LPB_AGENT_BROWSER_IDLE_TIMEOUT_MS=300000
7070
# Response ceilings are per-model now — the `maxTokens` field in the
7171
# lemonade-pi-plugin model catalog (~/.pi/agent/model-params.json). The old
7272
# global LPB_MAX_TOKENS_CONTEXT_RATIO was retired 2026-09-02 (exact values
73-
# per model, no formula — see lemonade-pi-plugin/docs/qwen-thinking-
74-
# mainstream-pi.md §5.0).
73+
# per model, no formula — see the lemonade-pi-plugin README, "Model
74+
# parameters").
7575

7676
# Capture outgoing provider payloads (lemonade-pi-plugin) — ALL models.
7777
# 1 = the plugin logs one JSON line per request (tuned view for catalogued
7878
# models, raw view otherwise) to /tmp/pi-payload-capture.jsonl inside the
7979
# container. Used to verify exactly what goes over the wire.
80-
# See lemonade-pi-plugin/docs/qwen-thinking-mainstream-pi.md §5.0/§7.
81-
# LPB_PAYLOAD_DEBUG=1
80+
# Bare name on purpose: the plugin reads LEMONADE_PAYLOAD_DEBUG (the
81+
# LPB_→bare bridge would only produce PAYLOAD_DEBUG, which nothing reads).
82+
# LEMONADE_PAYLOAD_DEBUG=1
8283

8384
# SSH port for `lpb --ssh` (default: 2222)
8485
# LPB_SSH_PORT=2222

.githooks/pre-commit

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@
1313
# SKIP_TESTS=1 git commit ... — skip unit tests (~4s)
1414
# git commit --no-verify ... — skip everything
1515

16+
# In a linked worktree GIT_DIR is an ABSOLUTE path into the main repo's
17+
# .git/worktrees/<name> — it would leak into every `git -C` subprocess the
18+
# validate runs and poison the workspace checks (all repos would report
19+
# the worktree's HEAD). Re-derive from CWD instead. GIT_INDEX_FILE stays:
20+
# the staged-check below needs the commit's temporary index.
21+
unset GIT_DIR GIT_WORK_TREE
22+
1623
# Devstack's own tree: tracked changes must be STAGED — unstaged edits
1724
# would silently be missing from the commit being made right now.
1825
# (Untracked files are fine: new work-in-progress.)

.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: 20 additions & 12 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
@@ -262,8 +265,13 @@ Both tools are thin CLIs over the shared `scripts/localpibox/stack/` library
262265
6. `lpb-devstack validate` checks pins match the current stack version
263266
7. Persistent on the host volume — survives container rebuilds
264267

265-
Pins look like: `git:github.com/lpb-stack/pi-subagents@<VERSION>`
266-
(e.g. `...pi-subagents@0.0.N-lpb-dev`)
268+
Pins look like:
269+
- `git:github.com/lpb-stack/<repo>@<VERSION>` — stack-versioned fork
270+
extensions (lemonade-pi-plugin, lpb-memory), e.g. `...lpb-memory@0.0.N-lpb-dev`
271+
- `npm:@tintinweb/pi-subagents@<upstream-version>` — pi-subagents is pinned
272+
to the **upstream npm package** (fork retired); its version follows
273+
upstream releases, NOT the stack VERSION. Pin sync leaves it alone;
274+
`lpb-devstack validate` treats it as a presence-only check.
267275

268276
## lpb-memory Config Lifecycle
269277

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

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
# NOTE: Docker ARG values can't reference source'd shell variables.
3030
ARG NODE_VERSION=24
3131
ARG VSCODIUM_VERSION=1.126.04524
32-
ARG PI_VERSION=0.84.4
32+
ARG PI_VERSION=0.85.1
3333
ARG PI_HEAD_SHA=unknown
3434

3535
# Config preset repo — baked so start.sh clones the fork's config at boot.
@@ -51,7 +51,7 @@ FROM ubuntu:26.04 AS base
5151

5252
ARG NODE_VERSION
5353
ARG VSCODIUM_VERSION
54-
ARG PI_VERSION=0.84.4
54+
ARG PI_VERSION=0.85.1
5555
ARG PI_HEAD_SHA
5656
ARG CONFIG_FORK
5757
ARG CONFIG_REF

README.md

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,26 @@ optimized for Qwen models served locally through **Lemonade**, targeting
66
AMD Strix Halo hardware. No cloud LLM required; your code and data stay
77
on your machine.
88

9+
## What You Get
10+
11+
Everything below ships in the base image — no extra setup beyond the
12+
[Quick Start](#quick-start).
13+
14+
| Capability | What it means in practice |
15+
|---|---|
16+
| **Local inference, zero cloud** | All model calls go to the local Lemonade server (GGUF models, AMD Strix Halo optimized). Your code, data, and prompts never leave the machine. |
17+
| **Full coding agent** | Pi — foreground CLI, interactive shell, SSH login, or web; sessions, session tree, skills, prompt templates, themes. |
18+
| **Controlled thinking depth** | `/thinking` levels (off → high) with per-level budgets and per-model effort mapping; per-model parameters tunable live via `/lemonade tune`[Thinking Support](doc/thinking-support.md) |
19+
| **Vision** | Screenshots and visual page analysis by the local vision model — the agent can see webpages, UIs, and render output. |
20+
| **Persistent memory** | `lpb-memory` — durable memory plus cross-session conversation search; subagent and review results land back into it. |
21+
| **Subagents & orchestration** | Local-first subagent registry (subagents inherit your session model — no cloud defaults), parallel delegation, and workflow scripting. |
22+
| **Browser automation** | agent-browser + Chrome for Testing — navigation, form interaction, screenshots, vitals, accessibility checks, structured validation reports. |
23+
| **Web research** | Exa MCP (search + content fetch) and Context7 (version-specific library docs) as on-demand tools for the agent. |
24+
| **Web editor** | VSCodium over the OpenVSCode protocol — edit in any browser, token printed per launch (or pinned via `.env`). |
25+
| **Guided setup & health** | Interactive setup wizard on first run (server, key, model, MCP, memory) and `lpb doctor` / `lpb-config check` read-only validation, any time. |
26+
| **Multi-project & persistent** | One container per project; agent state, sessions, and memory survive image rebuilds; `lpb --update` self-updates launcher + image. |
27+
| **Reproducible releases** | Manual versioning, stable tags, a versioned docs site — every capability above is documented at its release version. |
28+
929
## Quick Start
1030

1131
### 1. Install the launcher (once)
@@ -73,7 +93,7 @@ lpb --help # full usage
7393
| **VSCodium** | Web-based editor (`:web` image), connects over the OpenVSCode protocol |
7494
| **lemonade-pi-plugin** (forked) | Model provider for the local **Lemonade** server — Qwen thinking + vision support |
7595
| **lpb-memory** | Persistent memory + session search for the agent |
76-
| **pi-subagents** (forked) | Local-first subagent model registry (no hardcoded cloud models) |
96+
| **pi-subagents** | Subagent model registry — upstream `tintinweb/pi-subagents` installed via npm (no hardcoded cloud models) |
7797
| **agent-browser** + Chrome | Browser automation tools for the agent |
7898
| **MCP servers** | Exa (web search), Context7 (library docs), agent-browser |
7999
| **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) |
@@ -199,9 +219,10 @@ flowchart TB
199219

200220
## Forked Repos & Upstream Policy
201221

202-
Pi itself is no longer a fork: the image installs mainstream pi from the
203-
npm registry at `LPB_PI_VERSION` (the `lpb-stack/pi` fork is retired — see
204-
[Fork improvements](doc/fork-improvements.md) for the retirement note).
222+
Pi itself is not a repo: the image installs mainstream pi from the npm
223+
registry at `LPB_PI_VERSION`. The only fork is `lemonade-pi-plugin`; retired
224+
forks and the full repo map are in
225+
[Repositories & Customizations](doc/fork-improvements.md).
205226

206227
The remaining fork URLs and branches are tracked in `lpb.stack.env` at the
207228
repo root. Each fork keeps its LocalPibox work as clean commits on top of
@@ -211,7 +232,7 @@ patch.
211232
| Repo | Upstream | LocalPibox work | Update policy |
212233
|---|---|---|---|
213234
| **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 |
235+
| **pi-subagents** | `tintinweb/pi-subagents` (upstream, npm) | installed from upstream npm — no local fork; subagent model registry | track upstream releases |
215236
| **lpb-memory** | *(independent project)* | Pi memory extension (subprocess reviews) | no upstream to track |
216237
| **config** / **devstack** || own | own |
217238

@@ -238,7 +259,7 @@ GitHub Actions (`.github/workflows/build-and-publish.yml`) runs on:
238259
Versioning is **manual**: `lpb-devstack bump` commits a new `VERSION`, and CI
239260
builds + tags only when VERSION changed in the pushed commit. Pipeline jobs:
240261
**VERSION check****test** (always) → **build & publish images**
241-
**tag repos** (CI tags the other 4 stack repos on their pipeline branches) →
262+
**tag repos** (CI tags the other 3 stack repos on their pipeline branches) →
242263
**docs publish** (main pipeline only — publishes the stable docs version,
243264
gated on the docs being flagged ready via `lpb-devstack release docs-ready`
244265
before promotion) → **status**. Devstack itself is tracked by its `VERSION`
@@ -315,5 +336,5 @@ devstack/
315336
- [lpb-stack/pi](https://github.com/lpb-stack/pi) — retired pi fork (reference only; last state `pre-defork-0.0.71`)
316337
- [lpb-stack/config](https://github.com/lpb-stack/config) — agent config preset
317338
- [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
339+
- [tintinweb/pi-subagents](https://github.com/tintinweb/pi-subagents) — subagent model registry (upstream, installed via npm; the `lpb-stack/pi-subagents` fork is retired)
319340
- [lpb-stack/lpb-memory](https://github.com/lpb-stack/lpb-memory) — persistent memory extension

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.0.77-lpb
1+
0.0.83-lpb-dev

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-
"git:github.com/lpb-stack/pi-subagents@0.0.N-lpb-dev",
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

0 commit comments

Comments
 (0)